From 22343cce3875173018a90ca8ec3b3070834aeac4 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 11 Jan 2013 15:43:04 +0000 Subject: [PATCH] Add initial files --- .gitignore | 3 + data/carla | 4 +- data/carla-control | 2 +- data/carla-standalone | 10 +- source/libs/Makefile | 62 + source/libs/jackbridge/Makefile | 51 + source/libs/jackbridge/jackbridge.c | 259 + source/libs/jackbridge/jackbridge.h | 111 + source/libs/lilv/Makefile | 96 + source/libs/lilv/config/lilv_config.h | 35 + source/libs/lilv/config/serd_config.h | 21 + source/libs/lilv/config/sord_config.h | 10 + source/libs/lilv/config/sratom_config.h | 11 + .../custom-patches/lilv_fix-mingw-build.patch | 20 + .../lilv_ui-features+lilvmm.patch | 137 + .../custom-patches/lilvmm_fix-leaks.patch | 11 + source/libs/lilv/lilv-0.14.4/AUTHORS | 8 + source/libs/lilv/lilv-0.14.4/COPYING | 13 + source/libs/lilv/lilv-0.14.4/INSTALL | 59 + source/libs/lilv/lilv-0.14.4/NEWS | 90 + source/libs/lilv/lilv-0.14.4/PACKAGING | 29 + source/libs/lilv/lilv-0.14.4/README | 11 + source/libs/lilv/lilv-0.14.4/bindings/lilv.i | 38 + .../lilv-0.14.4/bindings/python/lv2_apply.py | 96 + .../lilv-0.14.4/bindings/python/lv2_list.py | 9 + source/libs/lilv/lilv-0.14.4/doc/lv2info.1 | 33 + source/libs/lilv/lilv-0.14.4/doc/lv2ls.1 | 30 + .../lilv/lilv-0.14.4/doc/reference.doxygen.in | 1792 +++ source/libs/lilv/lilv-0.14.4/doc/style.css | 563 + source/libs/lilv/lilv-0.14.4/lilv.pc.in | 11 + source/libs/lilv/lilv-0.14.4/lilv.ttl | 29 + source/libs/lilv/lilv-0.14.4/lilv/lilv.h | 1723 +++ source/libs/lilv/lilv-0.14.4/lilv/lilvmm.hpp | 332 + .../libs/lilv/lilv-0.14.4/src/collections.c | 214 + source/libs/lilv/lilv-0.14.4/src/instance.c | 126 + source/libs/lilv/lilv-0.14.4/src/lib.c | 111 + .../libs/lilv/lilv-0.14.4/src/lilv_internal.h | 382 + source/libs/lilv/lilv-0.14.4/src/node.c | 396 + source/libs/lilv/lilv-0.14.4/src/plugin.c | 1077 ++ .../libs/lilv/lilv-0.14.4/src/pluginclass.c | 96 + source/libs/lilv/lilv-0.14.4/src/port.c | 264 + source/libs/lilv/lilv-0.14.4/src/query.c | 140 + source/libs/lilv/lilv-0.14.4/src/scalepoint.c | 52 + source/libs/lilv/lilv-0.14.4/src/state.c | 1097 ++ source/libs/lilv/lilv-0.14.4/src/ui.c | 184 + source/libs/lilv/lilv-0.14.4/src/util.c | 604 + source/libs/lilv/lilv-0.14.4/src/world.c | 822 ++ source/libs/lilv/lilv-0.14.4/src/zix/common.h | 88 + source/libs/lilv/lilv-0.14.4/src/zix/tree.c | 716 ++ source/libs/lilv/lilv-0.14.4/src/zix/tree.h | 148 + source/libs/lilv/lilv-0.14.4/test/lilv_test.c | 1581 +++ .../lilv/lilv-0.14.4/test/manifest.ttl.in | 7 + .../libs/lilv/lilv-0.14.4/test/test_plugin.c | 384 + .../lilv/lilv-0.14.4/test/test_plugin.ttl.in | 40 + source/libs/lilv/lilv-0.14.4/utils/bench.h | 52 + .../libs/lilv/lilv-0.14.4/utils/lilv-bench.c | 38 + .../lilv-0.14.4/utils/lilv.bash_completion | 59 + source/libs/lilv/lilv-0.14.4/utils/lv2bench.c | 226 + source/libs/lilv/lilv-0.14.4/utils/lv2info.c | 437 + source/libs/lilv/lilv-0.14.4/utils/lv2ls.c | 93 + .../libs/lilv/lilv-0.14.4/utils/uri_table.h | 73 + source/libs/lilv/lilv-0.14.4/waf | Bin 0 -> 72589 bytes source/libs/lilv/lilv-0.14.4/wscript | 378 + source/libs/lilv/lilv.c | 31 + source/libs/lilv/serd-0.18.2/AUTHORS | 1 + source/libs/lilv/serd-0.18.2/COPYING | 13 + source/libs/lilv/serd-0.18.2/INSTALL | 59 + source/libs/lilv/serd-0.18.2/NEWS | 98 + source/libs/lilv/serd-0.18.2/PACKAGING | 29 + source/libs/lilv/serd-0.18.2/README | 10 + source/libs/lilv/serd-0.18.2/doc/layout.xml | 187 + .../lilv/serd-0.18.2/doc/reference.doxygen.in | 1792 +++ source/libs/lilv/serd-0.18.2/doc/serdi.1 | 72 + source/libs/lilv/serd-0.18.2/doc/style.css | 563 + source/libs/lilv/serd-0.18.2/serd.pc.in | 10 + source/libs/lilv/serd-0.18.2/serd/serd.h | 963 ++ source/libs/lilv/serd-0.18.2/src/env.c | 271 + source/libs/lilv/serd-0.18.2/src/node.c | 347 + source/libs/lilv/serd-0.18.2/src/reader.c | 1585 +++ .../libs/lilv/serd-0.18.2/src/serd_internal.h | 306 + source/libs/lilv/serd-0.18.2/src/serdi.c | 253 + source/libs/lilv/serd-0.18.2/src/string.c | 165 + source/libs/lilv/serd-0.18.2/src/uri.c | 504 + source/libs/lilv/serd-0.18.2/src/writer.c | 807 ++ source/libs/lilv/serd-0.18.2/tests/README.txt | 20 + source/libs/lilv/serd-0.18.2/tests/UTF-8.ttl | 219 + source/libs/lilv/serd-0.18.2/tests/bad-00.ttl | 2 + source/libs/lilv/serd-0.18.2/tests/bad-01.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-02.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-03.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-04.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-05.ttl | 4 + source/libs/lilv/serd-0.18.2/tests/bad-06.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-07.ttl | 4 + source/libs/lilv/serd-0.18.2/tests/bad-08.ttl | 2 + source/libs/lilv/serd-0.18.2/tests/bad-09.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-10.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-11.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-12.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-13.ttl | 3 + source/libs/lilv/serd-0.18.2/tests/bad-14.ttl | 6 + .../libs/lilv/serd-0.18.2/tests/bad-base.ttl | 1 + .../libs/lilv/serd-0.18.2/tests/bad-blank.ttl | 3 + .../lilv/serd-0.18.2/tests/bad-datatype.ttl | 1 + .../serd-0.18.2/tests/bad-eof-in-blank.ttl | 3 + .../serd-0.18.2/tests/bad-eof-in-escape.ttl | 3 + .../tests/bad-eof-in-lang-suffix.ttl | 3 + .../serd-0.18.2/tests/bad-eof-in-lang.ttl | 3 + .../serd-0.18.2/tests/bad-eof-in-list.ttl | 3 + .../tests/bad-eof-in-object-list.ttl | 2 + .../tests/bad-eof-in-object-list2.ttl | 2 + .../tests/bad-eof-in-predicate-list.ttl | 2 + .../serd-0.18.2/tests/bad-eof-in-string.ttl | 3 + .../tests/bad-eof-in-triple-quote.ttl | 3 + .../lilv/serd-0.18.2/tests/bad-eof-in-uri.ttl | 3 + .../lilv/serd-0.18.2/tests/bad-escape.ttl | 1 + .../lilv/serd-0.18.2/tests/bad-hex-digit.ttl | 1 + .../lilv/serd-0.18.2/tests/bad-id-clash.ttl | 2 + .../libs/lilv/serd-0.18.2/tests/bad-lang.ttl | 1 + .../libs/lilv/serd-0.18.2/tests/bad-list.ttl | 1 + .../libs/lilv/serd-0.18.2/tests/bad-list2.ttl | 3 + .../lilv/serd-0.18.2/tests/bad-namespace.ttl | 1 + source/libs/lilv/serd-0.18.2/tests/bad-ns.ttl | 1 + .../libs/lilv/serd-0.18.2/tests/bad-num.ttl | 1 + .../lilv/serd-0.18.2/tests/bad-object.ttl | 3 + .../lilv/serd-0.18.2/tests/bad-object2.ttl | 3 + .../lilv/serd-0.18.2/tests/bad-prefix.ttl | 1 + .../lilv/serd-0.18.2/tests/bad-string.ttl | 1 + .../lilv/serd-0.18.2/tests/bad-uri-escape.ttl | 1 + .../libs/lilv/serd-0.18.2/tests/bad-verb.ttl | 2 + source/libs/lilv/serd-0.18.2/tests/base.out | 1 + source/libs/lilv/serd-0.18.2/tests/base.ttl | 2 + .../lilv/serd-0.18.2/tests/manifest-bad.ttl | 88 + .../libs/lilv/serd-0.18.2/tests/manifest.ttl | 215 + .../lilv/serd-0.18.2/tests/rdf-schema.out | 126 + .../lilv/serd-0.18.2/tests/rdf-schema.ttl | 156 + .../lilv/serd-0.18.2/tests/rdfq-results.out | 36 + .../lilv/serd-0.18.2/tests/rdfq-results.ttl | 39 + .../lilv/serd-0.18.2/tests/rdfs-namespace.out | 131 + .../lilv/serd-0.18.2/tests/rdfs-namespace.ttl | 160 + .../libs/lilv/serd-0.18.2/tests/serd_test.c | 630 + .../libs/lilv/serd-0.18.2/tests/test-00.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-00.ttl | 2 + .../libs/lilv/serd-0.18.2/tests/test-01.out | 3 + .../libs/lilv/serd-0.18.2/tests/test-01.ttl | 7 + .../libs/lilv/serd-0.18.2/tests/test-02.out | 3 + .../libs/lilv/serd-0.18.2/tests/test-02.ttl | 5 + .../libs/lilv/serd-0.18.2/tests/test-03.out | 3 + .../libs/lilv/serd-0.18.2/tests/test-03.ttl | 5 + .../libs/lilv/serd-0.18.2/tests/test-04.out | 2 + .../libs/lilv/serd-0.18.2/tests/test-04.ttl | 4 + .../libs/lilv/serd-0.18.2/tests/test-05.out | 4 + .../libs/lilv/serd-0.18.2/tests/test-05.ttl | 4 + .../libs/lilv/serd-0.18.2/tests/test-06.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-06.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-07.out | 5 + .../libs/lilv/serd-0.18.2/tests/test-07.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-08.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-08.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-09.out | 4 + .../libs/lilv/serd-0.18.2/tests/test-09.ttl | 10 + .../libs/lilv/serd-0.18.2/tests/test-10.out | 5 + .../libs/lilv/serd-0.18.2/tests/test-10.ttl | 5 + .../libs/lilv/serd-0.18.2/tests/test-11.out | 4 + .../libs/lilv/serd-0.18.2/tests/test-11.ttl | 10 + .../libs/lilv/serd-0.18.2/tests/test-12.out | 4 + .../libs/lilv/serd-0.18.2/tests/test-12.ttl | 9 + .../libs/lilv/serd-0.18.2/tests/test-13.out | 2 + .../libs/lilv/serd-0.18.2/tests/test-13.ttl | 7 + .../libs/lilv/serd-0.18.2/tests/test-14.out | 10000 +++++++++++++++ .../libs/lilv/serd-0.18.2/tests/test-14.ttl | 10002 ++++++++++++++++ .../libs/lilv/serd-0.18.2/tests/test-15.out | 10000 +++++++++++++++ .../libs/lilv/serd-0.18.2/tests/test-15.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-16.out | 10000 +++++++++++++++ .../libs/lilv/serd-0.18.2/tests/test-16.ttl | 10002 ++++++++++++++++ .../libs/lilv/serd-0.18.2/tests/test-17.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-17.ttl | 6 + .../libs/lilv/serd-0.18.2/tests/test-18.out | 2 + .../libs/lilv/serd-0.18.2/tests/test-18.ttl | 9 + .../libs/lilv/serd-0.18.2/tests/test-19.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-19.ttl | 4 + .../libs/lilv/serd-0.18.2/tests/test-20.out | 2 + .../libs/lilv/serd-0.18.2/tests/test-20.ttl | 6 + .../libs/lilv/serd-0.18.2/tests/test-21.out | 3 + .../libs/lilv/serd-0.18.2/tests/test-21.ttl | 4 + .../libs/lilv/serd-0.18.2/tests/test-22.out | 3 + .../libs/lilv/serd-0.18.2/tests/test-22.ttl | 4 + .../libs/lilv/serd-0.18.2/tests/test-23.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-23.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-24.out | 2 + .../libs/lilv/serd-0.18.2/tests/test-24.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-25.out | 7 + .../libs/lilv/serd-0.18.2/tests/test-25.ttl | 14 + .../libs/lilv/serd-0.18.2/tests/test-26.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-26.ttl | 4 + .../libs/lilv/serd-0.18.2/tests/test-27.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-27.ttl | 5 + .../libs/lilv/serd-0.18.2/tests/test-29.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-29.ttl | 1 + .../libs/lilv/serd-0.18.2/tests/test-30.out | 5 + .../libs/lilv/serd-0.18.2/tests/test-30.ttl | 12 + .../lilv/serd-0.18.2/tests/test-backspace.out | 2 + .../lilv/serd-0.18.2/tests/test-backspace.ttl | 2 + .../lilv/serd-0.18.2/tests/test-bad-utf8.out | 3 + .../lilv/serd-0.18.2/tests/test-bad-utf8.ttl | 3 + .../serd-0.18.2/tests/test-base-query.out | 1 + .../serd-0.18.2/tests/test-base-query.ttl | 3 + .../serd-0.18.2/tests/test-blank-cont.out | 4 + .../serd-0.18.2/tests/test-blank-cont.ttl | 4 + .../serd-0.18.2/tests/test-blank-in-list.out | 4 + .../serd-0.18.2/tests/test-blank-in-list.ttl | 2 + .../libs/lilv/serd-0.18.2/tests/test-bom.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-bom.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-cr.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-cr.ttl | 2 + .../lilv/serd-0.18.2/tests/test-delete.out | 2 + .../lilv/serd-0.18.2/tests/test-delete.ttl | 2 + .../tests/test-digit-start-pname.out | 1 + .../tests/test-digit-start-pname.ttl | 3 + .../tests/test-eof-at-page-end.out | 1 + .../tests/test-eof-at-page-end.ttl | 85 + .../lilv/serd-0.18.2/tests/test-escapes.out | 2 + .../lilv/serd-0.18.2/tests/test-escapes.ttl | 2 + .../libs/lilv/serd-0.18.2/tests/test-id.out | 2 + .../libs/lilv/serd-0.18.2/tests/test-id.ttl | 4 + .../libs/lilv/serd-0.18.2/tests/test-lang.out | 5 + .../libs/lilv/serd-0.18.2/tests/test-lang.ttl | 7 + .../serd-0.18.2/tests/test-list-in-blank.out | 6 + .../serd-0.18.2/tests/test-list-in-blank.ttl | 2 + .../serd-0.18.2/tests/test-list-subject.out | 6 + .../serd-0.18.2/tests/test-list-subject.ttl | 2 + .../libs/lilv/serd-0.18.2/tests/test-list.out | 1 + .../libs/lilv/serd-0.18.2/tests/test-list.ttl | 1 + .../serd-0.18.2/tests/test-long-string.out | 1 + .../serd-0.18.2/tests/test-long-string.ttl | 7 + .../lilv/serd-0.18.2/tests/test-no-spaces.out | 4 + .../lilv/serd-0.18.2/tests/test-no-spaces.ttl | 3 + .../libs/lilv/serd-0.18.2/tests/test-num.out | 10 + .../libs/lilv/serd-0.18.2/tests/test-num.ttl | 12 + .../tests/test-out-of-range-unicode.out | 1 + .../tests/test-out-of-range-unicode.ttl | 1 + .../lilv/serd-0.18.2/tests/test-prefix.out | 6 + .../lilv/serd-0.18.2/tests/test-prefix.ttl | 8 + .../lilv/serd-0.18.2/tests/test-pretty.out | 46 + .../lilv/serd-0.18.2/tests/test-pretty.ttl | 44 + .../libs/lilv/serd-0.18.2/tests/test-rel.out | 6 + .../libs/lilv/serd-0.18.2/tests/test-rel.ttl | 6 + .../lilv/serd-0.18.2/tests/test-semi-dot.out | 1 + .../lilv/serd-0.18.2/tests/test-semi-dot.ttl | 1 + .../libs/lilv/serd-0.18.2/tests/test-uri.out | 45 + .../libs/lilv/serd-0.18.2/tests/test-uri.ttl | 68 + .../lilv/serd-0.18.2/tests/test-utf8-uri.out | 1 + .../lilv/serd-0.18.2/tests/test-utf8-uri.ttl | 1 + source/libs/lilv/serd-0.18.2/waf | Bin 0 -> 80004 bytes source/libs/lilv/serd-0.18.2/wscript | 391 + source/libs/lilv/serd.c | 23 + source/libs/lilv/sord-0.10.4/AUTHORS | 1 + source/libs/lilv/sord-0.10.4/COPYING | 13 + source/libs/lilv/sord-0.10.4/INSTALL | 59 + source/libs/lilv/sord-0.10.4/NEWS | 68 + source/libs/lilv/sord-0.10.4/PACKAGING | 29 + source/libs/lilv/sord-0.10.4/README | 9 + source/libs/lilv/sord-0.10.4/doc/layout.xml | 187 + .../lilv/sord-0.10.4/doc/reference.doxygen.in | 1792 +++ .../libs/lilv/sord-0.10.4/doc/sord_validate.1 | 57 + source/libs/lilv/sord-0.10.4/doc/sordi.1 | 43 + source/libs/lilv/sord-0.10.4/doc/style.css | 563 + .../lilv/sord-0.10.4/sord-0.10.4.tar.bz2.sig | Bin 0 -> 543 bytes source/libs/lilv/sord-0.10.4/sord.pc.in | 11 + source/libs/lilv/sord-0.10.4/sord/sord.h | 613 + source/libs/lilv/sord-0.10.4/sord/sordmm.hpp | 602 + source/libs/lilv/sord-0.10.4/src/sord.c | 1236 ++ .../libs/lilv/sord-0.10.4/src/sord_internal.h | 46 + source/libs/lilv/sord-0.10.4/src/sord_test.c | 535 + .../libs/lilv/sord-0.10.4/src/sord_validate.c | 550 + source/libs/lilv/sord-0.10.4/src/sordi.c | 215 + .../libs/lilv/sord-0.10.4/src/sordmm_test.cpp | 25 + source/libs/lilv/sord-0.10.4/src/syntax.c | 205 + source/libs/lilv/sord-0.10.4/src/zix/common.h | 88 + source/libs/lilv/sord-0.10.4/src/zix/digest.c | 57 + source/libs/lilv/sord-0.10.4/src/zix/digest.h | 39 + source/libs/lilv/sord-0.10.4/src/zix/hash.c | 228 + source/libs/lilv/sord-0.10.4/src/zix/hash.h | 140 + source/libs/lilv/sord-0.10.4/src/zix/tree.c | 716 ++ source/libs/lilv/sord-0.10.4/src/zix/tree.h | 148 + source/libs/lilv/sord-0.10.4/tests/README.txt | 20 + source/libs/lilv/sord-0.10.4/tests/UTF-8.ttl | 219 + .../libs/lilv/sord-0.10.4/tests/manifest.ttl | 215 + .../lilv/sord-0.10.4/tests/rdf-schema.out | 126 + .../lilv/sord-0.10.4/tests/rdf-schema.ttl | 156 + .../lilv/sord-0.10.4/tests/rdfq-results.out | 36 + .../lilv/sord-0.10.4/tests/rdfq-results.ttl | 39 + .../lilv/sord-0.10.4/tests/rdfs-namespace.out | 131 + .../lilv/sord-0.10.4/tests/rdfs-namespace.ttl | 160 + .../libs/lilv/sord-0.10.4/tests/test-00.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-00.ttl | 2 + .../libs/lilv/sord-0.10.4/tests/test-01.out | 3 + .../libs/lilv/sord-0.10.4/tests/test-01.ttl | 7 + .../libs/lilv/sord-0.10.4/tests/test-02.out | 3 + .../libs/lilv/sord-0.10.4/tests/test-02.ttl | 5 + .../libs/lilv/sord-0.10.4/tests/test-03.out | 3 + .../libs/lilv/sord-0.10.4/tests/test-03.ttl | 5 + .../libs/lilv/sord-0.10.4/tests/test-04.out | 2 + .../libs/lilv/sord-0.10.4/tests/test-04.ttl | 4 + .../libs/lilv/sord-0.10.4/tests/test-05.out | 4 + .../libs/lilv/sord-0.10.4/tests/test-05.ttl | 4 + .../libs/lilv/sord-0.10.4/tests/test-06.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-06.ttl | 3 + .../libs/lilv/sord-0.10.4/tests/test-07.out | 5 + .../libs/lilv/sord-0.10.4/tests/test-07.ttl | 3 + .../libs/lilv/sord-0.10.4/tests/test-08.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-08.ttl | 3 + .../libs/lilv/sord-0.10.4/tests/test-09.out | 4 + .../libs/lilv/sord-0.10.4/tests/test-09.ttl | 10 + .../libs/lilv/sord-0.10.4/tests/test-10.out | 5 + .../libs/lilv/sord-0.10.4/tests/test-10.ttl | 5 + .../libs/lilv/sord-0.10.4/tests/test-11.out | 4 + .../libs/lilv/sord-0.10.4/tests/test-11.ttl | 10 + .../libs/lilv/sord-0.10.4/tests/test-12.out | 4 + .../libs/lilv/sord-0.10.4/tests/test-12.ttl | 9 + .../libs/lilv/sord-0.10.4/tests/test-13.out | 2 + .../libs/lilv/sord-0.10.4/tests/test-13.ttl | 7 + .../libs/lilv/sord-0.10.4/tests/test-14.out | 10000 +++++++++++++++ .../libs/lilv/sord-0.10.4/tests/test-14.ttl | 10002 ++++++++++++++++ .../libs/lilv/sord-0.10.4/tests/test-15.out | 10000 +++++++++++++++ .../libs/lilv/sord-0.10.4/tests/test-15.ttl | 3 + .../libs/lilv/sord-0.10.4/tests/test-16.out | 10000 +++++++++++++++ .../libs/lilv/sord-0.10.4/tests/test-16.ttl | 10002 ++++++++++++++++ .../libs/lilv/sord-0.10.4/tests/test-17.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-17.ttl | 6 + .../libs/lilv/sord-0.10.4/tests/test-18.out | 2 + .../libs/lilv/sord-0.10.4/tests/test-18.ttl | 9 + .../libs/lilv/sord-0.10.4/tests/test-19.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-19.ttl | 4 + .../libs/lilv/sord-0.10.4/tests/test-20.out | 2 + .../libs/lilv/sord-0.10.4/tests/test-20.ttl | 6 + .../libs/lilv/sord-0.10.4/tests/test-21.out | 3 + .../libs/lilv/sord-0.10.4/tests/test-21.ttl | 4 + .../libs/lilv/sord-0.10.4/tests/test-22.out | 3 + .../libs/lilv/sord-0.10.4/tests/test-22.ttl | 4 + .../libs/lilv/sord-0.10.4/tests/test-23.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-23.ttl | 3 + .../libs/lilv/sord-0.10.4/tests/test-24.out | 2 + .../libs/lilv/sord-0.10.4/tests/test-24.ttl | 3 + .../libs/lilv/sord-0.10.4/tests/test-25.out | 7 + .../libs/lilv/sord-0.10.4/tests/test-25.ttl | 14 + .../libs/lilv/sord-0.10.4/tests/test-26.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-26.ttl | 4 + .../libs/lilv/sord-0.10.4/tests/test-27.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-27.ttl | 5 + .../libs/lilv/sord-0.10.4/tests/test-29.out | 1 + .../libs/lilv/sord-0.10.4/tests/test-29.ttl | 1 + .../libs/lilv/sord-0.10.4/tests/test-30.out | 5 + .../libs/lilv/sord-0.10.4/tests/test-30.ttl | 12 + .../libs/lilv/sord-0.10.4/tests/test-id.out | 2 + .../libs/lilv/sord-0.10.4/tests/test-id.ttl | 4 + .../libs/lilv/sord-0.10.4/tests/test-lang.out | 4 + .../libs/lilv/sord-0.10.4/tests/test-lang.ttl | 6 + .../libs/lilv/sord-0.10.4/tests/test-num.out | 9 + .../libs/lilv/sord-0.10.4/tests/test-num.ttl | 11 + source/libs/lilv/sord-0.10.4/waf | Bin 0 -> 73024 bytes source/libs/lilv/sord-0.10.4/wscript | 302 + source/libs/lilv/sord.c | 19 + source/libs/lilv/sratom-0.4.0/COPYING | 13 + source/libs/lilv/sratom-0.4.0/NEWS | 16 + source/libs/lilv/sratom-0.4.0/README | 11 + .../sratom-0.4.0/doc/reference.doxygen.in | 1792 +++ source/libs/lilv/sratom-0.4.0/doc/style.css | 563 + source/libs/lilv/sratom-0.4.0/sratom.pc.in | 11 + source/libs/lilv/sratom-0.4.0/sratom/sratom.h | 217 + source/libs/lilv/sratom-0.4.0/src/sratom.c | 790 ++ .../lilv/sratom-0.4.0/tests/sratom_test.c | 292 + source/libs/lilv/sratom-0.4.0/waf | Bin 0 -> 72589 bytes source/libs/lilv/sratom-0.4.0/wscript | 168 + source/libs/lilv/sratom.c | 18 + source/libs/rtmempool/Makefile | 74 + source/libs/rtmempool/list.h | 872 ++ source/libs/rtmempool/log.h | 4 + source/libs/rtmempool/rtmempool.c | 397 + source/libs/rtmempool/rtmempool.h | 41 + 380 files changed, 141911 insertions(+), 8 deletions(-) create mode 100644 source/libs/Makefile create mode 100644 source/libs/jackbridge/Makefile create mode 100644 source/libs/jackbridge/jackbridge.c create mode 100644 source/libs/jackbridge/jackbridge.h create mode 100644 source/libs/lilv/Makefile create mode 100644 source/libs/lilv/config/lilv_config.h create mode 100644 source/libs/lilv/config/serd_config.h create mode 100644 source/libs/lilv/config/sord_config.h create mode 100644 source/libs/lilv/config/sratom_config.h create mode 100644 source/libs/lilv/custom-patches/lilv_fix-mingw-build.patch create mode 100644 source/libs/lilv/custom-patches/lilv_ui-features+lilvmm.patch create mode 100644 source/libs/lilv/custom-patches/lilvmm_fix-leaks.patch create mode 100644 source/libs/lilv/lilv-0.14.4/AUTHORS create mode 100644 source/libs/lilv/lilv-0.14.4/COPYING create mode 100644 source/libs/lilv/lilv-0.14.4/INSTALL create mode 100644 source/libs/lilv/lilv-0.14.4/NEWS create mode 100644 source/libs/lilv/lilv-0.14.4/PACKAGING create mode 100644 source/libs/lilv/lilv-0.14.4/README create mode 100644 source/libs/lilv/lilv-0.14.4/bindings/lilv.i create mode 100755 source/libs/lilv/lilv-0.14.4/bindings/python/lv2_apply.py create mode 100755 source/libs/lilv/lilv-0.14.4/bindings/python/lv2_list.py create mode 100644 source/libs/lilv/lilv-0.14.4/doc/lv2info.1 create mode 100644 source/libs/lilv/lilv-0.14.4/doc/lv2ls.1 create mode 100644 source/libs/lilv/lilv-0.14.4/doc/reference.doxygen.in create mode 100644 source/libs/lilv/lilv-0.14.4/doc/style.css create mode 100644 source/libs/lilv/lilv-0.14.4/lilv.pc.in create mode 100644 source/libs/lilv/lilv-0.14.4/lilv.ttl create mode 100644 source/libs/lilv/lilv-0.14.4/lilv/lilv.h create mode 100644 source/libs/lilv/lilv-0.14.4/lilv/lilvmm.hpp create mode 100644 source/libs/lilv/lilv-0.14.4/src/collections.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/instance.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/lib.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/lilv_internal.h create mode 100644 source/libs/lilv/lilv-0.14.4/src/node.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/plugin.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/pluginclass.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/port.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/query.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/scalepoint.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/state.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/ui.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/util.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/world.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/zix/common.h create mode 100644 source/libs/lilv/lilv-0.14.4/src/zix/tree.c create mode 100644 source/libs/lilv/lilv-0.14.4/src/zix/tree.h create mode 100644 source/libs/lilv/lilv-0.14.4/test/lilv_test.c create mode 100644 source/libs/lilv/lilv-0.14.4/test/manifest.ttl.in create mode 100644 source/libs/lilv/lilv-0.14.4/test/test_plugin.c create mode 100644 source/libs/lilv/lilv-0.14.4/test/test_plugin.ttl.in create mode 100644 source/libs/lilv/lilv-0.14.4/utils/bench.h create mode 100644 source/libs/lilv/lilv-0.14.4/utils/lilv-bench.c create mode 100644 source/libs/lilv/lilv-0.14.4/utils/lilv.bash_completion create mode 100644 source/libs/lilv/lilv-0.14.4/utils/lv2bench.c create mode 100644 source/libs/lilv/lilv-0.14.4/utils/lv2info.c create mode 100644 source/libs/lilv/lilv-0.14.4/utils/lv2ls.c create mode 100644 source/libs/lilv/lilv-0.14.4/utils/uri_table.h create mode 100755 source/libs/lilv/lilv-0.14.4/waf create mode 100644 source/libs/lilv/lilv-0.14.4/wscript create mode 100644 source/libs/lilv/lilv.c create mode 100644 source/libs/lilv/serd-0.18.2/AUTHORS create mode 100644 source/libs/lilv/serd-0.18.2/COPYING create mode 100644 source/libs/lilv/serd-0.18.2/INSTALL create mode 100644 source/libs/lilv/serd-0.18.2/NEWS create mode 100644 source/libs/lilv/serd-0.18.2/PACKAGING create mode 100644 source/libs/lilv/serd-0.18.2/README create mode 100644 source/libs/lilv/serd-0.18.2/doc/layout.xml create mode 100644 source/libs/lilv/serd-0.18.2/doc/reference.doxygen.in create mode 100644 source/libs/lilv/serd-0.18.2/doc/serdi.1 create mode 100644 source/libs/lilv/serd-0.18.2/doc/style.css create mode 100644 source/libs/lilv/serd-0.18.2/serd.pc.in create mode 100644 source/libs/lilv/serd-0.18.2/serd/serd.h create mode 100644 source/libs/lilv/serd-0.18.2/src/env.c create mode 100644 source/libs/lilv/serd-0.18.2/src/node.c create mode 100644 source/libs/lilv/serd-0.18.2/src/reader.c create mode 100644 source/libs/lilv/serd-0.18.2/src/serd_internal.h create mode 100644 source/libs/lilv/serd-0.18.2/src/serdi.c create mode 100644 source/libs/lilv/serd-0.18.2/src/string.c create mode 100644 source/libs/lilv/serd-0.18.2/src/uri.c create mode 100644 source/libs/lilv/serd-0.18.2/src/writer.c create mode 100644 source/libs/lilv/serd-0.18.2/tests/README.txt create mode 100644 source/libs/lilv/serd-0.18.2/tests/UTF-8.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-00.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-01.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-02.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-03.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-04.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-05.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-06.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-07.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-08.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-09.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-10.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-11.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-12.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-13.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-14.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-base.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-blank.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-datatype.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-blank.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-escape.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang-suffix.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-list.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list2.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-predicate-list.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-string.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-triple-quote.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-eof-in-uri.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-escape.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-hex-digit.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-id-clash.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-lang.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-list.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-list2.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-namespace.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-ns.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-num.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-object.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-object2.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-prefix.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-string.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-uri-escape.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/bad-verb.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/base.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/base.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/manifest-bad.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/manifest.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/rdf-schema.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/rdf-schema.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/rdfq-results.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/rdfq-results.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/serd_test.c create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-00.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-00.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-01.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-01.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-02.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-02.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-03.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-03.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-04.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-04.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-05.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-05.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-06.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-06.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-07.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-07.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-08.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-08.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-09.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-09.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-10.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-10.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-11.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-11.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-12.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-12.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-13.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-13.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-14.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-14.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-15.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-15.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-16.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-16.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-17.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-17.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-18.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-18.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-19.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-19.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-20.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-20.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-21.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-21.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-22.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-22.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-23.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-23.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-24.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-24.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-25.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-25.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-26.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-26.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-27.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-27.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-29.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-29.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-30.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-30.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-backspace.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-backspace.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-base-query.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-base-query.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-blank-cont.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-blank-cont.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-bom.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-bom.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-cr.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-cr.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-delete.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-delete.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-escapes.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-escapes.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-id.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-id.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-lang.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-lang.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-list-subject.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-list-subject.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-list.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-list.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-long-string.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-long-string.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-no-spaces.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-no-spaces.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-num.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-num.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-prefix.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-prefix.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-pretty.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-pretty.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-rel.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-rel.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-semi-dot.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-semi-dot.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-uri.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-uri.ttl create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.out create mode 100644 source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.ttl create mode 100755 source/libs/lilv/serd-0.18.2/waf create mode 100644 source/libs/lilv/serd-0.18.2/wscript create mode 100644 source/libs/lilv/serd.c create mode 100644 source/libs/lilv/sord-0.10.4/AUTHORS create mode 100644 source/libs/lilv/sord-0.10.4/COPYING create mode 100644 source/libs/lilv/sord-0.10.4/INSTALL create mode 100644 source/libs/lilv/sord-0.10.4/NEWS create mode 100644 source/libs/lilv/sord-0.10.4/PACKAGING create mode 100644 source/libs/lilv/sord-0.10.4/README create mode 100644 source/libs/lilv/sord-0.10.4/doc/layout.xml create mode 100644 source/libs/lilv/sord-0.10.4/doc/reference.doxygen.in create mode 100644 source/libs/lilv/sord-0.10.4/doc/sord_validate.1 create mode 100644 source/libs/lilv/sord-0.10.4/doc/sordi.1 create mode 100644 source/libs/lilv/sord-0.10.4/doc/style.css create mode 100644 source/libs/lilv/sord-0.10.4/sord-0.10.4.tar.bz2.sig create mode 100644 source/libs/lilv/sord-0.10.4/sord.pc.in create mode 100644 source/libs/lilv/sord-0.10.4/sord/sord.h create mode 100644 source/libs/lilv/sord-0.10.4/sord/sordmm.hpp create mode 100644 source/libs/lilv/sord-0.10.4/src/sord.c create mode 100644 source/libs/lilv/sord-0.10.4/src/sord_internal.h create mode 100644 source/libs/lilv/sord-0.10.4/src/sord_test.c create mode 100644 source/libs/lilv/sord-0.10.4/src/sord_validate.c create mode 100644 source/libs/lilv/sord-0.10.4/src/sordi.c create mode 100644 source/libs/lilv/sord-0.10.4/src/sordmm_test.cpp create mode 100644 source/libs/lilv/sord-0.10.4/src/syntax.c create mode 100644 source/libs/lilv/sord-0.10.4/src/zix/common.h create mode 100644 source/libs/lilv/sord-0.10.4/src/zix/digest.c create mode 100644 source/libs/lilv/sord-0.10.4/src/zix/digest.h create mode 100644 source/libs/lilv/sord-0.10.4/src/zix/hash.c create mode 100644 source/libs/lilv/sord-0.10.4/src/zix/hash.h create mode 100644 source/libs/lilv/sord-0.10.4/src/zix/tree.c create mode 100644 source/libs/lilv/sord-0.10.4/src/zix/tree.h create mode 100644 source/libs/lilv/sord-0.10.4/tests/README.txt create mode 100644 source/libs/lilv/sord-0.10.4/tests/UTF-8.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/manifest.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/rdf-schema.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/rdf-schema.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/rdfq-results.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/rdfq-results.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-00.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-00.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-01.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-01.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-02.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-02.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-03.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-03.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-04.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-04.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-05.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-05.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-06.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-06.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-07.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-07.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-08.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-08.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-09.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-09.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-10.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-10.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-11.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-11.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-12.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-12.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-13.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-13.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-14.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-14.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-15.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-15.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-16.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-16.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-17.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-17.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-18.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-18.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-19.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-19.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-20.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-20.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-21.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-21.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-22.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-22.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-23.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-23.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-24.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-24.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-25.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-25.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-26.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-26.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-27.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-27.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-29.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-29.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-30.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-30.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-id.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-id.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-lang.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-lang.ttl create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-num.out create mode 100644 source/libs/lilv/sord-0.10.4/tests/test-num.ttl create mode 100755 source/libs/lilv/sord-0.10.4/waf create mode 100644 source/libs/lilv/sord-0.10.4/wscript create mode 100644 source/libs/lilv/sord.c create mode 100644 source/libs/lilv/sratom-0.4.0/COPYING create mode 100644 source/libs/lilv/sratom-0.4.0/NEWS create mode 100644 source/libs/lilv/sratom-0.4.0/README create mode 100644 source/libs/lilv/sratom-0.4.0/doc/reference.doxygen.in create mode 100644 source/libs/lilv/sratom-0.4.0/doc/style.css create mode 100644 source/libs/lilv/sratom-0.4.0/sratom.pc.in create mode 100644 source/libs/lilv/sratom-0.4.0/sratom/sratom.h create mode 100644 source/libs/lilv/sratom-0.4.0/src/sratom.c create mode 100644 source/libs/lilv/sratom-0.4.0/tests/sratom_test.c create mode 100755 source/libs/lilv/sratom-0.4.0/waf create mode 100644 source/libs/lilv/sratom-0.4.0/wscript create mode 100644 source/libs/lilv/sratom.c create mode 100644 source/libs/rtmempool/Makefile create mode 100644 source/libs/rtmempool/list.h create mode 100644 source/libs/rtmempool/log.h create mode 100644 source/libs/rtmempool/rtmempool.c create mode 100644 source/libs/rtmempool/rtmempool.h diff --git a/.gitignore b/.gitignore index a75d8cdbd..7a507360b 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,6 @@ c++/carla-native/zynaddsubfx/UI/SUBnoteUI.cc c++/carla-native/zynaddsubfx/UI/SUBnoteUI.h c++/carla-native/zynaddsubfx/UI/VirKeyboard.cc c++/carla-native/zynaddsubfx/UI/VirKeyboard.h + +# Other +libs/jackbridge/jack/ diff --git a/data/carla b/data/carla index 5ea5e7d68..2a6391664 100755 --- a/data/carla +++ b/data/carla @@ -7,5 +7,5 @@ else fi INSTALL_PREFIX="X-PREFIX-X" -export PATH="$INSTALL_PREFIX"/lib/cadence:$PATH -exec $PYTHON $INSTALL_PREFIX/share/cadence/src/carla.py --with-libprefix="$INSTALL_PREFIX" "$@" +export PATH="$INSTALL_PREFIX"/lib/carla:$PATH +exec $PYTHON $INSTALL_PREFIX/share/carla/carla.py --with-libprefix="$INSTALL_PREFIX" "$@" diff --git a/data/carla-control b/data/carla-control index 3276281f7..34bf89b55 100755 --- a/data/carla-control +++ b/data/carla-control @@ -7,4 +7,4 @@ else fi INSTALL_PREFIX="X-PREFIX-X" -exec $PYTHON $INSTALL_PREFIX/share/cadence/src/carla_control.py "$@" +exec $PYTHON $INSTALL_PREFIX/share/carla/carla_control.py "$@" diff --git a/data/carla-standalone b/data/carla-standalone index d15e781b6..0ed2ae895 100755 --- a/data/carla-standalone +++ b/data/carla-standalone @@ -2,7 +2,7 @@ # Script to start Carla bridges INSTALL_PREFIX="X-PREFIX-X" -CADENCE_PREFIX="$INSTALL_PREFIX"/lib/cadence +CARLA_PREFIX="$INSTALL_PREFIX"/lib/carla # ---------------------------------------------------------------------- # Check for enough arguments @@ -58,17 +58,17 @@ if [ $RUN_ARCH == "win64" ]; then fi # ---------------------------------------------------------------------- -# Check for existing cadence folder +# Check for existing carla folder -if [ ! -d $CADENCE_PREFIX ]; then - echo "$0: Cadence folder non-existing, is it installed?" +if [ ! -d $CARLA_PREFIX ]; then + echo "$0: Carla folder does not exist, is it installed?" exit fi # ---------------------------------------------------------------------- # Check for existing arch binary -CARLA_EXEC="$CADENCE_PREFIX/carla-bridge-$RUN_ARCH" +CARLA_EXEC="$CARLA_PREFIX/carla-bridge-$RUN_ARCH" if [ ! -f $CARLA_EXEC ]; then echo "$0: Invalid arch (may not be installed)" diff --git a/source/libs/Makefile b/source/libs/Makefile new file mode 100644 index 000000000..5fde88858 --- /dev/null +++ b/source/libs/Makefile @@ -0,0 +1,62 @@ +#!/usr/bin/make -f +# Makefile for carla libs # +# ----------------------------------------- # +# Created by falkTX +# + +all: + +# -------------------------------------------------------------- + +jackbridge-win32.dll: + $(MAKE) -C jackbridge win32 + +jackbridge-win64.dll: + $(MAKE) -C jackbridge win64 + +jackbridge-win32.dll.so: + $(MAKE) -C jackbridge wine32 + +jackbridge-win64.dll.so: + $(MAKE) -C jackbridge wine64 + +# -------------------------------------------------------------- + +lilv.a: + $(MAKE) -C lilv + +lilv_posix32.a: + $(MAKE) -C lilv posix32 + +lilv_posix64.a: + $(MAKE) -C lilv posix64 + +lilv_win32.a: + $(MAKE) -C lilv win32 + +lilv_win64.a: + $(MAKE) -C lilv win64 + +# -------------------------------------------------------------- + +rtmempool.a: + $(MAKE) -C rtmempool + +rtmempool_posix32.a: + $(MAKE) -C rtmempool posix32 + +rtmempool_posix64.a: + $(MAKE) -C rtmempool posix64 + +rtmempool_win32.a: + $(MAKE) -C rtmempool win32 + +rtmempool_win64.a: + $(MAKE) -C rtmempool win64 + +# -------------------------------------------------------------- + +clean: + rm -f *.a *.def *.dll *.so + $(MAKE) clean -C lilv + $(MAKE) clean -C rtmempool diff --git a/source/libs/jackbridge/Makefile b/source/libs/jackbridge/Makefile new file mode 100644 index 000000000..8bd7e0f30 --- /dev/null +++ b/source/libs/jackbridge/Makefile @@ -0,0 +1,51 @@ +#!/usr/bin/make -f +# Makefile for jackbridge # +# ------------------------------------- # +# Created by falkTX +# + +include ../../Makefile.mk + +# -------------------------------------------------------------- + +WINECC ?= winegcc + +BUILD_C_FLAGS += -DJACKBRIDGE_EXPORT -I. +LINK_FLAGS += -shared + +WIN_BUILD_FLAGS = $(BUILD_C_FLAGS) -DJACKBRIDGE_DUMMY -w +WIN_32BIT_FLAGS = $(32BIT_FLAGS) +WIN_64BIT_FLAGS = $(64BIT_FLAGS) +WIN_LINK_FLAGS = $(LINK_FLAGS) + +WINE_BUILD_FLAGS = $(BUILD_C_FLAGS) -fPIC +WINE_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32/wine -L/usr/lib/i386-linux-gnu/wine +WINE_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64/wine -L/usr/lib/x86_64-linux-gnu/wine +WINE_LINK_FLAGS = $(LINK_FLAGS) $(shell pkg-config --libs jack) -ldl + +OBJS = jackbridge.c + +# -------------------------------------------------------------- + +all: + +win32: ../jackbridge-win32.dll +win64: ../jackbridge-win64.dll +wine32: ../jackbridge-win32.dll.so +wine64: ../jackbridge-win64.dll.so + +# -------------------------------------------------------------- + +../jackbridge-win32.dll: $(OBJS) + $(CC) $^ $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) $(WIN_LINK_FLAGS) -Wl,--output-def,$@.def,--out-implib,$@.a -o $@ && $(STRIP) $@ + +../jackbridge-win64.dll: $(OBJS) + $(CC) $^ $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) $(WIN_LINK_FLAGS) -Wl,--output-def,$@.def,--out-implib,$@.a -o $@ && $(STRIP) $@ + +../jackbridge-win32.dll.so: $(OBJS) ../jackbridge-win32.dll.def + $(WINECC) $^ $(WINE_BUILD_FLAGS) $(WINE_32BIT_FLAGS) $(WINE_LINK_FLAGS) -mno-cygwin -o $@ && $(STRIP) $@ + +../jackbridge-win64.dll.so: $(OBJS) ../jackbridge-win64.dll.def + $(WINECC) $^ $(WINE_BUILD_FLAGS) $(WINE_64BIT_FLAGS) $(WINE_LINK_FLAGS) -mno-cygwin -o $@ && $(STRIP) $@ + +# -------------------------------------------------------------- diff --git a/source/libs/jackbridge/jackbridge.c b/source/libs/jackbridge/jackbridge.c new file mode 100644 index 000000000..a934892cc --- /dev/null +++ b/source/libs/jackbridge/jackbridge.c @@ -0,0 +1,259 @@ +/* + * JackBridge + * Copyright (C) 2013 Filipe Coelho + * + * 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 + * 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. + * + * For a full copy of the GNU General Public License see the COPYING file + */ + +#include "jackbridge.h" + +// ----------------------------------------------------------------------------- + +jack_client_t* jackbridge_client_open(const char* client_name, jack_options_t options, jack_status_t* status, ...) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_client_open(client_name, options, status); +#else + return NULL; +#endif +} + +int jackbridge_client_close(jack_client_t* client) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_client_close(client); +#else + return 0; +#endif +} + +int jackbridge_client_name_size() +{ +#ifndef JACKBRIDGE_DUMMY + return jack_client_name_size(); +#else + return 0; +#endif +} + +char* jackbridge_get_client_name(jack_client_t* client) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_get_client_name(client); +#else + return NULL; +#endif +} + +int jackbridge_port_name_size() +{ +#ifndef JACKBRIDGE_DUMMY + return jack_port_name_size(); +#else + return 0; +#endif +} + +int jackbridge_recompute_total_latencies(jack_client_t* client) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_recompute_total_latencies(client); +#else + return 0; +#endif +} + +void jackbridge_port_get_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range) +{ +#ifndef JACKBRIDGE_DUMMY + jack_port_get_latency_range(port, mode, range); +#endif +} + +void jackbridge_port_set_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range) +{ +#ifndef JACKBRIDGE_DUMMY + jack_port_set_latency_range(port, mode, range); +#endif +} + +int jackbridge_activate(jack_client_t* client) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_activate(client); +#else + return 0; +#endif +} + +int jackbridge_deactivate(jack_client_t* client) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_deactivate(client); +#else + return 0; +#endif +} + +void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg) +{ +#ifndef JACKBRIDGE_DUMMY + jack_on_shutdown(client, shutdown_callback, arg); +#endif +} + +int jackbridge_set_latency_callback(jack_client_t* client, JackLatencyCallback latency_callback, void* arg) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_set_latency_callback(client, latency_callback, arg); +#else + return 0; +#endif +} + +int jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_set_process_callback(client, process_callback, arg); +#else + return 0; +#endif +} + +int jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_set_freewheel_callback(client, freewheel_callback, arg); +#else + return 0; +#endif +} + +int jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCallback bufsize_callback, void* arg) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_set_buffer_size_callback(client, bufsize_callback, arg); +#else + return 0; +#endif +} + +int jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCallback srate_callback, void* arg) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_set_sample_rate_callback(client, srate_callback, arg); +#else + return 0; +#endif +} + +jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_get_sample_rate(client); +#else + return 0; +#endif +} + +jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_get_buffer_size(client); +#else + return 0; +#endif +} + +jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_port_register(client, port_name, port_type, flags, buffer_size); +#else + return NULL; +#endif +} + +int jackbridge_port_unregister(jack_client_t* client, jack_port_t* port) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_port_unregister(client, port); +#else + return 0; +#endif +} + +void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_port_get_buffer(port, nframes); +#else + return NULL; +#endif +} + +// ----------------------------------------------------------------------------- + +uint32_t jackbridge_midi_get_event_count(void* port_buffer) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_midi_get_event_count(port_buffer); +#else + return 0; +#endif +} + +int jackbridge_midi_event_get(jack_midi_event_t* event, void* port_buffer, uint32_t event_index) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_midi_event_get(event, port_buffer, event_index); +#else + return 0; +#endif +} + +void jackbridge_midi_clear_buffer(void* port_buffer) +{ +#ifndef JACKBRIDGE_DUMMY + jack_midi_clear_buffer(port_buffer); +#endif +} + +jack_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_midi_event_reserve(port_buffer, time, data_size); +#else + return NULL; +#endif +} + +int jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const jack_midi_data_t* data, size_t data_size) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_midi_event_write(port_buffer, time, data, data_size); +#else + return 0; +#endif +} + +// ----------------------------------------------------------------------------- + +jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos) +{ +#ifndef JACKBRIDGE_DUMMY + return jack_transport_query(client, pos); +#else + return JackTransportStopped; +#endif +} diff --git a/source/libs/jackbridge/jackbridge.h b/source/libs/jackbridge/jackbridge.h new file mode 100644 index 000000000..f64565961 --- /dev/null +++ b/source/libs/jackbridge/jackbridge.h @@ -0,0 +1,111 @@ +/* + * JackBridge + * Copyright (C) 2013 Filipe Coelho + * + * 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 + * 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. + * + * For a full copy of the GNU General Public License see the COPYING file + */ + +#ifndef __JACKBRIDGE_H__ +#define __JACKBRIDGE_H__ + +#if defined(_WIN32) && ! defined(__WINE__) +# include +# include +# define BRIDGE_EXPORT __declspec (dllexport) +#else +# define BRIDGE_EXPORT __attribute__ ((visibility("default"))) +#endif + +#ifdef __WINE__ +# define GNU_WIN32 // fix jack_native_thread_t +#endif + +#include +#include +#include + +#ifdef JACKBRIDGE_EXPORT + +#ifdef __cplusplus +extern "C" { +#endif + +BRIDGE_EXPORT jack_client_t* jackbridge_client_open(const char* client_name, jack_options_t options, jack_status_t* status, ...); +BRIDGE_EXPORT int jackbridge_client_close(jack_client_t* client); +BRIDGE_EXPORT int jackbridge_client_name_size(); +BRIDGE_EXPORT char* jackbridge_get_client_name(jack_client_t* client); +BRIDGE_EXPORT int jackbridge_port_name_size(); +BRIDGE_EXPORT int jackbridge_recompute_total_latencies(jack_client_t* client); +BRIDGE_EXPORT void jackbridge_port_get_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range); +BRIDGE_EXPORT void jackbridge_port_set_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range); +BRIDGE_EXPORT int jackbridge_activate(jack_client_t* client); +BRIDGE_EXPORT int jackbridge_deactivate(jack_client_t* client); +BRIDGE_EXPORT void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg); +BRIDGE_EXPORT int jackbridge_set_latency_callback(jack_client_t* client, JackLatencyCallback latency_callback, void* arg); +BRIDGE_EXPORT int jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg); +BRIDGE_EXPORT int jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg); +BRIDGE_EXPORT int jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCallback bufsize_callback, void* arg); +BRIDGE_EXPORT int jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCallback srate_callback, void* arg); +BRIDGE_EXPORT jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client); +BRIDGE_EXPORT jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client); +BRIDGE_EXPORT jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size); +BRIDGE_EXPORT int jackbridge_port_unregister(jack_client_t* client, jack_port_t* port); +BRIDGE_EXPORT void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes); + +BRIDGE_EXPORT uint32_t jackbridge_midi_get_event_count(void* port_buffer); +BRIDGE_EXPORT int jackbridge_midi_event_get(jack_midi_event_t* event, void* port_buffer, uint32_t event_index); +BRIDGE_EXPORT void jackbridge_midi_clear_buffer(void* port_buffer); +BRIDGE_EXPORT jack_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size); +BRIDGE_EXPORT int jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const jack_midi_data_t* data, size_t data_size); + +BRIDGE_EXPORT jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos); + +#ifdef __cplusplus +} +#endif + +#else // JACKBRIDGE_EXPORT + +#define jackbridge_client_open jack_client_open +#define jackbridge_client_close jack_client_close +#define jackbridge_client_name_size jack_client_name_size +#define jackbridge_get_client_name jack_get_client_name +#define jackbridge_port_name_size jack_port_name_size +#define jackbridge_recompute_total_latencies jack_recompute_total_latencies +#define jackbridge_port_get_latency_range jack_port_get_latency_range +#define jackbridge_port_set_latency_range jack_port_set_latency_range +#define jackbridge_activate jack_activate +#define jackbridge_deactivate jack_deactivate +#define jackbridge_on_shutdown jack_on_shutdown +#define jackbridge_set_latency_callback jack_set_latency_callback +#define jackbridge_set_process_callback jack_set_process_callback +#define jackbridge_set_freewheel_callback jack_set_freewheel_callback +#define jackbridge_set_buffer_size_callback jack_set_buffer_size_callback +#define jackbridge_set_sample_rate_callback jack_set_sample_rate_callback +#define jackbridge_get_sample_rate jack_get_sample_rate +#define jackbridge_get_buffer_size jack_get_buffer_size +#define jackbridge_port_register jack_port_register +#define jackbridge_port_unregister jack_port_unregister +#define jackbridge_port_get_buffer jack_port_get_buffer + +#define jackbridge_midi_get_event_count jack_midi_get_event_count +#define jackbridge_midi_event_get jack_midi_event_get +#define jackbridge_midi_clear_buffer jack_midi_clear_buffer +#define jackbridge_midi_event_reserve jack_midi_event_reserve +#define jackbridge_midi_event_write jack_midi_event_write + +#define jackbridge_transport_query jack_transport_query + +#endif // JACKBRIDGE_EXPORT + +#endif // __JACKBRIDGE_H__ diff --git a/source/libs/lilv/Makefile b/source/libs/lilv/Makefile new file mode 100644 index 000000000..cbba76f67 --- /dev/null +++ b/source/libs/lilv/Makefile @@ -0,0 +1,96 @@ +#!/usr/bin/make -f +# Makefile for lilv # +# ----------------------- # +# Created by falkTX +# + +include ../../Makefile.mk + +# -------------------------------------------------------------- + +SERD_VERSION = 0.18.2 +SORD_VERSION = 0.10.4 +SRATOM_VERSION = 0.4.0 +LILV_VERSION = 0.14.4 + +BUILD_C_FLAGS += -fvisibility=hidden -fPIC -w +BUILD_C_FLAGS += -Iconfig -I../../includes + +OBJS = serd.o sord.o sratom.o lilv.o +OBJS_posix32 = serd_posix32.o sord_posix32.o sratom_posix32.o lilv_posix32.o +OBJS_posix64 = serd_posix64.o sord_posix64.o sratom_posix64.o lilv_posix64.o +OBJS_win32 = serd_win32.o sord_win32.o sratom_win32.o lilv_win32.o +OBJS_win64 = serd_win64.o sord_win64.o sratom_win64.o lilv_win64.o + +# -------------------------------------------------------------- + +all: ../lilv.a + +posix32: ../lilv_posix32.a +posix64: ../lilv_posix64.a +win32: ../lilv_win32.a +win64: ../lilv_win64.a + +# -------------------------------------------------------------- + +../lilv.a: $(OBJS) + $(AR) rs $@ $^ + +../lilv_posix32.a: $(OBJS_posix32) + $(AR) rs $@ $^ + +../lilv_posix64.a: $(OBJS_posix64) + $(AR) rs $@ $^ + +../lilv_win32.a: $(OBJS_win32) + $(AR) rs $@ $^ + +../lilv_win64.a: $(OBJS_win64) + $(AR) rs $@ $^ + +# -------------------------------------------------------------- + +serd.o: serd.c + $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) -c -o $@ + +sord.o: sord.c + $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src -c -o $@ + +sratom.o: sratom.c + $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) -c -o $@ + +lilv.o: lilv.c + $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src -c -o $@ + +# -------------------------------------------------------------- + +serd_%32.o: serd.c + $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(32BIT_FLAGS) -c -o $@ + +sord_%32.o: sord.c + $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@ + +sratom_%32.o: sratom.c + $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(32BIT_FLAGS) -c -o $@ + +lilv_%32.o: lilv.c + $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +serd_%64.o: serd.c + $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(64BIT_FLAGS) -c -o $@ + +sord_%64.o: sord.c + $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@ + +sratom_%64.o: sratom.c + $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(64BIT_FLAGS) -c -o $@ + +lilv_%64.o: lilv.c + $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +clean: + rm -f *.o diff --git a/source/libs/lilv/config/lilv_config.h b/source/libs/lilv/config/lilv_config.h new file mode 100644 index 000000000..d1a072db4 --- /dev/null +++ b/source/libs/lilv/config/lilv_config.h @@ -0,0 +1,35 @@ + +#ifndef _LILV_CONFIG_H_ +#define _LILV_CONFIG_H_ + +#define LILV_VERSION "0.14.4" +#define LILV_NEW_LV2 1 + +#define HAVE_LV2 1 +#define HAVE_SERD 1 +#define HAVE_SORD 1 +#define HAVE_SRATOM 1 + +#define HAVE_FILENO 1 +#define HAVE_CLOCK_GETTIME 1 + +#ifdef __WIN32__ + #define LILV_PATH_SEP ";" + #define LILV_DIR_SEP "\\" +#else + #define LILV_PATH_SEP ":" + #define LILV_DIR_SEP "/" + #define HAVE_FLOCK 1 +#endif + +#if defined(__APPLE__) + #define LILV_DEFAULT_LV2_PATH "~/.lv2:/usr/local/lib/lv2:/usr/lib/lv2:/Library/Audio/Plug-Ins/LV2" +#elif defined(__HAIKU__) + #define LILV_DEFAULT_LV2_PATH "~/.lv2:/boot/common/add-ons/lv2" +#elif defined(__WIN32__) + #define LILV_DEFAULT_LV2_PATH "%APPDATA%\\LV2;%COMMONPROGRAMFILES%\\LV2" +#else + #define LILV_DEFAULT_LV2_PATH "~/.lv2:/usr/lib/lv2:/usr/local/lib/lv2" +#endif + +#endif /* _LILV_CONFIG_H_ */ diff --git a/source/libs/lilv/config/serd_config.h b/source/libs/lilv/config/serd_config.h new file mode 100644 index 000000000..6e3c697a8 --- /dev/null +++ b/source/libs/lilv/config/serd_config.h @@ -0,0 +1,21 @@ + +#ifndef _SERD_CONFIG_H_ +#define _SERD_CONFIG_H_ + +#define SERD_VERSION "0.18.2" + +#if defined(__APPLE__) || defined(__HAIKU__) + #define HAVE_FMAX 1 + #define HAVE_FILENO 1 + #define HAVE_POSIX_MEMALIGN 1 +#elif defined(__WIN32__) + #define HAVE_FMAX 1 + #define HAVE_FILENO 1 +#else + #define HAVE_FMAX 1 + #define HAVE_FILENO 1 + #define HAVE_POSIX_MEMALIGN 1 + #define HAVE_POSIX_FADVISE 1 +#endif + +#endif /* _SERD_CONFIG_H_ */ diff --git a/source/libs/lilv/config/sord_config.h b/source/libs/lilv/config/sord_config.h new file mode 100644 index 000000000..05f79c134 --- /dev/null +++ b/source/libs/lilv/config/sord_config.h @@ -0,0 +1,10 @@ + +#ifndef _SORD_CONFIG_H_ +#define _SORD_CONFIG_H_ + +#define SORD_VERSION "0.10.4" + +#define HAVE_SERD 1 +#define HAVE_PCRE 1 + +#endif /* _SORD_CONFIG_H_ */ diff --git a/source/libs/lilv/config/sratom_config.h b/source/libs/lilv/config/sratom_config.h new file mode 100644 index 000000000..5c040eaf6 --- /dev/null +++ b/source/libs/lilv/config/sratom_config.h @@ -0,0 +1,11 @@ + +#ifndef _SRATOM_CONFIG_H_ +#define _SRATOM_CONFIG_H_ + +#define SRATOM_VERSION "0.4.0" + +#define HAVE_LV2 1 +#define HAVE_SERD 1 +#define HAVE_SORD 1 + +#endif /* _SRATOM_CONFIG_H_ */ diff --git a/source/libs/lilv/custom-patches/lilv_fix-mingw-build.patch b/source/libs/lilv/custom-patches/lilv_fix-mingw-build.patch new file mode 100644 index 000000000..d728f68f0 --- /dev/null +++ b/source/libs/lilv/custom-patches/lilv_fix-mingw-build.patch @@ -0,0 +1,20 @@ +diff -U 3 -H -b -B -d -r -N -- lilv-0.14.4.old/src/util.c lilv-0.14.4/src/util.c +--- lilv-0.14.4.old/src/util.c 2012-08-09 21:51:00.000000000 +0100 ++++ lilv-0.14.4/src/util.c 2012-09-15 01:20:07.908701939 +0100 +@@ -29,7 +29,6 @@ + #include + + #ifdef _WIN32 +-# define _WIN32_WINNT 0x0600 /* for CreateSymbolicLink */ + # include + # include + # include +@@ -426,7 +425,7 @@ + int ret = 0; + if (strcmp(oldpath, newpath)) { + #ifdef _WIN32 +- ret = !CreateSymbolicLink(newpath, oldpath, 0); ++ ret = 0; + #else + ret = symlink(oldpath, newpath); + #endif diff --git a/source/libs/lilv/custom-patches/lilv_ui-features+lilvmm.patch b/source/libs/lilv/custom-patches/lilv_ui-features+lilvmm.patch new file mode 100644 index 000000000..9ec36a5e0 --- /dev/null +++ b/source/libs/lilv/custom-patches/lilv_ui-features+lilvmm.patch @@ -0,0 +1,137 @@ +diff -U 3 -H -d -r -N -- lilv-0.14.4.old/lilv/lilv.h lilv-0.14.4/lilv/lilv.h +--- lilv-0.14.4.old/lilv/lilv.h 2012-09-07 19:00:48.464571333 +0100 ++++ lilv-0.14.4/lilv/lilv.h 2012-09-07 18:54:00.626548936 +0100 +@@ -1693,6 +1693,25 @@ + lilv_ui_get_binary_uri(const LilvUI* ui); + + /** ++ Custom calls ++*/ ++LILV_API ++LilvNodes* ++lilv_ui_get_supported_features(const LilvUI* ui); ++ ++LILV_API ++LilvNodes* ++lilv_ui_get_required_features(const LilvUI* ui); ++ ++LILV_API ++LilvNodes* ++lilv_ui_get_optional_features(const LilvUI* ui); ++ ++LILV_API ++LilvNodes* ++lilv_ui_get_extension_data(const LilvUI* ui); ++ ++/** + @} + @} + */ +diff -U 3 -H -d -r -N -- lilv-0.14.4.old/lilv/lilvmm.hpp lilv-0.14.4/lilv/lilvmm.hpp +--- lilv-0.14.4.old/lilv/lilvmm.hpp 2012-07-18 02:42:43.000000000 +0100 ++++ lilv-0.14.4/lilv/lilvmm.hpp 2012-09-07 18:53:14.134318379 +0100 +@@ -136,6 +136,7 @@ + struct Nodes { + LILV_WRAP_COLL(Nodes, Node, nodes); + LILV_WRAP1(bool, nodes, contains, const Node, node); ++ LILV_WRAP0(Node, nodes, get_first); + }; + + struct Port { +@@ -167,6 +168,26 @@ + const LilvPort* me; + }; + ++struct UI { ++ inline UI(const LilvUI* c_obj) : me(c_obj) {} ++ LILV_WRAP_CONVERSION(const LilvUI); ++ ++ LILV_WRAP0(Node, ui, get_uri); ++ LILV_WRAP1(bool, ui, is_a, LilvNode*, ui_class); ++ LILV_WRAP0(Node, ui, get_bundle_uri); ++ LILV_WRAP0(Node, ui, get_binary_uri); ++ LILV_WRAP0(Nodes, ui, get_supported_features); ++ LILV_WRAP0(Nodes, ui, get_required_features); ++ LILV_WRAP0(Nodes, ui, get_optional_features); ++ LILV_WRAP0(Nodes, ui, get_extension_data); ++ ++ const LilvUI* me; ++}; ++ ++struct UIs { ++ LILV_WRAP_COLL(UIs, UI, uis); ++}; ++ + struct Plugin { + inline Plugin(const LilvPlugin* c_obj) : me(c_obj) {} + LILV_WRAP_CONVERSION(const LilvPlugin); +@@ -190,6 +211,8 @@ + LILV_WRAP0(Node, plugin, get_author_email); + LILV_WRAP0(Node, plugin, get_author_homepage); + LILV_WRAP0(bool, plugin, is_replaced); ++ LILV_WRAP0(Nodes, plugin, get_extension_data); ++ LILV_WRAP0(UIs, plugin, get_uis); + + inline Port get_port_by_index(unsigned index) { + return Port(me, lilv_plugin_get_port_by_index(me, index)); +diff -U 3 -H -d -r -N -- lilv-0.14.4.old/src/ui.c lilv-0.14.4/src/ui.c +--- lilv-0.14.4.old/src/ui.c 2012-09-07 19:00:48.464571333 +0100 ++++ lilv-0.14.4/src/ui.c 2012-09-07 18:59:51.652289664 +0100 +@@ -128,3 +128,57 @@ + assert(ui->binary_uri); + return ui->binary_uri; + } ++ ++static LilvNodes* ++lilv_ui_get_value_internal(const LilvUI* ui, ++ const SordNode* predicate) ++{ ++ return lilv_world_query_values_internal( ++ ui->world, ui->uri->node, predicate, NULL); ++} ++ ++LILV_API ++LilvNodes* ++lilv_ui_get_supported_features(const LilvUI* ui) ++{ ++ LilvNodes* optional = lilv_ui_get_optional_features(ui); ++ LilvNodes* required = lilv_ui_get_required_features(ui); ++ LilvNodes* result = lilv_nodes_new(); ++ ++ LILV_FOREACH(nodes, i, optional) ++ zix_tree_insert((ZixTree*)result, ++ lilv_node_duplicate(lilv_nodes_get(optional, i)), ++ NULL); ++ LILV_FOREACH(nodes, i, required) ++ zix_tree_insert((ZixTree*)result, ++ lilv_node_duplicate(lilv_nodes_get(required, i)), ++ NULL); ++ ++ lilv_nodes_free(optional); ++ lilv_nodes_free(required); ++ ++ return result; ++} ++ ++LILV_API ++LilvNodes* ++lilv_ui_get_required_features(const LilvUI* ui) ++{ ++ return lilv_ui_get_value_internal( ++ ui, ui->world->uris.lv2_requiredFeature); ++} ++ ++LILV_API ++LilvNodes* ++lilv_ui_get_optional_features(const LilvUI* ui) ++{ ++ return lilv_ui_get_value_internal( ++ ui, ui->world->uris.lv2_optionalFeature); ++} ++ ++LILV_API ++LilvNodes* ++lilv_ui_get_extension_data(const LilvUI* ui) ++{ ++ return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_extensionData); ++} diff --git a/source/libs/lilv/custom-patches/lilvmm_fix-leaks.patch b/source/libs/lilv/custom-patches/lilvmm_fix-leaks.patch new file mode 100644 index 000000000..591af73f7 --- /dev/null +++ b/source/libs/lilv/custom-patches/lilvmm_fix-leaks.patch @@ -0,0 +1,11 @@ +diff -U 3 -H -b -B -d -r -N -- lilv-0.14.4.old/lilv/lilvmm.hpp lilv-0.14.4/lilv/lilvmm.hpp +--- lilv-0.14.4.old/lilv/lilvmm.hpp 2012-09-13 12:47:55.000000000 +0100 ++++ lilv-0.14.4/lilv/lilvmm.hpp 2012-09-13 12:48:10.950555311 +0100 +@@ -60,6 +60,7 @@ + #endif + + struct Node { ++ inline Node(LilvNode* node) : me(node) {} + inline Node(const LilvNode* node) : me(lilv_node_duplicate(node)) {} + inline Node(const Node& copy) : me(lilv_node_duplicate(copy.me)) {} + diff --git a/source/libs/lilv/lilv-0.14.4/AUTHORS b/source/libs/lilv/lilv-0.14.4/AUTHORS new file mode 100644 index 000000000..9a13e9eed --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/AUTHORS @@ -0,0 +1,8 @@ +Author: + David Robillard + +GTK2 GUI and I18N support: + Lars Luthman + +Dynamic manifest support: + Stefano D'Angelo diff --git a/source/libs/lilv/lilv-0.14.4/COPYING b/source/libs/lilv/lilv-0.14.4/COPYING new file mode 100644 index 000000000..c3c2af6a6 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/COPYING @@ -0,0 +1,13 @@ +Copyright 2011-2012 David Robillard + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/source/libs/lilv/lilv-0.14.4/INSTALL b/source/libs/lilv/lilv-0.14.4/INSTALL new file mode 100644 index 000000000..623cddde4 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/INSTALL @@ -0,0 +1,59 @@ +Installation Instructions +========================= + +Basic Installation +------------------ + +Building this software requires only Python. To install with default options: + + ./waf configure + ./waf + ./waf install + +You may need to become root for the install stage, for example: + + sudo ./waf install + +Configuration Options +--------------------- + +All supported options can be viewed using the command: + + ./waf --help + +Most options only need to be passed during the configure stage, for example: + + ./waf configure --prefix=/usr + ./waf + ./waf install + +Compiler Configuration +---------------------- + +Several standard environment variables can be used to control how compilers are +invoked: + + * CC: Path to C compiler + * CFLAGS: C compiler options + * CXX: Path to C++ compiler + * CXXFLAGS: C++ compiler options + * CPPFLAGS: C preprocessor options + * LINKFLAGS: Linker options + +Installation Directories +------------------------ + +The --prefix option (or the PREFIX environment variable) can be used to change +the prefix which all files are installed under. There are also several options +allowing for more fine-tuned control, see the --help output for details. + +Packaging +--------- + +Everything can be installed to a specific root directory by passing a --destdir +option to the install stage (or setting the DESTDIR environment variable), +which adds a prefix to all install paths. For example: + + ./waf configure --prefix=/usr + ./waf + ./waf install --destdir=/tmp/package diff --git a/source/libs/lilv/lilv-0.14.4/NEWS b/source/libs/lilv/lilv-0.14.4/NEWS new file mode 100644 index 000000000..6a2f53e2c --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/NEWS @@ -0,0 +1,90 @@ +lilv (0.14.4) stable; + + * Deprecate old flawed Lilv::Instance constructors + * Fix documentation for ui_type parameter of lilv_ui_is_supported() + * Fix crash when lv2info is run with an invalid URI argument + * Gracefully handle failure to save plugin state and print error message + * Reduce memory usage (per node) + * Simpler node implementation always backed by a SordNode + * Make all 'zix' symbols private to avoid symbol clashes in static builds + * Add lv2bench utility + * Fix various hyper-strict warnings + * Do not require a C++ compiler to build + * Add option to build utilities as static binaries + * Upgrade to waf 1.7.2 + * lilvmm.hpp: Make Lilv::Instance handle features and failed instantiations + * lilvmm.hpp: Add Lilv::Instance::get_handle() + * lilvmm.hpp: Add Lilv::Instance::get_extension_data() + + -- David Robillard Thu, 23 Aug 2012 01:38:29 -0400 + +lilv (0.14.2) stable; + + * Fix dynmanifest support + + -- David Robillard Thu, 19 Apr 2012 16:11:31 -0400 + +lilv (0.14.0) stable; + + * Add lilv_plugin_get_extension_data + * Use path variables in pkgconfig files + * Install man page to DATADIR (e.g. PREFIX/share/man, not PREFIX/man) + * Make Lilv::uri_to_path static inline (fix linking errors) + * Use correct URI for dcterms:replaces (for hiding old plugins): + "http://purl.org/dc/terms/replaces" + * Fix compilation on BSD + * Only load dynmanifest libraries once per bundle, not once per plugin + * Fix lilv_world_find_nodes to work with wildcard subjects + * Add lilv_plugin_get_related to get resources related to plugins that + are not directly rdfs:seeAlso linked (e.g. presets) + * Add lilv_world_load_resource for related resources (e.g. presets) + * Print presets in lv2info + * Remove locale smashing kludges and use new serd functions for converting + nodes to/from numbers. + * Add LilvState API for handling plugin state. This makes it simple to + save and restore plugin state both in memory and on disk, as well as + save presets in a host-sharable way since the disk format is identical + to the LV2 presets format. + * Update old references to lv2_list (now lv2ls) + * Support compilation as C++ under MSVC++. + * Remove use of wordexp. + * Add lilv_plugin_get_port_by_designation() and lilv_port_get_index() as an + improved generic alternative to lilv_plugin_get_latency_port_index(). + * Add lilv_plugin_get_project() and get author information from project if + it is not given directly on the plugin. + + -- David Robillard Wed, 18 Apr 2012 20:06:28 -0400 + +lilv (0.5.0) stable; + + * Remove glib dependency + * Add lv2core as a pkg-config dependency (for lv2.h header include) + * Obey prefix when installing bash completion script + * Support integer minimum, maximum, and default port values in + lilv_plugin_get_port_ranges_float + * Add ability to build static library + + -- David Robillard Thu, 29 Sep 2011 00:00:00 -0400 + +lilv (0.4.4) stable; + + * Fix building python bindings + * Make free methods tolerate being called on NULL + * Remove lv2jack (replaced by jalv) + * Fix parsing extra plugin data files in other bundles + * Fix lilv_ui_is_supported when Lilv is built independently + + -- David Robillard Sat, 11 Jun 2011 11:20:11 -0400 + +lilv (0.4.2) stable; + + * Fix compilation issues on some systems + * Fix build system Python 3 compatibility + + -- David Robillard Wed, 25 May 2011 19:00:00 -0400 + +lilv (0.4.0) stable; + + * Initial version (forked from SLV2) + + -- David Robillard Tue, 24 May 2011 23:00:00 -0400 diff --git a/source/libs/lilv/lilv-0.14.4/PACKAGING b/source/libs/lilv/lilv-0.14.4/PACKAGING new file mode 100644 index 000000000..3eced1698 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/PACKAGING @@ -0,0 +1,29 @@ +This library is designed to allow parallel installation of different major +versions. To facilitate this, the shared library name, include directory, and +pkg-config file are suffixed with the major version number of the library. + +For example, if this library was named "foo" and at version 1.x.y: + +/usr/include/foo-1/foo/foo.h +/usr/lib/foo-1.so.1.x.y +/usr/lib/pkgconfig/foo-1.pc + +Dependencies check for pkg-config name "foo-1" and will build +against a compatible version 1, regardless any other installed versions. + +*** IMPORTANT GUIDELINES FOR PACKAGERS *** + +Packages should follow the same conventions as above, i.e. include the major +version (and only the major version) in the name of the package. Continuing the +example above, the package(s) would be named foo-1 and foo-1-dev. This way, +if/when version 2 comes out, it may be installed at the same time as version 1 +without breaking anything. + +Please do not create packages of this library that do not follow these +guidelines, you will break things and cause unnecessary headaches. Please do +not use any number as a suffix other than the actual major version number of the +upstream source package. + +Because program and documentation names are not versioned, these should be +included in separate packages which may replace previous versions, since +there is little use in having parallel installations of them. \ No newline at end of file diff --git a/source/libs/lilv/lilv-0.14.4/README b/source/libs/lilv/lilv-0.14.4/README new file mode 100644 index 000000000..00e153054 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/README @@ -0,0 +1,11 @@ +Lilv +---- + +Lilv is a library for LV2 hosts intended to make using LV2 Plugins as simple +as possible (without sacrificing capabilities). + +More information about LV2 plugins can be found at . + +More information about Lilv can be found at . + + -- David Robillard diff --git a/source/libs/lilv/lilv-0.14.4/bindings/lilv.i b/source/libs/lilv/lilv-0.14.4/bindings/lilv.i new file mode 100644 index 000000000..958f9f0c8 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/bindings/lilv.i @@ -0,0 +1,38 @@ +%module lilv +%{ +#include "lilv/lilv.h" +#include "lilv/lilvmm.hpp" +%} + +%include "lilv/lilv.h" +%include "lilv/lilvmm.hpp" + +namespace Lilv { + +%extend Plugins { +%pythoncode %{ + def __iter__(self): + class Iterator(object): + def __init__(self, plugins): + self.plugins = plugins + self.iter = plugins.begin() + + def next(self): + self.iter = self.plugins.next(self.iter) + if not self.plugins.is_end(self.iter): + return self.plugins.get(self.iter) + else: + raise StopIteration + + return Iterator(self) +%} +}; + +%extend Node { +%pythoncode %{ + def __str__(self): + return self.get_turtle_token() +%} +}; + +} /* namespace Lilv */ diff --git a/source/libs/lilv/lilv-0.14.4/bindings/python/lv2_apply.py b/source/libs/lilv/lilv-0.14.4/bindings/python/lv2_apply.py new file mode 100755 index 000000000..ebb43e5f4 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/bindings/python/lv2_apply.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import math +import lilv +import sys +import wave +import numpy + +# Read command line arguments +if len(sys.argv) != 4: + print 'USAGE: lv2_apply.py PLUGIN_URI INPUT_WAV OUTPUT_WAV' + sys.exit(1) + +# Initialise Lilv +world = lilv.World() +world.load_all() + +plugin_uri = world.new_uri(sys.argv[1]) +wav_in_path = sys.argv[2] +wav_out_path = sys.argv[3] + + +# Find plugin +plugin = world.get_all_plugins().get_by_uri(plugin_uri) +if not plugin: + print "Unknown plugin `%s'\n" % plugin_uri + sys.exit(1) + +lv2_InputPort = world.new_uri(lilv.LILV_URI_INPUT_PORT) +lv2_OutputPort = world.new_uri(lilv.LILV_URI_OUTPUT_PORT) +lv2_AudioPort = world.new_uri(lilv.LILV_URI_AUDIO_PORT) + +n_audio_in = plugin.get_num_ports_of_class(lv2_InputPort, lv2_AudioPort) +n_audio_out = plugin.get_num_ports_of_class(lv2_OutputPort, lv2_AudioPort) +if n_audio_out == 0: + print "Plugin has no audio outputs\n" + sys.exit(1) + +# Open input file +wav_in = wave.open(wav_in_path, 'r') +if not wav_in: + print "Failed to open input `%s'\n" % wav_in_path + sys.exit(1) +if wav_in.getnchannels() != n_audio_in: + print "Input has %d channels, but plugin has %d audio inputs\n" % ( + wav_in.getnchannels(), n_audio_in) + sys.exit(1) + +# Open output file +wav_out = wave.open(wav_out_path, 'w') +if not wav_out: + print "Failed to open output `%s'\n" % wav_out_path + sys.exit(1) + +# Set output file to same format as input (except possibly nchannels) +wav_out.setparams(wav_in.getparams()) +wav_out.setnchannels(n_audio_out) + +rate = wav_in.getframerate() +nframes = wav_in.getnframes() + +# Instantiate plugin +instance = lilv.Instance(plugin, rate) + +def read_float(wf, nframes): + wav = wf.readframes(nframes) + if wf.getsampwidth() == 4: + wav = wave.struct.unpack("<%ul" % (len(wav) / 4), wav) + wav = [ i / float(math.pow(2, 32)) for i in wav ] + elif wf.getsampwidth() == 2: + wav = wave.struct.unpack("<%uh" % (len(wav) / 2), wav) + wav = [ i / float(math.pow(2, 16)) for i in wav ] + else: + wav = wave.struct.unpack("%uB" % (len(wav)), wav) + wav = [ s - 128 for s in wav ] + wav = [ i / float(math.pow(2, 8)) for i in wav ] + + n_channels = wf.getnchannels() + wavs = [] + if n_channels > 1: + for i in xrange(n_channels): + wavs.append([ wav[j] for j in xrange(0, len(wav), n_channels) ]) + else: + wavs = [ wav ] + + return wavs + +in_buf = read_float(wav_in, nframes) + +# TODO: buffer marshaling +#instance.connect_port(3, in_buf) + +print '%s => %s => %s @ %d Hz' % (wav_in_path, plugin.get_name(), wav_out_path, rate) + +instance.connect_port(3, in_buf) diff --git a/source/libs/lilv/lilv-0.14.4/bindings/python/lv2_list.py b/source/libs/lilv/lilv-0.14.4/bindings/python/lv2_list.py new file mode 100755 index 000000000..babe1b41c --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/bindings/python/lv2_list.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +import lilv + +world = lilv.World() +world.load_all() + +for i in world.get_all_plugins(): + print(i.get_uri()) diff --git a/source/libs/lilv/lilv-0.14.4/doc/lv2info.1 b/source/libs/lilv/lilv-0.14.4/doc/lv2info.1 new file mode 100644 index 000000000..0cba739b1 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/doc/lv2info.1 @@ -0,0 +1,33 @@ +.TH LV2INFO 1 "8 Jan 2012" + +.SH NAME +.B lv2info \- print information about an installed LV2 plugin. +.SH SYNOPSIS +.B lv2info PLUGIN_URI + +.SH OPTIONS +.TP +\fB\-p FILE +Write Turtle description of plugin to FILE + +.TP +\fB\-m FILE +Add record of plugin to manifest FILE + +.TP +\fB\-\-help\fR +Display help and exit + +.TP +\fB\-\-version\fR +Display version information and exit + +.SH SEE ALSO +.BR lilv(3), +.BR lv2ls(1) + +.SH AUTHOR +lv2info was written by David Robillard +.PP +This manual page was written by Jaromír Mikes +and David Robillard diff --git a/source/libs/lilv/lilv-0.14.4/doc/lv2ls.1 b/source/libs/lilv/lilv-0.14.4/doc/lv2ls.1 new file mode 100644 index 000000000..56cae582b --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/doc/lv2ls.1 @@ -0,0 +1,30 @@ +.TH LV2LS 1 "17 Jan 2012" + +.SH NAME +.B lv2ls \- List all installed LV2 plugins. + +.SH SYNOPSIS +.B lv2ls [OPTION]... + +.SH OPTIONS +.TP +\fB\-n\fR, \fB\-\-names\fR +Show names instead of URIs + +.TP +\fB\-\-help\fR +Display help and exit + +.TP +\fB\-\-version\fR +Display version information and exit + +.SH SEE ALSO +.BR lilv(3), +.BR lv2info(1) + +.SH AUTHOR +lv2ls was written by David Robillard +.PP +This manual page was written by Jaromír Mikes +and David Robillard diff --git a/source/libs/lilv/lilv-0.14.4/doc/reference.doxygen.in b/source/libs/lilv/lilv-0.14.4/doc/reference.doxygen.in new file mode 100644 index 000000000..4e0c97ea4 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/doc/reference.doxygen.in @@ -0,0 +1,1792 @@ +# Doxyfile 1.8.1.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = Lilv + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @LILV_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = @LILV_DOC_DIR@ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = NO + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = YES + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = YES + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = NO + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = NO + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = @LILV_SRCDIR@/doc/layout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @LILV_SRCDIR@/lilv/lilv.h + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = *.c + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = @LILV_SRCDIR@/doc/style.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 160 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = NO + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = NO + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/source/libs/lilv/lilv-0.14.4/doc/style.css b/source/libs/lilv/lilv-0.14.4/doc/style.css new file mode 100644 index 000000000..4c62b46a8 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/doc/style.css @@ -0,0 +1,563 @@ +body { + font-size: medium; + font-family: sans-serif; +} + +#top { + background-color: #F3F3F3; + margin: 0; + padding: 0; + border-bottom: 1px solid #DDD; + margin-bottom: 1ex; + font-size: xx-large; + font-weight: bold; +} + +div.header { + display: none; +} + +.tabs { + display: none; +} + +h1 h2 h3 h4 h5 h6 { + font-weight: bold; +} + +h1 { + font-size: 164%; +} + +h2 { + font-size: 132%; +} + +h3 { + font-size: 124%; +} + +h4 { + font-size: 116%; +} + +h5 { + font-size: 108%; +} + +h6 { + font-size: 100%; +} + +p { + margin: 0 0 1ex 0; +} + +br { + display: none; +} + +dt { + font-weight: 700; +} + +div.multicol { +} + +p.startli,p.startdd,p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +caption { + font-weight: 700; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex,div.navtab { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex,div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ +a { + color: #3D8C57; + text-decoration: none; +} + +.contents a:visited { + color: #50755E; +} + +a:hover { + text-decoration: underline; +} + +a.qindexHL { + background-color: #9CAFD4; + color: #FFF; + border: 1px double #869DCA; +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4C4C4; + background-color: #F9F9F9; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: #000; + font-weight: 700; + color: #FFF; + margin-bottom: 3px; + margin-top: 3px; + padding: .2em; + border: thin solid #333; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: 700; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: #FFF; + color: #000; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: 700; + border: 1px solid #C4CFE5; + margin: 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0; + margin-bottom: 0; + padding: 0; +} + +div.center img { + border: 0; +} + +address.footer { + text-align: right; + padding: 0 0.25em 0.25em 0; +} + +img.footer { + border: 0; + vertical-align: middle; +} + +/* @group Code Colorization */ +span.keyword { + color: green; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #e08000; +} + +span.comment { + color: maroon; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: teal; +} + +span.vhdldigit { + color: #F0F; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: red; +} + +/* @end */ +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: 700; +} + +hr { + height: 0; + border: none; + border-top: 1px solid #DDD; + margin: 2em 0 1em; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ +table.memberdecls { + border-spacing: 0; + font-size: small; +} + +.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,.memTemplItemLeft,.memTemplItemRight,.memTemplParams { + background-color: #FBFBFB; + margin: 0; + padding: 0.25ex; +} + +.mdescLeft,.mdescRight { + color: #555; +} + +.memItemLeft,.memItemRight,.memTemplParams { + border-top: 1px solid #DDD; +} + +.memItemLeft,.memTemplItemLeft { + white-space: nowrap; + padding-left: 2em; +} + +.memTemplParams { + color: #464646; + white-space: nowrap; +} + +/* @end */ +/* @group Member Details */ +/* Styles for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: bold; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; + margin: 1ex 0 2ex 0; + border: 1px solid #CCC; +} + +.memname { + white-space: nowrap; + font-weight: bold; +} + +.memproto { + border-bottom: 1px solid #DDD; + padding: 0.5ex; + font-weight: bold; + background-color: #F3F3F3; +} + +.memdoc { + padding: 1ex; + background-color: #FBFBFB; + border-top-width: 0; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} + +.paramname em { + font-style: normal; +} + +/* @end */ +/* @group Directory (tree) */ +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin: 0; +} + +/* these are for tree view when used as main index */ +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse: collapse; + margin: 0.5ex; +} + +table.doxtable td,table.doxtable th { + border: 1px solid #DDD; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #F3F3F3; + color: #000; + padding-bottom: 4px; + padding-top: 5px; + text-align: left; + font-weight: bold; +} + +.tabsearch { + top: 0; + left: 10px; + height: 36px; + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul { + font-size: 11px; + height: 30px; + line-height: 30px; + color: #8AA0CC; + border: 1px solid #C2CDE4; + overflow: hidden; + margin: 0; + padding: 0; +} + +.navpath li { + list-style-type: none; + float: left; + padding-left: 10px; + padding-right: 15px; + color: #364D7C; +} + +.navpath a { + height: 32px; + display: block; + text-decoration: none; + outline: none; +} + +.navpath a:hover { + color: #6884BD; +} + +div.summary { + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a { + white-space: nowrap; +} + +div.header { + background-color: #F3F3F3; + margin: 0; + border-bottom: 1px solid #DDD; +} + +div.headertitle { + padding: 5px 5px 5px 10px; + font-size: 180%; + font-weight: bold; +} diff --git a/source/libs/lilv/lilv-0.14.4/lilv.pc.in b/source/libs/lilv/lilv-0.14.4/lilv.pc.in new file mode 100644 index 000000000..53098f5a0 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/lilv.pc.in @@ -0,0 +1,11 @@ +prefix=@PREFIX@ +exec_prefix=@EXEC_PREFIX@ +libdir=@LIBDIR@ +includedir=@INCLUDEDIR@ + +Name: Lilv +Version: @LILV_VERSION@ +Description: Simple C library for hosting LV2 plugins +Requires: lv2core @LILV_PKG_DEPS@ +Libs: -L${libdir} -l@LIB_LILV@ -ldl +Cflags: -I${includedir}/lilv-@LILV_MAJOR_VERSION@ diff --git a/source/libs/lilv/lilv-0.14.4/lilv.ttl b/source/libs/lilv/lilv-0.14.4/lilv.ttl new file mode 100644 index 000000000..edfb0e546 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/lilv.ttl @@ -0,0 +1,29 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix : . +@prefix foaf: . + + + a :Project ; + :bug-database ; + :developer [ + a foaf:Person ; + rdfs:seeAlso ; + foaf:homepage ; + foaf:mbox_sha1sum "253b3c58086250260bac1232d744d150274ad308" ; + foaf:name "David Robillard" + ] ; + :download-page ; + :homepage ; + :license ; + :name "LILV" ; + :programming-language "C", "Turtle" ; + :repository [ + :browse ; + :location ; + a :SVNRepository + ] ; + :shortdesc "Library for simple use of LV2 plugins" ; + :shortname "LILV" . + + diff --git a/source/libs/lilv/lilv-0.14.4/lilv/lilv.h b/source/libs/lilv/lilv-0.14.4/lilv/lilv.h new file mode 100644 index 000000000..2d09f85a9 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/lilv/lilv.h @@ -0,0 +1,1723 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file lilv.h API for Lilv, a lightweight LV2 host library. +*/ + +#ifndef LILV_LILV_H +#define LILV_LILV_H + +#include +#include +#include + +#include "lv2/lv2.h" +#include "lv2/urid.h" + +#ifdef LILV_SHARED +# ifdef _WIN32 +# define LILV_LIB_IMPORT __declspec(dllimport) +# define LILV_LIB_EXPORT __declspec(dllexport) +# else +# define LILV_LIB_IMPORT __attribute__((visibility("default"))) +# define LILV_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef LILV_INTERNAL +# define LILV_API LILV_LIB_EXPORT +# else +# define LILV_API LILV_LIB_IMPORT +# endif +#else +# define LILV_API +#endif + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +#define LILV_NS_DOAP "http://usefulinc.com/ns/doap#" +#define LILV_NS_FOAF "http://xmlns.com/foaf/0.1/" +#define LILV_NS_LILV "http://drobilla.net/ns/lilv#" +#define LILV_NS_LV2 "http://lv2plug.in/ns/lv2core#" +#define LILV_NS_OWL "http://www.w3.org/2002/07/owl#" +#define LILV_NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#" +#define LILV_NS_RDFS "http://www.w3.org/2000/01/rdf-schema#" +#define LILV_NS_XSD "http://www.w3.org/2001/XMLSchema#" + +#define LILV_URI_AUDIO_PORT "http://lv2plug.in/ns/lv2core#AudioPort" +#define LILV_URI_CONTROL_PORT "http://lv2plug.in/ns/lv2core#ControlPort" +#define LILV_URI_EVENT_PORT "http://lv2plug.in/ns/ext/event#EventPort" +#define LILV_URI_INPUT_PORT "http://lv2plug.in/ns/lv2core#InputPort" +#define LILV_URI_MIDI_EVENT "http://lv2plug.in/ns/ext/midi#MidiEvent" +#define LILV_URI_OUTPUT_PORT "http://lv2plug.in/ns/lv2core#OutputPort" +#define LILV_URI_PORT "http://lv2plug.in/ns/lv2core#Port" + +typedef struct LilvPluginImpl LilvPlugin; /**< LV2 Plugin. */ +typedef struct LilvPluginClassImpl LilvPluginClass; /**< Plugin Class. */ +typedef struct LilvPortImpl LilvPort; /**< Port. */ +typedef struct LilvScalePointImpl LilvScalePoint; /**< Scale Point. */ +typedef struct LilvUIImpl LilvUI; /**< Plugin UI. */ +typedef struct LilvNodeImpl LilvNode; /**< Typed Value. */ +typedef struct LilvWorldImpl LilvWorld; /**< Lilv World. */ +typedef struct LilvInstanceImpl LilvInstance; /**< Plugin instance. */ +typedef struct LilvStateImpl LilvState; /**< Plugin state. */ + +typedef void LilvIter; /**< Collection iterator */ +typedef void LilvPluginClasses; /**< set. */ +typedef void LilvPlugins; /**< set. */ +typedef void LilvScalePoints; /**< set. */ +typedef void LilvUIs; /**< set. */ +typedef void LilvNodes; /**< set. */ + +/** + @defgroup lilv Lilv + Lilv is a simple yet powerful C API for using LV2 plugins. + + For more information about LV2, see . + For more information about Lilv, see . + @{ +*/ + +/** + @name Node + @{ +*/ + +/** + Convert a file URI string to a local path string. + For example, "file://foo/bar/baz.ttl" returns "/foo/bar/baz.ttl". + Return value is shared and must not be deleted by caller. + @return @a uri converted to a path, or NULL on failure (URI is not local). +*/ +LILV_API +const char* +lilv_uri_to_path(const char* uri); + +/** + Create a new URI value. + Returned value must be freed by caller with lilv_node_free. +*/ +LILV_API +LilvNode* +lilv_new_uri(LilvWorld* world, const char* uri); + +/** + Create a new string value (with no language). + Returned value must be freed by caller with lilv_node_free. +*/ +LILV_API +LilvNode* +lilv_new_string(LilvWorld* world, const char* str); + +/** + Create a new integer value. + Returned value must be freed by caller with lilv_node_free. +*/ +LILV_API +LilvNode* +lilv_new_int(LilvWorld* world, int val); + +/** + Create a new floating point value. + Returned value must be freed by caller with lilv_node_free. +*/ +LILV_API +LilvNode* +lilv_new_float(LilvWorld* world, float val); + +/** + Create a new boolean value. + Returned value must be freed by caller with lilv_node_free. +*/ +LILV_API +LilvNode* +lilv_new_bool(LilvWorld* world, bool val); + +/** + Free a LilvNode. + It is safe to call this function on NULL. +*/ +LILV_API +void +lilv_node_free(LilvNode* val); + +/** + Duplicate a LilvNode. +*/ +LILV_API +LilvNode* +lilv_node_duplicate(const LilvNode* val); + +/** + Return whether two values are equivalent. +*/ +LILV_API +bool +lilv_node_equals(const LilvNode* value, const LilvNode* other); + +/** + Return this value as a Turtle/SPARQL token. + Returned value must be freed by caller with free(). + + + + + + + + +
Example Turtle Tokens
URI<http://example.org/foo >
QNamedoap:name
String"this is a string"
Float1.0
Integer1
Booleantrue
+*/ +LILV_API +char* +lilv_node_get_turtle_token(const LilvNode* value); + +/** + Return whether the value is a URI (resource). +*/ +LILV_API +bool +lilv_node_is_uri(const LilvNode* value); + +/** + Return this value as a URI string, e.g. "http://example.org/foo". + Valid to call only if lilv_node_is_uri(@a value) returns true. + Returned value is owned by @a value and must not be freed by caller. +*/ +LILV_API +const char* +lilv_node_as_uri(const LilvNode* value); + +/** + Return whether the value is a blank node (resource with no URI). +*/ +LILV_API +bool +lilv_node_is_blank(const LilvNode* value); + +/** + Return this value as a blank node identifier, e.g. "genid03". + Valid to call only if lilv_node_is_blank(@a value) returns true. + Returned value is owned by @a value and must not be freed by caller. +*/ +LILV_API +const char* +lilv_node_as_blank(const LilvNode* value); + +/** + Return whether this value is a literal (i.e. not a URI). + Returns true if @a value is a string or numeric value. +*/ +LILV_API +bool +lilv_node_is_literal(const LilvNode* value); + +/** + Return whether this value is a string literal. + Returns true if @a value is a string value (and not numeric). +*/ +LILV_API +bool +lilv_node_is_string(const LilvNode* value); + +/** + Return @a value as a string. +*/ +LILV_API +const char* +lilv_node_as_string(const LilvNode* value); + +/** + Return whether this value is a decimal literal. +*/ +LILV_API +bool +lilv_node_is_float(const LilvNode* value); + +/** + Return @a value as a float. + Valid to call only if lilv_node_is_float(@a value) or + lilv_node_is_int(@a value) returns true. +*/ +LILV_API +float +lilv_node_as_float(const LilvNode* value); + +/** + Return whether this value is an integer literal. +*/ +LILV_API +bool +lilv_node_is_int(const LilvNode* value); + +/** + Return @a value as an integer. + Valid to call only if lilv_node_is_int(@a value) returns true. +*/ +LILV_API +int +lilv_node_as_int(const LilvNode* value); + +/** + Return whether this value is a boolean. +*/ +LILV_API +bool +lilv_node_is_bool(const LilvNode* value); + +/** + Return @a value as a bool. + Valid to call only if lilv_node_is_bool(@a value) returns true. +*/ +LILV_API +bool +lilv_node_as_bool(const LilvNode* value); + +/** + @} + @name Collections + Lilv has several collection types for holding various types of value: +
    +
  • LilvPlugins (function prefix "lilv_plugins_")
  • +
  • LilvPluginClasses (function prefix "lilv_plugin_classes_")
  • +
  • LilvScalePoints (function prefix "lilv_scale_points_")
  • +
  • LilvNodes (function prefix "lilv_nodes_")
  • +
  • LilvUIs (function prefix "lilv_uis_")
  • +
+ + Each collection type supports a similar basic API (except LilvPlugins which + is internal and thus lacks a free function): +
    +
  • void PREFIX_free (coll)
  • +
  • unsigned PREFIX_size (coll)
  • +
  • LilvIter* PREFIX_begin (coll)
  • +
+ @{ +*/ + +/* Collections */ + +/** + Iterate over each element of a collection. + @code + LILV_FOREACH(plugin_classes, i, classes) { + LilvPluginClass c = lilv_plugin_classes_get(classes, i); + // ... + } + @endcode +*/ +#define LILV_FOREACH(colltype, iter, collection) \ + for (LilvIter* (iter) = lilv_ ## colltype ## _begin(collection); \ + !lilv_ ## colltype ## _is_end(collection, iter); \ + (iter) = lilv_ ## colltype ## _next(collection, iter)) + +/* LilvPluginClasses */ + +LILV_API +void +lilv_plugin_classes_free(LilvPluginClasses* collection); + +LILV_API +unsigned +lilv_plugin_classes_size(const LilvPluginClasses* collection); + +LILV_API +LilvIter* +lilv_plugin_classes_begin(const LilvPluginClasses* collection); + +LILV_API +const LilvPluginClass* +lilv_plugin_classes_get(const LilvPluginClasses* collection, LilvIter* i); + +LILV_API +LilvIter* +lilv_plugin_classes_next(const LilvPluginClasses* collection, LilvIter* i); + +LILV_API +bool +lilv_plugin_classes_is_end(const LilvPluginClasses* collection, LilvIter* i); + +/** + Get a plugin class from @a classes by URI. + Return value is shared (stored in @a classes) and must not be freed or + modified by the caller in any way. + @return NULL if no plugin class with @a uri is found in @a classes. +*/ +LILV_API +const LilvPluginClass* +lilv_plugin_classes_get_by_uri(const LilvPluginClasses* classes, + const LilvNode* uri); + +/* ScalePoints */ + +LILV_API +void +lilv_scale_points_free(LilvScalePoints* collection); + +LILV_API +unsigned +lilv_scale_points_size(const LilvScalePoints* collection); + +LILV_API +LilvIter* +lilv_scale_points_begin(const LilvScalePoints* collection); + +LILV_API +const LilvScalePoint* +lilv_scale_points_get(const LilvScalePoints* collection, LilvIter* i); + +LILV_API +LilvIter* +lilv_scale_points_next(const LilvScalePoints* collection, LilvIter* i); + +LILV_API +bool +lilv_scale_points_is_end(const LilvScalePoints* collection, LilvIter* i); + +/* UIs */ + +LILV_API +void +lilv_uis_free(LilvUIs* collection); + +LILV_API +unsigned +lilv_uis_size(const LilvUIs* collection); + +LILV_API +LilvIter* +lilv_uis_begin(const LilvUIs* collection); + +LILV_API +const LilvUI* +lilv_uis_get(const LilvUIs* collection, LilvIter* i); + +LILV_API +LilvIter* +lilv_uis_next(const LilvUIs* collection, LilvIter* i); + +LILV_API +bool +lilv_uis_is_end(const LilvUIs* collection, LilvIter* i); + +/** + Get a UI from @a uis by URI. + Return value is shared (stored in @a uis) and must not be freed or + modified by the caller in any way. + @return NULL if no UI with @a uri is found in @a list. +*/ +LILV_API +const LilvUI* +lilv_uis_get_by_uri(const LilvUIs* uis, + const LilvNode* uri); + +/* Nodes */ + +LILV_API +void +lilv_nodes_free(LilvNodes* collection); + +LILV_API +unsigned +lilv_nodes_size(const LilvNodes* collection); + +LILV_API +LilvIter* +lilv_nodes_begin(const LilvNodes* collection); + +LILV_API +const LilvNode* +lilv_nodes_get(const LilvNodes* collection, LilvIter* i); + +LILV_API +LilvIter* +lilv_nodes_next(const LilvNodes* collection, LilvIter* i); + +LILV_API +bool +lilv_nodes_is_end(const LilvNodes* collection, LilvIter* i); + +LILV_API +LilvNode* +lilv_nodes_get_first(const LilvNodes* collection); + +/** + Return whether @a values contains @a value. +*/ +LILV_API +bool +lilv_nodes_contains(const LilvNodes* values, const LilvNode* value); + +/* Plugins */ + +LILV_API +unsigned +lilv_plugins_size(const LilvPlugins* collection); + +LILV_API +LilvIter* +lilv_plugins_begin(const LilvPlugins* collection); + +LILV_API +const LilvPlugin* +lilv_plugins_get(const LilvPlugins* collection, LilvIter* i); + +LILV_API +LilvIter* +lilv_plugins_next(const LilvPlugins* collection, LilvIter* i); + +LILV_API +bool +lilv_plugins_is_end(const LilvPlugins* collection, LilvIter* i); + +/** + Get a plugin from @a plugins by URI. + Return value is shared (stored in @a plugins) and must not be freed or + modified by the caller in any way. + @return NULL if no plugin with @a uri is found in @a plugins. +*/ +LILV_API +const LilvPlugin* +lilv_plugins_get_by_uri(const LilvPlugins* plugins, + const LilvNode* uri); + +/** + @} + @name World + The "world" represents all Lilv state, and is used to discover/load/cache + LV2 data (plugins, UIs, and extensions). + Normal hosts which just need to load plugins by URI should simply use + @ref lilv_world_load_all to discover/load the system's LV2 resources. + @{ +*/ + +/** + Initialize a new, empty world. + If initialization fails, NULL is returned. +*/ +LILV_API +LilvWorld* +lilv_world_new(void); + +/** + Enable/disable language filtering. + Language filtering applies to any functions that return (a) value(s). + With filtering enabled, Lilv will automatically return the best value(s) + for the current LANG. With filtering disabled, all matching values will + be returned regardless of language tag. Filtering is enabled by default. +*/ +#define LILV_OPTION_FILTER_LANG "http://drobilla.net/ns/lilv#filter-lang" + +/** + Enable/disable dynamic manifest support. + Dynamic manifest data will only be loaded if this option is true. +*/ +#define LILV_OPTION_DYN_MANIFEST "http://drobilla.net/ns/lilv#dyn-manifest" + +/** + Set an option option for @a world. + + Currently recognized options: + @ref LILV_OPTION_FILTER_LANG + @ref LILV_OPTION_DYN_MANIFEST +*/ +LILV_API +void +lilv_world_set_option(LilvWorld* world, + const char* uri, + const LilvNode* value); + +/** + Destroy the world, mwahaha. + It is safe to call this function on NULL. + Note that destroying @a world will destroy all the objects it contains + (e.g. instances of LilvPlugin). Do not destroy the world until you are + finished with all objects that came from it. +*/ +LILV_API +void +lilv_world_free(LilvWorld* world); + +/** + Load all installed LV2 bundles on the system. + This is the recommended way for hosts to load LV2 data. It implements the + established/standard best practice for discovering all LV2 data on the + system. The environment variable LV2_PATH may be used to control where + this function will look for bundles. + + Hosts should use this function rather than explicitly load bundles, except + in special circumstances (e.g. development utilities, or hosts that ship + with special plugin bundles which are installed to a known location). +*/ +LILV_API +void +lilv_world_load_all(LilvWorld* world); + +/** + Load a specific bundle. + @a bundle_uri must be a fully qualified URI to the bundle directory, + with the trailing slash, eg. file:///usr/lib/lv2/foo.lv2/ + + Normal hosts should not need this function (use lilv_world_load_all). + + Hosts MUST NOT attach any long-term significance to bundle paths + (e.g. in save files), since there are no guarantees they will remain + unchanged between (or even during) program invocations. Plugins (among + other things) MUST be identified by URIs (not paths) in save files. +*/ +LILV_API +void +lilv_world_load_bundle(LilvWorld* world, + LilvNode* bundle_uri); + +/** + Load all the data associated with the given @c resource. + @param resource Must be a subject (i.e. a URI or a blank node). + @return The number of files parsed, or -1 on error + + All accessible data files linked to @c resource with rdfs:seeAlso will be + loaded into the world model. +*/ +LILV_API +int +lilv_world_load_resource(LilvWorld* world, + const LilvNode* resource); + +/** + Get the parent of all other plugin classes, lv2:Plugin. +*/ +LILV_API +const LilvPluginClass* +lilv_world_get_plugin_class(const LilvWorld* world); + +/** + Return a list of all found plugin classes. + Returned list is owned by world and must not be freed by the caller. +*/ +LILV_API +const LilvPluginClasses* +lilv_world_get_plugin_classes(const LilvWorld* world); + +/** + Return a list of all found plugins. + The returned list contains just enough references to query + or instantiate plugins. The data for a particular plugin will not be + loaded into memory until a call to an lilv_plugin_* function results in + a query (at which time the data is cached with the LilvPlugin so future + queries are very fast). + + The returned list and the plugins it contains are owned by @a world + and must not be freed by caller. +*/ +LILV_API +const LilvPlugins* +lilv_world_get_all_plugins(const LilvWorld* world); + +/** + Find nodes matching a triple pattern. + Either @c subject or @c object may be NULL (i.e. a wildcard), but not both. + @return All matches for the wildcard field, or NULL. +*/ +LILV_API +LilvNodes* +lilv_world_find_nodes(LilvWorld* world, + const LilvNode* subject, + const LilvNode* predicate, + const LilvNode* object); + +/** + @} + @name Plugin + @{ +*/ + +/** + Check if @a plugin is valid. + This is not a rigorous validator, but can be used to reject some malformed + plugins that could cause bugs (e.g. plugins with missing required fields). + + Note that normal hosts do NOT need to use this - lilv does not + load invalid plugins into plugin lists. This is included for plugin + testing utilities, etc. + @return true iff @a plugin is valid. +*/ +LILV_API +bool +lilv_plugin_verify(const LilvPlugin* plugin); + +/** + Get the URI of @a plugin. + Any serialization that refers to plugins should refer to them by this. + Hosts SHOULD NOT save any filesystem paths, plugin indexes, etc. in saved + files; save only the URI. + + The URI is a globally unique identifier for one specific plugin. Two + plugins with the same URI are compatible in port signature, and should + be guaranteed to work in a compatible and consistent way. If a plugin + is upgraded in an incompatible way (eg if it has different ports), it + MUST have a different URI than it's predecessor. + + @return A shared URI value which must not be modified or freed. +*/ +LILV_API +const LilvNode* +lilv_plugin_get_uri(const LilvPlugin* plugin); + +/** + Get the (resolvable) URI of the plugin's "main" bundle. + This returns the URI of the bundle where the plugin itself was found. + Note that the data for a plugin may be spread over many bundles, that is, + lilv_plugin_get_data_uris may return URIs which are not within this bundle. + + Typical hosts should not need to use this function. + Note this always returns a fully qualified URI. If you want a local + filesystem path, use lilv_uri_to_path. + @return a shared string which must not be modified or freed. +*/ +LILV_API +const LilvNode* +lilv_plugin_get_bundle_uri(const LilvPlugin* plugin); + +/** + Get the (resolvable) URIs of the RDF data files that define a plugin. + Typical hosts should not need to use this function. + Note this always returns fully qualified URIs. If you want local + filesystem paths, use lilv_uri_to_path. + @return a list of complete URLs eg. "file:///foo/ABundle.lv2/aplug.ttl", + which is shared and must not be modified or freed. +*/ +LILV_API +const LilvNodes* +lilv_plugin_get_data_uris(const LilvPlugin* plugin); + +/** + Get the (resolvable) URI of the shared library for @a plugin. + Note this always returns a fully qualified URI. If you want a local + filesystem path, use lilv_uri_to_path. + @return a shared string which must not be modified or freed. +*/ +LILV_API +const LilvNode* +lilv_plugin_get_library_uri(const LilvPlugin* plugin); + +/** + Get the name of @a plugin. + This returns the name (doap:name) of the plugin. The name may be + translated according to the current locale, this value MUST NOT be used + as a plugin identifier (use the URI for that). + Returned value must be freed by the caller. +*/ +LILV_API +LilvNode* +lilv_plugin_get_name(const LilvPlugin* plugin); + +/** + Get the class this plugin belongs to (e.g. Filters). +*/ +LILV_API +const LilvPluginClass* +lilv_plugin_get_class(const LilvPlugin* plugin); + +/** + Get a value associated with the plugin in a plugin's data files. + @a predicate must be either a URI or a QName. + + Returns the ?object of all triples found of the form: + + <plugin-uri> predicate ?object + + May return NULL if the property was not found, or if object(s) is not + sensibly represented as a LilvNodes (e.g. blank nodes). + Return value must be freed by caller with lilv_nodes_free. +*/ +LILV_API +LilvNodes* +lilv_plugin_get_value(const LilvPlugin* p, + const LilvNode* predicate); + +/** + Return whether a feature is supported by a plugin. + This will return true if the feature is an optional or required feature + of the plugin. +*/ +LILV_API +bool +lilv_plugin_has_feature(const LilvPlugin* p, + const LilvNode* feature_uri); + +/** + Get the LV2 Features supported (required or optionally) by a plugin. + A feature is "supported" by a plugin if it is required OR optional. + + Since required features have special rules the host must obey, this function + probably shouldn't be used by normal hosts. Using lilv_plugin_get_optional_features + and lilv_plugin_get_required_features separately is best in most cases. + + Returned value must be freed by caller with lilv_nodes_free. +*/ +LILV_API +LilvNodes* +lilv_plugin_get_supported_features(const LilvPlugin* p); + +/** + Get the LV2 Features required by a plugin. + If a feature is required by a plugin, hosts MUST NOT use the plugin if they do not + understand (or are unable to support) that feature. + + All values returned here MUST be passed to the plugin's instantiate method + (along with data, if necessary, as defined by the feature specification) + or plugin instantiation will fail. + + Return value must be freed by caller with lilv_nodes_free. +*/ +LILV_API +LilvNodes* +lilv_plugin_get_required_features(const LilvPlugin* p); + +/** + Get the LV2 Features optionally supported by a plugin. + Hosts MAY ignore optional plugin features for whatever reasons. Plugins + MUST operate (at least somewhat) if they are instantiated without being + passed optional features. + + Return value must be freed by caller with lilv_nodes_free. +*/ +LILV_API +LilvNodes* +lilv_plugin_get_optional_features(const LilvPlugin* p); + +/** + Return whether or not a plugin provides a specific extension data. +*/ +LILV_API +bool +lilv_plugin_has_extension_data(const LilvPlugin* p, + const LilvNode* uri); + +/** + Get a sequence of all extension data provided by a plugin. + This can be used to find which URIs lilv_instance_get_extension_data() + will return a value for without instantiating the plugin. +*/ +LILV_API +LilvNodes* +lilv_plugin_get_extension_data(const LilvPlugin* p); + +/** + Get the number of ports on this plugin. +*/ +LILV_API +uint32_t +lilv_plugin_get_num_ports(const LilvPlugin* p); + +/** + Get the port ranges (minimum, maximum and default values) for all ports. + @a min_values, @a max_values and @a def_values must either point to an array + of N floats, where N is the value returned by lilv_plugin_get_num_ports() + for this plugin, or NULL. The elements of the array will be set to the + the minimum, maximum and default values of the ports on this plugin, + with array index corresponding to port index. If a port doesn't have a + minimum, maximum or default value, or the port's type is not float, the + corresponding array element will be set to NAN. + + This is a convenience method for the common case of getting the range of + all float ports on a plugin, and may be significantly faster than + repeated calls to lilv_port_get_range. +*/ +LILV_API +void +lilv_plugin_get_port_ranges_float(const LilvPlugin* p, + float* min_values, + float* max_values, + float* def_values); + +/** + Get the number of ports on this plugin that are members of some class(es). + Note that this is a varargs function so ports fitting any type 'profile' + desired can be found quickly. REMEMBER TO TERMINATE THE PARAMETER LIST + OF THIS FUNCTION WITH NULL OR VERY NASTY THINGS WILL HAPPEN. +*/ +LILV_API +uint32_t +lilv_plugin_get_num_ports_of_class(const LilvPlugin* p, + const LilvNode* class_1, ...); + +/** + Return whether or not the plugin introduces (and reports) latency. + The index of the latency port can be found with lilv_plugin_get_latency_port + ONLY if this function returns true. +*/ +LILV_API +bool +lilv_plugin_has_latency(const LilvPlugin* p); + +/** + Return the index of the plugin's latency port. + It is a fatal error to call this on a plugin without checking if the port + exists by first calling lilv_plugin_has_latency. + + Any plugin that introduces unwanted latency that should be compensated for + (by hosts with the ability/need) MUST provide this port, which is a control + rate output port that reports the latency for each cycle in frames. +*/ +LILV_API +uint32_t +lilv_plugin_get_latency_port_index(const LilvPlugin* p); + +/** + Get a port on @a plugin by @a index. +*/ +LILV_API +const LilvPort* +lilv_plugin_get_port_by_index(const LilvPlugin* plugin, + uint32_t index); + +/** + Get a port on @a plugin by @a symbol. + Note this function is slower than lilv_plugin_get_port_by_index, + especially on plugins with a very large number of ports. +*/ +LILV_API +const LilvPort* +lilv_plugin_get_port_by_symbol(const LilvPlugin* plugin, + const LilvNode* symbol); + +/** + Get a port on @c plugin by its lv2:designation. + + The designation of a port describes the meaning, assignment, allocation or + role of the port, e.g. "left channel" or "gain". If found, the port with + matching @a port_class and @a designation is be returned, otherwise NULL is + returned. The @a port_class can be used to distinguish the input and output + ports for a particular designation. +*/ +LILV_API +LilvPort* +lilv_plugin_get_port_by_designation(const LilvPlugin* plugin, + const LilvNode* port_class, + const LilvNode* designation); + +/** + Get the project the plugin is a part of. + + More information about the project can be read via lilv_world_find_nodes(), + typically using properties from DOAP (e.g. doap:name). +*/ +LILV_API +LilvNode* +lilv_plugin_get_project(const LilvPlugin* plugin); + +/** + Get the full name of the plugin's author. + Returns NULL if author name is not present. + Returned value must be freed by caller. +*/ +LILV_API +LilvNode* +lilv_plugin_get_author_name(const LilvPlugin* plugin); + +/** + Get the email address of the plugin's author. + Returns NULL if author email address is not present. + Returned value must be freed by caller. +*/ +LILV_API +LilvNode* +lilv_plugin_get_author_email(const LilvPlugin* plugin); + +/** + Get the address of the plugin author's home page. + Returns NULL if author homepage is not present. + Returned value must be freed by caller. +*/ +LILV_API +LilvNode* +lilv_plugin_get_author_homepage(const LilvPlugin* plugin); + +/** + Return true iff @a plugin has been replaced by another plugin. + + The plugin will still be usable, but hosts should hide them from their + user interfaces to prevent users from using deprecated plugins. +*/ +LILV_API +bool +lilv_plugin_is_replaced(const LilvPlugin* plugin); + +/** + Write the Turtle description of @c plugin to @c plugin_file. + + This function is particularly useful for porting plugins in conjunction with + an LV2 bridge such as NASPRO. +*/ +LILV_API +void +lilv_plugin_write_description(LilvWorld* world, + const LilvPlugin* plugin, + const LilvNode* base_uri, + FILE* plugin_file); + +/** + Write a manifest entry for @c plugin to @c manifest_file. + + This function is intended for use with lilv_plugin_write_description to + write a complete description of a plugin to a bundle. +*/ +LILV_API +void +lilv_plugin_write_manifest_entry(LilvWorld* world, + const LilvPlugin* plugin, + const LilvNode* base_uri, + FILE* manifest_file, + const char* plugin_file_path); + +/** + Get the resources related to @c plugin with lv2:appliesTo. + + Some plugin-related resources are not linked directly to the plugin with + rdfs:seeAlso and thus will not be automatically loaded along with the plugin + data (usually for performance reasons). All such resources of the given @c + type related to @c plugin can be accessed with this function. + + If @c type is NULL, all such resources will be returned, regardless of type. + + To actually load the data for each returned resource, use + lilv_world_load_resource. +*/ +LILV_API +LilvNodes* +lilv_plugin_get_related(const LilvPlugin* plugin, const LilvNode* type); + +/** + @} + @name Port + @{ +*/ + +/** + Port analog of lilv_plugin_get_value. +*/ +LILV_API +LilvNodes* +lilv_port_get_value(const LilvPlugin* plugin, + const LilvPort* port, + const LilvNode* predicate); + +/** + Return the LV2 port properties of a port. +*/ +LILV_API +LilvNodes* +lilv_port_get_properties(const LilvPlugin* plugin, + const LilvPort* port); + +/** + Return whether a port has a certain property. +*/ +LILV_API +bool +lilv_port_has_property(const LilvPlugin* p, + const LilvPort* port, + const LilvNode* property_uri); + +/** + Return whether a port is an event port and supports a certain event type. +*/ +LILV_API +bool +lilv_port_supports_event(const LilvPlugin* p, + const LilvPort* port, + const LilvNode* event_uri); + +/** + Get the index of a port. + The index is only valid for the life of the plugin and may change between + versions. For a stable identifier, use the symbol. +*/ +LILV_API +uint32_t +lilv_port_get_index(const LilvPlugin* plugin, + const LilvPort* port); + +/** + Get the symbol of a port. + The 'symbol' is a short string, a valid C identifier. + Returned value is owned by @a port and must not be freed. +*/ +LILV_API +const LilvNode* +lilv_port_get_symbol(const LilvPlugin* plugin, + const LilvPort* port); + +/** + Get the name of a port. + This is guaranteed to return the untranslated name (the doap:name in the + data file without a language tag). Returned value must be freed by + the caller. +*/ +LILV_API +LilvNode* +lilv_port_get_name(const LilvPlugin* plugin, + const LilvPort* port); + +/** + Get all the classes of a port. + This can be used to determine if a port is an input, output, audio, + control, midi, etc, etc, though it's simpler to use lilv_port_is_a. + The returned list does not include lv2:Port, which is implied. + Returned value is shared and must not be destroyed by caller. +*/ +LILV_API +const LilvNodes* +lilv_port_get_classes(const LilvPlugin* plugin, + const LilvPort* port); + +/** + Determine if a port is of a given class (input, output, audio, etc). + For convenience/performance/extensibility reasons, hosts are expected to + create a LilvNode for each port class they "care about". Well-known type + URI strings are defined (e.g. LILV_URI_INPUT_PORT) for convenience, but + this function is designed so that Lilv is usable with any port types + without requiring explicit support in Lilv. +*/ +LILV_API +bool +lilv_port_is_a(const LilvPlugin* plugin, + const LilvPort* port, + const LilvNode* port_class); + +/** + Get the default, minimum, and maximum values of a port. + + @a def, @a min, and @a max are outputs, pass pointers to uninitialized + LilvNode* variables. These will be set to point at new values (which must + be freed by the caller using lilv_node_free), or NULL if the value does not + exist. +*/ +LILV_API +void +lilv_port_get_range(const LilvPlugin* plugin, + const LilvPort* port, + LilvNode** deflt, + LilvNode** min, + LilvNode** max); + +/** + Get the scale points (enumeration values) of a port. + This returns a collection of 'interesting' named values of a port + (e.g. appropriate entries for a UI selector associated with this port). + Returned value may be NULL if @a port has no scale points, otherwise it + must be freed by caller with lilv_scale_points_free. +*/ +LILV_API +LilvScalePoints* +lilv_port_get_scale_points(const LilvPlugin* plugin, + const LilvPort* port); + +/** + @} + @name Plugin State + @{ +*/ + +/** + Load a state snapshot from @c world's RDF model. + @param subject The subject of the state description (e.g. a preset URI). + @return A new LilvState which must be freed with lilv_state_free(). +*/ +LILV_API +LilvState* +lilv_state_new_from_world(LilvWorld* world, + LV2_URID_Map* map, + const LilvNode* subject); + +/** + Load a state snapshot from a file. + @param subject The subject of the state description (e.g. a preset URI). + @param path The path of the file containing the state description. + @return A new LilvState which must be freed with lilv_state_free(). + + If @c subject is NULL, it is taken to be the URI of the file (i.e. + "<>" in Turtle). + + This function parses the file separately to create the state, it does not + parse the file into the world model, i.e. the returned state is the only + new memory consumed once this function returns. +*/ +LILV_API +LilvState* +lilv_state_new_from_file(LilvWorld* world, + LV2_URID_Map* map, + const LilvNode* subject, + const char* path); + +/** + Load a state snapshot from a string made by lilv_state_to_string(). +*/ +LILV_API +LilvState* +lilv_state_new_from_string(LilvWorld* world, + LV2_URID_Map* map, + const char* str); + +/** + Function to get a port value. + @param port_symbol The symbol of the port. + @param user_data The user_data passed to lilv_state_new_from_instance(). + @param size (Output) The size of the returned value. + @param type (Output) The URID of the type of the returned value. + @return A pointer to the port value. + + This function MUST set @p size and @p type appropriately. +*/ +typedef const void* (*LilvGetPortValueFunc)(const char* port_symbol, + void* user_data, + uint32_t* size, + uint32_t* type); + +/** + Create a new state snapshot from a plugin instance. + + @param plugin The plugin this state applies to. + + @param instance An instance of @c plugin. + + @param file_dir Directory of files created by the plugin earlier (or NULL). + This is for hosts that support file creation at any time with state + state:makePath. These files will be copied as necessary to @c copy_dir and + not be referred to directly in state (a temporary directory is appropriate). + + @param copy_dir Directory of copies of files in @c file_dir (or NULL). This + directory will have the same structure as @c file_dir but with possibly + modified file names to distinguish different revisions. If you only care + about saving one state snapshot, it can be the same as @c save_dir. Plugin + state will refer to files in this directory. + + @param save_dir Directory of files created by plugin during save (or NULL). + If the state will be saved, this should be the bundle directory later passed + to lilv_state_save. + + @param link_dir Directory of links to external files (or NULL). A link will + be made in this directory to any external files referred to in plugin state. + In turn, links will be created in the save directory to these links (e.g. + save_dir/file => link_dir/file => /foo/bar/file). This allows many state + snapshots to share a single link to an external file, so archival + (e.g. with tar -h) will not create several copies of the file. If this is + not required, it can be the same as save_dir. + + @param flags Bitwise OR of LV2_State_Flags values. + + @param features Features to pass LV2_State_Interface.save(). + + @return A new LilvState which must be freed with lilv_state_free(). + + This function may be called simultaneously with any instance function + (except discovery functions) unless the threading class of that function + explicitly disallows this. + + To support advanced file functionality, there are several directory + parameters. Simple hosts that only wish to save a single plugins state once + may simply use the same directory for all of them (or pass NULL to not + support files at all). The multiple parameters are necessary to support + saving an instances state many times while avoiding any duplication of data. + + If supported (via state:makePath passed to LV2_Descriptor::instantiate()), + @c file_dir should be the directory where any files created by the plugin + (not during save time, e.g. during instantiation) are stored. These files + will be copied to preserve their state at this time.plugin-created files are stored. + Lilv will assume any files within this directory (recursively) are created + by the plugin and all other files are immutable. Note that this function + does not save the state, use lilv_state_save() for that. + + See state.h from the + LV2 State extension for details on the @c flags and @c features parameters. +*/ +LILV_API +LilvState* +lilv_state_new_from_instance(const LilvPlugin* plugin, + LilvInstance* instance, + LV2_URID_Map* map, + const char* file_dir, + const char* copy_dir, + const char* link_dir, + const char* save_dir, + LilvGetPortValueFunc get_value, + void* user_data, + uint32_t flags, + const LV2_Feature *const * features); + +/** + Free @c state. +*/ +LILV_API +void +lilv_state_free(LilvState* state); + +/** + Return true iff @c a is equivalent to @c b. +*/ +LILV_API +bool +lilv_state_equals(const LilvState* a, const LilvState* b); + +/** + Return the number of properties in @c state. +*/ +LILV_API +unsigned +lilv_state_get_num_properties(const LilvState* state); + +/** + Get the URI of the plugin @c state applies to. +*/ +LILV_API +const LilvNode* +lilv_state_get_plugin_uri(const LilvState* state); + +/** + Get the label of @c state. +*/ +LILV_API +const char* +lilv_state_get_label(const LilvState* state); + +/** + Set the label of @c state. +*/ +LILV_API +void +lilv_state_set_label(LilvState* state, + const char* label); + +/** + Function to set a port value. + @param port_symbol The symbol of the port. + @param user_data The user_data passed to lilv_state_restore(). + @param size The size of @p value. + @param type The URID of the type of @p value. + @param value A pointer to the port value. +*/ +typedef void (*LilvSetPortValueFunc)(const char* port_symbol, + void* user_data, + const void* value, + uint32_t size, + uint32_t type); + +/** + Restore a plugin instance from a state snapshot. + @param state The state to restore, which must apply to the correct plugin. + @param instance An instance of the plugin @c state applies to. + @param set_value A function to set a port value (may be NULL). + @param flags Bitwise OR of LV2_State_Flags values. + @param features Features to pass LV2_State_Interface.restore(). + + This will set all the properties of @c instance to the values stored in @c + state. If @c set_value is provided, it will be called (with the given @c + user_data) to restore each port value, otherwise the host must restore the + port values itself (using lilv_state_get_port_value) in order to completely + restore @c state. + + If the state has properties, this function is in the "instantiation" + threading class, i.e. it MUST NOT be called simultaneously with any function + on the same plugin instance. If the state has no properties, only port + values are set via @c set_value. + + See state.h from the + LV2 State extension for details on the @c flags and @c features parameters. +*/ +LILV_API +void +lilv_state_restore(const LilvState* state, + LilvInstance* instance, + LilvSetPortValueFunc set_value, + void* user_data, + uint32_t flags, + const LV2_Feature *const * features); + +/** + Save state to a file. + @param unmap URID unmapper. + @param state State to save. + @param uri URI of state, may be NULL. + @param dir Path of the bundle directory to save into. + @param filename Path of the state file relative to @c dir. + + The format of state on disk is compatible with that defined in the LV2 + preset extension, i.e. this function may be used to save presets which can + be loaded by any host. + + If @c uri is NULL, the preset URI will be a file URI, but the bundle + can safely be moved (i.e. the state file will use "<>" as the subject). +*/ +LILV_API +int +lilv_state_save(LilvWorld* world, + LV2_URID_Map* map, + LV2_URID_Unmap* unmap, + const LilvState* state, + const char* uri, + const char* dir, + const char* filename); + +/** + Save state to a string. This function does not use the filesystem. +*/ +LILV_API +char* +lilv_state_to_string(LilvWorld* world, + LV2_URID_Map* map, + LV2_URID_Unmap* unmap, + const LilvState* state, + const char* uri, + const char* base_uri); + +/** + @} + @name Scale Point + @{ +*/ + +/** + Get the label of this scale point (enumeration value) + Returned value is owned by @a point and must not be freed. +*/ +LILV_API +const LilvNode* +lilv_scale_point_get_label(const LilvScalePoint* point); + +/** + Get the value of this scale point (enumeration value) + Returned value is owned by @a point and must not be freed. +*/ +LILV_API +const LilvNode* +lilv_scale_point_get_value(const LilvScalePoint* point); + +/** + @} + @name Plugin Class + @{ +*/ + +/** + Get the URI of this class' superclass. + Returned value is owned by @a plugin_class and must not be freed by caller. + Returned value may be NULL, if class has no parent. +*/ +LILV_API +const LilvNode* +lilv_plugin_class_get_parent_uri(const LilvPluginClass* plugin_class); + +/** + Get the URI of this plugin class. + Returned value is owned by @a plugin_class and must not be freed by caller. +*/ +LILV_API +const LilvNode* +lilv_plugin_class_get_uri(const LilvPluginClass* plugin_class); + +/** + Get the label of this plugin class, ie "Oscillators". + Returned value is owned by @a plugin_class and must not be freed by caller. +*/ +LILV_API +const LilvNode* +lilv_plugin_class_get_label(const LilvPluginClass* plugin_class); + +/** + Get the subclasses of this plugin class. + Returned value must be freed by caller with lilv_plugin_classes_free. +*/ +LILV_API +LilvPluginClasses* +lilv_plugin_class_get_children(const LilvPluginClass* plugin_class); + +/** + @} + @name Plugin Instance + @{ +*/ + +/** + @cond 0 +*/ + +/* Instance of a plugin. + This is exposed in the ABI to allow inlining of performance critical + functions like lilv_instance_run (simple wrappers of functions in lv2.h). + This is for performance reasons, user code should not use this definition + in any way (which is why it is not machine documented). + Truly private implementation details are hidden via @a ref pimpl. +*/ +struct LilvInstanceImpl { + const LV2_Descriptor* lv2_descriptor; + LV2_Handle lv2_handle; + void* pimpl; +}; + +/** + @endcond +*/ + +/** + Instantiate a plugin. + The returned value is a lightweight handle for an LV2 plugin instance, + it does not refer to @a plugin, or any other Lilv state. The caller must + eventually free it with lilv_instance_free. + @a features is a NULL-terminated array of features the host supports. + NULL may be passed if the host supports no additional features. + @return NULL if instantiation failed. +*/ +LILV_API +LilvInstance* +lilv_plugin_instantiate(const LilvPlugin* plugin, + double sample_rate, + const LV2_Feature*const* features); + +/** + Free a plugin instance. + It is safe to call this function on NULL. + @a instance is invalid after this call. +*/ +LILV_API +void +lilv_instance_free(LilvInstance* instance); + +#ifndef LILV_INTERNAL + +/** + Get the URI of the plugin which @a instance is an instance of. + Returned string is shared and must not be modified or deleted. +*/ +static inline const char* +lilv_instance_get_uri(const LilvInstance* instance) +{ + return instance->lv2_descriptor->URI; +} + +/** + Connect a port to a data location. + This may be called regardless of whether the plugin is activated, + activation and deactivation does not destroy port connections. +*/ +static inline void +lilv_instance_connect_port(LilvInstance* instance, + uint32_t port_index, + void* data_location) +{ + instance->lv2_descriptor->connect_port + (instance->lv2_handle, port_index, data_location); +} + +/** + Activate a plugin instance. + This resets all state information in the plugin, except for port data + locations (as set by lilv_instance_connect_port). This MUST be called + before calling lilv_instance_run. +*/ +static inline void +lilv_instance_activate(LilvInstance* instance) +{ + if (instance->lv2_descriptor->activate) + instance->lv2_descriptor->activate(instance->lv2_handle); +} + +/** + Run @a instance for @a sample_count frames. + If the hint lv2:hardRTCapable is set for this plugin, this function is + guaranteed not to block. +*/ +static inline void +lilv_instance_run(LilvInstance* instance, + uint32_t sample_count) +{ + instance->lv2_descriptor->run(instance->lv2_handle, sample_count); +} + +/** + Deactivate a plugin instance. + Note that to run the plugin after this you must activate it, which will + reset all state information (except port connections). +*/ +static inline void +lilv_instance_deactivate(LilvInstance* instance) +{ + if (instance->lv2_descriptor->deactivate) + instance->lv2_descriptor->deactivate(instance->lv2_handle); +} + +/** + Get extension data from the plugin instance. + The type and semantics of the data returned is specific to the particular + extension, though in all cases it is shared and must not be deleted. +*/ +static inline const void* +lilv_instance_get_extension_data(const LilvInstance* instance, + const char* uri) +{ + if (instance->lv2_descriptor->extension_data) + return instance->lv2_descriptor->extension_data(uri); + else + return NULL; +} + +/** + Get the LV2_Descriptor of the plugin instance. + Normally hosts should not need to access the LV2_Descriptor directly, + use the lilv_instance_* functions. + + The returned descriptor is shared and must not be deleted. +*/ +static inline const LV2_Descriptor* +lilv_instance_get_descriptor(const LilvInstance* instance) +{ + return instance->lv2_descriptor; +} + +/** + Get the LV2_Handle of the plugin instance. + Normally hosts should not need to access the LV2_Handle directly, + use the lilv_instance_* functions. + + The returned handle is shared and must not be deleted. +*/ +static inline LV2_Handle +lilv_instance_get_handle(const LilvInstance* instance) +{ + return instance->lv2_handle; +} + +#endif /* LILV_INTERNAL */ + +/** + @} + @name Plugin UI + @{ +*/ + +/** + Get all UIs for @a plugin. + Returned value must be freed by caller using lilv_uis_free. +*/ +LILV_API +LilvUIs* +lilv_plugin_get_uis(const LilvPlugin* plugin); + +/** + Get the URI of a Plugin UI. + @param ui The Plugin UI + @return a shared value which must not be modified or freed. +*/ +LILV_API +const LilvNode* +lilv_ui_get_uri(const LilvUI* ui); + +/** + Get the types (URIs of RDF classes) of a Plugin UI. + @param ui The Plugin UI + @return a shared value which must not be modified or freed. + + Note that in most cases lilv_ui_is_supported should be used which finds the + UI type, avoding the need to use this function (and type specific logic). +*/ +LILV_API +const LilvNodes* +lilv_ui_get_classes(const LilvUI* ui); + +/** + Check whether a plugin UI has a given type. + @param ui The Plugin UI + @param class_uri The URI of the LV2 UI type to check this UI against +*/ +LILV_API +bool +lilv_ui_is_a(const LilvUI* ui, const LilvNode* class_uri); + +/** + Function to determine whether a UI type is supported. + + This is provided by the user and must return non-zero iff using a UI of type + @c ui_type_uri in a container of type @c container_type_uri is supported. +*/ +typedef unsigned (*LilvUISupportedFunc)(const char* container_type_uri, + const char* ui_type_uri); + +/** + Return true iff a Plugin UI is supported as a given widget type. + @param ui The Plugin UI + @param supported_func User provided supported predicate. + @param container_type The widget type to host the UI within. + @param ui_type (Output) If non-NULL, set to the native type of the UI + which is owned by @c ui and must not be freed by the caller. + @return The embedding quality level returned by @c supported_func. +*/ +LILV_API +unsigned +lilv_ui_is_supported(const LilvUI* ui, + LilvUISupportedFunc supported_func, + const LilvNode* container_type, + const LilvNode** ui_type); + +/** + Get the URI for a Plugin UI's bundle. + @param ui The Plugin UI + @return a shared value which must not be modified or freed. +*/ +LILV_API +const LilvNode* +lilv_ui_get_bundle_uri(const LilvUI* ui); + +/** + Get the URI for a Plugin UI's shared library. + @param ui The Plugin UI + @return a shared value which must not be modified or freed. +*/ +LILV_API +const LilvNode* +lilv_ui_get_binary_uri(const LilvUI* ui); + +/** + Custom calls +*/ +LILV_API +LilvNodes* +lilv_ui_get_supported_features(const LilvUI* ui); + +LILV_API +LilvNodes* +lilv_ui_get_required_features(const LilvUI* ui); + +LILV_API +LilvNodes* +lilv_ui_get_optional_features(const LilvUI* ui); + +LILV_API +LilvNodes* +lilv_ui_get_extension_data(const LilvUI* ui); + +/** + @} + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LILV_LILV_H */ diff --git a/source/libs/lilv/lilv-0.14.4/lilv/lilvmm.hpp b/source/libs/lilv/lilv-0.14.4/lilv/lilvmm.hpp new file mode 100644 index 000000000..3985c2b7c --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/lilv/lilvmm.hpp @@ -0,0 +1,332 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LILV_LILVMM_HPP +#define LILV_LILVMM_HPP + +#include "lilv/lilv.h" + +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define LILV_DEPRECATED __attribute__((__deprecated__)) +#else +# define LILV_DEPRECATED +#endif + +namespace Lilv { + +static inline const char* +uri_to_path(const char* uri) { + return lilv_uri_to_path(uri); +} + +#define LILV_WRAP0(RT, prefix, name) \ + inline RT name() { return lilv_ ## prefix ## _ ## name (me); } + +#define LILV_WRAP0_VOID(prefix, name) \ + inline void name() { lilv_ ## prefix ## _ ## name(me); } + +#define LILV_WRAP1(RT, prefix, name, T1, a1) \ + inline RT name(T1 a1) { return lilv_ ## prefix ## _ ## name (me, a1); } + +#define LILV_WRAP1_VOID(prefix, name, T1, a1) \ + inline void name(T1 a1) { lilv_ ## prefix ## _ ## name(me, a1); } + +#define LILV_WRAP2(RT, prefix, name, T1, a1, T2, a2) \ + inline RT name(T1 a1, T2 a2) { \ + return lilv_ ## prefix ## _ ## name(me, a1, a2); \ + } + +#define LILV_WRAP2_VOID(prefix, name, T1, a1, T2, a2) \ + inline void name(T1 a1, T2 a2) { lilv_ ## prefix ## _ ## name(me, a1, a2); } + +#ifndef SWIG +#define LILV_WRAP_CONVERSION(CT) \ + inline operator CT*() const { return me; } +#else +#define LILV_WRAP_CONVERSION(CT) +#endif + +struct Node { + inline Node(LilvNode* node) : me(node) {} + inline Node(const LilvNode* node) : me(lilv_node_duplicate(node)) {} + inline Node(const Node& copy) : me(lilv_node_duplicate(copy.me)) {} + + inline ~Node() { lilv_node_free(me); } + + inline bool equals(const Node& other) const { + return lilv_node_equals(me, other.me); + } + + inline bool operator==(const Node& other) const { return equals(other); } + + LILV_WRAP_CONVERSION(LilvNode); + + LILV_WRAP0(char*, node, get_turtle_token); + LILV_WRAP0(bool, node, is_uri); + LILV_WRAP0(const char*, node, as_uri); + LILV_WRAP0(bool, node, is_blank); + LILV_WRAP0(const char*, node, as_blank); + LILV_WRAP0(bool, node, is_literal); + LILV_WRAP0(bool, node, is_string); + LILV_WRAP0(const char*, node, as_string); + LILV_WRAP0(bool, node, is_float); + LILV_WRAP0(float, node, as_float); + LILV_WRAP0(bool, node, is_int); + LILV_WRAP0(int, node, as_int); + LILV_WRAP0(bool, node, is_bool); + LILV_WRAP0(bool, node, as_bool); + + LilvNode* me; +}; + +struct ScalePoint { + inline ScalePoint(const LilvScalePoint* c_obj) : me(c_obj) {} + LILV_WRAP_CONVERSION(const LilvScalePoint); + + LILV_WRAP0(const LilvNode*, scale_point, get_label); + LILV_WRAP0(const LilvNode*, scale_point, get_value); + + const LilvScalePoint* me; +}; + +struct PluginClass { + inline PluginClass(const LilvPluginClass* c_obj) : me(c_obj) {} + LILV_WRAP_CONVERSION(const LilvPluginClass); + + LILV_WRAP0(Node, plugin_class, get_parent_uri); + LILV_WRAP0(Node, plugin_class, get_uri); + LILV_WRAP0(Node, plugin_class, get_label); + LILV_WRAP0(LilvPluginClasses*, plugin_class, get_children); + + const LilvPluginClass* me; +}; + +#define LILV_WRAP_COLL(CT, ET, prefix) \ + inline CT(const Lilv ## CT* c_obj) : me(c_obj) {} \ + LILV_WRAP_CONVERSION(const Lilv ## CT); \ + LILV_WRAP0(unsigned, prefix, size); \ + LILV_WRAP1(const ET, prefix, get, LilvIter*, i); \ + LILV_WRAP0(LilvIter*, prefix, begin); \ + LILV_WRAP1(LilvIter*, prefix, next, LilvIter*, i); \ + LILV_WRAP1(bool, prefix, is_end, LilvIter*, i); \ + const Lilv ## CT* me; \ + +struct PluginClasses { + LILV_WRAP_COLL(PluginClasses, PluginClass, plugin_classes); + LILV_WRAP1(const PluginClass, plugin_classes, + get_by_uri, const LilvNode*, uri); +}; + +struct ScalePoints { + LILV_WRAP_COLL(ScalePoints, ScalePoint, scale_points); +}; + +struct Nodes { + LILV_WRAP_COLL(Nodes, Node, nodes); + LILV_WRAP1(bool, nodes, contains, const Node, node); + LILV_WRAP0(Node, nodes, get_first); +}; + +struct Port { + inline Port(const LilvPlugin* p, const LilvPort* c_obj) + : parent(p), me(c_obj) + {} + + LILV_WRAP_CONVERSION(const LilvPort); + +#define LILV_PORT_WRAP0(RT, name) \ + inline RT name () { return lilv_port_ ## name (parent, me); } + +#define LILV_PORT_WRAP1(RT, name, T1, a1) \ + inline RT name (T1 a1) { return lilv_port_ ## name (parent, me, a1); } + + LILV_PORT_WRAP1(LilvNodes*, get_value, LilvNode*, predicate); + LILV_PORT_WRAP0(LilvNodes*, get_properties) + LILV_PORT_WRAP1(bool, has_property, LilvNode*, property_uri); + LILV_PORT_WRAP1(bool, supports_event, LilvNode*, event_uri); + LILV_PORT_WRAP0(const LilvNode*, get_symbol); + LILV_PORT_WRAP0(LilvNode*, get_name); + LILV_PORT_WRAP0(const LilvNodes*, get_classes); + LILV_PORT_WRAP1(bool, is_a, LilvNode*, port_class); + LILV_PORT_WRAP0(LilvScalePoints*, get_scale_points); + + // TODO: get_range (output parameters) + + const LilvPlugin* parent; + const LilvPort* me; +}; + +struct UI { + inline UI(const LilvUI* c_obj) : me(c_obj) {} + LILV_WRAP_CONVERSION(const LilvUI); + + LILV_WRAP0(Node, ui, get_uri); + LILV_WRAP1(bool, ui, is_a, LilvNode*, ui_class); + LILV_WRAP0(Node, ui, get_bundle_uri); + LILV_WRAP0(Node, ui, get_binary_uri); + LILV_WRAP0(Nodes, ui, get_supported_features); + LILV_WRAP0(Nodes, ui, get_required_features); + LILV_WRAP0(Nodes, ui, get_optional_features); + LILV_WRAP0(Nodes, ui, get_extension_data); + + const LilvUI* me; +}; + +struct UIs { + LILV_WRAP_COLL(UIs, UI, uis); +}; + +struct Plugin { + inline Plugin(const LilvPlugin* c_obj) : me(c_obj) {} + LILV_WRAP_CONVERSION(const LilvPlugin); + + LILV_WRAP0(bool, plugin, verify); + LILV_WRAP0(Node, plugin, get_uri); + LILV_WRAP0(Node, plugin, get_bundle_uri); + LILV_WRAP0(Nodes, plugin, get_data_uris); + LILV_WRAP0(Node, plugin, get_library_uri); + LILV_WRAP0(Node, plugin, get_name); + LILV_WRAP0(PluginClass, plugin, get_class); + LILV_WRAP1(Nodes, plugin, get_value, Node, pred); + LILV_WRAP1(bool, plugin, has_feature, Node, feature_uri); + LILV_WRAP0(Nodes, plugin, get_supported_features); + LILV_WRAP0(Nodes, plugin, get_required_features); + LILV_WRAP0(Nodes, plugin, get_optional_features); + LILV_WRAP0(unsigned, plugin, get_num_ports); + LILV_WRAP0(bool, plugin, has_latency); + LILV_WRAP0(unsigned, plugin, get_latency_port_index); + LILV_WRAP0(Node, plugin, get_author_name); + LILV_WRAP0(Node, plugin, get_author_email); + LILV_WRAP0(Node, plugin, get_author_homepage); + LILV_WRAP0(bool, plugin, is_replaced); + LILV_WRAP0(Nodes, plugin, get_extension_data); + LILV_WRAP0(UIs, plugin, get_uis); + + inline Port get_port_by_index(unsigned index) { + return Port(me, lilv_plugin_get_port_by_index(me, index)); + } + + inline Port get_port_by_symbol(LilvNode* symbol) { + return Port(me, lilv_plugin_get_port_by_symbol(me, symbol)); + } + + inline void get_port_ranges_float(float* min_values, + float* max_values, + float* def_values) { + return lilv_plugin_get_port_ranges_float( + me, min_values, max_values, def_values); + } + + inline unsigned get_num_ports_of_class(LilvNode* class_1, + LilvNode* class_2) { + // TODO: varargs + return lilv_plugin_get_num_ports_of_class(me, class_1, class_2, NULL); + } + + const LilvPlugin* me; +}; + +struct Plugins { + LILV_WRAP_COLL(Plugins, Plugin, plugins); + LILV_WRAP1(const Plugin, plugins, get_by_uri, const LilvNode*, uri); +}; + +struct Instance { + inline Instance(LilvInstance* instance) : me(instance) {} + + LILV_DEPRECATED + inline Instance(Plugin plugin, double sample_rate) { + me = lilv_plugin_instantiate(plugin, sample_rate, NULL); + } + + LILV_DEPRECATED inline Instance(Plugin plugin, + double sample_rate, + LV2_Feature* const* features) { + me = lilv_plugin_instantiate(plugin, sample_rate, features); + } + + static inline Instance* create(Plugin plugin, + double sample_rate, + LV2_Feature* const* features) { + LilvInstance* me = lilv_plugin_instantiate( + plugin, sample_rate, features); + + return me ? new Instance(me) : NULL; + } + + LILV_WRAP_CONVERSION(LilvInstance); + + LILV_WRAP2_VOID(instance, connect_port, + unsigned, port_index, + void*, data_location); + + LILV_WRAP0_VOID(instance, activate); + LILV_WRAP1_VOID(instance, run, unsigned, sample_count); + LILV_WRAP0_VOID(instance, deactivate); + + inline const void* get_extension_data(const char* uri) { + return lilv_instance_get_extension_data(me, uri); + } + + inline const LV2_Descriptor* get_descriptor() { + return lilv_instance_get_descriptor(me); + } + + inline LV2_Handle get_handle() { + return lilv_instance_get_handle(me); + } + + LilvInstance* me; +}; + +struct World { + inline World() : me(lilv_world_new()) {} + inline ~World() { lilv_world_free(me); } + + inline LilvNode* new_uri(const char* uri) { + return lilv_new_uri(me, uri); + } + inline LilvNode* new_string(const char* str) { + return lilv_new_string(me, str); + } + inline LilvNode* new_int(int val) { + return lilv_new_int(me, val); + } + inline LilvNode* new_float(float val) { + return lilv_new_float(me, val); + } + inline LilvNode* new_bool(bool val) { + return lilv_new_bool(me, val); + } + inline Nodes find_nodes(const LilvNode* subject, + const LilvNode* predicate, + const LilvNode* object) { + return lilv_world_find_nodes(me, subject, predicate, object); + } + + LILV_WRAP2_VOID(world, set_option, const char*, uri, LilvNode*, value); + LILV_WRAP0_VOID(world, load_all); + LILV_WRAP1_VOID(world, load_bundle, LilvNode*, bundle_uri); + LILV_WRAP0(const LilvPluginClass*, world, get_plugin_class); + LILV_WRAP0(const LilvPluginClasses*, world, get_plugin_classes); + LILV_WRAP0(const Plugins, world, get_all_plugins); + + LilvWorld* me; +}; + +} /* namespace Lilv */ + +#endif /* LILV_LILVMM_HPP */ diff --git a/source/libs/lilv/lilv-0.14.4/src/collections.c b/source/libs/lilv/lilv-0.14.4/src/collections.c new file mode 100644 index 000000000..f7a035a3a --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/collections.c @@ -0,0 +1,214 @@ +/* + Copyright 2008-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "lilv_internal.h" + +int +lilv_ptr_cmp(const void* a, const void* b, void* user_data) +{ + return (intptr_t)a - (intptr_t)b; +} + +int +lilv_resource_node_cmp(const void* a, const void* b, void* user_data) +{ + const SordNode* an = ((const LilvNode*)a)->node; + const SordNode* bn = ((const LilvNode*)b)->node; + return (intptr_t)an - (intptr_t)bn; +} + +/* Generic collection functions */ + +static inline LilvCollection* +lilv_collection_new(ZixComparator cmp, ZixDestroyFunc destructor) +{ + return zix_tree_new(false, cmp, NULL, destructor); +} + +void +lilv_collection_free(LilvCollection* coll) +{ + if (coll) + zix_tree_free((ZixTree*)coll); +} + +unsigned +lilv_collection_size(const LilvCollection* coll) +{ + return (coll ? zix_tree_size((const ZixTree*)coll) : 0); +} + +LilvIter* +lilv_collection_begin(const LilvCollection* collection) +{ + if (collection) { + return (LilvIter*)zix_tree_begin((ZixTree*)collection); + } + return NULL; +} + +void* +lilv_collection_get(const LilvCollection* collection, + const LilvIter* i) +{ + return zix_tree_get((ZixTreeIter*)i); +} + +/* Constructors */ + +LilvScalePoints* +lilv_scale_points_new(void) +{ + return lilv_collection_new(lilv_ptr_cmp, + (ZixDestroyFunc)lilv_scale_point_free); +} + +LilvNodes* +lilv_nodes_new(void) +{ + return lilv_collection_new(lilv_ptr_cmp, + (ZixDestroyFunc)lilv_node_free); +} + +LilvUIs* +lilv_uis_new(void) +{ + return lilv_collection_new(lilv_header_compare_by_uri, + (ZixDestroyFunc)lilv_ui_free); +} + +LilvPluginClasses* +lilv_plugin_classes_new(void) +{ + return lilv_collection_new(lilv_header_compare_by_uri, + (ZixDestroyFunc)lilv_plugin_class_free); +} + +/* URI based accessors (for collections of things with URIs) */ + +LILV_API +const LilvPluginClass* +lilv_plugin_classes_get_by_uri(const LilvPluginClasses* coll, + const LilvNode* uri) +{ + return (LilvPluginClass*)lilv_collection_get_by_uri( + (const ZixTree*)coll, uri); +} + +LILV_API +const LilvUI* +lilv_uis_get_by_uri(const LilvUIs* coll, const LilvNode* uri) +{ + return (LilvUI*)lilv_collection_get_by_uri((const ZixTree*)coll, uri); +} + +/* Plugins */ + +LilvPlugins* +lilv_plugins_new(void) +{ + return lilv_collection_new(lilv_header_compare_by_uri, NULL); +} + +LILV_API +const LilvPlugin* +lilv_plugins_get_by_uri(const LilvPlugins* list, const LilvNode* uri) +{ + return (LilvPlugin*)lilv_collection_get_by_uri((const ZixTree*)list, uri); +} + +/* Nodes */ + +LILV_API +bool +lilv_nodes_contains(const LilvNodes* list, const LilvNode* value) +{ + LILV_FOREACH(nodes, i, list) + if (lilv_node_equals(lilv_nodes_get(list, i), value)) + return true; + + return false; +} + +/* Iterator */ + +#define LILV_COLLECTION_IMPL(prefix, CT, ET) \ +LILV_API \ +unsigned \ +prefix##_size(const CT* collection) { \ + return lilv_collection_size(collection); \ +} \ +\ +LILV_API \ +LilvIter* \ +prefix##_begin(const CT* collection) { \ + return lilv_collection_begin(collection); \ +} \ +\ +LILV_API \ +const ET* \ +prefix##_get(const CT* collection, LilvIter* i) { \ + return (ET*)lilv_collection_get(collection, i); \ +} \ +\ +LILV_API \ +LilvIter* \ +prefix##_next(const CT* collection, LilvIter* i) { \ + return zix_tree_iter_next((ZixTreeIter*)i); \ +} \ +\ +LILV_API \ +bool \ +prefix##_is_end(const CT* collection, LilvIter* i) { \ + return zix_tree_iter_is_end((ZixTreeIter*)i); \ +} + +LILV_COLLECTION_IMPL(lilv_plugin_classes, LilvPluginClasses, LilvPluginClass) +LILV_COLLECTION_IMPL(lilv_scale_points, LilvScalePoints, LilvScalePoint) +LILV_COLLECTION_IMPL(lilv_uis, LilvUIs, LilvUI) +LILV_COLLECTION_IMPL(lilv_nodes, LilvNodes, LilvNode) +LILV_COLLECTION_IMPL(lilv_plugins, LilvPlugins, LilvPlugin) + +LILV_API +void +lilv_plugin_classes_free(LilvPluginClasses* collection) { + lilv_collection_free(collection); +} + +LILV_API +void +lilv_scale_points_free(LilvScalePoints* collection) { + lilv_collection_free(collection); +} + +LILV_API +void +lilv_uis_free(LilvUIs* collection) { + lilv_collection_free(collection); +} + +LILV_API +void +lilv_nodes_free(LilvNodes* collection) { + lilv_collection_free(collection); +} + +LILV_API +LilvNode* +lilv_nodes_get_first(const LilvNodes* collection) { + return (LilvNode*)lilv_collection_get(collection, + lilv_collection_begin(collection)); +} diff --git a/source/libs/lilv/lilv-0.14.4/src/instance.c b/source/libs/lilv/lilv-0.14.4/src/instance.c new file mode 100644 index 000000000..5fa47faa8 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/instance.c @@ -0,0 +1,126 @@ +/* + Copyright 2007-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include + +#include "lilv_internal.h" + +LILV_API +LilvInstance* +lilv_plugin_instantiate(const LilvPlugin* plugin, + double sample_rate, + const LV2_Feature*const* features) +{ + lilv_plugin_load_if_necessary(plugin); + + LilvInstance* result = NULL; + + const LV2_Feature** local_features = NULL; + if (features == NULL) { + local_features = (const LV2_Feature**)malloc(sizeof(LV2_Feature)); + local_features[0] = NULL; + } + + const LilvNode* const lib_uri = lilv_plugin_get_library_uri(plugin); + const LilvNode* const bundle_uri = lilv_plugin_get_bundle_uri(plugin); + + const char* bundle_path = lilv_uri_to_path( + lilv_node_as_uri(lilv_plugin_get_bundle_uri(plugin))); + + LilvLib* lib = lilv_lib_open(plugin->world, lib_uri, bundle_path, features); + if (!lib) { + return NULL; + } + + // Parse bundle URI to use as base URI + const char* bundle_uri_str = lilv_node_as_uri(bundle_uri); + SerdURI base_uri; + if (serd_uri_parse((const uint8_t*)bundle_uri_str, &base_uri)) { + lilv_lib_close(lib); + return NULL; + } + + // Search for plugin by URI + for (uint32_t i = 0; true; ++i) { + const LV2_Descriptor* ld = lilv_lib_get_plugin(lib, i); + if (!ld) { + LILV_ERRORF("No plugin <%s> in <%s>\n", + lilv_node_as_uri(lilv_plugin_get_uri(plugin)), + lilv_node_as_uri(lib_uri)); + lilv_lib_close(lib); + break; // return NULL + } + + // Resolve library plugin URI against base URI + SerdURI abs_uri; + SerdNode abs_uri_node = serd_node_new_uri_from_string( + (const uint8_t*)ld->URI, &base_uri, &abs_uri); + if (!abs_uri_node.buf) { + LILV_ERRORF("Failed to parse plugin URI `%s'\n", ld->URI); + lilv_lib_close(lib); + break; + } + + if (!strcmp((const char*)abs_uri_node.buf, + lilv_node_as_uri(lilv_plugin_get_uri(plugin)))) { + // Create LilvInstance to return + result = (LilvInstance*)malloc(sizeof(LilvInstance)); + result->lv2_descriptor = ld; + result->lv2_handle = ld->instantiate( + ld, sample_rate, bundle_path, + (features) ? features : local_features); + result->pimpl = lib; + serd_node_free(&abs_uri_node); + break; + } else { + serd_node_free(&abs_uri_node); + } + } + + if (result) { + // Failed to instantiate + if (result->lv2_handle == NULL) { + free(result); + return NULL; + } + + // "Connect" all ports to NULL (catches bugs) + for (uint32_t i = 0; i < lilv_plugin_get_num_ports(plugin); ++i) + result->lv2_descriptor->connect_port(result->lv2_handle, i, NULL); + } + + free(local_features); + + return result; +} + +LILV_API +void +lilv_instance_free(LilvInstance* instance) +{ + if (!instance) + return; + + instance->lv2_descriptor->cleanup(instance->lv2_handle); + instance->lv2_descriptor = NULL; + lilv_lib_close((LilvLib*)instance->pimpl); + instance->pimpl = NULL; + free(instance); +} + diff --git a/source/libs/lilv/lilv-0.14.4/src/lib.c b/source/libs/lilv/lilv-0.14.4/src/lib.c new file mode 100644 index 000000000..7eb62aabe --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/lib.c @@ -0,0 +1,111 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "lilv_internal.h" + +LilvLib* +lilv_lib_open(LilvWorld* world, + const LilvNode* uri, + const char* bundle_path, + const LV2_Feature*const* features) +{ + ZixTreeIter* i = NULL; + const struct LilvHeader key = { world, (LilvNode*)uri }; + if (!zix_tree_find(world->libs, &key, &i)) { + LilvLib* llib = (LilvLib*)zix_tree_get(i); + ++llib->refs; + return llib; + } + + const char* const lib_uri = lilv_node_as_uri(uri); + const char* const lib_path = lilv_uri_to_path(lib_uri); + if (!lib_path) { + return NULL; + } + + dlerror(); + void* lib = dlopen(lib_path, RTLD_NOW); + if (!lib) { + LILV_ERRORF("Failed to open library %s (%s)\n", lib_path, dlerror()); + return NULL; + } + + LV2_Descriptor_Function df = (LV2_Descriptor_Function) + lilv_dlfunc(lib, "lv2_descriptor"); + +#ifdef LILV_NEW_LV2 + LV2_Lib_Descriptor_Function ldf = (LV2_Lib_Descriptor_Function) + lilv_dlfunc(lib, "lv2_lib_descriptor"); + + const LV2_Lib_Descriptor* desc = NULL; + if (ldf) { + desc = ldf(bundle_path, features); + if (!desc) { + LILV_ERRORF("Call to `lv2_lib_descriptor' in %s failed\n", lib_path); + return NULL; + } + } else +#endif + if (!df) { + LILV_ERRORF("No `lv2_descriptor' or `lv2_lib_descriptor' in %s\n", + lib_path); + dlclose(lib); + return NULL; + } + + LilvLib* llib = (LilvLib*)malloc(sizeof(LilvLib)); + llib->world = world; + llib->uri = lilv_node_duplicate(uri); + llib->lib = lib; + llib->lv2_descriptor = df; +#ifdef LILV_NEW_LV2 + llib->desc = desc; +#endif + llib->refs = 1; + + zix_tree_insert(world->libs, llib, NULL); + return llib; +} + +const LV2_Descriptor* +lilv_lib_get_plugin(LilvLib* lib, uint32_t index) +{ + if (lib->lv2_descriptor) { + return lib->lv2_descriptor(index); + } +#ifdef LILV_NEW_LV2 + if (lib->desc) { + return lib->desc->get_plugin(lib->desc->handle, index); + } +#endif + return NULL; +} + +void +lilv_lib_close(LilvLib* lib) +{ + if (--lib->refs == 0) { + dlclose(lib->lib); + + ZixTreeIter* i = NULL; + if (lib->world->libs && !zix_tree_find(lib->world->libs, lib, &i)) { + zix_tree_remove(lib->world->libs, i); + } + + lilv_node_free(lib->uri); + free(lib); + } +} diff --git a/source/libs/lilv/lilv-0.14.4/src/lilv_internal.h b/source/libs/lilv/lilv-0.14.4/src/lilv_internal.h new file mode 100644 index 000000000..f23b7a279 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/lilv_internal.h @@ -0,0 +1,382 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LILV_INTERNAL_H +#define LILV_INTERNAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +#ifdef _WIN32 +# include +# define dlopen(path, flags) LoadLibrary(path) +# define dlclose(lib) FreeLibrary((HMODULE)lib) +# define dlsym GetProcAddress +# ifdef _MSC_VER +# define __func__ __FUNCTION__ +# define INFINITY DBL_MAX + DBL_MAX +# define NAN INFINITY - INFINITY +# define snprintf _snprintf +# endif +static inline char* dlerror(void) { return "Unknown error"; } +#else +# include +#endif + +#include "serd/serd.h" +#include "sord/sord.h" + +#include "zix/tree.h" + +#include "lilv_config.h" +#include "lilv/lilv.h" + +#ifdef LILV_DYN_MANIFEST +# include "lv2/lv2plug.in/ns/ext/dynmanifest/dynmanifest.h" +#endif + +/* + * + * Types + * + */ + +typedef struct LilvSpecImpl LilvSpec; + +typedef void LilvCollection; + +struct LilvPortImpl { + SordNode* node; ///< RDF node + uint32_t index; ///< lv2:index + LilvNode* symbol; ///< lv2:symbol + LilvNodes* classes; ///< rdf:type +}; + +struct LilvSpecImpl { + SordNode* spec; + SordNode* bundle; + LilvNodes* data_uris; + struct LilvSpecImpl* next; +}; + +/** + Header of an LilvPlugin, LilvPluginClass, or LilvUI. + Any of these structs may be safely casted to LilvHeader, which is used to + implement collections using the same comparator. +*/ +struct LilvHeader { + LilvWorld* world; + LilvNode* uri; +}; + +#ifdef LILV_DYN_MANIFEST +typedef struct { + LilvNode* bundle; + void* lib; + LV2_Dyn_Manifest_Handle handle; + uint32_t refs; +} LilvDynManifest; +#endif + +typedef struct { + LilvWorld* world; + LilvNode* uri; + void* lib; + LV2_Descriptor_Function lv2_descriptor; +#ifdef LILV_NEW_LV2 + const LV2_Lib_Descriptor* desc; +#endif + uint32_t refs; +} LilvLib; + +struct LilvPluginImpl { + LilvWorld* world; + LilvNode* plugin_uri; + LilvNode* bundle_uri; ///< Bundle plugin was loaded from + LilvNode* binary_uri; ///< lv2:binary +#ifdef LILV_DYN_MANIFEST + LilvDynManifest* dynmanifest; +#endif + const LilvPluginClass* plugin_class; + LilvNodes* data_uris; ///< rdfs::seeAlso + LilvPort** ports; + uint32_t num_ports; + bool loaded; + bool replaced; +}; + +struct LilvPluginClassImpl { + LilvWorld* world; + LilvNode* uri; + LilvNode* parent_uri; + LilvNode* label; +}; + +struct LilvInstancePimpl { + LilvWorld* world; + LilvLib* lib; +}; + +typedef struct { + bool dyn_manifest; + bool filter_language; +} LilvOptions; + +struct LilvWorldImpl { + SordWorld* world; + SordModel* model; + SerdReader* reader; + unsigned n_read_files; + LilvPluginClass* lv2_plugin_class; + LilvPluginClasses* plugin_classes; + LilvSpec* specs; + LilvPlugins* plugins; + LilvNodes* loaded_files; + ZixTree* libs; + struct { + SordNode* dc_replaces; + SordNode* dman_DynManifest; + SordNode* doap_name; + SordNode* lv2_Plugin; + SordNode* lv2_Specification; + SordNode* lv2_appliesTo; + SordNode* lv2_binary; + SordNode* lv2_default; + SordNode* lv2_designation; + SordNode* lv2_extensionData; + SordNode* lv2_index; + SordNode* lv2_maximum; + SordNode* lv2_minimum; + SordNode* lv2_name; + SordNode* lv2_optionalFeature; + SordNode* lv2_port; + SordNode* lv2_portProperty; + SordNode* lv2_reportsLatency; + SordNode* lv2_requiredFeature; + SordNode* lv2_symbol; + SordNode* null_uri; + SordNode* pset_value; + SordNode* rdf_a; + SordNode* rdf_value; + SordNode* rdfs_Class; + SordNode* rdfs_label; + SordNode* rdfs_seeAlso; + SordNode* rdfs_subClassOf; + SordNode* xsd_base64Binary; + SordNode* xsd_boolean; + SordNode* xsd_decimal; + SordNode* xsd_double; + SordNode* xsd_integer; + } uris; + LilvOptions opt; +}; + +typedef enum { + LILV_VALUE_URI, + LILV_VALUE_STRING, + LILV_VALUE_INT, + LILV_VALUE_FLOAT, + LILV_VALUE_BOOL, + LILV_VALUE_BLANK, + LILV_VALUE_BLOB +} LilvNodeType; + +struct LilvNodeImpl { + LilvWorld* world; + SordNode* node; + LilvNodeType type; + union { + int int_val; + float float_val; + bool bool_val; + } val; +}; + +struct LilvScalePointImpl { + LilvNode* value; + LilvNode* label; +}; + +struct LilvUIImpl { + LilvWorld* world; + LilvNode* uri; + LilvNode* bundle_uri; + LilvNode* binary_uri; + LilvNodes* classes; +}; + +/* + * + * Functions + * + */ + +LilvPort* lilv_port_new(LilvWorld* world, + const SordNode* node, + uint32_t index, + const char* symbol); +void lilv_port_free(const LilvPlugin* plugin, LilvPort* port); + +LilvPlugin* lilv_plugin_new(LilvWorld* world, + LilvNode* uri, + LilvNode* bundle_uri); +void lilv_plugin_load_if_necessary(const LilvPlugin* p); +void lilv_plugin_free(LilvPlugin* plugin); +LilvNode* lilv_plugin_get_unique(const LilvPlugin* p, + const SordNode* subject, + const SordNode* predicate); + +void lilv_collection_free(LilvCollection* collection); +unsigned lilv_collection_size(const LilvCollection* collection); +LilvIter* lilv_collection_begin(const LilvCollection* collection); +void* lilv_collection_get(const LilvCollection* collection, + const LilvIter* i); + +LilvPluginClass* lilv_plugin_class_new(LilvWorld* world, + const SordNode* parent_uri, + const SordNode* uri, + const char* label); + +void lilv_plugin_class_free(LilvPluginClass* plugin_class); + +LilvLib* +lilv_lib_open(LilvWorld* world, + const LilvNode* uri, + const char* bundle_path, + const LV2_Feature*const* features); + +const LV2_Descriptor* lilv_lib_get_plugin(LilvLib* lib, uint32_t index); +void lilv_lib_close(LilvLib* lib); + +LilvNodes* lilv_nodes_new(void); +LilvPlugins* lilv_plugins_new(void); +LilvScalePoints* lilv_scale_points_new(void); +LilvPluginClasses* lilv_plugin_classes_new(void); +LilvUIs* lilv_uis_new(void); + +const uint8_t* lilv_world_blank_node_prefix(LilvWorld* world); +void lilv_world_load_file(LilvWorld* world, const char* file_uri); + +LilvUI* lilv_ui_new(LilvWorld* world, + LilvNode* uri, + LilvNode* type_uri, + LilvNode* binary_uri); + +void lilv_ui_free(LilvUI* ui); + +LilvNode* lilv_node_new(LilvWorld* world, + LilvNodeType type, + const char* val); +LilvNode* lilv_node_new_from_node(LilvWorld* world, + const SordNode* node); +const SordNode* lilv_node_as_node(const LilvNode* value); + +int lilv_header_compare_by_uri(const void* a, const void* b, void* user_data); + +int +lilv_ptr_cmp(const void* a, const void* b, void* user_data); + +int +lilv_resource_node_cmp(const void* a, const void* b, void* user_data); + +struct LilvHeader* +lilv_collection_get_by_uri(const ZixTree* seq, const LilvNode* uri); + +LilvScalePoint* lilv_scale_point_new(LilvNode* value, LilvNode* label); +void lilv_scale_point_free(LilvScalePoint* point); + +SordIter* +lilv_world_query_internal(LilvWorld* world, + const SordNode* subject, + const SordNode* predicate, + const SordNode* object); + +LilvNodes* +lilv_world_query_values_internal(LilvWorld* world, + const SordNode* subject, + const SordNode* predicate, + const SordNode* object); + +#define FOREACH_MATCH(iter) \ + for (; !sord_iter_end(iter); sord_iter_next(iter)) + +LilvNodes* lilv_nodes_from_stream_objects(LilvWorld* w, + SordIter* stream, + SordQuadIndex field); + +char* lilv_strjoin(const char* first, ...); +char* lilv_strdup(const char* str); +char* lilv_get_lang(void); +char* lilv_expand(const char* path); +char* lilv_dirname(const char* path); +int lilv_copy_file(const char* src, const char* dst); +bool lilv_path_exists(const char* path, void* ignored); +char* lilv_path_absolute(const char* path); +bool lilv_path_is_absolute(const char* path); +char* lilv_get_latest_copy(const char* path, const char* copy_path); +char* lilv_path_relative_to(const char* path, const char* base); +bool lilv_path_is_child(const char* path, const char* dir); +int lilv_flock(FILE* file, bool lock); +char* lilv_realpath(const char* path); +int lilv_symlink(const char* oldpath, const char* newpath); +int lilv_mkdir_p(const char* path); +char* lilv_path_join(const char* a, const char* b); +bool lilv_file_equals(const char* a_path, const char* b_path); + +char* +lilv_find_free_path(const char* in_path, + bool (*exists)(const char*, void*), void* user_data); + +void +lilv_dir_for_each(const char* path, + void* data, + void (*f)(const char* path, const char* name, void* data)); + +typedef void (*VoidFunc)(void); + +/** dlsym wrapper to return a function pointer (without annoying warning) */ +static inline VoidFunc +lilv_dlfunc(void* handle, const char* symbol) +{ + typedef VoidFunc (*VoidFuncGetter)(void*, const char*); + VoidFuncGetter dlfunc = (VoidFuncGetter)dlsym; + return dlfunc(handle, symbol); +} + +#ifdef LILV_DYN_MANIFEST +static const LV2_Feature* const dman_features = { NULL }; +#endif + +#define LILV_ERROR(str) fprintf(stderr, "%s(): error: " str, \ + __func__) +#define LILV_ERRORF(fmt, ...) fprintf(stderr, "%s(): error: " fmt, \ + __func__, __VA_ARGS__) +#define LILV_WARN(str) fprintf(stderr, "%s(): warning: " str, \ + __func__) +#define LILV_WARNF(fmt, ...) fprintf(stderr, "%s(): warning: " fmt, \ + __func__, __VA_ARGS__) + +#ifdef __cplusplus +} +#endif + +#endif /* LILV_INTERNAL_H */ diff --git a/source/libs/lilv/lilv-0.14.4/src/node.c b/source/libs/lilv/lilv-0.14.4/src/node.c new file mode 100644 index 000000000..495bb49af --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/node.c @@ -0,0 +1,396 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include + +#include "lilv_internal.h" + +static void +lilv_node_set_numerics_from_string(LilvNode* val, size_t len) +{ + const char* str = (const char*)sord_node_get_string(val->node); + char* endptr; + + switch (val->type) { + case LILV_VALUE_URI: + case LILV_VALUE_BLANK: + case LILV_VALUE_STRING: + case LILV_VALUE_BLOB: + break; + case LILV_VALUE_INT: + val->val.int_val = strtol(str, &endptr, 10); + break; + case LILV_VALUE_FLOAT: + val->val.float_val = serd_strtod(str, &endptr); + break; + case LILV_VALUE_BOOL: + val->val.bool_val = !strcmp(str, "true"); + break; + } +} + +/** Note that if @a type is numeric or boolean, the returned value is corrupt + * until lilv_node_set_numerics_from_string is called. It is not + * automatically called from here to avoid overhead and imprecision when the + * exact string value is known. + */ +LilvNode* +lilv_node_new(LilvWorld* world, LilvNodeType type, const char* str) +{ + LilvNode* val = (LilvNode*)malloc(sizeof(LilvNode)); + val->world = world; + val->type = type; + + const uint8_t* ustr = (const uint8_t*)str; + switch (type) { + case LILV_VALUE_URI: + val->node = sord_new_uri(world->world, ustr); + break; + case LILV_VALUE_BLANK: + val->node = sord_new_blank(world->world, ustr); + break; + case LILV_VALUE_STRING: + val->node = sord_new_literal(world->world, NULL, ustr, NULL); + break; + case LILV_VALUE_INT: + val->node = sord_new_literal( + world->world, world->uris.xsd_integer, ustr, NULL); + break; + case LILV_VALUE_FLOAT: + val->node = sord_new_literal( + world->world, world->uris.xsd_decimal, ustr, NULL); + break; + case LILV_VALUE_BOOL: + val->node = sord_new_literal( + world->world, world->uris.xsd_boolean, ustr, NULL); + break; + case LILV_VALUE_BLOB: + val->node = sord_new_literal( + world->world, world->uris.xsd_base64Binary, ustr, NULL); + break; + } + + return val; +} + +/** Create a new LilvNode from @a node, or return NULL if impossible */ +LilvNode* +lilv_node_new_from_node(LilvWorld* world, const SordNode* node) +{ + LilvNode* result = NULL; + SordNode* datatype_uri = NULL; + LilvNodeType type = LILV_VALUE_STRING; + size_t len = 0; + + switch (sord_node_get_type(node)) { + case SORD_URI: + result = (LilvNode*)malloc(sizeof(LilvNode)); + result->world = (LilvWorld*)world; + result->type = LILV_VALUE_URI; + result->node = sord_node_copy(node); + break; + case SORD_BLANK: + result = (LilvNode*)malloc(sizeof(LilvNode)); + result->world = (LilvWorld*)world; + result->type = LILV_VALUE_BLANK; + result->node = sord_node_copy(node); + break; + case SORD_LITERAL: + datatype_uri = sord_node_get_datatype(node); + if (datatype_uri) { + if (sord_node_equals(datatype_uri, world->uris.xsd_boolean)) + type = LILV_VALUE_BOOL; + else if (sord_node_equals(datatype_uri, world->uris.xsd_decimal) + || sord_node_equals(datatype_uri, world->uris.xsd_double)) + type = LILV_VALUE_FLOAT; + else if (sord_node_equals(datatype_uri, world->uris.xsd_integer)) + type = LILV_VALUE_INT; + else if (sord_node_equals(datatype_uri, + world->uris.xsd_base64Binary)) + type = LILV_VALUE_BLOB; + else + LILV_ERRORF("Unknown datatype `%s'\n", + sord_node_get_string(datatype_uri)); + } + result = lilv_node_new( + world, type, (const char*)sord_node_get_string_counted(node, &len)); + lilv_node_set_numerics_from_string(result, len); + break; + default: + assert(false); + } + + return result; +} + +LILV_API +LilvNode* +lilv_new_uri(LilvWorld* world, const char* uri) +{ + return lilv_node_new(world, LILV_VALUE_URI, uri); +} + +LILV_API +LilvNode* +lilv_new_string(LilvWorld* world, const char* str) +{ + return lilv_node_new(world, LILV_VALUE_STRING, str); +} + +LILV_API +LilvNode* +lilv_new_int(LilvWorld* world, int val) +{ + char str[32]; + snprintf(str, sizeof(str), "%d", val); + LilvNode* ret = lilv_node_new(world, LILV_VALUE_INT, str); + ret->val.int_val = val; + return ret; +} + +LILV_API +LilvNode* +lilv_new_float(LilvWorld* world, float val) +{ + char str[32]; + snprintf(str, sizeof(str), "%f", val); + LilvNode* ret = lilv_node_new(world, LILV_VALUE_FLOAT, str); + ret->val.float_val = val; + return ret; +} + +LILV_API +LilvNode* +lilv_new_bool(LilvWorld* world, bool val) +{ + LilvNode* ret = lilv_node_new(world, LILV_VALUE_BOOL, + val ? "true" : "false"); + ret->val.bool_val = val; + return ret; +} + +LILV_API +LilvNode* +lilv_node_duplicate(const LilvNode* val) +{ + if (!val) { + return NULL; + } + + LilvNode* result = (LilvNode*)malloc(sizeof(LilvNode)); + result->world = val->world; + result->node = sord_node_copy(val->node); + result->val = val->val; + result->type = val->type; + return result; +} + +LILV_API +void +lilv_node_free(LilvNode* val) +{ + if (val) { + sord_node_free(val->world->world, val->node); + free(val); + } +} + +LILV_API +bool +lilv_node_equals(const LilvNode* value, const LilvNode* other) +{ + if (value == NULL && other == NULL) + return true; + else if (value == NULL || other == NULL) + return false; + else if (value->type != other->type) + return false; + + switch (value->type) { + case LILV_VALUE_URI: + case LILV_VALUE_BLANK: + case LILV_VALUE_STRING: + case LILV_VALUE_BLOB: + return sord_node_equals(value->node, other->node); + case LILV_VALUE_INT: + return (value->val.int_val == other->val.int_val); + case LILV_VALUE_FLOAT: + return (value->val.float_val == other->val.float_val); + case LILV_VALUE_BOOL: + return (value->val.bool_val == other->val.bool_val); + } + + return false; /* shouldn't get here */ +} + +LILV_API +char* +lilv_node_get_turtle_token(const LilvNode* value) +{ + const char* str = (const char*)sord_node_get_string(value->node); + size_t len = 0; + char* result = NULL; + SerdNode node; + + switch (value->type) { + case LILV_VALUE_URI: + len = strlen(str) + 3; + result = (char*)calloc(len, 1); + snprintf(result, len, "<%s>", str); + break; + case LILV_VALUE_BLANK: + len = strlen(str) + 3; + result = (char*)calloc(len, 1); + snprintf(result, len, "_:%s", str); + break; + case LILV_VALUE_STRING: + case LILV_VALUE_BOOL: + case LILV_VALUE_BLOB: + result = lilv_strdup(str); + break; + case LILV_VALUE_INT: + node = serd_node_new_integer(value->val.int_val); + result = (char*)node.buf; + break; + case LILV_VALUE_FLOAT: + node = serd_node_new_decimal(value->val.float_val, 8); + result = (char*)node.buf; + break; + } + + return result; +} + +LILV_API +bool +lilv_node_is_uri(const LilvNode* value) +{ + return (value && value->type == LILV_VALUE_URI); +} + +LILV_API +const char* +lilv_node_as_uri(const LilvNode* value) +{ + assert(lilv_node_is_uri(value)); + return (const char*)sord_node_get_string(value->node); +} + +const SordNode* +lilv_node_as_node(const LilvNode* value) +{ + assert(lilv_node_is_uri(value)); + return value->node; +} + +LILV_API +bool +lilv_node_is_blank(const LilvNode* value) +{ + return (value && value->type == LILV_VALUE_BLANK); +} + +LILV_API +const char* +lilv_node_as_blank(const LilvNode* value) +{ + assert(lilv_node_is_blank(value)); + return (const char*)sord_node_get_string(value->node); +} + +LILV_API +bool +lilv_node_is_literal(const LilvNode* value) +{ + if (!value) + return false; + + switch (value->type) { + case LILV_VALUE_STRING: + case LILV_VALUE_INT: + case LILV_VALUE_FLOAT: + return true; + default: + return false; + } +} + +LILV_API +bool +lilv_node_is_string(const LilvNode* value) +{ + return (value && value->type == LILV_VALUE_STRING); +} + +LILV_API +const char* +lilv_node_as_string(const LilvNode* value) +{ + return value ? (const char*)sord_node_get_string(value->node) : NULL; +} + +LILV_API +bool +lilv_node_is_int(const LilvNode* value) +{ + return (value && value->type == LILV_VALUE_INT); +} + +LILV_API +int +lilv_node_as_int(const LilvNode* value) +{ + assert(value); + assert(lilv_node_is_int(value)); + return value->val.int_val; +} + +LILV_API +bool +lilv_node_is_float(const LilvNode* value) +{ + return (value && value->type == LILV_VALUE_FLOAT); +} + +LILV_API +float +lilv_node_as_float(const LilvNode* value) +{ + assert(lilv_node_is_float(value) || lilv_node_is_int(value)); + if (lilv_node_is_float(value)) { + return value->val.float_val; + } else { // lilv_node_is_int(value) + return (float)value->val.int_val; + } +} + +LILV_API +bool +lilv_node_is_bool(const LilvNode* value) +{ + return (value && value->type == LILV_VALUE_BOOL); +} + +LILV_API +bool +lilv_node_as_bool(const LilvNode* value) +{ + assert(value); + assert(lilv_node_is_bool(value)); + return value->val.bool_val; +} diff --git a/source/libs/lilv/lilv-0.14.4/src/plugin.c b/source/libs/lilv/lilv-0.14.4/src/plugin.c new file mode 100644 index 000000000..d8b8cc699 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/plugin.c @@ -0,0 +1,1077 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#define __STDC_LIMIT_MACROS + +#include +#include +#include +#include +#include +#include +#include + +#include "lilv_config.h" +#include "lilv_internal.h" + +#include "lv2/ui.h" + +#define NS_DOAP (const uint8_t*)"http://usefulinc.com/ns/doap#" +#define NS_FOAF (const uint8_t*)"http://xmlns.com/foaf/0.1/" + +/** Ownership of @a uri is taken */ +LilvPlugin* +lilv_plugin_new(LilvWorld* world, LilvNode* uri, LilvNode* bundle_uri) +{ + assert(bundle_uri); + LilvPlugin* plugin = (LilvPlugin*)malloc(sizeof(LilvPlugin)); + plugin->world = world; + plugin->plugin_uri = uri; + plugin->bundle_uri = bundle_uri; + plugin->binary_uri = NULL; +#ifdef LILV_DYN_MANIFEST + plugin->dynmanifest = NULL; +#endif + plugin->plugin_class = NULL; + plugin->data_uris = lilv_nodes_new(); + plugin->ports = NULL; + plugin->num_ports = 0; + plugin->loaded = false; + plugin->replaced = false; + + return plugin; +} + +static void +lilv_plugin_free_ports(LilvPlugin* p) +{ + if (p->ports) { + for (uint32_t i = 0; i < p->num_ports; ++i) { + lilv_port_free(p, p->ports[i]); + } + free(p->ports); + p->num_ports = 0; + p->ports = NULL; + } +} + +void +lilv_plugin_free(LilvPlugin* p) +{ +#ifdef LILV_DYN_MANIFEST + if (p->dynmanifest && --p->dynmanifest->refs == 0) { + typedef int (*CloseFunc)(LV2_Dyn_Manifest_Handle); + CloseFunc close_func = (CloseFunc)lilv_dlfunc(p->dynmanifest->lib, + "lv2_dyn_manifest_close"); + if (close_func) { + close_func(p->dynmanifest->handle); + } + + dlclose(p->dynmanifest->lib); + lilv_node_free(p->dynmanifest->bundle); + free(p->dynmanifest); + } +#endif + + lilv_node_free(p->plugin_uri); + p->plugin_uri = NULL; + + lilv_node_free(p->bundle_uri); + p->bundle_uri = NULL; + + lilv_node_free(p->binary_uri); + p->binary_uri = NULL; + + lilv_plugin_free_ports(p); + + lilv_nodes_free(p->data_uris); + p->data_uris = NULL; + + free(p); +} + +static LilvNode* +lilv_plugin_get_one(const LilvPlugin* p, + const SordNode* subject, + const SordNode* predicate) +{ + LilvNode* ret = NULL; + SordIter* stream = lilv_world_query_internal( + p->world, subject, predicate, NULL); + if (!sord_iter_end(stream)) { + ret = lilv_node_new_from_node(p->world, sord_iter_get_node(stream, SORD_OBJECT)); + } + sord_iter_free(stream); + return ret; +} + +LilvNode* +lilv_plugin_get_unique(const LilvPlugin* p, + const SordNode* subject, + const SordNode* predicate) +{ + LilvNode* ret = lilv_plugin_get_one(p, subject, predicate); + if (!ret) { + LILV_ERRORF("Multiple values found for (%s %s ...) property\n", + sord_node_get_string(subject), + sord_node_get_string(predicate)); + } + return ret; +} + +static void +lilv_plugin_load(LilvPlugin* p) +{ + SordNode* bundle_uri_node = p->bundle_uri->node; + const SerdNode* bundle_uri_snode = sord_node_to_serd_node(bundle_uri_node); + + SerdEnv* env = serd_env_new(bundle_uri_snode); + SerdReader* reader = sord_new_reader(p->world->model, env, SERD_TURTLE, + bundle_uri_node); + + // Parse all the plugin's data files into RDF model + LILV_FOREACH(nodes, i, p->data_uris) { + const LilvNode* data_uri_val = lilv_nodes_get(p->data_uris, i); + const SordNode* data_uri_node = data_uri_val->node; + const char* data_uri_str = lilv_node_as_uri(data_uri_val); + + serd_env_set_base_uri(env, sord_node_to_serd_node(data_uri_node)); + serd_reader_add_blank_prefix(reader, + lilv_world_blank_node_prefix(p->world)); + serd_reader_read_file(reader, (const uint8_t*)data_uri_str); + } + +#ifdef LILV_DYN_MANIFEST + typedef void* LV2_Dyn_Manifest_Handle; + // Load and parse dynamic manifest data, if this is a library + if (p->dynmanifest) { + typedef int (*GetDataFunc)(LV2_Dyn_Manifest_Handle handle, + FILE* fp, + const char* uri); + GetDataFunc get_data_func = (GetDataFunc)lilv_dlfunc( + p->dynmanifest->lib, "lv2_dyn_manifest_get_data"); + if (get_data_func) { + const SordNode* bundle = p->dynmanifest->bundle->node; + serd_env_set_base_uri(env, sord_node_to_serd_node(bundle)); + FILE* fd = tmpfile(); + get_data_func(p->dynmanifest->handle, fd, + lilv_node_as_string(p->plugin_uri)); + rewind(fd); + serd_reader_add_blank_prefix( + reader, lilv_world_blank_node_prefix(p->world)); + serd_reader_read_file_handle( + reader, fd, (const uint8_t*)"(dyn-manifest)"); + fclose(fd); + } + } +#endif + serd_reader_free(reader); + serd_env_free(env); + + p->loaded = true; +} + +static bool +is_symbol(const char* str) +{ + const size_t len = strlen(str); + for (size_t i = 0; i < len; ++i) { + if (!((str[i] >= 'a' && str[i] <= 'z') + || (str[i] >= 'A' && str[i] <= 'Z') + || (i > 0 && str[i] >= '0' && str[i] <= '9') + || str[i] == '_')) { + return false; + } + } + return true; +} + +static void +lilv_plugin_load_ports_if_necessary(const LilvPlugin* const_p) +{ + LilvPlugin* p = (LilvPlugin*)const_p; + if (!p->loaded) + lilv_plugin_load(p); + + if (!p->ports) { + p->ports = (LilvPort**)malloc(sizeof(LilvPort*)); + p->ports[0] = NULL; + + SordIter* ports = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + p->world->uris.lv2_port, + NULL); + + FOREACH_MATCH(ports) { + const SordNode* port = sord_iter_get_node(ports, SORD_OBJECT); + LilvNode* index = lilv_plugin_get_unique( + p, port, p->world->uris.lv2_index); + LilvNode* symbol = lilv_plugin_get_unique( + p, port, p->world->uris.lv2_symbol); + + bool error = false; + if (!lilv_node_is_string(symbol) || + !is_symbol((const char*)sord_node_get_string(symbol->node))) { + LILV_ERRORF("Plugin <%s> port symbol `%s' is invalid\n", + lilv_node_as_uri(p->plugin_uri), + lilv_node_as_string(symbol)); + error = true; + goto done; + } + + if (!lilv_node_is_int(index)) { + LILV_ERRORF("Plugin <%s> port index is not an integer\n", + lilv_node_as_uri(p->plugin_uri)); + error = true; + goto done; + } + + uint32_t this_index = lilv_node_as_int(index); + LilvPort* this_port = NULL; + if (p->num_ports > this_index) { + this_port = p->ports[this_index]; + } else { + p->ports = (LilvPort**)realloc( + p->ports, (this_index + 1) * sizeof(LilvPort*)); + memset(p->ports + p->num_ports, '\0', + (this_index - p->num_ports) * sizeof(LilvPort*)); + p->num_ports = this_index + 1; + } + + // Havn't seen this port yet, add it to array + if (!this_port) { + this_port = lilv_port_new(p->world, + port, + this_index, + lilv_node_as_string(symbol)); + p->ports[this_index] = this_port; + } + + SordIter* types = lilv_world_query_internal( + p->world, port, p->world->uris.rdf_a, NULL); + FOREACH_MATCH(types) { + const SordNode* type = sord_iter_get_node(types, SORD_OBJECT); + if (sord_node_get_type(type) == SORD_URI) { + zix_tree_insert( + (ZixTree*)this_port->classes, + lilv_node_new_from_node(p->world, type), NULL); + } else { + LILV_WARNF("Plugin <%s> port type is not a URI\n", + lilv_node_as_uri(p->plugin_uri)); + } + } + sord_iter_free(types); + + done: + lilv_node_free(symbol); + lilv_node_free(index); + if (error) { // Invalid plugin + lilv_plugin_free_ports(p); + break; + } + } + sord_iter_free(ports); + + // Check sanity + for (uint32_t i = 0; i < p->num_ports; ++i) { + if (!p->ports[i]) { + LILV_ERRORF("Plugin <%s> is missing port %d/%d\n", + lilv_node_as_uri(p->plugin_uri), i, p->num_ports); + lilv_plugin_free_ports(p); + break; + } + } + } +} + +void +lilv_plugin_load_if_necessary(const LilvPlugin* p) +{ + if (!p->loaded) + lilv_plugin_load((LilvPlugin*)p); +} + +LILV_API +const LilvNode* +lilv_plugin_get_uri(const LilvPlugin* p) +{ + assert(p); + assert(p->plugin_uri); + return p->plugin_uri; +} + +LILV_API +const LilvNode* +lilv_plugin_get_bundle_uri(const LilvPlugin* p) +{ + assert(p); + assert(p->bundle_uri); + return p->bundle_uri; +} + +LILV_API +const LilvNode* +lilv_plugin_get_library_uri(const LilvPlugin* const_p) +{ + LilvPlugin* p = (LilvPlugin*)const_p; + lilv_plugin_load_if_necessary(p); + if (!p->binary_uri) { + // lv2:binary ?binary + SordIter* results = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + p->world->uris.lv2_binary, + NULL); + FOREACH_MATCH(results) { + const SordNode* binary_node = sord_iter_get_node(results, SORD_OBJECT); + if (sord_node_get_type(binary_node) == SORD_URI) { + p->binary_uri = lilv_node_new_from_node(p->world, binary_node); + break; + } + } + sord_iter_free(results); + } + if (!p->binary_uri) { + LILV_WARNF("Plugin <%s> has no lv2:binary\n", + lilv_node_as_uri(lilv_plugin_get_uri(p))); + } + return p->binary_uri; +} + +LILV_API +const LilvNodes* +lilv_plugin_get_data_uris(const LilvPlugin* p) +{ + return p->data_uris; +} + +LILV_API +const LilvPluginClass* +lilv_plugin_get_class(const LilvPlugin* const_p) +{ + LilvPlugin* p = (LilvPlugin*)const_p; + lilv_plugin_load_if_necessary(p); + if (!p->plugin_class) { + // a ?class + SordIter* results = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + p->world->uris.rdf_a, + NULL); + FOREACH_MATCH(results) { + const SordNode* class_node = sord_iter_get_node(results, SORD_OBJECT); + if (sord_node_get_type(class_node) != SORD_URI) { + continue; + } + + LilvNode* klass = lilv_node_new_from_node(p->world, class_node); + if (!lilv_node_equals(klass, p->world->lv2_plugin_class->uri)) { + const LilvPluginClass* pclass = lilv_plugin_classes_get_by_uri( + p->world->plugin_classes, klass); + + if (pclass) { + ((LilvPlugin*)p)->plugin_class = pclass; + lilv_node_free(klass); + break; + } + } + + lilv_node_free(klass); + } + sord_iter_free(results); + + if (p->plugin_class == NULL) + p->plugin_class = p->world->lv2_plugin_class; + } + return p->plugin_class; +} + +static LilvNodes* +lilv_plugin_get_value_internal(const LilvPlugin* p, + const SordNode* predicate) +{ + lilv_plugin_load_if_necessary(p); + return lilv_world_query_values_internal( + p->world, p->plugin_uri->node, predicate, NULL); +} + +LILV_API +bool +lilv_plugin_verify(const LilvPlugin* plugin) +{ + LilvNode* rdf_type = lilv_new_uri(plugin->world, LILV_NS_RDF "type"); + LilvNodes* results = lilv_plugin_get_value(plugin, rdf_type); + lilv_node_free(rdf_type); + if (!results) { + return false; + } + + lilv_nodes_free(results); + results = lilv_plugin_get_value_internal(plugin, + plugin->world->uris.doap_name); + if (!results) { + return false; + } + + lilv_nodes_free(results); + LilvNode* lv2_port = lilv_new_uri(plugin->world, LV2_CORE__port); + results = lilv_plugin_get_value(plugin, lv2_port); + lilv_node_free(lv2_port); + if (!results) { + return false; + } + + lilv_nodes_free(results); + return true; +} + +LILV_API +LilvNode* +lilv_plugin_get_name(const LilvPlugin* plugin) +{ + LilvNodes* results = lilv_plugin_get_value_internal( + plugin, plugin->world->uris.doap_name); + + LilvNode* ret = NULL; + if (results) { + LilvNode* val = lilv_nodes_get_first(results); + if (lilv_node_is_string(val)) + ret = lilv_node_duplicate(val); + lilv_nodes_free(results); + } + + if (!ret) + LILV_WARNF("Plugin <%s> has no (mandatory) doap:name\n", + lilv_node_as_string(lilv_plugin_get_uri(plugin))); + + return ret; +} + +LILV_API +LilvNodes* +lilv_plugin_get_value(const LilvPlugin* p, + const LilvNode* predicate) +{ + lilv_plugin_load_if_necessary(p); + return lilv_world_find_nodes(p->world, p->plugin_uri, predicate, NULL); +} + +LILV_API +uint32_t +lilv_plugin_get_num_ports(const LilvPlugin* p) +{ + lilv_plugin_load_ports_if_necessary(p); + return p->num_ports; +} + +LILV_API +void +lilv_plugin_get_port_ranges_float(const LilvPlugin* p, + float* min_values, + float* max_values, + float* def_values) +{ + lilv_plugin_load_ports_if_necessary(p); + LilvNode* min = NULL; + LilvNode* max = NULL; + LilvNode* def = NULL; + LilvNode** minptr = min_values ? &min : NULL; + LilvNode** maxptr = max_values ? &max : NULL; + LilvNode** defptr = def_values ? &def : NULL; + + for (uint32_t i = 0; i < p->num_ports; ++i) { + lilv_port_get_range(p, p->ports[i], defptr, minptr, maxptr); + + if (min_values) { + if (lilv_node_is_float(min) || lilv_node_is_int(min)) { + min_values[i] = lilv_node_as_float(min); + } else { + min_values[i] = NAN; + } + } + + if (max_values) { + if (lilv_node_is_float(max) || lilv_node_is_int(max)) { + max_values[i] = lilv_node_as_float(max); + } else { + max_values[i] = NAN; + } + } + + if (def_values) { + if (lilv_node_is_float(def) || lilv_node_is_int(def)) { + def_values[i] = lilv_node_as_float(def); + } else { + def_values[i] = NAN; + } + } + + lilv_node_free(def); + lilv_node_free(min); + lilv_node_free(max); + } +} + +LILV_API +uint32_t +lilv_plugin_get_num_ports_of_class(const LilvPlugin* p, + const LilvNode* class_1, ...) +{ + lilv_plugin_load_ports_if_necessary(p); + + uint32_t ret = 0; + va_list args; + + for (unsigned i = 0; i < p->num_ports; ++i) { + LilvPort* port = p->ports[i]; + if (!port || !lilv_port_is_a(p, port, class_1)) + continue; + + va_start(args, class_1); + + bool matches = true; + for (LilvNode* class_i = NULL; (class_i = va_arg(args, LilvNode*)); ) { + if (!lilv_port_is_a(p, port, class_i)) { + va_end(args); + matches = false; + break; + } + } + + if (matches) + ++ret; + + va_end(args); + } + + return ret; +} + +LILV_API +bool +lilv_plugin_has_latency(const LilvPlugin* p) +{ + lilv_plugin_load_if_necessary(p); + SordIter* ports = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + p->world->uris.lv2_port, + NULL); + + bool ret = false; + FOREACH_MATCH(ports) { + const SordNode* port = sord_iter_get_node(ports, SORD_OBJECT); + SordIter* reports_latency = lilv_world_query_internal( + p->world, + port, + p->world->uris.lv2_portProperty, + p->world->uris.lv2_reportsLatency); + const bool end = sord_iter_end(reports_latency); + sord_iter_free(reports_latency); + if (!end) { + ret = true; + break; + } + } + sord_iter_free(ports); + + return ret; +} + +static LilvPort* +lilv_plugin_get_port_by_property(const LilvPlugin* plugin, + const LilvNode* port_property) +{ + lilv_plugin_load_ports_if_necessary(plugin); + for (uint32_t i = 0; i < plugin->num_ports; ++i) { + LilvPort* port = plugin->ports[i]; + SordIter* iter = lilv_world_query_internal( + plugin->world, + port->node, + plugin->world->uris.lv2_portProperty, + port_property->node); + + const bool found = !sord_iter_end(iter); + sord_iter_free(iter); + + if (found) { + return port; + } + } + + return NULL; +} + +LILV_API +LilvPort* +lilv_plugin_get_port_by_designation(const LilvPlugin* plugin, + const LilvNode* port_class, + const LilvNode* designation) +{ + LilvWorld* world = plugin->world; + lilv_plugin_load_ports_if_necessary(plugin); + for (uint32_t i = 0; i < plugin->num_ports; ++i) { + LilvPort* port = plugin->ports[i]; + SordIter* iter = lilv_world_query_internal( + world, + port->node, + world->uris.lv2_designation, + designation->node); + + const bool found = !sord_iter_end(iter) && + lilv_port_is_a(plugin, port, port_class); + sord_iter_free(iter); + + if (found) { + return port; + } + } + + return NULL; +} + +LILV_API +uint32_t +lilv_plugin_get_latency_port_index(const LilvPlugin* p) +{ + LilvNode* property = lilv_node_new_from_node( + p->world, p->world->uris.lv2_reportsLatency); + LilvPort* latency_port = lilv_plugin_get_port_by_property(p, property); + lilv_node_free(property); + return latency_port ? latency_port->index : UINT32_MAX; +} + +LILV_API +bool +lilv_plugin_has_feature(const LilvPlugin* p, + const LilvNode* feature) +{ + LilvNodes* features = lilv_plugin_get_supported_features(p); + + const bool ret = (features && feature + && lilv_nodes_contains(features, feature)); + + lilv_nodes_free(features); + return ret; +} + +LILV_API +LilvNodes* +lilv_plugin_get_supported_features(const LilvPlugin* p) +{ + LilvNodes* optional = lilv_plugin_get_optional_features(p); + LilvNodes* required = lilv_plugin_get_required_features(p); + LilvNodes* result = lilv_nodes_new(); + + LILV_FOREACH(nodes, i, optional) + zix_tree_insert((ZixTree*)result, + lilv_node_duplicate(lilv_nodes_get(optional, i)), + NULL); + LILV_FOREACH(nodes, i, required) + zix_tree_insert((ZixTree*)result, + lilv_node_duplicate(lilv_nodes_get(required, i)), + NULL); + + lilv_nodes_free(optional); + lilv_nodes_free(required); + + return result; +} + +LILV_API +LilvNodes* +lilv_plugin_get_optional_features(const LilvPlugin* p) +{ + return lilv_plugin_get_value_internal( + p, p->world->uris.lv2_optionalFeature); +} + +LILV_API +LilvNodes* +lilv_plugin_get_required_features(const LilvPlugin* p) +{ + return lilv_plugin_get_value_internal( + p, p->world->uris.lv2_requiredFeature); +} + +LILV_API +bool +lilv_plugin_has_extension_data(const LilvPlugin* p, + const LilvNode* uri) +{ + if (!lilv_node_is_uri(uri)) { + LILV_ERRORF("Extension data `%s' is not a URI\n", + sord_node_get_string(uri->node)); + return false; + } + + SordIter* iter = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + p->world->uris.lv2_extensionData, + uri->node); + + if (iter) { + sord_iter_free(iter); + return true; + } else { + return false; + } +} + +LILV_API +LilvNodes* +lilv_plugin_get_extension_data(const LilvPlugin* p) +{ + return lilv_plugin_get_value_internal(p, p->world->uris.lv2_extensionData); +} + +LILV_API +const LilvPort* +lilv_plugin_get_port_by_index(const LilvPlugin* p, + uint32_t index) +{ + lilv_plugin_load_ports_if_necessary(p); + if (index < p->num_ports) + return p->ports[index]; + else + return NULL; +} + +LILV_API +const LilvPort* +lilv_plugin_get_port_by_symbol(const LilvPlugin* p, + const LilvNode* symbol) +{ + lilv_plugin_load_ports_if_necessary(p); + for (uint32_t i = 0; i < p->num_ports; ++i) { + LilvPort* port = p->ports[i]; + if (lilv_node_equals(port->symbol, symbol)) + return port; + } + + return NULL; +} + +LILV_API +LilvNode* +lilv_plugin_get_project(const LilvPlugin* p) +{ + lilv_plugin_load_if_necessary(p); + + SordNode* lv2_project = sord_new_uri(p->world->world, + (const uint8_t*)LV2_CORE__project); + + SordIter* projects = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + lv2_project, + NULL); + + sord_node_free(p->world->world, lv2_project); + + if (sord_iter_end(projects)) { + return NULL; + } + + const SordNode* project = sord_iter_get_node(projects, SORD_OBJECT); + + sord_iter_free(projects); + return lilv_node_new_from_node(p->world, project); +} + +static const SordNode* +lilv_plugin_get_author(const LilvPlugin* p) +{ + lilv_plugin_load_if_necessary(p); + + SordNode* doap_maintainer = sord_new_uri( + p->world->world, NS_DOAP "maintainer"); + + SordIter* maintainers = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + doap_maintainer, + NULL); + + sord_node_free(p->world->world, doap_maintainer); + + if (sord_iter_end(maintainers)) { + LilvNode* project = lilv_plugin_get_project(p); + if (!project) { + return NULL; + } + + maintainers = lilv_world_query_internal( + p->world, + project->node, + doap_maintainer, + NULL); + } + + if (sord_iter_end(maintainers)) { + return NULL; + } + + const SordNode* author = sord_iter_get_node(maintainers, SORD_OBJECT); + + sord_iter_free(maintainers); + return author; +} + +LILV_API +LilvNode* +lilv_plugin_get_author_name(const LilvPlugin* plugin) +{ + const SordNode* author = lilv_plugin_get_author(plugin); + if (author) { + return lilv_plugin_get_one( + plugin, author, sord_new_uri( + plugin->world->world, NS_FOAF "name")); + } + return NULL; +} + +LILV_API +LilvNode* +lilv_plugin_get_author_email(const LilvPlugin* plugin) +{ + const SordNode* author = lilv_plugin_get_author(plugin); + if (author) { + return lilv_plugin_get_one( + plugin, author, sord_new_uri( + plugin->world->world, NS_FOAF "mbox")); + } + return NULL; +} + +LILV_API +LilvNode* +lilv_plugin_get_author_homepage(const LilvPlugin* plugin) +{ + const SordNode* author = lilv_plugin_get_author(plugin); + if (author) { + return lilv_plugin_get_one( + plugin, author, sord_new_uri( + plugin->world->world, NS_FOAF "homepage")); + } + return NULL; +} + +LILV_API +bool +lilv_plugin_is_replaced(const LilvPlugin* plugin) +{ + return plugin->replaced; +} + +LILV_API +LilvUIs* +lilv_plugin_get_uis(const LilvPlugin* p) +{ + lilv_plugin_load_if_necessary(p); + + SordNode* ui_ui_node = sord_new_uri(p->world->world, + (const uint8_t*)LV2_UI__ui); + SordNode* ui_binary_node = sord_new_uri(p->world->world, + (const uint8_t*)LV2_UI__binary); + + LilvUIs* result = lilv_uis_new(); + SordIter* uis = lilv_world_query_internal( + p->world, + p->plugin_uri->node, + ui_ui_node, + NULL); + + FOREACH_MATCH(uis) { + const SordNode* ui = sord_iter_get_node(uis, SORD_OBJECT); + + LilvNode* type = lilv_plugin_get_unique(p, ui, p->world->uris.rdf_a); + LilvNode* binary = lilv_plugin_get_unique(p, ui, ui_binary_node); + + if (sord_node_get_type(ui) != SORD_URI + || !lilv_node_is_uri(type) + || !lilv_node_is_uri(binary)) { + lilv_node_free(binary); + lilv_node_free(type); + LILV_ERRORF("Corrupt UI <%s>\n", sord_node_get_string(ui)); + continue; + } + + LilvUI* lilv_ui = lilv_ui_new( + p->world, + lilv_node_new_from_node(p->world, ui), + type, + binary); + + zix_tree_insert((ZixTree*)result, lilv_ui, NULL); + } + sord_iter_free(uis); + + sord_node_free(p->world->world, ui_binary_node); + sord_node_free(p->world->world, ui_ui_node); + + if (lilv_uis_size(result) > 0) { + return result; + } else { + lilv_uis_free(result); + return NULL; + } +} + +LILV_API +LilvNodes* +lilv_plugin_get_related(const LilvPlugin* plugin, const LilvNode* type) +{ + LilvWorld* const world = plugin->world; + LilvNodes* const related = lilv_world_query_values_internal( + world, + NULL, + world->uris.lv2_appliesTo, + lilv_plugin_get_uri(plugin)->node); + + if (!type) { + return related; + } + + LilvNodes* matches = lilv_nodes_new(); + LILV_FOREACH(nodes, i, related) { + LilvNode* node = (LilvNode*)lilv_collection_get((ZixTree*)related, i); + SordIter* titer = lilv_world_query_internal( + world, node->node, world->uris.rdf_a, type->node); + if (!sord_iter_end(titer)) { + zix_tree_insert((ZixTree*)matches, + lilv_node_new_from_node(world, node->node), + NULL); + } + sord_iter_free(titer); + } + + lilv_nodes_free(related); + return matches; +} + +static SerdEnv* +new_lv2_env(const SerdNode* base) +{ + SerdEnv* env = serd_env_new(base); + +#define USTR(s) ((const uint8_t*)s) + serd_env_set_prefix_from_strings(env, USTR("doap"), USTR(LILV_NS_DOAP)); + serd_env_set_prefix_from_strings(env, USTR("foaf"), USTR(LILV_NS_FOAF)); + serd_env_set_prefix_from_strings(env, USTR("lv2"), USTR(LILV_NS_LV2)); + serd_env_set_prefix_from_strings(env, USTR("owl"), USTR(LILV_NS_OWL)); + serd_env_set_prefix_from_strings(env, USTR("rdf"), USTR(LILV_NS_RDF)); + serd_env_set_prefix_from_strings(env, USTR("rdfs"), USTR(LILV_NS_RDFS)); + serd_env_set_prefix_from_strings(env, USTR("xsd"), USTR(LILV_NS_XSD)); + + return env; +} + +static void +maybe_write_prefixes(SerdWriter* writer, SerdEnv* env, FILE* file) +{ + fseek(file, 0, SEEK_END); + if (ftell(file) == 0) { + serd_env_foreach( + env, (SerdPrefixSink)serd_writer_set_prefix, writer); + } else { + fprintf(file, "\n"); + } +} + +LILV_API +void +lilv_plugin_write_description(LilvWorld* world, + const LilvPlugin* plugin, + const LilvNode* base_uri, + FILE* plugin_file) +{ + const LilvNode* subject = lilv_plugin_get_uri(plugin); + const uint32_t num_ports = lilv_plugin_get_num_ports(plugin); + const SerdNode* base = sord_node_to_serd_node(base_uri->node); + SerdEnv* env = new_lv2_env(base); + + SerdWriter* writer = serd_writer_new( + SERD_TURTLE, + (SerdStyle)(SERD_STYLE_ABBREVIATED|SERD_STYLE_CURIED), + env, + NULL, + serd_file_sink, + plugin_file); + + // Write prefixes if this is a new file + maybe_write_prefixes(writer, env, plugin_file); + + // Write plugin description + SordIter* plug_iter = lilv_world_query_internal( + world, subject->node, NULL, NULL); + sord_write_iter(plug_iter, writer); + + // Write port descriptions + for (uint32_t i = 0; i < num_ports; ++i) { + const LilvPort* port = plugin->ports[i]; + SordIter* port_iter = lilv_world_query_internal( + world, port->node, NULL, NULL); + sord_write_iter(port_iter, writer); + } + + serd_writer_free(writer); + serd_env_free(env); +} + +LILV_API +void +lilv_plugin_write_manifest_entry(LilvWorld* world, + const LilvPlugin* plugin, + const LilvNode* base_uri, + FILE* manifest_file, + const char* plugin_file_path) +{ + const LilvNode* subject = lilv_plugin_get_uri(plugin); + const SerdNode* base = sord_node_to_serd_node(base_uri->node); + SerdEnv* env = new_lv2_env(base); + + SerdWriter* writer = serd_writer_new( + SERD_TURTLE, + (SerdStyle)(SERD_STYLE_ABBREVIATED|SERD_STYLE_CURIED), + env, + NULL, + serd_file_sink, + manifest_file); + + // Write prefixes if this is a new file + maybe_write_prefixes(writer, env, manifest_file); + + // Write manifest entry + serd_writer_write_statement( + writer, 0, NULL, + sord_node_to_serd_node(subject->node), + sord_node_to_serd_node(plugin->world->uris.rdf_a), + sord_node_to_serd_node(plugin->world->uris.lv2_Plugin), 0, 0); + + const SerdNode file_node = serd_node_from_string( + SERD_URI, (const uint8_t*)plugin_file_path); + serd_writer_write_statement( + writer, 0, NULL, + sord_node_to_serd_node(subject->node), + sord_node_to_serd_node(plugin->world->uris.rdfs_seeAlso), + &file_node, 0, 0); + + serd_writer_free(writer); + serd_env_free(env); +} diff --git a/source/libs/lilv/lilv-0.14.4/src/pluginclass.c b/source/libs/lilv/lilv-0.14.4/src/pluginclass.c new file mode 100644 index 000000000..46308abcf --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/pluginclass.c @@ -0,0 +1,96 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include + +#include "lilv_internal.h" + +LilvPluginClass* +lilv_plugin_class_new(LilvWorld* world, + const SordNode* parent_node, + const SordNode* uri, + const char* label) +{ + if (parent_node && sord_node_get_type(parent_node) != SORD_URI) { + return NULL; // Not an LV2 plugin superclass (FIXME: discover properly) + } + LilvPluginClass* pc = (LilvPluginClass*)malloc(sizeof(LilvPluginClass)); + pc->world = world; + pc->uri = lilv_node_new_from_node(world, uri); + pc->label = lilv_node_new(world, LILV_VALUE_STRING, label); + pc->parent_uri = (parent_node) + ? lilv_node_new_from_node(world, parent_node) + : NULL; + return pc; +} + +void +lilv_plugin_class_free(LilvPluginClass* plugin_class) +{ + assert(plugin_class->uri); + lilv_node_free(plugin_class->uri); + lilv_node_free(plugin_class->parent_uri); + lilv_node_free(plugin_class->label); + free(plugin_class); +} + +LILV_API +const LilvNode* +lilv_plugin_class_get_parent_uri(const LilvPluginClass* plugin_class) +{ + if (plugin_class->parent_uri) + return plugin_class->parent_uri; + else + return NULL; +} + +LILV_API +const LilvNode* +lilv_plugin_class_get_uri(const LilvPluginClass* plugin_class) +{ + assert(plugin_class->uri); + return plugin_class->uri; +} + +LILV_API +const LilvNode* +lilv_plugin_class_get_label(const LilvPluginClass* plugin_class) +{ + return plugin_class->label; +} + +LILV_API +LilvPluginClasses* +lilv_plugin_class_get_children(const LilvPluginClass* plugin_class) +{ + // Returned list doesn't own categories + LilvPluginClasses* all = plugin_class->world->plugin_classes; + LilvPluginClasses* result = zix_tree_new(false, lilv_ptr_cmp, NULL, NULL); + + for (ZixTreeIter* i = zix_tree_begin((ZixTree*)all); + i != zix_tree_end((ZixTree*)all); + i = zix_tree_iter_next(i)) { + const LilvPluginClass* c = (LilvPluginClass*)zix_tree_get(i); + const LilvNode* parent = lilv_plugin_class_get_parent_uri(c); + if (parent && lilv_node_equals(lilv_plugin_class_get_uri(plugin_class), + parent)) + zix_tree_insert((ZixTree*)result, (LilvPluginClass*)c, NULL); + } + + return result; +} diff --git a/source/libs/lilv/lilv-0.14.4/src/port.c b/source/libs/lilv/lilv-0.14.4/src/port.c new file mode 100644 index 000000000..3bf25e1c5 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/port.c @@ -0,0 +1,264 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include +#include + +#include "lv2/event.h" + +#include "lilv_internal.h" + +LilvPort* +lilv_port_new(LilvWorld* world, + const SordNode* node, + uint32_t index, + const char* symbol) +{ + LilvPort* port = (LilvPort*)malloc(sizeof(LilvPort)); + port->node = sord_node_copy(node); + port->index = index; + port->symbol = lilv_node_new(world, LILV_VALUE_STRING, symbol); + port->classes = lilv_nodes_new(); + return port; +} + +void +lilv_port_free(const LilvPlugin* plugin, LilvPort* port) +{ + if (port) { + sord_node_free(plugin->world->world, port->node); + lilv_nodes_free(port->classes); + lilv_node_free(port->symbol); + free(port); + } +} + +LILV_API +bool +lilv_port_is_a(const LilvPlugin* plugin, + const LilvPort* port, + const LilvNode* port_class) +{ + LILV_FOREACH(nodes, i, port->classes) + if (lilv_node_equals(lilv_nodes_get(port->classes, i), port_class)) + return true; + + return false; +} + +LILV_API +bool +lilv_port_has_property(const LilvPlugin* p, + const LilvPort* port, + const LilvNode* property) +{ + assert(property); + SordIter* results = lilv_world_query_internal( + p->world, + port->node, + p->world->uris.lv2_portProperty, + lilv_node_as_node(property)); + + const bool ret = !sord_iter_end(results); + sord_iter_free(results); + return ret; +} + +LILV_API +bool +lilv_port_supports_event(const LilvPlugin* p, + const LilvPort* port, + const LilvNode* event) +{ + assert(event); + SordIter* results = lilv_world_query_internal( + p->world, + port->node, + sord_new_uri(p->world->world, (const uint8_t*)LV2_EVENT__supportsEvent), + lilv_node_as_node(event)); + + const bool ret = !sord_iter_end(results); + sord_iter_free(results); + return ret; +} + +static LilvNodes* +lilv_port_get_value_by_node(const LilvPlugin* p, + const LilvPort* port, + const SordNode* predicate) +{ + assert(sord_node_get_type(predicate) == SORD_URI); + + SordIter* results = lilv_world_query_internal( + p->world, + port->node, + predicate, + NULL); + + return lilv_nodes_from_stream_objects(p->world, results, SORD_OBJECT); +} + +LILV_API +LilvNodes* +lilv_port_get_value(const LilvPlugin* p, + const LilvPort* port, + const LilvNode* predicate) +{ + if (!lilv_node_is_uri(predicate)) { + LILV_ERRORF("Predicate `%s' is not a URI\n", + sord_node_get_string(predicate->node)); + return NULL; + } + + return lilv_port_get_value_by_node( + p, port, + lilv_node_as_node(predicate)); +} + +LILV_API +uint32_t +lilv_port_get_index(const LilvPlugin* p, + const LilvPort* port) +{ + return port->index; +} + +LILV_API +const LilvNode* +lilv_port_get_symbol(const LilvPlugin* p, + const LilvPort* port) +{ + return port->symbol; +} + +LILV_API +LilvNode* +lilv_port_get_name(const LilvPlugin* p, + const LilvPort* port) +{ + LilvNodes* results = lilv_port_get_value_by_node( + p, port, p->world->uris.lv2_name); + + LilvNode* ret = NULL; + if (results) { + LilvNode* val = lilv_nodes_get_first(results); + if (lilv_node_is_string(val)) + ret = lilv_node_duplicate(val); + lilv_nodes_free(results); + } + + if (!ret) + LILV_WARNF("Plugin <%s> port has no (mandatory) doap:name\n", + lilv_node_as_string(lilv_plugin_get_uri(p))); + + return ret; +} + +LILV_API +const LilvNodes* +lilv_port_get_classes(const LilvPlugin* p, + const LilvPort* port) +{ + return port->classes; +} + +LILV_API +void +lilv_port_get_range(const LilvPlugin* p, + const LilvPort* port, + LilvNode** def, + LilvNode** min, + LilvNode** max) +{ + if (def) { + LilvNodes* defaults = lilv_port_get_value_by_node( + p, port, p->world->uris.lv2_default); + *def = defaults + ? lilv_node_duplicate(lilv_nodes_get_first(defaults)) + : NULL; + lilv_nodes_free(defaults); + } + if (min) { + LilvNodes* minimums = lilv_port_get_value_by_node( + p, port, p->world->uris.lv2_minimum); + *min = minimums + ? lilv_node_duplicate(lilv_nodes_get_first(minimums)) + : NULL; + lilv_nodes_free(minimums); + } + if (max) { + LilvNodes* maximums = lilv_port_get_value_by_node( + p, port, p->world->uris.lv2_maximum); + *max = maximums + ? lilv_node_duplicate(lilv_nodes_get_first(maximums)) + : NULL; + lilv_nodes_free(maximums); + } +} + +LILV_API +LilvScalePoints* +lilv_port_get_scale_points(const LilvPlugin* p, + const LilvPort* port) +{ + SordIter* points = lilv_world_query_internal( + p->world, + port->node, + sord_new_uri(p->world->world, (const uint8_t*)LV2_CORE__scalePoint), + NULL); + + LilvScalePoints* ret = NULL; + if (!sord_iter_end(points)) + ret = lilv_scale_points_new(); + + FOREACH_MATCH(points) { + const SordNode* point = sord_iter_get_node(points, SORD_OBJECT); + + LilvNode* value = lilv_plugin_get_unique( + p, + point, + p->world->uris.rdf_value); + + LilvNode* label = lilv_plugin_get_unique( + p, + point, + p->world->uris.rdfs_label); + + if (value && label) { + zix_tree_insert( + (ZixTree*)ret, lilv_scale_point_new(value, label), NULL); + } + } + sord_iter_free(points); + + assert(!ret || lilv_nodes_size(ret) > 0); + return ret; +} + +LILV_API +LilvNodes* +lilv_port_get_properties(const LilvPlugin* p, + const LilvPort* port) +{ + LilvNode* pred = lilv_node_new_from_node( + p->world, p->world->uris.lv2_portProperty); + LilvNodes* ret = lilv_port_get_value(p, port, pred); + lilv_node_free(pred); + return ret; +} diff --git a/source/libs/lilv/lilv-0.14.4/src/query.c b/source/libs/lilv/lilv-0.14.4/src/query.c new file mode 100644 index 000000000..09fa6f229 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/query.c @@ -0,0 +1,140 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include + +#include "lilv_internal.h" + +typedef enum { + LILV_LANG_MATCH_NONE, ///< Language does not match at all + LILV_LANG_MATCH_PARTIAL, ///< Partial (language, but not country) match + LILV_LANG_MATCH_EXACT ///< Exact (language and country) match +} LilvLangMatch; + +static LilvLangMatch +lilv_lang_matches(const char* a, const char* b) +{ + if (!strcmp(a, b)) { + return LILV_LANG_MATCH_EXACT; + } + + const char* a_dash = strchr(a, '-'); + const size_t a_lang_len = a_dash ? (size_t)(a_dash - a) : strlen(a); + const char* b_dash = strchr(b, '-'); + const size_t b_lang_len = b_dash ? (size_t)(b_dash - b) : strlen(b); + + if (a_lang_len == b_lang_len && !strncmp(a, b, a_lang_len)) { + return LILV_LANG_MATCH_PARTIAL; + } + + return LILV_LANG_MATCH_NONE; +} + +static LilvNodes* +lilv_nodes_from_stream_objects_i18n(LilvWorld* world, + SordIter* stream, + SordQuadIndex field) +{ + LilvNodes* values = lilv_nodes_new(); + const SordNode* nolang = NULL; // Untranslated value + const SordNode* partial = NULL; // Partial language match + char* syslang = lilv_get_lang(); + FOREACH_MATCH(stream) { + const SordNode* value = sord_iter_get_node(stream, field); + if (sord_node_get_type(value) == SORD_LITERAL) { + const char* lang = sord_node_get_language(value); + LilvLangMatch lm = LILV_LANG_MATCH_NONE; + if (lang) { + lm = (syslang) + ? lilv_lang_matches(lang, syslang) + : LILV_LANG_MATCH_PARTIAL; + } else { + nolang = value; + if (!syslang) { + lm = LILV_LANG_MATCH_EXACT; + } + } + + if (lm == LILV_LANG_MATCH_EXACT) { + // Exact language match, add to results + zix_tree_insert((ZixTree*)values, + lilv_node_new_from_node(world, value), + NULL); + } else if (lm == LILV_LANG_MATCH_PARTIAL) { + // Partial language match, save in case we find no exact + partial = value; + } + } else { + zix_tree_insert((ZixTree*)values, + lilv_node_new_from_node(world, value), + NULL); + } + } + sord_iter_free(stream); + free(syslang); + + if (lilv_nodes_size(values) > 0) { + return values; + } + + const SordNode* best = nolang; + if (syslang && partial) { + // Partial language match for system language + best = partial; + } else if (!best) { + // No languages matches at all, and no untranslated value + // Use any value, if possible + best = partial; + } + + if (best) { + zix_tree_insert( + (ZixTree*)values, lilv_node_new_from_node(world, best), NULL); + } else { + // No matches whatsoever + lilv_nodes_free(values); + values = NULL; + } + + return values; +} + +LilvNodes* +lilv_nodes_from_stream_objects(LilvWorld* world, + SordIter* stream, + SordQuadIndex field) +{ + if (sord_iter_end(stream)) { + sord_iter_free(stream); + return NULL; + } else if (world->opt.filter_language) { + return lilv_nodes_from_stream_objects_i18n(world, stream, field); + } else { + LilvNodes* values = lilv_nodes_new(); + FOREACH_MATCH(stream) { + const SordNode* value = sord_iter_get_node(stream, field); + LilvNode* node = lilv_node_new_from_node(world, value); + if (node) { + zix_tree_insert((ZixTree*)values, node, NULL); + } + } + sord_iter_free(stream); + return values; + } +} diff --git a/source/libs/lilv/lilv-0.14.4/src/scalepoint.c b/source/libs/lilv/lilv-0.14.4/src/scalepoint.c new file mode 100644 index 000000000..0138e61a4 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/scalepoint.c @@ -0,0 +1,52 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "lilv_internal.h" + +/** Ownership of value and label is taken */ +LilvScalePoint* +lilv_scale_point_new(LilvNode* value, LilvNode* label) +{ + LilvScalePoint* point = (LilvScalePoint*)malloc( + sizeof(struct LilvScalePointImpl)); + point->value = value; + point->label = label; + return point; +} + +void +lilv_scale_point_free(LilvScalePoint* point) +{ + if (point) { + lilv_node_free(point->value); + lilv_node_free(point->label); + free(point); + } +} + +LILV_API +const LilvNode* +lilv_scale_point_get_value(const LilvScalePoint* p) +{ + return p->value; +} + +LILV_API +const LilvNode* +lilv_scale_point_get_label(const LilvScalePoint* p) +{ + return p->label; +} diff --git a/source/libs/lilv/lilv-0.14.4/src/state.c b/source/libs/lilv/lilv-0.14.4/src/state.c new file mode 100644 index 000000000..7992ad647 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/state.c @@ -0,0 +1,1097 @@ +/* + Copyright 2007-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include + +#include "lv2/atom.h" +#include "lv2/atom-forge.h" +#include "lv2/presets.h" +#include "lv2/state.h" + +#include "lilv_config.h" +#include "lilv_internal.h" +#include "sratom/sratom.h" + +#define USTR(s) ((const uint8_t*)(s)) + +typedef struct { + void* value; ///< Value/Object + size_t size; ///< Size of value + uint32_t key; ///< Key/Predicate (URID) + uint32_t type; ///< Type of value (URID) + uint32_t flags; ///< State flags (POD, etc) +} Property; + +typedef struct { + char* symbol; ///< Symbol of port + void* value; ///< Value of port + uint32_t size; ///< Size of value + uint32_t type; ///< Type of value (URID) +} PortValue; + +typedef struct { + char* abs; ///< Absolute path of actual file + char* rel; ///< Abstract path (relative path in state dir) +} PathMap; + +struct LilvStateImpl { + LilvNode* plugin_uri; ///< Plugin URI + char* dir; ///< Save directory (if saved) + char* file_dir; ///< Directory for files created by plugin + char* copy_dir; ///< Directory for snapshots of external files + char* link_dir; ///< Directory for links to external files + char* label; ///< State/Preset label + ZixTree* abs2rel; ///< PathMap sorted by abs + ZixTree* rel2abs; ///< PathMap sorted by rel + Property* props; ///< State properties + PortValue* values; ///< Port values + uint32_t atom_Path; ///< atom:Path URID + uint32_t num_props; ///< Number of state properties + uint32_t num_values; ///< Number of port values +}; + +static int +abs_cmp(const void* a, const void* b, void* user_data) +{ + return strcmp(((const PathMap*)a)->abs, ((const PathMap*)b)->abs); +} + +static int +rel_cmp(const void* a, const void* b, void* user_data) +{ + return strcmp(((const PathMap*)a)->rel, ((const PathMap*)b)->rel); +} + +static int +property_cmp(const void* a, const void* b) +{ + return ((const Property*)a)->key - ((const Property*)b)->key; +} + +static int +value_cmp(const void* a, const void* b) +{ + return strcmp(((const PortValue*)a)->symbol, + ((const PortValue*)b)->symbol); +} + +static void +path_rel_free(void* ptr) +{ + free(((PathMap*)ptr)->abs); + free(((PathMap*)ptr)->rel); + free(ptr); +} + +static PortValue* +append_port_value(LilvState* state, + const char* port_symbol, + const void* value, + uint32_t size, + uint32_t type) +{ + if (value) { + state->values = (PortValue*)realloc( + state->values, (++state->num_values) * sizeof(PortValue)); + PortValue* pv = &state->values[state->num_values - 1]; + pv->symbol = lilv_strdup(port_symbol); + pv->value = malloc(size); + pv->size = size; + pv->type = type; + memcpy(pv->value, value, size); + return pv; + } + return NULL; +} + +static const char* +lilv_state_rel2abs(const LilvState* state, const char* path) +{ + ZixTreeIter* iter = NULL; + const PathMap key = { NULL, (char*)path }; + if (state->rel2abs && !zix_tree_find(state->rel2abs, &key, &iter)) { + return ((const PathMap*)zix_tree_get(iter))->abs; + } + return path; +} + +static LV2_State_Status +store_callback(LV2_State_Handle handle, + uint32_t key, + const void* value, + size_t size, + uint32_t type, + uint32_t flags) +{ + LilvState* const state = (LilvState*)handle; + state->props = (Property*)realloc( + state->props, (++state->num_props) * sizeof(Property)); + Property* const prop = &state->props[state->num_props - 1]; + + if ((flags & LV2_STATE_IS_POD) || type == state->atom_Path) { + prop->value = malloc(size); + memcpy(prop->value, value, size); + } else { + LILV_WARN("Storing non-POD value\n"); + prop->value = (void*)value; + } + + prop->size = size; + prop->key = key; + prop->type = type; + prop->flags = flags; + + return LV2_STATE_SUCCESS; +} + +static const void* +retrieve_callback(LV2_State_Handle handle, + uint32_t key, + size_t* size, + uint32_t* type, + uint32_t* flags) +{ + const LilvState* const state = (LilvState*)handle; + const Property search_key = { NULL, 0, key, 0, 0 }; + const Property* const prop = (Property*)bsearch( + &search_key, state->props, state->num_props, + sizeof(Property), property_cmp); + + if (prop) { + *size = prop->size; + *type = prop->type; + *flags = prop->flags; + return prop->value; + } + return NULL; +} + +static bool +lilv_state_has_path(const char* path, void* state) +{ + return lilv_state_rel2abs((LilvState*)state, path) != path; +} + +static char* +make_path(LV2_State_Make_Path_Handle handle, const char* path) +{ + LilvState* state = (LilvState*)handle; + if (!lilv_path_exists(state->dir, NULL)) { + lilv_mkdir_p(state->dir); + } + + return lilv_path_join(state->dir, path); +} + +static char* +abstract_path(LV2_State_Map_Path_Handle handle, + const char* abs_path) +{ + LilvState* state = (LilvState*)handle; + char* path = NULL; + char* real_path = lilv_realpath(abs_path); + const PathMap key = { (char*)real_path, NULL }; + ZixTreeIter* iter = NULL; + + if (abs_path[0] == '\0') { + return lilv_strdup(abs_path); + } else if (!zix_tree_find(state->abs2rel, &key, &iter)) { + // Already mapped path in a previous call + PathMap* pm = (PathMap*)zix_tree_get(iter); + free(real_path); + return lilv_strdup(pm->rel); + } else if (lilv_path_is_child(real_path, state->dir)) { + // File in state directory (loaded, or created by plugin during save + path = lilv_path_relative_to(real_path, state->dir); + } else if (lilv_path_is_child(real_path, state->file_dir)) { + // File created by plugin earlier + path = lilv_path_relative_to(real_path, state->file_dir); + if (state->copy_dir) { + if (!lilv_path_exists(state->copy_dir, NULL)) { + lilv_mkdir_p(state->copy_dir); + } + char* cpath = lilv_path_join(state->copy_dir, path); + char* copy = lilv_get_latest_copy(real_path, cpath); + if (!copy || !lilv_file_equals(real_path, copy)) { + // No recent enough copy, make a new one + copy = lilv_find_free_path(cpath, lilv_path_exists, NULL); + lilv_copy_file(real_path, copy); + } + free(real_path); + free(cpath); + + // Refer to the latest copy in plugin state + real_path = copy; + } + } else { + // New path outside state directory + const char* slash = strrchr(real_path, '/'); + const char* name = slash ? (slash + 1) : real_path; + + // Find a free name in the (virtual) state directory + path = lilv_find_free_path(name, lilv_state_has_path, state); + } + + // Add record to path mapping + PathMap* pm = (PathMap*)malloc(sizeof(PathMap)); + pm->abs = real_path; + pm->rel = lilv_strdup(path); + zix_tree_insert(state->abs2rel, pm, NULL); + zix_tree_insert(state->rel2abs, pm, NULL); + + return path; +} + +static char* +absolute_path(LV2_State_Map_Path_Handle handle, + const char* state_path) +{ + LilvState* state = (LilvState*)handle; + char* path = NULL; + if (lilv_path_is_absolute(state_path)) { + // Absolute path, return identical path + path = lilv_strdup(state_path); + } else if (state->dir) { + // Relative path inside state directory + path = lilv_path_join(state->dir, state_path); + } else { + // State has not been saved, unmap + path = lilv_strdup(lilv_state_rel2abs(state, state_path)); + } + + return path; +} + +/** Return a new features array which is @c feature added to @c features. */ +static const LV2_Feature** +add_features(const LV2_Feature *const * features, + const LV2_Feature* map, const LV2_Feature* make) +{ + size_t n_features = 0; + for (; features && features[n_features]; ++n_features) {} + + const LV2_Feature** ret = (const LV2_Feature**)calloc( + n_features + 3, sizeof(LV2_Feature*)); + + if (features) { + memcpy(ret, features, n_features * sizeof(LV2_Feature*)); + } + + ret[n_features] = map; + ret[n_features + 1] = make; + return ret; +} + +static char* +absolute_dir(const char* path) +{ + char* abs_path = lilv_path_absolute(path); + char* base = lilv_path_join(abs_path, NULL); + free(abs_path); + return base; +} + +static const char* +state_strerror(LV2_State_Status st) +{ + switch (st) { + case LV2_STATE_SUCCESS: return "Completed successfully"; + case LV2_STATE_ERR_BAD_TYPE: return "Unsupported type"; + case LV2_STATE_ERR_BAD_FLAGS: return "Unsupported flags"; + case LV2_STATE_ERR_NO_FEATURE: return "Missing features"; + case LV2_STATE_ERR_NO_PROPERTY: return "Missing property"; + default: return "Unknown error"; + } +} + +LILV_API +LilvState* +lilv_state_new_from_instance(const LilvPlugin* plugin, + LilvInstance* instance, + LV2_URID_Map* map, + const char* file_dir, + const char* copy_dir, + const char* link_dir, + const char* save_dir, + LilvGetPortValueFunc get_value, + void* user_data, + uint32_t flags, + const LV2_Feature *const * features) +{ + const LV2_Feature** sfeatures = NULL; + LilvWorld* const world = plugin->world; + LilvState* const state = (LilvState*)malloc(sizeof(LilvState)); + memset(state, '\0', sizeof(LilvState)); + state->plugin_uri = lilv_node_duplicate(lilv_plugin_get_uri(plugin)); + state->abs2rel = zix_tree_new(false, abs_cmp, NULL, path_rel_free); + state->rel2abs = zix_tree_new(false, rel_cmp, NULL, NULL); + state->file_dir = file_dir ? absolute_dir(file_dir) : NULL; + state->copy_dir = copy_dir ? absolute_dir(copy_dir) : NULL; + state->link_dir = link_dir ? absolute_dir(link_dir) : NULL; + state->dir = save_dir ? absolute_dir(save_dir) : NULL; + state->atom_Path = map->map(map->handle, LV2_ATOM__Path); + + LV2_State_Map_Path pmap = { state, abstract_path, absolute_path }; + LV2_Feature pmap_feature = { LV2_STATE__mapPath, &pmap }; + LV2_State_Make_Path pmake = { state, make_path }; + LV2_Feature pmake_feature = { LV2_STATE__makePath, &pmake }; + features = sfeatures = add_features(features, &pmap_feature, + save_dir ? &pmake_feature : NULL); + + // Store port values + if (get_value) { + LilvNode* lv2_ControlPort = lilv_new_uri(world, LILV_URI_CONTROL_PORT); + LilvNode* lv2_InputPort = lilv_new_uri(world, LILV_URI_INPUT_PORT); + for (uint32_t i = 0; i < plugin->num_ports; ++i) { + const LilvPort* const port = plugin->ports[i]; + if (lilv_port_is_a(plugin, port, lv2_ControlPort) + && lilv_port_is_a(plugin, port, lv2_InputPort)) { + uint32_t size, type; + const char* sym = lilv_node_as_string(port->symbol); + const void* value = get_value(sym, user_data, &size, &type); + append_port_value(state, sym, value, size, type); + } + } + lilv_node_free(lv2_ControlPort); + lilv_node_free(lv2_InputPort); + } + + // Store properties + const LV2_Descriptor* desc = instance->lv2_descriptor; + const LV2_State_Interface* iface = (desc->extension_data) + ? (LV2_State_Interface*)desc->extension_data(LV2_STATE__interface) + : NULL; + + if (iface) { + LV2_State_Status st = iface->save( + instance->lv2_handle, store_callback, state, flags, features); + if (st) { + LILV_ERRORF("Error saving plugin state: %s\n", state_strerror(st)); + free(state->props); + state->props = NULL; + state->num_props = 0; + } else { + qsort(state->props, state->num_props, sizeof(Property), property_cmp); + } + } + + qsort(state->values, state->num_values, sizeof(PortValue), value_cmp); + + free(sfeatures); + return state; +} + +LILV_API +void +lilv_state_restore(const LilvState* state, + LilvInstance* instance, + LilvSetPortValueFunc set_value, + void* user_data, + uint32_t flags, + const LV2_Feature *const * features) +{ + LV2_State_Map_Path map_path = { + (LilvState*)state, abstract_path, absolute_path }; + LV2_Feature map_feature = { LV2_STATE__mapPath, &map_path }; + + const LV2_Feature** sfeatures = add_features(features, &map_feature, NULL); + + const LV2_Descriptor* desc = instance->lv2_descriptor; + const LV2_State_Interface* iface = (desc->extension_data) + ? (LV2_State_Interface*)desc->extension_data(LV2_STATE__interface) + : NULL; + + if (iface) { + iface->restore(instance->lv2_handle, retrieve_callback, + (LV2_State_Handle)state, flags, sfeatures); + } + + free(sfeatures); + + if (set_value) { + for (uint32_t i = 0; i < state->num_values; ++i) { + const PortValue* val = &state->values[i]; + set_value(val->symbol, user_data, + val->value, val->size, val->type); + } + } +} + +static SordNode* +get1(SordModel* model, const SordNode* s, const SordNode* p) +{ + SordIter* const i = sord_search(model, s, p, 0, 0); + SordNode* const node = i ? sord_node_copy(sord_iter_get_node(i, SORD_OBJECT)) : NULL; + sord_iter_free(i); + return node; +} + +static LilvState* +new_state_from_model(LilvWorld* world, + LV2_URID_Map* map, + SordModel* model, + const SordNode* node, + const char* dir) +{ + LilvState* const state = (LilvState*)malloc(sizeof(LilvState)); + memset(state, '\0', sizeof(LilvState)); + state->dir = lilv_strdup(dir); + state->atom_Path = map->map(map->handle, LV2_ATOM__Path); + + // Get the plugin URI this state applies to + SordIter* i = sord_search(model, node, world->uris.lv2_appliesTo, 0, 0); + if (i) { + const SordNode* object = sord_iter_get_node(i, SORD_OBJECT); + const SordNode* graph = sord_iter_get_node(i, SORD_GRAPH); + state->plugin_uri = lilv_node_new_from_node(world, object); + if (!state->dir && graph) { + state->dir = lilv_strdup((const char*)sord_node_get_string(graph)); + } + sord_iter_free(i); + } else { + LILV_ERRORF("State %s missing lv2:appliesTo property\n", + sord_node_get_string(node)); + } + + // Get the state label + i = sord_search(model, node, world->uris.rdfs_label, NULL, NULL); + if (i) { + const SordNode* object = sord_iter_get_node(i, SORD_OBJECT); + const SordNode* graph = sord_iter_get_node(i, SORD_GRAPH); + state->label = lilv_strdup((const char*)sord_node_get_string(object)); + if (!state->dir) { + state->dir = lilv_strdup((const char*)sord_node_get_string(graph)); + } + sord_iter_free(i); + } + + Sratom* sratom = sratom_new(map); + SerdChunk chunk = { NULL, 0 }; + LV2_Atom_Forge forge; + lv2_atom_forge_init(&forge, map); + lv2_atom_forge_set_sink( + &forge, sratom_forge_sink, sratom_forge_deref, &chunk); + + // Get port values + SordIter* ports = sord_search(model, node, world->uris.lv2_port, 0, 0); + FOREACH_MATCH(ports) { + const SordNode* port = sord_iter_get_node(ports, SORD_OBJECT); + const SordNode* label = get1(model, port, world->uris.rdfs_label); + const SordNode* symbol = get1(model, port, world->uris.lv2_symbol); + const SordNode* value = get1(model, port, world->uris.pset_value); + if (!symbol) { + LILV_ERRORF("State `%s' port missing symbol.\n", + sord_node_get_string(node)); + } else if (!value) { + LILV_ERRORF("State `%s' port `%s' missing value.\n", + sord_node_get_string(symbol), + sord_node_get_string(node)); + } else { + chunk.len = 0; + sratom_read(sratom, &forge, world->world, model, value); + LV2_Atom* atom = (LV2_Atom*)chunk.buf; + + append_port_value(state, + (const char*)sord_node_get_string(symbol), + LV2_ATOM_BODY(atom), atom->size, atom->type); + + if (label) { + lilv_state_set_label(state, + (const char*)sord_node_get_string(label)); + } + } + } + sord_iter_free(ports); + + // Get properties + SordNode* statep = sord_new_uri(world->world, USTR(LV2_STATE__state)); + const SordNode* state_node = get1(model, node, statep); + if (state_node) { + SordIter* props = sord_search(model, state_node, 0, 0, 0); + FOREACH_MATCH(props) { + const SordNode* p = sord_iter_get_node(props, SORD_PREDICATE); + const SordNode* o = sord_iter_get_node(props, SORD_OBJECT); + + chunk.len = 0; + lv2_atom_forge_set_sink( + &forge, sratom_forge_sink, sratom_forge_deref, &chunk); + + sratom_read(sratom, &forge, world->world, model, o); + LV2_Atom* atom = (LV2_Atom*)chunk.buf; + uint32_t flags = LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE; + Property prop = { NULL, 0, 0, 0, flags }; + + prop.key = map->map(map->handle, (const char*)sord_node_get_string(p)); + prop.type = atom->type; + prop.size = atom->size; + prop.value = malloc(atom->size); + memcpy(prop.value, LV2_ATOM_BODY(atom), atom->size); + if (atom->type == forge.Path) { + prop.flags = LV2_STATE_IS_PORTABLE; + } + + if (prop.value) { + state->props = (Property*)realloc( + state->props, (++state->num_props) * sizeof(Property)); + state->props[state->num_props - 1] = prop; + } + } + sord_iter_free(props); + } + sord_node_free(world->world, statep); + + free((void*)chunk.buf); + sratom_free(sratom); + + qsort(state->props, state->num_props, sizeof(Property), property_cmp); + qsort(state->values, state->num_values, sizeof(PortValue), value_cmp); + + return state; +} + +LILV_API +LilvState* +lilv_state_new_from_world(LilvWorld* world, + LV2_URID_Map* map, + const LilvNode* node) +{ + if (!lilv_node_is_uri(node) && !lilv_node_is_blank(node)) { + LILV_ERRORF("Subject `%s' is not a URI or blank node.\n", + lilv_node_as_string(node)); + return NULL; + } + + LilvState* state = new_state_from_model( + world, map, world->model, node->node, NULL); + + return state; +} + +LILV_API +LilvState* +lilv_state_new_from_file(LilvWorld* world, + LV2_URID_Map* map, + const LilvNode* subject, + const char* path) +{ + if (subject && !lilv_node_is_uri(subject) + && !lilv_node_is_blank(subject)) { + LILV_ERRORF("Subject `%s' is not a URI or blank node.\n", + lilv_node_as_string(subject)); + return NULL; + } + + uint8_t* abs_path = (uint8_t*)lilv_path_absolute(path); + SerdNode node = serd_node_new_file_uri(abs_path, NULL, NULL, 0); + SerdEnv* env = serd_env_new(&node); + SordModel* model = sord_new(world->world, SORD_SPO, false); + SerdReader* reader = sord_new_reader(model, env, SERD_TURTLE, NULL); + + serd_reader_read_file(reader, node.buf); + + SordNode* subject_node = (subject) + ? subject->node + : sord_node_from_serd_node(world->world, env, &node, NULL, NULL); + + char* dirname = lilv_dirname(path); + char* real_path = lilv_realpath(dirname); + LilvState* state = new_state_from_model( + world, map, model, subject_node, real_path); + free(dirname); + free(real_path); + + serd_node_free(&node); + free(abs_path); + serd_reader_free(reader); + sord_free(model); + serd_env_free(env); + return state; +} + +static void +set_prefixes(SerdEnv* env) +{ +#define SET_PSET(e, p, u) serd_env_set_prefix_from_strings(e, p, u) + SET_PSET(env, USTR("atom"), USTR(LV2_ATOM_PREFIX)); + SET_PSET(env, USTR("lv2"), USTR(LV2_CORE_PREFIX)); + SET_PSET(env, USTR("pset"), USTR(LV2_PRESETS_PREFIX)); + SET_PSET(env, USTR("rdf"), USTR(LILV_NS_RDF)); + SET_PSET(env, USTR("rdfs"), USTR(LILV_NS_RDFS)); + SET_PSET(env, USTR("state"), USTR(LV2_STATE_PREFIX)); + SET_PSET(env, USTR("xsd"), USTR(LILV_NS_XSD)); +} + +LILV_API +LilvState* +lilv_state_new_from_string(LilvWorld* world, + LV2_URID_Map* map, + const char* str) +{ + SerdNode base = SERD_NODE_NULL; + SerdEnv* env = serd_env_new(&base); + SordModel* model = sord_new(world->world, SORD_SPO|SORD_OPS, false); + SerdReader* reader = sord_new_reader(model, env, SERD_TURTLE, NULL); + + set_prefixes(env); + serd_reader_read_string(reader, USTR(str)); + + const SordNode* p = sord_new_uri(world->world, USTR(LILV_NS_RDF "type")); + const SordNode* o = sord_new_uri(world->world, USTR(LV2_PRESETS__Preset)); + SordIter* const i = sord_search(model, NULL, p, o, NULL); + const SordNode* s = sord_iter_get_node(i, SORD_SUBJECT); + + LilvState* state = new_state_from_model(world, map, model, s, NULL); + + sord_iter_free(i); + serd_reader_free(reader); + sord_free(model); + serd_env_free(env); + + return state; +} + +static SerdWriter* +ttl_writer(SerdSink sink, void* stream, const SerdNode* base, SerdEnv** new_env) +{ + SerdURI base_uri = SERD_URI_NULL; + if (base && base->buf) { + serd_uri_parse(base->buf, &base_uri); + } + + SerdEnv* env = serd_env_new(base); + set_prefixes(env); + + SerdWriter* writer = serd_writer_new( + SERD_TURTLE, + (SerdStyle)(SERD_STYLE_RESOLVED|SERD_STYLE_ABBREVIATED|SERD_STYLE_CURIED), + env, + &base_uri, + sink, + stream); + + *new_env = env; + return writer; +} + +static SerdWriter* +ttl_file_writer(FILE* fd, const SerdNode* node, SerdEnv** env) +{ + SerdWriter* writer = ttl_writer(serd_file_sink, fd, node, env); + + fseek(fd, 0, SEEK_END); + if (ftell(fd) == 0) { + serd_env_foreach(*env, (SerdPrefixSink)serd_writer_set_prefix, writer); + } else { + fprintf(fd, "\n"); + } + + return writer; +} + +static int +add_state_to_manifest(const LilvNode* plugin_uri, + const char* manifest_path, + const char* state_uri, + const char* state_path) +{ + FILE* fd = fopen((char*)manifest_path, "a"); + if (!fd) { + LILV_ERRORF("Failed to open %s (%s)\n", + manifest_path, strerror(errno)); + return 4; + } + + lilv_flock(fd, true); + + SerdNode file = serd_node_new_file_uri(USTR(state_path), 0, 0, 0); + SerdNode manifest = serd_node_new_file_uri(USTR(manifest_path), 0, 0, 0); + SerdEnv* env = NULL; + SerdWriter* writer = ttl_file_writer(fd, &manifest, &env); + + if (!state_uri) { + state_uri = (const char*)file.buf; + } + + // a pset:Preset + SerdNode s = serd_node_from_string(SERD_URI, USTR(state_uri)); + SerdNode p = serd_node_from_string(SERD_URI, USTR(LILV_NS_RDF "type")); + SerdNode o = serd_node_from_string(SERD_URI, USTR(LV2_PRESETS__Preset)); + serd_writer_write_statement(writer, 0, NULL, &s, &p, &o, NULL, NULL); + + // rdfs:seeAlso + p = serd_node_from_string(SERD_URI, USTR(LILV_NS_RDFS "seeAlso")); + serd_writer_write_statement(writer, 0, NULL, &s, &p, &file, NULL, NULL); + + // lv2:appliesTo + p = serd_node_from_string(SERD_URI, USTR(LV2_CORE__appliesTo)); + o = serd_node_from_string( + SERD_URI, USTR(lilv_node_as_string(plugin_uri))); + serd_writer_write_statement(writer, 0, NULL, &s, &p, &o, NULL, NULL); + + serd_node_free(&file); + serd_node_free(&manifest); + serd_writer_free(writer); + serd_env_free(env); + + lilv_flock(fd, false); + fclose(fd); + + return 0; +} + +static bool +link_exists(const char* path, void* data) +{ + const char* target = (const char*)data; + if (!lilv_path_exists(path, NULL)) { + return false; + } + char* real_path = lilv_realpath(path); + bool matches = !strcmp(real_path, target); + free(real_path); + return !matches; +} + +static int +lilv_state_write(LilvWorld* world, + LV2_URID_Map* map, + LV2_URID_Unmap* unmap, + const LilvState* state, + SerdWriter* writer, + const char* uri, + const char* dir) +{ + SerdNode lv2_appliesTo = serd_node_from_string( + SERD_CURIE, USTR("lv2:appliesTo")); + + const SerdNode* plugin_uri = sord_node_to_serd_node( + state->plugin_uri->node); + + SerdNode subject = serd_node_from_string(SERD_URI, USTR(uri ? uri : "")); + + // a pset:Preset + SerdNode p = serd_node_from_string(SERD_URI, USTR(LILV_NS_RDF "type")); + SerdNode o = serd_node_from_string(SERD_URI, USTR(LV2_PRESETS__Preset)); + serd_writer_write_statement(writer, 0, NULL, + &subject, &p, &o, NULL, NULL); + + // lv2:appliesTo + serd_writer_write_statement(writer, 0, NULL, + &subject, + &lv2_appliesTo, + plugin_uri, NULL, NULL); + + // rdfs:label label + if (state->label) { + p = serd_node_from_string(SERD_URI, USTR(LILV_NS_RDFS "label")); + o = serd_node_from_string(SERD_LITERAL, USTR(state->label)); + serd_writer_write_statement(writer, 0, + NULL, &subject, &p, &o, NULL, NULL); + } + + SerdEnv* env = serd_writer_get_env(writer); + const SerdNode* base = serd_env_get_base_uri(env, NULL); + + Sratom* sratom = sratom_new(map); + sratom_set_sink(sratom, (const char*)base->buf, + (SerdStatementSink)serd_writer_write_statement, + (SerdEndSink)serd_writer_end_anon, + writer); + + // Write port values as pretty numbers + sratom_set_pretty_numbers(sratom, true); + + // Write port values + for (uint32_t i = 0; i < state->num_values; ++i) { + PortValue* const value = &state->values[i]; + + const SerdNode port = serd_node_from_string( + SERD_BLANK, USTR(value->symbol)); + + // <> lv2:port _:symbol + p = serd_node_from_string(SERD_URI, USTR(LV2_CORE__port)); + serd_writer_write_statement(writer, SERD_ANON_O_BEGIN, + NULL, &subject, &p, &port, NULL, NULL); + + // _:symbol lv2:symbol "symbol" + p = serd_node_from_string(SERD_URI, USTR(LV2_CORE__symbol)); + o = serd_node_from_string(SERD_LITERAL, USTR(value->symbol)); + serd_writer_write_statement(writer, SERD_ANON_CONT, + NULL, &port, &p, &o, NULL, NULL); + + // _:symbol pset:value value + p = serd_node_from_string(SERD_URI, USTR(LV2_PRESETS__value)); + sratom_write(sratom, unmap, SERD_ANON_CONT, &port, &p, + value->type, value->size, value->value); + + serd_writer_end_anon(writer, &port); + } + + // Write property values with precise types + sratom_set_pretty_numbers(sratom, false); + + // Write properties + const SerdNode state_node = serd_node_from_string(SERD_BLANK, + USTR("2state")); + if (state->num_props > 0) { + p = serd_node_from_string(SERD_URI, USTR(LV2_STATE__state)); + serd_writer_write_statement(writer, SERD_ANON_O_BEGIN, NULL, + &subject, &p, &state_node, NULL, NULL); + } + for (uint32_t i = 0; i < state->num_props; ++i) { + Property* prop = &state->props[i]; + const char* key = unmap->unmap(unmap->handle, prop->key); + + p = serd_node_from_string(SERD_URI, USTR(key)); + if (prop->type == state->atom_Path && !dir) { + const char* path = (const char*)prop->value; + const char* abs_path = lilv_state_rel2abs(state, path); + sratom_write(sratom, unmap, SERD_ANON_CONT, + &state_node, &p, prop->type, + strlen(abs_path) + 1, abs_path); + } else { + sratom_write(sratom, unmap, SERD_ANON_CONT, + &state_node, &p, prop->type, prop->size, prop->value); + } + } + if (state->num_props > 0) { + serd_writer_end_anon(writer, &state_node); + } + + sratom_free(sratom); + return 0; +} + +static void +lilv_state_make_links(const LilvState* state, const char* dir) +{ + // Create symlinks to files + for (ZixTreeIter* i = zix_tree_begin(state->abs2rel); + i != zix_tree_end(state->abs2rel); + i = zix_tree_iter_next(i)) { + const PathMap* pm = (const PathMap*)zix_tree_get(i); + + char* path = lilv_path_join(dir, pm->rel); + if (lilv_path_is_child(pm->abs, state->copy_dir) + && strcmp(state->copy_dir, dir)) { + // Link directly to snapshot in the copy directory + char* target = lilv_path_relative_to(pm->abs, dir); + lilv_symlink(target, path); + free(target); + } else if (!lilv_path_is_child(pm->abs, dir)) { + const char* link_dir = state->link_dir ? state->link_dir : dir; + char* pat = lilv_path_join(link_dir, pm->rel); + if (!strcmp(dir, link_dir)) { + // Link directory is save directory, make link at exact path + remove(pat); + lilv_symlink(pm->abs, pat); + } else { + // Make a link in the link directory to external file + char* lpath = lilv_find_free_path(pat, link_exists, pm->abs); + if (!lilv_path_exists(lpath, NULL)) { + lilv_symlink(pm->abs, lpath); + } + + // Make a link in the save directory to the external link + char* target = lilv_path_relative_to(lpath, dir); + lilv_symlink(target, path); + free(target); + free(lpath); + } + free(pat); + } + free(path); + } +} + +LILV_API +int +lilv_state_save(LilvWorld* world, + LV2_URID_Map* map, + LV2_URID_Unmap* unmap, + const LilvState* state, + const char* uri, + const char* dir, + const char* filename) +{ + if (!filename || !dir || lilv_mkdir_p(dir)) { + return 1; + } + + char* abs_dir = absolute_dir(dir); + char* const path = lilv_path_join(abs_dir, filename); + FILE* fd = fopen(path, "w"); + if (!fd) { + LILV_ERRORF("Failed to open %s (%s)\n", path, strerror(errno)); + free(abs_dir); + free(path); + return 4; + } + + // FIXME: make parameter non-const? + if (state->dir && strcmp(state->dir, abs_dir)) { + free(state->dir); + ((LilvState*)state)->dir = lilv_strdup(abs_dir); + } + + // Create symlinks to files if necessary + lilv_state_make_links(state, abs_dir); + + // Write state to Turtle file + SerdNode file = serd_node_new_file_uri(USTR(path), NULL, NULL, false); + SerdEnv* env = NULL; + SerdWriter* writer = ttl_file_writer(fd, &file, &env); + + SerdNode node = uri ? serd_node_from_string(SERD_URI, USTR(uri)) : file; + int ret = lilv_state_write( + world, map, unmap, state, writer, (const char*)node.buf, dir); + + serd_node_free(&file); + serd_writer_free(writer); + serd_env_free(env); + fclose(fd); + + char* const manifest = lilv_path_join(abs_dir, "manifest.ttl"); + add_state_to_manifest(state->plugin_uri, manifest, uri, path); + + free(manifest); + free(abs_dir); + free(path); + return ret; +} + +LILV_API +char* +lilv_state_to_string(LilvWorld* world, + LV2_URID_Map* map, + LV2_URID_Unmap* unmap, + const LilvState* state, + const char* uri, + const char* base_uri) +{ + SerdChunk chunk = { NULL, 0 }; + SerdEnv* env = NULL; + SerdNode base = serd_node_from_string(SERD_URI, USTR(base_uri)); + SerdWriter* writer = ttl_writer(serd_chunk_sink, &chunk, &base, &env); + + lilv_state_write(world, map, unmap, state, writer, uri, NULL); + + serd_writer_free(writer); + serd_env_free(env); + return (char*)serd_chunk_sink_finish(&chunk); +} + +LILV_API +void +lilv_state_free(LilvState* state) +{ + if (state) { + for (uint32_t i = 0; i < state->num_props; ++i) { + free(state->props[i].value); + } + for (uint32_t i = 0; i < state->num_values; ++i) { + free(state->values[i].value); + free(state->values[i].symbol); + } + lilv_node_free(state->plugin_uri); + zix_tree_free(state->abs2rel); + zix_tree_free(state->rel2abs); + free(state->props); + free(state->values); + free(state->label); + free(state->dir); + free(state->file_dir); + free(state->copy_dir); + free(state->link_dir); + free(state); + } +} + +LILV_API +bool +lilv_state_equals(const LilvState* a, const LilvState* b) +{ + if (!lilv_node_equals(a->plugin_uri, b->plugin_uri) + || (a->label && !b->label) + || (b->label && !a->label) + || (a->label && b->label && strcmp(a->label, b->label)) + || a->num_props != b->num_props + || a->num_values != b->num_values) { + return false; + } + + for (uint32_t i = 0; i < a->num_values; ++i) { + PortValue* const av = &a->values[i]; + PortValue* const bv = &b->values[i]; + if (av->size != bv->size || av->type != bv->type + || strcmp(av->symbol, bv->symbol) + || memcmp(av->value, bv->value, av->size)) { + return false; + } + } + + for (uint32_t i = 0; i < a->num_props; ++i) { + Property* const ap = &a->props[i]; + Property* const bp = &b->props[i]; + if (ap->key != bp->key + || ap->type != bp->type + || ap->flags != bp->flags) { + return false; + } else if (ap->type == a->atom_Path) { + if (!lilv_file_equals(lilv_state_rel2abs(a, (char*)ap->value), + lilv_state_rel2abs(b, (char*)bp->value))) { + return false; + } + } else if (ap->size != bp->size + || memcmp(ap->value, bp->value, ap->size)) { + return false; + } + } + + return true; +} + +LILV_API +unsigned +lilv_state_get_num_properties(const LilvState* state) +{ + return state->num_props; +} + +LILV_API +const LilvNode* +lilv_state_get_plugin_uri(const LilvState* state) +{ + return state->plugin_uri; +} + +LILV_API +const char* +lilv_state_get_label(const LilvState* state) +{ + return state->label; +} + +LILV_API +void +lilv_state_set_label(LilvState* state, const char* label) +{ + const size_t len = strlen(label); + state->label = (char*)realloc(state->label, len + 1); + memcpy(state->label, label, len + 1); +} diff --git a/source/libs/lilv/lilv-0.14.4/src/ui.c b/source/libs/lilv/lilv-0.14.4/src/ui.c new file mode 100644 index 000000000..f33c4daa6 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/ui.c @@ -0,0 +1,184 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include + +#include "lilv_internal.h" + +LilvUI* +lilv_ui_new(LilvWorld* world, + LilvNode* uri, + LilvNode* type_uri, + LilvNode* binary_uri) +{ + assert(uri); + assert(type_uri); + assert(binary_uri); + + LilvUI* ui = (LilvUI*)malloc(sizeof(LilvUI)); + ui->world = world; + ui->uri = uri; + ui->binary_uri = binary_uri; + + // FIXME: kludge + char* bundle = lilv_strdup(lilv_node_as_string(ui->binary_uri)); + char* last_slash = strrchr(bundle, '/') + 1; + *last_slash = '\0'; + ui->bundle_uri = lilv_new_uri(world, bundle); + free(bundle); + + ui->classes = lilv_nodes_new(); + zix_tree_insert((ZixTree*)ui->classes, type_uri, NULL); + + return ui; +} + +void +lilv_ui_free(LilvUI* ui) +{ + lilv_node_free(ui->uri); + ui->uri = NULL; + + lilv_node_free(ui->bundle_uri); + ui->bundle_uri = NULL; + + lilv_node_free(ui->binary_uri); + ui->binary_uri = NULL; + + lilv_nodes_free(ui->classes); + + free(ui); +} + +LILV_API +const LilvNode* +lilv_ui_get_uri(const LilvUI* ui) +{ + assert(ui); + assert(ui->uri); + return ui->uri; +} + +LILV_API +unsigned +lilv_ui_is_supported(const LilvUI* ui, + LilvUISupportedFunc supported_func, + const LilvNode* container_type, + const LilvNode** ui_type) +{ + const LilvNodes* classes = lilv_ui_get_classes(ui); + LILV_FOREACH(nodes, c, classes) { + const LilvNode* type = lilv_nodes_get(classes, c); + const unsigned q = supported_func(lilv_node_as_uri(container_type), + lilv_node_as_uri(type)); + if (q) { + if (ui_type) { + *ui_type = type; + } + return q; + } + } + + return 0; +} + +LILV_API +const LilvNodes* +lilv_ui_get_classes(const LilvUI* ui) +{ + return ui->classes; +} + +LILV_API +bool +lilv_ui_is_a(const LilvUI* ui, const LilvNode* ui_class_uri) +{ + return lilv_nodes_contains(ui->classes, ui_class_uri); +} + +LILV_API +const LilvNode* +lilv_ui_get_bundle_uri(const LilvUI* ui) +{ + assert(ui); + assert(ui->bundle_uri); + return ui->bundle_uri; +} + +LILV_API +const LilvNode* +lilv_ui_get_binary_uri(const LilvUI* ui) +{ + assert(ui); + assert(ui->binary_uri); + return ui->binary_uri; +} + +static LilvNodes* +lilv_ui_get_value_internal(const LilvUI* ui, + const SordNode* predicate) +{ + return lilv_world_query_values_internal( + ui->world, ui->uri->node, predicate, NULL); +} + +LILV_API +LilvNodes* +lilv_ui_get_supported_features(const LilvUI* ui) +{ + LilvNodes* optional = lilv_ui_get_optional_features(ui); + LilvNodes* required = lilv_ui_get_required_features(ui); + LilvNodes* result = lilv_nodes_new(); + + LILV_FOREACH(nodes, i, optional) + zix_tree_insert((ZixTree*)result, + lilv_node_duplicate(lilv_nodes_get(optional, i)), + NULL); + LILV_FOREACH(nodes, i, required) + zix_tree_insert((ZixTree*)result, + lilv_node_duplicate(lilv_nodes_get(required, i)), + NULL); + + lilv_nodes_free(optional); + lilv_nodes_free(required); + + return result; +} + +LILV_API +LilvNodes* +lilv_ui_get_required_features(const LilvUI* ui) +{ + return lilv_ui_get_value_internal( + ui, ui->world->uris.lv2_requiredFeature); +} + +LILV_API +LilvNodes* +lilv_ui_get_optional_features(const LilvUI* ui) +{ + return lilv_ui_get_value_internal( + ui, ui->world->uris.lv2_optionalFeature); +} + +LILV_API +LilvNodes* +lilv_ui_get_extension_data(const LilvUI* ui) +{ + return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_extensionData); +} diff --git a/source/libs/lilv/lilv-0.14.4/src/util.c b/source/libs/lilv/lilv-0.14.4/src/util.c new file mode 100644 index 000000000..f21383b9d --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/util.c @@ -0,0 +1,604 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#define _POSIX_C_SOURCE 1 /* for fileno */ +#define _BSD_SOURCE 1 /* for realpath, symlink */ + +#ifdef __APPLE__ +# define _DARWIN_C_SOURCE 1 /* for flock */ +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +# include +# include +# include +# define F_OK 0 +# define mkdir(path, flags) _mkdir(path) +#else +# include +# include +#endif + +#include +#include + +#include "lilv_internal.h" + +#if defined(HAVE_FLOCK) && defined(HAVE_FILENO) +# include +#endif + +#ifndef PAGE_SIZE +# define PAGE_SIZE 4096 +#endif + +char* +lilv_strjoin(const char* first, ...) +{ + size_t len = strlen(first); + char* result = (char*)malloc(len + 1); + + memcpy(result, first, len); + + va_list args; + va_start(args, first); + while (1) { + const char* const s = va_arg(args, const char *); + if (s == NULL) + break; + + const size_t this_len = strlen(s); + if (!(result = (char*)realloc(result, len + this_len + 1))) { + free(result); + LILV_ERROR("realloc() failed\n"); + return NULL; + } + + memcpy(result + len, s, this_len); + len += this_len; + } + va_end(args); + + result[len] = '\0'; + + return result; +} + +char* +lilv_strdup(const char* str) +{ + if (!str) { + return NULL; + } + + const size_t len = strlen(str); + char* dup = (char*)malloc(len + 1); + memcpy(dup, str, len + 1); + return dup; +} + +const char* +lilv_uri_to_path(const char* uri) +{ + return (const char*)serd_uri_to_path((const uint8_t*)uri); +} + +/** Return the current LANG converted to Turtle (i.e. RFC3066) style. + * For example, if LANG is set to "en_CA.utf-8", this returns "en-ca". + */ +char* +lilv_get_lang(void) +{ + const char* const env_lang = getenv("LANG"); + if (!env_lang || !strcmp(env_lang, "") + || !strcmp(env_lang, "C") || !strcmp(env_lang, "POSIX")) { + return NULL; + } + + const size_t env_lang_len = strlen(env_lang); + char* const lang = (char*)malloc(env_lang_len + 1); + for (size_t i = 0; i < env_lang_len + 1; ++i) { + if (env_lang[i] == '_') { + lang[i] = '-'; // Convert _ to - + } else if (env_lang[i] >= 'A' && env_lang[i] <= 'Z') { + lang[i] = env_lang[i] + ('a' - 'A'); // Convert to lowercase + } else if (env_lang[i] >= 'a' && env_lang[i] <= 'z') { + lang[i] = env_lang[i]; // Lowercase letter, copy verbatim + } else if (env_lang[i] >= '0' && env_lang[i] <= '9') { + lang[i] = env_lang[i]; // Digit, copy verbatim + } else if (env_lang[i] == '\0' || env_lang[i] == '.') { + // End, or start of suffix (e.g. en_CA.utf-8), finished + lang[i] = '\0'; + break; + } else { + LILV_ERRORF("Illegal LANG `%s' ignored\n", env_lang); + free(lang); + return NULL; + } + } + + return lang; +} + +/** Append suffix to dst, update dst_len, and return the realloc'd result. */ +static char* +strappend(char* dst, size_t* dst_len, const char* suffix, size_t suffix_len) +{ + dst = (char*)realloc(dst, *dst_len + suffix_len + 1); + memcpy(dst + *dst_len, suffix, suffix_len); + dst[(*dst_len += suffix_len)] = '\0'; + return dst; +} + +/** Append the value of the environment variable var to dst. */ +static char* +append_var(char* dst, size_t* dst_len, const char* var) +{ + // Get value from environment + const char* val = getenv(var); + if (val) { // Value found, append it + return strappend(dst, dst_len, val, strlen(val)); + } else { // No value found, append variable reference as-is + return strappend(strappend(dst, dst_len, "$", 1), + dst_len, var, strlen(var)); + } +} + +/** Expand variables (e.g. POSIX ~ or $FOO, Windows %FOO%) in @a path. */ +char* +lilv_expand(const char* path) +{ +#ifdef _WIN32 + char* out = (char*)malloc(MAX_PATH); + ExpandEnvironmentStrings(path, out, MAX_PATH); +#else + char* out = NULL; + size_t len = 0; + + const char* start = path; // Start of current chunk to copy + for (const char* s = path; *s;) { + if (*s == '$') { + // Hit $ (variable reference, e.g. $VAR_NAME) + for (const char* t = s + 1; ; ++t) { + if (!*t || (!isupper(*t) && !isdigit(*t) && *t != '_')) { + // Append preceding chunk + out = strappend(out, &len, start, s - start); + + // Append variable value (or $VAR_NAME if not found) + char* var = (char*)calloc(t - s, 1); + memcpy(var, s + 1, t - s - 1); + out = append_var(out, &len, var); + free(var); + + // Continue after variable reference + start = s = t; + break; + } + } + } else if (*s == '~' && (*(s + 1) == '/' || !*(s + 1))) { + // Hit ~ before slash or end of string (home directory reference) + out = strappend(out, &len, start, s - start); + out = append_var(out, &len, "HOME"); + start = ++s; + } else { + ++s; + } + } + + if (*start) { + out = strappend(out, &len, start, strlen(start)); + } +#endif + + return out; +} + +static bool +lilv_is_dir_sep(const char c) +{ + return c == '/' || c == LILV_DIR_SEP[0]; +} + +char* +lilv_dirname(const char* path) +{ + const char* s = path + strlen(path) - 1; // Last character + for (; s > path && lilv_is_dir_sep(*s); --s) {} // Last non-slash + for (; s > path && !lilv_is_dir_sep(*s); --s) {} // Last internal slash + for (; s > path && lilv_is_dir_sep(*s); --s) {} // Skip duplicates + + if (s == path) { // Hit beginning + return lilv_is_dir_sep(*s) ? lilv_strdup("/") : lilv_strdup("."); + } else { // Pointing to the last character of the result (inclusive) + char* dirname = (char*)malloc(s - path + 2); + memcpy(dirname, path, s - path + 1); + dirname[s - path + 1] = '\0'; + return dirname; + } +} + +bool +lilv_path_exists(const char* path, void* ignored) +{ + return !access(path, F_OK); +} + +char* +lilv_find_free_path(const char* in_path, + bool (*exists)(const char*, void*), void* user_data) +{ + const size_t in_path_len = strlen(in_path); + char* path = (char*)malloc(in_path_len + 7); + memcpy(path, in_path, in_path_len + 1); + + for (int i = 2; i < 1000000; ++i) { + if (!exists(path, user_data)) { + return path; + } + snprintf(path, in_path_len + 7, "%s.%u", in_path, i); + } + + return NULL; +} + +int +lilv_copy_file(const char* src, const char* dst) +{ + FILE* in = fopen(src, "r"); + if (!in) { + LILV_ERRORF("error opening %s (%s)\n", src, strerror(errno)); + return 1; + } + + FILE* out = fopen(dst, "w"); + if (!out) { + LILV_ERRORF("error opening %s (%s)\n", dst, strerror(errno)); + fclose(in); + return 2; + } + + char* page = (char*)malloc(PAGE_SIZE); + size_t n_read = 0; + while ((n_read = fread(page, 1, PAGE_SIZE, in)) > 0) { + if (fwrite(page, 1, n_read, out) != n_read) { + LILV_ERRORF("write to %s failed (%s)\n", dst, strerror(errno)); + break; + } + } + + const int ret = ferror(in) || ferror(out); + if (ferror(in)) { + LILV_ERRORF("read from %s failed (%s)\n", src, strerror(errno)); + } + + free(page); + fclose(in); + fclose(out); + + return ret; +} + +bool +lilv_path_is_absolute(const char* path) +{ + if (lilv_is_dir_sep(path[0])) { + return true; + } + +#ifdef _WIN32 + if (isalpha(path[0]) && path[1] == ':' && lilv_is_dir_sep(path[2])) { + return true; + } +#endif + + return false; +} + +char* +lilv_path_absolute(const char* path) +{ + if (lilv_path_is_absolute(path)) { + return lilv_strdup(path); + } else { + char* cwd = getcwd(NULL, 0); + char* abs_path = lilv_path_join(cwd, path); + free(cwd); + return abs_path; + } +} + +char* +lilv_path_join(const char* a, const char* b) +{ + if (!a) { + return lilv_strdup(b); + } + + const size_t a_len = strlen(a); + const size_t b_len = b ? strlen(b) : 0; + const size_t pre_len = a_len - (lilv_is_dir_sep(a[a_len - 1]) ? 1 : 0); + char* path = (char*)calloc(1, a_len + b_len + 2); + memcpy(path, a, pre_len); + path[pre_len] = '/'; + if (b) { + memcpy(path + pre_len + 1, + b + (lilv_is_dir_sep(b[0]) ? 1 : 0), + lilv_is_dir_sep(b[0]) ? b_len - 1 : b_len); + } + return path; +} + +static void +lilv_size_mtime(const char* path, off_t* size, time_t* time) +{ + struct stat buf; + if (stat(path, &buf)) { + LILV_ERRORF("stat(%s) (%s)\n", path, strerror(errno)); + } + + if (size) { + *size = buf.st_size; + } + if (time) { + *time = buf.st_mtime; + } +} + +typedef struct { + char* pattern; + off_t orig_size; + time_t time; + char* latest; +} Latest; + +static void +update_latest(const char* path, const char* name, void* data) +{ + Latest* latest = (Latest*)data; + char* entry_path = lilv_path_join(path, name); + unsigned num; + if (sscanf(entry_path, latest->pattern, &num) == 1) { + off_t entry_size = 0; + time_t entry_time = 0; + lilv_size_mtime(entry_path, &entry_size, &entry_time); + if (entry_size == latest->orig_size && entry_time >= latest->time) { + free(latest->latest); + latest->latest = entry_path; + } + } + if (entry_path != latest->latest) { + free(entry_path); + } +} + +/** Return the latest copy of the file at @c path that is newer. */ +char* +lilv_get_latest_copy(const char* path, const char* copy_path) +{ + char* copy_dir = lilv_dirname(copy_path); + Latest latest = { lilv_strjoin(copy_path, "%u", NULL), 0, 0, NULL }; + lilv_size_mtime(path, &latest.orig_size, &latest.time); + + lilv_dir_for_each(copy_dir, &latest, update_latest); + + free(latest.pattern); + free(copy_dir); + return latest.latest; +} + +char* +lilv_realpath(const char* path) +{ +#ifdef _WIN32 + char* out = (char*)malloc(MAX_PATH); + GetFullPathName(path, MAX_PATH, out, NULL); + return out; +#else + char* real_path = realpath(path, NULL); + return real_path ? real_path : lilv_strdup(path); +#endif +} + +int +lilv_symlink(const char* oldpath, const char* newpath) +{ + int ret = 0; + if (strcmp(oldpath, newpath)) { +#ifdef _WIN32 + ret = 0; +#else + ret = symlink(oldpath, newpath); +#endif + } + if (ret) { + LILV_ERRORF("Failed to link %s => %s (%s)\n", + newpath, oldpath, strerror(errno)); + } + return ret; +} + +char* +lilv_path_relative_to(const char* path, const char* base) +{ + const size_t path_len = strlen(path); + const size_t base_len = strlen(base); + const size_t min_len = (path_len < base_len) ? path_len : base_len; + + // Find the last separator common to both paths + size_t last_shared_sep = 0; + for (size_t i = 0; i < min_len && path[i] == base[i]; ++i) { + if (lilv_is_dir_sep(path[i])) { + last_shared_sep = i; + } + } + + if (last_shared_sep == 0) { + // No common components, return path + return lilv_strdup(path); + } + + // Find the number of up references ("..") required + size_t up = 0; + for (size_t i = last_shared_sep + 1; i < base_len; ++i) { + if (lilv_is_dir_sep(base[i])) { + ++up; + } + } + + // Write up references + const size_t suffix_len = path_len - last_shared_sep; + char* rel = (char*)calloc(1, suffix_len + (up * 3) + 1); + for (size_t i = 0; i < up; ++i) { + memcpy(rel + (i * 3), "../", 3); + } + + // Write suffix + memcpy(rel + (up * 3), path + last_shared_sep + 1, suffix_len); + return rel; +} + +bool +lilv_path_is_child(const char* path, const char* dir) +{ + if (path && dir) { + const size_t path_len = strlen(path); + const size_t dir_len = strlen(dir); + return dir && path_len >= dir_len && !strncmp(path, dir, dir_len); + } + return false; +} + +int +lilv_flock(FILE* file, bool lock) +{ +#if defined(HAVE_FLOCK) && defined(HAVE_FILENO) + return flock(fileno(file), lock ? LOCK_EX : LOCK_UN); +#else + return 0; +#endif +} + +void +lilv_dir_for_each(const char* path, + void* data, + void (*f)(const char* path, const char* name, void* data)) +{ +#ifdef _WIN32 + char* pat = lilv_path_join(path, "*"); + WIN32_FIND_DATA fd; + HANDLE fh = FindFirstFile(pat, &fd); + if (fh != INVALID_HANDLE_VALUE) { + do { + f(path, fd.cFileName, data); + } while (FindNextFile(fh, &fd)); + } + free(pat); +#else + DIR* dir = opendir(path); + if (dir) { + struct dirent entry; + struct dirent* result; + while (!readdir_r(dir, &entry, &result) && result) { + f(path, entry.d_name, data); + } + closedir(dir); + } +#endif +} + +int +lilv_mkdir_p(const char* dir_path) +{ + char* path = lilv_strdup(dir_path); + const size_t path_len = strlen(path); + for (size_t i = 1; i <= path_len; ++i) { + if (path[i] == LILV_DIR_SEP[0] || path[i] == '\0') { + path[i] = '\0'; + if (mkdir(path, 0755) && errno != EEXIST) { + LILV_ERRORF("Failed to create %s (%s)\n", + path, strerror(errno)); + free(path); + return 1; + } + path[i] = LILV_DIR_SEP[0]; + } + } + + free(path); + return 0; +} + +static off_t +lilv_file_size(const char* path) +{ + struct stat buf; + if (stat(path, &buf)) { + LILV_ERRORF("stat(%s) (%s)\n", path, strerror(errno)); + return 0; + } + return buf.st_size; +} + +bool +lilv_file_equals(const char* a_path, const char* b_path) +{ + if (!strcmp(a_path, b_path)) { + return true; // Paths match + } + + bool match = false; + FILE* a_file = NULL; + FILE* b_file = NULL; + char* const a_real = lilv_realpath(a_path); + char* const b_real = lilv_realpath(b_path); + if (!a_real || !b_real) { + match = false; // Missing file matches nothing + } else if (!strcmp(a_real, b_real)) { + match = true; // Real paths match + } else if (lilv_file_size(a_path) != lilv_file_size(b_path)) { + match = false; // Sizes differ + } else if (!(a_file = fopen(a_real, "rb"))) { + match = false; // Missing file matches nothing + } else if (!(b_file = fopen(b_real, "rb"))) { + match = false; // Missing file matches nothing + } else { + match = true; + // TODO: Improve performance by reading chunks + while (!feof(a_file) && !feof(b_file)) { + if (fgetc(a_file) != fgetc(b_file)) { + match = false; + break; + } + } + } + + if (a_file) { + fclose(a_file); + } + if (b_file) { + fclose(b_file); + } + free(a_real); + free(b_real); + return match; +} diff --git a/source/libs/lilv/lilv-0.14.4/src/world.c b/source/libs/lilv/lilv-0.14.4/src/world.c new file mode 100644 index 000000000..6d73cdd60 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/world.c @@ -0,0 +1,822 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include + +#include "lv2/presets.h" + +#include "lilv_internal.h" + +LILV_API +LilvWorld* +lilv_world_new(void) +{ + LilvWorld* world = (LilvWorld*)malloc(sizeof(LilvWorld)); + + world->world = sord_world_new(); + if (!world->world) + goto fail; + + world->model = sord_new(world->world, SORD_SPO|SORD_OPS, true); + if (!world->model) + goto fail; + + world->specs = NULL; + world->plugin_classes = lilv_plugin_classes_new(); + world->plugins = lilv_plugins_new(); + world->loaded_files = zix_tree_new( + false, lilv_resource_node_cmp, NULL, (ZixDestroyFunc)lilv_node_free); + +#ifdef LILV_NEW_LV2 + world->libs = zix_tree_new( + false, lilv_header_compare_by_uri, NULL, NULL); +#endif + +#define NS_DCTERMS "http://purl.org/dc/terms/" +#define NS_DYNMAN "http://lv2plug.in/ns/ext/dynmanifest#" + +#define NEW_URI(uri) sord_new_uri(world->world, (const uint8_t*)uri) + + world->uris.dc_replaces = NEW_URI(NS_DCTERMS "replaces"); + world->uris.dman_DynManifest = NEW_URI(NS_DYNMAN "DynManifest"); + world->uris.doap_name = NEW_URI(LILV_NS_DOAP "name"); + world->uris.lv2_Plugin = NEW_URI(LV2_CORE__Plugin); + world->uris.lv2_Specification = NEW_URI(LV2_CORE__Specification); + world->uris.lv2_appliesTo = NEW_URI(LV2_CORE__appliesTo); + world->uris.lv2_binary = NEW_URI(LV2_CORE__binary); + world->uris.lv2_default = NEW_URI(LV2_CORE__default); + world->uris.lv2_designation = NEW_URI(LV2_CORE__designation); + world->uris.lv2_extensionData = NEW_URI(LV2_CORE__extensionData); + world->uris.lv2_index = NEW_URI(LV2_CORE__index); + world->uris.lv2_maximum = NEW_URI(LV2_CORE__maximum); + world->uris.lv2_minimum = NEW_URI(LV2_CORE__minimum); + world->uris.lv2_name = NEW_URI(LV2_CORE__name); + world->uris.lv2_optionalFeature = NEW_URI(LV2_CORE__optionalFeature); + world->uris.lv2_port = NEW_URI(LV2_CORE__port); + world->uris.lv2_portProperty = NEW_URI(LV2_CORE__portProperty); + world->uris.lv2_reportsLatency = NEW_URI(LV2_CORE__reportsLatency); + world->uris.lv2_requiredFeature = NEW_URI(LV2_CORE__requiredFeature); + world->uris.lv2_symbol = NEW_URI(LV2_CORE__symbol); + world->uris.pset_value = NEW_URI(LV2_PRESETS__value); + world->uris.rdf_a = NEW_URI(LILV_NS_RDF "type"); + world->uris.rdf_value = NEW_URI(LILV_NS_RDF "value"); + world->uris.rdfs_Class = NEW_URI(LILV_NS_RDFS "Class"); + world->uris.rdfs_label = NEW_URI(LILV_NS_RDFS "label"); + world->uris.rdfs_seeAlso = NEW_URI(LILV_NS_RDFS "seeAlso"); + world->uris.rdfs_subClassOf = NEW_URI(LILV_NS_RDFS "subClassOf"); + world->uris.xsd_base64Binary = NEW_URI(LILV_NS_XSD "base64Binary"); + world->uris.xsd_boolean = NEW_URI(LILV_NS_XSD "boolean"); + world->uris.xsd_decimal = NEW_URI(LILV_NS_XSD "decimal"); + world->uris.xsd_double = NEW_URI(LILV_NS_XSD "double"); + world->uris.xsd_integer = NEW_URI(LILV_NS_XSD "integer"); + world->uris.null_uri = NULL; + + world->lv2_plugin_class = lilv_plugin_class_new( + world, NULL, world->uris.lv2_Plugin, "Plugin"); + assert(world->lv2_plugin_class); + + world->n_read_files = 0; + world->opt.filter_language = true; + world->opt.dyn_manifest = true; + + return world; + +fail: + /* keep on rockin' in the */ free(world); + return NULL; +} + +LILV_API +void +lilv_world_free(LilvWorld* world) +{ + if (!world) { + return; + } + + lilv_plugin_class_free(world->lv2_plugin_class); + world->lv2_plugin_class = NULL; + + for (SordNode** n = (SordNode**)&world->uris; *n; ++n) { + sord_node_free(world->world, *n); + } + + for (LilvSpec* spec = world->specs; spec;) { + LilvSpec* next = spec->next; + sord_node_free(world->world, spec->spec); + sord_node_free(world->world, spec->bundle); + lilv_nodes_free(spec->data_uris); + free(spec); + spec = next; + } + world->specs = NULL; + + LILV_FOREACH(plugins, i, world->plugins) { + const LilvPlugin* p = lilv_plugins_get(world->plugins, i); + lilv_plugin_free((LilvPlugin*)p); + } + zix_tree_free((ZixTree*)world->plugins); + world->plugins = NULL; + + zix_tree_free((ZixTree*)world->loaded_files); + world->loaded_files = NULL; + +#ifdef LILV_NEW_LV2 + zix_tree_free((ZixTree*)world->libs); + world->libs = NULL; +#endif + + zix_tree_free((ZixTree*)world->plugin_classes); + world->plugin_classes = NULL; + + sord_free(world->model); + world->model = NULL; + + sord_world_free(world->world); + world->world = NULL; + + free(world); +} + +LILV_API +void +lilv_world_set_option(LilvWorld* world, + const char* option, + const LilvNode* value) +{ + if (!strcmp(option, LILV_OPTION_DYN_MANIFEST)) { + if (lilv_node_is_bool(value)) { + world->opt.dyn_manifest = lilv_node_as_bool(value); + return; + } + } else if (!strcmp(option, LILV_OPTION_FILTER_LANG)) { + if (lilv_node_is_bool(value)) { + world->opt.filter_language = lilv_node_as_bool(value); + return; + } + } + LILV_WARNF("Unrecognized or invalid option `%s'\n", option); +} + +LILV_API +LilvNodes* +lilv_world_find_nodes(LilvWorld* world, + const LilvNode* subject, + const LilvNode* predicate, + const LilvNode* object) +{ + if (subject && !lilv_node_is_uri(subject) && !lilv_node_is_blank(subject)) { + LILV_ERRORF("Subject `%s' is not a resource\n", + sord_node_get_string(subject->node)); + return NULL; + } + if (!lilv_node_is_uri(predicate)) { + LILV_ERRORF("Predicate `%s' is not a URI\n", + sord_node_get_string(predicate->node)); + return NULL; + } + if (!subject && !object) { + LILV_ERROR("Both subject and object are NULL\n"); + return NULL; + } + + SordNode* const subject_node = subject + ? sord_node_copy(subject->node) + : NULL; + + SordNode* const object_node = object + ? sord_node_copy(object->node) + : NULL; + + LilvNodes* ret = lilv_world_query_values_internal( + world, subject_node, predicate->node, object_node); + + sord_node_free(world->world, subject_node); + sord_node_free(world->world, object_node); + return ret; +} + +SordIter* +lilv_world_query_internal(LilvWorld* world, + const SordNode* subject, + const SordNode* predicate, + const SordNode* object) +{ + return sord_search(world->model, subject, predicate, object, NULL); +} + +LilvNodes* +lilv_world_query_values_internal(LilvWorld* world, + const SordNode* subject, + const SordNode* predicate, + const SordNode* object) +{ + return lilv_nodes_from_stream_objects( + world, + lilv_world_query_internal(world, subject, predicate, object), + (object == NULL) ? SORD_OBJECT : SORD_SUBJECT); +} + +static SerdNode +lilv_new_uri_relative_to_base(const uint8_t* uri_str, + const uint8_t* base_uri_str) +{ + SerdURI base_uri; + if (serd_uri_parse(base_uri_str, &base_uri)) { + return SERD_NODE_NULL; + } + + SerdURI ignored; + return serd_node_new_uri_from_string(uri_str, &base_uri, &ignored); +} + +const uint8_t* +lilv_world_blank_node_prefix(LilvWorld* world) +{ + static char str[32]; + snprintf(str, sizeof(str), "%d", world->n_read_files++); + return (const uint8_t*)str; +} + +/** Comparator for sequences (e.g. world->plugins). */ +int +lilv_header_compare_by_uri(const void* a, const void* b, void* user_data) +{ + const struct LilvHeader* const header_a = (const struct LilvHeader*)a; + const struct LilvHeader* const header_b = (const struct LilvHeader*)b; + return strcmp(lilv_node_as_uri(header_a->uri), + lilv_node_as_uri(header_b->uri)); +} + +/** Get an element of a collection of any object with an LilvHeader by URI. */ +struct LilvHeader* +lilv_collection_get_by_uri(const ZixTree* const_seq, + const LilvNode* uri) +{ + if (!lilv_node_is_uri(uri)) { + return NULL; + } + + ZixTree* seq = (ZixTree*)const_seq; + struct LilvHeader key = { NULL, (LilvNode*)uri }; + + ZixTreeIter* i = NULL; + ZixStatus st = zix_tree_find(seq, &key, &i); + if (!st) { + return (struct LilvHeader*)zix_tree_get(i); + } + + return NULL; +} + +static void +lilv_world_add_spec(LilvWorld* world, + const SordNode* specification_node, + const SordNode* bundle_node) +{ + LilvSpec* spec = (LilvSpec*)malloc(sizeof(LilvSpec)); + spec->spec = sord_node_copy(specification_node); + spec->bundle = sord_node_copy(bundle_node); + spec->data_uris = lilv_nodes_new(); + + // Add all plugin data files (rdfs:seeAlso) + SordIter* files = sord_search( + world->model, + specification_node, + world->uris.rdfs_seeAlso, + NULL, + NULL); + FOREACH_MATCH(files) { + const SordNode* file_node = sord_iter_get_node(files, SORD_OBJECT); + zix_tree_insert((ZixTree*)spec->data_uris, + lilv_node_new_from_node(world, file_node), + NULL); + } + sord_iter_free(files); + + // Add specification to world specification list + spec->next = world->specs; + world->specs = spec; +} + +static void +lilv_world_add_plugin(LilvWorld* world, + const SordNode* plugin_node, + SerdNode* manifest_uri, + void* dynmanifest, + const SordNode* bundle_node) +{ + LilvNode* plugin_uri = lilv_node_new_from_node(world, plugin_node); + + const LilvPlugin* last = lilv_plugins_get_by_uri(world->plugins, + plugin_uri); + if (last) { + LILV_ERRORF("Duplicate plugin <%s>\n", lilv_node_as_uri(plugin_uri)); + LILV_ERRORF("... found in %s\n", lilv_node_as_string( + lilv_plugin_get_bundle_uri(last))); + LILV_ERRORF("... and %s\n", sord_node_get_string(bundle_node)); + lilv_node_free(plugin_uri); + return; + } + + // Create LilvPlugin + LilvNode* bundle_uri = lilv_node_new_from_node(world, bundle_node); + LilvPlugin* plugin = lilv_plugin_new(world, plugin_uri, bundle_uri); + + // Add manifest as plugin data file (as if it were rdfs:seeAlso) + zix_tree_insert((ZixTree*)plugin->data_uris, + lilv_new_uri(world, (const char*)manifest_uri->buf), + NULL); + +#ifdef LILV_DYN_MANIFEST + // Set dynamic manifest library URI, if applicable + if (dynmanifest) { + plugin->dynmanifest = (LilvDynManifest*)dynmanifest; + ++((LilvDynManifest*)dynmanifest)->refs; + } +#endif + + // Add all plugin data files (rdfs:seeAlso) + SordIter* files = sord_search( + world->model, + plugin_node, + world->uris.rdfs_seeAlso, + NULL, + NULL); + FOREACH_MATCH(files) { + const SordNode* file_node = sord_iter_get_node(files, SORD_OBJECT); + zix_tree_insert((ZixTree*)plugin->data_uris, + lilv_node_new_from_node(world, file_node), + NULL); + } + sord_iter_free(files); + + // Add plugin to world plugin sequence + zix_tree_insert((ZixTree*)world->plugins, plugin, NULL); +} + +static void +lilv_world_load_dyn_manifest(LilvWorld* world, + SordNode* bundle_node, + SerdNode manifest_uri) +{ +#ifdef LILV_DYN_MANIFEST + if (!world->opt.dyn_manifest) { + return; + } + + typedef void* LV2_Dyn_Manifest_Handle; + LV2_Dyn_Manifest_Handle handle = NULL; + + // ?dman a dynman:DynManifest + SordIter* dmanifests = sord_search( + world->model, + NULL, + world->uris.rdf_a, + world->uris.dman_DynManifest, + bundle_node); + FOREACH_MATCH(dmanifests) { + const SordNode* dmanifest = sord_iter_get_node(dmanifests, SORD_SUBJECT); + + // ?dman lv2:binary ?binary + SordIter* binaries = sord_search( + world->model, + dmanifest, + world->uris.lv2_binary, + NULL, + bundle_node); + if (sord_iter_end(binaries)) { + sord_iter_free(binaries); + LILV_ERRORF("Dynamic manifest in <%s> has no binaries, ignored\n", + sord_node_get_string(bundle_node)); + continue; + } + + // Get binary path + const SordNode* binary = sord_iter_get_node(binaries, SORD_OBJECT); + const uint8_t* lib_uri = sord_node_get_string(binary); + const char* lib_path = lilv_uri_to_path((const char*)lib_uri); + if (!lib_path) { + LILV_ERROR("No dynamic manifest library path\n"); + sord_iter_free(binaries); + continue; + } + + // Open library + void* lib = dlopen(lib_path, RTLD_LAZY); + if (!lib) { + LILV_ERRORF("Failed to open dynmanifest library `%s'\n", lib_path); + sord_iter_free(binaries); + continue; + } + + // Open dynamic manifest + typedef int (*OpenFunc)(LV2_Dyn_Manifest_Handle*, + const LV2_Feature *const *); + OpenFunc dmopen = (OpenFunc)lilv_dlfunc(lib, "lv2_dyn_manifest_open"); + if (!dmopen || dmopen(&handle, &dman_features)) { + LILV_ERRORF("No `lv2_dyn_manifest_open' in `%s'\n", lib_path); + sord_iter_free(binaries); + dlclose(lib); + continue; + } + + // Get subjects (the data that would be in manifest.ttl) + typedef int (*GetSubjectsFunc)(LV2_Dyn_Manifest_Handle, FILE*); + GetSubjectsFunc get_subjects_func = (GetSubjectsFunc)lilv_dlfunc( + lib, "lv2_dyn_manifest_get_subjects"); + if (!get_subjects_func) { + LILV_ERRORF("No `lv2_dyn_manifest_get_subjects' in `%s'\n", + lib_path); + sord_iter_free(binaries); + dlclose(lib); + continue; + } + + LilvDynManifest* desc = malloc(sizeof(LilvDynManifest)); + desc->bundle = lilv_node_new_from_node(world, bundle_node); + desc->lib = lib; + desc->handle = handle; + desc->refs = 0; + + // Generate data file + FILE* fd = tmpfile(); + get_subjects_func(handle, fd); + rewind(fd); + + // Parse generated data file + const SerdNode* base = sord_node_to_serd_node(dmanifest); + SerdEnv* env = serd_env_new(base); + SerdReader* reader = sord_new_reader( + world->model, env, SERD_TURTLE, sord_node_copy(dmanifest)); + serd_reader_add_blank_prefix(reader, + lilv_world_blank_node_prefix(world)); + serd_reader_read_file_handle(reader, fd, + (const uint8_t*)"(dyn-manifest)"); + serd_reader_free(reader); + serd_env_free(env); + + // Close (and automatically delete) temporary data file + fclose(fd); + + // ?plugin a lv2:Plugin + SordIter* plug_results = sord_search( + world->model, + NULL, + world->uris.rdf_a, + world->uris.lv2_Plugin, + dmanifest); + FOREACH_MATCH(plug_results) { + const SordNode* plugin_node = sord_iter_get_node(plug_results, SORD_SUBJECT); + lilv_world_add_plugin(world, plugin_node, + &manifest_uri, desc, bundle_node); + } + sord_iter_free(plug_results); + + sord_iter_free(binaries); + } + sord_iter_free(dmanifests); +#endif // LILV_DYN_MANIFEST +} + +LILV_API +void +lilv_world_load_bundle(LilvWorld* world, LilvNode* bundle_uri) +{ + if (!lilv_node_is_uri(bundle_uri)) { + LILV_ERRORF("Bundle URI `%s' is not a URI\n", + sord_node_get_string(bundle_uri->node)); + return; + } + + SordNode* bundle_node = bundle_uri->node; + + SerdNode manifest_uri = lilv_new_uri_relative_to_base( + (const uint8_t*)"manifest.ttl", + (const uint8_t*)sord_node_get_string(bundle_node)); + + SerdEnv* env = serd_env_new(&manifest_uri); + SerdReader* reader = sord_new_reader(world->model, env, SERD_TURTLE, + bundle_node); + serd_reader_add_blank_prefix(reader, lilv_world_blank_node_prefix(world)); + + SerdStatus st = serd_reader_read_file(reader, manifest_uri.buf); + serd_reader_free(reader); + serd_env_free(env); + if (st) { + LILV_ERRORF("Error reading %s\n", manifest_uri.buf); + return; + } + + // ?plugin a lv2:Plugin + SordIter* plug_results = sord_search( + world->model, + NULL, + world->uris.rdf_a, + world->uris.lv2_Plugin, + bundle_node); + FOREACH_MATCH(plug_results) { + const SordNode* plugin_node = sord_iter_get_node(plug_results, SORD_SUBJECT); + lilv_world_add_plugin(world, plugin_node, + &manifest_uri, NULL, bundle_node); + } + sord_iter_free(plug_results); + + lilv_world_load_dyn_manifest(world, bundle_node, manifest_uri); + + // ?specification a lv2:Specification + SordIter* spec_results = sord_search( + world->model, + NULL, + world->uris.rdf_a, + world->uris.lv2_Specification, + bundle_node); + FOREACH_MATCH(spec_results) { + const SordNode* spec = sord_iter_get_node(spec_results, SORD_SUBJECT); + lilv_world_add_spec(world, spec, bundle_node); + } + sord_iter_free(spec_results); + + serd_node_free(&manifest_uri); +} + +static void +load_dir_entry(const char* dir, const char* name, void* data) +{ + LilvWorld* world = (LilvWorld*)data; + if (!strcmp(name, ".") || !strcmp(name, "..")) + return; + + const char* scheme = (dir[0] == '/') ? "file://" : "file:///"; + char* uri = lilv_strjoin(scheme, dir, "/", name, "/", NULL); + LilvNode* uri_val = lilv_new_uri(world, uri); + + lilv_world_load_bundle(world, uri_val); + lilv_node_free(uri_val); + free(uri); +} + +/** Load all bundles in the directory at @a dir_path. */ +static void +lilv_world_load_directory(LilvWorld* world, const char* dir_path) +{ + char* path = lilv_expand(dir_path); + if (!path) { + LILV_WARNF("Empty path `%s'\n", path); + return; + } + + lilv_dir_for_each(path, world, load_dir_entry); + free(path); +} + +static bool +is_path_sep(char c) +{ + return c == LILV_PATH_SEP[0]; +} + +static const char* +first_path_sep(const char* path) +{ + for (const char* p = path; *p != '\0'; ++p) { + if (is_path_sep(*p)) { + return p; + } + } + return NULL; +} + +/** Load all bundles found in @a lv2_path. + * @param lv2_path A colon-delimited list of directories. These directories + * should contain LV2 bundle directories (ie the search path is a list of + * parent directories of bundles, not a list of bundle directories). + */ +static void +lilv_world_load_path(LilvWorld* world, + const char* lv2_path) +{ + while (lv2_path[0] != '\0') { + const char* const sep = first_path_sep(lv2_path); + if (sep) { + const size_t dir_len = sep - lv2_path; + char* const dir = (char*)malloc(dir_len + 1); + memcpy(dir, lv2_path, dir_len); + dir[dir_len] = '\0'; + lilv_world_load_directory(world, dir); + free(dir); + lv2_path += dir_len + 1; + } else { + lilv_world_load_directory(world, lv2_path); + lv2_path = "\0"; + } + } +} + +static void +lilv_world_load_specifications(LilvWorld* world) +{ + for (LilvSpec* spec = world->specs; spec; spec = spec->next) { + LILV_FOREACH(nodes, f, spec->data_uris) { + LilvNode* file = (LilvNode*)lilv_collection_get(spec->data_uris, f); + + const SerdNode* node = sord_node_to_serd_node(file->node); + SerdEnv* env = serd_env_new(node); + SerdReader* reader = sord_new_reader(world->model, env, + SERD_TURTLE, NULL); + serd_reader_add_blank_prefix(reader, + lilv_world_blank_node_prefix(world)); + serd_reader_read_file(reader, node->buf); + serd_reader_free(reader); + serd_env_free(env); + } + } +} + +static void +lilv_world_load_plugin_classes(LilvWorld* world) +{ + /* FIXME: This loads all classes, not just lv2:Plugin subclasses. + However, if the host gets all the classes via lilv_plugin_class_get_children + starting with lv2:Plugin as the root (which is e.g. how a host would build + a menu), they won't be seen anyway... + */ + + SordIter* classes = sord_search( + world->model, + NULL, + world->uris.rdf_a, + world->uris.rdfs_Class, + NULL); + FOREACH_MATCH(classes) { + const SordNode* class_node = sord_iter_get_node(classes, SORD_SUBJECT); + + // Get parents (superclasses) + SordIter* parents = sord_search( + world->model, + class_node, + world->uris.rdfs_subClassOf, + NULL, + NULL); + + if (sord_iter_end(parents)) { + sord_iter_free(parents); + continue; + } + + const SordNode* parent_node = sord_iter_get_node(parents, SORD_OBJECT); + sord_iter_free(parents); + + if (!sord_node_get_type(parent_node) == SORD_URI) { + // Class parent is not a resource, ignore (e.g. owl restriction) + continue; + } + + // Get labels + SordIter* labels = sord_search( + world->model, + class_node, + world->uris.rdfs_label, + NULL, + NULL); + + if (sord_iter_end(labels)) { + sord_iter_free(labels); + continue; + } + + const SordNode* label_node = sord_iter_get_node(labels, SORD_OBJECT); + const uint8_t* label = sord_node_get_string(label_node); + sord_iter_free(labels); + + LilvPluginClass* pclass = lilv_plugin_class_new( + world, parent_node, class_node, (const char*)label); + if (pclass) { + zix_tree_insert((ZixTree*)world->plugin_classes, pclass, NULL); + } + } + sord_iter_free(classes); +} + +LILV_API +void +lilv_world_load_all(LilvWorld* world) +{ + const char* lv2_path = getenv("LV2_PATH"); + if (!lv2_path) + lv2_path = LILV_DEFAULT_LV2_PATH; + + // Discover bundles and read all manifest files into model + lilv_world_load_path(world, lv2_path); + + LILV_FOREACH(plugins, p, world->plugins) { + const LilvPlugin* plugin = (const LilvPlugin*)lilv_collection_get( + (ZixTree*)world->plugins, p); + + // ?new dc:replaces plugin + SordIter* replacement = sord_search( + world->model, + NULL, + world->uris.dc_replaces, + lilv_node_as_node(lilv_plugin_get_uri(plugin)), + NULL); + if (!sord_iter_end(replacement)) { + /* TODO: Check if replacement is actually a known plugin, + though this is expensive... + */ + ((LilvPlugin*)plugin)->replaced = true; + } + sord_iter_free(replacement); + } + + // Query out things to cache + lilv_world_load_specifications(world); + lilv_world_load_plugin_classes(world); +} + +LILV_API +int +lilv_world_load_resource(LilvWorld* world, + const LilvNode* resource) +{ + if (!lilv_node_is_uri(resource) && !lilv_node_is_blank(resource)) { + LILV_ERRORF("Node `%s' is not a resource\n", + sord_node_get_string(resource->node)); + return -1; + } + + int n_read = 0; + SordIter* files = sord_search(world->model, + resource->node, + world->uris.rdfs_seeAlso, + NULL, NULL); + FOREACH_MATCH(files) { + const SordNode* file = sord_iter_get_node(files, SORD_OBJECT); + const uint8_t* str = sord_node_get_string(file); + LilvNode* file_node = lilv_node_new_from_node(world, file); + ZixTreeIter* iter; + if (zix_tree_find((ZixTree*)world->loaded_files, file_node, &iter)) { + if (sord_node_get_type(file) == SORD_URI) { + const SerdNode* base = sord_node_to_serd_node(file); + SerdEnv* env = serd_env_new(base); + SerdReader* reader = sord_new_reader( + world->model, env, SERD_TURTLE, (SordNode*)file); + serd_reader_add_blank_prefix( + reader, lilv_world_blank_node_prefix(world)); + if (!serd_reader_read_file(reader, str)) { + ++n_read; + zix_tree_insert( + (ZixTree*)world->loaded_files, file_node, NULL); + file_node = NULL; // prevent deletion... + } else { + LILV_ERRORF("Error loading resource `%s'\n", str); + } + serd_reader_free(reader); + serd_env_free(env); + } else { + LILV_ERRORF("rdfs:seeAlso node `%s' is not a URI\n", str); + } + } + lilv_node_free(file_node); // ...here + } + sord_iter_free(files); + + return n_read; +} + +LILV_API +const LilvPluginClass* +lilv_world_get_plugin_class(const LilvWorld* world) +{ + return world->lv2_plugin_class; +} + +LILV_API +const LilvPluginClasses* +lilv_world_get_plugin_classes(const LilvWorld* world) +{ + return world->plugin_classes; +} + +LILV_API +const LilvPlugins* +lilv_world_get_all_plugins(const LilvWorld* world) +{ + return world->plugins; +} diff --git a/source/libs/lilv/lilv-0.14.4/src/zix/common.h b/source/libs/lilv/lilv-0.14.4/src/zix/common.h new file mode 100644 index 000000000..f126cd13a --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/zix/common.h @@ -0,0 +1,88 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef ZIX_COMMON_H +#define ZIX_COMMON_H + +/** + @addtogroup zix + @{ +*/ + +/** @cond */ +#ifdef ZIX_SHARED +# ifdef _WIN32 +# define ZIX_LIB_IMPORT __declspec(dllimport) +# define ZIX_LIB_EXPORT __declspec(dllexport) +# else +# define ZIX_LIB_IMPORT __attribute__((visibility("default"))) +# define ZIX_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef ZIX_INTERNAL +# define ZIX_API ZIX_LIB_EXPORT +# else +# define ZIX_API ZIX_LIB_IMPORT +# endif +# define ZIX_PRIVATE static +#elif defined(ZIX_INLINE) +# define ZIX_API static inline +# define ZIX_PRIVATE static inline +#else +# define ZIX_API +# define ZIX_PRIVATE static +#endif +/** @endcond */ + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +typedef enum { + ZIX_STATUS_SUCCESS, + ZIX_STATUS_ERROR, + ZIX_STATUS_NO_MEM, + ZIX_STATUS_NOT_FOUND, + ZIX_STATUS_EXISTS, + ZIX_STATUS_BAD_ARG, + ZIX_STATUS_BAD_PERMS, +} ZixStatus; + +/** + Function for comparing two elements. +*/ +typedef int (*ZixComparator)(const void* a, const void* b, void* user_data); + +/** + Function for testing equality of two elements. +*/ +typedef bool (*ZixEqualFunc)(const void* a, const void* b); + +/** + Function to destroy an element. +*/ +typedef void (*ZixDestroyFunc)(void* ptr); + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* ZIX_COMMON_H */ diff --git a/source/libs/lilv/lilv-0.14.4/src/zix/tree.c b/source/libs/lilv/lilv-0.14.4/src/zix/tree.c new file mode 100644 index 000000000..844adb97e --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/zix/tree.c @@ -0,0 +1,716 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include +#include + +#include "zix/common.h" +#include "zix/tree.h" + +typedef struct ZixTreeNodeImpl ZixTreeNode; + +struct ZixTreeImpl { + ZixTreeNode* root; + ZixDestroyFunc destroy; + ZixComparator cmp; + void* cmp_data; + size_t size; + bool allow_duplicates; +}; + +struct ZixTreeNodeImpl { + void* data; + struct ZixTreeNodeImpl* left; + struct ZixTreeNodeImpl* right; + struct ZixTreeNodeImpl* parent; + int_fast8_t balance; +}; + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +// Uncomment these for debugging features +// #define ZIX_TREE_DUMP 1 +// #define ZIX_TREE_VERIFY 1 +// #define ZIX_TREE_HYPER_VERIFY 1 + +#if defined(ZIX_TREE_VERIFY) || defined(ZIX_TREE_HYPER_VERIFY) +# include "tree_debug.h" +# define ASSERT_BALANCE(n) assert(verify_balance(n)) +#else +# define ASSERT_BALANCE(n) +#endif + +#ifdef ZIX_TREE_DUMP +# include "tree_debug.h" +# define DUMP(t) zix_tree_print(t->root, 0) +# define DEBUG_PRINTF(fmt, ...) printf(fmt, __VA_ARGS__) +#else +# define DUMP(t) +# define DEBUG_PRINTF(fmt, ...) +#endif + +ZIX_API ZixTree* +zix_tree_new(bool allow_duplicates, + ZixComparator cmp, + void* cmp_data, + ZixDestroyFunc destroy) +{ + ZixTree* t = (ZixTree*)malloc(sizeof(ZixTree)); + t->root = NULL; + t->destroy = destroy; + t->cmp = cmp; + t->cmp_data = cmp_data; + t->size = 0; + t->allow_duplicates = allow_duplicates; + return t; +} + +ZIX_PRIVATE void +zix_tree_free_rec(ZixTree* t, ZixTreeNode* n) +{ + if (n) { + zix_tree_free_rec(t, n->left); + zix_tree_free_rec(t, n->right); + if (t->destroy) { + t->destroy(n->data); + } + free(n); + } +} + +ZIX_API void +zix_tree_free(ZixTree* t) +{ + if (t) { + zix_tree_free_rec(t, t->root); + free(t); + } +} + +ZIX_API size_t +zix_tree_size(const ZixTree* t) +{ + return t->size; +} + +ZIX_PRIVATE void +rotate(ZixTreeNode* p, ZixTreeNode* q) +{ + assert(q->parent == p); + assert(p->left == q || p->right == q); + + q->parent = p->parent; + if (q->parent) { + if (q->parent->left == p) { + q->parent->left = q; + } else { + q->parent->right = q; + } + } + + if (p->right == q) { + // Rotate left + p->right = q->left; + q->left = p; + if (p->right) { + p->right->parent = p; + } + } else { + // Rotate right + assert(p->left == q); + p->left = q->right; + q->right = p; + if (p->left) { + p->left->parent = p; + } + } + + p->parent = q; +} + +/** + * Rotate left about @a p. + * + * p q + * / \ / \ + * A q => p C + * / \ / \ + * B C A B + */ +ZIX_PRIVATE ZixTreeNode* +rotate_left(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->right; + *height_change = (q->balance == 0) ? 0 : -1; + + DEBUG_PRINTF("LL %ld\n", (intptr_t)p->data); + + assert(p->balance == 2); + assert(q->balance == 0 || q->balance == 1); + + rotate(p, q); + + // p->balance -= 1 + MAX(0, q->balance); + // q->balance -= 1 - MIN(0, p->balance); + --q->balance; + p->balance = -(q->balance); + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + return q; +} + +/** + * Rotate right about @a p. + * + * p q + * / \ / \ + * q C => A p + * / \ / \ + * A B B C + * + */ +ZIX_PRIVATE ZixTreeNode* +rotate_right(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->left; + *height_change = (q->balance == 0) ? 0 : -1; + + DEBUG_PRINTF("RR %ld\n", (intptr_t)p->data); + + assert(p->balance == -2); + assert(q->balance == 0 || q->balance == -1); + + rotate(p, q); + + // p->balance += 1 - MIN(0, q->balance); + // q->balance += 1 + MAX(0, p->balance); + ++q->balance; + p->balance = -(q->balance); + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + return q; +} + +/** + * Rotate left about @a p->left then right about @a p. + * + * p r + * / \ / \ + * q D => q p + * / \ / \ / \ + * A r A B C D + * / \ + * B C + * + */ +ZIX_PRIVATE ZixTreeNode* +rotate_left_right(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->left; + ZixTreeNode* const r = q->right; + + assert(p->balance == -2); + assert(q->balance == 1); + assert(r->balance == -1 || r->balance == 0 || r->balance == 1); + + DEBUG_PRINTF("LR %ld P: %2d Q: %2d R: %2d\n", + (intptr_t)p->data, p->balance, q->balance, r->balance); + + rotate(q, r); + rotate(p, r); + + q->balance -= 1 + MAX(0, r->balance); + p->balance += 1 - MIN(MIN(0, r->balance) - 1, r->balance + q->balance); + // r->balance += MAX(0, p->balance) + MIN(0, q->balance); + + // p->balance = (p->left && p->right) ? -MIN(r->balance, 0) : 0; + // q->balance = - MAX(r->balance, 0); + r->balance = 0; + + *height_change = -1; + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + ASSERT_BALANCE(r); + return r; +} + +/** + * Rotate right about @a p->right then right about @a p. + * + * p r + * / \ / \ + * A q => p q + * / \ / \ / \ + * r D A B C D + * / \ + * B C + * + */ +ZIX_PRIVATE ZixTreeNode* +rotate_right_left(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->right; + ZixTreeNode* const r = q->left; + + assert(p->balance == 2); + assert(q->balance == -1); + assert(r->balance == -1 || r->balance == 0 || r->balance == 1); + + DEBUG_PRINTF("RL %ld P: %2d Q: %2d R: %2d\n", + (intptr_t)p->data, p->balance, q->balance, r->balance); + + rotate(q, r); + rotate(p, r); + + q->balance += 1 - MIN(0, r->balance); + p->balance -= 1 + MAX(MAX(0, r->balance) + 1, r->balance + q->balance); + // r->balance += MAX(0, q->balance) + MIN(0, p->balance); + + // p->balance = (p->left && p->right) ? -MAX(r->balance, 0) : 0; + // q->balance = - MIN(r->balance, 0); + r->balance = 0; + // assert(r->balance == 0); + + *height_change = -1; + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + ASSERT_BALANCE(r); + return r; +} + +ZIX_PRIVATE ZixTreeNode* +zix_tree_rebalance(ZixTree* t, ZixTreeNode* node, int* height_change) +{ +#ifdef ZIX_TREE_HYPER_VERIFY + const size_t old_height = height(node); +#endif + DEBUG_PRINTF("REBALANCE %ld (%d)\n", (intptr_t)node->data, node->balance); + *height_change = 0; + const bool is_root = !node->parent; + assert((is_root && t->root == node) || (!is_root && t->root != node)); + ZixTreeNode* replacement = node; + if (node->balance == -2) { + assert(node->left); + if (node->left->balance == 1) { + replacement = rotate_left_right(node, height_change); + } else { + replacement = rotate_right(node, height_change); + } + } else if (node->balance == 2) { + assert(node->right); + if (node->right->balance == -1) { + replacement = rotate_right_left(node, height_change); + } else { + replacement = rotate_left(node, height_change); + } + } + if (is_root) { + assert(!replacement->parent); + t->root = replacement; + } + DUMP(t); +#ifdef ZIX_TREE_HYPER_VERIFY + assert(old_height + *height_change == height(replacement)); +#endif + return replacement; +} + +ZIX_API ZixStatus +zix_tree_insert(ZixTree* t, void* e, ZixTreeIter** ti) +{ + DEBUG_PRINTF("**** INSERT %ld\n", (intptr_t)e); + int cmp = 0; + ZixTreeNode* n = t->root; + ZixTreeNode* p = NULL; + + // Find the parent p of e + while (n) { + p = n; + cmp = t->cmp(e, n->data, t->cmp_data); + if (cmp < 0) { + n = n->left; + } else if (cmp > 0) { + n = n->right; + } else if (t->allow_duplicates) { + n = n->right; + } else { + if (ti) { + *ti = n; + } + DEBUG_PRINTF("%ld EXISTS!\n", (intptr_t)e); + return ZIX_STATUS_EXISTS; + } + } + + // Allocate a new node n + if (!(n = (ZixTreeNode*)malloc(sizeof(ZixTreeNode)))) { + return ZIX_STATUS_NO_MEM; + } + memset(n, '\0', sizeof(ZixTreeNode)); + n->data = e; + n->balance = 0; + if (ti) { + *ti = n; + } + + bool p_height_increased = false; + + // Make p the parent of n + n->parent = p; + if (!p) { + t->root = n; + } else { + if (cmp < 0) { + assert(!p->left); + assert(p->balance == 0 || p->balance == 1); + p->left = n; + --p->balance; + p_height_increased = !p->right; + } else { + assert(!p->right); + assert(p->balance == 0 || p->balance == -1); + p->right = n; + ++p->balance; + p_height_increased = !p->left; + } + } + + DUMP(t); + + // Rebalance if necessary (at most 1 rotation) + assert(!p || p->balance == -1 || p->balance == 0 || p->balance == 1); + if (p && p_height_increased) { + int height_change = 0; + for (ZixTreeNode* i = p; i && i->parent; i = i->parent) { + if (i == i->parent->left) { + if (--i->parent->balance == -2) { + zix_tree_rebalance(t, i->parent, &height_change); + break; + } + } else { + assert(i == i->parent->right); + if (++i->parent->balance == 2) { + zix_tree_rebalance(t, i->parent, &height_change); + break; + } + } + + if (i->parent->balance == 0) { + break; + } + } + } + + DUMP(t); + + ++t->size; + +#ifdef ZIX_TREE_VERIFY + if (!verify(t, t->root)) { + return ZIX_STATUS_ERROR; + } +#endif + + return ZIX_STATUS_SUCCESS; +} + +ZIX_API ZixStatus +zix_tree_remove(ZixTree* t, ZixTreeIter* ti) +{ + ZixTreeNode* const n = ti; + ZixTreeNode** pp = NULL; // parent pointer + ZixTreeNode* to_balance = n->parent; // lowest node to balance + int8_t d_balance = 0; // delta(balance) for n->parent + + DEBUG_PRINTF("*** REMOVE %ld\n", (intptr_t)n->data); + + if ((n == t->root) && !n->left && !n->right) { + t->root = NULL; + if (t->destroy) { + t->destroy(n->data); + } + free(n); + --t->size; + assert(t->size == 0); + return ZIX_STATUS_SUCCESS; + } + + // Set pp to the parent pointer to n, if applicable + if (n->parent) { + assert(n->parent->left == n || n->parent->right == n); + if (n->parent->left == n) { // n is left child + pp = &n->parent->left; + d_balance = 1; + } else { // n is right child + assert(n->parent->right == n); + pp = &n->parent->right; + d_balance = -1; + } + } + + assert(!pp || *pp == n); + + int height_change = 0; + if (!n->left && !n->right) { + // n is a leaf, just remove it + if (pp) { + *pp = NULL; + to_balance = n->parent; + height_change = (!n->parent->left && !n->parent->right) ? -1 : 0; + } + } else if (!n->left) { + // Replace n with right (only) child + if (pp) { + *pp = n->right; + to_balance = n->parent; + } else { + t->root = n->right; + } + n->right->parent = n->parent; + height_change = -1; + } else if (!n->right) { + // Replace n with left (only) child + if (pp) { + *pp = n->left; + to_balance = n->parent; + } else { + t->root = n->left; + } + n->left->parent = n->parent; + height_change = -1; + } else { + // Replace n with in-order successor (leftmost child of right subtree) + ZixTreeNode* replace = n->right; + while (replace->left) { + assert(replace->left->parent == replace); + replace = replace->left; + } + + // Remove replace from parent (replace_p) + if (replace->parent->left == replace) { + height_change = replace->parent->right ? 0 : -1; + d_balance = 1; + to_balance = replace->parent; + replace->parent->left = replace->right; + } else { + assert(replace->parent == n); + height_change = replace->parent->left ? 0 : -1; + d_balance = -1; + to_balance = replace->parent; + replace->parent->right = replace->right; + } + + if (to_balance == n) { + to_balance = replace; + } + + if (replace->right) { + replace->right->parent = replace->parent; + } + + replace->balance = n->balance; + + // Swap node to delete with replace + if (pp) { + *pp = replace; + } else { + assert(t->root == n); + t->root = replace; + } + replace->parent = n->parent; + replace->left = n->left; + n->left->parent = replace; + replace->right = n->right; + if (n->right) { + n->right->parent = replace; + } + + assert(!replace->parent + || replace->parent->left == replace + || replace->parent->right == replace); + } + + // Rebalance starting at to_balance upwards. + for (ZixTreeNode* i = to_balance; i; i = i->parent) { + i->balance += d_balance; + if (d_balance == 0 || i->balance == -1 || i->balance == 1) { + break; + } + + assert(i != n); + i = zix_tree_rebalance(t, i, &height_change); + if (i->balance == 0) { + height_change = -1; + } + + if (i->parent) { + if (i == i->parent->left) { + d_balance = height_change * -1; + } else { + assert(i == i->parent->right); + d_balance = height_change; + } + } + } + + DUMP(t); + + if (t->destroy) { + t->destroy(n->data); + } + free(n); + + --t->size; + +#ifdef ZIX_TREE_VERIFY + if (!verify(t, t->root)) { + return ZIX_STATUS_ERROR; + } +#endif + + return ZIX_STATUS_SUCCESS; +} + +ZIX_API ZixStatus +zix_tree_find(const ZixTree* t, const void* e, ZixTreeIter** ti) +{ + ZixTreeNode* n = t->root; + while (n) { + const int cmp = t->cmp(e, n->data, t->cmp_data); + if (cmp == 0) { + break; + } else if (cmp < 0) { + n = n->left; + } else { + n = n->right; + } + } + + *ti = n; + return (n) ? ZIX_STATUS_SUCCESS : ZIX_STATUS_NOT_FOUND; +} + +ZIX_API void* +zix_tree_get(ZixTreeIter* ti) +{ + return ti ? ti->data : NULL; +} + +ZIX_API ZixTreeIter* +zix_tree_begin(ZixTree* t) +{ + if (!t->root) { + return NULL; + } + + ZixTreeNode* n = t->root; + while (n->left) { + n = n->left; + } + return n; +} + +ZIX_API ZixTreeIter* +zix_tree_end(ZixTree* t) +{ + return NULL; +} + +ZIX_API ZixTreeIter* +zix_tree_rbegin(ZixTree* t) +{ + if (!t->root) { + return NULL; + } + + ZixTreeNode* n = t->root; + while (n->right) { + n = n->right; + } + return n; +} + +ZIX_API ZixTreeIter* +zix_tree_rend(ZixTree* t) +{ + return NULL; +} + +ZIX_API bool +zix_tree_iter_is_end(ZixTreeIter* i) +{ + return !i; +} + +ZIX_API bool +zix_tree_iter_is_rend(ZixTreeIter* i) +{ + return !i; +} + +ZIX_API ZixTreeIter* +zix_tree_iter_next(ZixTreeIter* i) +{ + if (!i) { + return NULL; + } + + if (i->right) { + i = i->right; + while (i->left) { + i = i->left; + } + } else { + while (i->parent && i->parent->right == i) { // i is a right child + i = i->parent; + } + + i = i->parent; + } + + return i; +} + +ZIX_API ZixTreeIter* +zix_tree_iter_prev(ZixTreeIter* i) +{ + if (!i) { + return NULL; + } + + if (i->left) { + i = i->left; + while (i->right) { + i = i->right; + } + } else { + while (i->parent && i->parent->left == i) { // i is a left child + i = i->parent; + } + + i = i->parent; + } + + return i; +} diff --git a/source/libs/lilv/lilv-0.14.4/src/zix/tree.h b/source/libs/lilv/lilv-0.14.4/src/zix/tree.h new file mode 100644 index 000000000..f89d9e50c --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/src/zix/tree.h @@ -0,0 +1,148 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef ZIX_TREE_H +#define ZIX_TREE_H + +#include + +#include "zix/common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + @addtogroup zix + @{ + @name Tree + @{ +*/ + +/** + A balanced binary search tree. +*/ +typedef struct ZixTreeImpl ZixTree; + +/** + An iterator over a @ref ZixTree. +*/ +typedef struct ZixTreeNodeImpl ZixTreeIter; + +/** + Create a new (empty) tree. +*/ +ZIX_API ZixTree* +zix_tree_new(bool allow_duplicates, + ZixComparator cmp, + void* cmp_data, + ZixDestroyFunc destroy); + +/** + Free @a t. +*/ +ZIX_API void +zix_tree_free(ZixTree* t); + +/** + Return the number of elements in @a t. +*/ +ZIX_API size_t +zix_tree_size(const ZixTree* t); + +/** + Insert the element @a e into @a t and point @a ti at the new element. +*/ +ZIX_API ZixStatus +zix_tree_insert(ZixTree* t, void* e, ZixTreeIter** ti); + +/** + Remove the item pointed at by @a ti from @a t. +*/ +ZIX_API ZixStatus +zix_tree_remove(ZixTree* t, ZixTreeIter* ti); + +/** + Set @a ti to an element equal to @a e in @a t. + If no such item exists, @a ti is set to NULL. +*/ +ZIX_API ZixStatus +zix_tree_find(const ZixTree* t, const void* e, ZixTreeIter** ti); + +/** + Return the data associated with the given tree item. +*/ +ZIX_API void* +zix_tree_get(ZixTreeIter* ti); + +/** + Return an iterator to the first (smallest) element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_begin(ZixTree* t); + +/** + Return an iterator the the element one past the last element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_end(ZixTree* t); + +/** + Return true iff @a i is an iterator to the end of its tree. +*/ +ZIX_API bool +zix_tree_iter_is_end(ZixTreeIter* i); + +/** + Return an iterator to the last (largest) element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_rbegin(ZixTree* t); + +/** + Return an iterator the the element one before the first element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_rend(ZixTree* t); + +/** + Return true iff @a i is an iterator to the reverse end of its tree. +*/ +ZIX_API bool +zix_tree_iter_is_rend(ZixTreeIter* i); + +/** + Return an iterator that points to the element one past @a i. +*/ +ZIX_API ZixTreeIter* +zix_tree_iter_next(ZixTreeIter* i); + +/** + Return an iterator that points to the element one before @a i. +*/ +ZIX_API ZixTreeIter* +zix_tree_iter_prev(ZixTreeIter* i); + +/** + @} + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* ZIX_TREE_H */ diff --git a/source/libs/lilv/lilv-0.14.4/test/lilv_test.c b/source/libs/lilv/lilv-0.14.4/test/lilv_test.c new file mode 100644 index 000000000..f08656f42 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/test/lilv_test.c @@ -0,0 +1,1581 @@ +/* + Copyright 2007-2011 David Robillard + Copyright 2008 Krzysztof Foltman + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#define _POSIX_C_SOURCE 200112L /* for setenv */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +# include +# define mkdir(path, flags) _mkdir(path) +# define setenv(n, v, r) SetEnvironmentVariable((n), (v)) +# define unsetenv(n) SetEnvironmentVariable((n), NULL) +#else +# include +# include +#endif + +#include "lilv/lilv.h" +#include "../src/lilv_internal.h" + +#include "lv2/lv2plug.in/ns/ext/state/state.h" +#include "lv2/lv2plug.in/ns/ext/urid/urid.h" + +#define TEST_PATH_MAX 1024 + +#if defined(__APPLE__) +# define SHLIB_EXT ".dylib" +#elif defined(_WIN32) +# define SHLIB_EXT ".dll" +#else +# define SHLIB_EXT ".so" +#endif + +static char bundle_dir_name[TEST_PATH_MAX]; +static char bundle_dir_uri[TEST_PATH_MAX]; +static char manifest_name[TEST_PATH_MAX]; +static char content_name[TEST_PATH_MAX]; + +static LilvWorld* world; + +int test_count = 0; +int error_count = 0; + +static void +delete_bundle(void) +{ + unlink(content_name); + unlink(manifest_name); + remove(bundle_dir_name); +} + +static void +init_tests(void) +{ + strncpy(bundle_dir_name, getenv("HOME"), 900); + strcat(bundle_dir_name, "/.lv2"); + mkdir(bundle_dir_name, 0700); + strcat(bundle_dir_name, "/lilv-test.lv2"); + sprintf(bundle_dir_uri, "file://%s/", bundle_dir_name); + sprintf(manifest_name, "%s/manifest.ttl", bundle_dir_name); + sprintf(content_name, "%s/plugin.ttl", bundle_dir_name); + + delete_bundle(); +} + +static void +fatal_error(const char* err, const char* arg) +{ + /* TODO: possibly change to vfprintf later */ + fprintf(stderr, err, arg); + /* IMHO, the bundle should be left in place after an error, for possible investigation */ + /* delete_bundle(); */ + exit(1); +} + +static void +write_file(const char* name, const char* content) +{ + FILE* f = fopen(name, "w"); + size_t len = strlen(content); + if (fwrite(content, 1, len, f) != len) + fatal_error("Cannot write file %s\n", name); + fclose(f); +} + +static int +init_world(void) +{ + world = lilv_world_new(); + return world != NULL; +} + +static int +load_all_bundles(void) +{ + if (!init_world()) + return 0; + lilv_world_load_all(world); + return 1; +} + +static void +create_bundle(const char* manifest, const char* content) +{ + if (mkdir(bundle_dir_name, 0700) && errno != EEXIST) + fatal_error("Cannot create directory %s\n", bundle_dir_name); + write_file(manifest_name, manifest); + write_file(content_name, content); +} + +static int +start_bundle(const char* manifest, const char* content) +{ + create_bundle(manifest, content); + return load_all_bundles(); +} + +static void +unload_bundle(void) +{ + if (world) + lilv_world_free(world); + world = NULL; +} + +static void +cleanup(void) +{ + delete_bundle(); +} + +/*****************************************************************************/ + +#define TEST_CASE(name) { #name, test_##name } +#define TEST_ASSERT(check) do {\ + test_count++;\ + if (!(check)) {\ + error_count++;\ + fprintf(stderr, "lilv_test.c:%d: error: %s\n", __LINE__, #check);\ + }\ +} while (0) + +typedef int (*TestFunc)(void); + +struct TestCase { + const char* title; + TestFunc func; +}; + +#define PREFIX_LINE "@prefix : .\n" +#define PREFIX_LV2 "@prefix lv2: .\n" +#define PREFIX_LV2EV "@prefix lv2ev: . \n" +#define PREFIX_LV2UI "@prefix lv2ui: .\n" +#define PREFIX_RDF "@prefix rdf: .\n" +#define PREFIX_RDFS "@prefix rdfs: .\n" +#define PREFIX_FOAF "@prefix foaf: .\n" +#define PREFIX_DOAP "@prefix doap: .\n" + +#define MANIFEST_PREFIXES PREFIX_LINE PREFIX_LV2 PREFIX_RDFS +#define BUNDLE_PREFIXES PREFIX_LINE PREFIX_LV2 PREFIX_RDF PREFIX_RDFS PREFIX_FOAF PREFIX_DOAP +#define PLUGIN_NAME(name) "doap:name \"" name "\"" +#define LICENSE_GPL "doap:license " + +static const char* uris_plugin = "http://example.org/plug"; +static LilvNode* plugin_uri_value; +static LilvNode* plugin2_uri_value; + +/*****************************************************************************/ + +static void +init_uris(void) +{ + plugin_uri_value = lilv_new_uri(world, uris_plugin); + plugin2_uri_value = lilv_new_uri(world, "http://example.org/foobar"); + TEST_ASSERT(plugin_uri_value); + TEST_ASSERT(plugin2_uri_value); +} + +static void +cleanup_uris(void) +{ + lilv_node_free(plugin2_uri_value); + lilv_node_free(plugin_uri_value); + plugin2_uri_value = NULL; + plugin_uri_value = NULL; +} + +/*****************************************************************************/ + +static int +test_utils(void) +{ + TEST_ASSERT(!strcmp(lilv_uri_to_path("file:///tmp/blah"), "/tmp/blah")); + TEST_ASSERT(!lilv_uri_to_path("file:/example.org/blah")); + TEST_ASSERT(!lilv_uri_to_path("http://example.org/blah")); + return 1; +} + +/*****************************************************************************/ + +static int +test_value(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES + ":plug a lv2:Plugin ; a lv2:CompressorPlugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "lv2:port [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 0 ; lv2:symbol \"foo\" ; lv2:name \"Foo\" ; " + "] .")) + return 0; + + init_uris(); + + LilvNode* uval = lilv_new_uri(world, "http://example.org"); + LilvNode* sval = lilv_new_string(world, "Foo"); + LilvNode* ival = lilv_new_int(world, 42); + LilvNode* fval = lilv_new_float(world, 1.6180); + + TEST_ASSERT(lilv_node_is_uri(uval)); + TEST_ASSERT(lilv_node_is_string(sval)); + TEST_ASSERT(lilv_node_is_int(ival)); + TEST_ASSERT(lilv_node_is_float(fval)); + + TEST_ASSERT(!lilv_node_is_literal(uval)); + TEST_ASSERT(lilv_node_is_literal(sval)); + TEST_ASSERT(lilv_node_is_literal(ival)); + TEST_ASSERT(lilv_node_is_literal(fval)); + + TEST_ASSERT(!strcmp(lilv_node_as_uri(uval), "http://example.org")); + TEST_ASSERT(!strcmp(lilv_node_as_string(sval), "Foo")); + TEST_ASSERT(lilv_node_as_int(ival) == 42); + TEST_ASSERT(fabs(lilv_node_as_float(fval) - 1.6180) < FLT_EPSILON); + + char* tok = lilv_node_get_turtle_token(uval); + TEST_ASSERT(!strcmp(tok, "")); + free(tok); + tok = lilv_node_get_turtle_token(sval); + TEST_ASSERT(!strcmp(tok, "Foo")); + free(tok); + tok = lilv_node_get_turtle_token(ival); + TEST_ASSERT(!strcmp(tok, "42")); + free(tok); + tok = lilv_node_get_turtle_token(fval); + TEST_ASSERT(!strncmp(tok, "1.6180", 6)); + free(tok); + + LilvNode* uval_e = lilv_new_uri(world, "http://example.org"); + LilvNode* sval_e = lilv_new_string(world, "Foo"); + LilvNode* ival_e = lilv_new_int(world, 42); + LilvNode* fval_e = lilv_new_float(world, 1.6180); + LilvNode* uval_ne = lilv_new_uri(world, "http://no-example.org"); + LilvNode* sval_ne = lilv_new_string(world, "Bar"); + LilvNode* ival_ne = lilv_new_int(world, 24); + LilvNode* fval_ne = lilv_new_float(world, 3.14159); + + TEST_ASSERT(lilv_node_equals(uval, uval_e)); + TEST_ASSERT(lilv_node_equals(sval, sval_e)); + TEST_ASSERT(lilv_node_equals(ival, ival_e)); + TEST_ASSERT(lilv_node_equals(fval, fval_e)); + + TEST_ASSERT(!lilv_node_equals(uval, uval_ne)); + TEST_ASSERT(!lilv_node_equals(sval, sval_ne)); + TEST_ASSERT(!lilv_node_equals(ival, ival_ne)); + TEST_ASSERT(!lilv_node_equals(fval, fval_ne)); + + TEST_ASSERT(!lilv_node_equals(uval, sval)); + TEST_ASSERT(!lilv_node_equals(sval, ival)); + TEST_ASSERT(!lilv_node_equals(ival, fval)); + + LilvNode* uval_dup = lilv_node_duplicate(uval); + TEST_ASSERT(lilv_node_equals(uval, uval_dup)); + + LilvNode* ifval = lilv_new_float(world, 42.0); + TEST_ASSERT(!lilv_node_equals(ival, ifval)); + lilv_node_free(ifval); + + LilvNode* nil = NULL; + TEST_ASSERT(!lilv_node_equals(uval, nil)); + TEST_ASSERT(!lilv_node_equals(nil, uval)); + TEST_ASSERT(lilv_node_equals(nil, nil)); + + LilvNode* nil2 = lilv_node_duplicate(nil); + TEST_ASSERT(lilv_node_equals(nil, nil2)); + + lilv_node_free(uval); + lilv_node_free(sval); + lilv_node_free(ival); + lilv_node_free(fval); + lilv_node_free(uval_e); + lilv_node_free(sval_e); + lilv_node_free(ival_e); + lilv_node_free(fval_e); + lilv_node_free(uval_ne); + lilv_node_free(sval_ne); + lilv_node_free(ival_ne); + lilv_node_free(fval_ne); + lilv_node_free(uval_dup); + lilv_node_free(nil2); + + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int discovery_plugin_found = 0; + +static void +discovery_verify_plugin(const LilvPlugin* plugin) +{ + const LilvNode* value = lilv_plugin_get_uri(plugin); + if (lilv_node_equals(value, plugin_uri_value)) { + const LilvNode* lib_uri = NULL; + TEST_ASSERT(!lilv_node_equals(value, plugin2_uri_value)); + discovery_plugin_found = 1; + lib_uri = lilv_plugin_get_library_uri(plugin); + TEST_ASSERT(lib_uri); + TEST_ASSERT(lilv_node_is_uri(lib_uri)); + TEST_ASSERT(lilv_node_as_uri(lib_uri)); + TEST_ASSERT(strstr(lilv_node_as_uri(lib_uri), "foo" SHLIB_EXT)); + TEST_ASSERT(lilv_plugin_verify(plugin)); + } +} + +static int +test_discovery(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES + ":plug a lv2:Plugin ;" + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "lv2:port [ a lv2:ControlPort ; a lv2:InputPort ;" + " lv2:index 0 ; lv2:symbol \"foo\" ; lv2:name \"bar\" ; ] .")) + return 0; + + init_uris(); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + TEST_ASSERT(lilv_plugins_size(plugins) > 0); + + const LilvPlugin* explug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + TEST_ASSERT(explug != NULL); + const LilvPlugin* explug2 = lilv_plugins_get_by_uri(plugins, plugin2_uri_value); + TEST_ASSERT(explug2 == NULL); + + if (explug) { + LilvNode* name = lilv_plugin_get_name(explug); + TEST_ASSERT(!strcmp(lilv_node_as_string(name), "Test plugin")); + lilv_node_free(name); + } + + discovery_plugin_found = 0; + LILV_FOREACH(plugins, i, plugins) + discovery_verify_plugin(lilv_plugins_get(plugins, i)); + + TEST_ASSERT(discovery_plugin_found); + plugins = NULL; + + cleanup_uris(); + + return 1; +} + +/*****************************************************************************/ + +static int +test_lv2_path(void) +{ +#ifndef _WIN32 + char* orig_lv2_path = lilv_strdup(getenv("LV2_PATH")); + + setenv("LV2_PATH", "~/.lv2:/usr/local/lib/lv2:/usr/lib/lv2", 1); + + world = lilv_world_new(); + lilv_world_load_all(world); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const size_t n_plugins = lilv_plugins_size(plugins); + + lilv_world_free(world); + + setenv("LV2_PATH", "$HOME/.lv2:/usr/local/lib/lv2:/usr/lib/lv2", 1); + world = lilv_world_new(); + lilv_world_load_all(world); + plugins = lilv_world_get_all_plugins(world); + TEST_ASSERT(lilv_plugins_size(plugins) == n_plugins); + lilv_world_free(world); + world = NULL; + + if (orig_lv2_path) { + setenv("LV2_PATH", orig_lv2_path, 1); + } else { + unsetenv("LV2_PATH"); + } + free(orig_lv2_path); +#endif + return 1; +} + +/*****************************************************************************/ + +static int +test_verify(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES + ":plug a lv2:Plugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "lv2:port [ a lv2:ControlPort ; a lv2:InputPort ;" + " lv2:index 0 ; lv2:symbol \"foo\" ; lv2:name \"bar\" ] .")) + return 0; + + init_uris(); + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* explug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + TEST_ASSERT(explug); + TEST_ASSERT(lilv_plugin_verify(explug)); + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int +test_no_verify(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES + ":plug a lv2:Plugin . ")) + return 0; + + init_uris(); + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* explug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + TEST_ASSERT(explug); + TEST_ASSERT(!lilv_plugin_verify(explug)); + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int +test_classes(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES + ":plug a lv2:Plugin ; a lv2:CompressorPlugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "lv2:port [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 0 ; lv2:symbol \"foo\" ; lv2:name \"Foo\" ; " + "] .")) + return 0; + + init_uris(); + const LilvPluginClass* plugin = lilv_world_get_plugin_class(world); + const LilvPluginClasses* classes = lilv_world_get_plugin_classes(world); + LilvPluginClasses* children = lilv_plugin_class_get_children(plugin); + + TEST_ASSERT(lilv_plugin_class_get_parent_uri(plugin) == NULL); + TEST_ASSERT(lilv_plugin_classes_size(classes) > lilv_plugin_classes_size(children)); + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_plugin_class_get_label(plugin)), "Plugin")); + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_plugin_class_get_uri(plugin)), + "http://lv2plug.in/ns/lv2core#Plugin")); + + LILV_FOREACH(plugin_classes, i, children) { + TEST_ASSERT(lilv_node_equals( + lilv_plugin_class_get_parent_uri(lilv_plugin_classes_get(children, i)), + lilv_plugin_class_get_uri(plugin))); + } + + LilvNode* some_uri = lilv_new_uri(world, "http://example.org/whatever"); + TEST_ASSERT(lilv_plugin_classes_get_by_uri(classes, some_uri) == NULL); + lilv_node_free(some_uri); + + lilv_plugin_classes_free(children); + + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int +test_plugin(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES + ":plug a lv2:Plugin ; a lv2:CompressorPlugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "lv2:optionalFeature lv2:hardRTCapable ; " + "lv2:requiredFeature ; " + "lv2:extensionData ;" + ":foo 1.6180 ; " + ":bar true ; " + ":baz false ; " + ":blank [ a ] ; " + "doap:maintainer [ foaf:name \"David Robillard\" ; " + " foaf:homepage ; foaf:mbox ] ; " + "lv2:port [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 0 ; lv2:symbol \"foo\" ; lv2:name \"bar\" ; " + " lv2:minimum -1.0 ; lv2:maximum 1.0 ; lv2:default 0.5 " + "] , [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 1 ; lv2:symbol \"bar\" ; lv2:name \"Baz\" ; " + " lv2:minimum -2.0 ; lv2:maximum 2.0 ; lv2:default 1.0 " + "] , [ " + " a lv2:ControlPort ; a lv2:OutputPort ; " + " lv2:index 2 ; lv2:symbol \"latency\" ; lv2:name \"Latency\" ; " + " lv2:portProperty lv2:reportsLatency ; " + " lv2:designation lv2:latency " + "] . \n" + ":thing doap:name \"Something else\" .\n")) + return 0; + + init_uris(); + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* plug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + TEST_ASSERT(plug); + + const LilvPluginClass* klass = lilv_plugin_get_class(plug); + const LilvNode* klass_uri = lilv_plugin_class_get_uri(klass); + TEST_ASSERT(!strcmp(lilv_node_as_string(klass_uri), + "http://lv2plug.in/ns/lv2core#CompressorPlugin")); + + const LilvNode* plug_bundle_uri = lilv_plugin_get_bundle_uri(plug); + TEST_ASSERT(!strcmp(lilv_node_as_string(plug_bundle_uri), bundle_dir_uri)); + + const LilvNodes* data_uris = lilv_plugin_get_data_uris(plug); + TEST_ASSERT(lilv_nodes_size(data_uris) == 2); + + char* manifest_uri = (char*)malloc(TEST_PATH_MAX); + char* data_uri = (char*)malloc(TEST_PATH_MAX); + snprintf(manifest_uri, TEST_PATH_MAX, "%s%s", + lilv_node_as_string(plug_bundle_uri), "manifest.ttl"); + snprintf(data_uri, TEST_PATH_MAX, "%s%s", + lilv_node_as_string(plug_bundle_uri), "plugin.ttl"); + + LilvNode* manifest_uri_val = lilv_new_uri(world, manifest_uri); + TEST_ASSERT(lilv_nodes_contains(data_uris, manifest_uri_val)); + lilv_node_free(manifest_uri_val); + + LilvNode* data_uri_val = lilv_new_uri(world, data_uri); + TEST_ASSERT(lilv_nodes_contains(data_uris, data_uri_val)); + lilv_node_free(data_uri_val); + + free(manifest_uri); + free(data_uri); + + float mins[3]; + float maxs[3]; + float defs[3]; + lilv_plugin_get_port_ranges_float(plug, mins, maxs, defs); + TEST_ASSERT(mins[0] == -1.0f); + TEST_ASSERT(maxs[0] == 1.0f); + TEST_ASSERT(defs[0] == 0.5f); + + LilvNode* audio_class = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#AudioPort"); + LilvNode* control_class = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#ControlPort"); + LilvNode* in_class = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#InputPort"); + LilvNode* out_class = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#OutputPort"); + + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, control_class, NULL) == 3); + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, audio_class, NULL) == 0); + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, in_class, NULL) == 2); + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, out_class, NULL) == 1); + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, control_class, in_class, NULL) == 2); + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, control_class, out_class, NULL) == 1); + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, audio_class, in_class, NULL) == 0); + TEST_ASSERT(lilv_plugin_get_num_ports_of_class(plug, audio_class, out_class, NULL) == 0); + + TEST_ASSERT(lilv_plugin_has_latency(plug)); + TEST_ASSERT(lilv_plugin_get_latency_port_index(plug) == 2); + + LilvNode* lv2_latency = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#latency"); + LilvPort* latency_port = lilv_plugin_get_port_by_designation( + plug, out_class, lv2_latency); + lilv_node_free(lv2_latency); + + TEST_ASSERT(latency_port); + TEST_ASSERT(lilv_port_get_index(plug, latency_port) == 2); + + LilvNode* rt_feature = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#hardRTCapable"); + LilvNode* event_feature = lilv_new_uri(world, + "http://lv2plug.in/ns/ext/event"); + LilvNode* pretend_feature = lilv_new_uri(world, + "http://example.org/solvesWorldHunger"); + + TEST_ASSERT(lilv_plugin_has_feature(plug, rt_feature)); + TEST_ASSERT(lilv_plugin_has_feature(plug, event_feature)); + TEST_ASSERT(!lilv_plugin_has_feature(plug, pretend_feature)); + + lilv_node_free(rt_feature); + lilv_node_free(event_feature); + lilv_node_free(pretend_feature); + + LilvNodes* supported = lilv_plugin_get_supported_features(plug); + LilvNodes* required = lilv_plugin_get_required_features(plug); + LilvNodes* optional = lilv_plugin_get_optional_features(plug); + TEST_ASSERT(lilv_nodes_size(supported) == 2); + TEST_ASSERT(lilv_nodes_size(required) == 1); + TEST_ASSERT(lilv_nodes_size(optional) == 1); + lilv_nodes_free(supported); + lilv_nodes_free(required); + lilv_nodes_free(optional); + + LilvNode* foo_p = lilv_new_uri(world, "http://example.org/foo"); + LilvNodes* foos = lilv_plugin_get_value(plug, foo_p); + TEST_ASSERT(lilv_nodes_size(foos) == 1); + TEST_ASSERT(fabs(lilv_node_as_float(lilv_nodes_get_first(foos)) - 1.6180) < FLT_EPSILON); + lilv_node_free(foo_p); + lilv_nodes_free(foos); + + LilvNode* bar_p = lilv_new_uri(world, "http://example.org/bar"); + LilvNodes* bars = lilv_plugin_get_value(plug, bar_p); + TEST_ASSERT(lilv_nodes_size(bars) == 1); + TEST_ASSERT(lilv_node_as_bool(lilv_nodes_get_first(bars)) == true); + lilv_node_free(bar_p); + lilv_nodes_free(bars); + + LilvNode* baz_p = lilv_new_uri(world, "http://example.org/baz"); + LilvNodes* bazs = lilv_plugin_get_value(plug, baz_p); + TEST_ASSERT(lilv_nodes_size(bazs) == 1); + TEST_ASSERT(lilv_node_as_bool(lilv_nodes_get_first(bazs)) == false); + lilv_node_free(baz_p); + lilv_nodes_free(bazs); + + LilvNode* blank_p = lilv_new_uri(world, "http://example.org/blank"); + LilvNodes* blanks = lilv_plugin_get_value(plug, blank_p); + TEST_ASSERT(lilv_nodes_size(blanks) == 1); + LilvNode* blank = lilv_nodes_get_first(blanks); + TEST_ASSERT(lilv_node_is_blank(blank)); + const char* blank_str = lilv_node_as_blank(blank); + char* blank_tok = lilv_node_get_turtle_token(blank); + TEST_ASSERT(!strncmp(blank_tok, "_:", 2)); + TEST_ASSERT(!strcmp(blank_tok + 2, blank_str)); + free(blank_tok); + lilv_node_free(blank_p); + lilv_nodes_free(blanks); + + LilvNode* author_name = lilv_plugin_get_author_name(plug); + TEST_ASSERT(!strcmp(lilv_node_as_string(author_name), "David Robillard")); + lilv_node_free(author_name); + + LilvNode* author_email = lilv_plugin_get_author_email(plug); + TEST_ASSERT(!strcmp(lilv_node_as_string(author_email), "mailto:d@drobilla.net")); + lilv_node_free(author_email); + + LilvNode* author_homepage = lilv_plugin_get_author_homepage(plug); + TEST_ASSERT(!strcmp(lilv_node_as_string(author_homepage), "http://drobilla.net")); + lilv_node_free(author_homepage); + + LilvNode* thing_uri = lilv_new_uri(world, "http://example.org/thing"); + LilvNode* name_p = lilv_new_uri(world, "http://usefulinc.com/ns/doap#name"); + LilvNodes* thing_names = lilv_world_find_nodes(world, thing_uri, name_p, NULL); + TEST_ASSERT(lilv_nodes_size(thing_names) == 1); + LilvNode* thing_name = lilv_nodes_get_first(thing_names); + TEST_ASSERT(thing_name); + TEST_ASSERT(lilv_node_is_string(thing_name)); + TEST_ASSERT(!strcmp(lilv_node_as_string(thing_name), "Something else")); + + LilvUIs* uis = lilv_plugin_get_uis(plug); + TEST_ASSERT(lilv_uis_size(uis) == 0); + lilv_uis_free(uis); + + LilvNode* extdata = lilv_new_uri(world, "http://example.org/extdata"); + LilvNode* noextdata = lilv_new_uri(world, "http://example.org/noextdata"); + LilvNodes* extdatas = lilv_plugin_get_extension_data(plug); + TEST_ASSERT(lilv_plugin_has_extension_data(plug, extdata)); + TEST_ASSERT(!lilv_plugin_has_extension_data(plug, noextdata)); + TEST_ASSERT(lilv_nodes_size(extdatas) == 1); + TEST_ASSERT(lilv_node_equals(lilv_nodes_get_first(extdatas), extdata)); + lilv_node_free(noextdata); + lilv_node_free(extdata); + lilv_nodes_free(extdatas); + + lilv_nodes_free(thing_names); + lilv_node_free(thing_uri); + lilv_node_free(name_p); + lilv_node_free(control_class); + lilv_node_free(audio_class); + lilv_node_free(in_class); + lilv_node_free(out_class); + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int +test_port(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES PREFIX_LV2EV + ":plug a lv2:Plugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "doap:homepage ; " + "lv2:port [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 0 ; lv2:symbol \"foo\" ; " + " lv2:name \"store\" ; " + " lv2:name \"dépanneur\"@fr-ca ; lv2:name \"épicerie\"@fr-fr ; " + " lv2:name \"tienda\"@es ; " + " rdfs:comment \"comment\"@en , \"commentaires\"@fr ; " + " lv2:portProperty lv2:integer ; " + " lv2:minimum -1.0 ; lv2:maximum 1.0 ; lv2:default 0.5 ; " + " lv2:scalePoint [ rdfs:label \"Sin\"; rdf:value 3 ] ; " + " lv2:scalePoint [ rdfs:label \"Cos\"; rdf:value 4 ] " + "] , [\n" + " a lv2:EventPort ; a lv2:InputPort ; " + " lv2:index 1 ; lv2:symbol \"event_in\" ; " + " lv2:name \"Event Input\" ; " + " lv2ev:supportsEvent " + "] .")) + return 0; + + init_uris(); + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* plug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + TEST_ASSERT(plug); + + LilvNode* psym = lilv_new_string(world, "foo"); + const LilvPort* p = lilv_plugin_get_port_by_index(plug, 0); + const LilvPort* p2 = lilv_plugin_get_port_by_symbol(plug, psym); + lilv_node_free(psym); + TEST_ASSERT(p != NULL); + TEST_ASSERT(p2 != NULL); + TEST_ASSERT(p == p2); + + LilvNode* nopsym = lilv_new_string(world, "thisaintnoportfoo"); + const LilvPort* p3 = lilv_plugin_get_port_by_symbol(plug, nopsym); + TEST_ASSERT(p3 == NULL); + lilv_node_free(nopsym); + + LilvNode* audio_class = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#AudioPort"); + LilvNode* control_class = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#ControlPort"); + LilvNode* in_class = lilv_new_uri(world, + "http://lv2plug.in/ns/lv2core#InputPort"); + + TEST_ASSERT(lilv_nodes_size(lilv_port_get_classes(plug, p)) == 2); + TEST_ASSERT(lilv_plugin_get_num_ports(plug) == 2); + TEST_ASSERT(lilv_port_is_a(plug, p, control_class)); + TEST_ASSERT(lilv_port_is_a(plug, p, in_class)); + TEST_ASSERT(!lilv_port_is_a(plug, p, audio_class)); + + LilvNodes* port_properties = lilv_port_get_properties(plug, p); + TEST_ASSERT(lilv_nodes_size(port_properties) == 1); + lilv_nodes_free(port_properties); + + // Untranslated name (current locale is set to "C" in main) + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_port_get_symbol(plug, p)), "foo")); + LilvNode* name = lilv_port_get_name(plug, p); + TEST_ASSERT(!strcmp(lilv_node_as_string(name), "store")); + lilv_node_free(name); + + // Exact language match + setenv("LANG", "fr_FR", 1); + name = lilv_port_get_name(plug, p); + TEST_ASSERT(!strcmp(lilv_node_as_string(name), "épicerie")); + lilv_node_free(name); + + // Exact language match (with charset suffix) + setenv("LANG", "fr_CA.utf8", 1); + name = lilv_port_get_name(plug, p); + TEST_ASSERT(!strcmp(lilv_node_as_string(name), "dépanneur")); + lilv_node_free(name); + + // Partial language match (choose value translated for different country) + setenv("LANG", "fr_BE", 1); + name = lilv_port_get_name(plug, p); + TEST_ASSERT((!strcmp(lilv_node_as_string(name), "dépanneur")) + ||(!strcmp(lilv_node_as_string(name), "épicerie"))); + lilv_node_free(name); + + // Partial language match (choose country-less language tagged value) + setenv("LANG", "es_MX", 1); + name = lilv_port_get_name(plug, p); + TEST_ASSERT(!strcmp(lilv_node_as_string(name), "tienda")); + lilv_node_free(name); + + // No language match (choose untranslated value) + setenv("LANG", "cn", 1); + name = lilv_port_get_name(plug, p); + TEST_ASSERT(!strcmp(lilv_node_as_string(name), "store")); + lilv_node_free(name); + + setenv("LANG", "en_CA.utf-8", 1); + + // Language tagged value with no untranslated values + LilvNode* rdfs_comment = lilv_new_uri(world, LILV_NS_RDFS "comment"); + LilvNodes* comments = lilv_port_get_value(plug, p, rdfs_comment); + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_nodes_get_first(comments)), + "comment")); + lilv_nodes_free(comments); + + setenv("LANG", "fr", 1); + + comments = lilv_port_get_value(plug, p, rdfs_comment); + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_nodes_get_first(comments)), + "commentaires")); + lilv_nodes_free(comments); + + setenv("LANG", "cn", 1); + + comments = lilv_port_get_value(plug, p, rdfs_comment); + TEST_ASSERT(!comments); + lilv_nodes_free(comments); + + lilv_node_free(rdfs_comment); + + setenv("LANG", "C", 1); // Reset locale + + LilvScalePoints* points = lilv_port_get_scale_points(plug, p); + TEST_ASSERT(lilv_scale_points_size(points) == 2); + + LilvIter* sp_iter = lilv_scale_points_begin(points); + const LilvScalePoint* sp0 = lilv_scale_points_get(points, sp_iter); + TEST_ASSERT(sp0); + sp_iter = lilv_scale_points_next(points, sp_iter); + const LilvScalePoint* sp1 = lilv_scale_points_get(points, sp_iter); + TEST_ASSERT(sp1); + + TEST_ASSERT( + ((!strcmp(lilv_node_as_string(lilv_scale_point_get_label(sp0)), "Sin") + && lilv_node_as_float(lilv_scale_point_get_value(sp0)) == 3) + && + (!strcmp(lilv_node_as_string(lilv_scale_point_get_label(sp1)), "Cos") + && lilv_node_as_float(lilv_scale_point_get_value(sp1)) == 4)) + || + ((!strcmp(lilv_node_as_string(lilv_scale_point_get_label(sp0)), "Cos") + && lilv_node_as_float(lilv_scale_point_get_value(sp0)) == 4) + && + (!strcmp(lilv_node_as_string(lilv_scale_point_get_label(sp1)), "Sin") + && lilv_node_as_float(lilv_scale_point_get_value(sp1)) == 3))); + + LilvNode* homepage_p = lilv_new_uri(world, "http://usefulinc.com/ns/doap#homepage"); + LilvNodes* homepages = lilv_plugin_get_value(plug, homepage_p); + TEST_ASSERT(lilv_nodes_size(homepages) == 1); + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_nodes_get_first(homepages)), + "http://example.org/someplug")); + + LilvNode *min, *max, *def; + lilv_port_get_range(plug, p, &def, &min, &max); + TEST_ASSERT(def); + TEST_ASSERT(min); + TEST_ASSERT(max); + TEST_ASSERT(lilv_node_as_float(def) == 0.5); + TEST_ASSERT(lilv_node_as_float(min) == -1.0); + TEST_ASSERT(lilv_node_as_float(max) == 1.0); + + LilvNode* integer_prop = lilv_new_uri(world, "http://lv2plug.in/ns/lv2core#integer"); + LilvNode* toggled_prop = lilv_new_uri(world, "http://lv2plug.in/ns/lv2core#toggled"); + + TEST_ASSERT(lilv_port_has_property(plug, p, integer_prop)); + TEST_ASSERT(!lilv_port_has_property(plug, p, toggled_prop)); + + const LilvPort* ep = lilv_plugin_get_port_by_index(plug, 1); + + LilvNode* event_type = lilv_new_uri(world, "http://example.org/event"); + LilvNode* event_type_2 = lilv_new_uri(world, "http://example.org/otherEvent"); + TEST_ASSERT(lilv_port_supports_event(plug, ep, event_type)); + TEST_ASSERT(!lilv_port_supports_event(plug, ep, event_type_2)); + + LilvNode* name_p = lilv_new_uri(world, "http://lv2plug.in/ns/lv2core#name"); + LilvNodes* names = lilv_port_get_value(plug, p, name_p); + TEST_ASSERT(lilv_nodes_size(names) == 1); + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_nodes_get_first(names)), + "store")); + lilv_nodes_free(names); + + LilvNode* true_val = lilv_new_bool(world, true); + LilvNode* false_val = lilv_new_bool(world, false); + + TEST_ASSERT(!lilv_node_equals(true_val, false_val)); + + lilv_world_set_option(world, LILV_OPTION_FILTER_LANG, false_val); + names = lilv_port_get_value(plug, p, name_p); + TEST_ASSERT(lilv_nodes_size(names) == 4); + lilv_nodes_free(names); + lilv_world_set_option(world, LILV_OPTION_FILTER_LANG, true_val); + + lilv_node_free(false_val); + lilv_node_free(true_val); + + names = lilv_port_get_value(plug, ep, name_p); + TEST_ASSERT(lilv_nodes_size(names) == 1); + TEST_ASSERT(!strcmp(lilv_node_as_string(lilv_nodes_get_first(names)), + "Event Input")); + lilv_nodes_free(names); + lilv_node_free(name_p); + + lilv_node_free(integer_prop); + lilv_node_free(toggled_prop); + lilv_node_free(event_type); + lilv_node_free(event_type_2); + + lilv_node_free(min); + lilv_node_free(max); + lilv_node_free(def); + + lilv_node_free(homepage_p); + lilv_nodes_free(homepages); + + lilv_scale_points_free(points); + lilv_node_free(control_class); + lilv_node_free(audio_class); + lilv_node_free(in_class); + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static unsigned +ui_supported(const char* container_type_uri, + const char* ui_type_uri) +{ + return !strcmp(container_type_uri, ui_type_uri); +} + +static int +test_ui(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES PREFIX_LV2UI + ":plug a lv2:Plugin ; a lv2:CompressorPlugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "lv2:optionalFeature lv2:hardRTCapable ; " + "lv2:requiredFeature ; " + "lv2ui:ui :ui , :ui2 , :ui3 , :ui4 ; " + "doap:maintainer [ foaf:name \"David Robillard\" ; " + " foaf:homepage ; foaf:mbox ] ; " + "lv2:port [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 0 ; lv2:symbol \"foo\" ; lv2:name \"bar\" ; " + " lv2:minimum -1.0 ; lv2:maximum 1.0 ; lv2:default 0.5 " + "] , [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 1 ; lv2:symbol \"bar\" ; lv2:name \"Baz\" ; " + " lv2:minimum -2.0 ; lv2:maximum 2.0 ; lv2:default 1.0 " + "] , [ " + " a lv2:ControlPort ; a lv2:OutputPort ; " + " lv2:index 2 ; lv2:symbol \"latency\" ; lv2:name \"Latency\" ; " + " lv2:portProperty lv2:reportsLatency " + "] .\n" + ":ui a lv2ui:GtkUI ; " + " lv2ui:requiredFeature lv2ui:makeResident ; " + " lv2ui:binary ; " + " lv2ui:optionalFeature lv2ui:ext_presets . " + ":ui2 a lv2ui:GtkUI ; lv2ui:binary . " + ":ui3 a lv2ui:GtkUI ; lv2ui:binary . " + ":ui4 a lv2ui:GtkUI ; lv2ui:binary . ")) + return 0; + + init_uris(); + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* plug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + TEST_ASSERT(plug); + + LilvUIs* uis = lilv_plugin_get_uis(plug); + TEST_ASSERT(lilv_uis_size(uis) == 4); + + const LilvUI* ui0 = lilv_uis_get(uis, lilv_uis_begin(uis)); + TEST_ASSERT(ui0); + + LilvNode* ui_uri = lilv_new_uri(world, "http://example.org/ui"); + LilvNode* ui2_uri = lilv_new_uri(world, "http://example.org/ui3"); + LilvNode* ui3_uri = lilv_new_uri(world, "http://example.org/ui4"); + LilvNode* noui_uri = lilv_new_uri(world, "http://example.org/notaui"); + + const LilvUI* ui0_2 = lilv_uis_get_by_uri(uis, ui_uri); + TEST_ASSERT(ui0 == ui0_2); + TEST_ASSERT(lilv_node_equals(lilv_ui_get_uri(ui0_2), ui_uri)); + + const LilvUI* ui2 = lilv_uis_get_by_uri(uis, ui2_uri); + TEST_ASSERT(ui2 != ui0); + + const LilvUI* ui3 = lilv_uis_get_by_uri(uis, ui3_uri); + TEST_ASSERT(ui3 != ui0); + + const LilvUI* noui = lilv_uis_get_by_uri(uis, noui_uri); + TEST_ASSERT(noui == NULL); + + const LilvNodes* classes = lilv_ui_get_classes(ui0); + TEST_ASSERT(lilv_nodes_size(classes) == 1); + + LilvNode* ui_class_uri = lilv_new_uri(world, + "http://lv2plug.in/ns/extensions/ui#GtkUI"); + + TEST_ASSERT(lilv_node_equals(lilv_nodes_get_first(classes), ui_class_uri)); + TEST_ASSERT(lilv_ui_is_a(ui0, ui_class_uri)); + + const LilvNode* ui_type = NULL; + TEST_ASSERT(lilv_ui_is_supported(ui0, ui_supported, ui_class_uri, &ui_type)); + TEST_ASSERT(lilv_node_equals(ui_type, ui_class_uri)); + + const LilvNode* plug_bundle_uri = lilv_plugin_get_bundle_uri(plug); + const LilvNode* ui_bundle_uri = lilv_ui_get_bundle_uri(ui0); + TEST_ASSERT(lilv_node_equals(plug_bundle_uri, ui_bundle_uri)); + + char* ui_binary_uri_str = (char*)malloc(TEST_PATH_MAX); + snprintf(ui_binary_uri_str, TEST_PATH_MAX, "%s%s", + lilv_node_as_string(plug_bundle_uri), "ui" SHLIB_EXT); + + const LilvNode* ui_binary_uri = lilv_ui_get_binary_uri(ui0); + + LilvNode* expected_uri = lilv_new_uri(world, ui_binary_uri_str); + TEST_ASSERT(lilv_node_equals(expected_uri, ui_binary_uri)); + + free(ui_binary_uri_str); + lilv_node_free(ui_class_uri); + lilv_node_free(ui_uri); + lilv_node_free(ui2_uri); + lilv_node_free(ui3_uri); + lilv_node_free(noui_uri); + lilv_node_free(expected_uri); + lilv_uis_free(uis); + + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +uint32_t atom_Float = 0; +float in = 1.0; +float out = 42.0; + +static const void* +get_port_value(const char* port_symbol, + void* user_data, + uint32_t* size, + uint32_t* type) +{ + if (!strcmp(port_symbol, "input")) { + *size = sizeof(float); + *type = atom_Float; + return ∈ + } else if (!strcmp(port_symbol, "output")) { + *size = sizeof(float); + *type = atom_Float; + return &out; + } else { + fprintf(stderr, "error: get_port_value for nonexistent port `%s'\n", + port_symbol); + *size = *type = 0; + return NULL; + } +} + +static void +set_port_value(const char* port_symbol, + void* user_data, + const void* value, + uint32_t size, + uint32_t type) +{ + if (!strcmp(port_symbol, "input")) { + in = *(float*)value; + } else if (!strcmp(port_symbol, "output")) { + out = *(float*)value; + } else { + fprintf(stderr, "error: set_port_value for nonexistent port `%s'\n", + port_symbol); + } +} + +char** uris = NULL; +size_t n_uris = 0; + +static LV2_URID +map_uri(LV2_URID_Map_Handle handle, + const char* uri) +{ + for (size_t i = 0; i < n_uris; ++i) { + if (!strcmp(uris[i], uri)) { + return i + 1; + } + } + + assert(serd_uri_string_has_scheme((const uint8_t*)uri)); + uris = (char**)realloc(uris, ++n_uris * sizeof(char*)); + uris[n_uris - 1] = lilv_strdup(uri); + return n_uris; +} + +static const char* +unmap_uri(LV2_URID_Map_Handle handle, + LV2_URID urid) +{ + if (urid > 0 && urid <= n_uris) { + return uris[urid - 1]; + } + return NULL; +} + +static char* temp_dir = NULL; + +static char* +lilv_make_path(LV2_State_Make_Path_Handle handle, + const char* path) +{ + return lilv_path_join(temp_dir, path); +} + +static int +test_state(void) +{ + init_world(); + + uint8_t* abs_bundle = (uint8_t*)lilv_path_absolute(LILV_TEST_BUNDLE); + SerdNode bundle = serd_node_new_file_uri(abs_bundle, 0, 0, true); + LilvNode* bundle_uri = lilv_new_uri(world, (const char*)bundle.buf); + LilvNode* plugin_uri = lilv_new_uri(world, + "http://example.org/lilv-test-plugin"); + lilv_world_load_bundle(world, bundle_uri); + free(abs_bundle); + serd_node_free(&bundle); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* plugin = lilv_plugins_get_by_uri(plugins, plugin_uri); + TEST_ASSERT(plugin); + + LV2_URID_Map map = { NULL, map_uri }; + LV2_Feature map_feature = { LV2_URID_MAP_URI, &map }; + LV2_URID_Unmap unmap = { NULL, unmap_uri }; + LV2_Feature unmap_feature = { LV2_URID_UNMAP_URI, &unmap }; + const LV2_Feature* features[] = { &map_feature, &unmap_feature, NULL }; + + atom_Float = map.map(map.handle, "http://lv2plug.in/ns/ext/atom#Float"); + + LilvNode* num = lilv_new_int(world, 5); + LilvState* nostate = lilv_state_new_from_file(world, &map, num, "/junk"); + TEST_ASSERT(!nostate); + + LilvInstance* instance = lilv_plugin_instantiate(plugin, 48000.0, features); + TEST_ASSERT(instance); + lilv_instance_activate(instance); + lilv_instance_connect_port(instance, 0, &in); + lilv_instance_connect_port(instance, 1, &out); + lilv_instance_run(instance, 1); + TEST_ASSERT(in == 1.0); + TEST_ASSERT(out == 1.0); + + temp_dir = lilv_realpath("temp"); + + const char* file_dir = NULL; + char* copy_dir = NULL; + char* link_dir = NULL; + char* save_dir = NULL; + + // Get instance state state + LilvState* state = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, save_dir, + get_port_value, world, 0, NULL); + + // Get another instance state + LilvState* state2 = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, save_dir, + get_port_value, world, 0, NULL); + + // Ensure they are equal + TEST_ASSERT(lilv_state_equals(state, state2)); + + // Save state to a string + char* state1_str = lilv_state_to_string( + world, &map, &unmap, state, "http://example.org/state1", NULL); + + // Restore from string + LilvState* from_str = lilv_state_new_from_string(world, &map, state1_str); + + // Ensure they are equal + TEST_ASSERT(lilv_state_equals(state, from_str)); + free(state1_str); + + const LilvNode* state_plugin_uri = lilv_state_get_plugin_uri(state); + TEST_ASSERT(lilv_node_equals(state_plugin_uri, plugin_uri)); + + // Tinker with the label of the first state + TEST_ASSERT(lilv_state_get_label(state) == NULL); + lilv_state_set_label(state, "Test State Old Label"); + TEST_ASSERT(!strcmp(lilv_state_get_label(state), "Test State Old Label")); + lilv_state_set_label(state, "Test State"); + TEST_ASSERT(!strcmp(lilv_state_get_label(state), "Test State")); + + TEST_ASSERT(!lilv_state_equals(state, state2)); // Label changed + + // Run and get a new instance state (which should now differ) + lilv_instance_run(instance, 1); + LilvState* state3 = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, save_dir, + get_port_value, world, 0, NULL); + TEST_ASSERT(!lilv_state_equals(state2, state3)); // num_runs changed + + // Restore instance state to original state + lilv_state_restore(state2, instance, set_port_value, NULL, 0, NULL); + + // Take a new snapshot and ensure it matches the set state + LilvState* state4 = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, save_dir, + get_port_value, world, 0, NULL); + TEST_ASSERT(lilv_state_equals(state2, state4)); + + // Save state to a directory + int ret = lilv_state_save(world, &map, &unmap, state, NULL, + "state.lv2", "state.ttl"); + TEST_ASSERT(!ret); + + // Load state from directory + LilvState* state5 = lilv_state_new_from_file(world, &map, NULL, + "state.lv2/state.ttl"); + + TEST_ASSERT(lilv_state_equals(state, state5)); // Round trip accuracy + + // Save state with URI to a directory + const char* state_uri = "http://example.org/state"; + ret = lilv_state_save(world, &map, &unmap, state, state_uri, + "state6.lv2", "state6.ttl"); + TEST_ASSERT(!ret); + + // Load default bundle into world and load state from it + uint8_t* state6_path = (uint8_t*)lilv_path_absolute("state6.lv2/"); + SerdNode state6_uri = serd_node_new_file_uri(state6_path, 0, 0, true); + LilvNode* test_state_bundle = lilv_new_uri(world, (const char*)state6_uri.buf); + LilvNode* test_state_node = lilv_new_uri(world, state_uri); + lilv_world_load_bundle(world, test_state_bundle); + lilv_world_load_resource(world, test_state_node); + serd_node_free(&state6_uri); + free(state6_path); + + LilvState* state6 = lilv_state_new_from_world(world, &map, test_state_node); + TEST_ASSERT(lilv_state_equals(state, state6)); // Round trip accuracy + lilv_node_free(test_state_bundle); + lilv_node_free(test_state_node); + + unsetenv("LV2_STATE_BUNDLE"); + + // Make directories and test files support + mkdir("temp", 0700); + file_dir = temp_dir; + mkdir("files", 0700); + copy_dir = lilv_realpath("files"); + mkdir("links", 0700); + link_dir = lilv_realpath("links"); + + LV2_State_Make_Path make_path = { NULL, lilv_make_path }; + LV2_Feature make_path_feature = { LV2_STATE__makePath, &make_path }; + const LV2_Feature* ffeatures[] = { &make_path_feature, &map_feature, NULL }; + + lilv_instance_deactivate(instance); + lilv_instance_free(instance); + instance = lilv_plugin_instantiate(plugin, 48000.0, ffeatures); + lilv_instance_activate(instance); + lilv_instance_connect_port(instance, 0, &in); + lilv_instance_connect_port(instance, 1, &out); + lilv_instance_run(instance, 1); + + // Get instance state state + LilvState* fstate = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, "fstate.lv2", + get_port_value, world, 0, ffeatures); + + // Get another instance state + LilvState* fstate2 = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, "fstate2.lv2", + get_port_value, world, 0, ffeatures); + + // Should be identical + TEST_ASSERT(lilv_state_equals(fstate, fstate2)); + + // Run, writing more to rec file + lilv_instance_run(instance, 2); + + // Get yet another instance state + LilvState* fstate3 = lilv_state_new_from_instance( + plugin, instance, &map, file_dir, copy_dir, link_dir, "fstate3.lv2", + get_port_value, world, 0, ffeatures); + + // Should be different + TEST_ASSERT(!lilv_state_equals(fstate, fstate3)); + + // Save state to a directory + ret = lilv_state_save(world, &map, &unmap, fstate, NULL, + "fstate.lv2", "fstate.ttl"); + TEST_ASSERT(!ret); + + // Load state from directory + LilvState* fstate4 = lilv_state_new_from_file(world, &map, NULL, + "fstate.lv2/fstate.ttl"); + TEST_ASSERT(lilv_state_equals(fstate, fstate4)); // Round trip accuracy + + // Restore instance state to loaded state + lilv_state_restore(fstate4, instance, set_port_value, NULL, 0, ffeatures); + + // Take a new snapshot and ensure it matches + LilvState* fstate5 = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, "fstate5.lv2", + get_port_value, world, 0, ffeatures); + TEST_ASSERT(lilv_state_equals(fstate3, fstate5)); + + // Save state to a (different) directory again + ret = lilv_state_save(world, &map, &unmap, fstate, NULL, + "fstate6.lv2", "fstate6.ttl"); + TEST_ASSERT(!ret); + + // Reload it and ensure it's identical to the other loaded version + LilvState* fstate6 = lilv_state_new_from_file(world, &map, NULL, + "fstate6.lv2/fstate6.ttl"); + TEST_ASSERT(lilv_state_equals(fstate4, fstate6)); + + // Run, changing rec file (without changing size) + lilv_instance_run(instance, 3); + + // Take a new snapshot + LilvState* fstate7 = lilv_state_new_from_instance( + plugin, instance, &map, + file_dir, copy_dir, link_dir, "fstate7.lv2", + get_port_value, world, 0, ffeatures); + TEST_ASSERT(!lilv_state_equals(fstate6, fstate7)); + + // Save the changed state to a (different) directory again + ret = lilv_state_save(world, &map, &unmap, fstate7, NULL, + "fstate7.lv2", "fstate7.ttl"); + TEST_ASSERT(!ret); + + // Reload it and ensure it's changed + LilvState* fstate72 = lilv_state_new_from_file(world, &map, NULL, + "fstate7.lv2/fstate7.ttl"); + TEST_ASSERT(lilv_state_equals(fstate72, fstate7)); + TEST_ASSERT(!lilv_state_equals(fstate6, fstate72)); + + lilv_instance_deactivate(instance); + lilv_instance_free(instance); + + lilv_node_free(num); + + lilv_state_free(state); + lilv_state_free(from_str); + lilv_state_free(state2); + lilv_state_free(state3); + lilv_state_free(state4); + lilv_state_free(state5); + lilv_state_free(state6); + lilv_state_free(fstate); + lilv_state_free(fstate2); + lilv_state_free(fstate3); + lilv_state_free(fstate4); + lilv_state_free(fstate5); + lilv_state_free(fstate6); + lilv_state_free(fstate7); + lilv_state_free(fstate72); + + // Free URI map + for (size_t i = 0; i < n_uris; ++i) { + free(uris[i]); + } + free(uris); + n_uris = 0; + + lilv_node_free(plugin_uri); + lilv_node_free(bundle_uri); + free(link_dir); + free(copy_dir); + free(temp_dir); + + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int +test_bad_port_symbol(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES PREFIX_LV2EV + ":plug a lv2:Plugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "doap:homepage ; " + "lv2:port [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index 0 ; lv2:symbol \"0invalid\" ;" + " lv2:name \"Invalid\" ; " + "] .")) + return 0; + + init_uris(); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* plug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + + uint32_t n_ports = lilv_plugin_get_num_ports(plug); + TEST_ASSERT(n_ports == 0); + + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int +test_bad_port_index(void) +{ + if (!start_bundle(MANIFEST_PREFIXES + ":plug a lv2:Plugin ; lv2:binary ; rdfs:seeAlso .\n", + BUNDLE_PREFIXES PREFIX_LV2EV + ":plug a lv2:Plugin ; " + PLUGIN_NAME("Test plugin") " ; " + LICENSE_GPL " ; " + "doap:homepage ; " + "lv2:port [ " + " a lv2:ControlPort ; a lv2:InputPort ; " + " lv2:index \"notaninteger\" ; lv2:symbol \"invalid\" ;" + " lv2:name \"Invalid\" ; " + "] .")) + return 0; + + init_uris(); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* plug = lilv_plugins_get_by_uri(plugins, plugin_uri_value); + + uint32_t n_ports = lilv_plugin_get_num_ports(plug); + TEST_ASSERT(n_ports == 0); + + cleanup_uris(); + return 1; +} + +/*****************************************************************************/ + +static int +test_string(void) +{ + char* s = NULL; + + TEST_ASSERT(!strcmp((s = lilv_dirname("/foo/bar")), "/foo")); free(s); + TEST_ASSERT(!strcmp((s = lilv_dirname("/foo/bar/")), "/foo")); free(s); + TEST_ASSERT(!strcmp((s = lilv_dirname("/foo///bar/")), "/foo")); free(s); + TEST_ASSERT(!strcmp((s = lilv_dirname("/foo///bar//")), "/foo")); free(s); + TEST_ASSERT(!strcmp((s = lilv_dirname("foo")), ".")); free(s); + TEST_ASSERT(!strcmp((s = lilv_dirname("/foo")), "/")); free(s); + TEST_ASSERT(!strcmp((s = lilv_dirname("/")), "/")); free(s); + TEST_ASSERT(!strcmp((s = lilv_dirname("//")), "/")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_relative_to("/a/b", "/a/")), "b")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_relative_to("/a", "/b/c/")), "/a")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_relative_to("/a/b/c", "/a/b/d/")), "../c")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_relative_to("/a/b/c", "/a/b/d/e/")), "../../c")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_join("/a", "b")), "/a/b")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_join("/a", "/b")), "/a/b")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_join("/a/", "/b")), "/a/b")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_join("/a/", "b")), "/a/b")); free(s); + TEST_ASSERT(!strcmp((s = lilv_path_join("/a", NULL)), "/a/")); free(s); + +#ifndef _WIN32 + setenv("LILV_TEST_1", "test", 1); + char* home_foo = lilv_strjoin(getenv("HOME"), "/foo", NULL); + TEST_ASSERT(!strcmp((s = lilv_expand("$LILV_TEST_1")), "test")); free(s); + TEST_ASSERT(!strcmp((s = lilv_expand("~")), getenv("HOME"))); free(s); + TEST_ASSERT(!strcmp((s = lilv_expand("~foo")), "~foo")); free(s); + TEST_ASSERT(!strcmp((s = lilv_expand("~/foo")), home_foo)); free(s); + TEST_ASSERT(!strcmp((s = lilv_expand("$NOT_A_VAR")), "$NOT_A_VAR")); free(s); + free(home_foo); + unsetenv("LILV_TEST_1"); +#endif + + return 1; +} + +/*****************************************************************************/ + +/* add tests here */ +static struct TestCase tests[] = { + TEST_CASE(utils), + TEST_CASE(value), + TEST_CASE(verify), + TEST_CASE(no_verify), + TEST_CASE(discovery), + TEST_CASE(lv2_path), + TEST_CASE(classes), + TEST_CASE(plugin), + TEST_CASE(port), + TEST_CASE(ui), + TEST_CASE(bad_port_symbol), + TEST_CASE(bad_port_index), + TEST_CASE(bad_port_index), + TEST_CASE(string), + TEST_CASE(state), + { NULL, NULL } +}; + +static void +run_tests(void) +{ + int i; + for (i = 0; tests[i].title; i++) { + printf("*** Test %s\n", tests[i].title); + if (!tests[i].func()) { + printf("\nTest failed\n"); + /* test case that wasn't able to be executed at all counts as 1 test + 1 error */ + error_count++; + test_count++; + } + unload_bundle(); + cleanup(); + } +} + +int +main(int argc, char* argv[]) +{ + if (argc != 1) { + printf("Syntax: %s\n", argv[0]); + return 0; + } + setenv("LANG", "C", 1); + init_tests(); + run_tests(); + cleanup(); + printf("\n*** Test Results: %d tests, %d errors\n\n", test_count, error_count); + return error_count ? 1 : 0; +} diff --git a/source/libs/lilv/lilv-0.14.4/test/manifest.ttl.in b/source/libs/lilv/lilv-0.14.4/test/manifest.ttl.in new file mode 100644 index 000000000..48b009bca --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/test/manifest.ttl.in @@ -0,0 +1,7 @@ +@prefix lv2: . +@prefix rdfs: . + + + a lv2:Plugin ; + lv2:binary ; + rdfs:seeAlso . diff --git a/source/libs/lilv/lilv-0.14.4/test/test_plugin.c b/source/libs/lilv/lilv-0.14.4/test/test_plugin.c new file mode 100644 index 000000000..9f78f4e18 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/test/test_plugin.c @@ -0,0 +1,384 @@ +/* + Lilv Test Plugin + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include + +#include "lv2/lv2plug.in/ns/ext/atom/atom.h" +#include "lv2/lv2plug.in/ns/ext/state/state.h" +#include "lv2/lv2plug.in/ns/ext/urid/urid.h" +#include "lv2/lv2plug.in/ns/lv2core/lv2.h" + +#define TEST_URI "http://example.org/lilv-test-plugin" + +enum { + TEST_INPUT = 0, + TEST_OUTPUT = 1 +}; + +typedef struct { + LV2_URID_Map* map; + + struct { + LV2_URID atom_Float; + } uris; + + char* tmp_file_path; + char* rec_file_path; + FILE* rec_file; + + float* input; + float* output; + unsigned num_runs; +} Test; + +static void +cleanup(LV2_Handle instance) +{ + Test* test = (Test*)instance; + if (test->rec_file) { + fclose(test->rec_file); + } + free(test->tmp_file_path); + free(test->rec_file_path); + free(instance); +} + +static void +connect_port(LV2_Handle instance, + uint32_t port, + void* data) +{ + Test* test = (Test*)instance; + switch (port) { + case TEST_INPUT: + test->input = (float*)data; + break; + case TEST_OUTPUT: + test->output = (float*)data; + break; + default: + break; + } +} + +static LV2_Handle +instantiate(const LV2_Descriptor* descriptor, + double rate, + const char* path, + const LV2_Feature* const* features) +{ + Test* test = (Test*)malloc(sizeof(Test)); + if (!test) { + return NULL; + } + + test->map = NULL; + test->input = NULL; + test->output = NULL; + test->num_runs = 0; + test->tmp_file_path = (char*)malloc(L_tmpnam); + test->rec_file_path = NULL; + test->rec_file = NULL; + + tmpnam(test->tmp_file_path); + + LV2_State_Make_Path* make_path = NULL; + + for (int i = 0; features[i]; ++i) { + if (!strcmp(features[i]->URI, LV2_URID_URI "#map")) { + test->map = (LV2_URID_Map*)features[i]->data; + test->uris.atom_Float = test->map->map( + test->map->handle, LV2_ATOM__Float); + } else if (!strcmp(features[i]->URI, LV2_STATE__makePath)) { + make_path = (LV2_State_Make_Path*)features[i]->data; + } + } + + if (!test->map) { + fprintf(stderr, "Host does not support urid:map\n"); + free(test); + return NULL; + } + + if (make_path) { + test->rec_file_path = make_path->path(make_path->handle, "recfile"); + if (!(test->rec_file = fopen(test->rec_file_path, "w"))) { + fprintf(stderr, "ERROR: Failed to open rec file\n"); + } + fprintf(test->rec_file, "instantiate\n"); + } + + return (LV2_Handle)test; +} + +static void +run(LV2_Handle instance, + uint32_t sample_count) +{ + Test* test = (Test*)instance; + *test->output = *test->input; + if (sample_count == 1) { + ++test->num_runs; + } else if (sample_count == 2 && test->rec_file) { + // Append to rec file (changes size) + fprintf(test->rec_file, "run\n"); + } else if (sample_count == 3 && test->rec_file) { + // Change the first byte of rec file (doesn't change size) + fseek(test->rec_file, 0, SEEK_SET); + fprintf(test->rec_file, "X"); + fseek(test->rec_file, 0, SEEK_END); + } +} + +static uint32_t +map_uri(Test* plugin, const char* uri) +{ + return plugin->map->map(plugin->map->handle, uri); +} + +static LV2_State_Status +save(LV2_Handle instance, + LV2_State_Store_Function store, + void* callback_data, + uint32_t flags, + const LV2_Feature* const* features) +{ + Test* plugin = (Test*)instance; + + LV2_State_Map_Path* map_path = NULL; + LV2_State_Make_Path* make_path = NULL; + for (int i = 0; features && features[i]; ++i) { + if (!strcmp(features[i]->URI, LV2_STATE__mapPath)) { + map_path = (LV2_State_Map_Path*)features[i]->data; + } else if (!strcmp(features[i]->URI, LV2_STATE__makePath)) { + make_path = (LV2_State_Make_Path*)features[i]->data; + } + } + + store(callback_data, + map_uri(plugin, "http://example.org/greeting"), + "hello", + strlen("hello") + 1, + map_uri(plugin, LV2_ATOM__String), + LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); + + const uint32_t urid = map_uri(plugin, "http://example.org/urivalue"); + store(callback_data, + map_uri(plugin, "http://example.org/uri"), + &urid, + sizeof(uint32_t), + map_uri(plugin, LV2_ATOM__URID), + LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); + + store(callback_data, + map_uri(plugin, "http://example.org/num-runs"), + &plugin->num_runs, + sizeof(plugin->num_runs), + map_uri(plugin, LV2_ATOM__Int), + LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); + + const float two = 2.0f; + store(callback_data, + map_uri(plugin, "http://example.org/two"), + &two, + sizeof(two), + map_uri(plugin, LV2_ATOM__Float), + LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); + + const uint32_t affirmative = 1; + store(callback_data, + map_uri(plugin, "http://example.org/true"), + &affirmative, + sizeof(affirmative), + map_uri(plugin, LV2_ATOM__Bool), + LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); + + const uint32_t negative = 0; + store(callback_data, + map_uri(plugin, "http://example.org/false"), + &negative, + sizeof(negative), + map_uri(plugin, LV2_ATOM__Bool), + LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); + + const uint8_t blob[] = "I am a blob of arbitrary data."; + store(callback_data, + map_uri(plugin, "http://example.org/blob"), + blob, + sizeof(blob), + map_uri(plugin, "http://example.org/SomeUnknownType"), + LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); + + if (map_path) { + FILE* file = fopen(plugin->tmp_file_path, "w"); + fprintf(file, "Hello\n"); + fclose(file); + char* apath = map_path->abstract_path(map_path->handle, + plugin->tmp_file_path); + char* apath2 = map_path->abstract_path(map_path->handle, + plugin->tmp_file_path); + if (strcmp(apath, apath2)) { + fprintf(stderr, "ERROR: Path %s != %s\n", apath, apath2); + } + + store(callback_data, + map_uri(plugin, "http://example.org/extfile"), + apath, + strlen(apath) + 1, + map_uri(plugin, LV2_ATOM__Path), + LV2_STATE_IS_PORTABLE); + + free(apath); + free(apath2); + + if (plugin->rec_file) { + fflush(plugin->rec_file); + apath = map_path->abstract_path(map_path->handle, + plugin->rec_file_path); + + store(callback_data, + map_uri(plugin, "http://example.org/recfile"), + apath, + strlen(apath) + 1, + map_uri(plugin, LV2_ATOM__Path), + LV2_STATE_IS_PORTABLE); + + free(apath); + } + + if (make_path) { + char* spath = make_path->path(make_path->handle, "save"); + FILE* sfile = fopen(spath, "w"); + fprintf(sfile, "save"); + fclose(sfile); + + apath = map_path->abstract_path(map_path->handle, spath); + store(callback_data, + map_uri(plugin, "http://example.org/save-file"), + apath, + strlen(apath) + 1, + map_uri(plugin, LV2_ATOM__Path), + LV2_STATE_IS_PORTABLE); + free(apath); + free(spath); + } + } + + return LV2_STATE_SUCCESS; +} + +static LV2_State_Status +restore(LV2_Handle instance, + LV2_State_Retrieve_Function retrieve, + void* callback_data, + uint32_t flags, + const LV2_Feature* const* features) +{ + Test* plugin = (Test*)instance; + + LV2_State_Map_Path* map_path = NULL; + for (int i = 0; features && features[i]; ++i) { + if (!strcmp(features[i]->URI, LV2_STATE__mapPath)) { + map_path = (LV2_State_Map_Path*)features[i]->data; + } + } + + size_t size; + uint32_t type; + uint32_t valflags; + + plugin->num_runs = *(int32_t*)retrieve( + callback_data, + map_uri(plugin, "http://example.org/num-runs"), + &size, &type, &valflags); + + if (!map_path) { + return LV2_STATE_ERR_NO_FEATURE; + } + + char* apath = (char*)retrieve( + callback_data, + map_uri(plugin, "http://example.org/extfile"), + &size, &type, &valflags); + + if (apath) { + char* path = map_path->absolute_path(map_path->handle, apath); + FILE* f = fopen(path, "r"); + char str[8]; + size_t n_read = fread(str, 1, sizeof(str), f); + fclose(f); + if (strncmp(str, "Hello\n", n_read)) { + fprintf(stderr, "error: Restored bad file contents `%s' != `Hello'\n", + str); + } + free(path); + } + + apath = (char*)retrieve( + callback_data, + map_uri(plugin, "http://example.org/save-file"), + &size, &type, &valflags); + if (apath) { + char* spath = map_path->absolute_path(map_path->handle, apath); + FILE* sfile = fopen(spath, "r"); + if (!sfile) { + fprintf(stderr, "error: Failed to open save file %s\n", spath); + } else { + fclose(sfile); + } + free(spath); + } else { + fprintf(stderr, "error: Failed to restore save file.\n"); + } + + return LV2_STATE_SUCCESS; +} + +static const void* +extension_data(const char* uri) +{ + static const LV2_State_Interface state = { save, restore }; + if (!strcmp(uri, LV2_STATE__interface)) { + return &state; + } + return NULL; +} + +static const LV2_Descriptor descriptor = { + TEST_URI, + instantiate, + connect_port, + NULL, // activate, + run, + NULL, // deactivate, + cleanup, + extension_data +}; + +LV2_SYMBOL_EXPORT +const LV2_Descriptor* lv2_descriptor(uint32_t index) +{ + switch (index) { + case 0: + return &descriptor; + default: + return NULL; + } +} diff --git a/source/libs/lilv/lilv-0.14.4/test/test_plugin.ttl.in b/source/libs/lilv/lilv-0.14.4/test/test_plugin.ttl.in new file mode 100644 index 000000000..704f815b6 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/test/test_plugin.ttl.in @@ -0,0 +1,40 @@ +# Lilv Test Plugin +# Copyright 2011 David Robillard +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix ui: . + + + a lv2:Plugin ; + doap:name "Lilv Test" ; + doap:license ; + lv2:requiredFeature ; + lv2:optionalFeature lv2:hardRTCapable ; + lv2:extensionData ; + lv2:port [ + a lv2:InputPort , + lv2:ControlPort ; + lv2:index 0 ; + lv2:symbol "input" ; + lv2:name "Input" + ] , [ + a lv2:OutputPort , + lv2:ControlPort ; + lv2:index 1 ; + lv2:symbol "output" ; + lv2:name "Output" + ] . diff --git a/source/libs/lilv/lilv-0.14.4/utils/bench.h b/source/libs/lilv/lilv-0.14.4/utils/bench.h new file mode 100644 index 000000000..948622c01 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/utils/bench.h @@ -0,0 +1,52 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file bench.h A simple real-time benchmarking API. +*/ + +#ifndef BENCH_H +#define BENCH_H + +#define _POSIX_C_SOURCE 199309L + +#include +#include + +static inline double +bench_elapsed_s(const struct timespec* start, const struct timespec* end) +{ + return ((end->tv_sec - start->tv_sec) + + ((end->tv_nsec - start->tv_nsec) * 0.000000001)); +} + +static inline struct timespec +bench_start() +{ + struct timespec start_t; + clock_gettime(CLOCK_REALTIME, &start_t); + return start_t; +} + +static inline double +bench_end(const struct timespec* start_t) +{ + struct timespec end_t; + clock_gettime(CLOCK_REALTIME, &end_t); + return bench_elapsed_s(start_t, &end_t); +} + +#endif /* BENCH_H */ diff --git a/source/libs/lilv/lilv-0.14.4/utils/lilv-bench.c b/source/libs/lilv/lilv-0.14.4/utils/lilv-bench.c new file mode 100644 index 000000000..432e5fd3c --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/utils/lilv-bench.c @@ -0,0 +1,38 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include + +#include "lilv/lilv.h" + +#include "lilv_config.h" + +int +main(int argc, char** argv) +{ + LilvWorld* world = lilv_world_new(); + lilv_world_load_all(world); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + LILV_FOREACH(plugins, p, plugins) { + const LilvPlugin* plugin = lilv_plugins_get(plugins, p); + lilv_plugin_get_class(plugin); + } + + lilv_world_free(world); + + return 0; +} diff --git a/source/libs/lilv/lilv-0.14.4/utils/lilv.bash_completion b/source/libs/lilv/lilv-0.14.4/utils/lilv.bash_completion new file mode 100644 index 000000000..4a553a713 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/utils/lilv.bash_completion @@ -0,0 +1,59 @@ +# Bash auto-completion script written for lv2info and lv2jack. +# Could be adapted to any other program that takes an +# LV2 plugin URI as parameter. + +# Updated for Lilv by David Robillard on 2012-01-08. +# Written by Lars Luthman on 2009-10-12. +# No copyright claimed for this script. Do what you want with it. + +# For some reason Bash splits the command line not only at whitespace +# but also at ':' signs before putting the parts into COMP_WORDS. +# Since ':' is used in all URIs, which are what we want to complete, +# we have to put the URI back together before we can complete it +# and then cut off the parts we prepended from the completions. +# It probably breaks in some special cases but for most common uses +# it should work fine. + +function _lv2info() { + local uri cur opts w wn raw_reply len type + opts=`lv2ls | xargs -n1 echo -n " "` + + # This is the last "word", as split by Bash. + cur="${COMP_WORDS[COMP_CWORD]}" + w="$cur" + + # Add the previous word while it or this one is a word break character + for i in `seq $(( $COMP_CWORD - 1 )) -1 1`; do + wn="${COMP_WORDS[i]}" + if expr "$COMP_WORDBREAKS" : ".*$wn" > /dev/null; then + if expr "$COMP_WORDBREAKS" : ".*$w" > /dev/null; then + break + fi + fi + w="$wn" + uri="$w$uri" + done + + # Check the length of the words we prepend + len=${#uri} + uri="$uri$cur" + raw_reply="$(compgen -W "${opts}" -- ${uri})" + + # If we are listing alternatives, just print the full URIs. + type=`echo $COMP_TYPE | awk '{ printf "%c", $1 }'` + if expr "?!@%" : ".*$type" > /dev/null; then + COMPREPLY=( $raw_reply ) + return 0 + fi + + # Otherwise, strip the prepended words from all completion suggestions. + COMPREPLY=() + for i in $raw_reply; do + COMPREPLY=( ${COMPREPLY[@]} ${i:len} ) + done +} + +complete -F _lv2info lv2info + +# And the same for lv2jack. +complete -F _lv2info lv2jack diff --git a/source/libs/lilv/lilv-0.14.4/utils/lv2bench.c b/source/libs/lilv/lilv-0.14.4/utils/lv2bench.c new file mode 100644 index 000000000..30a4aafd1 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/utils/lv2bench.c @@ -0,0 +1,226 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#define _POSIX_C_SOURCE 199309L + +#include +#include +#include + +#include "lilv/lilv.h" +#include "lv2/lv2plug.in/ns/ext/atom/atom.h" + +#include "lilv_config.h" +#include "bench.h" +#include "uri_table.h" + +static LilvNode* atom_AtomPort = NULL; +static LilvNode* atom_Sequence = NULL; +static LilvNode* lv2_AudioPort = NULL; +static LilvNode* lv2_CVPort = NULL; +static LilvNode* lv2_ControlPort = NULL; +static LilvNode* lv2_InputPort = NULL; +static LilvNode* lv2_OutputPort = NULL; +static LilvNode* urid_map = NULL; + +static bool full_output = false; + +static void +print_version(void) +{ + printf( + "lv2bench (lilv) " LILV_VERSION "\n" + "Copyright 2012 David Robillard \n" + "License: \n" + "This is free software: you are free to change and redistribute it.\n" + "There is NO WARRANTY, to the extent permitted by law.\n"); +} + +static void +print_usage(void) +{ + printf("lv2bench - Benchmark all installed and supported LV2 plugins.\n"); + printf("Usage: lv2bench [OPTIONS]\n"); + printf("\n"); + printf(" -b BLOCK_SIZE Specify block size, in audio frames.\n"); + printf(" -f, --full Full plottable output.\n"); + printf(" -h, --help Display this help and exit.\n"); + printf(" -n FRAMES Total number of audio frames to process\n"); + printf(" --version Display version information and exit\n"); +} + +static double +bench(const LilvPlugin* p, uint32_t sample_count, uint32_t block_size) +{ + URITable uri_table; + uri_table_init(&uri_table); + + LV2_URID_Map map = { &uri_table, uri_table_map }; + LV2_Feature map_feature = { LV2_URID_MAP_URI, &map }; + LV2_URID_Unmap unmap = { &uri_table, uri_table_unmap }; + LV2_Feature unmap_feature = { LV2_URID_UNMAP_URI, &unmap }; + const LV2_Feature* features[] = { &map_feature, &unmap_feature, NULL }; + + float* const buf = (float*)calloc(block_size * 2, sizeof(float)); + float* const in = buf; + float* const out = buf + block_size; + if (!buf) { + fprintf(stderr, "Out of memory\n"); + return 0.0; + } + + LV2_Atom_Sequence seq = { + { sizeof(LV2_Atom_Sequence_Body), + uri_table_map(&uri_table, LV2_ATOM__Sequence) }, + { 0, 0 } }; + + const char* uri = lilv_node_as_string(lilv_plugin_get_uri(p)); + LilvNodes* required = lilv_plugin_get_required_features(p); + LILV_FOREACH(nodes, i, required) { + const LilvNode* feature = lilv_nodes_get(required, i); + if (!lilv_node_equals(feature, urid_map)) { + fprintf(stderr, "<%s> requires feature <%s>, skipping\n", + uri, lilv_node_as_uri(feature)); + free(buf); + return 0.0; + } + } + + LilvInstance* instance = lilv_plugin_instantiate(p, 48000.0, features); + if (!instance) { + fprintf(stderr, "Failed to instantiate <%s>\n", + lilv_node_as_uri(lilv_plugin_get_uri(p))); + free(buf); + return 0.0; + } + + float* controls = (float*)calloc( + lilv_plugin_get_num_ports(p), sizeof(float)); + lilv_plugin_get_port_ranges_float(p, NULL, NULL, controls); + + const uint32_t n_ports = lilv_plugin_get_num_ports(p); + for (uint32_t index = 0; index < n_ports; ++index) { + const LilvPort* port = lilv_plugin_get_port_by_index(p, index); + if (lilv_port_is_a(p, port, lv2_ControlPort)) { + lilv_instance_connect_port(instance, index, &controls[index]); + } else if (lilv_port_is_a(p, port, lv2_AudioPort) || + lilv_port_is_a(p, port, lv2_CVPort)) { + if (lilv_port_is_a(p, port, lv2_InputPort)) { + lilv_instance_connect_port(instance, index, in); + } else if (lilv_port_is_a(p, port, lv2_OutputPort)) { + lilv_instance_connect_port(instance, index, out); + } else { + fprintf(stderr, "<%s> port %d neither input nor output, skipping\n", + uri, index); + lilv_instance_free(instance); + free(buf); + free(controls); + return 0.0; + } + } else if (lilv_port_is_a(p, port, atom_AtomPort)) { + lilv_instance_connect_port(instance, index, &seq); + } else { + fprintf(stderr, "<%s> port %d has unknown type, skipping\n", + uri, index); + lilv_instance_free(instance); + free(buf); + free(controls); + return 0.0; + } + } + + lilv_instance_activate(instance); + + struct timespec ts = bench_start(); + for (uint32_t i = 0; i < (sample_count / block_size); ++i) { + lilv_instance_run(instance, block_size); + } + const double elapsed = bench_end(&ts); + + lilv_instance_deactivate(instance); + lilv_instance_free(instance); + + uri_table_destroy(&uri_table); + + if (full_output) { + printf("%d %d ", block_size, sample_count); + } + printf("%lf %s\n", elapsed, uri); + + free(buf); + free(controls); + return elapsed; +} + +int +main(int argc, char** argv) +{ + uint32_t block_size = 512; + uint32_t sample_count = (1 << 19); + + for (int i = 1; i < argc; ++i) { + if (!strcmp(argv[i], "--version")) { + print_version(); + return 0; + } else if (!strcmp(argv[i], "--help")) { + print_usage(); + return 0; + } else if (!strcmp(argv[i], "-f")) { + full_output = true; + } else if (!strcmp(argv[i], "-n") && (i + 1 < argc)) { + sample_count = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-b") && (i + 1 < argc)) { + block_size = atoi(argv[++i]); + } else { + print_usage(); + return 1; + } + } + + LilvWorld* world = lilv_world_new(); + lilv_world_load_all(world); + + atom_AtomPort = lilv_new_uri(world, LV2_ATOM__AtomPort); + atom_Sequence = lilv_new_uri(world, LV2_ATOM__Sequence); + lv2_AudioPort = lilv_new_uri(world, LV2_CORE__AudioPort); + lv2_CVPort = lilv_new_uri(world, LV2_CORE__CVPort); + lv2_ControlPort = lilv_new_uri(world, LV2_CORE__ControlPort); + lv2_InputPort = lilv_new_uri(world, LV2_CORE__InputPort); + lv2_OutputPort = lilv_new_uri(world, LV2_CORE__OutputPort); + urid_map = lilv_new_uri(world, LV2_URID__map); + + if (full_output) { + printf("# Block Samples Time Plugin\n"); + } + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + LILV_FOREACH(plugins, i, plugins) { + bench(lilv_plugins_get(plugins, i), sample_count, block_size); + } + + lilv_node_free(urid_map); + lilv_node_free(lv2_OutputPort); + lilv_node_free(lv2_InputPort); + lilv_node_free(lv2_ControlPort); + lilv_node_free(lv2_CVPort); + lilv_node_free(lv2_AudioPort); + lilv_node_free(atom_Sequence); + lilv_node_free(atom_AtomPort); + + lilv_world_free(world); + + return 0; +} diff --git a/source/libs/lilv/lilv-0.14.4/utils/lv2info.c b/source/libs/lilv/lilv-0.14.4/utils/lv2info.c new file mode 100644 index 000000000..3dc7a09bf --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/utils/lv2info.c @@ -0,0 +1,437 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include +#include + +#include "lv2/lv2plug.in/ns/ext/port-groups/port-groups.h" +#include "lv2/lv2plug.in/ns/ext/presets/presets.h" +#include "lv2/lv2plug.in/ns/ext/event/event.h" + +#include "lilv/lilv.h" + +#include "lilv_config.h" + +#ifdef _MSC_VER +# define isnan _isnan +#endif + +LilvNode* applies_to_pred = NULL; +LilvNode* control_class = NULL; +LilvNode* event_class = NULL; +LilvNode* group_pred = NULL; +LilvNode* label_pred = NULL; +LilvNode* preset_class = NULL; +LilvNode* designation_pred = NULL; +LilvNode* supports_event_pred = NULL; + +static void +print_port(const LilvPlugin* p, + uint32_t index, + float* mins, + float* maxes, + float* defaults) +{ + const LilvPort* port = lilv_plugin_get_port_by_index(p, index); + + printf("\n\tPort %d:\n", index); + + if (!port) { + printf("\t\tERROR: Illegal/nonexistent port\n"); + return; + } + + bool first = true; + + const LilvNodes* classes = lilv_port_get_classes(p, port); + printf("\t\tType: "); + LILV_FOREACH(nodes, i, classes) { + const LilvNode* value = lilv_nodes_get(classes, i); + if (!first) { + printf("\n\t\t "); + } + printf("%s", lilv_node_as_uri(value)); + first = false; + } + + if (lilv_port_is_a(p, port, event_class)) { + LilvNodes* supported = lilv_port_get_value( + p, port, supports_event_pred); + if (lilv_nodes_size(supported) > 0) { + printf("\n\t\tSupported events:\n"); + LILV_FOREACH(nodes, i, supported) { + const LilvNode* value = lilv_nodes_get(supported, i); + printf("\t\t\t%s\n", lilv_node_as_uri(value)); + } + } + lilv_nodes_free(supported); + } + + LilvScalePoints* points = lilv_port_get_scale_points(p, port); + if (points) + printf("\n\t\tScale Points:\n"); + LILV_FOREACH(scale_points, i, points) { + const LilvScalePoint* point = lilv_scale_points_get(points, i); + printf("\t\t\t%s = \"%s\"\n", + lilv_node_as_string(lilv_scale_point_get_value(point)), + lilv_node_as_string(lilv_scale_point_get_label(point))); + } + lilv_scale_points_free(points); + + const LilvNode* sym = lilv_port_get_symbol(p, port); + printf("\n\t\tSymbol: %s\n", lilv_node_as_string(sym)); + + LilvNode* name = lilv_port_get_name(p, port); + printf("\t\tName: %s\n", lilv_node_as_string(name)); + lilv_node_free(name); + + LilvNodes* groups = lilv_port_get_value(p, port, group_pred); + if (lilv_nodes_size(groups) > 0) { + printf("\t\tGroup: %s\n", + lilv_node_as_string(lilv_nodes_get_first(groups))); + } + lilv_nodes_free(groups); + + LilvNodes* designations = lilv_port_get_value(p, port, designation_pred); + if (lilv_nodes_size(designations) > 0) { + printf("\t\tDesignation: %s\n", + lilv_node_as_string(lilv_nodes_get_first(designations))); + } + lilv_nodes_free(designations); + + if (lilv_port_is_a(p, port, control_class)) { + if (!isnan(mins[index])) + printf("\t\tMinimum: %f\n", mins[index]); + if (!isnan(mins[index])) + printf("\t\tMaximum: %f\n", maxes[index]); + if (!isnan(mins[index])) + printf("\t\tDefault: %f\n", defaults[index]); + } + + LilvNodes* properties = lilv_port_get_properties(p, port); + if (lilv_nodes_size(properties) > 0) + printf("\t\tProperties: "); + first = true; + LILV_FOREACH(nodes, i, properties) { + if (!first) { + printf("\t\t "); + } + printf("%s\n", lilv_node_as_uri(lilv_nodes_get(properties, i))); + first = false; + } + if (lilv_nodes_size(properties) > 0) + printf("\n"); + lilv_nodes_free(properties); +} + +static void +print_plugin(LilvWorld* world, + const LilvPlugin* p) +{ + LilvNode* val = NULL; + + printf("%s\n\n", lilv_node_as_uri(lilv_plugin_get_uri(p))); + + val = lilv_plugin_get_name(p); + if (val) { + printf("\tName: %s\n", lilv_node_as_string(val)); + lilv_node_free(val); + } + + const LilvPluginClass* pclass = lilv_plugin_get_class(p); + const LilvNode* class_label = lilv_plugin_class_get_label(pclass); + if (class_label) { + printf("\tClass: %s\n", lilv_node_as_string(class_label)); + } + + val = lilv_plugin_get_author_name(p); + if (val) { + printf("\tAuthor: %s\n", lilv_node_as_string(val)); + lilv_node_free(val); + } + + val = lilv_plugin_get_author_email(p); + if (val) { + printf("\tAuthor Email: %s\n", lilv_node_as_uri(val)); + lilv_node_free(val); + } + + val = lilv_plugin_get_author_homepage(p); + if (val) { + printf("\tAuthor Homepage: %s\n", lilv_node_as_uri(val)); + lilv_node_free(val); + } + + if (lilv_plugin_has_latency(p)) { + uint32_t latency_port = lilv_plugin_get_latency_port_index(p); + printf("\tHas latency: yes, reported by port %d\n", latency_port); + } else { + printf("\tHas latency: no\n"); + } + + printf("\tBundle: %s\n", + lilv_node_as_uri(lilv_plugin_get_bundle_uri(p))); + + const LilvNode* binary_uri = lilv_plugin_get_library_uri(p); + if (binary_uri) { + printf("\tBinary: %s\n", + lilv_node_as_uri(lilv_plugin_get_library_uri(p))); + } + + LilvUIs* uis = lilv_plugin_get_uis(p); + if (lilv_nodes_size(uis) > 0) { + printf("\tUIs:\n"); + LILV_FOREACH(uis, i, uis) { + const LilvUI* ui = lilv_uis_get(uis, i); + printf("\t\t%s\n", lilv_node_as_uri(lilv_ui_get_uri(ui))); + + const char* binary = lilv_node_as_uri(lilv_ui_get_binary_uri(ui)); + + const LilvNodes* types = lilv_ui_get_classes(ui); + LILV_FOREACH(nodes, t, types) { + printf("\t\t\tClass: %s\n", + lilv_node_as_uri(lilv_nodes_get(types, t))); + } + + if (binary) + printf("\t\t\tBinary: %s\n", binary); + + printf("\t\t\tBundle: %s\n", + lilv_node_as_uri(lilv_ui_get_bundle_uri(ui))); + } + } + lilv_uis_free(uis); + + printf("\tData URIs: "); + const LilvNodes* data_uris = lilv_plugin_get_data_uris(p); + bool first = true; + LILV_FOREACH(nodes, i, data_uris) { + if (!first) { + printf("\n\t "); + } + printf("%s", lilv_node_as_uri(lilv_nodes_get(data_uris, i))); + first = false; + } + printf("\n"); + + /* Required Features */ + + LilvNodes* features = lilv_plugin_get_required_features(p); + if (features) + printf("\tRequired Features: "); + first = true; + LILV_FOREACH(nodes, i, features) { + if (!first) { + printf("\n\t "); + } + printf("%s", lilv_node_as_uri(lilv_nodes_get(features, i))); + first = false; + } + if (features) + printf("\n"); + lilv_nodes_free(features); + + /* Optional Features */ + + features = lilv_plugin_get_optional_features(p); + if (features) + printf("\tOptional Features: "); + first = true; + LILV_FOREACH(nodes, i, features) { + if (!first) { + printf("\n\t "); + } + printf("%s", lilv_node_as_uri(lilv_nodes_get(features, i))); + first = false; + } + if (features) + printf("\n"); + lilv_nodes_free(features); + + /* Extension Data */ + + LilvNodes* data = lilv_plugin_get_extension_data(p); + if (data) + printf("\tExtension Data: "); + first = true; + LILV_FOREACH(nodes, i, data) { + if (!first) { + printf("\n\t "); + } + printf("%s", lilv_node_as_uri(lilv_nodes_get(data, i))); + first = false; + } + if (data) + printf("\n"); + lilv_nodes_free(data); + + /* Presets */ + + LilvNodes* presets = lilv_plugin_get_related(p, preset_class); + if (presets) + printf("\tPresets: \n"); + LILV_FOREACH(nodes, i, presets) { + const LilvNode* preset = lilv_nodes_get(presets, i); + lilv_world_load_resource(world, preset); + LilvNodes* titles = lilv_world_find_nodes( + world, preset, label_pred, NULL); + if (titles) { + const LilvNode* title = lilv_nodes_get_first(titles); + printf("\t %s\n", lilv_node_as_string(title)); + lilv_nodes_free(titles); + } else { + fprintf(stderr, "Preset <%s> has no rdfs:label\n", + lilv_node_as_string(lilv_nodes_get(presets, i))); + } + } + lilv_nodes_free(presets); + + /* Ports */ + + const uint32_t num_ports = lilv_plugin_get_num_ports(p); + float* mins = (float*)calloc(num_ports, sizeof(float)); + float* maxes = (float*)calloc(num_ports, sizeof(float)); + float* defaults = (float*)calloc(num_ports, sizeof(float)); + lilv_plugin_get_port_ranges_float(p, mins, maxes, defaults); + + for (uint32_t i = 0; i < num_ports; ++i) + print_port(p, i, mins, maxes, defaults); + + free(mins); + free(maxes); + free(defaults); +} + +static void +print_version(void) +{ + printf( + "lv2info (lilv) " LILV_VERSION "\n" + "Copyright 2007-2011 David Robillard \n" + "License: \n" + "This is free software: you are free to change and redistribute it.\n" + "There is NO WARRANTY, to the extent permitted by law.\n"); +} + +static void +print_usage(void) +{ + printf( + "Usage: lv2info [OPTION]... PLUGIN_URI\n" + "Print information about an installed LV2 plugin.\n\n" + " -p FILE Write Turtle description of plugin to FILE\n" + " -m FILE Add record of plugin to manifest FILE\n" + " --help Display this help and exit\n" + " --version Display version information and exit\n\n" + "For -p and -m, Turtle files are appended to (not overwritten),\n" + "and @prefix directives are only written if the file was empty.\n" + "This allows several plugins to be added to a single file.\n"); +} + +int +main(int argc, char** argv) +{ + if (argc == 1) { + print_usage(); + return 1; + } + + const char* plugin_file = NULL; + const char* manifest_file = NULL; + const char* plugin_uri = NULL; + for (int i = 1; i < argc; ++i) { + if (!strcmp(argv[i], "--version")) { + print_version(); + return 0; + } else if (!strcmp(argv[i], "--help")) { + print_usage(); + return 0; + } else if (!strcmp(argv[i], "-p")) { + plugin_file = argv[++i]; + } else if (!strcmp(argv[i], "-m")) { + manifest_file = argv[++i]; + } else if (argv[i][0] == '-') { + print_usage(); + return 1; + } else if (i == argc - 1) { + plugin_uri = argv[i]; + } + } + + int ret = 0; + + LilvWorld* world = lilv_world_new(); + lilv_world_load_all(world); + + LilvNode* uri = lilv_new_uri(world, plugin_uri); + if (!uri) { + fprintf(stderr, "Invalid plugin URI\n"); + lilv_world_free(world); + return 1; + } + + applies_to_pred = lilv_new_uri(world, LV2_CORE__appliesTo); + control_class = lilv_new_uri(world, LILV_URI_CONTROL_PORT); + event_class = lilv_new_uri(world, LILV_URI_EVENT_PORT); + group_pred = lilv_new_uri(world, LV2_PORT_GROUPS__group); + label_pred = lilv_new_uri(world, LILV_NS_RDFS "label"); + preset_class = lilv_new_uri(world, LV2_PRESETS__Preset); + designation_pred = lilv_new_uri(world, LV2_CORE__designation); + supports_event_pred = lilv_new_uri(world, LV2_EVENT__supportsEvent); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + const LilvPlugin* p = lilv_plugins_get_by_uri(plugins, uri); + + if (p && plugin_file) { + LilvNode* base = lilv_new_uri(world, plugin_file); + + FILE* plugin_fd = fopen(plugin_file, "a"); + lilv_plugin_write_description(world, p, base, plugin_fd); + fclose(plugin_fd); + + if (manifest_file) { + FILE* manifest_fd = fopen(manifest_file, "a"); + lilv_plugin_write_manifest_entry( + world, p, base, manifest_fd, plugin_file); + fclose(manifest_fd); + } + lilv_node_free(base); + } else if (p) { + print_plugin(world, p); + } else { + fprintf(stderr, "Plugin not found.\n"); + } + + ret = (p != NULL ? 0 : -1); + + lilv_node_free(uri); + + lilv_node_free(supports_event_pred); + lilv_node_free(designation_pred); + lilv_node_free(preset_class); + lilv_node_free(label_pred); + lilv_node_free(group_pred); + lilv_node_free(event_class); + lilv_node_free(control_class); + lilv_node_free(applies_to_pred); + + lilv_world_free(world); + return ret; +} + diff --git a/source/libs/lilv/lilv-0.14.4/utils/lv2ls.c b/source/libs/lilv/lilv-0.14.4/utils/lv2ls.c new file mode 100644 index 000000000..6f898d5f9 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/utils/lv2ls.c @@ -0,0 +1,93 @@ +/* + Copyright 2007-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include + +#include "lilv/lilv.h" + +#include "lilv_config.h" + +static void +list_plugins(const LilvPlugins* list, bool show_names) +{ + LILV_FOREACH(plugins, i, list) { + const LilvPlugin* p = lilv_plugins_get(list, i); + if (show_names) { + LilvNode* n = lilv_plugin_get_name(p); + printf("%s\n", lilv_node_as_string(n)); + lilv_node_free(n); + } else { + printf("%s\n", lilv_node_as_uri(lilv_plugin_get_uri(p))); + } + } +} + +static void +print_version(void) +{ + printf( + "lv2ls (lilv) " LILV_VERSION "\n" + "Copyright 2007-2011 David Robillard \n" + "License: \n" + "This is free software: you are free to change and redistribute it.\n" + "There is NO WARRANTY, to the extent permitted by law.\n"); +} + +static void +print_usage(void) +{ + printf("Usage: lv2ls [OPTION]...\n"); + printf("List all installed LV2 plugins.\n"); + printf("\n"); + printf(" -n, --names Show names instead of URIs\n"); + printf(" --help Display this help and exit\n"); + printf(" --version Display version information and exit\n"); + printf("\n"); + printf("The environment variable LV2_PATH can be used to control where\n"); + printf("this (and all other lilv based LV2 hosts) will search for plugins.\n"); +} + +int +main(int argc, char** argv) +{ + bool show_names = false; + for (int i = 1; i < argc; ++i) { + if (!strcmp(argv[i], "--names") || !strcmp(argv[i], "-n")) { + show_names = true; + } else if (!strcmp(argv[i], "--version")) { + print_version(); + return 0; + } else if (!strcmp(argv[i], "--help")) { + print_usage(); + return 0; + } else { + print_usage(); + return 1; + } + } + + LilvWorld* world = lilv_world_new(); + lilv_world_load_all(world); + + const LilvPlugins* plugins = lilv_world_get_all_plugins(world); + + list_plugins(plugins, show_names); + + lilv_world_free(world); + + return 0; +} diff --git a/source/libs/lilv/lilv-0.14.4/utils/uri_table.h b/source/libs/lilv/lilv-0.14.4/utils/uri_table.h new file mode 100644 index 000000000..6a27c6106 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/utils/uri_table.h @@ -0,0 +1,73 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file uri_table.h A toy URI map/unmap implementation. + + This file contains function definitions and must only be included once. +*/ + +#ifndef URI_TABLE_H +#define URI_TABLE_H + +typedef struct { + char** uris; + size_t n_uris; +} URITable; + +static void +uri_table_init(URITable* table) +{ + table->uris = NULL; + table->n_uris = 0; +} + +static void +uri_table_destroy(URITable* table) +{ + free(table->uris); +} + +static LV2_URID +uri_table_map(LV2_URID_Map_Handle handle, + const char* uri) +{ + URITable* table = (URITable*)handle; + for (size_t i = 0; i < table->n_uris; ++i) { + if (!strcmp(table->uris[i], uri)) { + return i + 1; + } + } + + const size_t len = strlen(uri); + table->uris = (char**)realloc(table->uris, ++table->n_uris * sizeof(char*)); + table->uris[table->n_uris - 1] = malloc(len + 1); + memcpy(table->uris[table->n_uris - 1], uri, len + 1); + return table->n_uris; +} + +static const char* +uri_table_unmap(LV2_URID_Map_Handle handle, + LV2_URID urid) +{ + URITable* table = (URITable*)handle; + if (urid > 0 && urid <= table->n_uris) { + return table->uris[urid - 1]; + } + return NULL; +} + +#endif /* URI_TABLE_H */ diff --git a/source/libs/lilv/lilv-0.14.4/waf b/source/libs/lilv/lilv-0.14.4/waf new file mode 100755 index 0000000000000000000000000000000000000000..3088b02b08b876672d8dfb2aecec7139056451ff GIT binary patch literal 72589 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 literal 0 HcmV?d00001 diff --git a/source/libs/lilv/lilv-0.14.4/wscript b/source/libs/lilv/lilv-0.14.4/wscript new file mode 100644 index 000000000..46f298b73 --- /dev/null +++ b/source/libs/lilv/lilv-0.14.4/wscript @@ -0,0 +1,378 @@ +#!/usr/bin/env python +import os +import sys +import subprocess + +from waflib.extras import autowaf as autowaf +import waflib.Options as Options + +# Version of this package (even if built as a child) +LILV_VERSION = '0.14.4' +LILV_MAJOR_VERSION = '0' + +# Library version (UNIX style major, minor, micro) +# major increment <=> incompatible changes +# minor increment <=> compatible changes (additions) +# micro increment <=> no interface changes +# Lilv uses the same version number for both library and package +LILV_LIB_VERSION = LILV_VERSION + +# Variables for 'waf dist' +APPNAME = 'lilv' +VERSION = LILV_VERSION + +# Mandatory variables +top = '.' +out = 'build' + +def options(opt): + opt.load('compiler_c') + opt.load('compiler_cxx') + opt.load('python') + autowaf.set_options(opt) + opt.add_option('--no-utils', action='store_true', dest='no_utils', + help='Do not build command line utilities') + opt.add_option('--bindings', action='store_true', dest='bindings', + help='Build python bindings') + opt.add_option('--dyn-manifest', action='store_true', dest='dyn_manifest', + help='Build support for dynamic manifests') + opt.add_option('--test', action='store_true', dest='build_tests', + help='Build unit tests') + opt.add_option('--no-bash-completion', action='store_true', + dest='no_bash_completion', + help='Do not install bash completion script in CONFIGDIR') + opt.add_option('--static', action='store_true', dest='static', + help='Build static library') + opt.add_option('--no-shared', action='store_true', dest='no_shared', + help='Do not build shared library') + opt.add_option('--static-progs', action='store_true', dest='static_progs', + help='Build programs as static binaries') + opt.add_option('--default-lv2-path', type='string', default='', + dest='default_lv2_path', + help='Default LV2 path to use if LV2_PATH is unset') + +def configure(conf): + conf.load('compiler_c') + + if Options.options.bindings: + try: + conf.load('swig') + conf.load('python') + conf.load('compiler_cxx') + conf.check_python_headers() + autowaf.define(conf, 'LILV_PYTHON', 1); + except: + pass + + autowaf.configure(conf) + autowaf.set_c99_mode(conf) + autowaf.display_header('Lilv Configuration') + + conf.env.BASH_COMPLETION = not Options.options.no_bash_completion + conf.env.BUILD_TESTS = Options.options.build_tests + conf.env.BUILD_UTILS = not Options.options.no_utils + conf.env.BUILD_SHARED = not Options.options.no_shared + conf.env.STATIC_PROGS = Options.options.static_progs + conf.env.BUILD_STATIC = (Options.options.static or + Options.options.static_progs) + + if not conf.env.BUILD_SHARED and not conf.env.BUILD_STATIC: + conf.fatal('Neither a shared nor a static build requested') + + autowaf.check_pkg(conf, 'lv2', uselib_store='LV2', + atleast_version='1.0.0', mandatory=True) + autowaf.check_pkg(conf, 'serd-0', uselib_store='SERD', + atleast_version='0.14.0', mandatory=True) + autowaf.check_pkg(conf, 'sord-0', uselib_store='SORD', + atleast_version='0.8.0', mandatory=True) + autowaf.check_pkg(conf, 'sratom-0', uselib_store='SRATOM', + atleast_version='0.2.0', mandatory=True) + + autowaf.define(conf, 'LILV_NEW_LV2', 1) # New LV2 discovery API + + defines = ['_POSIX_C_SOURCE', '_BSD_SOURCE'] + if Options.platform == 'darwin': + defines += ['_DARWIN_C_SOURCE'] + + # Check for gcov library (for test coverage) + if conf.env.BUILD_TESTS: + conf.check_cc(lib='gcov', + define_name='HAVE_GCOV', + mandatory=False) + + conf.check_cc(function_name='flock', + header_name='sys/file.h', + defines=defines, + define_name='HAVE_FLOCK', + mandatory=False) + + conf.check_cc(function_name='fileno', + header_name='stdio.h', + defines=defines, + define_name='HAVE_FILENO', + mandatory=False) + + conf.check_cc(function_name='clock_gettime', + header_name=['sys/time.h','time.h'], + defines=['_POSIX_C_SOURCE=199309L'], + define_name='HAVE_CLOCK_GETTIME', + uselib_store='CLOCK_GETTIME', + lib=['rt'], + mandatory=False) + + autowaf.define(conf, 'LILV_VERSION', LILV_VERSION) + if Options.options.dyn_manifest: + autowaf.define(conf, 'LILV_DYN_MANIFEST', 1) + + lilv_path_sep = ':' + lilv_dir_sep = '/' + if sys.platform == 'win32': + lilv_path_sep = ';' + lilv_dir_sep = '\\\\' + + autowaf.define(conf, 'LILV_PATH_SEP', lilv_path_sep) + autowaf.define(conf, 'LILV_DIR_SEP', lilv_dir_sep) + + # Set default LV2 path + lv2_path = Options.options.default_lv2_path + if lv2_path == '': + if Options.platform == 'darwin': + lv2_path = lilv_path_sep.join(['~/Library/Audio/Plug-Ins/LV2', + '~/.lv2', + '/usr/local/lib/lv2', + '/usr/lib/lv2', + '/Library/Audio/Plug-Ins/LV2']) + elif Options.platform == 'haiku': + lv2_path = lilv_path_sep.join(['~/.lv2', + '/boot/common/add-ons/lv2']) + elif Options.platform == 'win32': + lv2_path = lilv_path_sep.join(['%APPDATA%\\\\LV2', + '%COMMONPROGRAMFILES%\\\\LV2']) + else: + libdirname = os.path.basename(conf.env.LIBDIR) + lv2_path = lilv_path_sep.join(['~/.lv2', + '/usr/%s/lv2' % libdirname, + '/usr/local/%s/lv2' % libdirname]) + autowaf.define(conf, 'LILV_DEFAULT_LV2_PATH', lv2_path) + + conf.env.LIB_LILV = ['lilv-%s' % LILV_MAJOR_VERSION] + + conf.write_config_header('lilv_config.h', remove=False) + + autowaf.display_msg(conf, 'Default LV2_PATH', + conf.env.LILV_DEFAULT_LV2_PATH) + autowaf.display_msg(conf, 'Utilities', + bool(conf.env.BUILD_UTILS)) + autowaf.display_msg(conf, 'Unit tests', + bool(conf.env.BUILD_TESTS)) + autowaf.display_msg(conf, 'Dynamic manifest support', + bool(conf.env.LILV_DYN_MANIFEST)) + autowaf.display_msg(conf, 'Python bindings', + conf.is_defined('LILV_PYTHON')) + + conf.undefine('LILV_DEFAULT_LV2_PATH') # Cmd line errors with VC++ + print('') + +def build_util(bld, name, defines): + obj = bld(features = 'c cprogram', + source = name + '.c', + includes = ['.', './src', './utils'], + use = 'liblilv', + target = name, + defines = defines, + install_path = '${BINDIR}') + if not bld.env.BUILD_SHARED or bld.env.STATIC_PROGS: + obj.use = 'liblilv_static' + if bld.env.STATIC_PROGS: + if not bld.env.MSVC_COMPILER: + obj.lib = ['m'] + obj.env.SHLIB_MARKER = obj.env.STLIB_MARKER + obj.linkflags = ['-static', '-Wl,--start-group'] + return obj + +def build(bld): + # C/C++ Headers + includedir = '${INCLUDEDIR}/lilv-%s/lilv' % LILV_MAJOR_VERSION + bld.install_files(includedir, bld.path.ant_glob('lilv/*.h')) + bld.install_files(includedir, bld.path.ant_glob('lilv/*.hpp')) + + # Pkgconfig file + autowaf.build_pc(bld, 'LILV', LILV_VERSION, LILV_MAJOR_VERSION, [], + {'LILV_MAJOR_VERSION' : LILV_MAJOR_VERSION, + 'LILV_PKG_DEPS' : 'lv2 serd-0 sord-0 sratom-0'}) + + lib_source = ''' + src/collections.c + src/instance.c + src/lib.c + src/node.c + src/plugin.c + src/pluginclass.c + src/port.c + src/query.c + src/scalepoint.c + src/state.c + src/ui.c + src/util.c + src/world.c + src/zix/tree.c + '''.split() + + lib = ['dl'] + libflags = ['-fvisibility=hidden'] + defines = [] + if sys.platform == 'win32': + lib = [] + if bld.env.MSVC_COMPILER: + libflags = [] + defines = ['snprintf=_snprintf'] + elif sys.platform.find('bsd') > 0: + lib = [] + + # Shared Library + if bld.env.BUILD_SHARED: + obj = bld(features = 'c cshlib', + export_includes = ['.'], + source = lib_source, + includes = ['.', './src'], + name = 'liblilv', + target = 'lilv-%s' % LILV_MAJOR_VERSION, + vnum = LILV_LIB_VERSION, + install_path = '${LIBDIR}', + defines = ['LILV_SHARED', 'LILV_INTERNAL'], + cflags = libflags, + lib = lib) + autowaf.use_lib(bld, obj, 'SORD SRATOM LV2') + + # Static library + if bld.env.BUILD_STATIC: + obj = bld(features = 'c cstlib', + export_includes = ['.'], + source = lib_source, + includes = ['.', './src'], + name = 'liblilv_static', + target = 'lilv-%s' % LILV_MAJOR_VERSION, + vnum = LILV_LIB_VERSION, + install_path = '${LIBDIR}', + defines = defines + ['LILV_INTERNAL']) + autowaf.use_lib(bld, obj, 'SORD SRATOM LV2') + + if bld.env.BUILD_TESTS: + test_libs = lib + test_cflags = [''] + if bld.is_defined('HAVE_GCOV'): + test_libs += ['gcov'] + test_cflags += ['-fprofile-arcs', '-ftest-coverage'] + + # Test plugin library + penv = bld.env.derive() + shlib_pattern = penv.cshlib_PATTERN + if shlib_pattern.startswith('lib'): + shlib_pattern = shlib_pattern[3:] + penv.cshlib_PATTERN = shlib_pattern + shlib_ext = shlib_pattern[shlib_pattern.rfind('.'):] + + obj = bld(features = 'c cshlib', + env = penv, + source = 'test/test_plugin.c', + name = 'test_plugin', + target = 'test/test_plugin.lv2/test_plugin', + install_path = None, + defines = defines, + cflags = test_cflags, + lib = test_libs, + uselib = 'LV2') + + # Test plugin data files + for i in [ 'manifest.ttl.in', 'test_plugin.ttl.in' ]: + bld(features = 'subst', + source = 'test/' + i, + target = 'test/test_plugin.lv2/' + i.replace('.in', ''), + install_path = None, + SHLIB_EXT = shlib_ext) + + # Static profiled library (for unit test code coverage) + obj = bld(features = 'c cstlib', + source = lib_source, + includes = ['.', './src'], + name = 'liblilv_profiled', + target = 'lilv_profiled', + install_path = None, + defines = defines + ['LILV_INTERNAL'], + cflags = test_cflags, + lib = test_libs) + autowaf.use_lib(bld, obj, 'SORD SRATOM LV2') + + # Unit test program + bpath = os.path.abspath(os.path.join(out, 'test', 'test_plugin.lv2')) + bpath = bpath.replace('\\', '/') + obj = bld(features = 'c cprogram', + source = 'test/lilv_test.c', + includes = ['.', './src'], + use = 'liblilv_profiled', + uselib = 'SORD LV2', + lib = test_libs, + target = 'test/lilv_test', + install_path = None, + defines = defines + ['LILV_TEST_BUNDLE=\"%s/\"' % bpath], + cflags = test_cflags) + autowaf.use_lib(bld, obj, 'SORD SRATOM LV2') + + # Utilities + if bld.env.BUILD_UTILS: + utils = ''' + utils/lilv-bench + utils/lv2info + utils/lv2ls + ''' + for i in utils.split(): + build_util(bld, i, defines) + + # lv2bench (less portable than other utilities) + if bld.is_defined('HAVE_CLOCK_GETTIME'): + obj = build_util(bld, 'utils/lv2bench', defines) + if not bld.env.MSVC_COMPILER: + obj.lib = ['rt'] + + # Documentation + autowaf.build_dox(bld, 'LILV', LILV_VERSION, top, out) + + # Man pages + bld.install_files('${MANDIR}/man1', bld.path.ant_glob('doc/*.1')) + + # Bash completion + if bld.env.BASH_COMPLETION: + bld.install_as( + '${SYSCONFDIR}/bash_completion.d/lilv', 'utils/lilv.bash_completion') + + if bld.is_defined('LILV_PYTHON'): + # Python Wrapper + obj = bld(features = 'cxx cxxshlib pyext', + source = 'bindings/lilv.i', + target = 'bindings/_lilv', + includes = ['..'], + swig_flags = '-c++ -python -Wall -I.. -llilv -features autodoc=1', + use = 'liblilv') + autowaf.use_lib(bld, obj, 'LILV') + + bld.install_files('${PYTHONDIR}', 'bindings/lilv.py') + + bld.add_post_fun(autowaf.run_ldconfig) + if bld.env.DOCS: + bld.add_post_fun(fix_docs) + +def fix_docs(ctx): + if ctx.cmd == 'build': + autowaf.make_simple_dox(APPNAME) + +def upload_docs(ctx): + os.system('rsync -ravz --delete -e ssh build/doc/html/ drobilla@drobilla.net:~/drobilla.net/docs/lilv/') + +def test(ctx): + autowaf.pre_test(ctx, APPNAME) + os.environ['PATH'] = 'test' + os.pathsep + os.getenv('PATH') + autowaf.run_tests(ctx, APPNAME, ['lilv_test'], dirs=['./src','./test']) + autowaf.post_test(ctx, APPNAME) + +def lint(ctx): + subprocess.call('cpplint.py --filter=+whitespace/comments,-whitespace/tab,-whitespace/braces,-whitespace/labels,-build/header_guard,-readability/casting,-readability/todo,-build/include,-runtime/sizeof src/* lilv/*', shell=True) diff --git a/source/libs/lilv/lilv.c b/source/libs/lilv/lilv.c new file mode 100644 index 000000000..03f542469 --- /dev/null +++ b/source/libs/lilv/lilv.c @@ -0,0 +1,31 @@ +/* + * Carla static lilv code + * Copyright (C) 2012 Filipe Coelho + * + * 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 + * 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. + * + * For a full copy of the GNU General Public License see the COPYING file + */ + +#include "src/collections.c" +#include "src/instance.c" +#include "src/lib.c" +#include "src/node.c" +#include "src/plugin.c" +#include "src/pluginclass.c" +#include "src/port.c" +#include "src/query.c" +#include "src/scalepoint.c" +#include "src/state.c" +#include "src/ui.c" +#include "src/util.c" +#include "src/world.c" +#include "src/zix/tree.c" diff --git a/source/libs/lilv/serd-0.18.2/AUTHORS b/source/libs/lilv/serd-0.18.2/AUTHORS new file mode 100644 index 000000000..134f007aa --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/AUTHORS @@ -0,0 +1 @@ +David Robillard diff --git a/source/libs/lilv/serd-0.18.2/COPYING b/source/libs/lilv/serd-0.18.2/COPYING new file mode 100644 index 000000000..c3c2af6a6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/COPYING @@ -0,0 +1,13 @@ +Copyright 2011-2012 David Robillard + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/INSTALL b/source/libs/lilv/serd-0.18.2/INSTALL new file mode 100644 index 000000000..623cddde4 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/INSTALL @@ -0,0 +1,59 @@ +Installation Instructions +========================= + +Basic Installation +------------------ + +Building this software requires only Python. To install with default options: + + ./waf configure + ./waf + ./waf install + +You may need to become root for the install stage, for example: + + sudo ./waf install + +Configuration Options +--------------------- + +All supported options can be viewed using the command: + + ./waf --help + +Most options only need to be passed during the configure stage, for example: + + ./waf configure --prefix=/usr + ./waf + ./waf install + +Compiler Configuration +---------------------- + +Several standard environment variables can be used to control how compilers are +invoked: + + * CC: Path to C compiler + * CFLAGS: C compiler options + * CXX: Path to C++ compiler + * CXXFLAGS: C++ compiler options + * CPPFLAGS: C preprocessor options + * LINKFLAGS: Linker options + +Installation Directories +------------------------ + +The --prefix option (or the PREFIX environment variable) can be used to change +the prefix which all files are installed under. There are also several options +allowing for more fine-tuned control, see the --help output for details. + +Packaging +--------- + +Everything can be installed to a specific root directory by passing a --destdir +option to the install stage (or setting the DESTDIR environment variable), +which adds a prefix to all install paths. For example: + + ./waf configure --prefix=/usr + ./waf + ./waf install --destdir=/tmp/package diff --git a/source/libs/lilv/serd-0.18.2/NEWS b/source/libs/lilv/serd-0.18.2/NEWS new file mode 100644 index 000000000..a91a6a7a5 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/NEWS @@ -0,0 +1,98 @@ +serd (0.18.2) stable; + + * Fix crash when serd_node_new_decimal is called with infinity or NaN + * Fix crash when resolving against non-standard base URIs + * Fix bug that caused "a" abbreviation in non-predicate position + * Disable timestamps in HTML documentation for reproducible build + * Fix clashing symbol "error" in amalgamation build + * Update to waf 1.7.8 and autowaf r90 (install docs to versioned directory) + + -- David Robillard Sat, 22 Dec 2012 21:32:15 -0500 + +serd (0.18.0) stable; + + * Support digits at start of local names as per new Turtle grammar + * Add incremental read interface suitable for reading from infinite streams + * Add -e option to serdi to use incremental reading + * Add error callback to reader and writer for custom error reporting + * Add -q option to serdi to suppress all non-data output, e.g. errors + * Reset indent when finishing a write + * Report write size correctly when invalid UTF-8 is encountered and a + replacement character is written + * Strip down API documentation to a single clean page + * Fix various hyper-strict warnings + * Do not require a C++ compiler to build + * Add option to build utilities as static binaries + * Upgrade to waf 1.7.2 + + -- David Robillard Thu, 23 Aug 2012 00:18:34 -0400 + +serd (0.14.0) stable; + + * Use path variables in pkgconfig files + * Install man page to DATADIR (e.g. PREFIX/share/man, not PREFIX/man) + * Tolerate invalid characters in string literals by replacing with the + Unicode replacement character + * Report reason for failure to open file in serdi + * Improve write performance by doing bulk writes for unescaped substrings + * Add SerdBulkSink for writing bulk output and corresponding serdi -B option + * Add serdi -f option to prevent URI qualification + * Remove use of multi-byte peek (readahead) and use exactly 1 page for + read buffer (instead of 2) + * Handle a quote as the last character of a long string literal in the + writer (by escaping it) rather than the reader, to avoid writing Turtle + other tools fail to parse. + * Add serd_strtod(), serd_node_new_decimal(), and serd_node_new_integer() + for locale-independent numeric node parsing/serialising. + * Add serd_file_sink for easy writing to a FILE* stream. + * Add serd_chunk_sink for easy writing to a string. + * Escape ASCII control characters in output (e.g. fix problems with string + literals that start with a backspace) + * Improve URI resolution to cover most of the abnormal cases from RFC3986 + * Support file://localhost/foo URIs in serd_uri_to_path() + * Support Windows file://c:/foo URIs in serd_uri_to_path() on all platforms + * Add serd_node_new_blob and serd_base64_decode for handling arbitrary + binary data via base64 encoding. + * Support compilation as C++ under MSVC++. + * Implement pretty-printing for collections. + * Parse collections iteratively in O(1) space. + * Report read error if both "genid" and "docid" IDs are found in the same + document, to prevent silent merging of distinct blank nodes. + * Handle files and strings that start with a UTF-8 Byte Order Mark. + * Add serd_writer_get_env(). + * Add serd_node_new_file_uri() and serd_file_uri_parse() and implement + proper URI to/from path hex escaping, etc. + * Add serd_uri_serialise_relative() for making URIs relative to a base + where possible (by chopping a common prefix and adding dot segments). + * Make URIs serialised by the writer properly escape characters. + * Add serd_writer_set_root_uri() and corresponding -r option to serdi to + enable writing URIs with up references (../). + * Resolve dot segments in serd_uri_resolve() instead of at write time. + * Add serd_reader_set_default_graph() for reading a file as a named graph. + + -- David Robillard Tue, 17 Apr 2012 18:23:53 -0400 + +serd (0.5.0) stable; + + * Fix pretty printing of successive blank descriptions, i.e. "] , [" + * Avoid writing illegal Turtle names as a result of URI qualifying + * Gracefully handle NULL reader sinks + * Add serd_strerror + * Add serd_env_set_prefix_from_strings for convenience + * Fix erroneously equal SERD_ERR_BAD_SYNTAX and SERD_ERR_BAD_ARG + * Add ability to build static library + + -- David Robillard Thu, 29 Sep 2011 00:00:00 -0400 + +serd (0.4.2) stable; + + * Fix compilation issues on some systems + * Fix build system Python 3 compatibility + + -- David Robillard Wed, 25 May 2011 19:00:00 -0400 + +serd (0.4.0) stable; + + * Initial release + + -- David Robillard Tue, 24 May 2011 23:00:00 -0400 diff --git a/source/libs/lilv/serd-0.18.2/PACKAGING b/source/libs/lilv/serd-0.18.2/PACKAGING new file mode 100644 index 000000000..3eced1698 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/PACKAGING @@ -0,0 +1,29 @@ +This library is designed to allow parallel installation of different major +versions. To facilitate this, the shared library name, include directory, and +pkg-config file are suffixed with the major version number of the library. + +For example, if this library was named "foo" and at version 1.x.y: + +/usr/include/foo-1/foo/foo.h +/usr/lib/foo-1.so.1.x.y +/usr/lib/pkgconfig/foo-1.pc + +Dependencies check for pkg-config name "foo-1" and will build +against a compatible version 1, regardless any other installed versions. + +*** IMPORTANT GUIDELINES FOR PACKAGERS *** + +Packages should follow the same conventions as above, i.e. include the major +version (and only the major version) in the name of the package. Continuing the +example above, the package(s) would be named foo-1 and foo-1-dev. This way, +if/when version 2 comes out, it may be installed at the same time as version 1 +without breaking anything. + +Please do not create packages of this library that do not follow these +guidelines, you will break things and cause unnecessary headaches. Please do +not use any number as a suffix other than the actual major version number of the +upstream source package. + +Because program and documentation names are not versioned, these should be +included in separate packages which may replace previous versions, since +there is little use in having parallel installations of them. \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/README b/source/libs/lilv/serd-0.18.2/README new file mode 100644 index 000000000..c828add13 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/README @@ -0,0 +1,10 @@ +Serd +---- + +Serd is a lightweight C library for RDF syntax which supports reading and +writing Turtle and NTriples. + +For more information, see . + + -- David Robillard + diff --git a/source/libs/lilv/serd-0.18.2/doc/layout.xml b/source/libs/lilv/serd-0.18.2/doc/layout.xml new file mode 100644 index 000000000..74a109fc3 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/doc/layout.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/libs/lilv/serd-0.18.2/doc/reference.doxygen.in b/source/libs/lilv/serd-0.18.2/doc/reference.doxygen.in new file mode 100644 index 000000000..a4dde9a8b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/doc/reference.doxygen.in @@ -0,0 +1,1792 @@ +# Doxyfile 1.8.1.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = Serd + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @SERD_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = @SERD_DOC_DIR@ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = NO + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = YES + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = YES + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = NO + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = NO + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = @SERD_SRCDIR@/doc/layout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @SERD_SRCDIR@/serd/serd.h + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = *.c + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = @SERD_SRCDIR@/doc/style.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 160 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = NO + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = NO + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/source/libs/lilv/serd-0.18.2/doc/serdi.1 b/source/libs/lilv/serd-0.18.2/doc/serdi.1 new file mode 100644 index 000000000..45001c908 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/doc/serdi.1 @@ -0,0 +1,72 @@ +.TH SERDI 1 "08 May 2012" + +.SH NAME +.B serdi \- Read and write RDF syntax + +.SH SYNOPSIS +serdi [OPTION]... INPUT BASE_URI + +.SH OPTIONS + +.TP +\fB\-b\fR +Fast bulk output for large serialisations. + +.TP +\fB\-c PREFIX\fR +Chop PREFIX from matching blank node IDs. + +.TP +\fB\-e\fR +Eat input one character at a time, rather than a page at a time which is the +default. This is useful when reading from a pipe since output will be +generated immediately as input arrives, rather than waiting until an entire +page of input has arrived. With this option serdi uses one page less memory, +but will likely be significantly slower. + +.TP +\fB\-f\fR +Keep full URIs in input (don't qualify). + +.TP +\fB\-h\fR +Print the command line options. + +.TP +\fB\-i SYNTAX\fR +Read input in SYNTAX (`turtle' or `ntriples'). + +.TP +\fB\-o SYNTAX\fR +Write output in SYNTAX (`turtle' or `ntriples'). + +.TP +\fB\-p PREFIX\fR +Add PREFIX to blank node IDs. + +.TP +\fB\-r ROOT_URI\fR +Keep relative URIs within ROOT_URI. + +.TP +\fB\-s INPUT\fR +Parse INPUT as a string (terminates options). + +.TP +\fB\-v\fR +Display version information and exit. + +.SH AUTHOR +Serdi was written by David Robillard + +.SH COPYRIGHT +Copyright \(co 2011-2012 David Robillard. +.br +License: +.br +This is free software; you are free to change and redistribute it. +.br +There is NO WARRANTY, to the extent permitted by law. + +.SH "SEE ALSO" + diff --git a/source/libs/lilv/serd-0.18.2/doc/style.css b/source/libs/lilv/serd-0.18.2/doc/style.css new file mode 100644 index 000000000..4c62b46a8 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/doc/style.css @@ -0,0 +1,563 @@ +body { + font-size: medium; + font-family: sans-serif; +} + +#top { + background-color: #F3F3F3; + margin: 0; + padding: 0; + border-bottom: 1px solid #DDD; + margin-bottom: 1ex; + font-size: xx-large; + font-weight: bold; +} + +div.header { + display: none; +} + +.tabs { + display: none; +} + +h1 h2 h3 h4 h5 h6 { + font-weight: bold; +} + +h1 { + font-size: 164%; +} + +h2 { + font-size: 132%; +} + +h3 { + font-size: 124%; +} + +h4 { + font-size: 116%; +} + +h5 { + font-size: 108%; +} + +h6 { + font-size: 100%; +} + +p { + margin: 0 0 1ex 0; +} + +br { + display: none; +} + +dt { + font-weight: 700; +} + +div.multicol { +} + +p.startli,p.startdd,p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +caption { + font-weight: 700; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex,div.navtab { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex,div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ +a { + color: #3D8C57; + text-decoration: none; +} + +.contents a:visited { + color: #50755E; +} + +a:hover { + text-decoration: underline; +} + +a.qindexHL { + background-color: #9CAFD4; + color: #FFF; + border: 1px double #869DCA; +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4C4C4; + background-color: #F9F9F9; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: #000; + font-weight: 700; + color: #FFF; + margin-bottom: 3px; + margin-top: 3px; + padding: .2em; + border: thin solid #333; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: 700; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: #FFF; + color: #000; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: 700; + border: 1px solid #C4CFE5; + margin: 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0; + margin-bottom: 0; + padding: 0; +} + +div.center img { + border: 0; +} + +address.footer { + text-align: right; + padding: 0 0.25em 0.25em 0; +} + +img.footer { + border: 0; + vertical-align: middle; +} + +/* @group Code Colorization */ +span.keyword { + color: green; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #e08000; +} + +span.comment { + color: maroon; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: teal; +} + +span.vhdldigit { + color: #F0F; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: red; +} + +/* @end */ +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: 700; +} + +hr { + height: 0; + border: none; + border-top: 1px solid #DDD; + margin: 2em 0 1em; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ +table.memberdecls { + border-spacing: 0; + font-size: small; +} + +.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,.memTemplItemLeft,.memTemplItemRight,.memTemplParams { + background-color: #FBFBFB; + margin: 0; + padding: 0.25ex; +} + +.mdescLeft,.mdescRight { + color: #555; +} + +.memItemLeft,.memItemRight,.memTemplParams { + border-top: 1px solid #DDD; +} + +.memItemLeft,.memTemplItemLeft { + white-space: nowrap; + padding-left: 2em; +} + +.memTemplParams { + color: #464646; + white-space: nowrap; +} + +/* @end */ +/* @group Member Details */ +/* Styles for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: bold; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; + margin: 1ex 0 2ex 0; + border: 1px solid #CCC; +} + +.memname { + white-space: nowrap; + font-weight: bold; +} + +.memproto { + border-bottom: 1px solid #DDD; + padding: 0.5ex; + font-weight: bold; + background-color: #F3F3F3; +} + +.memdoc { + padding: 1ex; + background-color: #FBFBFB; + border-top-width: 0; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} + +.paramname em { + font-style: normal; +} + +/* @end */ +/* @group Directory (tree) */ +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin: 0; +} + +/* these are for tree view when used as main index */ +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse: collapse; + margin: 0.5ex; +} + +table.doxtable td,table.doxtable th { + border: 1px solid #DDD; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #F3F3F3; + color: #000; + padding-bottom: 4px; + padding-top: 5px; + text-align: left; + font-weight: bold; +} + +.tabsearch { + top: 0; + left: 10px; + height: 36px; + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul { + font-size: 11px; + height: 30px; + line-height: 30px; + color: #8AA0CC; + border: 1px solid #C2CDE4; + overflow: hidden; + margin: 0; + padding: 0; +} + +.navpath li { + list-style-type: none; + float: left; + padding-left: 10px; + padding-right: 15px; + color: #364D7C; +} + +.navpath a { + height: 32px; + display: block; + text-decoration: none; + outline: none; +} + +.navpath a:hover { + color: #6884BD; +} + +div.summary { + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a { + white-space: nowrap; +} + +div.header { + background-color: #F3F3F3; + margin: 0; + border-bottom: 1px solid #DDD; +} + +div.headertitle { + padding: 5px 5px 5px 10px; + font-size: 180%; + font-weight: bold; +} diff --git a/source/libs/lilv/serd-0.18.2/serd.pc.in b/source/libs/lilv/serd-0.18.2/serd.pc.in new file mode 100644 index 000000000..954d263a1 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/serd.pc.in @@ -0,0 +1,10 @@ +prefix=@PREFIX@ +exec_prefix=@EXEC_PREFIX@ +libdir=@LIBDIR@ +includedir=@INCLUDEDIR@ + +Name: Serd +Version: @SERD_VERSION@ +Description: Lightweight RDF syntax library +Libs: -L${libdir} -l@LIB_SERD@ +Cflags: -I${includedir}/serd-@SERD_MAJOR_VERSION@ diff --git a/source/libs/lilv/serd-0.18.2/serd/serd.h b/source/libs/lilv/serd-0.18.2/serd/serd.h new file mode 100644 index 000000000..1cd54df8f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/serd/serd.h @@ -0,0 +1,963 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file serd.h API for Serd, a lightweight RDF syntax library. +*/ + +#ifndef SERD_SERD_H +#define SERD_SERD_H + +#include +#include +#include +#include + +#ifdef SERD_SHARED +# ifdef _WIN32 +# define SERD_LIB_IMPORT __declspec(dllimport) +# define SERD_LIB_EXPORT __declspec(dllexport) +# else +# define SERD_LIB_IMPORT __attribute__((visibility("default"))) +# define SERD_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef SERD_INTERNAL +# define SERD_API SERD_LIB_EXPORT +# else +# define SERD_API SERD_LIB_IMPORT +# endif +#else +# define SERD_API +#endif + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** + @defgroup serd Serd + A lightweight RDF syntax library. + @{ +*/ + +/** + Environment. + + Represents the state required to resolve a CURIE or relative URI, e.g. the + base URI and set of namespace prefixes at a particular point. +*/ +typedef struct SerdEnvImpl SerdEnv; + +/** + RDF reader. + + Parses RDF by calling user-provided sink functions as input is consumed + (much like an XML SAX parser). +*/ +typedef struct SerdReaderImpl SerdReader; + +/** + RDF writer. + + Provides a number of functions to allow writing RDF syntax out to some + stream. These functions are deliberately compatible with the sink functions + used by SerdReader, so a reader can be directly connected to a writer to + re-serialise a document with minimal overhead. +*/ +typedef struct SerdWriterImpl SerdWriter; + +/** + Return status code. +*/ +typedef enum { + SERD_SUCCESS, /**< No error */ + SERD_FAILURE, /**< Non-fatal failure */ + SERD_ERR_UNKNOWN, /**< Unknown error */ + SERD_ERR_BAD_SYNTAX, /**< Invalid syntax */ + SERD_ERR_BAD_ARG, /**< Invalid argument */ + SERD_ERR_NOT_FOUND, /**< Not found */ + SERD_ERR_ID_CLASH, /**< Encountered clashing blank node IDs */ + SERD_ERR_BAD_CURIE, /**< Invalid CURIE (e.g. prefix does not exist) */ + SERD_ERR_INTERNAL /**< Unexpected internal error (should not happen) */ +} SerdStatus; + +/** + RDF syntax type. +*/ +typedef enum { + /** + Turtle - Terse RDF Triple Language (UTF-8). + @see Turtle + */ + SERD_TURTLE = 1, + + /** + NTriples - Line-based RDF triples (ASCII). + @see NTriples + */ + SERD_NTRIPLES = 2 +} SerdSyntax; + +/** + Flags indication inline abbreviation information for a statement. +*/ +typedef enum { + SERD_EMPTY_S = 1 << 1, /**< Empty blank node subject */ + SERD_EMPTY_O = 1 << 2, /**< Empty blank node object */ + SERD_ANON_S_BEGIN = 1 << 3, /**< Start of anonymous subject */ + SERD_ANON_O_BEGIN = 1 << 4, /**< Start of anonymous object */ + SERD_ANON_CONT = 1 << 5, /**< Continuation of anonymous node */ + SERD_LIST_S_BEGIN = 1 << 6, /**< Start of list subject */ + SERD_LIST_O_BEGIN = 1 << 7, /**< Start of list object */ + SERD_LIST_CONT = 1 << 8 /**< Continuation of list */ +} SerdStatementFlag; + +/** + Bitwise OR of SerdNodeFlag values. +*/ +typedef uint32_t SerdStatementFlags; + +/** + Type of a syntactic RDF node. + + This is more precise than the type of an abstract RDF node. An abstract + node is either a resource, literal, or blank. In syntax there are two ways + to refer to a resource (by URI or CURIE) and two ways to refer to a blank + (by ID or anonymously). Anonymous (inline) blank nodes are expressed using + SerdStatementFlags rather than this type. +*/ +typedef enum { + /** + The type of a nonexistent node. + + This type is useful as a sentinel, but is never emitted by the reader. + */ + SERD_NOTHING = 0, + + /** + Literal value. + + A literal optionally has either a language, or a datatype (not both). + */ + SERD_LITERAL = 1, + + /** + URI (absolute or relative). + + Value is an unquoted URI string, which is either a relative reference + with respect to the current base URI (e.g. "foo/bar"), or an absolute + URI (e.g. "http://example.org/foo"). + @see RFC3986. + */ + SERD_URI = 2, + + /** + CURIE, a shortened URI. + + Value is an unquoted CURIE string relative to the current environment, + e.g. "rdf:type". + @see CURIE Syntax 1.0 + */ + SERD_CURIE = 3, + + /** + A blank node. + + Value is a blank node ID, e.g. "id3", which is meaningful only within + this serialisation. + @see Turtle + nodeID + */ + SERD_BLANK = 4, + +} SerdType; + +/** + Flags indicating certain string properties relevant to serialisation. +*/ +typedef enum { + SERD_HAS_NEWLINE = 1, /**< Contains line breaks ('\\n' or '\\r') */ + SERD_HAS_QUOTE = 1 << 1 /**< Contains quotes ('"') */ +} SerdNodeFlag; + +/** + Bitwise OR of SerdNodeFlag values. +*/ +typedef uint32_t SerdNodeFlags; + +/** + A syntactic RDF node. +*/ +typedef struct { + const uint8_t* buf; /**< Value string */ + size_t n_bytes; /**< Size in bytes (not including null) */ + size_t n_chars; /**< Length in characters (not including null)*/ + SerdNodeFlags flags; /**< Node flags (e.g. string properties) */ + SerdType type; /**< Node type */ +} SerdNode; + +/** + An unterminated string fragment. +*/ +typedef struct { + const uint8_t* buf; /**< Start of chunk */ + size_t len; /**< Length of chunk in bytes */ +} SerdChunk; + +/** + An error description. +*/ +typedef struct { + SerdStatus status; /**< Error code */ + const uint8_t* filename; /**< File where error was encountered, or NULL */ + unsigned line; /**< Line where error was encountered, or 0 */ + unsigned col; /**< Column where error was encountered */ + const char* fmt; /**< Message format string (printf style) */ + va_list* args; /**< Arguments for fmt */ +} SerdError; + +/** + A parsed URI. + + This struct directly refers to chunks in other strings, it does not own any + memory itself. Thus, URIs can be parsed and/or resolved against a base URI + in-place without allocating memory. +*/ +typedef struct { + SerdChunk scheme; /**< Scheme */ + SerdChunk authority; /**< Authority */ + SerdChunk path_base; /**< Path prefix if relative */ + SerdChunk path; /**< Path suffix */ + SerdChunk query; /**< Query */ + SerdChunk fragment; /**< Fragment */ +} SerdURI; + +/** + Syntax style options. + + The style of the writer output can be controlled by ORing together + values from this enumeration. Note that some options are only supported + for some syntaxes (e.g. NTriples does not support abbreviation and is + always ASCII). +*/ +typedef enum { + SERD_STYLE_ABBREVIATED = 1, /**< Abbreviate triples when possible. */ + SERD_STYLE_ASCII = 1 << 1, /**< Escape all non-ASCII characters. */ + SERD_STYLE_RESOLVED = 1 << 2, /**< Resolve URIs against base URI. */ + SERD_STYLE_CURIED = 1 << 3, /**< Shorten URIs into CURIEs. */ + SERD_STYLE_BULK = 1 << 4 /**< Write output in pages. */ +} SerdStyle; + +/** + @name String Utilities + @{ +*/ + +/** + Return a string describing a status code. +*/ +SERD_API +const uint8_t* +serd_strerror(SerdStatus status); + +/** + Measure a UTF-8 string. + @return Length of @c str in characters (except NULL). + @param str A null-terminated UTF-8 string. + @param n_bytes (Output) Set to the size of @c str in bytes (except NULL). + @param flags (Output) Set to the applicable flags. +*/ +SERD_API +size_t +serd_strlen(const uint8_t* str, size_t* n_bytes, SerdNodeFlags* flags); + +/** + Parse a string to a double. + + The API of this function is identical to the standard C strtod function, + except this function is locale-independent and always matches the lexical + format used in the Turtle grammar (the decimal point is always "."). +*/ +SERD_API +double +serd_strtod(const char* str, char** endptr); + +/** + Decode a base64 string. + This function can be used to deserialise a blob node created with + serd_node_new_blob(). + + @param str Base64 string to decode. + @param len The length of @c str. + @param size Set to the size of the returned blob in bytes. + @return A newly allocated blob which must be freed with free(). +*/ +SERD_API +void* +serd_base64_decode(const uint8_t* str, size_t len, size_t* size); + +/** + @} + @name URI + @{ +*/ + +static const SerdURI SERD_URI_NULL = {{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}}; + +/** + Return the local path for @c uri, or NULL if @c uri is not a file URI. + Note this (inappropriately named) function only removes the file scheme if + necessary, and returns @c uri unmodified if it is an absolute path. Percent + encoding and other issues are not handled, to properly convert a file URI to + a path, use serd_file_uri_parse(). +*/ +SERD_API +const uint8_t* +serd_uri_to_path(const uint8_t* uri); + +/** + Get the unescaped path and hostname from a file URI. + @param uri A file URI. + @param hostname If non-NULL, set to the hostname, if present. + @return The path component of the URI. + + Both the returned path and @c hostname (if applicable) are owned by the + caller and must be freed with free(). +*/ +SERD_API +uint8_t* +serd_file_uri_parse(const uint8_t* uri, uint8_t** hostname); + +/** + Return true iff @c utf8 starts with a valid URI scheme. +*/ +SERD_API +bool +serd_uri_string_has_scheme(const uint8_t* utf8); + +/** + Parse @c utf8, writing result to @c out. +*/ +SERD_API +SerdStatus +serd_uri_parse(const uint8_t* utf8, SerdURI* out); + +/** + Set @c out to @c uri resolved against @c base. +*/ +SERD_API +void +serd_uri_resolve(const SerdURI* uri, const SerdURI* base, SerdURI* out); + +/** + Sink function for raw string output. +*/ +typedef size_t (*SerdSink)(const void* buf, size_t len, void* stream); + +/** + Serialise @c uri with a series of calls to @c sink. +*/ +SERD_API +size_t +serd_uri_serialise(const SerdURI* uri, SerdSink sink, void* stream); + +/** + Serialise @c uri relative to @c base with a series of calls to @c sink. + + The @c uri is written as a relative URI iff if it a child of @c base and @c + root. The optional @c root parameter must be a prefix of @c base and can be + used keep up-references ("../") within a certain namespace. +*/ +SERD_API +size_t +serd_uri_serialise_relative(const SerdURI* uri, + const SerdURI* base, + const SerdURI* root, + SerdSink sink, + void* stream); + +/** + @} + @name Node + @{ +*/ + +static const SerdNode SERD_NODE_NULL = { 0, 0, 0, 0, SERD_NOTHING }; + +/** + Make a (shallow) node from @c str. + + This measures, but does not copy, @c str. No memory is allocated. +*/ +SERD_API +SerdNode +serd_node_from_string(SerdType type, const uint8_t* str); + +/** + Make a deep copy of @c node. + + @return a node that the caller must free with @ref serd_node_free. +*/ +SERD_API +SerdNode +serd_node_copy(const SerdNode* node); + +/** + Return true iff @c a is equal to @c b. +*/ +SERD_API +bool +serd_node_equals(const SerdNode* a, const SerdNode* b); + +/** + Simple wrapper for serd_node_new_uri to resolve a URI node. +*/ +SERD_API +SerdNode +serd_node_new_uri_from_node(const SerdNode* uri_node, + const SerdURI* base, + SerdURI* out); + +/** + Simple wrapper for serd_node_new_uri to resolve a URI string. +*/ +SERD_API +SerdNode +serd_node_new_uri_from_string(const uint8_t* str, + const SerdURI* base, + SerdURI* out); + +/** + Create a new file URI node from a file system path and optional hostname. + + Backslashes in Windows paths will be converted and '%' will always be + percent encoded. If @c escape is true, all other invalid characters will be + percent encoded as well. + + If @c path is relative, @c hostname is ignored. + If @c out is not NULL, it will be set to the parsed URI. +*/ +SERD_API +SerdNode +serd_node_new_file_uri(const uint8_t* path, + const uint8_t* hostname, + SerdURI* out, + bool escape); + +/** + Create a new node by serialising @c uri into a new string. + + @param uri The URI to parse and serialise. + + @param base Base URI to resolve @c uri against (or NULL for no resolution). + + @param out Set to the parsing of the new URI (i.e. points only to + memory owned by the new returned node). +*/ +SERD_API +SerdNode +serd_node_new_uri(const SerdURI* uri, const SerdURI* base, SerdURI* out); + +/** + Create a new node by serialising @c d into an xsd:decimal string. + + The resulting node will always contain a `.', start with a digit, and end + with a digit (i.e. will have a leading and/or trailing `0' if necessary). + It will never be in scientific notation. A maximum of @c frac_digits digits + will be written after the decimal point, but trailing zeros will + automatically be omitted (except one if @c d is a round integer). + + Note that about 16 and 8 fractional digits are required to precisely + represent a double and float, respectively. + + @param d The value for the new node. + @param frac_digits The maximum number of digits after the decimal place. +*/ +SERD_API +SerdNode +serd_node_new_decimal(double d, unsigned frac_digits); + +/** + Create a new node by serialising @c i into an xsd:integer string. +*/ +SERD_API +SerdNode +serd_node_new_integer(int64_t i); + +/** + Create a node by serialising @c buf into an xsd:base64Binary string. + This function can be used to make a serialisable node out of arbitrary + binary data, which can be decoded using serd_base64_decode(). + + @param buf Raw binary input data. + @param size Size of @c buf. + @param wrap_lines Wrap lines at 76 characters to conform to RFC 2045. +*/ +SERD_API +SerdNode +serd_node_new_blob(const void* buf, size_t size, bool wrap_lines); + +/** + Free any data owned by @c node. + + Note that if @c node is itself dynamically allocated (which is not the case + for nodes created internally by serd), it will not be freed. +*/ +SERD_API +void +serd_node_free(SerdNode* node); + +/** + @} + @name Event Handlers + @{ +*/ + +/** + Sink (callback) for errors. + + @param handle Handle for user data. + @param error Error description. +*/ +typedef SerdStatus (*SerdErrorSink)(void* handle, + const SerdError* error); + +/** + Sink (callback) for base URI changes. + + Called whenever the base URI of the serialisation changes. +*/ +typedef SerdStatus (*SerdBaseSink)(void* handle, + const SerdNode* uri); + +/** + Sink (callback) for namespace definitions. + + Called whenever a prefix is defined in the serialisation. +*/ +typedef SerdStatus (*SerdPrefixSink)(void* handle, + const SerdNode* name, + const SerdNode* uri); + +/** + Sink (callback) for statements. + + Called for every RDF statement in the serialisation. +*/ +typedef SerdStatus (*SerdStatementSink)(void* handle, + SerdStatementFlags flags, + const SerdNode* graph, + const SerdNode* subject, + const SerdNode* predicate, + const SerdNode* object, + const SerdNode* object_datatype, + const SerdNode* object_lang); + +/** + Sink (callback) for anonymous node end markers. + + This is called to indicate that the anonymous node with the given + @c value will no longer be referred to by any future statements + (i.e. the anonymous serialisation of the node is finished). +*/ +typedef SerdStatus (*SerdEndSink)(void* handle, + const SerdNode* node); + +/** + @} + @name Environment + @{ +*/ + +/** + Create a new environment. +*/ +SERD_API +SerdEnv* +serd_env_new(const SerdNode* base_uri); + +/** + Free @c ns. +*/ +SERD_API +void +serd_env_free(SerdEnv* env); + +/** + Get the current base URI. +*/ +SERD_API +const SerdNode* +serd_env_get_base_uri(const SerdEnv* env, + SerdURI* out); + +/** + Set the current base URI. +*/ +SERD_API +SerdStatus +serd_env_set_base_uri(SerdEnv* env, + const SerdNode* uri); + +/** + Set a namespace prefix. +*/ +SERD_API +SerdStatus +serd_env_set_prefix(SerdEnv* env, + const SerdNode* name, + const SerdNode* uri); + +/** + Set a namespace prefix. +*/ +SERD_API +SerdStatus +serd_env_set_prefix_from_strings(SerdEnv* env, + const uint8_t* name, + const uint8_t* uri); + +/** + Qualify @c uri into a CURIE if possible. +*/ +SERD_API +bool +serd_env_qualify(const SerdEnv* env, + const SerdNode* uri, + SerdNode* prefix, + SerdChunk* suffix); + +/** + Expand @c curie. +*/ +SERD_API +SerdStatus +serd_env_expand(const SerdEnv* env, + const SerdNode* curie, + SerdChunk* uri_prefix, + SerdChunk* uri_suffix); + +/** + Expand @c node, which must be a CURIE or URI, to a full URI. +*/ +SERD_API +SerdNode +serd_env_expand_node(const SerdEnv* env, + const SerdNode* node); + +/** + Call @c func for each prefix defined in @c env. +*/ +SERD_API +void +serd_env_foreach(const SerdEnv* env, + SerdPrefixSink func, + void* handle); + +/** + @} + @name Reader + @{ +*/ + +/** + Create a new RDF reader. +*/ +SERD_API +SerdReader* +serd_reader_new(SerdSyntax syntax, + void* handle, + void (*free_handle)(void*), + SerdBaseSink base_sink, + SerdPrefixSink prefix_sink, + SerdStatementSink statement_sink, + SerdEndSink end_sink); + +/** + Set a function to be called when errors occur during reading. + + The @p error_sink will be called with @p handle as its first argument. If + no error function is set, errors are printed to stderr in GCC style. +*/ +SERD_API +void +serd_reader_set_error_sink(SerdReader* reader, + SerdErrorSink error_sink, + void* handle); + +/** + Return the @c handle passed to @ref serd_reader_new. +*/ +SERD_API +void* +serd_reader_get_handle(const SerdReader* reader); + +/** + Set a prefix to be added to all blank node identifiers. + + This is useful when multiple files are to be parsed into the same output + (e.g. a store, or other files). Since Serd preserves blank node IDs, this + could cause conflicts where two non-equivalent blank nodes are merged, + resulting in corrupt data. By setting a unique blank node prefix for each + parsed file, this can be avoided, while preserving blank node names. +*/ +SERD_API +void +serd_reader_add_blank_prefix(SerdReader* reader, + const uint8_t* prefix); + +/** + Set the URI of the default graph. + + If this is set, the reader will emit quads with the graph set to the given + node for any statements that are not in a named graph (which is currently + all of them since Serd currently does not support any graph syntaxes). +*/ +SERD_API +void +serd_reader_set_default_graph(SerdReader* reader, + const SerdNode* graph); + +/** + Read a file at a given @c uri. +*/ +SERD_API +SerdStatus +serd_reader_read_file(SerdReader* reader, + const uint8_t* uri); + +/** + Start an incremental read from a file handle. + + Iff @p bulk is true, @p file will be read a page at a time. This is more + efficient, but uses a page of memory and means that an entire page of input + must be ready before any callbacks will fire. To react as soon as input + arrives, set @p bulk to false. +*/ +SERD_API +SerdStatus +serd_reader_start_stream(SerdReader* me, + FILE* file, + const uint8_t* name, + bool bulk); + +/** + Read a single "chunk" of data during an incremental read. + + This function will read a single top level description, and return. This + may be a directive, statement, or several statements; essentially it reads + until a '.' is encountered. This is particularly useful for reading + directly from a pipe or socket. +*/ +SERD_API +SerdStatus +serd_reader_read_chunk(SerdReader* me); + +/** + Finish an incremental read from a file handle. +*/ +SERD_API +SerdStatus +serd_reader_end_stream(SerdReader* me); + +/** + Read @c file. +*/ +SERD_API +SerdStatus +serd_reader_read_file_handle(SerdReader* reader, + FILE* file, + const uint8_t* name); + +/** + Read @c utf8. +*/ +SERD_API +SerdStatus +serd_reader_read_string(SerdReader* me, const uint8_t* utf8); + +/** + Free @c reader. +*/ +SERD_API +void +serd_reader_free(SerdReader* reader); + +/** + @} + @name Writer + @{ +*/ + +/** + Create a new RDF writer. +*/ +SERD_API +SerdWriter* +serd_writer_new(SerdSyntax syntax, + SerdStyle style, + SerdEnv* env, + const SerdURI* base_uri, + SerdSink sink, + void* stream); + +/** + Free @c writer. +*/ +SERD_API +void +serd_writer_free(SerdWriter* writer); + +/** + Return the env used by @c writer. +*/ +SERD_API +SerdEnv* +serd_writer_get_env(SerdWriter* writer); + +/** + A convenience sink function for writing to a FILE*. + + This function can be used as a SerdSink when writing to a FILE*. The + @c stream parameter must be a FILE* opened for writing. +*/ +SERD_API +size_t +serd_file_sink(const void* buf, size_t len, void* stream); + +/** + A convenience sink function for writing to a string. + + This function can be used as a SerdSink to write to a SerdChunk which is + resized as necessary with realloc(). The @c stream parameter must point to + an initialized SerdChunk. When the write is finished, the string should be + retrieved with serd_chunk_sink_finish(). +*/ +SERD_API +size_t +serd_chunk_sink(const void* buf, size_t len, void* stream); + +/** + Finish a serialisation to a chunk with serd_chunk_sink(). + + The returned string is the result of the serialisation, which is NULL + terminated (by this function) and owned by the caller. +*/ +SERD_API +uint8_t* +serd_chunk_sink_finish(SerdChunk* stream); + +/** + Set a function to be called when errors occur during writing. + + The @p error_sink will be called with @p handle as its first argument. If + no error function is set, errors are printed to stderr. +*/ +SERD_API +void +serd_writer_set_error_sink(SerdWriter* writer, + SerdErrorSink error_sink, + void* handle); + +/** + Set a prefix to be removed from matching blank node identifiers. +*/ +SERD_API +void +serd_writer_chop_blank_prefix(SerdWriter* writer, + const uint8_t* prefix); + +/** + Set the current output base URI (and emit directive if applicable). + + Note this function can be safely casted to SerdBaseSink. +*/ +SERD_API +SerdStatus +serd_writer_set_base_uri(SerdWriter* writer, + const SerdNode* uri); + +/** + Set the current root URI. + + The root URI should be a prefix of the base URI. The path of the root URI + is the highest path any relative up-reference can refer to. For example, + with root and base , + will be written as <../>, but will be + written non-relatively as . If the root is not explicitly set, + it defaults to the base URI, so no up-references will be created at all. +*/ +SERD_API +SerdStatus +serd_writer_set_root_uri(SerdWriter* writer, + const SerdNode* uri); + +/** + Set a namespace prefix (and emit directive if applicable). + + Note this function can be safely casted to SerdPrefixSink. +*/ +SERD_API +SerdStatus +serd_writer_set_prefix(SerdWriter* writer, + const SerdNode* name, + const SerdNode* uri); + +/** + Write a statement. + + Note this function can be safely casted to SerdStatementSink. +*/ +SERD_API +SerdStatus +serd_writer_write_statement(SerdWriter* writer, + SerdStatementFlags flags, + const SerdNode* graph, + const SerdNode* subject, + const SerdNode* predicate, + const SerdNode* object, + const SerdNode* object_datatype, + const SerdNode* object_lang); + +/** + Mark the end of an anonymous node's description. + + Note this function can be safely casted to SerdEndSink. +*/ +SERD_API +SerdStatus +serd_writer_end_anon(SerdWriter* writer, + const SerdNode* node); + +/** + Finish a write. +*/ +SERD_API +SerdStatus +serd_writer_finish(SerdWriter* writer); + +/** + @} + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* SERD_SERD_H */ diff --git a/source/libs/lilv/serd-0.18.2/src/env.c b/source/libs/lilv/serd-0.18.2/src/env.c new file mode 100644 index 000000000..c37b6b6bd --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/env.c @@ -0,0 +1,271 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "serd_internal.h" + +#include +#include +#include + +typedef struct { + SerdNode name; + SerdNode uri; +} SerdPrefix; + +struct SerdEnvImpl { + SerdPrefix* prefixes; + size_t n_prefixes; + SerdNode base_uri_node; + SerdURI base_uri; +}; + +SERD_API +SerdEnv* +serd_env_new(const SerdNode* base_uri) +{ + SerdEnv* env = (SerdEnv*)malloc(sizeof(struct SerdEnvImpl)); + env->prefixes = NULL; + env->n_prefixes = 0; + env->base_uri_node = SERD_NODE_NULL; + env->base_uri = SERD_URI_NULL; + if (base_uri) { + serd_env_set_base_uri(env, base_uri); + } + return env; +} + +SERD_API +void +serd_env_free(SerdEnv* env) +{ + for (size_t i = 0; i < env->n_prefixes; ++i) { + serd_node_free(&env->prefixes[i].name); + serd_node_free(&env->prefixes[i].uri); + } + free(env->prefixes); + serd_node_free(&env->base_uri_node); + free(env); +} + +SERD_API +const SerdNode* +serd_env_get_base_uri(const SerdEnv* env, + SerdURI* out) +{ + if (out) { + *out = env->base_uri; + } + return &env->base_uri_node; +} + +SERD_API +SerdStatus +serd_env_set_base_uri(SerdEnv* env, + const SerdNode* uri_node) +{ + // Resolve base URI and create a new node and URI for it + SerdURI base_uri; + SerdNode base_uri_node = serd_node_new_uri_from_node( + uri_node, &env->base_uri, &base_uri); + + if (base_uri_node.buf) { + // Replace the current base URI + serd_node_free(&env->base_uri_node); + env->base_uri_node = base_uri_node; + env->base_uri = base_uri; + return SERD_SUCCESS; + } + return SERD_ERR_BAD_ARG; +} + +static inline SerdPrefix* +serd_env_find(const SerdEnv* env, + const uint8_t* name, + size_t name_len) +{ + for (size_t i = 0; i < env->n_prefixes; ++i) { + const SerdNode* const prefix_name = &env->prefixes[i].name; + if (prefix_name->n_bytes == name_len) { + if (!memcmp(prefix_name->buf, name, name_len)) { + return &env->prefixes[i]; + } + } + } + return NULL; +} + +static void +serd_env_add(SerdEnv* env, + const SerdNode* name, + const SerdNode* uri) +{ + SerdPrefix* const prefix = serd_env_find(env, name->buf, name->n_bytes); + if (prefix) { + SerdNode old_prefix_uri = prefix->uri; + prefix->uri = serd_node_copy(uri); + serd_node_free(&old_prefix_uri); + } else { + env->prefixes = (SerdPrefix*)realloc( + env->prefixes, (++env->n_prefixes) * sizeof(SerdPrefix)); + env->prefixes[env->n_prefixes - 1].name = serd_node_copy(name); + env->prefixes[env->n_prefixes - 1].uri = serd_node_copy(uri); + } +} + +SERD_API +SerdStatus +serd_env_set_prefix(SerdEnv* env, + const SerdNode* name, + const SerdNode* uri_node) +{ + if (!name->buf || uri_node->type != SERD_URI) { + return SERD_ERR_BAD_ARG; + } else if (serd_uri_string_has_scheme(uri_node->buf)) { + // Set prefix to absolute URI + serd_env_add(env, name, uri_node); + } else { + // Resolve relative URI and create a new node and URI for it + SerdURI abs_uri; + SerdNode abs_uri_node = serd_node_new_uri_from_node( + uri_node, &env->base_uri, &abs_uri); + + // Set prefix to resolved (absolute) URI + serd_env_add(env, name, &abs_uri_node); + serd_node_free(&abs_uri_node); + } + return SERD_SUCCESS; +} + +SERD_API +SerdStatus +serd_env_set_prefix_from_strings(SerdEnv* env, + const uint8_t* name, + const uint8_t* uri) +{ + const SerdNode name_node = serd_node_from_string(SERD_LITERAL, name); + const SerdNode uri_node = serd_node_from_string(SERD_URI, uri); + + return serd_env_set_prefix(env, &name_node, &uri_node); +} + +static inline bool +is_nameChar(const uint8_t c) +{ + return is_alpha(c) || is_digit(c) || c == '_'; +} + +/** + Return true iff @c buf is a valid prefixed name suffix. + TODO: This is more strict than it should be. +*/ +static inline bool +is_name(const uint8_t* buf, size_t len) +{ + for (size_t i = 0; i < len; ++i) { + if (!is_nameChar(buf[i])) { + return false; + } + } + return true; +} + +SERD_API +bool +serd_env_qualify(const SerdEnv* env, + const SerdNode* uri, + SerdNode* prefix_name, + SerdChunk* suffix) +{ + for (size_t i = 0; i < env->n_prefixes; ++i) { + const SerdNode* const prefix_uri = &env->prefixes[i].uri; + if (uri->n_bytes >= prefix_uri->n_bytes) { + if (!strncmp((const char*)uri->buf, + (const char*)prefix_uri->buf, + prefix_uri->n_bytes)) { + *prefix_name = env->prefixes[i].name; + suffix->buf = uri->buf + prefix_uri->n_bytes; + suffix->len = uri->n_bytes - prefix_uri->n_bytes; + if (is_name(suffix->buf, suffix->len)) { + return true; + } + } + } + } + return false; +} + +SERD_API +SerdStatus +serd_env_expand(const SerdEnv* env, + const SerdNode* qname, + SerdChunk* uri_prefix, + SerdChunk* uri_suffix) +{ + const uint8_t* const colon = (const uint8_t*)memchr( + qname->buf, ':', qname->n_bytes + 1); + if (!colon) { + return SERD_ERR_BAD_ARG; // Invalid qname + } + + const size_t name_len = colon - qname->buf; + const SerdPrefix* const prefix = serd_env_find(env, qname->buf, name_len); + if (prefix) { + uri_prefix->buf = prefix->uri.buf; + uri_prefix->len = prefix->uri.n_bytes; + uri_suffix->buf = colon + 1; + uri_suffix->len = qname->n_bytes - (colon - qname->buf) - 1; + return SERD_SUCCESS; + } + return SERD_ERR_NOT_FOUND; +} + +SERD_API +SerdNode +serd_env_expand_node(const SerdEnv* env, + const SerdNode* node) +{ + switch (node->type) { + case SERD_CURIE: { + SerdChunk prefix; + SerdChunk suffix; + if (serd_env_expand(env, node, &prefix, &suffix)) { + return SERD_NODE_NULL; + } + const size_t len = prefix.len + suffix.len; // FIXME: UTF-8? + uint8_t* buf = (uint8_t*)malloc(len + 1); + SerdNode ret = { buf, len, len, 0, SERD_URI }; + snprintf((char*)buf, ret.n_bytes + 1, "%s%s", prefix.buf, suffix.buf); + return ret; + } + case SERD_URI: { + SerdURI ignored; + return serd_node_new_uri_from_node(node, &env->base_uri, &ignored); + } + default: + return SERD_NODE_NULL; + } +} + +SERD_API +void +serd_env_foreach(const SerdEnv* env, + SerdPrefixSink func, + void* handle) +{ + for (size_t i = 0; i < env->n_prefixes; ++i) { + func(handle, &env->prefixes[i].name, &env->prefixes[i].uri); + } +} diff --git a/source/libs/lilv/serd-0.18.2/src/node.c b/source/libs/lilv/serd-0.18.2/src/node.c new file mode 100644 index 000000000..065ff875e --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/node.c @@ -0,0 +1,347 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "serd_internal.h" + +#include +#include + +#include +#include + +#ifdef _WIN32 +# define isnan(x) _isnan(x) +# define isinf(x) (!_finite(x)) +#endif + +SERD_API +SerdNode +serd_node_from_string(SerdType type, const uint8_t* buf) +{ + if (!buf) { + return SERD_NODE_NULL; + } + + uint32_t flags = 0; + size_t buf_n_bytes = 0; + const size_t buf_n_chars = serd_strlen(buf, &buf_n_bytes, &flags); + SerdNode ret = { buf, buf_n_bytes, buf_n_chars, flags, type }; + return ret; +} + +SERD_API +SerdNode +serd_node_copy(const SerdNode* node) +{ + if (!node || !node->buf) { + return SERD_NODE_NULL; + } + + SerdNode copy = *node; + uint8_t* buf = (uint8_t*)malloc(copy.n_bytes + 1); + memcpy(buf, node->buf, copy.n_bytes + 1); + copy.buf = buf; + return copy; +} + +SERD_API +bool +serd_node_equals(const SerdNode* a, const SerdNode* b) +{ + return (a == b) + || (a->type == b->type + && a->n_bytes == b->n_bytes + && a->n_chars == b->n_chars + && ((a->buf == b->buf) || !memcmp((const char*)a->buf, + (const char*)b->buf, + a->n_bytes + 1))); +} + +static size_t +serd_uri_string_length(const SerdURI* uri) +{ + size_t len = uri->path_base.len; + +#define ADD_LEN(field, n_delims) \ + if ((field).len) { len += (field).len + (n_delims); } + + ADD_LEN(uri->path, 1); // + possible leading `/' + ADD_LEN(uri->scheme, 1); // + trailing `:' + ADD_LEN(uri->authority, 2); // + leading `//' + ADD_LEN(uri->query, 1); // + leading `?' + ADD_LEN(uri->fragment, 1); // + leading `#' + + return len + 2; // + 2 for authority `//' +} + +static size_t +string_sink(const void* buf, size_t len, void* stream) +{ + uint8_t** ptr = (uint8_t**)stream; + memcpy(*ptr, buf, len); + *ptr += len; + return len; +} + +SERD_API +SerdNode +serd_node_new_uri_from_node(const SerdNode* uri_node, + const SerdURI* base, + SerdURI* out) +{ + return (uri_node->type == SERD_URI) + ? serd_node_new_uri_from_string(uri_node->buf, base, out) + : SERD_NODE_NULL; +} + +SERD_API +SerdNode +serd_node_new_uri_from_string(const uint8_t* str, + const SerdURI* base, + SerdURI* out) +{ + if (!str || str[0] == '\0') { + return serd_node_new_uri(base, NULL, out); // Empty URI => Base URI + } + SerdURI uri; + serd_uri_parse(str, &uri); + return serd_node_new_uri(&uri, base, out); // Resolve/Serialise +} + +static inline bool +is_uri_path_char(const uint8_t c) +{ + if (is_alpha(c) || is_digit(c)) { + return true; + } + switch (c) { + case '-': case '.': case '_': case '~': // unreserved + case ':': case '@': // pchar + case '/': // separator + // sub-delims + case '!': case '$': case '&': case '\'': case '(': case ')': + case '*': case '+': case ',': case ';': case '=': + return true; + default: + return false; + } +} + +SERD_API +SerdNode +serd_node_new_file_uri(const uint8_t* path, + const uint8_t* hostname, + SerdURI* out, + bool escape) +{ + const size_t path_len = strlen((const char*)path); + const size_t hostname_len = hostname ? strlen((const char*)hostname) : 0; + const bool evil = is_windows_path(path); + size_t uri_len = 0; + uint8_t* uri = NULL; + + if (path[0] == '/' || is_windows_path(path)) { + uri_len = strlen("file://") + hostname_len + evil; + uri = (uint8_t*)malloc(uri_len + 1); + snprintf((char*)uri, uri_len + 1, "file://%s%s", + hostname ? (const char*)hostname : "", + evil ? "/" : ""); + } + + SerdChunk chunk = { uri, uri_len }; + for (size_t i = 0; i < path_len; ++i) { + if (evil && path[i] == '\\') { + serd_chunk_sink("/", 1, &chunk); + } else if (path[i] == '%') { + serd_chunk_sink("%%", 2, &chunk); + } else if (!escape || is_uri_path_char(path[i])) { + serd_chunk_sink(path + i, 1, &chunk); + } else { + char escape_str[4] = { '%', 0, 0, 0 }; + snprintf(escape_str + 1, sizeof(escape_str) - 1, "%X", path[i]); + serd_chunk_sink(escape_str, 3, &chunk); + } + } + serd_chunk_sink_finish(&chunk); + + if (out) { + serd_uri_parse(chunk.buf, out); + } + + return serd_node_from_string(SERD_URI, chunk.buf); +} + +SERD_API +SerdNode +serd_node_new_uri(const SerdURI* uri, const SerdURI* base, SerdURI* out) +{ + SerdURI abs_uri = *uri; + if (base) { + serd_uri_resolve(uri, base, &abs_uri); + } + + const size_t len = serd_uri_string_length(&abs_uri); + uint8_t* buf = (uint8_t*)malloc(len + 1); + + SerdNode node = { buf, len, len, 0, SERD_URI }; // FIXME: UTF-8 + + uint8_t* ptr = buf; + const size_t actual_len = serd_uri_serialise(&abs_uri, string_sink, &ptr); + + buf[actual_len] = '\0'; + node.n_bytes = actual_len; + node.n_chars = actual_len; + + if (out) { + serd_uri_parse(buf, out); // TODO: cleverly avoid double parse + } + + return node; +} + +SERD_API +SerdNode +serd_node_new_decimal(double d, unsigned frac_digits) +{ + if (isnan(d) || isinf(d)) { + return SERD_NODE_NULL; + } + + const double abs_d = fabs(d); + const unsigned int_digits = (unsigned)fmax(1.0, ceil(log10(abs_d + 1))); + char* buf = (char*)calloc(int_digits + frac_digits + 3, 1); + SerdNode node = { (const uint8_t*)buf, 0, 0, 0, SERD_LITERAL }; + const double int_part = floor(abs_d); + + // Point s to decimal point location + char* s = buf + int_digits; + if (d < 0.0) { + *buf = '-'; + ++s; + } + + // Write integer part (right to left) + char* t = s - 1; + uint64_t dec = (uint64_t)int_part; + do { + *t-- = '0' + (dec % 10); + } while ((dec /= 10) > 0); + + *s++ = '.'; + + // Write fractional part (right to left) + double frac_part = fabs(d - int_part); + if (frac_part < DBL_EPSILON) { + *s++ = '0'; + node.n_bytes = node.n_chars = (s - buf); + } else { + uint64_t frac = frac_part * pow(10.0, (int)frac_digits) + 0.5; + s += frac_digits - 1; + unsigned i = 0; + + // Skip trailing zeros + for (; i < frac_digits - 1 && !(frac % 10); ++i, --s, frac /= 10) {} + + node.n_bytes = node.n_chars = (s - buf) + 1; + + // Write digits from last trailing zero to decimal point + for (; i < frac_digits; ++i) { + *s-- = '0' + (frac % 10); + frac /= 10; + } + } + + return node; +} + +SERD_API +SerdNode +serd_node_new_integer(int64_t i) +{ + int64_t abs_i = (i < 0) ? -i : i; + const unsigned digits = fmax(1.0, ceil(log10((double)abs_i + 1))); + char* buf = (char*)calloc(digits + 2, 1); + SerdNode node = { (const uint8_t*)buf, 0, 0, 0, SERD_LITERAL }; + + // Point s to the end + char* s = buf + digits - 1; + if (i < 0) { + *buf = '-'; + ++s; + } + + node.n_bytes = node.n_chars = (s - buf) + 1; + + // Write integer part (right to left) + do { + *s-- = '0' + (abs_i % 10); + } while ((abs_i /= 10) > 0); + + return node; +} + +/** + Base64 encoding table. + @see RFC3986 S3. +*/ +static const uint8_t b64_map[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +/** + Encode 3 raw bytes to 4 base64 characters. +*/ +static inline void +encode_chunk(uint8_t out[4], const uint8_t in[3], size_t n_in) +{ + out[0] = b64_map[in[0] >> 2]; + out[1] = b64_map[((in[0] & 0x03) << 4) | ((in[1] & 0xF0) >> 4)]; + out[2] = ((n_in > 1) + ? (b64_map[((in[1] & 0x0F) << 2) | ((in[2] & 0xC0) >> 6)]) + : (uint8_t)'='); + out[3] = ((n_in > 2) ? b64_map[in[2] & 0x3F] : (uint8_t)'='); +} + +SERD_API +SerdNode +serd_node_new_blob(const void* buf, size_t size, bool wrap_lines) +{ + const size_t len = ((size + 2) / 3) * 4 + (wrap_lines ? (size / 57) : 0); + uint8_t* str = (uint8_t*)calloc(1, len + 2); + SerdNode node = { str, len, len, 0, SERD_LITERAL }; + for (size_t i = 0, j = 0; i < size; i += 3, j += 4) { + uint8_t in[4] = { 0, 0, 0, 0 }; + size_t n_in = MIN(3, size - i); + memcpy(in, (const uint8_t*)buf + i, n_in); + + if (wrap_lines && i > 0 && (i % 57) == 0) { + str[j++] = '\n'; + node.flags |= SERD_HAS_NEWLINE; + } + + encode_chunk(str + j, in, n_in); + } + return node; +} + +SERD_API +void +serd_node_free(SerdNode* node) +{ + if (node->buf) { + free((uint8_t*)node->buf); + node->buf = NULL; + } +} diff --git a/source/libs/lilv/serd-0.18.2/src/reader.c b/source/libs/lilv/serd-0.18.2/src/reader.c new file mode 100644 index 000000000..c97228d3b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/reader.c @@ -0,0 +1,1585 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "serd_internal.h" + +#include +#include +#include +#include +#include +#include +#include + +#define NS_XSD "http://www.w3.org/2001/XMLSchema#" +#define NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + +#define TRY_THROW(exp) if (!(exp)) goto except; +#define TRY_RET(exp) if (!(exp)) return 0; + +#ifdef SERD_STACK_CHECK +# define SERD_STACK_ASSERT_TOP(reader, ref) \ + assert(ref == reader->allocs[reader->n_allocs - 1]); +#else +# define SERD_STACK_ASSERT_TOP(reader, ref) +#endif + +typedef struct { + const uint8_t* filename; + unsigned line; + unsigned col; +} Cursor; + +typedef uint32_t uchar; + +/* Reference to a node in the stack (we can not use pointers since the + stack may be reallocated, invalidating any pointers to elements). +*/ +typedef size_t Ref; + +typedef struct { + Ref graph; + Ref subject; + Ref predicate; + SerdStatementFlags* flags; +} ReadContext; + +struct SerdReaderImpl { + void* handle; + void (*free_handle)(void* ptr); + SerdBaseSink base_sink; + SerdPrefixSink prefix_sink; + SerdStatementSink statement_sink; + SerdEndSink end_sink; + SerdErrorSink error_sink; + void* error_handle; + Ref rdf_first; + Ref rdf_rest; + Ref rdf_nil; + SerdNode default_graph; + FILE* fd; + SerdStack stack; + SerdSyntax syntax; + Cursor cur; + uint8_t* buf; + uint8_t* bprefix; + size_t bprefix_len; + unsigned next_id; + uint8_t* read_buf; + int32_t read_head; ///< Offset into read_buf + uint8_t read_byte; ///< 1-byte 'buffer' used when not paging + bool from_file; ///< True iff reading from @ref fd + bool paging; ///< True iff reading a page at a time + bool eof; + bool seen_genid; +#ifdef SERD_STACK_CHECK + Ref* allocs; ///< Stack of push offsets + size_t n_allocs; ///< Number of stack pushes +#endif +}; + +static int +r_err(SerdReader* reader, SerdStatus st, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + const SerdError e = { + st, reader->cur.filename, reader->cur.line, reader->cur.col, fmt, &args + }; + serd_error(reader->error_sink, reader->error_handle, &e); + va_end(args); + return 0; +} + +static inline SerdStatus +page(SerdReader* reader) +{ + reader->read_head = 0; + size_t n_read = fread(reader->read_buf, 1, SERD_PAGE_SIZE, reader->fd); + if (n_read == 0) { + reader->read_buf[0] = '\0'; + reader->eof = true; + return ferror(reader->fd) ? SERD_ERR_UNKNOWN : SERD_FAILURE; + } else if (n_read < SERD_PAGE_SIZE) { + reader->read_buf[n_read] = '\0'; + } + return SERD_SUCCESS; +} + +static inline uint8_t +peek_byte(SerdReader* reader) +{ + return reader->read_buf[reader->read_head]; +} + +static inline uint8_t +eat_byte_safe(SerdReader* reader, const uint8_t byte) +{ + assert(peek_byte(reader) == byte); + switch (byte) { + case '\0': reader->eof = true; break; + case '\n': ++reader->cur.line; reader->cur.col = 0; break; + default: ++reader->cur.col; + } + + if (reader->from_file && !reader->paging) { + const int c = fgetc(reader->fd); + reader->read_byte = (c == EOF) ? 0 : (uint8_t)c; + if (c == EOF) { + reader->eof = true; + } + } else if (++reader->read_head == SERD_PAGE_SIZE && reader->paging) { + page(reader); + } + return byte; +} + +static inline uint8_t +eat_byte_check(SerdReader* reader, const uint8_t byte) +{ + const uint8_t c = peek_byte(reader); + if (c != byte) { + return r_err(reader, SERD_ERR_BAD_SYNTAX, + "expected `%c', not `%c'\n", byte, c); + } + return eat_byte_safe(reader, byte); +} + +static inline void +eat_string(SerdReader* reader, const char* str, unsigned n) +{ + for (unsigned i = 0; i < n; ++i) { + eat_byte_check(reader, ((const uint8_t*)str)[i]); + } +} + +static Ref +push_node_padded(SerdReader* reader, size_t maxlen, + SerdType type, const char* str, size_t n_bytes) +{ + uint8_t* mem = serd_stack_push(&reader->stack, + sizeof(SerdNode) + maxlen + 1); + + SerdNode* const node = (SerdNode*)mem; + node->n_bytes = node->n_chars = n_bytes; + node->flags = 0; + node->type = type; + node->buf = NULL; + + uint8_t* buf = mem + sizeof(SerdNode); + memcpy(buf, str, n_bytes + 1); + +#ifdef SERD_STACK_CHECK + reader->allocs = realloc( + reader->allocs, sizeof(uint8_t*) * (++reader->n_allocs)); + reader->allocs[reader->n_allocs - 1] = (mem - reader->stack.buf); +#endif + return (uint8_t*)node - reader->stack.buf; +} + +static Ref +push_node(SerdReader* reader, SerdType type, const char* str, size_t n_bytes) +{ + return push_node_padded(reader, n_bytes, type, str, n_bytes); +} + +static inline SerdNode* +deref(SerdReader* reader, const Ref ref) +{ + if (ref) { + SerdNode* node = (SerdNode*)(reader->stack.buf + ref); + node->buf = (uint8_t*)node + sizeof(SerdNode); + return node; + } + return NULL; +} + +static inline void +push_byte(SerdReader* reader, Ref ref, const uint8_t c) +{ + SERD_STACK_ASSERT_TOP(reader, ref); + uint8_t* const s = serd_stack_push(&reader->stack, 1); + SerdNode* const node = (SerdNode*)(reader->stack.buf + ref); + ++node->n_bytes; + if (!(c & 0x80)) { // Starts with 0 bit, start of new character + ++node->n_chars; + } + *(s - 1) = c; + *s = '\0'; +} + +static inline void +push_replacement(SerdReader* reader, Ref dest) +{ + push_byte(reader, dest, 0xEF); + push_byte(reader, dest, 0xBF); + push_byte(reader, dest, 0xBD); +} + +static Ref +pop_node(SerdReader* reader, Ref ref) +{ + if (ref && ref != reader->rdf_first && ref != reader->rdf_rest + && ref != reader->rdf_nil) { +#ifdef SERD_STACK_CHECK + SERD_STACK_ASSERT_TOP(reader, ref); + --reader->n_allocs; +#endif + SerdNode* const node = deref(reader, ref); + uint8_t* const top = reader->stack.buf + reader->stack.size; + serd_stack_pop(&reader->stack, top - (uint8_t*)node); + } + return 0; +} + +static inline bool +emit_statement(SerdReader* reader, ReadContext ctx, Ref o, Ref d, Ref l) +{ + SerdNode* graph = deref(reader, ctx.graph); + if (!graph && reader->default_graph.buf) { + graph = &reader->default_graph; + } + bool ret = !reader->statement_sink || + !reader->statement_sink( + reader->handle, *ctx.flags, graph, + deref(reader, ctx.subject), deref(reader, ctx.predicate), + deref(reader, o), deref(reader, d), deref(reader, l)); + *ctx.flags &= SERD_ANON_CONT|SERD_LIST_CONT; // Preserve only cont flags + return ret; +} + +static bool +read_collection(SerdReader* reader, ReadContext ctx, Ref* dest); + +static bool +read_predicateObjectList(SerdReader* reader, ReadContext ctx); + +// [40] hex ::= [#x30-#x39] | [#x41-#x46] +static inline uint8_t +read_hex(SerdReader* reader) +{ + const uint8_t c = peek_byte(reader); + if (in_range(c, 0x30, 0x39) || in_range(c, 0x41, 0x46)) { + return eat_byte_safe(reader, c); + } else { + return r_err(reader, SERD_ERR_BAD_SYNTAX, + "invalid hexadecimal digit `%c'\n", c); + } +} + +static inline bool +read_hex_escape(SerdReader* reader, unsigned length, Ref dest) +{ + uint8_t buf[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + for (unsigned i = 0; i < length; ++i) { + if (!(buf[i] = read_hex(reader))) { + return false; + } + } + + uint32_t c; + sscanf((const char*)buf, "%X", &c); + + unsigned size = 0; + if (c < 0x00000080) { + size = 1; + } else if (c < 0x00000800) { + size = 2; + } else if (c < 0x00010000) { + size = 3; + } else if (c < 0x00110000) { + size = 4; + } else { + r_err(reader, SERD_ERR_BAD_SYNTAX, + "unicode character 0x%X out of range\n", c); + push_replacement(reader, dest); + return true; + } + + // Build output in buf + // (Note # of bytes = # of leading 1 bits in first byte) + switch (size) { + case 4: + buf[3] = 0x80 | (uint8_t)(c & 0x3F); + c >>= 6; + c |= (16 << 12); // set bit 4 + case 3: + buf[2] = 0x80 | (uint8_t)(c & 0x3F); + c >>= 6; + c |= (32 << 6); // set bit 5 + case 2: + buf[1] = 0x80 | (uint8_t)(c & 0x3F); + c >>= 6; + c |= 0xC0; // set bits 6 and 7 + case 1: + buf[0] = (uint8_t)c; + } + + for (unsigned i = 0; i < size; ++i) { + push_byte(reader, dest, buf[i]); + } + return true; +} + +static inline bool +read_character_escape(SerdReader* reader, Ref dest) +{ + switch (peek_byte(reader)) { + case '\\': + push_byte(reader, dest, eat_byte_safe(reader, '\\')); + return true; + case 'u': + eat_byte_safe(reader, 'u'); + return read_hex_escape(reader, 4, dest); + case 'U': + eat_byte_safe(reader, 'U'); + return read_hex_escape(reader, 8, dest); + default: + return false; + } +} + +static inline bool +read_echaracter_escape(SerdReader* reader, Ref dest, SerdNodeFlags* flags) +{ + switch (peek_byte(reader)) { + case 't': + eat_byte_safe(reader, 't'); + push_byte(reader, dest, '\t'); + return true; + case 'n': + *flags |= SERD_HAS_NEWLINE; + eat_byte_safe(reader, 'n'); + push_byte(reader, dest, '\n'); + return true; + case 'r': + *flags |= SERD_HAS_NEWLINE; + eat_byte_safe(reader, 'r'); + push_byte(reader, dest, '\r'); + return true; + default: + return read_character_escape(reader, dest); + } +} + +static inline bool +read_scharacter_escape(SerdReader* reader, Ref dest, SerdNodeFlags* flags) +{ + switch (peek_byte(reader)) { + case '"': + *flags |= SERD_HAS_QUOTE; + push_byte(reader, dest, eat_byte_safe(reader, '"')); + return true; + default: + return read_echaracter_escape(reader, dest, flags); + } +} + +static inline bool +read_ucharacter_escape(SerdReader* reader, Ref dest) +{ + SerdNodeFlags flags = 0; + switch (peek_byte(reader)) { + case '>': + push_byte(reader, dest, eat_byte_safe(reader, '>')); + return true; + default: + return read_echaracter_escape(reader, dest, &flags); + } +} + +static inline SerdStatus +bad_char(SerdReader* reader, Ref dest, const char* fmt, uint8_t c) +{ + r_err(reader, SERD_ERR_BAD_SYNTAX, fmt, c); + push_replacement(reader, dest); + + // Skip bytes until the next start byte + for (uint8_t b = peek_byte(reader); (b & 0x80);) { + eat_byte_safe(reader, b); + b = peek_byte(reader); + } + + return SERD_SUCCESS; +} + +static SerdStatus +read_utf8_character(SerdReader* reader, Ref dest, uint8_t c) +{ + unsigned size = 1; + if ((c & 0xE0) == 0xC0) { // Starts with `110' + size = 2; + } else if ((c & 0xF0) == 0xE0) { // Starts with `1110' + size = 3; + } else if ((c & 0xF8) == 0xF0) { // Starts with `11110' + size = 4; + } else { + return bad_char(reader, dest, "invalid UTF-8 start 0x%X\n", + eat_byte_safe(reader, c)); + } + + char bytes[4]; + bytes[0] = eat_byte_safe(reader, c); + + // Check character validity + for (unsigned i = 1; i < size; ++i) { + if (((bytes[i] = peek_byte(reader)) & 0x80) == 0) { + return bad_char(reader, dest, "invalid UTF-8 continuation 0x%X\n", + bytes[i]); + } + eat_byte_safe(reader, bytes[i]); + } + + // Emit character + for (unsigned i = 0; i < size; ++i) { + push_byte(reader, dest, bytes[i]); + } + return SERD_SUCCESS; +} + +// [38] character ::= '\u' hex hex hex hex +// | '\U' hex hex hex hex hex hex hex hex +// | '\\' +// | [#x20-#x5B] | [#x5D-#x10FFFF] +static inline SerdStatus +read_character(SerdReader* reader, Ref dest) +{ + const uint8_t c = peek_byte(reader); + assert(c != '\\'); // Only called from methods that handle escapes first + if (c == '\0') { + r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected end of input\n", c); + return SERD_ERR_BAD_SYNTAX; + } else if (c < 0x20) { + return bad_char(reader, dest, + "unexpected control character 0x%X\n", + eat_byte_safe(reader, c)); + } else if (!(c & 0x80)) { + push_byte(reader, dest, eat_byte_safe(reader, c)); + return SERD_SUCCESS; + } else { + return read_utf8_character(reader, dest, c); + } +} + +// [43] lcharacter ::= echaracter | '\"' | #x9 | #xA | #xD +static inline SerdStatus +read_lcharacter(SerdReader* reader, Ref dest, SerdNodeFlags* flags) +{ + const uint8_t c = peek_byte(reader); + uint8_t buf[2]; + switch (c) { + case '"': + eat_byte_safe(reader, '\"'); + buf[0] = eat_byte_safe(reader, peek_byte(reader)); + buf[1] = eat_byte_safe(reader, peek_byte(reader)); + if (buf[0] == '\"' && buf[1] == '\"') { + return SERD_FAILURE; + } else { + *flags |= SERD_HAS_QUOTE; + push_byte(reader, dest, c); + push_byte(reader, dest, buf[0]); + push_byte(reader, dest, buf[1]); + return SERD_SUCCESS; + } + case '\\': + eat_byte_safe(reader, '\\'); + if (read_scharacter_escape(reader, dest, flags)) { + return SERD_SUCCESS; + } else { + r_err(reader, SERD_ERR_BAD_SYNTAX, + "invalid escape `\\%c'\n", peek_byte(reader)); + return SERD_ERR_BAD_SYNTAX; + } + case 0xA: case 0xD: + *flags |= SERD_HAS_NEWLINE; + case 0x9: + push_byte(reader, dest, eat_byte_safe(reader, c)); + return SERD_SUCCESS; + default: + return read_character(reader, dest); + } +} + +// [42] scharacter ::= ( echaracter - #x22 ) | '\"' +static inline SerdStatus +read_scharacter(SerdReader* reader, Ref dest, SerdNodeFlags* flags) +{ + uint8_t c = peek_byte(reader); + switch (c) { + case '\\': + eat_byte_safe(reader, '\\'); + if (read_scharacter_escape(reader, dest, flags)) { + return SERD_SUCCESS; + } else { + r_err(reader, SERD_ERR_BAD_SYNTAX, + "invalid escape `\\%c'\n", peek_byte(reader)); + return SERD_ERR_BAD_SYNTAX; + } + case '\"': + return SERD_FAILURE; + default: + return read_character(reader, dest); + } +} + +// Spec: [41] ucharacter ::= ( character - #x3E ) | '\>' +// Impl: [41] ucharacter ::= ( echaracter - #x3E ) | '\>' +static inline SerdStatus +read_ucharacter(SerdReader* reader, Ref dest) +{ + const uint8_t c = peek_byte(reader); + switch (c) { + case '\\': + eat_byte_safe(reader, '\\'); + if (read_ucharacter_escape(reader, dest)) { + return SERD_SUCCESS; + } else { + r_err(reader, SERD_ERR_BAD_SYNTAX, + "invalid escape `\\%c'\n", peek_byte(reader)); + return SERD_FAILURE; + } + case '>': + return SERD_FAILURE; + default: + return read_character(reader, dest); + } +} + +// [10] comment ::= '#' ( [^#xA #xD] )* +static void +read_comment(SerdReader* reader) +{ + eat_byte_safe(reader, '#'); + uint8_t c; + while (((c = peek_byte(reader)) != 0xA) && (c != 0xD) && c) { + eat_byte_safe(reader, c); + } +} + +// [24] ws ::= #x9 | #xA | #xD | #x20 | comment +static inline bool +read_ws(SerdReader* reader) +{ + const uint8_t c = peek_byte(reader); + switch (c) { + case 0x9: case 0xA: case 0xD: case 0x20: + eat_byte_safe(reader, c); + return true; + case '#': + read_comment(reader); + return true; + default: + return false; + } +} + +static inline bool +read_ws_star(SerdReader* reader) +{ + while (read_ws(reader)) {} + return true; +} + +static inline bool +read_ws_plus(SerdReader* reader) +{ + TRY_RET(read_ws(reader)); + return read_ws_star(reader); +} + +static inline bool +peek_delim(SerdReader* reader, const char delim) +{ + read_ws_star(reader); + return peek_byte(reader) == delim; +} + +static inline bool +eat_delim(SerdReader* reader, const char delim) +{ + if (peek_delim(reader, delim)) { + eat_byte_safe(reader, delim); + return read_ws_star(reader); + } + return false; +} + +// [37] longString ::= #x22 #x22 #x22 lcharacter* #x22 #x22 #x22 +static Ref +read_longString(SerdReader* reader, SerdNodeFlags* flags) +{ + Ref ref = push_node(reader, SERD_LITERAL, "", 0); + SerdStatus st; + while (!(st = read_lcharacter(reader, ref, flags))) {} + if (st < SERD_ERR_UNKNOWN) { + return ref; + } + return pop_node(reader, ref); +} + +// [36] string ::= #x22 scharacter* #x22 +static Ref +read_string(SerdReader* reader, SerdNodeFlags* flags) +{ + Ref ref = push_node(reader, SERD_LITERAL, "", 0); + SerdStatus st; + while (!(st = read_scharacter(reader, ref, flags))) {} + if (st < SERD_ERR_UNKNOWN) { + eat_byte_check(reader, '\"'); + return ref; + } + return pop_node(reader, ref); +} + +// [35] quotedString ::= string | longString +static Ref +read_quotedString(SerdReader* reader, SerdNodeFlags* flags) +{ + eat_byte_safe(reader, '\"'); // q1 + const uint8_t q2 = peek_byte(reader); + if (q2 != '\"') { // Non-empty single-quoted string + return read_string(reader, flags); + } + + eat_byte_safe(reader, q2); + const uint8_t q3 = peek_byte(reader); + if (q3 != '\"') { // Empty single-quoted string + return push_node(reader, SERD_LITERAL, "", 0); + } + + eat_byte_safe(reader, '\"'); + return read_longString(reader, flags); +} + +// [34] relativeURI ::= ucharacter* +static inline Ref +read_relativeURI(SerdReader* reader) +{ + Ref ref = push_node(reader, SERD_URI, "", 0); + SerdStatus st; + while (!(st = read_ucharacter(reader, ref))) {} + if (st < SERD_ERR_UNKNOWN) { + return ref; + } + return pop_node(reader, ref); +} + +// [30] nameStartChar ::= [A-Z] | "_" | [a-z] +// | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] +// | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] +// | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] +static inline uchar +read_nameStartChar(SerdReader* reader) +{ + const uint8_t c = peek_byte(reader); + if (c == '_' || is_alpha(c) || is_digit(c)) { // TODO: Not correct + return eat_byte_safe(reader, c); + } + return 0; +} + +// [31] nameChar ::= nameStartChar | '-' | [0-9] +// | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] +static inline uchar +read_nameChar(SerdReader* reader) +{ + uchar c = read_nameStartChar(reader); + if (c) + return c; + + switch ((c = peek_byte(reader))) { + case '-': case 0xB7: case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + return eat_byte_safe(reader, c); + default: // TODO: 0x300-0x036F | 0x203F-0x2040 + return 0; + } + return 0; +} + +// [33] prefixName ::= ( nameStartChar - '_' ) nameChar* +static Ref +read_prefixName(SerdReader* reader, Ref dest) +{ + uint8_t c = peek_byte(reader); + if (c == '_') { + r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected `_'\n"); + return pop_node(reader, dest); + } + TRY_RET(c = read_nameStartChar(reader)); + if (!dest) { + dest = push_node(reader, SERD_CURIE, "", 0); + } + push_byte(reader, dest, c); + while ((c = read_nameChar(reader))) { + push_byte(reader, dest, c); + } + return dest; +} + +// [32] name ::= nameStartChar nameChar* +static Ref +read_name(SerdReader* reader, Ref dest) +{ + uchar c = read_nameStartChar(reader); + if (!c) { + return 0; + } + do { + push_byte(reader, dest, c); + } while ((c = read_nameChar(reader)) != 0); + return dest; +} + +// [29] language ::= [a-z]+ ('-' [a-z0-9]+ )* +static Ref +read_language(SerdReader* reader) +{ + uint8_t c = peek_byte(reader); + if (!in_range(c, 'a', 'z')) { + return r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected `%c'\n", c); + } + Ref ref = push_node(reader, SERD_LITERAL, "", 0); + push_byte(reader, ref, eat_byte_safe(reader, c)); + while ((c = peek_byte(reader)) && in_range(c, 'a', 'z')) { + push_byte(reader, ref, eat_byte_safe(reader, c)); + } + while (peek_byte(reader) == '-') { + push_byte(reader, ref, eat_byte_safe(reader, '-')); + while ((c = peek_byte(reader)) && ( + in_range(c, 'a', 'z') || in_range(c, '0', '9'))) { + push_byte(reader, ref, eat_byte_safe(reader, c)); + } + } + return ref; +} + +// [28] uriref ::= '<' relativeURI '>' +static Ref +read_uriref(SerdReader* reader) +{ + TRY_RET(eat_byte_check(reader, '<')); + Ref const str = read_relativeURI(reader); + if (str && eat_byte_check(reader, '>')) { + return str; + } + return pop_node(reader, str); +} + +// [27] qname ::= prefixName? ':' name? +static Ref +read_qname(SerdReader* reader, Ref dest, bool read_prefix) +{ + Ref str = 0; + if (!dest) { + dest = push_node(reader, SERD_CURIE, "", 0); + } + if (read_prefix) { + read_prefixName(reader, dest); + } + TRY_THROW(eat_byte_check(reader, ':')); + push_byte(reader, dest, ':'); + str = read_name(reader, dest); + return str ? str : dest; +except: + return pop_node(reader, dest); +} + +static bool +read_0_9(SerdReader* reader, Ref str, bool at_least_one) +{ + uint8_t c; + if (at_least_one) { + if (!is_digit((c = peek_byte(reader)))) { + return r_err(reader, SERD_ERR_BAD_SYNTAX, "expected digit\n"); + } + push_byte(reader, str, eat_byte_safe(reader, c)); + } + while (is_digit((c = peek_byte(reader)))) { + push_byte(reader, str, eat_byte_safe(reader, c)); + } + return true; +} + +// [19] exponent ::= [eE] ('-' | '+')? [0-9]+ +// [18] decimal ::= ( '-' | '+' )? ( [0-9]+ '.' [0-9]* +// | '.' ([0-9])+ +// | ([0-9])+ ) +// [17] double ::= ( '-' | '+' )? ( [0-9]+ '.' [0-9]* exponent +// | '.' ([0-9])+ exponent +// | ([0-9])+ exponent ) +// [16] integer ::= ( '-' | '+' ) ? [0-9]+ +static bool +read_number(SerdReader* reader, Ref* dest, Ref* datatype) +{ + #define XSD_DECIMAL NS_XSD "decimal" + #define XSD_DOUBLE NS_XSD "double" + #define XSD_INTEGER NS_XSD "integer" + Ref ref = push_node(reader, SERD_LITERAL, "", 0); + uint8_t c = peek_byte(reader); + bool has_decimal = false; + if (c == '-' || c == '+') { + push_byte(reader, ref, eat_byte_safe(reader, c)); + } + if ((c = peek_byte(reader)) == '.') { + has_decimal = true; + // decimal case 2 (e.g. '.0' or `-.0' or `+.0') + push_byte(reader, ref, eat_byte_safe(reader, c)); + TRY_THROW(read_0_9(reader, ref, true)); + } else { + // all other cases ::= ( '-' | '+' ) [0-9]+ ( . )? ( [0-9]+ )? ... + assert(is_digit(c)); + read_0_9(reader, ref, true); + if ((c = peek_byte(reader)) == '.') { + has_decimal = true; + push_byte(reader, ref, eat_byte_safe(reader, c)); + read_0_9(reader, ref, false); + } + } + c = peek_byte(reader); + if (c == 'e' || c == 'E') { + // double + push_byte(reader, ref, eat_byte_safe(reader, c)); + switch ((c = peek_byte(reader))) { + case '+': case '-': + push_byte(reader, ref, eat_byte_safe(reader, c)); + default: break; + } + read_0_9(reader, ref, true); + *datatype = push_node(reader, SERD_URI, + XSD_DOUBLE, sizeof(XSD_DOUBLE) - 1); + } else if (has_decimal) { + *datatype = push_node(reader, SERD_URI, + XSD_DECIMAL, sizeof(XSD_DECIMAL) - 1); + } else { + *datatype = push_node(reader, SERD_URI, + XSD_INTEGER, sizeof(XSD_INTEGER) - 1); + } + *dest = ref; + return true; +except: + pop_node(reader, *datatype); + pop_node(reader, ref); + return false; +} + +// [25] resource ::= uriref | qname +static bool +read_resource(SerdReader* reader, Ref* dest) +{ + switch (peek_byte(reader)) { + case '<': + *dest = read_uriref(reader); + break; + default: + *dest = read_qname(reader, 0, true); + } + return *dest != 0; +} + +static bool +read_literal(SerdReader* reader, Ref* dest, + Ref* datatype, Ref* lang, SerdNodeFlags* flags) +{ + Ref str = read_quotedString(reader, flags); + if (!str) { + return false; + } + + switch (peek_byte(reader)) { + case '^': + eat_byte_safe(reader, '^'); + eat_byte_check(reader, '^'); + TRY_THROW(read_resource(reader, datatype)); + break; + case '@': + eat_byte_safe(reader, '@'); + TRY_THROW(*lang = read_language(reader)); + } + *dest = str; + return true; +except: + pop_node(reader, str); + return false; +} + +inline static bool +is_token_end(uint8_t c) +{ + switch (c) { + case 0x9: case 0xA: case 0xD: case 0x20: case '\0': + case '#': case '.': case ';': case '<': + return true; + default: + return false; + } +} + +// [9] verb ::= predicate | 'a' +static bool +read_verb(SerdReader* reader, Ref* dest) +{ + SerdNode* node; + bool ret; + switch (peek_byte(reader)) { + case '<': + ret = (*dest = read_uriref(reader)); + break; + default: + /* Either a qname, or "a". Read the prefix first, and if it is in fact + "a", produce that instead. + */ + *dest = read_prefixName(reader, 0); + node = deref(reader, *dest); + if (node && node->n_bytes == 1 && node->buf[0] == 'a' + && is_token_end(peek_byte(reader))) { + pop_node(reader, *dest); + ret = (*dest = push_node(reader, SERD_URI, NS_RDF "type", 47)); + } else { + ret = (*dest = read_qname(reader, *dest, false)); + } + } + read_ws_star(reader); + return ret; +} + +// [26] nodeID ::= '_:' name +static Ref +read_nodeID(SerdReader* reader) +{ + eat_byte_safe(reader, '_'); + eat_byte_check(reader, ':'); + Ref ref = push_node(reader, SERD_BLANK, + reader->bprefix ? (char*)reader->bprefix : "", + reader->bprefix_len); + if (!read_name(reader, ref)) { + return r_err(reader, SERD_ERR_BAD_SYNTAX, + "invalid character at start of name\n"); + } + if (reader->syntax == SERD_TURTLE) { + const char* const buf = (const char*)deref(reader, ref)->buf; + if (!strncmp(buf, "genid", 5)) { + memcpy((char*)buf, "docid", 5); // Prevent clash + reader->seen_genid = true; + } else if (reader->seen_genid && !strncmp(buf, "docid", 5)) { + r_err(reader, SERD_ERR_ID_CLASH, + "found both `genid' and `docid' IDs, prefix required\n"); + return pop_node(reader, ref); + } + } + return ref; +} + +static void +set_blank_id(SerdReader* reader, Ref ref, size_t buf_size) +{ + SerdNode* node = deref(reader, ref); + const char* prefix = reader->bprefix ? (const char*)reader->bprefix : ""; + node->n_bytes = node->n_chars = snprintf( + (char*)node->buf, buf_size, "%sgenid%u", prefix, reader->next_id++); +} + +static size_t +genid_size(SerdReader* reader) +{ + return reader->bprefix_len + 5 + 10 + 1; // + "genid" + UINT32_MAX + \0 +} + +static Ref +blank_id(SerdReader* reader) +{ + Ref ref = push_node_padded(reader, genid_size(reader), SERD_BLANK, "", 0); + set_blank_id(reader, ref, genid_size(reader)); + return ref; +} + +// Spec: [21] blank ::= nodeID | '[]' +// | '[' predicateObjectList ']' | collection +// Impl: [21] blank ::= nodeID | '[' ws* ']' +// | '[' ws* predicateObjectList ws* ']' | collection +static bool +read_blank(SerdReader* reader, ReadContext ctx, bool subject, Ref* dest) +{ + const SerdStatementFlags old_flags = *ctx.flags; + bool empty; + switch (peek_byte(reader)) { + case '_': + return (*dest = read_nodeID(reader)); + case '[': + eat_byte_safe(reader, '['); + if ((empty = peek_delim(reader, ']'))) { + *ctx.flags |= (subject) ? SERD_EMPTY_S : SERD_EMPTY_O; + } else { + *ctx.flags |= (subject) ? SERD_ANON_S_BEGIN : SERD_ANON_O_BEGIN; + } + + *dest = blank_id(reader); + if (ctx.subject) { + TRY_RET(emit_statement(reader, ctx, *dest, 0, 0)); + } + + ctx.subject = *dest; + if (!empty) { + *ctx.flags &= ~(SERD_LIST_CONT); + if (!subject) { + *ctx.flags |= SERD_ANON_CONT; + } + read_predicateObjectList(reader, ctx); + read_ws_star(reader); + if (reader->end_sink) { + reader->end_sink(reader->handle, deref(reader, *dest)); + } + *ctx.flags = old_flags; + } + eat_byte_check(reader, ']'); + return true; + case '(': + return read_collection(reader, ctx, dest); + default: + return r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid blank node\n"); + } +} + +// [13] object ::= resource | blank | literal +// Recurses, calling statement_sink for every statement encountered. +// Leaves stack in original calling state (i.e. pops everything it pushes). +static bool +read_object(SerdReader* reader, ReadContext ctx) +{ + static const char* const XSD_BOOLEAN = NS_XSD "boolean"; + static const size_t XSD_BOOLEAN_LEN = 40; + +#ifndef NDEBUG + const size_t orig_stack_size = reader->stack.size; +#endif + + bool ret = false; + bool emit = (ctx.subject != 0); + SerdNode* node = NULL; + Ref o = 0; + Ref datatype = 0; + Ref lang = 0; + uint32_t flags = 0; + const uint8_t c = peek_byte(reader); + switch (c) { + case '\0': + case ')': + return false; + case '[': case '(': + emit = false; + // fall through + case '_': + TRY_THROW(ret = read_blank(reader, ctx, false, &o)); + break; + case '<': case ':': + TRY_THROW(ret = read_resource(reader, &o)); + break; + case '+': case '-': case '.': case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': case '8': case '9': + TRY_THROW(ret = read_number(reader, &o, &datatype)); + break; + case '\"': + TRY_THROW(ret = read_literal(reader, &o, &datatype, &lang, &flags)); + break; + default: + /* Either a boolean literal, or a qname. Read the prefix first, and if + it is in fact a "true" or "false" literal, produce that instead. + */ + o = read_prefixName(reader, 0); + node = deref(reader, o); + if (node && is_token_end(peek_byte(reader)) && + ((node->n_bytes == 4 && !memcmp(node->buf, "true", 4)) + || (node->n_bytes == 5 && !memcmp(node->buf, "false", 5)))) { + node->type = SERD_LITERAL; + datatype = push_node(reader, SERD_URI, + XSD_BOOLEAN, XSD_BOOLEAN_LEN); + } else { + o = o ? o : push_node(reader, SERD_CURIE, "", 0); + o = read_qname(reader, o, false); + } + ret = o; + } + + if (ret && emit) { + deref(reader, o)->flags = flags; + ret = emit_statement(reader, ctx, o, datatype, lang); + } + +except: + pop_node(reader, lang); + pop_node(reader, datatype); + pop_node(reader, o); +#ifndef NDEBUG + assert(reader->stack.size == orig_stack_size); +#endif + return ret; +} + +// Spec: [8] objectList ::= object ( ',' object )* +// Impl: [8] objectList ::= object ( ws* ',' ws* object )* +static bool +read_objectList(SerdReader* reader, ReadContext ctx) +{ + TRY_RET(read_object(reader, ctx)); + while (eat_delim(reader, ',')) { + TRY_RET(read_object(reader, ctx)); + } + return true; +} + +// Spec: [7] predicateObjectList ::= verb objectList +// (';' verb objectList)* (';')? +// Impl: [7] predicateObjectList ::= verb ws* objectList +// (ws* ';' ws* verb ws+ objectList)* (';')? +static bool +read_predicateObjectList(SerdReader* reader, ReadContext ctx) +{ + TRY_RET(read_verb(reader, &ctx.predicate)); + TRY_THROW(read_objectList(reader, ctx)); + ctx.predicate = pop_node(reader, ctx.predicate); + while (eat_delim(reader, ';')) { + switch (peek_byte(reader)) { + case '.': case ']': + return true; + default: + TRY_THROW(read_verb(reader, &ctx.predicate)); + TRY_THROW(read_objectList(reader, ctx)); + ctx.predicate = pop_node(reader, ctx.predicate); + } + } + pop_node(reader, ctx.predicate); + return true; +except: + pop_node(reader, ctx.predicate); + return false; +} + +static bool +end_collection(SerdReader* reader, ReadContext ctx, Ref n1, Ref n2, bool ret) +{ + pop_node(reader, n2); + pop_node(reader, n1); + *ctx.flags &= ~SERD_LIST_CONT; + return ret && (eat_byte_safe(reader, ')') == ')'); +} + +// [22] itemList ::= object+ +// [23] collection ::= '(' itemList? ')' +static bool +read_collection(SerdReader* reader, ReadContext ctx, Ref* dest) +{ + eat_byte_safe(reader, '('); + bool end = peek_delim(reader, ')'); + *dest = end ? reader->rdf_nil : blank_id(reader); + if (ctx.subject) { + // subject predicate _:head + *ctx.flags |= (end ? 0 : SERD_LIST_O_BEGIN); + TRY_RET(emit_statement(reader, ctx, *dest, 0, 0)); + *ctx.flags |= SERD_LIST_CONT; + } else { + *ctx.flags |= (end ? 0 : SERD_LIST_S_BEGIN); + } + + if (end) { + return end_collection(reader, ctx, 0, 0, true); + } + + /* The order of node allocation here is necessarily not in stack order, + so we create two nodes and recycle them throughout. */ + Ref n1 = push_node_padded(reader, genid_size(reader), SERD_BLANK, "", 0); + Ref n2 = 0; + Ref node = n1; + Ref rest = 0; + + ctx.subject = *dest; + while (!(end = peek_delim(reader, ')'))) { + // _:node rdf:first object + ctx.predicate = reader->rdf_first; + if (!read_object(reader, ctx)) { + return end_collection(reader, ctx, n1, n2, false); + } + + if (!(end = peek_delim(reader, ')'))) { + /* Give rest a new ID. Done as late as possible to ensure it is + used and > IDs generated by read_object above. */ + if (!rest) { + rest = n2 = blank_id(reader); // First pass, push a new node + } else { + set_blank_id(reader, rest, genid_size(reader)); + } + } + + // _:node rdf:rest _:rest + *ctx.flags |= SERD_LIST_CONT; + ctx.predicate = reader->rdf_rest; + TRY_RET(emit_statement(reader, ctx, + (end ? reader->rdf_nil : rest), 0, 0)); + + ctx.subject = rest; // _:node = _:rest + rest = node; // _:rest = (old)_:node + node = ctx.subject; // invariant + } + + return end_collection(reader, ctx, n1, n2, true); +} + +// [11] subject ::= resource | blank +static Ref +read_subject(SerdReader* reader, ReadContext ctx) +{ + Ref subject = 0; + switch (peek_byte(reader)) { + case '[': case '(': case '_': + read_blank(reader, ctx, true, &subject); + break; + default: + read_resource(reader, &subject); + } + return subject; +} + +// Spec: [6] triples ::= subject predicateObjectList +// Impl: [6] triples ::= subject ws+ predicateObjectList +static bool +read_triples(SerdReader* reader, ReadContext ctx) +{ + const Ref subject = read_subject(reader, ctx); + bool ret = false; + if (subject) { + ctx.subject = subject; + TRY_RET(read_ws_plus(reader)); + ret = read_predicateObjectList(reader, ctx); + pop_node(reader, subject); + } + ctx.subject = ctx.predicate = 0; + return ret; +} + +// [5] base ::= '@base' ws+ uriref +static bool +read_base(SerdReader* reader) +{ + // `@' is already eaten in read_directive + eat_string(reader, "base", 4); + TRY_RET(read_ws_plus(reader)); + Ref uri; + TRY_RET(uri = read_uriref(reader)); + if (reader->base_sink) { + reader->base_sink(reader->handle, deref(reader, uri)); + } + pop_node(reader, uri); + return true; +} + +// Spec: [4] prefixID ::= '@prefix' ws+ prefixName? ':' uriref +// Impl: [4] prefixID ::= '@prefix' ws+ prefixName? ':' ws* uriref +static bool +read_prefixID(SerdReader* reader) +{ + bool ret = true; + Ref name = 0; + Ref uri = 0; + // `@' is already eaten in read_directive + eat_string(reader, "prefix", 6); + TRY_RET(read_ws_plus(reader)); + name = read_prefixName(reader, 0); + if (!name) { + name = push_node(reader, SERD_LITERAL, "", 0); + } + TRY_THROW(eat_byte_check(reader, ':') == ':'); + read_ws_star(reader); + TRY_THROW(uri = read_uriref(reader)); + if (reader->prefix_sink) { + ret = !reader->prefix_sink(reader->handle, + deref(reader, name), + deref(reader, uri)); + } + pop_node(reader, uri); +except: + pop_node(reader, name); + return ret; +} + +// [3] directive ::= prefixID | base +static bool +read_directive(SerdReader* reader) +{ + eat_byte_safe(reader, '@'); + switch (peek_byte(reader)) { + case 'b': return read_base(reader); + case 'p': return read_prefixID(reader); + default: return r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid directive\n"); + } +} + +// Spec: [1] statement ::= directive '.' | triples '.' | ws+ +// Impl: [1] statement ::= directive ws* '.' | triples ws* '.' | ws+ +static bool +read_statement(SerdReader* reader) +{ + SerdStatementFlags flags = 0; + ReadContext ctx = { 0, 0, 0, &flags }; + read_ws_star(reader); + switch (peek_byte(reader)) { + case '\0': + reader->eof = true; + return true; + case '@': + TRY_RET(read_directive(reader)); + break; + default: + TRY_RET(read_triples(reader, ctx)); + break; + } + read_ws_star(reader); + return eat_byte_check(reader, '.'); +} + +// [1] turtleDoc ::= (statement)* +static bool +read_turtleDoc(SerdReader* reader) +{ + while (!reader->eof) { + TRY_RET(read_statement(reader)); + } + return true; +} + +SERD_API +SerdReader* +serd_reader_new(SerdSyntax syntax, + void* handle, + void (*free_handle)(void*), + SerdBaseSink base_sink, + SerdPrefixSink prefix_sink, + SerdStatementSink statement_sink, + SerdEndSink end_sink) +{ + const Cursor cur = { NULL, 0, 0 }; + SerdReader* me = (SerdReader*)malloc(sizeof(struct SerdReaderImpl)); + me->handle = handle; + me->free_handle = free_handle; + me->base_sink = base_sink; + me->prefix_sink = prefix_sink; + me->statement_sink = statement_sink; + me->end_sink = end_sink; + me->error_sink = NULL; + me->error_handle = NULL; + me->default_graph = SERD_NODE_NULL; + me->fd = 0; + me->stack = serd_stack_new(SERD_PAGE_SIZE); + me->syntax = syntax; + me->cur = cur; + me->bprefix = NULL; + me->bprefix_len = 0; + me->next_id = 1; + me->read_buf = 0; + me->read_head = 0; + me->eof = false; + me->seen_genid = false; +#ifdef SERD_STACK_CHECK + me->allocs = 0; + me->n_allocs = 0; +#endif + + me->rdf_first = push_node(me, SERD_URI, NS_RDF "first", 48); + me->rdf_rest = push_node(me, SERD_URI, NS_RDF "rest", 47); + me->rdf_nil = push_node(me, SERD_URI, NS_RDF "nil", 46); + + return me; +} + +SERD_API +void +serd_reader_set_error_sink(SerdReader* reader, + SerdErrorSink error_sink, + void* error_handle) +{ + reader->error_sink = error_sink; + reader->error_handle = error_handle; +} + +SERD_API +void +serd_reader_free(SerdReader* reader) +{ + pop_node(reader, reader->rdf_nil); + pop_node(reader, reader->rdf_rest); + pop_node(reader, reader->rdf_first); + serd_node_free(&reader->default_graph); + +#ifdef SERD_STACK_CHECK + free(reader->allocs); +#endif + free(reader->stack.buf); + free(reader->bprefix); + if (reader->free_handle) { + reader->free_handle(reader->handle); + } + free(reader); +} + +SERD_API +void* +serd_reader_get_handle(const SerdReader* reader) +{ + return reader->handle; +} + +SERD_API +void +serd_reader_add_blank_prefix(SerdReader* reader, + const uint8_t* prefix) +{ + free(reader->bprefix); + reader->bprefix_len = 0; + reader->bprefix = NULL; + if (prefix) { + reader->bprefix_len = strlen((const char*)prefix); + reader->bprefix = (uint8_t*)malloc(reader->bprefix_len + 1); + memcpy(reader->bprefix, prefix, reader->bprefix_len + 1); + } +} + +SERD_API +void +serd_reader_set_default_graph(SerdReader* reader, + const SerdNode* graph) +{ + serd_node_free(&reader->default_graph); + reader->default_graph = serd_node_copy(graph); +} + +SERD_API +SerdStatus +serd_reader_read_file(SerdReader* reader, + const uint8_t* uri) +{ + const uint8_t* path = serd_uri_to_path(uri); + if (!path) { + return SERD_ERR_BAD_ARG; + } + + FILE* fd = serd_fopen((const char*)path, "r"); + if (!fd) { + return SERD_ERR_UNKNOWN; + } + + SerdStatus ret = serd_reader_read_file_handle(reader, fd, path); + fclose(fd); + return ret; +} + +static void +skip_bom(SerdReader* me) +{ + const uint8_t* const b = me->read_buf; + if (me->paging && b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF) { + me->read_head += 3; + } +} + +SERD_API +SerdStatus +serd_reader_start_stream(SerdReader* me, + FILE* file, + const uint8_t* name, + bool bulk) +{ + const Cursor cur = { name, 1, 1 }; + me->fd = file; + me->read_head = 0; + me->cur = cur; + me->from_file = true; + me->eof = false; + me->paging = bulk; + + if (bulk) { + me->read_buf = (uint8_t*)serd_bufalloc(SERD_PAGE_SIZE); + memset(me->read_buf, '\0', SERD_PAGE_SIZE); + SerdStatus st = page(me); + if (st) { + serd_reader_end_stream(me); + return st; + } + skip_bom(me); + } else { + me->read_buf = &me->read_byte; + me->read_byte = 0; // Don't read to avoid potentially blocking + } + + return SERD_SUCCESS; +} + +SERD_API +SerdStatus +serd_reader_read_chunk(SerdReader* me) +{ + if (!me->read_byte) { + // Read initial byte + const int c = fgetc(me->fd); + me->read_byte = (c == EOF) ? 0 : (uint8_t)c; + if (c == EOF) { + me->eof = true; + return SERD_FAILURE; + } + } + return read_statement(me) ? SERD_SUCCESS : SERD_FAILURE; +} + +SERD_API +SerdStatus +serd_reader_end_stream(SerdReader* me) +{ + if (me->paging) { + free(me->read_buf); + } + me->fd = 0; + me->read_buf = NULL; + return SERD_SUCCESS; +} + +SERD_API +SerdStatus +serd_reader_read_file_handle(SerdReader* me, FILE* file, const uint8_t* name) +{ + SerdStatus st = serd_reader_start_stream(me, file, name, true); + if (!st) { + st = read_turtleDoc(me) ? SERD_SUCCESS : SERD_ERR_UNKNOWN; + serd_reader_end_stream(me); + } + return st; +} + +SERD_API +SerdStatus +serd_reader_read_string(SerdReader* me, const uint8_t* utf8) +{ + const Cursor cur = { (const uint8_t*)"(string)", 1, 1 }; + + me->read_buf = (uint8_t*)utf8; + me->read_head = 0; + me->cur = cur; + me->from_file = false; + me->paging = false; + me->eof = false; + + skip_bom(me); + const bool ret = read_turtleDoc(me); + + me->read_buf = NULL; + return ret ? SERD_SUCCESS : SERD_ERR_UNKNOWN; +} diff --git a/source/libs/lilv/serd-0.18.2/src/serd_internal.h b/source/libs/lilv/serd-0.18.2/src/serd_internal.h new file mode 100644 index 000000000..67e47e95c --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/serd_internal.h @@ -0,0 +1,306 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef SERD_INTERNAL_H +#define SERD_INTERNAL_H + +#define _POSIX_C_SOURCE 201112L /* for posix_memalign and posix_fadvise */ + +#include +#include +#include +#include +#include + +#include "serd/serd.h" +#include "serd_config.h" + +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) +# include +#endif + +#define SERD_PAGE_SIZE 4096 + +#ifndef MIN +# define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef HAVE_FMAX +static inline double +fmax(double a, double b) +{ + return (a < b) ? b : a; +} +#endif + +/* File and Buffer Utilities */ + +static inline FILE* +serd_fopen(const char* path, const char* mode) +{ + FILE* fd = fopen((const char*)path, mode); + if (!fd) { + fprintf(stderr, "Error opening file %s (%s)\n", path, strerror(errno)); + return NULL; + } +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) + posix_fadvise(fileno(fd), 0, 0, POSIX_FADV_SEQUENTIAL); +#endif + return fd; +} + +static inline void* +serd_bufalloc(size_t size) +{ +#ifdef HAVE_POSIX_MEMALIGN + void* ptr; + posix_memalign(&ptr, SERD_PAGE_SIZE, size); + return ptr; +#else + return malloc(size); +#endif +} + +/* Stack */ + +/** A dynamic stack in memory. */ +typedef struct { + uint8_t* buf; ///< Stack memory + size_t buf_size; ///< Allocated size of buf (>= size) + size_t size; ///< Conceptual size of stack in buf +} SerdStack; + +/** An offset to start the stack at. Note 0 is reserved for NULL. */ +#define SERD_STACK_BOTTOM sizeof(void*) + +static inline SerdStack +serd_stack_new(size_t size) +{ + SerdStack stack; + stack.buf = (uint8_t*)malloc(size); + stack.buf_size = size; + stack.size = SERD_STACK_BOTTOM; + return stack; +} + +static inline bool +serd_stack_is_empty(SerdStack* stack) +{ + return stack->size <= SERD_STACK_BOTTOM; +} + +static inline void +serd_stack_free(SerdStack* stack) +{ + free(stack->buf); + stack->buf = NULL; + stack->buf_size = 0; + stack->size = 0; +} + +static inline uint8_t* +serd_stack_push(SerdStack* stack, size_t n_bytes) +{ + const size_t new_size = stack->size + n_bytes; + if (stack->buf_size < new_size) { + stack->buf_size *= 2; + stack->buf = (uint8_t*)realloc(stack->buf, stack->buf_size); + } + uint8_t* const ret = (stack->buf + stack->size); + stack->size = new_size; + return ret; +} + +static inline void +serd_stack_pop(SerdStack* stack, size_t n_bytes) +{ + assert(stack->size >= n_bytes); + stack->size -= n_bytes; +} + +/* Bulk Sink */ + +typedef struct SerdBulkSinkImpl { + SerdSink sink; + void* stream; + uint8_t* buf; + size_t size; + size_t block_size; +} SerdBulkSink; + +static inline SerdBulkSink +serd_bulk_sink_new(SerdSink sink, void* stream, size_t block_size) +{ + SerdBulkSink bsink; + bsink.sink = sink; + bsink.stream = stream; + bsink.size = 0; + bsink.block_size = block_size; + bsink.buf = (uint8_t*)serd_bufalloc(block_size); + return bsink; +} + +static inline void +serd_bulk_sink_flush(SerdBulkSink* bsink) +{ + if (bsink->size > 0) { + bsink->sink(bsink->buf, bsink->size, bsink->stream); + } + bsink->size = 0; +} + +static inline void +serd_bulk_sink_free(SerdBulkSink* bsink) +{ + serd_bulk_sink_flush(bsink); + free(bsink->buf); + bsink->buf = NULL; +} + +static inline size_t +serd_bulk_sink_write(const void* buf, size_t len, SerdBulkSink* bsink) +{ + const size_t orig_len = len; + while (len) { + const size_t space = bsink->block_size - bsink->size; + const size_t n = MIN(space, len); + + // Write as much as possible into the remaining buffer space + memcpy(bsink->buf + bsink->size, buf, n); + bsink->size += n; + buf = (const uint8_t*)buf + n; + len -= n; + + // Flush page if buffer is full + if (bsink->size == bsink->block_size) { + bsink->sink(bsink->buf, bsink->block_size, bsink->stream); + bsink->size = 0; + } + } + return orig_len; +} + +/* Character utilities */ + +/** Return true if @a c lies within [min...max] (inclusive) */ +static inline bool +in_range(const uint8_t c, const uint8_t min, const uint8_t max) +{ + return (c >= min && c <= max); +} + +/** RFC2234: ALPHA := %x41-5A / %x61-7A ; A-Z / a-z */ +static inline bool +is_alpha(const uint8_t c) +{ + return in_range(c, 'A', 'Z') || in_range(c, 'a', 'z'); +} + +/** RFC2234: DIGIT ::= %x30-39 ; 0-9 */ +static inline bool +is_digit(const uint8_t c) +{ + return in_range(c, '0', '9'); +} + +static inline bool +is_space(const char c) +{ + switch (c) { + case ' ': case '\f': case '\n': case '\r': case '\t': case '\v': + return true; + default: + return false; + } +} + +static inline bool +is_base64(const uint8_t c) +{ + return is_alpha(c) || is_digit(c) || c == '+' || c == '/' || c == '='; +} + +static inline bool +is_windows_path(const uint8_t* path) +{ + return is_alpha(path[0]) && (path[1] == ':' || path[1] == '|') + && (path[2] == '/' || path[2] == '\\'); +} + +/* URI utilities */ + +static inline bool +chunk_equals(const SerdChunk* a, const SerdChunk* b) +{ + return a->len == b->len + && !strncmp((const char*)a->buf, (const char*)b->buf, a->len); +} + +static inline size_t +uri_path_len(const SerdURI* uri) +{ + return uri->path_base.len + uri->path.len; +} + +static inline uint8_t +uri_path_at(const SerdURI* uri, size_t i) +{ + if (i < uri->path_base.len) { + return uri->path_base.buf[i]; + } else { + return uri->path.buf[i - uri->path_base.len]; + } +} + +/** Return true iff @p uri is within the base of @p root */ +static inline bool +uri_is_under(const SerdURI* uri, const SerdURI* root) +{ + if (!root || !uri || !root->scheme.len || + !chunk_equals(&root->scheme, &uri->scheme) || + !chunk_equals(&root->authority, &uri->authority)) { + return false; + } + + bool differ = false; + const size_t path_len = uri_path_len(uri); + const size_t root_len = uri_path_len(root); + for (size_t i = 0; i < path_len && i < root_len; ++i) { + if (uri_path_at(uri, i) != uri_path_at(root, i)) { + differ = true; + } + if (differ && uri_path_at(root, i) == '/') { + return false; + } + } + + return true; +} + +/* Error reporting */ + +static inline void +serd_error(SerdErrorSink error_sink, void* handle, const SerdError* e) +{ + if (error_sink) { + error_sink(handle, e); + } else { + fprintf(stderr, "error: %s:%u:%u: ", e->filename, e->line, e->col); + vfprintf(stderr, e->fmt, *e->args); + } +} + +#endif // SERD_INTERNAL_H diff --git a/source/libs/lilv/serd-0.18.2/src/serdi.c b/source/libs/lilv/serd-0.18.2/src/serdi.c new file mode 100644 index 000000000..290ee1d9a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/serdi.c @@ -0,0 +1,253 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "serd_internal.h" + +#include +#include +#include +#include + +typedef struct { + SerdEnv* env; + SerdWriter* writer; +} State; + +static int +print_version(void) +{ + printf("serdi " SERD_VERSION " \n"); + printf("Copyright 2011-2012 David Robillard .\n" + "License: \n" + "This is free software; you are free to change and redistribute it." + "\nThere is NO WARRANTY, to the extent permitted by law.\n"); + return 0; +} + +static int +print_usage(const char* name, bool error) +{ + FILE* const os = error ? stderr : stdout; + fprintf(os, "Usage: %s [OPTION]... INPUT [BASE_URI]\n", name); + fprintf(os, "Read and write RDF syntax.\n"); + fprintf(os, "Use - for INPUT to read from standard input.\n\n"); + fprintf(os, " -b Fast bulk output for large serialisations.\n"); + fprintf(os, " -c PREFIX Chop PREFIX from matching blank node IDs.\n"); + fprintf(os, " -e Eat input one character at a time.\n"); + fprintf(os, " -f Keep full URIs in input (don't qualify).\n"); + fprintf(os, " -h Display this help and exit.\n"); + fprintf(os, " -i SYNTAX Input syntax (`turtle' or `ntriples').\n"); + fprintf(os, " -o SYNTAX Output syntax (`turtle' or `ntriples').\n"); + fprintf(os, " -p PREFIX Add PREFIX to blank node IDs.\n"); + fprintf(os, " -q Suppress all output except data.\n"); + fprintf(os, " -r ROOT_URI Keep relative URIs within ROOT_URI.\n"); + fprintf(os, " -s INPUT Parse INPUT as string (terminates options).\n"); + fprintf(os, " -v Display version information and exit.\n"); + return error ? 1 : 0; +} + +static bool +set_syntax(SerdSyntax* syntax, const char* name) +{ + if (!strcmp(name, "turtle")) { + *syntax = SERD_TURTLE; + } else if (!strcmp(name, "ntriples")) { + *syntax = SERD_NTRIPLES; + } else { + fprintf(stderr, "Unknown input format `%s'\n", name); + return false; + } + return true; +} + +static int +bad_arg(const char* name, char opt) +{ + fprintf(stderr, "%s: Bad or missing value for -%c\n", name, opt); + return 1; +} + +static SerdStatus +quiet_error_sink(void* handle, const SerdError* e) +{ + return SERD_SUCCESS; +} + +int +main(int argc, char** argv) +{ + if (argc < 2) { + return print_usage(argv[0], true); + } + + FILE* in_fd = NULL; + SerdSyntax input_syntax = SERD_TURTLE; + SerdSyntax output_syntax = SERD_NTRIPLES; + bool from_file = true; + bool bulk_read = true; + bool bulk_write = false; + bool full_uris = false; + bool quiet = false; + const uint8_t* in_name = NULL; + const uint8_t* add_prefix = NULL; + const uint8_t* chop_prefix = NULL; + const uint8_t* root_uri = NULL; + int a = 1; + for (; a < argc && argv[a][0] == '-'; ++a) { + if (argv[a][1] == '\0') { + in_name = (const uint8_t*)"(stdin)"; + in_fd = stdin; + break; + } else if (argv[a][1] == 'b') { + bulk_write = true; + } else if (argv[a][1] == 'e') { + bulk_read = false; + } else if (argv[a][1] == 'f') { + full_uris = true; + } else if (argv[a][1] == 'h') { + return print_usage(argv[0], false); + } else if (argv[a][1] == 'q') { + quiet = true; + } else if (argv[a][1] == 'v') { + return print_version(); + } else if (argv[a][1] == 's') { + in_name = (const uint8_t*)"(string)"; + from_file = false; + ++a; + break; + } else if (argv[a][1] == 'i') { + if (++a == argc || !set_syntax(&input_syntax, argv[a])) { + return bad_arg(argv[0], 'i'); + } + } else if (argv[a][1] == 'o') { + if (++a == argc || !set_syntax(&output_syntax, argv[a])) { + return bad_arg(argv[0], 'o'); + } + } else if (argv[a][1] == 'p') { + if (++a == argc) { + return bad_arg(argv[0], 'p'); + } + add_prefix = (const uint8_t*)argv[a]; + } else if (argv[a][1] == 'c') { + if (++a == argc) { + return bad_arg(argv[0], 'c'); + } + chop_prefix = (const uint8_t*)argv[a]; + } else if (argv[a][1] == 'r') { + if (++a == argc) { + return bad_arg(argv[0], 'r'); + } + root_uri = (const uint8_t*)argv[a]; + } else { + fprintf(stderr, "%s: Unknown option `%s'\n", argv[0], argv[a]); + return print_usage(argv[0], true); + } + } + + if (a == argc) { + fprintf(stderr, "%s: Missing input\n", argv[0]); + return 1; + } + + const uint8_t* input = (const uint8_t*)argv[a++]; + if (from_file) { + in_name = in_name ? in_name : input; + if (!in_fd) { + input = serd_uri_to_path(in_name); + if (!input || !(in_fd = serd_fopen((const char*)input, "r"))) { + return 1; + } + } + } + + SerdURI base_uri = SERD_URI_NULL; + SerdNode base = SERD_NODE_NULL; + if (a < argc) { // Base URI given on command line + base = serd_node_new_uri_from_string( + (const uint8_t*)argv[a], NULL, &base_uri); + } else if (from_file && in_fd != stdin) { // Use input file URI + base = serd_node_new_file_uri(input, NULL, &base_uri, false); + } + + FILE* out_fd = stdout; + SerdEnv* env = serd_env_new(&base); + + int output_style = 0; + if (output_syntax == SERD_NTRIPLES) { + output_style |= SERD_STYLE_ASCII; + } else { + output_style |= SERD_STYLE_ABBREVIATED; + if (!full_uris) { + output_style |= SERD_STYLE_CURIED; + } + } + + if (input_syntax != SERD_NTRIPLES // Base URI may change (@base) + || (output_syntax == SERD_TURTLE)) { + output_style |= SERD_STYLE_RESOLVED; + } + + if (bulk_write) { + output_style |= SERD_STYLE_BULK; + } + + SerdWriter* writer = serd_writer_new( + output_syntax, (SerdStyle)output_style, + env, &base_uri, serd_file_sink, out_fd); + + SerdReader* reader = serd_reader_new( + input_syntax, writer, NULL, + (SerdBaseSink)serd_writer_set_base_uri, + (SerdPrefixSink)serd_writer_set_prefix, + (SerdStatementSink)serd_writer_write_statement, + (SerdEndSink)serd_writer_end_anon); + + if (quiet) { + serd_reader_set_error_sink(reader, quiet_error_sink, NULL); + serd_writer_set_error_sink(writer, quiet_error_sink, NULL); + } + + SerdNode root = serd_node_from_string(SERD_URI, root_uri); + serd_writer_set_root_uri(writer, &root); + serd_writer_chop_blank_prefix(writer, chop_prefix); + serd_reader_add_blank_prefix(reader, add_prefix); + + SerdStatus status = SERD_SUCCESS; + if (!from_file) { + status = serd_reader_read_string(reader, input); + } else if (bulk_read) { + status = serd_reader_read_file_handle(reader, in_fd, in_name); + } else { + status = serd_reader_start_stream(reader, in_fd, in_name, false); + while (!status) { + status = serd_reader_read_chunk(reader); + } + serd_reader_end_stream(reader); + } + + serd_reader_free(reader); + + if (from_file) { + fclose(in_fd); + } + + serd_writer_finish(writer); + serd_writer_free(writer); + serd_env_free(env); + serd_node_free(&base); + + return (status > SERD_FAILURE) ? 1 : 0; +} diff --git a/source/libs/lilv/serd-0.18.2/src/string.c b/source/libs/lilv/serd-0.18.2/src/string.c new file mode 100644 index 000000000..a1a1dff1c --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/string.c @@ -0,0 +1,165 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "serd_internal.h" + +#include + +SERD_API +const uint8_t* +serd_strerror(SerdStatus st) +{ + switch (st) { + case SERD_SUCCESS: return (const uint8_t*)"Success"; + case SERD_FAILURE: return (const uint8_t*)"Non-fatal failure"; + case SERD_ERR_UNKNOWN: return (const uint8_t*)"Unknown error"; + case SERD_ERR_BAD_SYNTAX: return (const uint8_t*)"Invalid syntax"; + case SERD_ERR_BAD_ARG: return (const uint8_t*)"Invalid argument"; + case SERD_ERR_NOT_FOUND: return (const uint8_t*)"Not found"; + case SERD_ERR_ID_CLASH: return (const uint8_t*)"Blank node ID clash"; + case SERD_ERR_BAD_CURIE: return (const uint8_t*)"Invalid CURIE"; + case SERD_ERR_INTERNAL: return (const uint8_t*)"Internal error"; + } + return (const uint8_t*)"Unknown error"; // never reached +} + +SERD_API +size_t +serd_strlen(const uint8_t* str, size_t* n_bytes, SerdNodeFlags* flags) +{ + size_t n_chars = 0; + size_t i = 0; + *flags = 0; + for (; str[i]; ++i) { + if ((str[i] & 0xC0) != 0x80) { + // Does not start with `10', start of a new character + ++n_chars; + switch (str[i]) { + case '\r': case '\n': + *flags |= SERD_HAS_NEWLINE; + break; + case '"': + *flags |= SERD_HAS_QUOTE; + } + } + } + if (n_bytes) { + *n_bytes = i; + } + return n_chars; +} + +static inline double +read_sign(const char** sptr) +{ + double sign = 1.0; + switch (**sptr) { + case '-': sign = -1.0; + case '+': ++(*sptr); + default: return sign; + } +} + +SERD_API +double +serd_strtod(const char* str, char** endptr) +{ + double result = 0.0; + + // Point s at the first non-whitespace character + const char* s = str; + while (is_space(*s)) { ++s; } + + // Read leading sign if necessary + const double sign = read_sign(&s); + + // Parse integer part + for (; is_digit(*s); ++s) { + result = (result * 10.0) + (*s - '0'); + } + + // Parse fractional part + if (*s == '.') { + double denom = 10.0; + for (++s; is_digit(*s); ++s) { + result += (*s - '0') / denom; + denom *= 10.0; + } + } + + // Parse exponent + if (*s == 'e' || *s == 'E') { + ++s; + double expt = 0.0; + double expt_sign = read_sign(&s); + for (; is_digit(*s); ++s) { + expt = (expt * 10.0) + (*s - '0'); + } + result *= pow(10, expt * expt_sign); + } + + if (endptr) { + *endptr = (char*)s; + } + + return result * sign; +} + +/** + Base64 decoding table. + This is indexed by encoded characters and returns the numeric value used + for decoding, shifted up by 47 to be in the range of printable ASCII. + A '$' is a placeholder for characters not in the base64 alphabet. +*/ +static const char b64_unmap[] = + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$m$$$ncdefghijkl$$$$$$" + "$/0123456789:;<=>?@ABCDEFGH$$$$$$IJKLMNOPQRSTUVWXYZ[\\]^_`ab$$$$" + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"; + +static inline uint8_t unmap(const uint8_t in) { return b64_unmap[in] - 47; } + +/** + Decode 4 base64 characters to 3 raw bytes. +*/ +static inline size_t +decode_chunk(const uint8_t in[4], uint8_t out[3]) +{ + out[0] = (uint8_t)(((unmap(in[0]) << 2)) | unmap(in[1]) >> 4); + out[1] = (uint8_t)(((unmap(in[1]) << 4) & 0xF0) | unmap(in[2]) >> 2); + out[2] = (uint8_t)(((unmap(in[2]) << 6) & 0xC0) | unmap(in[3])); + return 1 + (in[2] != '=') + ((in[2] != '=') && (in[3] != '=')); +} + +SERD_API +void* +serd_base64_decode(const uint8_t* str, size_t len, size_t* size) +{ + void* buf = malloc((len * 3) / 4 + 2); + *size = 0; + for (size_t i = 0, j = 0; i < len; j += 3) { + uint8_t in[] = "===="; + size_t n_in = 0; + for (; i < len && n_in < 4; ++n_in) { + for (; i < len && !is_base64(str[i]); ++i) {} // Skip junk + in[n_in] = str[i++]; + } + if (n_in > 1) { + *size += decode_chunk(in, (uint8_t*)buf + j); + } + } + return buf; +} diff --git a/source/libs/lilv/serd-0.18.2/src/uri.c b/source/libs/lilv/serd-0.18.2/src/uri.c new file mode 100644 index 000000000..3294f96e1 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/uri.c @@ -0,0 +1,504 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "serd_internal.h" + +#include +#include + +// #define URI_DEBUG 1 + +SERD_API +const uint8_t* +serd_uri_to_path(const uint8_t* uri) +{ + const uint8_t* path = uri; + if (!is_windows_path(uri) && serd_uri_string_has_scheme(uri)) { + if (strncmp((const char*)uri, "file:", 5)) { + fprintf(stderr, "Non-file URI `%s'\n", uri); + return NULL; + } else if (!strncmp((const char*)uri, "file://localhost/", 17)) { + path = uri + 16; + } else if (!strncmp((const char*)uri, "file://", 7)) { + path = uri + 7; + } else { + fprintf(stderr, "Invalid file URI `%s'\n", uri); + return NULL; + } + if (is_windows_path(path + 1)) { + ++path; // Special case for terrible Windows file URIs + } + } + return path; +} + +SERD_API +uint8_t* +serd_file_uri_parse(const uint8_t* uri, uint8_t** hostname) +{ + const uint8_t* path = uri; + if (hostname) { + *hostname = NULL; + } + if (!strncmp((const char*)uri, "file://", 7)) { + const uint8_t* auth = uri + 7; + if (*auth == '/') { // No hostname + path = auth; + } else { // Has hostname + if (!(path = (const uint8_t*)strchr((const char*)auth, '/'))) { + return NULL; + } + if (hostname) { + *hostname = (uint8_t*)calloc(1, path - auth + 1); + memcpy(*hostname, auth, path - auth); + } + } + } + + if (is_windows_path(path + 1)) { + ++path; + } + + SerdChunk chunk = { NULL, 0 }; + for (const uint8_t* s = path; *s; ++s) { + if (*s == '%') { + if (*(s + 1) == '%') { + serd_chunk_sink("%", 1, &chunk); + ++s; + } else if (is_digit(*(s + 1)) && is_digit(*(s + 2))) { + const uint8_t code[3] = { *(s + 1), *(s + 2), 0 }; + uint32_t num; + sscanf((const char*)code, "%X", &num); + const uint8_t c = num; + serd_chunk_sink(&c, 1, &chunk); + s += 2; + } else { + s += 2; // Junk escape, ignore + } + } else { + serd_chunk_sink(s, 1, &chunk); + } + } + return serd_chunk_sink_finish(&chunk); +} + +SERD_API +bool +serd_uri_string_has_scheme(const uint8_t* utf8) +{ + // RFC3986: scheme ::= ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + if (!is_alpha(utf8[0])) { + return false; // Invalid scheme initial character, URI is relative + } + for (uint8_t c; (c = *++utf8) != '\0';) { + switch (c) { + case ':': + return true; // End of scheme + case '+': case '-': case '.': + break; // Valid scheme character, continue + default: + if (!is_alpha(c) && !is_digit(c)) { + return false; // Invalid scheme character + } + } + } + + return false; +} + +#ifdef URI_DEBUG +static void +serd_uri_dump(const SerdURI* uri, FILE* file) +{ +#define PRINT_PART(range, name) \ + if (range.buf) { \ + fprintf(stderr, " " name " = "); \ + fwrite((range).buf, 1, (range).len, stderr); \ + fprintf(stderr, "\n"); \ + } + + PRINT_PART(uri->scheme, "scheme "); + PRINT_PART(uri->authority, "authority"); + PRINT_PART(uri->path_base, "path_base"); + PRINT_PART(uri->path, "path "); + PRINT_PART(uri->query, "query "); + PRINT_PART(uri->fragment, "fragment "); +} +#endif + +SERD_API +SerdStatus +serd_uri_parse(const uint8_t* utf8, SerdURI* uri) +{ + *uri = SERD_URI_NULL; + + const uint8_t* ptr = utf8; + + /* See http://tools.ietf.org/html/rfc3986#section-3 + URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] + */ + + /* S3.1: scheme ::= ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) */ + if (is_alpha(*ptr)) { + for (uint8_t c = *++ptr; true; c = *++ptr) { + switch (c) { + case '\0': case '/': case '?': case '#': + ptr = utf8; + goto path; // Relative URI (starts with path by definition) + case ':': + uri->scheme.buf = utf8; + uri->scheme.len = (ptr++) - utf8; + goto maybe_authority; // URI with scheme + case '+': case '-': case '.': + continue; + default: + if (is_alpha(c) || is_digit(c)) { + continue; + } + } + } + } + + /* S3.2: The authority component is preceded by a double slash ("//") + and is terminated by the next slash ("/"), question mark ("?"), + or number sign ("#") character, or by the end of the URI. + */ +maybe_authority: + if (*ptr == '/' && *(ptr + 1) == '/') { + ptr += 2; + uri->authority.buf = ptr; + for (uint8_t c; (c = *ptr) != '\0'; ++ptr) { + switch (c) { + case '/': goto path; + case '?': goto query; + case '#': goto fragment; + default: + ++uri->authority.len; + } + } + } + + /* RFC3986 S3.3: The path is terminated by the first question mark ("?") + or number sign ("#") character, or by the end of the URI. + */ +path: + switch (*ptr) { + case '?': goto query; + case '#': goto fragment; + case '\0': goto end; + default: break; + } + uri->path.buf = ptr; + uri->path.len = 0; + for (uint8_t c; (c = *ptr) != '\0'; ++ptr) { + switch (c) { + case '?': goto query; + case '#': goto fragment; + default: + ++uri->path.len; + } + } + + /* RFC3986 S3.4: The query component is indicated by the first question + mark ("?") character and terminated by a number sign ("#") character + or by the end of the URI. + */ +query: + if (*ptr == '?') { + uri->query.buf = ++ptr; + for (uint8_t c; (c = *ptr) != '\0'; ++ptr) { + switch (c) { + case '#': + goto fragment; + default: + ++uri->query.len; + } + } + } + + /* RFC3986 S3.5: A fragment identifier component is indicated by the + presence of a number sign ("#") character and terminated by the end + of the URI. + */ +fragment: + if (*ptr == '#') { + uri->fragment.buf = ptr; + while (*ptr++ != '\0') { + ++uri->fragment.len; + } + } + +end: + #ifdef URI_DEBUG + fprintf(stderr, "PARSE URI <%s>\n", utf8); + serd_uri_dump(uri, stderr); + fprintf(stderr, "\n"); + #endif + + return SERD_SUCCESS; +} + +/** + Remove leading dot components from @c path. + See http://tools.ietf.org/html/rfc3986#section-5.2.3 + @param up Set to the number of up-references (e.g. "../") trimmed + @return A pointer to the new start of @path +*/ +static const uint8_t* +remove_dot_segments(const uint8_t* path, size_t len, size_t* up) +{ + const uint8_t* begin = path; + const uint8_t* const end = path + len; + + *up = 0; + while (begin < end) { + switch (begin[0]) { + case '.': + switch (begin[1]) { + case '/': + begin += 2; // Chop leading "./" + break; + case '.': + switch (begin[2]) { + case '\0': + ++*up; + begin += 2; // Chop input ".." + break; + case '/': + ++*up; + begin += 3; // Chop leading "../" + break; + default: + return begin; + } + break; + case '\0': + ++begin; // Chop input "." (and fall-through) + default: + return begin; + } + break; + case '/': + switch (begin[1]) { + case '.': + switch (begin[2]) { + case '/': + begin += 2; // Leading "/./" => "/" + break; + case '.': + switch (begin[3]) { + case '/': + ++*up; + begin += 3; // Leading "/../" => "/" + } + break; + default: + return begin; + } + } // else fall through + default: + return begin; // Finished chopping dot components + } + } + + return begin; +} + +/// Merge @p base and @p path in-place +static void +merge(SerdChunk* base, SerdChunk* path) +{ + size_t up; + const uint8_t* begin = remove_dot_segments(path->buf, path->len, &up); + const uint8_t* end = path->buf + path->len; + + if (base->buf && base->len > 0) { + // Find the up'th last slash + const uint8_t* base_last = (base->buf + base->len - 1); + ++up; + do { + if (*base_last == '/') { + --up; + } + } while (up > 0 && (--base_last > base->buf)); + + // Set path prefix + base->len = base_last - base->buf + 1; + } + + // Set path suffix + path->buf = begin; + path->len = end - begin; +} + +/// See http://tools.ietf.org/html/rfc3986#section-5.2.2 +SERD_API +void +serd_uri_resolve(const SerdURI* r, const SerdURI* base, SerdURI* t) +{ + if (!base->scheme.len) { + *t = *r; // Don't resolve against non-absolute URIs + return; + } + + t->path_base.buf = NULL; + t->path_base.len = 0; + if (r->scheme.len) { + *t = *r; + } else { + if (r->authority.len) { + t->authority = r->authority; + t->path = r->path; + t->query = r->query; + } else { + t->path = r->path; + if (!r->path.len) { + t->path_base = base->path; + if (r->query.len) { + t->query = r->query; + } else { + t->query = base->query; + } + } else { + if (r->path.buf[0] != '/') { + t->path_base = base->path; + } + merge(&t->path_base, &t->path); + t->query = r->query; + } + t->authority = base->authority; + } + t->scheme = base->scheme; + t->fragment = r->fragment; + } + + #ifdef URI_DEBUG + fprintf(stderr, "## RESOLVE URI\n# BASE\n"); + serd_uri_dump(base, stderr); + fprintf(stderr, "# URI\n"); + serd_uri_dump(r, stderr); + fprintf(stderr, "# RESULT\n"); + serd_uri_dump(t, stderr); + fprintf(stderr, "\n"); + #endif +} + +/** Write the path of @p uri starting at index @p i */ +static size_t +write_path_tail(SerdSink sink, void* stream, const SerdURI* uri, size_t i) +{ + size_t len = 0; + if (i < uri->path_base.len) { + len += sink(uri->path_base.buf + i, uri->path_base.len - i, stream); + } + if (uri->path.buf) { + if (i < uri->path_base.len) { + len += sink(uri->path.buf, uri->path.len, stream); + } else { + const size_t j = (i - uri->path_base.len); + len += sink(uri->path.buf + j, uri->path.len - j, stream); + } + } + return len; +} + +/** Write the path of @p uri relative to the path of @p base. */ +static size_t +write_rel_path(SerdSink sink, + void* stream, + const SerdURI* uri, + const SerdURI* base) +{ + const size_t path_len = uri_path_len(uri); + const size_t base_len = uri_path_len(base); + const size_t min_len = (path_len < base_len) ? path_len : base_len; + + // Find the last separator common to both paths + size_t last_shared_sep = 0; + size_t i = 0; + for (; i < min_len && uri_path_at(uri, i) == uri_path_at(base, i); ++i) { + if (uri_path_at(uri, i) == '/') { + last_shared_sep = i; + } + } + + if (i == path_len && i == base_len) { // Paths are identical + return 0; + } else if (last_shared_sep == 0) { // No common components + return write_path_tail(sink, stream, uri, 0); + } + + // Find the number of up references ("..") required + size_t up = 0; + for (size_t s = last_shared_sep + 1; s < base_len; ++s) { + if (uri_path_at(base, s) == '/') { + ++up; + } + } + + // Write up references + size_t len = 0; + for (size_t u = 0; u < up; ++u) { + len += sink("../", 3, stream); + } + + // Write suffix + return len += write_path_tail(sink, stream, uri, last_shared_sep + 1); +} + +/// See http://tools.ietf.org/html/rfc3986#section-5.3 +SERD_API +size_t +serd_uri_serialise_relative(const SerdURI* uri, + const SerdURI* base, + const SerdURI* root, + SerdSink sink, + void* stream) +{ + size_t len = 0; + const bool relative = uri_is_under(uri, root ? root : base); + if (relative) { + len = write_rel_path(sink, stream, uri, base); + } + if (!relative || (!len && base->query.buf)) { + if (uri->scheme.buf) { + len += sink(uri->scheme.buf, uri->scheme.len, stream); + len += sink(":", 1, stream); + } + if (uri->authority.buf) { + len += sink("//", 2, stream); + len += sink(uri->authority.buf, uri->authority.len, stream); + } + len += write_path_tail(sink, stream, uri, 0); + } + if (uri->query.buf) { + len += sink("?", 1, stream); + len += sink(uri->query.buf, uri->query.len, stream); + } + if (uri->fragment.buf) { + // Note uri->fragment.buf includes the leading `#' + len += sink(uri->fragment.buf, uri->fragment.len, stream); + } + return len; +} + +/// See http://tools.ietf.org/html/rfc3986#section-5.3 +SERD_API +size_t +serd_uri_serialise(const SerdURI* uri, SerdSink sink, void* stream) +{ + return serd_uri_serialise_relative(uri, NULL, NULL, sink, stream); +} diff --git a/source/libs/lilv/serd-0.18.2/src/writer.c b/source/libs/lilv/serd-0.18.2/src/writer.c new file mode 100644 index 000000000..c6f010c0f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/src/writer.c @@ -0,0 +1,807 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "serd_internal.h" + +#include +#include +#include +#include + +#define NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#" +#define NS_XSD "http://www.w3.org/2001/XMLSchema#" + +typedef struct { + SerdNode graph; + SerdNode subject; + SerdNode predicate; +} WriteContext; + +static const WriteContext WRITE_CONTEXT_NULL = { + { 0, 0, 0, 0, SERD_NOTHING }, + { 0, 0, 0, 0, SERD_NOTHING }, + { 0, 0, 0, 0, SERD_NOTHING } +}; + +typedef enum { + SEP_NONE, + SEP_END_S, ///< End of a subject ('.') + SEP_END_P, ///< End of a predicate (';') + SEP_END_O, ///< End of an object (',') + SEP_S_P, ///< Between a subject and predicate (whitespace) + SEP_P_O, ///< Between a predicate and object (whitespace) + SEP_ANON_BEGIN, ///< Start of anonymous node ('[') + SEP_ANON_END, ///< End of anonymous node (']') + SEP_LIST_BEGIN, ///< Start of list ('(') + SEP_LIST_SEP, ///< List separator (whitespace) + SEP_LIST_END ///< End of list (')') +} Sep; + +typedef struct { + const char* str; ///< Sep string + uint8_t len; ///< Length of sep string + uint8_t space_before; ///< Newline before sep + uint8_t space_after_node; ///< Newline after sep if after node + uint8_t space_after_sep; ///< Newline after sep if after sep +} SepRule; + +static const SepRule rules[] = { + { NULL, 0, 0, 0, 0 }, + { " .\n\n", 4, 0, 0, 0 }, + { " ;", 2, 0, 1, 1 }, + { " ,", 2, 0, 1, 0 }, + { NULL, 0, 0, 1, 0 }, + { " ", 1, 0, 0, 0 }, + { "[", 1, 0, 1, 1 }, + { "]", 1, 1, 0, 0 }, + { "(", 1, 0, 0, 0 }, + { NULL, 1, 0, 1, 0 }, + { ")", 1, 1, 0, 0 }, + { "\n", 1, 0, 1, 0 } +}; + +struct SerdWriterImpl { + SerdSyntax syntax; + SerdStyle style; + SerdEnv* env; + SerdNode root_node; + SerdURI root_uri; + SerdURI base_uri; + SerdStack anon_stack; + SerdBulkSink bulk_sink; + SerdSink sink; + void* stream; + SerdErrorSink error_sink; + void* error_handle; + WriteContext context; + SerdNode list_subj; + unsigned list_depth; + uint8_t* bprefix; + size_t bprefix_len; + unsigned indent; + Sep last_sep; + bool empty; +}; + +typedef enum { + WRITE_URI, + WRITE_STRING, + WRITE_LONG_STRING +} TextContext; + +static void +w_err(SerdWriter* writer, SerdStatus st, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + const SerdError e = { st, NULL, 0, 0, fmt, &args }; + serd_error(writer->error_sink, writer->error_handle, &e); + va_end(args); +} + +static inline WriteContext* +anon_stack_top(SerdWriter* writer) +{ + assert(!serd_stack_is_empty(&writer->anon_stack)); + return (WriteContext*)(writer->anon_stack.buf + + writer->anon_stack.size - sizeof(WriteContext)); +} + +static void +copy_node(SerdNode* dst, const SerdNode* src) +{ + if (src) { + dst->buf = (uint8_t*)realloc((char*)dst->buf, src->n_bytes + 1); + dst->n_bytes = src->n_bytes; + dst->n_chars = src->n_chars; + dst->flags = src->flags; + dst->type = src->type; + memcpy((char*)dst->buf, src->buf, src->n_bytes + 1); + } else { + dst->type = SERD_NOTHING; + } +} + +static inline size_t +sink(const void* buf, size_t len, SerdWriter* writer) +{ + if (writer->style & SERD_STYLE_BULK) { + return serd_bulk_sink_write(buf, len, &writer->bulk_sink); + } else { + return writer->sink(buf, len, writer->stream); + } +} + +static size_t +write_text(SerdWriter* writer, TextContext ctx, + const uint8_t* utf8, size_t n_bytes) +{ + size_t len = 0; + char escape[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + for (size_t i = 0; i < n_bytes;) { + // Fast bulk write for long strings of printable ASCII + size_t j = i; + for (; j < n_bytes; ++j) { + if (utf8[j] == '>' || utf8[j] == '\\' || utf8[j] == '"' + || (!in_range(utf8[j], 0x20, 0x7E))) { + break; + } + } + + if (j > i) { + len += sink(&utf8[i], j - i, writer); + i = j; + continue; + } + + uint8_t in = utf8[i++]; + if (ctx == WRITE_LONG_STRING) { + if (in == '\\') { + len += sink("\\\\", 2, writer); continue; + } else if (in == '\"' && i == n_bytes) { + len += sink("\\\"", 2, writer); continue; // '"' at string end + } + } else { + switch (in) { + case '\\': len += sink("\\\\", 2, writer); continue; + case '\n': len += sink("\\n", 2, writer); continue; + case '\r': len += sink("\\r", 2, writer); continue; + case '\t': len += sink("\\t", 2, writer); continue; + case '"': + if (ctx == WRITE_STRING) { + len += sink("\\\"", 2, writer); + continue; + } // else fall-through + default: break; + } + + if ((ctx == WRITE_STRING && in == '"') || + (ctx == WRITE_URI && in == '>')) { + snprintf(escape, sizeof(escape), "\\u%04X", + ctx == WRITE_STRING ? '"' : '>'); + len += sink(escape, 6, writer); + continue; + } + } + + uint32_t c = 0; + size_t size = 0; + if ((in & 0x80) == 0) { // Starts with `0' + c = in & 0x7F; + if (in_range(c, 0x20, 0x7E) + || (is_space(c) && ctx == WRITE_LONG_STRING)) { + len += sink(&in, 1, writer); // Print ASCII character + } else { + snprintf(escape, sizeof(escape), "\\u%04X", c); + len += sink(escape, 6, writer); // ASCII control character + } + continue; + } else if ((in & 0xE0) == 0xC0) { // Starts with `110' + size = 2; + c = in & 0x1F; + } else if ((in & 0xF0) == 0xE0) { // Starts with `1110' + size = 3; + c = in & 0x0F; + } else if ((in & 0xF8) == 0xF0) { // Starts with `11110' + size = 4; + c = in & 0x07; + } else { + w_err(writer, SERD_ERR_BAD_ARG, "invalid UTF-8: %X\n", in); + const uint8_t replacement_char[] = { 0xEF, 0xBF, 0xBD }; + len += sink(replacement_char, sizeof(replacement_char), writer); + return len; + } + + if (ctx != WRITE_URI && !(writer->style & SERD_STYLE_ASCII)) { + // Write UTF-8 character directly to UTF-8 output + // TODO: Always parse and validate character? + len += sink(utf8 + i - 1, size, writer); + i += size - 1; + continue; + } + +#define READ_BYTE() \ + in = utf8[i++] & 0x3f; \ + c = (c << 6) | in; + + switch (size) { + case 4: READ_BYTE(); + case 3: READ_BYTE(); + case 2: READ_BYTE(); + } + + if (c < 0xFFFF) { + snprintf(escape, sizeof(escape), "\\u%04X", c); + len += sink(escape, 6, writer); + } else { + snprintf(escape, sizeof(escape), "\\U%08X", c); + len += sink(escape, 10, writer); + } + } + return len; +} + +static size_t +uri_sink(const void* buf, size_t len, void* stream) +{ + return write_text((SerdWriter*)stream, WRITE_URI, + (const uint8_t*)buf, len); +} + +static void +write_newline(SerdWriter* writer) +{ + sink("\n", 1, writer); + for (unsigned i = 0; i < writer->indent; ++i) { + sink("\t", 1, writer); + } +} + +static void +write_sep(SerdWriter* writer, const Sep sep) +{ + const SepRule* rule = &rules[sep]; + if (rule->space_before) { + write_newline(writer); + } + if (rule->str) { + sink(rule->str, rule->len, writer); + } + if ( (writer->last_sep && rule->space_after_sep) + || (!writer->last_sep && rule->space_after_node)) { + write_newline(writer); + } else if (writer->last_sep && rule->space_after_node) { + sink(" ", 1, writer); + } + writer->last_sep = sep; +} + +static SerdStatus +reset_context(SerdWriter* writer, bool del) +{ + if (del) { + serd_node_free(&writer->context.graph); + serd_node_free(&writer->context.subject); + serd_node_free(&writer->context.predicate); + writer->context = WRITE_CONTEXT_NULL; + } else { + writer->context.graph.type = SERD_NOTHING; + writer->context.subject.type = SERD_NOTHING; + writer->context.predicate.type = SERD_NOTHING; + } + writer->empty = false; + return SERD_SUCCESS; +} + +typedef enum { + FIELD_NONE, + FIELD_SUBJECT, + FIELD_PREDICATE, + FIELD_OBJECT +} Field; + +static bool +write_node(SerdWriter* writer, + const SerdNode* node, + const SerdNode* datatype, + const SerdNode* lang, + Field field, + SerdStatementFlags flags) +{ + SerdChunk uri_prefix; + SerdChunk uri_suffix; + bool has_scheme; + switch (node->type) { + case SERD_BLANK: + if (writer->syntax != SERD_NTRIPLES + && ((field == FIELD_SUBJECT && (flags & SERD_ANON_S_BEGIN)) + || (field == FIELD_OBJECT && (flags & SERD_ANON_O_BEGIN)))) { + ++writer->indent; + write_sep(writer, SEP_ANON_BEGIN); + } else if (writer->syntax != SERD_NTRIPLES + && (field == FIELD_SUBJECT && (flags & SERD_LIST_S_BEGIN))) { + assert(writer->list_depth == 0); + copy_node(&writer->list_subj, node); + ++writer->list_depth; + ++writer->indent; + write_sep(writer, SEP_LIST_BEGIN); + } else if (writer->syntax != SERD_NTRIPLES + && (field == FIELD_OBJECT && (flags & SERD_LIST_O_BEGIN))) { + ++writer->indent; + ++writer->list_depth; + write_sep(writer, SEP_LIST_BEGIN); + } else if (writer->syntax != SERD_NTRIPLES + && ((field == FIELD_SUBJECT && (flags & SERD_EMPTY_S)) + || (field == FIELD_OBJECT && (flags & SERD_EMPTY_O)))) { + sink("[]", 2, writer); + } else { + sink("_:", 2, writer); + if (writer->bprefix && !strncmp((const char*)node->buf, + (const char*)writer->bprefix, + writer->bprefix_len)) { + sink(node->buf + writer->bprefix_len, + node->n_bytes - writer->bprefix_len, + writer); + } else { + sink(node->buf, node->n_bytes, writer); + } + } + break; + case SERD_CURIE: + switch (writer->syntax) { + case SERD_NTRIPLES: + if (serd_env_expand(writer->env, node, &uri_prefix, &uri_suffix)) { + w_err(writer, SERD_ERR_BAD_CURIE, + "undefined namespace prefix `%s'\n", node->buf); + return false; + } + sink("<", 1, writer); + write_text(writer, WRITE_URI, uri_prefix.buf, uri_prefix.len); + write_text(writer, WRITE_URI, uri_suffix.buf, uri_suffix.len); + sink(">", 1, writer); + break; + case SERD_TURTLE: + sink(node->buf, node->n_bytes, writer); + } + break; + case SERD_LITERAL: + if (writer->syntax == SERD_TURTLE && datatype && datatype->buf) { + const char* type_uri = (const char*)datatype->buf; + if (!strncmp(type_uri, NS_XSD, sizeof(NS_XSD) - 1) && ( + !strcmp(type_uri + sizeof(NS_XSD) - 1, "boolean") || + !strcmp(type_uri + sizeof(NS_XSD) - 1, "decimal") || + !strcmp(type_uri + sizeof(NS_XSD) - 1, "integer"))) { + sink(node->buf, node->n_bytes, writer); + break; + } + } + if (writer->syntax != SERD_NTRIPLES + && (node->flags & (SERD_HAS_NEWLINE|SERD_HAS_QUOTE))) { + sink("\"\"\"", 3, writer); + write_text(writer, WRITE_LONG_STRING, node->buf, node->n_bytes); + sink("\"\"\"", 3, writer); + } else { + sink("\"", 1, writer); + write_text(writer, WRITE_STRING, node->buf, node->n_bytes); + sink("\"", 1, writer); + } + if (lang && lang->buf) { + sink("@", 1, writer); + sink(lang->buf, lang->n_bytes, writer); + } else if (datatype && datatype->buf) { + sink("^^", 2, writer); + write_node(writer, datatype, NULL, NULL, FIELD_NONE, flags); + } + break; + case SERD_URI: + has_scheme = serd_uri_string_has_scheme(node->buf); + if (field == FIELD_PREDICATE && (writer->syntax == SERD_TURTLE) + && !strcmp((const char*)node->buf, NS_RDF "type")) { + sink("a", 1, writer); + break; + } else if ((writer->syntax == SERD_TURTLE) + && !strcmp((const char*)node->buf, NS_RDF "nil")) { + sink("()", 2, writer); + break; + } else if (has_scheme && (writer->style & SERD_STYLE_CURIED)) { + SerdNode prefix; + SerdChunk suffix; + if (serd_env_qualify(writer->env, node, &prefix, &suffix)) { + write_text(writer, WRITE_URI, prefix.buf, prefix.n_bytes); + sink(":", 1, writer); + write_text(writer, WRITE_URI, suffix.buf, suffix.len); + break; + } + } + sink("<", 1, writer); + if (writer->style & SERD_STYLE_RESOLVED) { + SerdURI in_base_uri, uri, abs_uri; + serd_env_get_base_uri(writer->env, &in_base_uri); + serd_uri_parse(node->buf, &uri); + serd_uri_resolve(&uri, &in_base_uri, &abs_uri); + bool rooted = uri_is_under(&writer->base_uri, &writer->root_uri); + SerdURI* root = rooted ? &writer->root_uri : & writer->base_uri; + if (!uri_is_under(&abs_uri, root) || + writer->syntax == SERD_NTRIPLES) { + serd_uri_serialise(&abs_uri, uri_sink, writer); + } else { + serd_uri_serialise_relative( + &uri, &writer->base_uri, root, uri_sink, writer); + } + } else { + write_text(writer, WRITE_URI, node->buf, node->n_bytes); + } + sink(">", 1, writer); + default: + break; + } + writer->last_sep = SEP_NONE; + return true; +} + +static inline bool +is_resource(const SerdNode* node) +{ + return node->type > SERD_LITERAL; +} + +static void +write_pred(SerdWriter* writer, SerdStatementFlags flags, const SerdNode* pred) +{ + write_node(writer, pred, NULL, NULL, FIELD_PREDICATE, flags); + write_sep(writer, SEP_P_O); + copy_node(&writer->context.predicate, pred); +} + +static bool +write_list_obj(SerdWriter* writer, + SerdStatementFlags flags, + const SerdNode* predicate, + const SerdNode* object, + const SerdNode* datatype, + const SerdNode* lang) +{ + if (!strcmp((const char*)object->buf, NS_RDF "nil")) { + --writer->indent; + write_sep(writer, SEP_LIST_END); + return true; + } else if (!strcmp((const char*)predicate->buf, NS_RDF "first")) { + write_sep(writer, SEP_LIST_SEP); + write_node(writer, object, datatype, lang, FIELD_OBJECT, flags); + } + return false; +} + +SERD_API +SerdStatus +serd_writer_write_statement(SerdWriter* writer, + SerdStatementFlags flags, + const SerdNode* graph, + const SerdNode* subject, + const SerdNode* predicate, + const SerdNode* object, + const SerdNode* datatype, + const SerdNode* lang) +{ + if (!subject || !predicate || !object + || !subject->buf || !predicate->buf || !object->buf + || !is_resource(subject) || !is_resource(predicate)) { + return SERD_ERR_BAD_ARG; + } + + switch (writer->syntax) { + case SERD_NTRIPLES: + write_node(writer, subject, NULL, NULL, FIELD_SUBJECT, flags); + sink(" ", 1, writer); + write_node(writer, predicate, NULL, NULL, FIELD_PREDICATE, flags); + sink(" ", 1, writer); + if (!write_node(writer, object, datatype, lang, FIELD_OBJECT, flags)) { + return SERD_ERR_UNKNOWN; + } + sink(" .\n", 3, writer); + return SERD_SUCCESS; + default: + break; + } + + if ((flags & SERD_LIST_CONT)) { + if (write_list_obj(writer, flags, predicate, object, datatype, lang)) { + // Reached end of list + if (--writer->list_depth == 0 && writer->list_subj.type) { + reset_context(writer, true); + writer->context.subject = writer->list_subj; + writer->list_subj = SERD_NODE_NULL; + } + return SERD_SUCCESS; + } + } else if (serd_node_equals(subject, &writer->context.subject)) { + if (serd_node_equals(predicate, &writer->context.predicate)) { + // Abbreviate S P + if (!(flags & SERD_ANON_O_BEGIN)) { + ++writer->indent; + } + write_sep(writer, SEP_END_O); + write_node(writer, object, datatype, lang, FIELD_OBJECT, flags); + if (!(flags & SERD_ANON_O_BEGIN)) { + --writer->indent; + } + } else { + // Abbreviate S + Sep sep = writer->context.predicate.type ? SEP_END_P : SEP_S_P; + write_sep(writer, sep); + write_pred(writer, flags, predicate); + write_node(writer, object, datatype, lang, FIELD_OBJECT, flags); + } + } else { + // No abbreviation + if (writer->context.subject.type) { + assert(writer->indent > 0); + --writer->indent; + if (serd_stack_is_empty(&writer->anon_stack)) { + write_sep(writer, SEP_END_S); + } + } else if (!writer->empty) { + write_sep(writer, SEP_S_P); + } + + if (!(flags & SERD_ANON_CONT)) { + write_node(writer, subject, NULL, NULL, FIELD_SUBJECT, flags); + ++writer->indent; + write_sep(writer, SEP_S_P); + } else { + ++writer->indent; + } + + reset_context(writer, true); + copy_node(&writer->context.subject, subject); + + if (!(flags & SERD_LIST_S_BEGIN)) { + write_pred(writer, flags, predicate); + } + + write_node(writer, object, datatype, lang, FIELD_OBJECT, flags); + } + + if (flags & (SERD_ANON_S_BEGIN|SERD_ANON_O_BEGIN)) { + WriteContext* ctx = (WriteContext*)serd_stack_push( + &writer->anon_stack, sizeof(WriteContext)); + *ctx = writer->context; + WriteContext new_context = { + serd_node_copy(graph), serd_node_copy(subject), SERD_NODE_NULL }; + if ((flags & SERD_ANON_S_BEGIN)) { + new_context.predicate = serd_node_copy(predicate); + } + writer->context = new_context; + } else { + copy_node(&writer->context.graph, graph); + copy_node(&writer->context.subject, subject); + copy_node(&writer->context.predicate, predicate); + } + + return SERD_SUCCESS; +} + +SERD_API +SerdStatus +serd_writer_end_anon(SerdWriter* writer, + const SerdNode* node) +{ + if (writer->syntax == SERD_NTRIPLES) { + return SERD_SUCCESS; + } + if (serd_stack_is_empty(&writer->anon_stack)) { + w_err(writer, SERD_ERR_UNKNOWN, + "unexpected end of anonymous node\n"); + return SERD_ERR_UNKNOWN; + } + assert(writer->indent > 0); + --writer->indent; + write_sep(writer, SEP_ANON_END); + reset_context(writer, true); + writer->context = *anon_stack_top(writer); + serd_stack_pop(&writer->anon_stack, sizeof(WriteContext)); + const bool is_subject = serd_node_equals(node, &writer->context.subject); + if (is_subject) { + copy_node(&writer->context.subject, node); + writer->context.predicate.type = SERD_NOTHING; + } + return SERD_SUCCESS; +} + +SERD_API +SerdStatus +serd_writer_finish(SerdWriter* writer) +{ + if (writer->context.subject.type) { + sink(" .\n", 3, writer); + } + if (writer->style & SERD_STYLE_BULK) { + serd_bulk_sink_flush(&writer->bulk_sink); + } + writer->indent = 0; + return reset_context(writer, true); +} + +SERD_API +SerdWriter* +serd_writer_new(SerdSyntax syntax, + SerdStyle style, + SerdEnv* env, + const SerdURI* base_uri, + SerdSink ssink, + void* stream) +{ + const WriteContext context = WRITE_CONTEXT_NULL; + SerdWriter* writer = (SerdWriter*)malloc(sizeof(SerdWriter)); + writer->syntax = syntax; + writer->style = style; + writer->env = env; + writer->root_node = SERD_NODE_NULL; + writer->root_uri = SERD_URI_NULL; + writer->base_uri = base_uri ? *base_uri : SERD_URI_NULL; + writer->anon_stack = serd_stack_new(sizeof(WriteContext)); + writer->sink = ssink; + writer->stream = stream; + writer->error_sink = NULL; + writer->error_handle = NULL; + writer->context = context; + writer->list_subj = SERD_NODE_NULL; + writer->list_depth = 0; + writer->bprefix = NULL; + writer->bprefix_len = 0; + writer->indent = 0; + writer->last_sep = SEP_NONE; + writer->empty = true; + if (style & SERD_STYLE_BULK) { + writer->bulk_sink = serd_bulk_sink_new(ssink, stream, SERD_PAGE_SIZE); + } + return writer; +} + +SERD_API +void +serd_writer_set_error_sink(SerdWriter* writer, + SerdErrorSink error_sink, + void* error_handle) +{ + writer->error_sink = error_sink; + writer->error_handle = error_handle; +} + +SERD_API +void +serd_writer_chop_blank_prefix(SerdWriter* writer, + const uint8_t* prefix) +{ + free(writer->bprefix); + writer->bprefix_len = 0; + writer->bprefix = NULL; + if (prefix) { + writer->bprefix_len = strlen((const char*)prefix); + writer->bprefix = (uint8_t*)malloc(writer->bprefix_len + 1); + memcpy(writer->bprefix, prefix, writer->bprefix_len + 1); + } +} + +SERD_API +SerdStatus +serd_writer_set_base_uri(SerdWriter* writer, + const SerdNode* uri) +{ + if (!serd_env_set_base_uri(writer->env, uri)) { + serd_env_get_base_uri(writer->env, &writer->base_uri); + + if (writer->syntax != SERD_NTRIPLES) { + if (writer->context.graph.type || writer->context.subject.type) { + sink(" .\n\n", 4, writer); + reset_context(writer, false); + } + sink("@base <", 7, writer); + sink(uri->buf, uri->n_bytes, writer); + sink("> .\n", 4, writer); + } + writer->indent = 0; + return reset_context(writer, false); + } + return SERD_ERR_UNKNOWN; +} + +SERD_API +SerdStatus +serd_writer_set_root_uri(SerdWriter* writer, + const SerdNode* uri) +{ + serd_node_free(&writer->root_node); + if (uri && uri->buf) { + writer->root_node = serd_node_copy(uri); + serd_uri_parse(uri->buf, &writer->root_uri); + } else { + writer->root_node = SERD_NODE_NULL; + writer->root_uri = SERD_URI_NULL; + } + return SERD_SUCCESS; +} + +SERD_API +SerdStatus +serd_writer_set_prefix(SerdWriter* writer, + const SerdNode* name, + const SerdNode* uri) +{ + if (!serd_env_set_prefix(writer->env, name, uri)) { + if (writer->syntax != SERD_NTRIPLES) { + if (writer->context.graph.type || writer->context.subject.type) { + sink(" .\n\n", 4, writer); + reset_context(writer, false); + } + sink("@prefix ", 8, writer); + sink(name->buf, name->n_bytes, writer); + sink(": <", 3, writer); + write_text(writer, WRITE_URI, uri->buf, uri->n_bytes); + sink("> .\n", 4, writer); + } + writer->indent = 0; + return reset_context(writer, false); + } + return SERD_ERR_UNKNOWN; +} + +SERD_API +void +serd_writer_free(SerdWriter* writer) +{ + serd_writer_finish(writer); + serd_stack_free(&writer->anon_stack); + free(writer->bprefix); + if (writer->style & SERD_STYLE_BULK) { + serd_bulk_sink_free(&writer->bulk_sink); + } + serd_node_free(&writer->root_node); + free(writer); +} + +SERD_API +SerdEnv* +serd_writer_get_env(SerdWriter* writer) +{ + return writer->env; +} + +SERD_API +size_t +serd_file_sink(const void* buf, size_t len, void* stream) +{ + return fwrite(buf, 1, len, (FILE*)stream); +} + +SERD_API +size_t +serd_chunk_sink(const void* buf, size_t len, void* stream) +{ + SerdChunk* chunk = (SerdChunk*)stream; + chunk->buf = (uint8_t*)realloc((uint8_t*)chunk->buf, chunk->len + len); + memcpy((uint8_t*)chunk->buf + chunk->len, buf, len); + chunk->len += len; + return len; +} + +SERD_API +uint8_t* +serd_chunk_sink_finish(SerdChunk* stream) +{ + serd_chunk_sink("", 1, stream); + return (uint8_t*)stream->buf; +} diff --git a/source/libs/lilv/serd-0.18.2/tests/README.txt b/source/libs/lilv/serd-0.18.2/tests/README.txt new file mode 100644 index 000000000..37460e60f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/README.txt @@ -0,0 +1,20 @@ +These are the tests for the Turtle Terse RDF Triple Language +that must be passed by conformant systems. See + http://www.dajobe.org/2004/01/turtle/ +for the full conformance information. + +The format is a set of good tests and bad tests. + +Good tests are a pair of files: + abc.ttl abc.out +which are the input Turtle file and the expected output RDF triples, +written in N-Triples. + +bad tests are of the form + bad-XX.ttl +which must fail. + +The tests should be performed with an assumed base URI +of http://www.w3.org/2001/sw/DataAccess/df1/tests/ + +Dave diff --git a/source/libs/lilv/serd-0.18.2/tests/UTF-8.ttl b/source/libs/lilv/serd-0.18.2/tests/UTF-8.ttl new file mode 100644 index 000000000..82587c578 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/UTF-8.ttl @@ -0,0 +1,219 @@ +@prefix rdfs: . + +<> rdfs:comment """ +UTF-8 encoded sample plain-text file +‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +Markus Kuhn [ˈmaʳkÊŠs kuËn] — 2002-07-25 + + +The ASCII compatible UTF-8 encoding used in this plain-text file +is defined in Unicode, ISO 10646-1, and RFC 2279. + + +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), ⎧⎡⎛┌─────â”⎞⎤⎫ + ⎪⎢⎜│a²+b³ ⎟⎥⎪ + ∀x∈â„: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), ⎪⎢⎜│───── ⎟⎥⎪ + ⎪⎢⎜⎷ c₈ ⎟⎥⎪ + â„• ⊆ â„•â‚€ ⊂ ℤ ⊂ â„š ⊂ ℠⊂ â„‚, ⎨⎢⎜ ⎟⎥⎬ + ⎪⎢⎜ ∞ ⎟⎥⎪ + ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫), ⎪⎢⎜ ⎲ ⎟⎥⎪ + ⎪⎢⎜ ⎳aâ±-bâ±âŽŸâŽ¥âŽª + 2Hâ‚‚ + Oâ‚‚ ⇌ 2Hâ‚‚O, R = 4.7 kΩ, ⌀ 200 mm ⎩⎣âŽi=1 ⎠⎦⎭ + +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 € │ â•‘ + â•‘ ╰─────────╯ â•‘ + â•šâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â• + +Combining characters: + + STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑ + +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: â–ˆ + â–‰ + â•”â•â•â•¦â•â•â•— ┌──┬──┠╭──┬──╮ ╭──┬──╮ â”â”â”┳â”â”┓ ┎┒â”┑ â•· â•» â”┯┓ ┌┰┠▊ ╱╲╱╲╳╳╳ + ║┌─╨─â”â•‘ │╔â•â•§â•â•—│ │╒â•â•ªâ•â••â”‚ │╓─â•â”€â•–│ ┃┌─╂─â”┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ â”╋┥ â–‹ ╲╱╲╱╳╳╳ + ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ â•¿ │┃ â”╅╆┓ ╵ ╹ â”—â”·â”› └┸┘ â–Œ ╱╲╱╲╳╳╳ + â• â•¡ ╳ â•žâ•£ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┠╎ â”┅┅┓ ┋ ■╲╱╲╱╳╳╳ + ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ â•Ž ╠┇ ┋ â–Ž + ║└─╥─┘║ │╚â•â•¤â•â•â”‚ │╘â•â•ªâ•â•›â”‚ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ â•Ž ╠┇ ┋ â– + â•šâ•â•â•©â•â•â• └──┴──┘ ╰──┴──╯ ╰──┴──╯ â”—â”â”â”»â”â”â”› ▗▄▖▛▀▜ └╌╌┘ â•Ž â”—â•â•â”› ┋ â–▂▃▄▅▆▇█ + â–▀▘▙▄▟ +""" . +<> rdfs:comment """ + Two byte Unicode escape: \u00E0 + Largest Unicode escape in Turtle: \U0010FFFF +""" . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-00.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-00.ttl new file mode 100644 index 000000000..b1a1b3619 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-00.ttl @@ -0,0 +1,2 @@ +# prefix name must end in a : +@prefix a <#> . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-01.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-01.ttl new file mode 100644 index 000000000..533bc21db --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-01.ttl @@ -0,0 +1,3 @@ +# Forbidden by RDF - predicate cannot be blank +@prefix : . +:a [ :b :c ] :d . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-02.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-02.ttl new file mode 100644 index 000000000..fd2014d0b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-02.ttl @@ -0,0 +1,3 @@ +# Forbidden by RDF - predicate cannot be blank +@prefix : . +:a [] :b . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-03.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-03.ttl new file mode 100644 index 000000000..07a372f18 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-03.ttl @@ -0,0 +1,3 @@ +# 'a' only allowed as a predicate +@prefix : . +a :a :b . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-04.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-04.ttl new file mode 100644 index 000000000..ee7246c83 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-04.ttl @@ -0,0 +1,3 @@ +# No comma is allowed in collections +@prefix : . +:a :b ( "apple", "banana" ) . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-05.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-05.ttl new file mode 100644 index 000000000..387015fe0 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-05.ttl @@ -0,0 +1,4 @@ +# N3 {}s are not in Turtle +@prefix : . +{ :a :b :c . } :d :e . + diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-06.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-06.ttl new file mode 100644 index 000000000..a8f1a0fca --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-06.ttl @@ -0,0 +1,3 @@ +# is and of are not in turtle +@prefix : . +:a is :b of :c . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-07.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-07.ttl new file mode 100644 index 000000000..18ea4fa6b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-07.ttl @@ -0,0 +1,4 @@ +# paths are not in turtle +@prefix : . +:a.:b.:c . +:a^:b^:c . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-08.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-08.ttl new file mode 100644 index 000000000..07918f9ac --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-08.ttl @@ -0,0 +1,2 @@ +@keywords something. +# @keywords is not in turtle diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-09.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-09.ttl new file mode 100644 index 000000000..d2d76c136 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-09.ttl @@ -0,0 +1,3 @@ +# implies is not in turtle +@prefix : . +:a => :b . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-10.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-10.ttl new file mode 100644 index 000000000..b5ef1f557 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-10.ttl @@ -0,0 +1,3 @@ +# equivalence is not in turtle +@prefix : . +:a = :b . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-11.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-11.ttl new file mode 100644 index 000000000..09e7b6a0b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-11.ttl @@ -0,0 +1,3 @@ +# @forAll is not in turtle +@prefix : . +@forAll :x . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-12.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-12.ttl new file mode 100644 index 000000000..cef48ff86 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-12.ttl @@ -0,0 +1,3 @@ +# @forSome is not in turtle +@prefix : . +@forSome :x . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-13.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-13.ttl new file mode 100644 index 000000000..91accf2b0 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-13.ttl @@ -0,0 +1,3 @@ +# <= is not in turtle +@prefix : . +:a <= :b . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-14.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-14.ttl new file mode 100644 index 000000000..f4a7acf54 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-14.ttl @@ -0,0 +1,6 @@ +# Test long literals with missing end +@prefix : . +:a :b """a long + literal +with +newlines diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-base.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-base.ttl new file mode 100644 index 000000000..854219995 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-base.ttl @@ -0,0 +1 @@ +@base "I'm quite certain this is not a URI" . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-blank.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-blank.ttl new file mode 100644 index 000000000..a6543f2de --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-blank.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +_:.bad a eg:Thing . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-datatype.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-datatype.ttl new file mode 100644 index 000000000..0dd6018f6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-datatype.ttl @@ -0,0 +1 @@ +<> "hello"^^"not-a-uri" . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-blank.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-blank.ttl new file mode 100644 index 000000000..08c13ae93 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-blank.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:thing [ eg:comment "Thing" \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-escape.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-escape.ttl new file mode 100644 index 000000000..d3af9c93d --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-escape.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:comment """\uA \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang-suffix.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang-suffix.ttl new file mode 100644 index 000000000..8e3002cbe --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang-suffix.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:comment "That ain't no language"@en-x \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang.ttl new file mode 100644 index 000000000..54db417ff --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-lang.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:comment "That ain't no language"@a \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-list.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-list.ttl new file mode 100644 index 000000000..ca6c352f7 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-list.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:thing ( eg:car eg:cdr \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list.ttl new file mode 100644 index 000000000..9bbcd17a8 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list.ttl @@ -0,0 +1,2 @@ +@prefix eg: . +<> eg:p eg:o , \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list2.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list2.ttl new file mode 100644 index 000000000..9186fb9f7 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-object-list2.ttl @@ -0,0 +1,2 @@ +@prefix eg: . +<> eg:p eg:o ; eg:p1 eg:o2 , \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-predicate-list.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-predicate-list.ttl new file mode 100644 index 000000000..eab5b05b0 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-predicate-list.ttl @@ -0,0 +1,2 @@ +@prefix eg: . +<> eg:p eg:o ; \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-string.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-string.ttl new file mode 100644 index 000000000..d3a1aa55e --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-string.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:comment "This is the string that never ends \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-triple-quote.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-triple-quote.ttl new file mode 100644 index 000000000..d60acd155 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-triple-quote.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:comment """Hello"" \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-uri.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-uri.ttl new file mode 100644 index 000000000..9bd2a64d6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-eof-in-uri.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:uri """\!""" . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-hex-digit.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-hex-digit.ttl new file mode 100644 index 000000000..85816ced6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-hex-digit.ttl @@ -0,0 +1 @@ + "\uABCG" . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-id-clash.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-id-clash.ttl new file mode 100644 index 000000000..55ab23e37 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-id-clash.ttl @@ -0,0 +1,2 @@ +_:genid1 a _:genid2 . +_:genid2 a _:docid1 . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-lang.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-lang.ttl new file mode 100644 index 000000000..01e043284 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-lang.ttl @@ -0,0 +1 @@ +<> "hello"@\bad . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-list.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-list.ttl new file mode 100644 index 000000000..5606658ec --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-list.ttl @@ -0,0 +1 @@ +<> , invalid . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-list2.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-list2.ttl new file mode 100644 index 000000000..b5242de25 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-list2.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +<> eg:thing ( . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-namespace.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-namespace.ttl new file mode 100644 index 000000000..0dd78d33a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-namespace.ttl @@ -0,0 +1 @@ +@prefix eg: "what?" . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-ns.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-ns.ttl new file mode 100644 index 000000000..4410573ef --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-ns.ttl @@ -0,0 +1 @@ +<> a badprefix:Thing . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-num.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-num.ttl new file mode 100644 index 000000000..7685f0e07 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-num.ttl @@ -0,0 +1 @@ +<> .hello . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-object.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-object.ttl new file mode 100644 index 000000000..9fc6da185 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-object.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +eg:thing a four . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-object2.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-object2.ttl new file mode 100644 index 000000000..9293d168b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-object2.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +eg:thing a fives . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-prefix.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-prefix.ttl new file mode 100644 index 000000000..6c2863551 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-prefix.ttl @@ -0,0 +1 @@ +@prefix _invalid . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-string.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-string.ttl new file mode 100644 index 000000000..0bdea42c4 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-string.ttl @@ -0,0 +1 @@ +<> "hello \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-uri-escape.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-uri-escape.ttl new file mode 100644 index 000000000..16c63754f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-uri-escape.ttl @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/bad-verb.ttl b/source/libs/lilv/serd-0.18.2/tests/bad-verb.ttl new file mode 100644 index 000000000..56a134f32 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/bad-verb.ttl @@ -0,0 +1,2 @@ +@prefix a: . +a:thing x a:Thing . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/base.out b/source/libs/lilv/serd-0.18.2/tests/base.out new file mode 100644 index 000000000..18717b816 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/base.out @@ -0,0 +1 @@ + a . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/base.ttl b/source/libs/lilv/serd-0.18.2/tests/base.ttl new file mode 100644 index 000000000..755c1d093 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/base.ttl @@ -0,0 +1,2 @@ + + a . diff --git a/source/libs/lilv/serd-0.18.2/tests/manifest-bad.ttl b/source/libs/lilv/serd-0.18.2/tests/manifest-bad.ttl new file mode 100644 index 000000000..e8c5ba8f8 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/manifest-bad.ttl @@ -0,0 +1,88 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix mf: . +@prefix qt: . + +<> rdf:type mf:Manifest ; + rdfs:comment "Turtle bad syntax test cases (must fail)" ; + mf:entries + ( + + [ mf:name "bad-00" ; + rdfs:comment "prefix name must end in a :" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-01" ; + rdfs:comment "blank predicate forbidden" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-02" ; + rdfs:comment "blank predicate forbidden" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-03" ; + rdfs:comment "a forbidden as subject" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-04" ; + rdfs:comment ", not allowed in collections" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-05" ; + rdfs:comment "{} not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-06" ; + rdfs:comment "is and of not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-07" ; + rdfs:comment "paths not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-08" ; + rdfs:comment "@keywords not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-09" ; + rdfs:comment "=> not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-10" ; + rdfs:comment "= not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-11" ; + rdfs:comment "@forAll not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-12" ; + rdfs:comment "@forSome not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-13" ; + rdfs:comment "<= not allowed in Turtle" ; + mf:action [ qt:data ] ; + ] + + [ mf:name "bad-14" ; + rdfs:comment "long literal with missing end" ; + mf:action [ qt:data ] ; + ] + + + # End of tests + ). diff --git a/source/libs/lilv/serd-0.18.2/tests/manifest.ttl b/source/libs/lilv/serd-0.18.2/tests/manifest.ttl new file mode 100644 index 000000000..6a2cae262 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/manifest.ttl @@ -0,0 +1,215 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix mf: . +@prefix qt: . + +<> rdf:type mf:Manifest ; + rdfs:comment "Turtle good syntax test cases (must pass)" ; + mf:entries + ( + [ mf:name "test-00" ; + rdfs:comment "Blank subject" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-01" ; + rdfs:comment "@prefix and qnames" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-02" ; + rdfs:comment ", operator" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-03" ; + rdfs:comment "; operator" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-04" ; + rdfs:comment "empty [] as subject and object" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-05" ; + rdfs:comment "non-empty [] as subject and object" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-06" ; + rdfs:comment "'a' as predicate" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-07" ; + rdfs:comment "simple collection" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-08" ; + rdfs:comment "empty collection" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-09" ; + rdfs:comment "integer datatyped literal" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-10" ; + rdfs:comment "decimal integer canonicalization" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-11" ; + rdfs:comment "- and _ in names and qnames" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-12" ; + rdfs:comment "tests for rdf:_ and other qnames starting with _" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-13" ; + rdfs:comment "bare : allowed" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-14" ; + rdfs:comment "10000 triples, more than the default Bison stack size" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-15" ; + rdfs:comment "10000 triple objects (10000 triples)" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-16" ; + rdfs:comment "10000 items (10000 triples)" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-17" ; + rdfs:comment "simple long literal" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-18" ; + rdfs:comment "long literals with escapes" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-19" ; + rdfs:comment "floating point number" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-20" ; + rdfs:comment "empty literals, normal and long variant" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-21" ; + rdfs:comment "positive integer, decimal and doubles" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-22" ; + rdfs:comment "negative integer, decimal and doubles" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-23" ; + rdfs:comment "long literal ending in double quote" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-24" ; + rdfs:comment "boolean literals" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-25" ; + rdfs:comment "comments" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-26" ; + rdfs:comment "no final mewline" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-27" ; + rdfs:comment "duplicate prefix" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-28" ; + rdfs:comment "decimal data types (serializing test)" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-29" ; + rdfs:comment "Escaping U+0001 to U+007F in a URI" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-30" ; + rdfs:comment "@base" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "rdf-schema" ; + rdfs:comment "RDF Namespace document converted into Turtle" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "rdfs-namespace" ; + rdfs:comment "RDFS Namespace document converted into Turtle" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "rdfq-results" ; + rdfs:comment "Example query result from http://www.w3.org/2003/03/rdfqr-tests/recording-query-results.html" ; + mf:action [ qt:data ] ; + mf:result + ] + + # End of tests + ). diff --git a/source/libs/lilv/serd-0.18.2/tests/rdf-schema.out b/source/libs/lilv/serd-0.18.2/tests/rdf-schema.out new file mode 100644 index 000000000..94e14045a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/rdf-schema.out @@ -0,0 +1,126 @@ + . + "Indicates membership of a class" . + "type"@en . + "type"@fr . + . + . + "The concept of Class" . + "Class"@en . + "Classe"@fr . + . + . + "Properties used to express RDF Schema constraints." . + "ConstraintProperty"@en . + "Propri\u00E9t\u00E9Contrainte"@fr . + . + . + . + . + "Resources used to express RDF Schema constraints." . + "ConstraintResource"@en . + "RessourceContrainte"@fr . + . + . + "This represents the set Containers." . + "Container"@en . + "Enveloppe"@fr . + . + . + "ContainerMembershipProperty"@en . + . + . + . + "This represents the set of atomic values, eg. textual strings." . + "Literal"@en . + "Litt\u00E9ral"@fr . + . + "The most general class" . + "Resource"@en . + "Ressource"@fr . + . + "Use this for descriptions" . + . + "comment"@en . + "commentaire"@fr . + . + . + "This is how we associate a class with properties that its instances can have" . + "domain"@en . + "domaine"@fr . + . + "Indicates a resource containing and defining the subject resource." . + . + "esD\u00E9finiPar"@fr . + "isDefinedBy"@en . + . + . + . + "Provides a human-readable version of a resource name." . + . + "label"@en . + "label"@fr . + . + . + "Properties that can be used in a schema to provide constraints" . + . + "range"@en . + "\u00E9tendue"@fr . + . + . + "Indicates a resource that provides information about the subject resource." . + . + "seeAlso"@en . + "voirAussi"@fr . + . + . + "Indicates membership of a class" . + . + "sousClasseDe"@fr . + "subClassOf"@en . + . + . + "Indicates specialization of properties" . + . + "sousPropri\u00E9t\u00E9De"@fr . + "subPropertyOf"@en . + . + . + "Alt"@en . + "Choix"@fr . + . + . + "Bag"@en . + "Ensemble"@fr . + . + . + "The concept of a property." . + "Property"@en . + "Propri\u00E9t\u00E9"@fr . + . + . + "Sequence"@en . + "S\u00E9quence"@fr . + . + . + "This represents the set of reified statements." . + "D\u00E9claration"@fr . + "Statement"@en . + . + . + . + "object"@en . + "objet"@fr . + . + . + "predicate"@en . + "pr\u00E9dicat"@fr . + . + . + . + "subject"@en . + "sujet"@fr . + . + . + "object"@en . + "value"@fr . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/rdf-schema.ttl b/source/libs/lilv/serd-0.18.2/tests/rdf-schema.ttl new file mode 100644 index 000000000..8a61794e6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/rdf-schema.ttl @@ -0,0 +1,156 @@ +# RDF Namespace document converted into Turtle + +@prefix : . +@prefix rdf: . + +rdf:type a rdf:Property; + :comment "Indicates membership of a class"; + :label "type"@en, + "type"@fr; + :range :Class . + +:Class a :Class; + :comment "The concept of Class"; + :label "Class"@en, + "Classe"@fr; + :subClassOf :Resource . + +:ConstraintProperty a :Class; + :comment "Properties used to express RDF Schema constraints."; + :label "ConstraintProperty"@en, + "Propri\u00E9t\u00E9Contrainte"@fr; + :subClassOf :ConstraintResource, + rdf:Property . + +:ConstraintResource a :Class, + :Class; + :comment "Resources used to express RDF Schema constraints."; + :label "ConstraintResource"@en, + "RessourceContrainte"@fr; + :subClassOf :Resource . + +:Container a :Class; + :comment "This represents the set Containers."; + :label "Container"@en, + "Enveloppe"@fr; + :subClassOf :Resource . + +:ContainerMembershipProperty a :Class; + :label "ContainerMembershipProperty"@en; + :subClassOf rdf:Property . + +:Literal a :Class, + :Class; + :comment "This represents the set of atomic values, eg. textual strings."; + :label "Literal"@en, + "Litt\u00E9ral"@fr . + +:Resource a :Class; + :comment "The most general class"; + :label "Resource"@en, + "Ressource"@fr . + +:comment a rdf:Property; + :comment "Use this for descriptions"; + :domain :Resource; + :label "comment"@en, + "commentaire"@fr; + :range :Literal . + +:domain a :ConstraintProperty; + :comment "This is how we associate a class with properties that its instances can have"; + :label "domain"@en, + "domaine"@fr . + +:isDefinedBy a rdf:Property; + :comment "Indicates a resource containing and defining the subject resource."; + :domain :Resource; + :label "esD\u00E9finiPar"@fr, + "isDefinedBy"@en; + :range :Resource; + :subPropertyOf :seeAlso . + +:label a rdf:Property; + :comment "Provides a human-readable version of a resource name."; + :domain :Resource; + :label "label"@en, + "label"@fr; + :range :Literal . + +:range a :ConstraintProperty; + :comment "Properties that can be used in a schema to provide constraints"; + :domain rdf:Property; + :label "range"@en, + "\u00E9tendue"@fr; + :range :Class . + +:seeAlso a rdf:Property; + :comment "Indicates a resource that provides information about the subject resource."; + :domain :Resource; + :label "seeAlso"@en, + "voirAussi"@fr; + :range :Resource . + +:subClassOf a rdf:Property; + :comment "Indicates membership of a class"; + :domain :Class; + :label "sousClasseDe"@fr, + "subClassOf"@en; + :range :Class . + +:subPropertyOf a rdf:Property; + :comment "Indicates specialization of properties"; + :domain rdf:Property; + :label "sousPropri\u00E9t\u00E9De"@fr, + "subPropertyOf"@en; + :range rdf:Property . + +rdf:Alt a :Class; + :label "Alt"@en, + "Choix"@fr; + :subClassOf :Container . + +rdf:Bag a :Class; + :label "Bag"@en, + "Ensemble"@fr; + :subClassOf :Container . + +rdf:Property a :Class; + :comment "The concept of a property."; + :label "Property"@en, + "Propri\u00E9t\u00E9"@fr; + :subClassOf :Resource . + +rdf:Seq a :Class; + :label "Sequence"@en, + "S\u00E9quence"@fr; + :subClassOf :Container . + +rdf:Statement a :Class; + :comment "This represents the set of reified statements."; + :label "D\u00E9claration"@fr, + "Statement"@en; + :subClassOf :Resource . + +rdf:object a rdf:Property; + :domain rdf:Statement; + :label "object"@en, + "objet"@fr . + +rdf:predicate a rdf:Property; + :domain rdf:Statement; + :label "predicate"@en, + "pr\u00E9dicat"@fr; + :range rdf:Property . + +rdf:subject a rdf:Property; + :domain rdf:Statement; + :label "subject"@en, + "sujet"@fr; + :range :Resource . + +rdf:value a rdf:Property; + :label "object"@en, + "value"@fr . + +: :seeAlso . diff --git a/source/libs/lilv/serd-0.18.2/tests/rdfq-results.out b/source/libs/lilv/serd-0.18.2/tests/rdfq-results.out new file mode 100644 index 000000000..fb2542932 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/rdfq-results.out @@ -0,0 +1,36 @@ +_:genid1 "x" . +_:genid1 "123"^^ . +_:genid2 "y" . +_:genid2 . +_:genid3 . +_:genid3 _:genid1 . +_:genid3 _:genid2 . +_:genid4 "x" . +_:genid4 "2003-01-21" . +_:genid5 "y" . +_:genid5 . +_:genid6 . +_:genid6 _:genid4 . +_:genid6 _:genid5 . +_:genid7 "x" . +_:genid7 "anon1" . +_:genid8 "y" . +_:genid8 _:a . +_:genid9 . +_:genid9 _:genid7 . +_:genid9 _:genid8 . +_:genid10 "x" . +_:genid10 "anon2" . +_:genid11 "y" . +_:genid11 _:a . +_:genid12 . +_:genid12 _:genid10 . +_:genid12 _:genid11 . + . + "4"^^ . + "x" . + "y" . + _:genid3 . + _:genid6 . + _:genid9 . + _:genid12 . diff --git a/source/libs/lilv/serd-0.18.2/tests/rdfq-results.ttl b/source/libs/lilv/serd-0.18.2/tests/rdfq-results.ttl new file mode 100644 index 000000000..c6e72aa7e --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/rdfq-results.ttl @@ -0,0 +1,39 @@ +# from http://www.w3.org/2003/03/rdfqr-tests/recording-query-results.html + +@prefix rdf: . +@prefix rs: . + + +<> rdf:type rs:ResultSet ; + rs:size 4 ; + rs:resultVariable "x" ; rs:resultVariable "y" ; + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; rs:value 123 ] ; + rs:binding [ rs:variable "y" ; rs:value ] + ] ; + + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; + rs:value "2003-01-21" ] ; + rs:binding [ rs:variable "y" ; + rs:value ] + ] ; + + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; + rs:value "anon1" ] ; + rs:binding [ rs:variable "y" ; + rs:value _:a ] + ] ; + + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; + rs:value "anon2" ] ; + rs:binding [ rs:variable "y" ; + rs:value _:a ] + ] ; + . diff --git a/source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.out b/source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.out new file mode 100644 index 000000000..4696f8cfb --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.out @@ -0,0 +1,131 @@ + . + "Indicates membership of a class" . + . + . + "type"@en . + . + . + "A collection of alternatives."@en . + . + "Alt"@en . + . + . + "An unordered collection."@en . + . + "Bag"@en . + . + . + "The concept of a property." . + . + "Property"@en . + . + . + "An ordered collection."@en . + . + "Seq"@en . + . + . + "The class of RDF statements." . + . + "Statement"@en . + . + . + "The object of an RDF statement." . + . + . + "object"@en . + . + "the predicate of an RDF statement." . + . + . + "predicate"@en . + . + . + "The subject of an RDF statement." . + . + . + "subject"@en . + . + . + "Identifies the principal value (usually a string) of a property when the property value is a structured resource" . + . + . + "value"@en . + . + . + "The concept of Class" . + . + "Class"@en . + . + . + "This represents the set Containers." . + . + "Container"@en . + . + . + "The container membership properties, rdf:1, rdf:2, ..., all of which are sub-properties of 'member'." . + . + "ContainerMembershipProperty"@en . + . + . + "This represents the set of atomic values, eg. textual strings." . + . + "Literal"@en . + . + "The class resource, everything." . + . + "Resource"@en . + . + "Use this for descriptions" . + . + . + "comment"@en . + . + . + "A domain class for a property type" . + . + . + "domain"@en . + . + . + "Indicates the namespace of a resource" . + . + . + "isDefinedBy"@en . + . + . + . + "Provides a human-readable version of a resource name." . + . + . + "label"@en . + . + . + "a member of a container" . + . + . + "member"@en . + . + "A range class for a property type" . + . + . + "range"@en . + . + . + "A resource that provides information about the subject resource" . + . + . + "seeAlso"@en . + . + . + "Indicates membership of a class" . + . + . + "subClassOf"@en . + . + . + "Indicates specialization of properties" . + . + . + "subPropertyOf"@en . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.ttl b/source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.ttl new file mode 100644 index 000000000..0d73e6bf7 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/rdfs-namespace.ttl @@ -0,0 +1,160 @@ +# RDFS Namespace document converted into Turtle + +@prefix : . +@prefix rdf: . + +rdf:type a rdf:Property; + :comment "Indicates membership of a class"; + :domain :Resource; + :isDefinedBy rdf:; + :label "type"@en; + :range :Class . + +rdf:Alt a :Class; + :comment "A collection of alternatives."@en; + :isDefinedBy rdf:; + :label "Alt"@en; + :subClassOf :Container . + +rdf:Bag a :Class; + :comment "An unordered collection."@en; + :isDefinedBy rdf:; + :label "Bag"@en; + :subClassOf :Container . + +rdf:Property a :Class; + :comment "The concept of a property."; + :isDefinedBy rdf:; + :label "Property"@en; + :subClassOf :Resource . + +rdf:Seq a :Class; + :comment "An ordered collection."@en; + :isDefinedBy rdf:; + :label "Seq"@en; + :subClassOf :Container . + +rdf:Statement a :Class; + :comment "The class of RDF statements."; + :isDefinedBy rdf:; + :label "Statement"@en; + :subClassOf :Resource . + +rdf:object a rdf:Property; + :comment "The object of an RDF statement."; + :domain rdf:Statement; + :isDefinedBy rdf:; + :label "object"@en . + +rdf:predicate a rdf:Property; + :comment "the predicate of an RDF statement."; + :domain rdf:Statement; + :isDefinedBy rdf:; + :label "predicate"@en; + :range rdf:Property . + +rdf:subject a rdf:Property; + :comment "The subject of an RDF statement."; + :domain rdf:Statement; + :isDefinedBy rdf:; + :label "subject"@en; + :range :Resource . + +rdf:value a rdf:Property; + :comment "Identifies the principal value (usually a string) of a property when the property value is a structured resource"; + :domain :Resource; + :isDefinedBy rdf:; + :label "value"@en . + +: :seeAlso . + +:Class a :Class; + :comment "The concept of Class"; + :isDefinedBy :; + :label "Class"@en; + :subClassOf :Resource . + +:Container a :Class; + :comment "This represents the set Containers."; + :isDefinedBy :; + :label "Container"@en; + :subClassOf :Resource . + +:ContainerMembershipProperty a :Class; + :comment "The container membership properties, rdf:1, rdf:2, ..., all of which are sub-properties of 'member'."; + :isDefinedBy :; + :label "ContainerMembershipProperty"@en; + :subClassOf rdf:Property . + +:Literal a :Class; + :comment "This represents the set of atomic values, eg. textual strings."; + :isDefinedBy :; + :label "Literal"@en . + +:Resource a :Class; + :comment "The class resource, everything."; + :isDefinedBy :; + :label "Resource"@en . + +:comment a rdf:Property; + :comment "Use this for descriptions"; + :domain :Resource; + :isDefinedBy :; + :label "comment"@en; + :range :Literal . + +:domain a rdf:Property; + :comment "A domain class for a property type"; + :domain rdf:Property; + :isDefinedBy :; + :label "domain"@en; + :range :Class . + +:isDefinedBy a rdf:Property; + :comment "Indicates the namespace of a resource"; + :domain :Resource; + :isDefinedBy :; + :label "isDefinedBy"@en; + :range :Resource; + :subPropertyOf :seeAlso . + +:label a rdf:Property; + :comment "Provides a human-readable version of a resource name."; + :domain :Resource; + :isDefinedBy :; + :label "label"@en; + :range :Literal . + +:member a rdf:Property; + :comment "a member of a container"; + :domain :Container; + :isDefinedBy :; + :label "member"@en . + +:range a rdf:Property; + :comment "A range class for a property type"; + :domain rdf:Property; + :isDefinedBy :; + :label "range"@en; + :range :Class . + +:seeAlso a rdf:Property; + :comment "A resource that provides information about the subject resource"; + :domain :Resource; + :isDefinedBy :; + :label "seeAlso"@en; + :range :Resource . + +:subClassOf a rdf:Property; + :comment "Indicates membership of a class"; + :domain :Class; + :isDefinedBy :; + :label "subClassOf"@en; + :range :Class . + +:subPropertyOf a rdf:Property; + :comment "Indicates specialization of properties"; + :domain rdf:Property; + :isDefinedBy :; + :label "subPropertyOf"@en; + :range rdf:Property . diff --git a/source/libs/lilv/serd-0.18.2/tests/serd_test.c b/source/libs/lilv/serd-0.18.2/tests/serd_test.c new file mode 100644 index 000000000..259f244a6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/serd_test.c @@ -0,0 +1,630 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include +#include +#include + +#include "serd/serd.h" + +#define USTR(s) ((const uint8_t*)(s)) + +#ifdef _WIN32 +# define INFINITY (DBL_MAX + DBL_MAX) +# define NAN (INFINITY - INFINITY) +#endif + +static int +failure(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stderr, "error: "); + vfprintf(stderr, fmt, args); + va_end(args); + return 1; +} + +static bool +test_strtod(double dbl, double max_delta) +{ + char buf[1024]; + snprintf(buf, sizeof(buf), "%lf", dbl); + + char* endptr = NULL; + const double out = serd_strtod(buf, &endptr); + + const double diff = fabs(out - dbl); + if (diff > max_delta) { + return !failure("Parsed %lf != %lf (delta %lf)\n", dbl, out, diff); + } + return true; +} + +static SerdStatus +count_prefixes(void* handle, const SerdNode* name, const SerdNode* uri) +{ + ++*(int*)handle; + return SERD_SUCCESS; +} + +typedef struct { + int n_statements; + const SerdNode* graph; +} ReaderTest; + +static SerdStatus +test_sink(void* handle, + SerdStatementFlags flags, + const SerdNode* graph, + const SerdNode* subject, + const SerdNode* predicate, + const SerdNode* object, + const SerdNode* object_datatype, + const SerdNode* object_lang) +{ + ReaderTest* rt = (ReaderTest*)handle; + ++rt->n_statements; + rt->graph = graph; + return SERD_SUCCESS; +} + +int +main(void) +{ +#define MAX 1000000 +#define NUM_TESTS 1000 + for (int i = 0; i < NUM_TESTS; ++i) { + double dbl = rand() % MAX; + dbl += (rand() % MAX) / (double)MAX; + + if (!test_strtod(dbl, 1 / (double)MAX)) { + return 1; + } + } + + const double expt_test_nums[] = { + 2.0E18, -5e19, +8e20, 2e+34, -5e-5, 8e0, 9e-0, 2e+0 + }; + + const char* expt_test_strs[] = { + "02e18", "-5e019", "+8e20", "2E+34", "-5E-5", "8E0", "9e-0", " 2e+0" + }; + + for (unsigned i = 0; i < sizeof(expt_test_nums) / sizeof(double); ++i) { + const double num = serd_strtod(expt_test_strs[i], NULL); + const double delta = fabs(num - expt_test_nums[i]); + if (delta > DBL_EPSILON) { + return failure("Parsed `%s' %lf != %lf (delta %lf)\n", + expt_test_strs[i], num, expt_test_nums[i], delta); + } + } + + // Test serd_node_new_decimal + + const double dbl_test_nums[] = { + 0.0, 9.0, 10.0, .01, 2.05, -16.00001, 5.000000005, 0.0000000001, NAN, INFINITY + }; + + const char* dbl_test_strs[] = { + "0.0", "9.0", "10.0", "0.01", "2.05", "-16.00001", "5.00000001", "0.0", NULL, NULL + }; + + for (unsigned i = 0; i < sizeof(dbl_test_nums) / sizeof(double); ++i) { + SerdNode node = serd_node_new_decimal(dbl_test_nums[i], 8); + const bool pass = (node.buf && dbl_test_strs[i]) + ? !strcmp((const char*)node.buf, (const char*)dbl_test_strs[i]) + : ((const char*)node.buf == dbl_test_strs[i]); + if (!pass) { + return failure("Serialised `%s' != %s\n", + node.buf, dbl_test_strs[i]); + } + const size_t len = node.buf ? strlen((const char*)node.buf) : 0; + if (node.n_bytes != len || node.n_chars != len) { + return failure("Length %zu,%zu != %zu\n", + node.n_bytes, node.n_chars, len); + } + serd_node_free(&node); + } + + // Test serd_node_new_integer + + const long int_test_nums[] = { + 0, -0, -23, 23, -12340, 1000, -1000 + }; + + const char* int_test_strs[] = { + "0", "0", "-23", "23", "-12340", "1000", "-1000" + }; + + for (unsigned i = 0; i < sizeof(int_test_nums) / sizeof(double); ++i) { + SerdNode node = serd_node_new_integer(int_test_nums[i]); + if (strcmp((const char*)node.buf, (const char*)int_test_strs[i])) { + return failure("Serialised `%s' != %s\n", + node.buf, int_test_strs[i]); + } + const size_t len = strlen((const char*)node.buf); + if (node.n_bytes != len || node.n_chars != len) { + return failure("Length %zu,%zu != %zu\n", + node.n_bytes, node.n_chars, len); + } + serd_node_free(&node); + } + + // Test serd_node_new_blob + for (size_t size = 0; size < 256; ++size) { + uint8_t* data = (uint8_t*)malloc(size); + for (size_t i = 0; i < size; ++i) { + data[i] = (uint8_t)(rand() % 256); + } + + SerdNode blob = serd_node_new_blob(data, size, size % 5); + + if (blob.n_bytes != blob.n_chars) { + return failure("Blob %zu bytes != %zu chars\n", + blob.n_bytes, blob.n_chars); + } + + size_t out_size; + uint8_t* out = (uint8_t*)serd_base64_decode( + blob.buf, blob.n_bytes, &out_size); + if (out_size != size) { + return failure("Blob size %zu != %zu\n", out_size, size); + } + + for (size_t i = 0; i < size; ++i) { + if (out[i] != data[i]) { + return failure("Corrupt blob at byte %zu\n", i); + } + } + + serd_node_free(&blob); + free(out); + free(data); + } + + // Test serd_strlen + + const uint8_t str[] = { '"', '5', 0xE2, 0x82, 0xAC, '"', '\n', 0 }; + + size_t n_bytes; + SerdNodeFlags flags; + size_t len = serd_strlen(str, &n_bytes, &flags); + if (len != 5 || n_bytes != 7 + || flags != (SERD_HAS_QUOTE|SERD_HAS_NEWLINE)) { + return failure("Bad serd_strlen(%s) len=%zu n_bytes=%zu flags=%u\n", + str, len, n_bytes, flags); + } + len = serd_strlen(str, NULL, &flags); + if (len != 5) { + return failure("Bad serd_strlen(%s) len=%zu flags=%u\n", + str, len, flags); + } + + // Test serd_strerror + + const uint8_t* msg = NULL; + if (strcmp((const char*)(msg = serd_strerror(SERD_SUCCESS)), "Success")) { + return failure("Bad message `%s' for SERD_SUCCESS\n", msg); + } + for (int i = SERD_FAILURE; i <= SERD_ERR_INTERNAL; ++i) { + msg = serd_strerror((SerdStatus)i); + if (!strcmp((const char*)msg, "Success")) { + return failure("Bad message `%s' for (SerdStatus)%d\n", msg, i); + } + } + msg = serd_strerror((SerdStatus)-1); + + // Test serd_uri_to_path + + const uint8_t* uri = (const uint8_t*)"file:///home/user/foo.ttl"; + if (strcmp((const char*)serd_uri_to_path(uri), "/home/user/foo.ttl")) { + return failure("Bad path %s for %s\n", serd_uri_to_path(uri), uri); + } + uri = (const uint8_t*)"file://localhost/home/user/foo.ttl"; + if (strcmp((const char*)serd_uri_to_path(uri), "/home/user/foo.ttl")) { + return failure("Bad path %s for %s\n", serd_uri_to_path(uri), uri); + } + uri = (const uint8_t*)"file:illegal/file/uri"; + if (serd_uri_to_path(uri)) { + return failure("Converted invalid URI `%s' to path `%s'\n", + uri, serd_uri_to_path(uri)); + } + uri = (const uint8_t*)"file:///c:/awful/system"; + if (strcmp((const char*)serd_uri_to_path(uri), "c:/awful/system")) { + return failure("Bad path %s for %s\n", serd_uri_to_path(uri), uri); + } + uri = (const uint8_t*)"file:///c:awful/system"; + if (strcmp((const char*)serd_uri_to_path(uri), "/c:awful/system")) { + return failure("Bad path %s for %s\n", serd_uri_to_path(uri), uri); + } + uri = (const uint8_t*)"file:///0/1"; + if (strcmp((const char*)serd_uri_to_path(uri), "/0/1")) { + return failure("Bad path %s for %s\n", serd_uri_to_path(uri), uri); + } + uri = (const uint8_t*)"C:\\Windows\\Sucks"; + if (strcmp((const char*)serd_uri_to_path(uri), "C:\\Windows\\Sucks")) { + return failure("Bad path %s for %s\n", serd_uri_to_path(uri), uri); + } + uri = (const uint8_t*)"C|/Windows/Sucks"; + if (strcmp((const char*)serd_uri_to_path(uri), "C|/Windows/Sucks")) { + return failure("Bad path %s for %s\n", serd_uri_to_path(uri), uri); + } + + // Test serd_node_new_file_uri and serd_file_uri_parse + SerdURI furi; + const uint8_t* path_str = USTR("C:/My 100%"); + SerdNode file_node = serd_node_new_file_uri(path_str, 0, &furi, true); + uint8_t* hostname = NULL; + uint8_t* out_path = serd_file_uri_parse(file_node.buf, &hostname); + if (strcmp((const char*)file_node.buf, "file:///C:/My%20100%%")) { + return failure("Bad URI %s\n", file_node.buf); + } else if (hostname) { + return failure("hostname `%s' shouldn't exist\n", hostname); + } else if (strcmp((const char*)path_str, (const char*)out_path)) { + return failure("path=>URI=>path failure %s => %s => %s\n", + path_str, file_node.buf, out_path); + } + free(out_path); + serd_node_free(&file_node); + + path_str = USTR("C:\\Pointless Space"); + file_node = serd_node_new_file_uri(path_str, USTR("pwned"), 0, true); + hostname = NULL; + out_path = serd_file_uri_parse(file_node.buf, &hostname); + if (strcmp((const char*)file_node.buf, "file://pwned/C:/Pointless%20Space")) { + return failure("Bad URI %s\n", file_node.buf); + } else if (!hostname || strcmp((const char*)hostname, "pwned")) { + return failure("Bad hostname `%s'\n", hostname); + } else if (strcmp((const char*)out_path, "C:/Pointless Space")) { + return failure("path=>URI=>path failure %s => %s => %s\n", + path_str, file_node.buf, out_path); + } + free(hostname); + free(out_path); + serd_node_free(&file_node); + + path_str = USTR("/foo/bar"); + file_node = serd_node_new_file_uri(path_str, 0, 0, true); + hostname = NULL; + out_path = serd_file_uri_parse(file_node.buf, &hostname); + if (strcmp((const char*)file_node.buf, "file:///foo/bar")) { + return failure("Bad URI %s\n", file_node.buf); + } else if (hostname) { + return failure("hostname `%s' shouldn't exist\n", hostname); + } else if (strcmp((const char*)path_str, (const char*)out_path)) { + return failure("path=>URI=>path failure %s => %s => %s\n", + path_str, file_node.buf, out_path); + } + free(out_path); + serd_node_free(&file_node); + + path_str = USTR("/foo/bar"); + file_node = serd_node_new_file_uri(path_str, USTR("localhost"), 0, true); + out_path = serd_file_uri_parse(file_node.buf, &hostname); + if (strcmp((const char*)file_node.buf, "file://localhost/foo/bar")) { + return failure("Bad URI %s\n", file_node.buf); + } else if (strcmp((const char*)hostname, "localhost")) { + return failure("incorrect hostname `%s'\n", hostname); + } else if (strcmp((const char*)path_str, (const char*)out_path)) { + return failure("path=>URI=>path failure %s => %s => %s\n", + path_str, file_node.buf, out_path); + } + free(hostname); + free(out_path); + serd_node_free(&file_node); + + path_str = USTR("a/relative path"); + file_node = serd_node_new_file_uri(path_str, 0, 0, false); + out_path = serd_file_uri_parse(file_node.buf, &hostname); + if (strcmp((const char*)file_node.buf, "a/relative path")) { + return failure("Bad URI %s\n", file_node.buf); + } else if (hostname) { + return failure("hostname `%s' shouldn't exist\n", hostname); + } else if (strcmp((const char*)path_str, (const char*)out_path)) { + return failure("path=>URI=>path failure %s => %s => %s\n", + path_str, file_node.buf, out_path); + } + free(hostname); + free(out_path); + serd_node_free(&file_node); + + if (serd_file_uri_parse(USTR("file://invalid"), NULL)) { + return failure("successfully parsed bogus URI \n"); + } + + out_path = serd_file_uri_parse(USTR("file://host/foo/%XYbar"), NULL); + if (strcmp((const char*)out_path, "/foo/bar")) { + return failure("bad tolerance of junk escape: `%s'\n", out_path); + } + free(out_path); + out_path = serd_file_uri_parse(USTR("file://host/foo/%0Abar"), NULL); + if (strcmp((const char*)out_path, "/foo/bar")) { + return failure("bad tolerance of junk escape: `%s'\n", out_path); + } + free(out_path); + + // Test serd_node_equals + + const uint8_t replacement_char_str[] = { 0xEF, 0xBF, 0xBD, 0 }; + SerdNode lhs = serd_node_from_string(SERD_LITERAL, replacement_char_str); + SerdNode rhs = serd_node_from_string(SERD_LITERAL, USTR("123")); + if (serd_node_equals(&lhs, &rhs)) { + return failure("%s == %s\n", lhs.buf, rhs.buf); + } + + SerdNode qnode = serd_node_from_string(SERD_CURIE, USTR("foo:bar")); + if (serd_node_equals(&lhs, &qnode)) { + return failure("%s == %s\n", lhs.buf, qnode.buf); + } + + if (!serd_node_equals(&lhs, &lhs)) { + return failure("%s != %s\n", lhs.buf, lhs.buf); + } + + // Test serd_node_from_string + + SerdNode node = serd_node_from_string(SERD_LITERAL, (const uint8_t*)"hello\""); + if (node.n_bytes != 6 || node.n_chars != 6 || node.flags != SERD_HAS_QUOTE + || strcmp((const char*)node.buf, "hello\"")) { + return failure("Bad node %s %zu %zu %d %d\n", + node.buf, node.n_bytes, node.n_chars, node.flags, node.type); + } + + node = serd_node_from_string(SERD_URI, NULL); + if (!serd_node_equals(&node, &SERD_NODE_NULL)) { + return failure("Creating node from NULL string failed\n"); + } + + // Test serd_node_new_uri_from_string + + SerdURI base_uri; + SerdNode base = serd_node_new_uri_from_string(USTR("http://example.org/"), + NULL, &base_uri); + SerdNode nil = serd_node_new_uri_from_string(NULL, &base_uri, NULL); + if (nil.type != SERD_URI || strcmp((const char*)nil.buf, (const char*)base.buf)) { + return failure("URI %s != base %s\n", nil.buf, base.buf); + } + serd_node_free(&base); + serd_node_free(&nil); + + // Test SerdEnv + + SerdNode u = serd_node_from_string(SERD_URI, USTR("http://example.org/foo")); + SerdNode b = serd_node_from_string(SERD_CURIE, USTR("invalid")); + SerdNode c = serd_node_from_string(SERD_CURIE, USTR("eg.2:b")); + SerdEnv* env = serd_env_new(NULL); + serd_env_set_prefix_from_strings(env, USTR("eg.2"), USTR("http://example.org/")); + + if (!serd_env_set_base_uri(env, &node)) { + return failure("Set base URI to %s\n", node.buf); + } + + SerdChunk prefix, suffix; + if (!serd_env_expand(env, &b, &prefix, &suffix)) { + return failure("Expanded invalid curie %s\n", b.buf); + } + + SerdNode xnode = serd_env_expand_node(env, &node); + if (!serd_node_equals(&xnode, &SERD_NODE_NULL)) { + return failure("Expanded %s to %s\n", c.buf, xnode.buf); + } + + SerdNode xu = serd_env_expand_node(env, &u); + if (strcmp((const char*)xu.buf, "http://example.org/foo")) { + return failure("Expanded %s to %s\n", c.buf, xu.buf); + } + serd_node_free(&xu); + + SerdNode badpre = serd_node_from_string(SERD_CURIE, USTR("hm:what")); + SerdNode xbadpre = serd_env_expand_node(env, &badpre); + if (!serd_node_equals(&xbadpre, &SERD_NODE_NULL)) { + return failure("Expanded invalid curie %s\n", badpre.buf); + } + + SerdNode xc = serd_env_expand_node(env, &c); + if (strcmp((const char*)xc.buf, "http://example.org/b")) { + return failure("Expanded %s to %s\n", c.buf, xc.buf); + } + serd_node_free(&xc); + + if (!serd_env_set_prefix(env, &SERD_NODE_NULL, &SERD_NODE_NULL)) { + return failure("Set NULL prefix\n"); + } + + const SerdNode lit = serd_node_from_string(SERD_LITERAL, USTR("hello")); + if (!serd_env_set_prefix(env, &b, &lit)) { + return failure("Set prefix to literal\n"); + } + + int n_prefixes = 0; + serd_env_set_prefix_from_strings(env, USTR("eg.2"), USTR("http://example.org/")); + serd_env_foreach(env, count_prefixes, &n_prefixes); + if (n_prefixes != 1) { + return failure("Bad prefix count %d\n", n_prefixes); + } + + SerdNode shorter_uri = serd_node_from_string(SERD_URI, USTR("urn:foo")); + SerdNode prefix_name; + if (serd_env_qualify(env, &shorter_uri, &prefix_name, &suffix)) { + return failure("Qualified %s\n", shorter_uri.buf); + } + + // Test SerdReader and SerdWriter + + const char* path = "serd_test.ttl"; + FILE* fd = fopen(path, "w"); + if (!fd) { + return failure("Failed to open file %s\n", path); + } + + SerdWriter* writer = serd_writer_new( + SERD_TURTLE, (SerdStyle)0, env, NULL, serd_file_sink, fd); + if (!writer) { + return failure("Failed to create writer\n"); + } + + serd_writer_chop_blank_prefix(writer, USTR("tmp")); + serd_writer_chop_blank_prefix(writer, NULL); + + if (!serd_writer_set_base_uri(writer, &lit)) { + return failure("Set base URI to %s\n", lit.buf); + } + + if (!serd_writer_set_prefix(writer, &lit, &lit)) { + return failure("Set prefix %s to %s\n", lit.buf, lit.buf); + } + + if (!serd_writer_end_anon(writer, NULL)) { + return failure("Ended non-existent anonymous node\n"); + } + + if (serd_writer_get_env(writer) != env) { + return failure("Writer has incorrect env\n"); + } + + uint8_t buf[] = { 0x80, 0, 0, 0, 0 }; + SerdNode s = serd_node_from_string(SERD_URI, USTR("")); + SerdNode p = serd_node_from_string(SERD_URI, USTR("http://example.org/pred")); + SerdNode o = serd_node_from_string(SERD_LITERAL, buf); + + // Write 3 invalid statements (should write nothing) + const SerdNode* junk[][5] = { { &s, &p, NULL, NULL, NULL }, + { &s, NULL, &o, NULL, NULL }, + { NULL, &p, &o, NULL, NULL }, + { &s, &p, &SERD_NODE_NULL, NULL, NULL }, + { &s, &SERD_NODE_NULL, &o, NULL, NULL }, + { &SERD_NODE_NULL, &p, &o, NULL, NULL }, + { &s, &o, &o, NULL, NULL }, + { &o, &p, &o, NULL, NULL }, + { NULL, NULL, NULL, NULL, NULL } }; + for (unsigned i = 0; i < sizeof(junk) / (sizeof(SerdNode*) * 5); ++i) { + if (!serd_writer_write_statement( + writer, 0, NULL, + junk[i][0], junk[i][1], junk[i][2], junk[i][3], junk[i][4])) { + return failure("Successfully wrote junk statement %d\n", i); + } + } + + const SerdNode t = serd_node_from_string(SERD_URI, USTR("urn:Type")); + const SerdNode l = serd_node_from_string(SERD_LITERAL, USTR("en")); + const SerdNode* good[][5] = { { &s, &p, &o, NULL, NULL }, + { &s, &p, &o, &SERD_NODE_NULL, &SERD_NODE_NULL }, + { &s, &p, &o, &t, NULL }, + { &s, &p, &o, NULL, &l }, + { &s, &p, &o, &t, &l }, + { &s, &p, &o, &t, &SERD_NODE_NULL }, + { &s, &p, &o, &SERD_NODE_NULL, &l }, + { &s, &p, &o, NULL, &SERD_NODE_NULL }, + { &s, &p, &o, &SERD_NODE_NULL, NULL }, + { &s, &p, &o, &SERD_NODE_NULL, NULL } }; + for (unsigned i = 0; i < sizeof(good) / (sizeof(SerdNode*) * 5); ++i) { + if (serd_writer_write_statement( + writer, 0, NULL, + good[i][0], good[i][1], good[i][2], good[i][3], good[i][4])) { + return failure("Failed to write good statement %d\n", i); + } + } + + // Write 1 statement with bad UTF-8 (should be replaced) + if (serd_writer_write_statement(writer, 0, NULL, + &s, &p, &o, NULL, NULL)) { + return failure("Failed to write junk UTF-8\n"); + } + + // Write 1 valid statement + o = serd_node_from_string(SERD_LITERAL, USTR("hello")); + if (serd_writer_write_statement(writer, 0, NULL, + &s, &p, &o, NULL, NULL)) { + return failure("Failed to write valid statement\n"); + } + + serd_writer_free(writer); + + // Test chunk sink + SerdChunk chunk = { NULL, 0 }; + writer = serd_writer_new( + SERD_TURTLE, (SerdStyle)0, env, NULL, serd_chunk_sink, &chunk); + + o = serd_node_from_string(SERD_URI, USTR("http://example.org/base")); + if (serd_writer_set_base_uri(writer, &o)) { + return failure("Failed to write to chunk sink\n"); + } + + serd_writer_free(writer); + uint8_t* out = serd_chunk_sink_finish(&chunk); + + if (strcmp((const char*)out, "@base .\n")) { + return failure("Incorrect chunk output:\n%s\n", chunk.buf); + } + + free(out); + + // Rewind and test reader + fseek(fd, 0, SEEK_SET); + + ReaderTest* rt = (ReaderTest*)malloc(sizeof(ReaderTest)); + rt->n_statements = 0; + rt->graph = NULL; + + SerdReader* reader = serd_reader_new( + SERD_TURTLE, rt, free, + NULL, NULL, test_sink, NULL); + if (!reader) { + return failure("Failed to create reader\n"); + } + if (serd_reader_get_handle(reader) != rt) { + return failure("Corrupt reader handle\n"); + } + + SerdNode g = serd_node_from_string(SERD_URI, USTR("http://example.org/")); + serd_reader_set_default_graph(reader, &g); + serd_reader_add_blank_prefix(reader, USTR("tmp")); + serd_reader_add_blank_prefix(reader, NULL); + + if (!serd_reader_read_file(reader, USTR("http://notafile"))) { + return failure("Apparently read an http URI\n"); + } + if (!serd_reader_read_file(reader, USTR("file:///better/not/exist"))) { + return failure("Apprently read a non-existent file\n"); + } + SerdStatus st = serd_reader_read_file(reader, USTR(path)); + if (st) { + return failure("Error reading file (%s)\n", serd_strerror(st)); + } + + if (rt->n_statements != 12) { + return failure("Bad statement count %d\n", rt->n_statements); + } else if (!rt->graph || !rt->graph->buf || + strcmp((const char*)rt->graph->buf, "http://example.org/")) { + return failure("Bad graph %p\n", rt->graph); + } + + if (!serd_reader_read_string(reader, USTR("This isn't Turtle at all."))) { + return failure("Parsed invalid string successfully.\n"); + } + + serd_reader_free(reader); + fclose(fd); + + serd_env_free(env); + + printf("Success\n"); + return 0; +} diff --git a/source/libs/lilv/serd-0.18.2/tests/test-00.out b/source/libs/lilv/serd-0.18.2/tests/test-00.out new file mode 100644 index 000000000..7f8b717e2 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-00.out @@ -0,0 +1 @@ +_:genid1 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-00.ttl b/source/libs/lilv/serd-0.18.2/tests/test-00.ttl new file mode 100644 index 000000000..78da35e60 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-00.ttl @@ -0,0 +1,2 @@ +@prefix : <#> . +[] :x :y . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-01.out b/source/libs/lilv/serd-0.18.2/tests/test-01.out new file mode 100644 index 000000000..5ccb5bd20 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-01.out @@ -0,0 +1,3 @@ + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-01.ttl b/source/libs/lilv/serd-0.18.2/tests/test-01.ttl new file mode 100644 index 000000000..9070d2c41 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-01.ttl @@ -0,0 +1,7 @@ +# Test @prefix and qnames +@prefix : . +@prefix a: . +@prefix b: . +:a :b :c . +a:a a:b a:c . +:a a:a b:a . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-02.out b/source/libs/lilv/serd-0.18.2/tests/test-02.out new file mode 100644 index 000000000..99732ab37 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-02.out @@ -0,0 +1,3 @@ + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-02.ttl b/source/libs/lilv/serd-0.18.2/tests/test-02.ttl new file mode 100644 index 000000000..a623f3c17 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-02.ttl @@ -0,0 +1,5 @@ +# Test , operator +@prefix : . +:a :b :c, + :d, + :e . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-03.out b/source/libs/lilv/serd-0.18.2/tests/test-03.out new file mode 100644 index 000000000..d6ce9e8fe --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-03.out @@ -0,0 +1,3 @@ + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-03.ttl b/source/libs/lilv/serd-0.18.2/tests/test-03.ttl new file mode 100644 index 000000000..9179fa508 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-03.ttl @@ -0,0 +1,5 @@ +# Test ; operator +@prefix : . +:a :b :c ; + :d :e ; + :f :g . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-04.out b/source/libs/lilv/serd-0.18.2/tests/test-04.out new file mode 100644 index 000000000..414e4b84b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-04.out @@ -0,0 +1,2 @@ +_:genid1 . + _:genid2 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-04.ttl b/source/libs/lilv/serd-0.18.2/tests/test-04.ttl new file mode 100644 index 000000000..c51814793 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-04.ttl @@ -0,0 +1,4 @@ +# Test empty [] operator; not allowed as predicate +@prefix : . +[] :a :b . +:c :d [] . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-05.out b/source/libs/lilv/serd-0.18.2/tests/test-05.out new file mode 100644 index 000000000..bf904178c --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-05.out @@ -0,0 +1,4 @@ +_:genid1 . +_:genid1 . + _:genid2 . +_:genid2 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-05.ttl b/source/libs/lilv/serd-0.18.2/tests/test-05.ttl new file mode 100644 index 000000000..adcbcabd0 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-05.ttl @@ -0,0 +1,4 @@ +# Test non empty [] operator; not allowed as predicate +@prefix : . +[ :a :b ] :c :d . +:e :f [ :g :h ] . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-06.out b/source/libs/lilv/serd-0.18.2/tests/test-06.out new file mode 100644 index 000000000..49961ea62 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-06.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-06.ttl b/source/libs/lilv/serd-0.18.2/tests/test-06.ttl new file mode 100644 index 000000000..9c1005cc9 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-06.ttl @@ -0,0 +1,3 @@ +# 'a' only allowed as a predicate +@prefix : . +:a a :b . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-07.out b/source/libs/lilv/serd-0.18.2/tests/test-07.out new file mode 100644 index 000000000..e17cc7be0 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-07.out @@ -0,0 +1,5 @@ + _:genid1 . +_:genid1 "apple" . +_:genid1 _:genid2 . +_:genid2 "banana" . +_:genid2 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-07.ttl b/source/libs/lilv/serd-0.18.2/tests/test-07.ttl new file mode 100644 index 000000000..84559403b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-07.ttl @@ -0,0 +1,3 @@ +@prefix : . +:a :b ( "apple" "banana" ) . + diff --git a/source/libs/lilv/serd-0.18.2/tests/test-08.out b/source/libs/lilv/serd-0.18.2/tests/test-08.out new file mode 100644 index 000000000..a77939cdd --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-08.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-08.ttl b/source/libs/lilv/serd-0.18.2/tests/test-08.ttl new file mode 100644 index 000000000..adce0a20f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-08.ttl @@ -0,0 +1,3 @@ +@prefix : . +:a :b ( ) . + diff --git a/source/libs/lilv/serd-0.18.2/tests/test-09.out b/source/libs/lilv/serd-0.18.2/tests/test-09.out new file mode 100644 index 000000000..5fdb90991 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-09.out @@ -0,0 +1,4 @@ +_:hasParent . +_:genid1 . +_:genid1 _:hasParent . +_:genid1 "2"^^ . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-09.ttl b/source/libs/lilv/serd-0.18.2/tests/test-09.ttl new file mode 100644 index 000000000..0afe1b0ae --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-09.ttl @@ -0,0 +1,10 @@ +# Test integer datatyped literals using an OWL cardinality constraint +@prefix owl: . + +# based on examples in the OWL Reference + +_:hasParent a owl:ObjectProperty . + +[] a owl:Restriction ; + owl:onProperty _:hasParent ; + owl:maxCardinality 2 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-10.out b/source/libs/lilv/serd-0.18.2/tests/test-10.out new file mode 100644 index 000000000..ff88aa6f4 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-10.out @@ -0,0 +1,5 @@ + "000000"^^ . + "0"^^ . + "000001"^^ . + "2"^^ . + "4"^^ . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-10.ttl b/source/libs/lilv/serd-0.18.2/tests/test-10.ttl new file mode 100644 index 000000000..5d36360ea --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-10.ttl @@ -0,0 +1,5 @@ + 000000 . + 0 . + 000001 . + 2 . + 4 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-11.out b/source/libs/lilv/serd-0.18.2/tests/test-11.out new file mode 100644 index 000000000..f936a5b66 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-11.out @@ -0,0 +1,4 @@ + "a" . + "b" . + "c" . + "d" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-11.ttl b/source/libs/lilv/serd-0.18.2/tests/test-11.ttl new file mode 100644 index 000000000..3de1a43fa --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-11.ttl @@ -0,0 +1,10 @@ +# Tests for - and _ in names, qnames +@prefix ex1: . +@prefix ex-2: . +@prefix ex3_: . +@prefix ex4-: . + +ex1:foo-bar ex1:foo_bar "a" . +ex-2:foo-bar ex-2:foo_bar "b" . +ex3_:foo-bar ex3_:foo_bar "c" . +ex4-:foo-bar ex4-:foo_bar "d" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-12.out b/source/libs/lilv/serd-0.18.2/tests/test-12.out new file mode 100644 index 000000000..67404a59a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-12.out @@ -0,0 +1,4 @@ + "1" . + "2" . + "def" . + "678" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-12.ttl b/source/libs/lilv/serd-0.18.2/tests/test-12.ttl new file mode 100644 index 000000000..1fed9f5e0 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-12.ttl @@ -0,0 +1,9 @@ +# Tests for rdf:_ and other qnames starting with _ +@prefix rdf: . +@prefix ex: . +@prefix : . + +ex:foo rdf:_1 "1" . +ex:foo rdf:_2 "2" . +ex:foo :_abc "def" . +ex:foo :_345 "678" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-13.out b/source/libs/lilv/serd-0.18.2/tests/test-13.out new file mode 100644 index 000000000..9feb5ad00 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-13.out @@ -0,0 +1,2 @@ +_:genid1 _:genid2 . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-13.ttl b/source/libs/lilv/serd-0.18.2/tests/test-13.ttl new file mode 100644 index 000000000..a8be95beb --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-13.ttl @@ -0,0 +1,7 @@ +# Test for : allowed +@prefix : . + +[] : [] . + +: : : . + diff --git a/source/libs/lilv/serd-0.18.2/tests/test-14.out b/source/libs/lilv/serd-0.18.2/tests/test-14.out new file mode 100644 index 000000000..791b3a7ac --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-14.out @@ -0,0 +1,10000 @@ + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-14.ttl b/source/libs/lilv/serd-0.18.2/tests/test-14.ttl new file mode 100644 index 000000000..ad9dbde88 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-14.ttl @@ -0,0 +1,10002 @@ +# 10000 triples, more than the default Bison stack size +@prefix : . +:a1 :a1 :a1. +:a2 :a2 :a2. +:a3 :a3 :a3. +:a4 :a4 :a4. +:a5 :a5 :a5. +:a6 :a6 :a6. +:a7 :a7 :a7. +:a8 :a8 :a8. +:a9 :a9 :a9. +:a10 :a10 :a10. +:a11 :a11 :a11. +:a12 :a12 :a12. +:a13 :a13 :a13. +:a14 :a14 :a14. +:a15 :a15 :a15. +:a16 :a16 :a16. +:a17 :a17 :a17. +:a18 :a18 :a18. +:a19 :a19 :a19. +:a20 :a20 :a20. +:a21 :a21 :a21. +:a22 :a22 :a22. +:a23 :a23 :a23. +:a24 :a24 :a24. +:a25 :a25 :a25. +:a26 :a26 :a26. +:a27 :a27 :a27. +:a28 :a28 :a28. +:a29 :a29 :a29. +:a30 :a30 :a30. +:a31 :a31 :a31. +:a32 :a32 :a32. +:a33 :a33 :a33. +:a34 :a34 :a34. +:a35 :a35 :a35. +:a36 :a36 :a36. +:a37 :a37 :a37. +:a38 :a38 :a38. +:a39 :a39 :a39. +:a40 :a40 :a40. +:a41 :a41 :a41. +:a42 :a42 :a42. +:a43 :a43 :a43. +:a44 :a44 :a44. +:a45 :a45 :a45. +:a46 :a46 :a46. +:a47 :a47 :a47. +:a48 :a48 :a48. +:a49 :a49 :a49. +:a50 :a50 :a50. +:a51 :a51 :a51. +:a52 :a52 :a52. +:a53 :a53 :a53. +:a54 :a54 :a54. +:a55 :a55 :a55. +:a56 :a56 :a56. +:a57 :a57 :a57. +:a58 :a58 :a58. +:a59 :a59 :a59. +:a60 :a60 :a60. +:a61 :a61 :a61. +:a62 :a62 :a62. +:a63 :a63 :a63. +:a64 :a64 :a64. +:a65 :a65 :a65. +:a66 :a66 :a66. +:a67 :a67 :a67. +:a68 :a68 :a68. +:a69 :a69 :a69. +:a70 :a70 :a70. +:a71 :a71 :a71. +:a72 :a72 :a72. +:a73 :a73 :a73. +:a74 :a74 :a74. +:a75 :a75 :a75. +:a76 :a76 :a76. +:a77 :a77 :a77. +:a78 :a78 :a78. +:a79 :a79 :a79. +:a80 :a80 :a80. +:a81 :a81 :a81. +:a82 :a82 :a82. +:a83 :a83 :a83. +:a84 :a84 :a84. +:a85 :a85 :a85. +:a86 :a86 :a86. +:a87 :a87 :a87. +:a88 :a88 :a88. +:a89 :a89 :a89. +:a90 :a90 :a90. +:a91 :a91 :a91. +:a92 :a92 :a92. +:a93 :a93 :a93. +:a94 :a94 :a94. +:a95 :a95 :a95. +:a96 :a96 :a96. +:a97 :a97 :a97. +:a98 :a98 :a98. +:a99 :a99 :a99. +:a100 :a100 :a100. +:a101 :a101 :a101. +:a102 :a102 :a102. +:a103 :a103 :a103. +:a104 :a104 :a104. +:a105 :a105 :a105. +:a106 :a106 :a106. +:a107 :a107 :a107. +:a108 :a108 :a108. +:a109 :a109 :a109. +:a110 :a110 :a110. +:a111 :a111 :a111. +:a112 :a112 :a112. +:a113 :a113 :a113. +:a114 :a114 :a114. +:a115 :a115 :a115. +:a116 :a116 :a116. +:a117 :a117 :a117. +:a118 :a118 :a118. +:a119 :a119 :a119. +:a120 :a120 :a120. +:a121 :a121 :a121. +:a122 :a122 :a122. +:a123 :a123 :a123. +:a124 :a124 :a124. +:a125 :a125 :a125. +:a126 :a126 :a126. +:a127 :a127 :a127. +:a128 :a128 :a128. +:a129 :a129 :a129. +:a130 :a130 :a130. +:a131 :a131 :a131. +:a132 :a132 :a132. +:a133 :a133 :a133. +:a134 :a134 :a134. +:a135 :a135 :a135. +:a136 :a136 :a136. +:a137 :a137 :a137. +:a138 :a138 :a138. +:a139 :a139 :a139. +:a140 :a140 :a140. +:a141 :a141 :a141. +:a142 :a142 :a142. +:a143 :a143 :a143. +:a144 :a144 :a144. +:a145 :a145 :a145. +:a146 :a146 :a146. +:a147 :a147 :a147. +:a148 :a148 :a148. +:a149 :a149 :a149. +:a150 :a150 :a150. +:a151 :a151 :a151. +:a152 :a152 :a152. +:a153 :a153 :a153. +:a154 :a154 :a154. +:a155 :a155 :a155. +:a156 :a156 :a156. +:a157 :a157 :a157. +:a158 :a158 :a158. +:a159 :a159 :a159. +:a160 :a160 :a160. +:a161 :a161 :a161. +:a162 :a162 :a162. +:a163 :a163 :a163. +:a164 :a164 :a164. +:a165 :a165 :a165. +:a166 :a166 :a166. +:a167 :a167 :a167. +:a168 :a168 :a168. +:a169 :a169 :a169. +:a170 :a170 :a170. +:a171 :a171 :a171. +:a172 :a172 :a172. +:a173 :a173 :a173. +:a174 :a174 :a174. +:a175 :a175 :a175. +:a176 :a176 :a176. +:a177 :a177 :a177. +:a178 :a178 :a178. +:a179 :a179 :a179. +:a180 :a180 :a180. +:a181 :a181 :a181. +:a182 :a182 :a182. +:a183 :a183 :a183. +:a184 :a184 :a184. +:a185 :a185 :a185. +:a186 :a186 :a186. +:a187 :a187 :a187. +:a188 :a188 :a188. +:a189 :a189 :a189. +:a190 :a190 :a190. +:a191 :a191 :a191. +:a192 :a192 :a192. +:a193 :a193 :a193. +:a194 :a194 :a194. +:a195 :a195 :a195. +:a196 :a196 :a196. +:a197 :a197 :a197. +:a198 :a198 :a198. +:a199 :a199 :a199. +:a200 :a200 :a200. +:a201 :a201 :a201. +:a202 :a202 :a202. +:a203 :a203 :a203. +:a204 :a204 :a204. +:a205 :a205 :a205. +:a206 :a206 :a206. +:a207 :a207 :a207. +:a208 :a208 :a208. +:a209 :a209 :a209. +:a210 :a210 :a210. +:a211 :a211 :a211. +:a212 :a212 :a212. +:a213 :a213 :a213. +:a214 :a214 :a214. +:a215 :a215 :a215. +:a216 :a216 :a216. +:a217 :a217 :a217. +:a218 :a218 :a218. +:a219 :a219 :a219. +:a220 :a220 :a220. +:a221 :a221 :a221. +:a222 :a222 :a222. +:a223 :a223 :a223. +:a224 :a224 :a224. +:a225 :a225 :a225. +:a226 :a226 :a226. +:a227 :a227 :a227. +:a228 :a228 :a228. +:a229 :a229 :a229. +:a230 :a230 :a230. +:a231 :a231 :a231. +:a232 :a232 :a232. +:a233 :a233 :a233. +:a234 :a234 :a234. +:a235 :a235 :a235. +:a236 :a236 :a236. +:a237 :a237 :a237. +:a238 :a238 :a238. +:a239 :a239 :a239. +:a240 :a240 :a240. +:a241 :a241 :a241. +:a242 :a242 :a242. +:a243 :a243 :a243. +:a244 :a244 :a244. +:a245 :a245 :a245. +:a246 :a246 :a246. +:a247 :a247 :a247. +:a248 :a248 :a248. +:a249 :a249 :a249. +:a250 :a250 :a250. +:a251 :a251 :a251. +:a252 :a252 :a252. +:a253 :a253 :a253. +:a254 :a254 :a254. +:a255 :a255 :a255. +:a256 :a256 :a256. +:a257 :a257 :a257. +:a258 :a258 :a258. +:a259 :a259 :a259. +:a260 :a260 :a260. +:a261 :a261 :a261. +:a262 :a262 :a262. +:a263 :a263 :a263. +:a264 :a264 :a264. +:a265 :a265 :a265. +:a266 :a266 :a266. +:a267 :a267 :a267. +:a268 :a268 :a268. +:a269 :a269 :a269. +:a270 :a270 :a270. +:a271 :a271 :a271. +:a272 :a272 :a272. +:a273 :a273 :a273. +:a274 :a274 :a274. +:a275 :a275 :a275. +:a276 :a276 :a276. +:a277 :a277 :a277. +:a278 :a278 :a278. +:a279 :a279 :a279. +:a280 :a280 :a280. +:a281 :a281 :a281. +:a282 :a282 :a282. +:a283 :a283 :a283. +:a284 :a284 :a284. +:a285 :a285 :a285. +:a286 :a286 :a286. +:a287 :a287 :a287. +:a288 :a288 :a288. +:a289 :a289 :a289. +:a290 :a290 :a290. +:a291 :a291 :a291. +:a292 :a292 :a292. +:a293 :a293 :a293. +:a294 :a294 :a294. +:a295 :a295 :a295. +:a296 :a296 :a296. +:a297 :a297 :a297. +:a298 :a298 :a298. +:a299 :a299 :a299. +:a300 :a300 :a300. +:a301 :a301 :a301. +:a302 :a302 :a302. +:a303 :a303 :a303. +:a304 :a304 :a304. +:a305 :a305 :a305. +:a306 :a306 :a306. +:a307 :a307 :a307. +:a308 :a308 :a308. +:a309 :a309 :a309. +:a310 :a310 :a310. +:a311 :a311 :a311. +:a312 :a312 :a312. +:a313 :a313 :a313. +:a314 :a314 :a314. +:a315 :a315 :a315. +:a316 :a316 :a316. +:a317 :a317 :a317. +:a318 :a318 :a318. +:a319 :a319 :a319. +:a320 :a320 :a320. +:a321 :a321 :a321. +:a322 :a322 :a322. +:a323 :a323 :a323. +:a324 :a324 :a324. +:a325 :a325 :a325. +:a326 :a326 :a326. +:a327 :a327 :a327. +:a328 :a328 :a328. +:a329 :a329 :a329. +:a330 :a330 :a330. +:a331 :a331 :a331. +:a332 :a332 :a332. +:a333 :a333 :a333. +:a334 :a334 :a334. +:a335 :a335 :a335. +:a336 :a336 :a336. +:a337 :a337 :a337. +:a338 :a338 :a338. +:a339 :a339 :a339. +:a340 :a340 :a340. +:a341 :a341 :a341. +:a342 :a342 :a342. +:a343 :a343 :a343. +:a344 :a344 :a344. +:a345 :a345 :a345. +:a346 :a346 :a346. +:a347 :a347 :a347. +:a348 :a348 :a348. +:a349 :a349 :a349. +:a350 :a350 :a350. +:a351 :a351 :a351. +:a352 :a352 :a352. +:a353 :a353 :a353. +:a354 :a354 :a354. +:a355 :a355 :a355. +:a356 :a356 :a356. +:a357 :a357 :a357. +:a358 :a358 :a358. +:a359 :a359 :a359. +:a360 :a360 :a360. +:a361 :a361 :a361. +:a362 :a362 :a362. +:a363 :a363 :a363. +:a364 :a364 :a364. +:a365 :a365 :a365. +:a366 :a366 :a366. +:a367 :a367 :a367. +:a368 :a368 :a368. +:a369 :a369 :a369. +:a370 :a370 :a370. +:a371 :a371 :a371. +:a372 :a372 :a372. +:a373 :a373 :a373. +:a374 :a374 :a374. +:a375 :a375 :a375. +:a376 :a376 :a376. +:a377 :a377 :a377. +:a378 :a378 :a378. +:a379 :a379 :a379. +:a380 :a380 :a380. +:a381 :a381 :a381. +:a382 :a382 :a382. +:a383 :a383 :a383. +:a384 :a384 :a384. +:a385 :a385 :a385. +:a386 :a386 :a386. +:a387 :a387 :a387. +:a388 :a388 :a388. +:a389 :a389 :a389. +:a390 :a390 :a390. +:a391 :a391 :a391. +:a392 :a392 :a392. +:a393 :a393 :a393. +:a394 :a394 :a394. +:a395 :a395 :a395. +:a396 :a396 :a396. +:a397 :a397 :a397. +:a398 :a398 :a398. +:a399 :a399 :a399. +:a400 :a400 :a400. +:a401 :a401 :a401. +:a402 :a402 :a402. +:a403 :a403 :a403. +:a404 :a404 :a404. +:a405 :a405 :a405. +:a406 :a406 :a406. +:a407 :a407 :a407. +:a408 :a408 :a408. +:a409 :a409 :a409. +:a410 :a410 :a410. +:a411 :a411 :a411. +:a412 :a412 :a412. +:a413 :a413 :a413. +:a414 :a414 :a414. +:a415 :a415 :a415. +:a416 :a416 :a416. +:a417 :a417 :a417. +:a418 :a418 :a418. +:a419 :a419 :a419. +:a420 :a420 :a420. +:a421 :a421 :a421. +:a422 :a422 :a422. +:a423 :a423 :a423. +:a424 :a424 :a424. +:a425 :a425 :a425. +:a426 :a426 :a426. +:a427 :a427 :a427. +:a428 :a428 :a428. +:a429 :a429 :a429. +:a430 :a430 :a430. +:a431 :a431 :a431. +:a432 :a432 :a432. +:a433 :a433 :a433. +:a434 :a434 :a434. +:a435 :a435 :a435. +:a436 :a436 :a436. +:a437 :a437 :a437. +:a438 :a438 :a438. +:a439 :a439 :a439. +:a440 :a440 :a440. +:a441 :a441 :a441. +:a442 :a442 :a442. +:a443 :a443 :a443. +:a444 :a444 :a444. +:a445 :a445 :a445. +:a446 :a446 :a446. +:a447 :a447 :a447. +:a448 :a448 :a448. +:a449 :a449 :a449. +:a450 :a450 :a450. +:a451 :a451 :a451. +:a452 :a452 :a452. +:a453 :a453 :a453. +:a454 :a454 :a454. +:a455 :a455 :a455. +:a456 :a456 :a456. +:a457 :a457 :a457. +:a458 :a458 :a458. +:a459 :a459 :a459. +:a460 :a460 :a460. +:a461 :a461 :a461. +:a462 :a462 :a462. +:a463 :a463 :a463. +:a464 :a464 :a464. +:a465 :a465 :a465. +:a466 :a466 :a466. +:a467 :a467 :a467. +:a468 :a468 :a468. +:a469 :a469 :a469. +:a470 :a470 :a470. +:a471 :a471 :a471. +:a472 :a472 :a472. +:a473 :a473 :a473. +:a474 :a474 :a474. +:a475 :a475 :a475. +:a476 :a476 :a476. +:a477 :a477 :a477. +:a478 :a478 :a478. +:a479 :a479 :a479. +:a480 :a480 :a480. +:a481 :a481 :a481. +:a482 :a482 :a482. +:a483 :a483 :a483. +:a484 :a484 :a484. +:a485 :a485 :a485. +:a486 :a486 :a486. +:a487 :a487 :a487. +:a488 :a488 :a488. +:a489 :a489 :a489. +:a490 :a490 :a490. +:a491 :a491 :a491. +:a492 :a492 :a492. +:a493 :a493 :a493. +:a494 :a494 :a494. +:a495 :a495 :a495. +:a496 :a496 :a496. +:a497 :a497 :a497. +:a498 :a498 :a498. +:a499 :a499 :a499. +:a500 :a500 :a500. +:a501 :a501 :a501. +:a502 :a502 :a502. +:a503 :a503 :a503. +:a504 :a504 :a504. +:a505 :a505 :a505. +:a506 :a506 :a506. +:a507 :a507 :a507. +:a508 :a508 :a508. +:a509 :a509 :a509. +:a510 :a510 :a510. +:a511 :a511 :a511. +:a512 :a512 :a512. +:a513 :a513 :a513. +:a514 :a514 :a514. +:a515 :a515 :a515. +:a516 :a516 :a516. +:a517 :a517 :a517. +:a518 :a518 :a518. +:a519 :a519 :a519. +:a520 :a520 :a520. +:a521 :a521 :a521. +:a522 :a522 :a522. +:a523 :a523 :a523. +:a524 :a524 :a524. +:a525 :a525 :a525. +:a526 :a526 :a526. +:a527 :a527 :a527. +:a528 :a528 :a528. +:a529 :a529 :a529. +:a530 :a530 :a530. +:a531 :a531 :a531. +:a532 :a532 :a532. +:a533 :a533 :a533. +:a534 :a534 :a534. +:a535 :a535 :a535. +:a536 :a536 :a536. +:a537 :a537 :a537. +:a538 :a538 :a538. +:a539 :a539 :a539. +:a540 :a540 :a540. +:a541 :a541 :a541. +:a542 :a542 :a542. +:a543 :a543 :a543. +:a544 :a544 :a544. +:a545 :a545 :a545. +:a546 :a546 :a546. +:a547 :a547 :a547. +:a548 :a548 :a548. +:a549 :a549 :a549. +:a550 :a550 :a550. +:a551 :a551 :a551. +:a552 :a552 :a552. +:a553 :a553 :a553. +:a554 :a554 :a554. +:a555 :a555 :a555. +:a556 :a556 :a556. +:a557 :a557 :a557. +:a558 :a558 :a558. +:a559 :a559 :a559. +:a560 :a560 :a560. +:a561 :a561 :a561. +:a562 :a562 :a562. +:a563 :a563 :a563. +:a564 :a564 :a564. +:a565 :a565 :a565. +:a566 :a566 :a566. +:a567 :a567 :a567. +:a568 :a568 :a568. +:a569 :a569 :a569. +:a570 :a570 :a570. +:a571 :a571 :a571. +:a572 :a572 :a572. +:a573 :a573 :a573. +:a574 :a574 :a574. +:a575 :a575 :a575. +:a576 :a576 :a576. +:a577 :a577 :a577. +:a578 :a578 :a578. +:a579 :a579 :a579. +:a580 :a580 :a580. +:a581 :a581 :a581. +:a582 :a582 :a582. +:a583 :a583 :a583. +:a584 :a584 :a584. +:a585 :a585 :a585. +:a586 :a586 :a586. +:a587 :a587 :a587. +:a588 :a588 :a588. +:a589 :a589 :a589. +:a590 :a590 :a590. +:a591 :a591 :a591. +:a592 :a592 :a592. +:a593 :a593 :a593. +:a594 :a594 :a594. +:a595 :a595 :a595. +:a596 :a596 :a596. +:a597 :a597 :a597. +:a598 :a598 :a598. +:a599 :a599 :a599. +:a600 :a600 :a600. +:a601 :a601 :a601. +:a602 :a602 :a602. +:a603 :a603 :a603. +:a604 :a604 :a604. +:a605 :a605 :a605. +:a606 :a606 :a606. +:a607 :a607 :a607. +:a608 :a608 :a608. +:a609 :a609 :a609. +:a610 :a610 :a610. +:a611 :a611 :a611. +:a612 :a612 :a612. +:a613 :a613 :a613. +:a614 :a614 :a614. +:a615 :a615 :a615. +:a616 :a616 :a616. +:a617 :a617 :a617. +:a618 :a618 :a618. +:a619 :a619 :a619. +:a620 :a620 :a620. +:a621 :a621 :a621. +:a622 :a622 :a622. +:a623 :a623 :a623. +:a624 :a624 :a624. +:a625 :a625 :a625. +:a626 :a626 :a626. +:a627 :a627 :a627. +:a628 :a628 :a628. +:a629 :a629 :a629. +:a630 :a630 :a630. +:a631 :a631 :a631. +:a632 :a632 :a632. +:a633 :a633 :a633. +:a634 :a634 :a634. +:a635 :a635 :a635. +:a636 :a636 :a636. +:a637 :a637 :a637. +:a638 :a638 :a638. +:a639 :a639 :a639. +:a640 :a640 :a640. +:a641 :a641 :a641. +:a642 :a642 :a642. +:a643 :a643 :a643. +:a644 :a644 :a644. +:a645 :a645 :a645. +:a646 :a646 :a646. +:a647 :a647 :a647. +:a648 :a648 :a648. +:a649 :a649 :a649. +:a650 :a650 :a650. +:a651 :a651 :a651. +:a652 :a652 :a652. +:a653 :a653 :a653. +:a654 :a654 :a654. +:a655 :a655 :a655. +:a656 :a656 :a656. +:a657 :a657 :a657. +:a658 :a658 :a658. +:a659 :a659 :a659. +:a660 :a660 :a660. +:a661 :a661 :a661. +:a662 :a662 :a662. +:a663 :a663 :a663. +:a664 :a664 :a664. +:a665 :a665 :a665. +:a666 :a666 :a666. +:a667 :a667 :a667. +:a668 :a668 :a668. +:a669 :a669 :a669. +:a670 :a670 :a670. +:a671 :a671 :a671. +:a672 :a672 :a672. +:a673 :a673 :a673. +:a674 :a674 :a674. +:a675 :a675 :a675. +:a676 :a676 :a676. +:a677 :a677 :a677. +:a678 :a678 :a678. +:a679 :a679 :a679. +:a680 :a680 :a680. +:a681 :a681 :a681. +:a682 :a682 :a682. +:a683 :a683 :a683. +:a684 :a684 :a684. +:a685 :a685 :a685. +:a686 :a686 :a686. +:a687 :a687 :a687. +:a688 :a688 :a688. +:a689 :a689 :a689. +:a690 :a690 :a690. +:a691 :a691 :a691. +:a692 :a692 :a692. +:a693 :a693 :a693. +:a694 :a694 :a694. +:a695 :a695 :a695. +:a696 :a696 :a696. +:a697 :a697 :a697. +:a698 :a698 :a698. +:a699 :a699 :a699. +:a700 :a700 :a700. +:a701 :a701 :a701. +:a702 :a702 :a702. +:a703 :a703 :a703. +:a704 :a704 :a704. +:a705 :a705 :a705. +:a706 :a706 :a706. +:a707 :a707 :a707. +:a708 :a708 :a708. +:a709 :a709 :a709. +:a710 :a710 :a710. +:a711 :a711 :a711. +:a712 :a712 :a712. +:a713 :a713 :a713. +:a714 :a714 :a714. +:a715 :a715 :a715. +:a716 :a716 :a716. +:a717 :a717 :a717. +:a718 :a718 :a718. +:a719 :a719 :a719. +:a720 :a720 :a720. +:a721 :a721 :a721. +:a722 :a722 :a722. +:a723 :a723 :a723. +:a724 :a724 :a724. +:a725 :a725 :a725. +:a726 :a726 :a726. +:a727 :a727 :a727. +:a728 :a728 :a728. +:a729 :a729 :a729. +:a730 :a730 :a730. +:a731 :a731 :a731. +:a732 :a732 :a732. +:a733 :a733 :a733. +:a734 :a734 :a734. +:a735 :a735 :a735. +:a736 :a736 :a736. +:a737 :a737 :a737. +:a738 :a738 :a738. +:a739 :a739 :a739. +:a740 :a740 :a740. +:a741 :a741 :a741. +:a742 :a742 :a742. +:a743 :a743 :a743. +:a744 :a744 :a744. +:a745 :a745 :a745. +:a746 :a746 :a746. +:a747 :a747 :a747. +:a748 :a748 :a748. +:a749 :a749 :a749. +:a750 :a750 :a750. +:a751 :a751 :a751. +:a752 :a752 :a752. +:a753 :a753 :a753. +:a754 :a754 :a754. +:a755 :a755 :a755. +:a756 :a756 :a756. +:a757 :a757 :a757. +:a758 :a758 :a758. +:a759 :a759 :a759. +:a760 :a760 :a760. +:a761 :a761 :a761. +:a762 :a762 :a762. +:a763 :a763 :a763. +:a764 :a764 :a764. +:a765 :a765 :a765. +:a766 :a766 :a766. +:a767 :a767 :a767. +:a768 :a768 :a768. +:a769 :a769 :a769. +:a770 :a770 :a770. +:a771 :a771 :a771. +:a772 :a772 :a772. +:a773 :a773 :a773. +:a774 :a774 :a774. +:a775 :a775 :a775. +:a776 :a776 :a776. +:a777 :a777 :a777. +:a778 :a778 :a778. +:a779 :a779 :a779. +:a780 :a780 :a780. +:a781 :a781 :a781. +:a782 :a782 :a782. +:a783 :a783 :a783. +:a784 :a784 :a784. +:a785 :a785 :a785. +:a786 :a786 :a786. +:a787 :a787 :a787. +:a788 :a788 :a788. +:a789 :a789 :a789. +:a790 :a790 :a790. +:a791 :a791 :a791. +:a792 :a792 :a792. +:a793 :a793 :a793. +:a794 :a794 :a794. +:a795 :a795 :a795. +:a796 :a796 :a796. +:a797 :a797 :a797. +:a798 :a798 :a798. +:a799 :a799 :a799. +:a800 :a800 :a800. +:a801 :a801 :a801. +:a802 :a802 :a802. +:a803 :a803 :a803. +:a804 :a804 :a804. +:a805 :a805 :a805. +:a806 :a806 :a806. +:a807 :a807 :a807. +:a808 :a808 :a808. +:a809 :a809 :a809. +:a810 :a810 :a810. +:a811 :a811 :a811. +:a812 :a812 :a812. +:a813 :a813 :a813. +:a814 :a814 :a814. +:a815 :a815 :a815. +:a816 :a816 :a816. +:a817 :a817 :a817. +:a818 :a818 :a818. +:a819 :a819 :a819. +:a820 :a820 :a820. +:a821 :a821 :a821. +:a822 :a822 :a822. +:a823 :a823 :a823. +:a824 :a824 :a824. +:a825 :a825 :a825. +:a826 :a826 :a826. +:a827 :a827 :a827. +:a828 :a828 :a828. +:a829 :a829 :a829. +:a830 :a830 :a830. +:a831 :a831 :a831. +:a832 :a832 :a832. +:a833 :a833 :a833. +:a834 :a834 :a834. +:a835 :a835 :a835. +:a836 :a836 :a836. +:a837 :a837 :a837. +:a838 :a838 :a838. +:a839 :a839 :a839. +:a840 :a840 :a840. +:a841 :a841 :a841. +:a842 :a842 :a842. +:a843 :a843 :a843. +:a844 :a844 :a844. +:a845 :a845 :a845. +:a846 :a846 :a846. +:a847 :a847 :a847. +:a848 :a848 :a848. +:a849 :a849 :a849. +:a850 :a850 :a850. +:a851 :a851 :a851. +:a852 :a852 :a852. +:a853 :a853 :a853. +:a854 :a854 :a854. +:a855 :a855 :a855. +:a856 :a856 :a856. +:a857 :a857 :a857. +:a858 :a858 :a858. +:a859 :a859 :a859. +:a860 :a860 :a860. +:a861 :a861 :a861. +:a862 :a862 :a862. +:a863 :a863 :a863. +:a864 :a864 :a864. +:a865 :a865 :a865. +:a866 :a866 :a866. +:a867 :a867 :a867. +:a868 :a868 :a868. +:a869 :a869 :a869. +:a870 :a870 :a870. +:a871 :a871 :a871. +:a872 :a872 :a872. +:a873 :a873 :a873. +:a874 :a874 :a874. +:a875 :a875 :a875. +:a876 :a876 :a876. +:a877 :a877 :a877. +:a878 :a878 :a878. +:a879 :a879 :a879. +:a880 :a880 :a880. +:a881 :a881 :a881. +:a882 :a882 :a882. +:a883 :a883 :a883. +:a884 :a884 :a884. +:a885 :a885 :a885. +:a886 :a886 :a886. +:a887 :a887 :a887. +:a888 :a888 :a888. +:a889 :a889 :a889. +:a890 :a890 :a890. +:a891 :a891 :a891. +:a892 :a892 :a892. +:a893 :a893 :a893. +:a894 :a894 :a894. +:a895 :a895 :a895. +:a896 :a896 :a896. +:a897 :a897 :a897. +:a898 :a898 :a898. +:a899 :a899 :a899. +:a900 :a900 :a900. +:a901 :a901 :a901. +:a902 :a902 :a902. +:a903 :a903 :a903. +:a904 :a904 :a904. +:a905 :a905 :a905. +:a906 :a906 :a906. +:a907 :a907 :a907. +:a908 :a908 :a908. +:a909 :a909 :a909. +:a910 :a910 :a910. +:a911 :a911 :a911. +:a912 :a912 :a912. +:a913 :a913 :a913. +:a914 :a914 :a914. +:a915 :a915 :a915. +:a916 :a916 :a916. +:a917 :a917 :a917. +:a918 :a918 :a918. +:a919 :a919 :a919. +:a920 :a920 :a920. +:a921 :a921 :a921. +:a922 :a922 :a922. +:a923 :a923 :a923. +:a924 :a924 :a924. +:a925 :a925 :a925. +:a926 :a926 :a926. +:a927 :a927 :a927. +:a928 :a928 :a928. +:a929 :a929 :a929. +:a930 :a930 :a930. +:a931 :a931 :a931. +:a932 :a932 :a932. +:a933 :a933 :a933. +:a934 :a934 :a934. +:a935 :a935 :a935. +:a936 :a936 :a936. +:a937 :a937 :a937. +:a938 :a938 :a938. +:a939 :a939 :a939. +:a940 :a940 :a940. +:a941 :a941 :a941. +:a942 :a942 :a942. +:a943 :a943 :a943. +:a944 :a944 :a944. +:a945 :a945 :a945. +:a946 :a946 :a946. +:a947 :a947 :a947. +:a948 :a948 :a948. +:a949 :a949 :a949. +:a950 :a950 :a950. +:a951 :a951 :a951. +:a952 :a952 :a952. +:a953 :a953 :a953. +:a954 :a954 :a954. +:a955 :a955 :a955. +:a956 :a956 :a956. +:a957 :a957 :a957. +:a958 :a958 :a958. +:a959 :a959 :a959. +:a960 :a960 :a960. +:a961 :a961 :a961. +:a962 :a962 :a962. +:a963 :a963 :a963. +:a964 :a964 :a964. +:a965 :a965 :a965. +:a966 :a966 :a966. +:a967 :a967 :a967. +:a968 :a968 :a968. +:a969 :a969 :a969. +:a970 :a970 :a970. +:a971 :a971 :a971. +:a972 :a972 :a972. +:a973 :a973 :a973. +:a974 :a974 :a974. +:a975 :a975 :a975. +:a976 :a976 :a976. +:a977 :a977 :a977. +:a978 :a978 :a978. +:a979 :a979 :a979. +:a980 :a980 :a980. +:a981 :a981 :a981. +:a982 :a982 :a982. +:a983 :a983 :a983. +:a984 :a984 :a984. +:a985 :a985 :a985. +:a986 :a986 :a986. +:a987 :a987 :a987. +:a988 :a988 :a988. +:a989 :a989 :a989. +:a990 :a990 :a990. +:a991 :a991 :a991. +:a992 :a992 :a992. +:a993 :a993 :a993. +:a994 :a994 :a994. +:a995 :a995 :a995. +:a996 :a996 :a996. +:a997 :a997 :a997. +:a998 :a998 :a998. +:a999 :a999 :a999. +:a1000 :a1000 :a1000. +:a1001 :a1001 :a1001. +:a1002 :a1002 :a1002. +:a1003 :a1003 :a1003. +:a1004 :a1004 :a1004. +:a1005 :a1005 :a1005. +:a1006 :a1006 :a1006. +:a1007 :a1007 :a1007. +:a1008 :a1008 :a1008. +:a1009 :a1009 :a1009. +:a1010 :a1010 :a1010. +:a1011 :a1011 :a1011. +:a1012 :a1012 :a1012. +:a1013 :a1013 :a1013. +:a1014 :a1014 :a1014. +:a1015 :a1015 :a1015. +:a1016 :a1016 :a1016. +:a1017 :a1017 :a1017. +:a1018 :a1018 :a1018. +:a1019 :a1019 :a1019. +:a1020 :a1020 :a1020. +:a1021 :a1021 :a1021. +:a1022 :a1022 :a1022. +:a1023 :a1023 :a1023. +:a1024 :a1024 :a1024. +:a1025 :a1025 :a1025. +:a1026 :a1026 :a1026. +:a1027 :a1027 :a1027. +:a1028 :a1028 :a1028. +:a1029 :a1029 :a1029. +:a1030 :a1030 :a1030. +:a1031 :a1031 :a1031. +:a1032 :a1032 :a1032. +:a1033 :a1033 :a1033. +:a1034 :a1034 :a1034. +:a1035 :a1035 :a1035. +:a1036 :a1036 :a1036. +:a1037 :a1037 :a1037. +:a1038 :a1038 :a1038. +:a1039 :a1039 :a1039. +:a1040 :a1040 :a1040. +:a1041 :a1041 :a1041. +:a1042 :a1042 :a1042. +:a1043 :a1043 :a1043. +:a1044 :a1044 :a1044. +:a1045 :a1045 :a1045. +:a1046 :a1046 :a1046. +:a1047 :a1047 :a1047. +:a1048 :a1048 :a1048. +:a1049 :a1049 :a1049. +:a1050 :a1050 :a1050. +:a1051 :a1051 :a1051. +:a1052 :a1052 :a1052. +:a1053 :a1053 :a1053. +:a1054 :a1054 :a1054. +:a1055 :a1055 :a1055. +:a1056 :a1056 :a1056. +:a1057 :a1057 :a1057. +:a1058 :a1058 :a1058. +:a1059 :a1059 :a1059. +:a1060 :a1060 :a1060. +:a1061 :a1061 :a1061. +:a1062 :a1062 :a1062. +:a1063 :a1063 :a1063. +:a1064 :a1064 :a1064. +:a1065 :a1065 :a1065. +:a1066 :a1066 :a1066. +:a1067 :a1067 :a1067. +:a1068 :a1068 :a1068. +:a1069 :a1069 :a1069. +:a1070 :a1070 :a1070. +:a1071 :a1071 :a1071. +:a1072 :a1072 :a1072. +:a1073 :a1073 :a1073. +:a1074 :a1074 :a1074. +:a1075 :a1075 :a1075. +:a1076 :a1076 :a1076. +:a1077 :a1077 :a1077. +:a1078 :a1078 :a1078. +:a1079 :a1079 :a1079. +:a1080 :a1080 :a1080. +:a1081 :a1081 :a1081. +:a1082 :a1082 :a1082. +:a1083 :a1083 :a1083. +:a1084 :a1084 :a1084. +:a1085 :a1085 :a1085. +:a1086 :a1086 :a1086. +:a1087 :a1087 :a1087. +:a1088 :a1088 :a1088. +:a1089 :a1089 :a1089. +:a1090 :a1090 :a1090. +:a1091 :a1091 :a1091. +:a1092 :a1092 :a1092. +:a1093 :a1093 :a1093. +:a1094 :a1094 :a1094. +:a1095 :a1095 :a1095. +:a1096 :a1096 :a1096. +:a1097 :a1097 :a1097. +:a1098 :a1098 :a1098. +:a1099 :a1099 :a1099. +:a1100 :a1100 :a1100. +:a1101 :a1101 :a1101. +:a1102 :a1102 :a1102. +:a1103 :a1103 :a1103. +:a1104 :a1104 :a1104. +:a1105 :a1105 :a1105. +:a1106 :a1106 :a1106. +:a1107 :a1107 :a1107. +:a1108 :a1108 :a1108. +:a1109 :a1109 :a1109. +:a1110 :a1110 :a1110. +:a1111 :a1111 :a1111. +:a1112 :a1112 :a1112. +:a1113 :a1113 :a1113. +:a1114 :a1114 :a1114. +:a1115 :a1115 :a1115. +:a1116 :a1116 :a1116. +:a1117 :a1117 :a1117. +:a1118 :a1118 :a1118. +:a1119 :a1119 :a1119. +:a1120 :a1120 :a1120. +:a1121 :a1121 :a1121. +:a1122 :a1122 :a1122. +:a1123 :a1123 :a1123. +:a1124 :a1124 :a1124. +:a1125 :a1125 :a1125. +:a1126 :a1126 :a1126. +:a1127 :a1127 :a1127. +:a1128 :a1128 :a1128. +:a1129 :a1129 :a1129. +:a1130 :a1130 :a1130. +:a1131 :a1131 :a1131. +:a1132 :a1132 :a1132. +:a1133 :a1133 :a1133. +:a1134 :a1134 :a1134. +:a1135 :a1135 :a1135. +:a1136 :a1136 :a1136. +:a1137 :a1137 :a1137. +:a1138 :a1138 :a1138. +:a1139 :a1139 :a1139. +:a1140 :a1140 :a1140. +:a1141 :a1141 :a1141. +:a1142 :a1142 :a1142. +:a1143 :a1143 :a1143. +:a1144 :a1144 :a1144. +:a1145 :a1145 :a1145. +:a1146 :a1146 :a1146. +:a1147 :a1147 :a1147. +:a1148 :a1148 :a1148. +:a1149 :a1149 :a1149. +:a1150 :a1150 :a1150. +:a1151 :a1151 :a1151. +:a1152 :a1152 :a1152. +:a1153 :a1153 :a1153. +:a1154 :a1154 :a1154. +:a1155 :a1155 :a1155. +:a1156 :a1156 :a1156. +:a1157 :a1157 :a1157. +:a1158 :a1158 :a1158. +:a1159 :a1159 :a1159. +:a1160 :a1160 :a1160. +:a1161 :a1161 :a1161. +:a1162 :a1162 :a1162. +:a1163 :a1163 :a1163. +:a1164 :a1164 :a1164. +:a1165 :a1165 :a1165. +:a1166 :a1166 :a1166. +:a1167 :a1167 :a1167. +:a1168 :a1168 :a1168. +:a1169 :a1169 :a1169. +:a1170 :a1170 :a1170. +:a1171 :a1171 :a1171. +:a1172 :a1172 :a1172. +:a1173 :a1173 :a1173. +:a1174 :a1174 :a1174. +:a1175 :a1175 :a1175. +:a1176 :a1176 :a1176. +:a1177 :a1177 :a1177. +:a1178 :a1178 :a1178. +:a1179 :a1179 :a1179. +:a1180 :a1180 :a1180. +:a1181 :a1181 :a1181. +:a1182 :a1182 :a1182. +:a1183 :a1183 :a1183. +:a1184 :a1184 :a1184. +:a1185 :a1185 :a1185. +:a1186 :a1186 :a1186. +:a1187 :a1187 :a1187. +:a1188 :a1188 :a1188. +:a1189 :a1189 :a1189. +:a1190 :a1190 :a1190. +:a1191 :a1191 :a1191. +:a1192 :a1192 :a1192. +:a1193 :a1193 :a1193. +:a1194 :a1194 :a1194. +:a1195 :a1195 :a1195. +:a1196 :a1196 :a1196. +:a1197 :a1197 :a1197. +:a1198 :a1198 :a1198. +:a1199 :a1199 :a1199. +:a1200 :a1200 :a1200. +:a1201 :a1201 :a1201. +:a1202 :a1202 :a1202. +:a1203 :a1203 :a1203. +:a1204 :a1204 :a1204. +:a1205 :a1205 :a1205. +:a1206 :a1206 :a1206. +:a1207 :a1207 :a1207. +:a1208 :a1208 :a1208. +:a1209 :a1209 :a1209. +:a1210 :a1210 :a1210. +:a1211 :a1211 :a1211. +:a1212 :a1212 :a1212. +:a1213 :a1213 :a1213. +:a1214 :a1214 :a1214. +:a1215 :a1215 :a1215. +:a1216 :a1216 :a1216. +:a1217 :a1217 :a1217. +:a1218 :a1218 :a1218. +:a1219 :a1219 :a1219. +:a1220 :a1220 :a1220. +:a1221 :a1221 :a1221. +:a1222 :a1222 :a1222. +:a1223 :a1223 :a1223. +:a1224 :a1224 :a1224. +:a1225 :a1225 :a1225. +:a1226 :a1226 :a1226. +:a1227 :a1227 :a1227. +:a1228 :a1228 :a1228. +:a1229 :a1229 :a1229. +:a1230 :a1230 :a1230. +:a1231 :a1231 :a1231. +:a1232 :a1232 :a1232. +:a1233 :a1233 :a1233. +:a1234 :a1234 :a1234. +:a1235 :a1235 :a1235. +:a1236 :a1236 :a1236. +:a1237 :a1237 :a1237. +:a1238 :a1238 :a1238. +:a1239 :a1239 :a1239. +:a1240 :a1240 :a1240. +:a1241 :a1241 :a1241. +:a1242 :a1242 :a1242. +:a1243 :a1243 :a1243. +:a1244 :a1244 :a1244. +:a1245 :a1245 :a1245. +:a1246 :a1246 :a1246. +:a1247 :a1247 :a1247. +:a1248 :a1248 :a1248. +:a1249 :a1249 :a1249. +:a1250 :a1250 :a1250. +:a1251 :a1251 :a1251. +:a1252 :a1252 :a1252. +:a1253 :a1253 :a1253. +:a1254 :a1254 :a1254. +:a1255 :a1255 :a1255. +:a1256 :a1256 :a1256. +:a1257 :a1257 :a1257. +:a1258 :a1258 :a1258. +:a1259 :a1259 :a1259. +:a1260 :a1260 :a1260. +:a1261 :a1261 :a1261. +:a1262 :a1262 :a1262. +:a1263 :a1263 :a1263. +:a1264 :a1264 :a1264. +:a1265 :a1265 :a1265. +:a1266 :a1266 :a1266. +:a1267 :a1267 :a1267. +:a1268 :a1268 :a1268. +:a1269 :a1269 :a1269. +:a1270 :a1270 :a1270. +:a1271 :a1271 :a1271. +:a1272 :a1272 :a1272. +:a1273 :a1273 :a1273. +:a1274 :a1274 :a1274. +:a1275 :a1275 :a1275. +:a1276 :a1276 :a1276. +:a1277 :a1277 :a1277. +:a1278 :a1278 :a1278. +:a1279 :a1279 :a1279. +:a1280 :a1280 :a1280. +:a1281 :a1281 :a1281. +:a1282 :a1282 :a1282. +:a1283 :a1283 :a1283. +:a1284 :a1284 :a1284. +:a1285 :a1285 :a1285. +:a1286 :a1286 :a1286. +:a1287 :a1287 :a1287. +:a1288 :a1288 :a1288. +:a1289 :a1289 :a1289. +:a1290 :a1290 :a1290. +:a1291 :a1291 :a1291. +:a1292 :a1292 :a1292. +:a1293 :a1293 :a1293. +:a1294 :a1294 :a1294. +:a1295 :a1295 :a1295. +:a1296 :a1296 :a1296. +:a1297 :a1297 :a1297. +:a1298 :a1298 :a1298. +:a1299 :a1299 :a1299. +:a1300 :a1300 :a1300. +:a1301 :a1301 :a1301. +:a1302 :a1302 :a1302. +:a1303 :a1303 :a1303. +:a1304 :a1304 :a1304. +:a1305 :a1305 :a1305. +:a1306 :a1306 :a1306. +:a1307 :a1307 :a1307. +:a1308 :a1308 :a1308. +:a1309 :a1309 :a1309. +:a1310 :a1310 :a1310. +:a1311 :a1311 :a1311. +:a1312 :a1312 :a1312. +:a1313 :a1313 :a1313. +:a1314 :a1314 :a1314. +:a1315 :a1315 :a1315. +:a1316 :a1316 :a1316. +:a1317 :a1317 :a1317. +:a1318 :a1318 :a1318. +:a1319 :a1319 :a1319. +:a1320 :a1320 :a1320. +:a1321 :a1321 :a1321. +:a1322 :a1322 :a1322. +:a1323 :a1323 :a1323. +:a1324 :a1324 :a1324. +:a1325 :a1325 :a1325. +:a1326 :a1326 :a1326. +:a1327 :a1327 :a1327. +:a1328 :a1328 :a1328. +:a1329 :a1329 :a1329. +:a1330 :a1330 :a1330. +:a1331 :a1331 :a1331. +:a1332 :a1332 :a1332. +:a1333 :a1333 :a1333. +:a1334 :a1334 :a1334. +:a1335 :a1335 :a1335. +:a1336 :a1336 :a1336. +:a1337 :a1337 :a1337. +:a1338 :a1338 :a1338. +:a1339 :a1339 :a1339. +:a1340 :a1340 :a1340. +:a1341 :a1341 :a1341. +:a1342 :a1342 :a1342. +:a1343 :a1343 :a1343. +:a1344 :a1344 :a1344. +:a1345 :a1345 :a1345. +:a1346 :a1346 :a1346. +:a1347 :a1347 :a1347. +:a1348 :a1348 :a1348. +:a1349 :a1349 :a1349. +:a1350 :a1350 :a1350. +:a1351 :a1351 :a1351. +:a1352 :a1352 :a1352. +:a1353 :a1353 :a1353. +:a1354 :a1354 :a1354. +:a1355 :a1355 :a1355. +:a1356 :a1356 :a1356. +:a1357 :a1357 :a1357. +:a1358 :a1358 :a1358. +:a1359 :a1359 :a1359. +:a1360 :a1360 :a1360. +:a1361 :a1361 :a1361. +:a1362 :a1362 :a1362. +:a1363 :a1363 :a1363. +:a1364 :a1364 :a1364. +:a1365 :a1365 :a1365. +:a1366 :a1366 :a1366. +:a1367 :a1367 :a1367. +:a1368 :a1368 :a1368. +:a1369 :a1369 :a1369. +:a1370 :a1370 :a1370. +:a1371 :a1371 :a1371. +:a1372 :a1372 :a1372. +:a1373 :a1373 :a1373. +:a1374 :a1374 :a1374. +:a1375 :a1375 :a1375. +:a1376 :a1376 :a1376. +:a1377 :a1377 :a1377. +:a1378 :a1378 :a1378. +:a1379 :a1379 :a1379. +:a1380 :a1380 :a1380. +:a1381 :a1381 :a1381. +:a1382 :a1382 :a1382. +:a1383 :a1383 :a1383. +:a1384 :a1384 :a1384. +:a1385 :a1385 :a1385. +:a1386 :a1386 :a1386. +:a1387 :a1387 :a1387. +:a1388 :a1388 :a1388. +:a1389 :a1389 :a1389. +:a1390 :a1390 :a1390. +:a1391 :a1391 :a1391. +:a1392 :a1392 :a1392. +:a1393 :a1393 :a1393. +:a1394 :a1394 :a1394. +:a1395 :a1395 :a1395. +:a1396 :a1396 :a1396. +:a1397 :a1397 :a1397. +:a1398 :a1398 :a1398. +:a1399 :a1399 :a1399. +:a1400 :a1400 :a1400. +:a1401 :a1401 :a1401. +:a1402 :a1402 :a1402. +:a1403 :a1403 :a1403. +:a1404 :a1404 :a1404. +:a1405 :a1405 :a1405. +:a1406 :a1406 :a1406. +:a1407 :a1407 :a1407. +:a1408 :a1408 :a1408. +:a1409 :a1409 :a1409. +:a1410 :a1410 :a1410. +:a1411 :a1411 :a1411. +:a1412 :a1412 :a1412. +:a1413 :a1413 :a1413. +:a1414 :a1414 :a1414. +:a1415 :a1415 :a1415. +:a1416 :a1416 :a1416. +:a1417 :a1417 :a1417. +:a1418 :a1418 :a1418. +:a1419 :a1419 :a1419. +:a1420 :a1420 :a1420. +:a1421 :a1421 :a1421. +:a1422 :a1422 :a1422. +:a1423 :a1423 :a1423. +:a1424 :a1424 :a1424. +:a1425 :a1425 :a1425. +:a1426 :a1426 :a1426. +:a1427 :a1427 :a1427. +:a1428 :a1428 :a1428. +:a1429 :a1429 :a1429. +:a1430 :a1430 :a1430. +:a1431 :a1431 :a1431. +:a1432 :a1432 :a1432. +:a1433 :a1433 :a1433. +:a1434 :a1434 :a1434. +:a1435 :a1435 :a1435. +:a1436 :a1436 :a1436. +:a1437 :a1437 :a1437. +:a1438 :a1438 :a1438. +:a1439 :a1439 :a1439. +:a1440 :a1440 :a1440. +:a1441 :a1441 :a1441. +:a1442 :a1442 :a1442. +:a1443 :a1443 :a1443. +:a1444 :a1444 :a1444. +:a1445 :a1445 :a1445. +:a1446 :a1446 :a1446. +:a1447 :a1447 :a1447. +:a1448 :a1448 :a1448. +:a1449 :a1449 :a1449. +:a1450 :a1450 :a1450. +:a1451 :a1451 :a1451. +:a1452 :a1452 :a1452. +:a1453 :a1453 :a1453. +:a1454 :a1454 :a1454. +:a1455 :a1455 :a1455. +:a1456 :a1456 :a1456. +:a1457 :a1457 :a1457. +:a1458 :a1458 :a1458. +:a1459 :a1459 :a1459. +:a1460 :a1460 :a1460. +:a1461 :a1461 :a1461. +:a1462 :a1462 :a1462. +:a1463 :a1463 :a1463. +:a1464 :a1464 :a1464. +:a1465 :a1465 :a1465. +:a1466 :a1466 :a1466. +:a1467 :a1467 :a1467. +:a1468 :a1468 :a1468. +:a1469 :a1469 :a1469. +:a1470 :a1470 :a1470. +:a1471 :a1471 :a1471. +:a1472 :a1472 :a1472. +:a1473 :a1473 :a1473. +:a1474 :a1474 :a1474. +:a1475 :a1475 :a1475. +:a1476 :a1476 :a1476. +:a1477 :a1477 :a1477. +:a1478 :a1478 :a1478. +:a1479 :a1479 :a1479. +:a1480 :a1480 :a1480. +:a1481 :a1481 :a1481. +:a1482 :a1482 :a1482. +:a1483 :a1483 :a1483. +:a1484 :a1484 :a1484. +:a1485 :a1485 :a1485. +:a1486 :a1486 :a1486. +:a1487 :a1487 :a1487. +:a1488 :a1488 :a1488. +:a1489 :a1489 :a1489. +:a1490 :a1490 :a1490. +:a1491 :a1491 :a1491. +:a1492 :a1492 :a1492. +:a1493 :a1493 :a1493. +:a1494 :a1494 :a1494. +:a1495 :a1495 :a1495. +:a1496 :a1496 :a1496. +:a1497 :a1497 :a1497. +:a1498 :a1498 :a1498. +:a1499 :a1499 :a1499. +:a1500 :a1500 :a1500. +:a1501 :a1501 :a1501. +:a1502 :a1502 :a1502. +:a1503 :a1503 :a1503. +:a1504 :a1504 :a1504. +:a1505 :a1505 :a1505. +:a1506 :a1506 :a1506. +:a1507 :a1507 :a1507. +:a1508 :a1508 :a1508. +:a1509 :a1509 :a1509. +:a1510 :a1510 :a1510. +:a1511 :a1511 :a1511. +:a1512 :a1512 :a1512. +:a1513 :a1513 :a1513. +:a1514 :a1514 :a1514. +:a1515 :a1515 :a1515. +:a1516 :a1516 :a1516. +:a1517 :a1517 :a1517. +:a1518 :a1518 :a1518. +:a1519 :a1519 :a1519. +:a1520 :a1520 :a1520. +:a1521 :a1521 :a1521. +:a1522 :a1522 :a1522. +:a1523 :a1523 :a1523. +:a1524 :a1524 :a1524. +:a1525 :a1525 :a1525. +:a1526 :a1526 :a1526. +:a1527 :a1527 :a1527. +:a1528 :a1528 :a1528. +:a1529 :a1529 :a1529. +:a1530 :a1530 :a1530. +:a1531 :a1531 :a1531. +:a1532 :a1532 :a1532. +:a1533 :a1533 :a1533. +:a1534 :a1534 :a1534. +:a1535 :a1535 :a1535. +:a1536 :a1536 :a1536. +:a1537 :a1537 :a1537. +:a1538 :a1538 :a1538. +:a1539 :a1539 :a1539. +:a1540 :a1540 :a1540. +:a1541 :a1541 :a1541. +:a1542 :a1542 :a1542. +:a1543 :a1543 :a1543. +:a1544 :a1544 :a1544. +:a1545 :a1545 :a1545. +:a1546 :a1546 :a1546. +:a1547 :a1547 :a1547. +:a1548 :a1548 :a1548. +:a1549 :a1549 :a1549. +:a1550 :a1550 :a1550. +:a1551 :a1551 :a1551. +:a1552 :a1552 :a1552. +:a1553 :a1553 :a1553. +:a1554 :a1554 :a1554. +:a1555 :a1555 :a1555. +:a1556 :a1556 :a1556. +:a1557 :a1557 :a1557. +:a1558 :a1558 :a1558. +:a1559 :a1559 :a1559. +:a1560 :a1560 :a1560. +:a1561 :a1561 :a1561. +:a1562 :a1562 :a1562. +:a1563 :a1563 :a1563. +:a1564 :a1564 :a1564. +:a1565 :a1565 :a1565. +:a1566 :a1566 :a1566. +:a1567 :a1567 :a1567. +:a1568 :a1568 :a1568. +:a1569 :a1569 :a1569. +:a1570 :a1570 :a1570. +:a1571 :a1571 :a1571. +:a1572 :a1572 :a1572. +:a1573 :a1573 :a1573. +:a1574 :a1574 :a1574. +:a1575 :a1575 :a1575. +:a1576 :a1576 :a1576. +:a1577 :a1577 :a1577. +:a1578 :a1578 :a1578. +:a1579 :a1579 :a1579. +:a1580 :a1580 :a1580. +:a1581 :a1581 :a1581. +:a1582 :a1582 :a1582. +:a1583 :a1583 :a1583. +:a1584 :a1584 :a1584. +:a1585 :a1585 :a1585. +:a1586 :a1586 :a1586. +:a1587 :a1587 :a1587. +:a1588 :a1588 :a1588. +:a1589 :a1589 :a1589. +:a1590 :a1590 :a1590. +:a1591 :a1591 :a1591. +:a1592 :a1592 :a1592. +:a1593 :a1593 :a1593. +:a1594 :a1594 :a1594. +:a1595 :a1595 :a1595. +:a1596 :a1596 :a1596. +:a1597 :a1597 :a1597. +:a1598 :a1598 :a1598. +:a1599 :a1599 :a1599. +:a1600 :a1600 :a1600. +:a1601 :a1601 :a1601. +:a1602 :a1602 :a1602. +:a1603 :a1603 :a1603. +:a1604 :a1604 :a1604. +:a1605 :a1605 :a1605. +:a1606 :a1606 :a1606. +:a1607 :a1607 :a1607. +:a1608 :a1608 :a1608. +:a1609 :a1609 :a1609. +:a1610 :a1610 :a1610. +:a1611 :a1611 :a1611. +:a1612 :a1612 :a1612. +:a1613 :a1613 :a1613. +:a1614 :a1614 :a1614. +:a1615 :a1615 :a1615. +:a1616 :a1616 :a1616. +:a1617 :a1617 :a1617. +:a1618 :a1618 :a1618. +:a1619 :a1619 :a1619. +:a1620 :a1620 :a1620. +:a1621 :a1621 :a1621. +:a1622 :a1622 :a1622. +:a1623 :a1623 :a1623. +:a1624 :a1624 :a1624. +:a1625 :a1625 :a1625. +:a1626 :a1626 :a1626. +:a1627 :a1627 :a1627. +:a1628 :a1628 :a1628. +:a1629 :a1629 :a1629. +:a1630 :a1630 :a1630. +:a1631 :a1631 :a1631. +:a1632 :a1632 :a1632. +:a1633 :a1633 :a1633. +:a1634 :a1634 :a1634. +:a1635 :a1635 :a1635. +:a1636 :a1636 :a1636. +:a1637 :a1637 :a1637. +:a1638 :a1638 :a1638. +:a1639 :a1639 :a1639. +:a1640 :a1640 :a1640. +:a1641 :a1641 :a1641. +:a1642 :a1642 :a1642. +:a1643 :a1643 :a1643. +:a1644 :a1644 :a1644. +:a1645 :a1645 :a1645. +:a1646 :a1646 :a1646. +:a1647 :a1647 :a1647. +:a1648 :a1648 :a1648. +:a1649 :a1649 :a1649. +:a1650 :a1650 :a1650. +:a1651 :a1651 :a1651. +:a1652 :a1652 :a1652. +:a1653 :a1653 :a1653. +:a1654 :a1654 :a1654. +:a1655 :a1655 :a1655. +:a1656 :a1656 :a1656. +:a1657 :a1657 :a1657. +:a1658 :a1658 :a1658. +:a1659 :a1659 :a1659. +:a1660 :a1660 :a1660. +:a1661 :a1661 :a1661. +:a1662 :a1662 :a1662. +:a1663 :a1663 :a1663. +:a1664 :a1664 :a1664. +:a1665 :a1665 :a1665. +:a1666 :a1666 :a1666. +:a1667 :a1667 :a1667. +:a1668 :a1668 :a1668. +:a1669 :a1669 :a1669. +:a1670 :a1670 :a1670. +:a1671 :a1671 :a1671. +:a1672 :a1672 :a1672. +:a1673 :a1673 :a1673. +:a1674 :a1674 :a1674. +:a1675 :a1675 :a1675. +:a1676 :a1676 :a1676. +:a1677 :a1677 :a1677. +:a1678 :a1678 :a1678. +:a1679 :a1679 :a1679. +:a1680 :a1680 :a1680. +:a1681 :a1681 :a1681. +:a1682 :a1682 :a1682. +:a1683 :a1683 :a1683. +:a1684 :a1684 :a1684. +:a1685 :a1685 :a1685. +:a1686 :a1686 :a1686. +:a1687 :a1687 :a1687. +:a1688 :a1688 :a1688. +:a1689 :a1689 :a1689. +:a1690 :a1690 :a1690. +:a1691 :a1691 :a1691. +:a1692 :a1692 :a1692. +:a1693 :a1693 :a1693. +:a1694 :a1694 :a1694. +:a1695 :a1695 :a1695. +:a1696 :a1696 :a1696. +:a1697 :a1697 :a1697. +:a1698 :a1698 :a1698. +:a1699 :a1699 :a1699. +:a1700 :a1700 :a1700. +:a1701 :a1701 :a1701. +:a1702 :a1702 :a1702. +:a1703 :a1703 :a1703. +:a1704 :a1704 :a1704. +:a1705 :a1705 :a1705. +:a1706 :a1706 :a1706. +:a1707 :a1707 :a1707. +:a1708 :a1708 :a1708. +:a1709 :a1709 :a1709. +:a1710 :a1710 :a1710. +:a1711 :a1711 :a1711. +:a1712 :a1712 :a1712. +:a1713 :a1713 :a1713. +:a1714 :a1714 :a1714. +:a1715 :a1715 :a1715. +:a1716 :a1716 :a1716. +:a1717 :a1717 :a1717. +:a1718 :a1718 :a1718. +:a1719 :a1719 :a1719. +:a1720 :a1720 :a1720. +:a1721 :a1721 :a1721. +:a1722 :a1722 :a1722. +:a1723 :a1723 :a1723. +:a1724 :a1724 :a1724. +:a1725 :a1725 :a1725. +:a1726 :a1726 :a1726. +:a1727 :a1727 :a1727. +:a1728 :a1728 :a1728. +:a1729 :a1729 :a1729. +:a1730 :a1730 :a1730. +:a1731 :a1731 :a1731. +:a1732 :a1732 :a1732. +:a1733 :a1733 :a1733. +:a1734 :a1734 :a1734. +:a1735 :a1735 :a1735. +:a1736 :a1736 :a1736. +:a1737 :a1737 :a1737. +:a1738 :a1738 :a1738. +:a1739 :a1739 :a1739. +:a1740 :a1740 :a1740. +:a1741 :a1741 :a1741. +:a1742 :a1742 :a1742. +:a1743 :a1743 :a1743. +:a1744 :a1744 :a1744. +:a1745 :a1745 :a1745. +:a1746 :a1746 :a1746. +:a1747 :a1747 :a1747. +:a1748 :a1748 :a1748. +:a1749 :a1749 :a1749. +:a1750 :a1750 :a1750. +:a1751 :a1751 :a1751. +:a1752 :a1752 :a1752. +:a1753 :a1753 :a1753. +:a1754 :a1754 :a1754. +:a1755 :a1755 :a1755. +:a1756 :a1756 :a1756. +:a1757 :a1757 :a1757. +:a1758 :a1758 :a1758. +:a1759 :a1759 :a1759. +:a1760 :a1760 :a1760. +:a1761 :a1761 :a1761. +:a1762 :a1762 :a1762. +:a1763 :a1763 :a1763. +:a1764 :a1764 :a1764. +:a1765 :a1765 :a1765. +:a1766 :a1766 :a1766. +:a1767 :a1767 :a1767. +:a1768 :a1768 :a1768. +:a1769 :a1769 :a1769. +:a1770 :a1770 :a1770. +:a1771 :a1771 :a1771. +:a1772 :a1772 :a1772. +:a1773 :a1773 :a1773. +:a1774 :a1774 :a1774. +:a1775 :a1775 :a1775. +:a1776 :a1776 :a1776. +:a1777 :a1777 :a1777. +:a1778 :a1778 :a1778. +:a1779 :a1779 :a1779. +:a1780 :a1780 :a1780. +:a1781 :a1781 :a1781. +:a1782 :a1782 :a1782. +:a1783 :a1783 :a1783. +:a1784 :a1784 :a1784. +:a1785 :a1785 :a1785. +:a1786 :a1786 :a1786. +:a1787 :a1787 :a1787. +:a1788 :a1788 :a1788. +:a1789 :a1789 :a1789. +:a1790 :a1790 :a1790. +:a1791 :a1791 :a1791. +:a1792 :a1792 :a1792. +:a1793 :a1793 :a1793. +:a1794 :a1794 :a1794. +:a1795 :a1795 :a1795. +:a1796 :a1796 :a1796. +:a1797 :a1797 :a1797. +:a1798 :a1798 :a1798. +:a1799 :a1799 :a1799. +:a1800 :a1800 :a1800. +:a1801 :a1801 :a1801. +:a1802 :a1802 :a1802. +:a1803 :a1803 :a1803. +:a1804 :a1804 :a1804. +:a1805 :a1805 :a1805. +:a1806 :a1806 :a1806. +:a1807 :a1807 :a1807. +:a1808 :a1808 :a1808. +:a1809 :a1809 :a1809. +:a1810 :a1810 :a1810. +:a1811 :a1811 :a1811. +:a1812 :a1812 :a1812. +:a1813 :a1813 :a1813. +:a1814 :a1814 :a1814. +:a1815 :a1815 :a1815. +:a1816 :a1816 :a1816. +:a1817 :a1817 :a1817. +:a1818 :a1818 :a1818. +:a1819 :a1819 :a1819. +:a1820 :a1820 :a1820. +:a1821 :a1821 :a1821. +:a1822 :a1822 :a1822. +:a1823 :a1823 :a1823. +:a1824 :a1824 :a1824. +:a1825 :a1825 :a1825. +:a1826 :a1826 :a1826. +:a1827 :a1827 :a1827. +:a1828 :a1828 :a1828. +:a1829 :a1829 :a1829. +:a1830 :a1830 :a1830. +:a1831 :a1831 :a1831. +:a1832 :a1832 :a1832. +:a1833 :a1833 :a1833. +:a1834 :a1834 :a1834. +:a1835 :a1835 :a1835. +:a1836 :a1836 :a1836. +:a1837 :a1837 :a1837. +:a1838 :a1838 :a1838. +:a1839 :a1839 :a1839. +:a1840 :a1840 :a1840. +:a1841 :a1841 :a1841. +:a1842 :a1842 :a1842. +:a1843 :a1843 :a1843. +:a1844 :a1844 :a1844. +:a1845 :a1845 :a1845. +:a1846 :a1846 :a1846. +:a1847 :a1847 :a1847. +:a1848 :a1848 :a1848. +:a1849 :a1849 :a1849. +:a1850 :a1850 :a1850. +:a1851 :a1851 :a1851. +:a1852 :a1852 :a1852. +:a1853 :a1853 :a1853. +:a1854 :a1854 :a1854. +:a1855 :a1855 :a1855. +:a1856 :a1856 :a1856. +:a1857 :a1857 :a1857. +:a1858 :a1858 :a1858. +:a1859 :a1859 :a1859. +:a1860 :a1860 :a1860. +:a1861 :a1861 :a1861. +:a1862 :a1862 :a1862. +:a1863 :a1863 :a1863. +:a1864 :a1864 :a1864. +:a1865 :a1865 :a1865. +:a1866 :a1866 :a1866. +:a1867 :a1867 :a1867. +:a1868 :a1868 :a1868. +:a1869 :a1869 :a1869. +:a1870 :a1870 :a1870. +:a1871 :a1871 :a1871. +:a1872 :a1872 :a1872. +:a1873 :a1873 :a1873. +:a1874 :a1874 :a1874. +:a1875 :a1875 :a1875. +:a1876 :a1876 :a1876. +:a1877 :a1877 :a1877. +:a1878 :a1878 :a1878. +:a1879 :a1879 :a1879. +:a1880 :a1880 :a1880. +:a1881 :a1881 :a1881. +:a1882 :a1882 :a1882. +:a1883 :a1883 :a1883. +:a1884 :a1884 :a1884. +:a1885 :a1885 :a1885. +:a1886 :a1886 :a1886. +:a1887 :a1887 :a1887. +:a1888 :a1888 :a1888. +:a1889 :a1889 :a1889. +:a1890 :a1890 :a1890. +:a1891 :a1891 :a1891. +:a1892 :a1892 :a1892. +:a1893 :a1893 :a1893. +:a1894 :a1894 :a1894. +:a1895 :a1895 :a1895. +:a1896 :a1896 :a1896. +:a1897 :a1897 :a1897. +:a1898 :a1898 :a1898. +:a1899 :a1899 :a1899. +:a1900 :a1900 :a1900. +:a1901 :a1901 :a1901. +:a1902 :a1902 :a1902. +:a1903 :a1903 :a1903. +:a1904 :a1904 :a1904. +:a1905 :a1905 :a1905. +:a1906 :a1906 :a1906. +:a1907 :a1907 :a1907. +:a1908 :a1908 :a1908. +:a1909 :a1909 :a1909. +:a1910 :a1910 :a1910. +:a1911 :a1911 :a1911. +:a1912 :a1912 :a1912. +:a1913 :a1913 :a1913. +:a1914 :a1914 :a1914. +:a1915 :a1915 :a1915. +:a1916 :a1916 :a1916. +:a1917 :a1917 :a1917. +:a1918 :a1918 :a1918. +:a1919 :a1919 :a1919. +:a1920 :a1920 :a1920. +:a1921 :a1921 :a1921. +:a1922 :a1922 :a1922. +:a1923 :a1923 :a1923. +:a1924 :a1924 :a1924. +:a1925 :a1925 :a1925. +:a1926 :a1926 :a1926. +:a1927 :a1927 :a1927. +:a1928 :a1928 :a1928. +:a1929 :a1929 :a1929. +:a1930 :a1930 :a1930. +:a1931 :a1931 :a1931. +:a1932 :a1932 :a1932. +:a1933 :a1933 :a1933. +:a1934 :a1934 :a1934. +:a1935 :a1935 :a1935. +:a1936 :a1936 :a1936. +:a1937 :a1937 :a1937. +:a1938 :a1938 :a1938. +:a1939 :a1939 :a1939. +:a1940 :a1940 :a1940. +:a1941 :a1941 :a1941. +:a1942 :a1942 :a1942. +:a1943 :a1943 :a1943. +:a1944 :a1944 :a1944. +:a1945 :a1945 :a1945. +:a1946 :a1946 :a1946. +:a1947 :a1947 :a1947. +:a1948 :a1948 :a1948. +:a1949 :a1949 :a1949. +:a1950 :a1950 :a1950. +:a1951 :a1951 :a1951. +:a1952 :a1952 :a1952. +:a1953 :a1953 :a1953. +:a1954 :a1954 :a1954. +:a1955 :a1955 :a1955. +:a1956 :a1956 :a1956. +:a1957 :a1957 :a1957. +:a1958 :a1958 :a1958. +:a1959 :a1959 :a1959. +:a1960 :a1960 :a1960. +:a1961 :a1961 :a1961. +:a1962 :a1962 :a1962. +:a1963 :a1963 :a1963. +:a1964 :a1964 :a1964. +:a1965 :a1965 :a1965. +:a1966 :a1966 :a1966. +:a1967 :a1967 :a1967. +:a1968 :a1968 :a1968. +:a1969 :a1969 :a1969. +:a1970 :a1970 :a1970. +:a1971 :a1971 :a1971. +:a1972 :a1972 :a1972. +:a1973 :a1973 :a1973. +:a1974 :a1974 :a1974. +:a1975 :a1975 :a1975. +:a1976 :a1976 :a1976. +:a1977 :a1977 :a1977. +:a1978 :a1978 :a1978. +:a1979 :a1979 :a1979. +:a1980 :a1980 :a1980. +:a1981 :a1981 :a1981. +:a1982 :a1982 :a1982. +:a1983 :a1983 :a1983. +:a1984 :a1984 :a1984. +:a1985 :a1985 :a1985. +:a1986 :a1986 :a1986. +:a1987 :a1987 :a1987. +:a1988 :a1988 :a1988. +:a1989 :a1989 :a1989. +:a1990 :a1990 :a1990. +:a1991 :a1991 :a1991. +:a1992 :a1992 :a1992. +:a1993 :a1993 :a1993. +:a1994 :a1994 :a1994. +:a1995 :a1995 :a1995. +:a1996 :a1996 :a1996. +:a1997 :a1997 :a1997. +:a1998 :a1998 :a1998. +:a1999 :a1999 :a1999. +:a2000 :a2000 :a2000. +:a2001 :a2001 :a2001. +:a2002 :a2002 :a2002. +:a2003 :a2003 :a2003. +:a2004 :a2004 :a2004. +:a2005 :a2005 :a2005. +:a2006 :a2006 :a2006. +:a2007 :a2007 :a2007. +:a2008 :a2008 :a2008. +:a2009 :a2009 :a2009. +:a2010 :a2010 :a2010. +:a2011 :a2011 :a2011. +:a2012 :a2012 :a2012. +:a2013 :a2013 :a2013. +:a2014 :a2014 :a2014. +:a2015 :a2015 :a2015. +:a2016 :a2016 :a2016. +:a2017 :a2017 :a2017. +:a2018 :a2018 :a2018. +:a2019 :a2019 :a2019. +:a2020 :a2020 :a2020. +:a2021 :a2021 :a2021. +:a2022 :a2022 :a2022. +:a2023 :a2023 :a2023. +:a2024 :a2024 :a2024. +:a2025 :a2025 :a2025. +:a2026 :a2026 :a2026. +:a2027 :a2027 :a2027. +:a2028 :a2028 :a2028. +:a2029 :a2029 :a2029. +:a2030 :a2030 :a2030. +:a2031 :a2031 :a2031. +:a2032 :a2032 :a2032. +:a2033 :a2033 :a2033. +:a2034 :a2034 :a2034. +:a2035 :a2035 :a2035. +:a2036 :a2036 :a2036. +:a2037 :a2037 :a2037. +:a2038 :a2038 :a2038. +:a2039 :a2039 :a2039. +:a2040 :a2040 :a2040. +:a2041 :a2041 :a2041. +:a2042 :a2042 :a2042. +:a2043 :a2043 :a2043. +:a2044 :a2044 :a2044. +:a2045 :a2045 :a2045. +:a2046 :a2046 :a2046. +:a2047 :a2047 :a2047. +:a2048 :a2048 :a2048. +:a2049 :a2049 :a2049. +:a2050 :a2050 :a2050. +:a2051 :a2051 :a2051. +:a2052 :a2052 :a2052. +:a2053 :a2053 :a2053. +:a2054 :a2054 :a2054. +:a2055 :a2055 :a2055. +:a2056 :a2056 :a2056. +:a2057 :a2057 :a2057. +:a2058 :a2058 :a2058. +:a2059 :a2059 :a2059. +:a2060 :a2060 :a2060. +:a2061 :a2061 :a2061. +:a2062 :a2062 :a2062. +:a2063 :a2063 :a2063. +:a2064 :a2064 :a2064. +:a2065 :a2065 :a2065. +:a2066 :a2066 :a2066. +:a2067 :a2067 :a2067. +:a2068 :a2068 :a2068. +:a2069 :a2069 :a2069. +:a2070 :a2070 :a2070. +:a2071 :a2071 :a2071. +:a2072 :a2072 :a2072. +:a2073 :a2073 :a2073. +:a2074 :a2074 :a2074. +:a2075 :a2075 :a2075. +:a2076 :a2076 :a2076. +:a2077 :a2077 :a2077. +:a2078 :a2078 :a2078. +:a2079 :a2079 :a2079. +:a2080 :a2080 :a2080. +:a2081 :a2081 :a2081. +:a2082 :a2082 :a2082. +:a2083 :a2083 :a2083. +:a2084 :a2084 :a2084. +:a2085 :a2085 :a2085. +:a2086 :a2086 :a2086. +:a2087 :a2087 :a2087. +:a2088 :a2088 :a2088. +:a2089 :a2089 :a2089. +:a2090 :a2090 :a2090. +:a2091 :a2091 :a2091. +:a2092 :a2092 :a2092. +:a2093 :a2093 :a2093. +:a2094 :a2094 :a2094. +:a2095 :a2095 :a2095. +:a2096 :a2096 :a2096. +:a2097 :a2097 :a2097. +:a2098 :a2098 :a2098. +:a2099 :a2099 :a2099. +:a2100 :a2100 :a2100. +:a2101 :a2101 :a2101. +:a2102 :a2102 :a2102. +:a2103 :a2103 :a2103. +:a2104 :a2104 :a2104. +:a2105 :a2105 :a2105. +:a2106 :a2106 :a2106. +:a2107 :a2107 :a2107. +:a2108 :a2108 :a2108. +:a2109 :a2109 :a2109. +:a2110 :a2110 :a2110. +:a2111 :a2111 :a2111. +:a2112 :a2112 :a2112. +:a2113 :a2113 :a2113. +:a2114 :a2114 :a2114. +:a2115 :a2115 :a2115. +:a2116 :a2116 :a2116. +:a2117 :a2117 :a2117. +:a2118 :a2118 :a2118. +:a2119 :a2119 :a2119. +:a2120 :a2120 :a2120. +:a2121 :a2121 :a2121. +:a2122 :a2122 :a2122. +:a2123 :a2123 :a2123. +:a2124 :a2124 :a2124. +:a2125 :a2125 :a2125. +:a2126 :a2126 :a2126. +:a2127 :a2127 :a2127. +:a2128 :a2128 :a2128. +:a2129 :a2129 :a2129. +:a2130 :a2130 :a2130. +:a2131 :a2131 :a2131. +:a2132 :a2132 :a2132. +:a2133 :a2133 :a2133. +:a2134 :a2134 :a2134. +:a2135 :a2135 :a2135. +:a2136 :a2136 :a2136. +:a2137 :a2137 :a2137. +:a2138 :a2138 :a2138. +:a2139 :a2139 :a2139. +:a2140 :a2140 :a2140. +:a2141 :a2141 :a2141. +:a2142 :a2142 :a2142. +:a2143 :a2143 :a2143. +:a2144 :a2144 :a2144. +:a2145 :a2145 :a2145. +:a2146 :a2146 :a2146. +:a2147 :a2147 :a2147. +:a2148 :a2148 :a2148. +:a2149 :a2149 :a2149. +:a2150 :a2150 :a2150. +:a2151 :a2151 :a2151. +:a2152 :a2152 :a2152. +:a2153 :a2153 :a2153. +:a2154 :a2154 :a2154. +:a2155 :a2155 :a2155. +:a2156 :a2156 :a2156. +:a2157 :a2157 :a2157. +:a2158 :a2158 :a2158. +:a2159 :a2159 :a2159. +:a2160 :a2160 :a2160. +:a2161 :a2161 :a2161. +:a2162 :a2162 :a2162. +:a2163 :a2163 :a2163. +:a2164 :a2164 :a2164. +:a2165 :a2165 :a2165. +:a2166 :a2166 :a2166. +:a2167 :a2167 :a2167. +:a2168 :a2168 :a2168. +:a2169 :a2169 :a2169. +:a2170 :a2170 :a2170. +:a2171 :a2171 :a2171. +:a2172 :a2172 :a2172. +:a2173 :a2173 :a2173. +:a2174 :a2174 :a2174. +:a2175 :a2175 :a2175. +:a2176 :a2176 :a2176. +:a2177 :a2177 :a2177. +:a2178 :a2178 :a2178. +:a2179 :a2179 :a2179. +:a2180 :a2180 :a2180. +:a2181 :a2181 :a2181. +:a2182 :a2182 :a2182. +:a2183 :a2183 :a2183. +:a2184 :a2184 :a2184. +:a2185 :a2185 :a2185. +:a2186 :a2186 :a2186. +:a2187 :a2187 :a2187. +:a2188 :a2188 :a2188. +:a2189 :a2189 :a2189. +:a2190 :a2190 :a2190. +:a2191 :a2191 :a2191. +:a2192 :a2192 :a2192. +:a2193 :a2193 :a2193. +:a2194 :a2194 :a2194. +:a2195 :a2195 :a2195. +:a2196 :a2196 :a2196. +:a2197 :a2197 :a2197. +:a2198 :a2198 :a2198. +:a2199 :a2199 :a2199. +:a2200 :a2200 :a2200. +:a2201 :a2201 :a2201. +:a2202 :a2202 :a2202. +:a2203 :a2203 :a2203. +:a2204 :a2204 :a2204. +:a2205 :a2205 :a2205. +:a2206 :a2206 :a2206. +:a2207 :a2207 :a2207. +:a2208 :a2208 :a2208. +:a2209 :a2209 :a2209. +:a2210 :a2210 :a2210. +:a2211 :a2211 :a2211. +:a2212 :a2212 :a2212. +:a2213 :a2213 :a2213. +:a2214 :a2214 :a2214. +:a2215 :a2215 :a2215. +:a2216 :a2216 :a2216. +:a2217 :a2217 :a2217. +:a2218 :a2218 :a2218. +:a2219 :a2219 :a2219. +:a2220 :a2220 :a2220. +:a2221 :a2221 :a2221. +:a2222 :a2222 :a2222. +:a2223 :a2223 :a2223. +:a2224 :a2224 :a2224. +:a2225 :a2225 :a2225. +:a2226 :a2226 :a2226. +:a2227 :a2227 :a2227. +:a2228 :a2228 :a2228. +:a2229 :a2229 :a2229. +:a2230 :a2230 :a2230. +:a2231 :a2231 :a2231. +:a2232 :a2232 :a2232. +:a2233 :a2233 :a2233. +:a2234 :a2234 :a2234. +:a2235 :a2235 :a2235. +:a2236 :a2236 :a2236. +:a2237 :a2237 :a2237. +:a2238 :a2238 :a2238. +:a2239 :a2239 :a2239. +:a2240 :a2240 :a2240. +:a2241 :a2241 :a2241. +:a2242 :a2242 :a2242. +:a2243 :a2243 :a2243. +:a2244 :a2244 :a2244. +:a2245 :a2245 :a2245. +:a2246 :a2246 :a2246. +:a2247 :a2247 :a2247. +:a2248 :a2248 :a2248. +:a2249 :a2249 :a2249. +:a2250 :a2250 :a2250. +:a2251 :a2251 :a2251. +:a2252 :a2252 :a2252. +:a2253 :a2253 :a2253. +:a2254 :a2254 :a2254. +:a2255 :a2255 :a2255. +:a2256 :a2256 :a2256. +:a2257 :a2257 :a2257. +:a2258 :a2258 :a2258. +:a2259 :a2259 :a2259. +:a2260 :a2260 :a2260. +:a2261 :a2261 :a2261. +:a2262 :a2262 :a2262. +:a2263 :a2263 :a2263. +:a2264 :a2264 :a2264. +:a2265 :a2265 :a2265. +:a2266 :a2266 :a2266. +:a2267 :a2267 :a2267. +:a2268 :a2268 :a2268. +:a2269 :a2269 :a2269. +:a2270 :a2270 :a2270. +:a2271 :a2271 :a2271. +:a2272 :a2272 :a2272. +:a2273 :a2273 :a2273. +:a2274 :a2274 :a2274. +:a2275 :a2275 :a2275. +:a2276 :a2276 :a2276. +:a2277 :a2277 :a2277. +:a2278 :a2278 :a2278. +:a2279 :a2279 :a2279. +:a2280 :a2280 :a2280. +:a2281 :a2281 :a2281. +:a2282 :a2282 :a2282. +:a2283 :a2283 :a2283. +:a2284 :a2284 :a2284. +:a2285 :a2285 :a2285. +:a2286 :a2286 :a2286. +:a2287 :a2287 :a2287. +:a2288 :a2288 :a2288. +:a2289 :a2289 :a2289. +:a2290 :a2290 :a2290. +:a2291 :a2291 :a2291. +:a2292 :a2292 :a2292. +:a2293 :a2293 :a2293. +:a2294 :a2294 :a2294. +:a2295 :a2295 :a2295. +:a2296 :a2296 :a2296. +:a2297 :a2297 :a2297. +:a2298 :a2298 :a2298. +:a2299 :a2299 :a2299. +:a2300 :a2300 :a2300. +:a2301 :a2301 :a2301. +:a2302 :a2302 :a2302. +:a2303 :a2303 :a2303. +:a2304 :a2304 :a2304. +:a2305 :a2305 :a2305. +:a2306 :a2306 :a2306. +:a2307 :a2307 :a2307. +:a2308 :a2308 :a2308. +:a2309 :a2309 :a2309. +:a2310 :a2310 :a2310. +:a2311 :a2311 :a2311. +:a2312 :a2312 :a2312. +:a2313 :a2313 :a2313. +:a2314 :a2314 :a2314. +:a2315 :a2315 :a2315. +:a2316 :a2316 :a2316. +:a2317 :a2317 :a2317. +:a2318 :a2318 :a2318. +:a2319 :a2319 :a2319. +:a2320 :a2320 :a2320. +:a2321 :a2321 :a2321. +:a2322 :a2322 :a2322. +:a2323 :a2323 :a2323. +:a2324 :a2324 :a2324. +:a2325 :a2325 :a2325. +:a2326 :a2326 :a2326. +:a2327 :a2327 :a2327. +:a2328 :a2328 :a2328. +:a2329 :a2329 :a2329. +:a2330 :a2330 :a2330. +:a2331 :a2331 :a2331. +:a2332 :a2332 :a2332. +:a2333 :a2333 :a2333. +:a2334 :a2334 :a2334. +:a2335 :a2335 :a2335. +:a2336 :a2336 :a2336. +:a2337 :a2337 :a2337. +:a2338 :a2338 :a2338. +:a2339 :a2339 :a2339. +:a2340 :a2340 :a2340. +:a2341 :a2341 :a2341. +:a2342 :a2342 :a2342. +:a2343 :a2343 :a2343. +:a2344 :a2344 :a2344. +:a2345 :a2345 :a2345. +:a2346 :a2346 :a2346. +:a2347 :a2347 :a2347. +:a2348 :a2348 :a2348. +:a2349 :a2349 :a2349. +:a2350 :a2350 :a2350. +:a2351 :a2351 :a2351. +:a2352 :a2352 :a2352. +:a2353 :a2353 :a2353. +:a2354 :a2354 :a2354. +:a2355 :a2355 :a2355. +:a2356 :a2356 :a2356. +:a2357 :a2357 :a2357. +:a2358 :a2358 :a2358. +:a2359 :a2359 :a2359. +:a2360 :a2360 :a2360. +:a2361 :a2361 :a2361. +:a2362 :a2362 :a2362. +:a2363 :a2363 :a2363. +:a2364 :a2364 :a2364. +:a2365 :a2365 :a2365. +:a2366 :a2366 :a2366. +:a2367 :a2367 :a2367. +:a2368 :a2368 :a2368. +:a2369 :a2369 :a2369. +:a2370 :a2370 :a2370. +:a2371 :a2371 :a2371. +:a2372 :a2372 :a2372. +:a2373 :a2373 :a2373. +:a2374 :a2374 :a2374. +:a2375 :a2375 :a2375. +:a2376 :a2376 :a2376. +:a2377 :a2377 :a2377. +:a2378 :a2378 :a2378. +:a2379 :a2379 :a2379. +:a2380 :a2380 :a2380. +:a2381 :a2381 :a2381. +:a2382 :a2382 :a2382. +:a2383 :a2383 :a2383. +:a2384 :a2384 :a2384. +:a2385 :a2385 :a2385. +:a2386 :a2386 :a2386. +:a2387 :a2387 :a2387. +:a2388 :a2388 :a2388. +:a2389 :a2389 :a2389. +:a2390 :a2390 :a2390. +:a2391 :a2391 :a2391. +:a2392 :a2392 :a2392. +:a2393 :a2393 :a2393. +:a2394 :a2394 :a2394. +:a2395 :a2395 :a2395. +:a2396 :a2396 :a2396. +:a2397 :a2397 :a2397. +:a2398 :a2398 :a2398. +:a2399 :a2399 :a2399. +:a2400 :a2400 :a2400. +:a2401 :a2401 :a2401. +:a2402 :a2402 :a2402. +:a2403 :a2403 :a2403. +:a2404 :a2404 :a2404. +:a2405 :a2405 :a2405. +:a2406 :a2406 :a2406. +:a2407 :a2407 :a2407. +:a2408 :a2408 :a2408. +:a2409 :a2409 :a2409. +:a2410 :a2410 :a2410. +:a2411 :a2411 :a2411. +:a2412 :a2412 :a2412. +:a2413 :a2413 :a2413. +:a2414 :a2414 :a2414. +:a2415 :a2415 :a2415. +:a2416 :a2416 :a2416. +:a2417 :a2417 :a2417. +:a2418 :a2418 :a2418. +:a2419 :a2419 :a2419. +:a2420 :a2420 :a2420. +:a2421 :a2421 :a2421. +:a2422 :a2422 :a2422. +:a2423 :a2423 :a2423. +:a2424 :a2424 :a2424. +:a2425 :a2425 :a2425. +:a2426 :a2426 :a2426. +:a2427 :a2427 :a2427. +:a2428 :a2428 :a2428. +:a2429 :a2429 :a2429. +:a2430 :a2430 :a2430. +:a2431 :a2431 :a2431. +:a2432 :a2432 :a2432. +:a2433 :a2433 :a2433. +:a2434 :a2434 :a2434. +:a2435 :a2435 :a2435. +:a2436 :a2436 :a2436. +:a2437 :a2437 :a2437. +:a2438 :a2438 :a2438. +:a2439 :a2439 :a2439. +:a2440 :a2440 :a2440. +:a2441 :a2441 :a2441. +:a2442 :a2442 :a2442. +:a2443 :a2443 :a2443. +:a2444 :a2444 :a2444. +:a2445 :a2445 :a2445. +:a2446 :a2446 :a2446. +:a2447 :a2447 :a2447. +:a2448 :a2448 :a2448. +:a2449 :a2449 :a2449. +:a2450 :a2450 :a2450. +:a2451 :a2451 :a2451. +:a2452 :a2452 :a2452. +:a2453 :a2453 :a2453. +:a2454 :a2454 :a2454. +:a2455 :a2455 :a2455. +:a2456 :a2456 :a2456. +:a2457 :a2457 :a2457. +:a2458 :a2458 :a2458. +:a2459 :a2459 :a2459. +:a2460 :a2460 :a2460. +:a2461 :a2461 :a2461. +:a2462 :a2462 :a2462. +:a2463 :a2463 :a2463. +:a2464 :a2464 :a2464. +:a2465 :a2465 :a2465. +:a2466 :a2466 :a2466. +:a2467 :a2467 :a2467. +:a2468 :a2468 :a2468. +:a2469 :a2469 :a2469. +:a2470 :a2470 :a2470. +:a2471 :a2471 :a2471. +:a2472 :a2472 :a2472. +:a2473 :a2473 :a2473. +:a2474 :a2474 :a2474. +:a2475 :a2475 :a2475. +:a2476 :a2476 :a2476. +:a2477 :a2477 :a2477. +:a2478 :a2478 :a2478. +:a2479 :a2479 :a2479. +:a2480 :a2480 :a2480. +:a2481 :a2481 :a2481. +:a2482 :a2482 :a2482. +:a2483 :a2483 :a2483. +:a2484 :a2484 :a2484. +:a2485 :a2485 :a2485. +:a2486 :a2486 :a2486. +:a2487 :a2487 :a2487. +:a2488 :a2488 :a2488. +:a2489 :a2489 :a2489. +:a2490 :a2490 :a2490. +:a2491 :a2491 :a2491. +:a2492 :a2492 :a2492. +:a2493 :a2493 :a2493. +:a2494 :a2494 :a2494. +:a2495 :a2495 :a2495. +:a2496 :a2496 :a2496. +:a2497 :a2497 :a2497. +:a2498 :a2498 :a2498. +:a2499 :a2499 :a2499. +:a2500 :a2500 :a2500. +:a2501 :a2501 :a2501. +:a2502 :a2502 :a2502. +:a2503 :a2503 :a2503. +:a2504 :a2504 :a2504. +:a2505 :a2505 :a2505. +:a2506 :a2506 :a2506. +:a2507 :a2507 :a2507. +:a2508 :a2508 :a2508. +:a2509 :a2509 :a2509. +:a2510 :a2510 :a2510. +:a2511 :a2511 :a2511. +:a2512 :a2512 :a2512. +:a2513 :a2513 :a2513. +:a2514 :a2514 :a2514. +:a2515 :a2515 :a2515. +:a2516 :a2516 :a2516. +:a2517 :a2517 :a2517. +:a2518 :a2518 :a2518. +:a2519 :a2519 :a2519. +:a2520 :a2520 :a2520. +:a2521 :a2521 :a2521. +:a2522 :a2522 :a2522. +:a2523 :a2523 :a2523. +:a2524 :a2524 :a2524. +:a2525 :a2525 :a2525. +:a2526 :a2526 :a2526. +:a2527 :a2527 :a2527. +:a2528 :a2528 :a2528. +:a2529 :a2529 :a2529. +:a2530 :a2530 :a2530. +:a2531 :a2531 :a2531. +:a2532 :a2532 :a2532. +:a2533 :a2533 :a2533. +:a2534 :a2534 :a2534. +:a2535 :a2535 :a2535. +:a2536 :a2536 :a2536. +:a2537 :a2537 :a2537. +:a2538 :a2538 :a2538. +:a2539 :a2539 :a2539. +:a2540 :a2540 :a2540. +:a2541 :a2541 :a2541. +:a2542 :a2542 :a2542. +:a2543 :a2543 :a2543. +:a2544 :a2544 :a2544. +:a2545 :a2545 :a2545. +:a2546 :a2546 :a2546. +:a2547 :a2547 :a2547. +:a2548 :a2548 :a2548. +:a2549 :a2549 :a2549. +:a2550 :a2550 :a2550. +:a2551 :a2551 :a2551. +:a2552 :a2552 :a2552. +:a2553 :a2553 :a2553. +:a2554 :a2554 :a2554. +:a2555 :a2555 :a2555. +:a2556 :a2556 :a2556. +:a2557 :a2557 :a2557. +:a2558 :a2558 :a2558. +:a2559 :a2559 :a2559. +:a2560 :a2560 :a2560. +:a2561 :a2561 :a2561. +:a2562 :a2562 :a2562. +:a2563 :a2563 :a2563. +:a2564 :a2564 :a2564. +:a2565 :a2565 :a2565. +:a2566 :a2566 :a2566. +:a2567 :a2567 :a2567. +:a2568 :a2568 :a2568. +:a2569 :a2569 :a2569. +:a2570 :a2570 :a2570. +:a2571 :a2571 :a2571. +:a2572 :a2572 :a2572. +:a2573 :a2573 :a2573. +:a2574 :a2574 :a2574. +:a2575 :a2575 :a2575. +:a2576 :a2576 :a2576. +:a2577 :a2577 :a2577. +:a2578 :a2578 :a2578. +:a2579 :a2579 :a2579. +:a2580 :a2580 :a2580. +:a2581 :a2581 :a2581. +:a2582 :a2582 :a2582. +:a2583 :a2583 :a2583. +:a2584 :a2584 :a2584. +:a2585 :a2585 :a2585. +:a2586 :a2586 :a2586. +:a2587 :a2587 :a2587. +:a2588 :a2588 :a2588. +:a2589 :a2589 :a2589. +:a2590 :a2590 :a2590. +:a2591 :a2591 :a2591. +:a2592 :a2592 :a2592. +:a2593 :a2593 :a2593. +:a2594 :a2594 :a2594. +:a2595 :a2595 :a2595. +:a2596 :a2596 :a2596. +:a2597 :a2597 :a2597. +:a2598 :a2598 :a2598. +:a2599 :a2599 :a2599. +:a2600 :a2600 :a2600. +:a2601 :a2601 :a2601. +:a2602 :a2602 :a2602. +:a2603 :a2603 :a2603. +:a2604 :a2604 :a2604. +:a2605 :a2605 :a2605. +:a2606 :a2606 :a2606. +:a2607 :a2607 :a2607. +:a2608 :a2608 :a2608. +:a2609 :a2609 :a2609. +:a2610 :a2610 :a2610. +:a2611 :a2611 :a2611. +:a2612 :a2612 :a2612. +:a2613 :a2613 :a2613. +:a2614 :a2614 :a2614. +:a2615 :a2615 :a2615. +:a2616 :a2616 :a2616. +:a2617 :a2617 :a2617. +:a2618 :a2618 :a2618. +:a2619 :a2619 :a2619. +:a2620 :a2620 :a2620. +:a2621 :a2621 :a2621. +:a2622 :a2622 :a2622. +:a2623 :a2623 :a2623. +:a2624 :a2624 :a2624. +:a2625 :a2625 :a2625. +:a2626 :a2626 :a2626. +:a2627 :a2627 :a2627. +:a2628 :a2628 :a2628. +:a2629 :a2629 :a2629. +:a2630 :a2630 :a2630. +:a2631 :a2631 :a2631. +:a2632 :a2632 :a2632. +:a2633 :a2633 :a2633. +:a2634 :a2634 :a2634. +:a2635 :a2635 :a2635. +:a2636 :a2636 :a2636. +:a2637 :a2637 :a2637. +:a2638 :a2638 :a2638. +:a2639 :a2639 :a2639. +:a2640 :a2640 :a2640. +:a2641 :a2641 :a2641. +:a2642 :a2642 :a2642. +:a2643 :a2643 :a2643. +:a2644 :a2644 :a2644. +:a2645 :a2645 :a2645. +:a2646 :a2646 :a2646. +:a2647 :a2647 :a2647. +:a2648 :a2648 :a2648. +:a2649 :a2649 :a2649. +:a2650 :a2650 :a2650. +:a2651 :a2651 :a2651. +:a2652 :a2652 :a2652. +:a2653 :a2653 :a2653. +:a2654 :a2654 :a2654. +:a2655 :a2655 :a2655. +:a2656 :a2656 :a2656. +:a2657 :a2657 :a2657. +:a2658 :a2658 :a2658. +:a2659 :a2659 :a2659. +:a2660 :a2660 :a2660. +:a2661 :a2661 :a2661. +:a2662 :a2662 :a2662. +:a2663 :a2663 :a2663. +:a2664 :a2664 :a2664. +:a2665 :a2665 :a2665. +:a2666 :a2666 :a2666. +:a2667 :a2667 :a2667. +:a2668 :a2668 :a2668. +:a2669 :a2669 :a2669. +:a2670 :a2670 :a2670. +:a2671 :a2671 :a2671. +:a2672 :a2672 :a2672. +:a2673 :a2673 :a2673. +:a2674 :a2674 :a2674. +:a2675 :a2675 :a2675. +:a2676 :a2676 :a2676. +:a2677 :a2677 :a2677. +:a2678 :a2678 :a2678. +:a2679 :a2679 :a2679. +:a2680 :a2680 :a2680. +:a2681 :a2681 :a2681. +:a2682 :a2682 :a2682. +:a2683 :a2683 :a2683. +:a2684 :a2684 :a2684. +:a2685 :a2685 :a2685. +:a2686 :a2686 :a2686. +:a2687 :a2687 :a2687. +:a2688 :a2688 :a2688. +:a2689 :a2689 :a2689. +:a2690 :a2690 :a2690. +:a2691 :a2691 :a2691. +:a2692 :a2692 :a2692. +:a2693 :a2693 :a2693. +:a2694 :a2694 :a2694. +:a2695 :a2695 :a2695. +:a2696 :a2696 :a2696. +:a2697 :a2697 :a2697. +:a2698 :a2698 :a2698. +:a2699 :a2699 :a2699. +:a2700 :a2700 :a2700. +:a2701 :a2701 :a2701. +:a2702 :a2702 :a2702. +:a2703 :a2703 :a2703. +:a2704 :a2704 :a2704. +:a2705 :a2705 :a2705. +:a2706 :a2706 :a2706. +:a2707 :a2707 :a2707. +:a2708 :a2708 :a2708. +:a2709 :a2709 :a2709. +:a2710 :a2710 :a2710. +:a2711 :a2711 :a2711. +:a2712 :a2712 :a2712. +:a2713 :a2713 :a2713. +:a2714 :a2714 :a2714. +:a2715 :a2715 :a2715. +:a2716 :a2716 :a2716. +:a2717 :a2717 :a2717. +:a2718 :a2718 :a2718. +:a2719 :a2719 :a2719. +:a2720 :a2720 :a2720. +:a2721 :a2721 :a2721. +:a2722 :a2722 :a2722. +:a2723 :a2723 :a2723. +:a2724 :a2724 :a2724. +:a2725 :a2725 :a2725. +:a2726 :a2726 :a2726. +:a2727 :a2727 :a2727. +:a2728 :a2728 :a2728. +:a2729 :a2729 :a2729. +:a2730 :a2730 :a2730. +:a2731 :a2731 :a2731. +:a2732 :a2732 :a2732. +:a2733 :a2733 :a2733. +:a2734 :a2734 :a2734. +:a2735 :a2735 :a2735. +:a2736 :a2736 :a2736. +:a2737 :a2737 :a2737. +:a2738 :a2738 :a2738. +:a2739 :a2739 :a2739. +:a2740 :a2740 :a2740. +:a2741 :a2741 :a2741. +:a2742 :a2742 :a2742. +:a2743 :a2743 :a2743. +:a2744 :a2744 :a2744. +:a2745 :a2745 :a2745. +:a2746 :a2746 :a2746. +:a2747 :a2747 :a2747. +:a2748 :a2748 :a2748. +:a2749 :a2749 :a2749. +:a2750 :a2750 :a2750. +:a2751 :a2751 :a2751. +:a2752 :a2752 :a2752. +:a2753 :a2753 :a2753. +:a2754 :a2754 :a2754. +:a2755 :a2755 :a2755. +:a2756 :a2756 :a2756. +:a2757 :a2757 :a2757. +:a2758 :a2758 :a2758. +:a2759 :a2759 :a2759. +:a2760 :a2760 :a2760. +:a2761 :a2761 :a2761. +:a2762 :a2762 :a2762. +:a2763 :a2763 :a2763. +:a2764 :a2764 :a2764. +:a2765 :a2765 :a2765. +:a2766 :a2766 :a2766. +:a2767 :a2767 :a2767. +:a2768 :a2768 :a2768. +:a2769 :a2769 :a2769. +:a2770 :a2770 :a2770. +:a2771 :a2771 :a2771. +:a2772 :a2772 :a2772. +:a2773 :a2773 :a2773. +:a2774 :a2774 :a2774. +:a2775 :a2775 :a2775. +:a2776 :a2776 :a2776. +:a2777 :a2777 :a2777. +:a2778 :a2778 :a2778. +:a2779 :a2779 :a2779. +:a2780 :a2780 :a2780. +:a2781 :a2781 :a2781. +:a2782 :a2782 :a2782. +:a2783 :a2783 :a2783. +:a2784 :a2784 :a2784. +:a2785 :a2785 :a2785. +:a2786 :a2786 :a2786. +:a2787 :a2787 :a2787. +:a2788 :a2788 :a2788. +:a2789 :a2789 :a2789. +:a2790 :a2790 :a2790. +:a2791 :a2791 :a2791. +:a2792 :a2792 :a2792. +:a2793 :a2793 :a2793. +:a2794 :a2794 :a2794. +:a2795 :a2795 :a2795. +:a2796 :a2796 :a2796. +:a2797 :a2797 :a2797. +:a2798 :a2798 :a2798. +:a2799 :a2799 :a2799. +:a2800 :a2800 :a2800. +:a2801 :a2801 :a2801. +:a2802 :a2802 :a2802. +:a2803 :a2803 :a2803. +:a2804 :a2804 :a2804. +:a2805 :a2805 :a2805. +:a2806 :a2806 :a2806. +:a2807 :a2807 :a2807. +:a2808 :a2808 :a2808. +:a2809 :a2809 :a2809. +:a2810 :a2810 :a2810. +:a2811 :a2811 :a2811. +:a2812 :a2812 :a2812. +:a2813 :a2813 :a2813. +:a2814 :a2814 :a2814. +:a2815 :a2815 :a2815. +:a2816 :a2816 :a2816. +:a2817 :a2817 :a2817. +:a2818 :a2818 :a2818. +:a2819 :a2819 :a2819. +:a2820 :a2820 :a2820. +:a2821 :a2821 :a2821. +:a2822 :a2822 :a2822. +:a2823 :a2823 :a2823. +:a2824 :a2824 :a2824. +:a2825 :a2825 :a2825. +:a2826 :a2826 :a2826. +:a2827 :a2827 :a2827. +:a2828 :a2828 :a2828. +:a2829 :a2829 :a2829. +:a2830 :a2830 :a2830. +:a2831 :a2831 :a2831. +:a2832 :a2832 :a2832. +:a2833 :a2833 :a2833. +:a2834 :a2834 :a2834. +:a2835 :a2835 :a2835. +:a2836 :a2836 :a2836. +:a2837 :a2837 :a2837. +:a2838 :a2838 :a2838. +:a2839 :a2839 :a2839. +:a2840 :a2840 :a2840. +:a2841 :a2841 :a2841. +:a2842 :a2842 :a2842. +:a2843 :a2843 :a2843. +:a2844 :a2844 :a2844. +:a2845 :a2845 :a2845. +:a2846 :a2846 :a2846. +:a2847 :a2847 :a2847. +:a2848 :a2848 :a2848. +:a2849 :a2849 :a2849. +:a2850 :a2850 :a2850. +:a2851 :a2851 :a2851. +:a2852 :a2852 :a2852. +:a2853 :a2853 :a2853. +:a2854 :a2854 :a2854. +:a2855 :a2855 :a2855. +:a2856 :a2856 :a2856. +:a2857 :a2857 :a2857. +:a2858 :a2858 :a2858. +:a2859 :a2859 :a2859. +:a2860 :a2860 :a2860. +:a2861 :a2861 :a2861. +:a2862 :a2862 :a2862. +:a2863 :a2863 :a2863. +:a2864 :a2864 :a2864. +:a2865 :a2865 :a2865. +:a2866 :a2866 :a2866. +:a2867 :a2867 :a2867. +:a2868 :a2868 :a2868. +:a2869 :a2869 :a2869. +:a2870 :a2870 :a2870. +:a2871 :a2871 :a2871. +:a2872 :a2872 :a2872. +:a2873 :a2873 :a2873. +:a2874 :a2874 :a2874. +:a2875 :a2875 :a2875. +:a2876 :a2876 :a2876. +:a2877 :a2877 :a2877. +:a2878 :a2878 :a2878. +:a2879 :a2879 :a2879. +:a2880 :a2880 :a2880. +:a2881 :a2881 :a2881. +:a2882 :a2882 :a2882. +:a2883 :a2883 :a2883. +:a2884 :a2884 :a2884. +:a2885 :a2885 :a2885. +:a2886 :a2886 :a2886. +:a2887 :a2887 :a2887. +:a2888 :a2888 :a2888. +:a2889 :a2889 :a2889. +:a2890 :a2890 :a2890. +:a2891 :a2891 :a2891. +:a2892 :a2892 :a2892. +:a2893 :a2893 :a2893. +:a2894 :a2894 :a2894. +:a2895 :a2895 :a2895. +:a2896 :a2896 :a2896. +:a2897 :a2897 :a2897. +:a2898 :a2898 :a2898. +:a2899 :a2899 :a2899. +:a2900 :a2900 :a2900. +:a2901 :a2901 :a2901. +:a2902 :a2902 :a2902. +:a2903 :a2903 :a2903. +:a2904 :a2904 :a2904. +:a2905 :a2905 :a2905. +:a2906 :a2906 :a2906. +:a2907 :a2907 :a2907. +:a2908 :a2908 :a2908. +:a2909 :a2909 :a2909. +:a2910 :a2910 :a2910. +:a2911 :a2911 :a2911. +:a2912 :a2912 :a2912. +:a2913 :a2913 :a2913. +:a2914 :a2914 :a2914. +:a2915 :a2915 :a2915. +:a2916 :a2916 :a2916. +:a2917 :a2917 :a2917. +:a2918 :a2918 :a2918. +:a2919 :a2919 :a2919. +:a2920 :a2920 :a2920. +:a2921 :a2921 :a2921. +:a2922 :a2922 :a2922. +:a2923 :a2923 :a2923. +:a2924 :a2924 :a2924. +:a2925 :a2925 :a2925. +:a2926 :a2926 :a2926. +:a2927 :a2927 :a2927. +:a2928 :a2928 :a2928. +:a2929 :a2929 :a2929. +:a2930 :a2930 :a2930. +:a2931 :a2931 :a2931. +:a2932 :a2932 :a2932. +:a2933 :a2933 :a2933. +:a2934 :a2934 :a2934. +:a2935 :a2935 :a2935. +:a2936 :a2936 :a2936. +:a2937 :a2937 :a2937. +:a2938 :a2938 :a2938. +:a2939 :a2939 :a2939. +:a2940 :a2940 :a2940. +:a2941 :a2941 :a2941. +:a2942 :a2942 :a2942. +:a2943 :a2943 :a2943. +:a2944 :a2944 :a2944. +:a2945 :a2945 :a2945. +:a2946 :a2946 :a2946. +:a2947 :a2947 :a2947. +:a2948 :a2948 :a2948. +:a2949 :a2949 :a2949. +:a2950 :a2950 :a2950. +:a2951 :a2951 :a2951. +:a2952 :a2952 :a2952. +:a2953 :a2953 :a2953. +:a2954 :a2954 :a2954. +:a2955 :a2955 :a2955. +:a2956 :a2956 :a2956. +:a2957 :a2957 :a2957. +:a2958 :a2958 :a2958. +:a2959 :a2959 :a2959. +:a2960 :a2960 :a2960. +:a2961 :a2961 :a2961. +:a2962 :a2962 :a2962. +:a2963 :a2963 :a2963. +:a2964 :a2964 :a2964. +:a2965 :a2965 :a2965. +:a2966 :a2966 :a2966. +:a2967 :a2967 :a2967. +:a2968 :a2968 :a2968. +:a2969 :a2969 :a2969. +:a2970 :a2970 :a2970. +:a2971 :a2971 :a2971. +:a2972 :a2972 :a2972. +:a2973 :a2973 :a2973. +:a2974 :a2974 :a2974. +:a2975 :a2975 :a2975. +:a2976 :a2976 :a2976. +:a2977 :a2977 :a2977. +:a2978 :a2978 :a2978. +:a2979 :a2979 :a2979. +:a2980 :a2980 :a2980. +:a2981 :a2981 :a2981. +:a2982 :a2982 :a2982. +:a2983 :a2983 :a2983. +:a2984 :a2984 :a2984. +:a2985 :a2985 :a2985. +:a2986 :a2986 :a2986. +:a2987 :a2987 :a2987. +:a2988 :a2988 :a2988. +:a2989 :a2989 :a2989. +:a2990 :a2990 :a2990. +:a2991 :a2991 :a2991. +:a2992 :a2992 :a2992. +:a2993 :a2993 :a2993. +:a2994 :a2994 :a2994. +:a2995 :a2995 :a2995. +:a2996 :a2996 :a2996. +:a2997 :a2997 :a2997. +:a2998 :a2998 :a2998. +:a2999 :a2999 :a2999. +:a3000 :a3000 :a3000. +:a3001 :a3001 :a3001. +:a3002 :a3002 :a3002. +:a3003 :a3003 :a3003. +:a3004 :a3004 :a3004. +:a3005 :a3005 :a3005. +:a3006 :a3006 :a3006. +:a3007 :a3007 :a3007. +:a3008 :a3008 :a3008. +:a3009 :a3009 :a3009. +:a3010 :a3010 :a3010. +:a3011 :a3011 :a3011. +:a3012 :a3012 :a3012. +:a3013 :a3013 :a3013. +:a3014 :a3014 :a3014. +:a3015 :a3015 :a3015. +:a3016 :a3016 :a3016. +:a3017 :a3017 :a3017. +:a3018 :a3018 :a3018. +:a3019 :a3019 :a3019. +:a3020 :a3020 :a3020. +:a3021 :a3021 :a3021. +:a3022 :a3022 :a3022. +:a3023 :a3023 :a3023. +:a3024 :a3024 :a3024. +:a3025 :a3025 :a3025. +:a3026 :a3026 :a3026. +:a3027 :a3027 :a3027. +:a3028 :a3028 :a3028. +:a3029 :a3029 :a3029. +:a3030 :a3030 :a3030. +:a3031 :a3031 :a3031. +:a3032 :a3032 :a3032. +:a3033 :a3033 :a3033. +:a3034 :a3034 :a3034. +:a3035 :a3035 :a3035. +:a3036 :a3036 :a3036. +:a3037 :a3037 :a3037. +:a3038 :a3038 :a3038. +:a3039 :a3039 :a3039. +:a3040 :a3040 :a3040. +:a3041 :a3041 :a3041. +:a3042 :a3042 :a3042. +:a3043 :a3043 :a3043. +:a3044 :a3044 :a3044. +:a3045 :a3045 :a3045. +:a3046 :a3046 :a3046. +:a3047 :a3047 :a3047. +:a3048 :a3048 :a3048. +:a3049 :a3049 :a3049. +:a3050 :a3050 :a3050. +:a3051 :a3051 :a3051. +:a3052 :a3052 :a3052. +:a3053 :a3053 :a3053. +:a3054 :a3054 :a3054. +:a3055 :a3055 :a3055. +:a3056 :a3056 :a3056. +:a3057 :a3057 :a3057. +:a3058 :a3058 :a3058. +:a3059 :a3059 :a3059. +:a3060 :a3060 :a3060. +:a3061 :a3061 :a3061. +:a3062 :a3062 :a3062. +:a3063 :a3063 :a3063. +:a3064 :a3064 :a3064. +:a3065 :a3065 :a3065. +:a3066 :a3066 :a3066. +:a3067 :a3067 :a3067. +:a3068 :a3068 :a3068. +:a3069 :a3069 :a3069. +:a3070 :a3070 :a3070. +:a3071 :a3071 :a3071. +:a3072 :a3072 :a3072. +:a3073 :a3073 :a3073. +:a3074 :a3074 :a3074. +:a3075 :a3075 :a3075. +:a3076 :a3076 :a3076. +:a3077 :a3077 :a3077. +:a3078 :a3078 :a3078. +:a3079 :a3079 :a3079. +:a3080 :a3080 :a3080. +:a3081 :a3081 :a3081. +:a3082 :a3082 :a3082. +:a3083 :a3083 :a3083. +:a3084 :a3084 :a3084. +:a3085 :a3085 :a3085. +:a3086 :a3086 :a3086. +:a3087 :a3087 :a3087. +:a3088 :a3088 :a3088. +:a3089 :a3089 :a3089. +:a3090 :a3090 :a3090. +:a3091 :a3091 :a3091. +:a3092 :a3092 :a3092. +:a3093 :a3093 :a3093. +:a3094 :a3094 :a3094. +:a3095 :a3095 :a3095. +:a3096 :a3096 :a3096. +:a3097 :a3097 :a3097. +:a3098 :a3098 :a3098. +:a3099 :a3099 :a3099. +:a3100 :a3100 :a3100. +:a3101 :a3101 :a3101. +:a3102 :a3102 :a3102. +:a3103 :a3103 :a3103. +:a3104 :a3104 :a3104. +:a3105 :a3105 :a3105. +:a3106 :a3106 :a3106. +:a3107 :a3107 :a3107. +:a3108 :a3108 :a3108. +:a3109 :a3109 :a3109. +:a3110 :a3110 :a3110. +:a3111 :a3111 :a3111. +:a3112 :a3112 :a3112. +:a3113 :a3113 :a3113. +:a3114 :a3114 :a3114. +:a3115 :a3115 :a3115. +:a3116 :a3116 :a3116. +:a3117 :a3117 :a3117. +:a3118 :a3118 :a3118. +:a3119 :a3119 :a3119. +:a3120 :a3120 :a3120. +:a3121 :a3121 :a3121. +:a3122 :a3122 :a3122. +:a3123 :a3123 :a3123. +:a3124 :a3124 :a3124. +:a3125 :a3125 :a3125. +:a3126 :a3126 :a3126. +:a3127 :a3127 :a3127. +:a3128 :a3128 :a3128. +:a3129 :a3129 :a3129. +:a3130 :a3130 :a3130. +:a3131 :a3131 :a3131. +:a3132 :a3132 :a3132. +:a3133 :a3133 :a3133. +:a3134 :a3134 :a3134. +:a3135 :a3135 :a3135. +:a3136 :a3136 :a3136. +:a3137 :a3137 :a3137. +:a3138 :a3138 :a3138. +:a3139 :a3139 :a3139. +:a3140 :a3140 :a3140. +:a3141 :a3141 :a3141. +:a3142 :a3142 :a3142. +:a3143 :a3143 :a3143. +:a3144 :a3144 :a3144. +:a3145 :a3145 :a3145. +:a3146 :a3146 :a3146. +:a3147 :a3147 :a3147. +:a3148 :a3148 :a3148. +:a3149 :a3149 :a3149. +:a3150 :a3150 :a3150. +:a3151 :a3151 :a3151. +:a3152 :a3152 :a3152. +:a3153 :a3153 :a3153. +:a3154 :a3154 :a3154. +:a3155 :a3155 :a3155. +:a3156 :a3156 :a3156. +:a3157 :a3157 :a3157. +:a3158 :a3158 :a3158. +:a3159 :a3159 :a3159. +:a3160 :a3160 :a3160. +:a3161 :a3161 :a3161. +:a3162 :a3162 :a3162. +:a3163 :a3163 :a3163. +:a3164 :a3164 :a3164. +:a3165 :a3165 :a3165. +:a3166 :a3166 :a3166. +:a3167 :a3167 :a3167. +:a3168 :a3168 :a3168. +:a3169 :a3169 :a3169. +:a3170 :a3170 :a3170. +:a3171 :a3171 :a3171. +:a3172 :a3172 :a3172. +:a3173 :a3173 :a3173. +:a3174 :a3174 :a3174. +:a3175 :a3175 :a3175. +:a3176 :a3176 :a3176. +:a3177 :a3177 :a3177. +:a3178 :a3178 :a3178. +:a3179 :a3179 :a3179. +:a3180 :a3180 :a3180. +:a3181 :a3181 :a3181. +:a3182 :a3182 :a3182. +:a3183 :a3183 :a3183. +:a3184 :a3184 :a3184. +:a3185 :a3185 :a3185. +:a3186 :a3186 :a3186. +:a3187 :a3187 :a3187. +:a3188 :a3188 :a3188. +:a3189 :a3189 :a3189. +:a3190 :a3190 :a3190. +:a3191 :a3191 :a3191. +:a3192 :a3192 :a3192. +:a3193 :a3193 :a3193. +:a3194 :a3194 :a3194. +:a3195 :a3195 :a3195. +:a3196 :a3196 :a3196. +:a3197 :a3197 :a3197. +:a3198 :a3198 :a3198. +:a3199 :a3199 :a3199. +:a3200 :a3200 :a3200. +:a3201 :a3201 :a3201. +:a3202 :a3202 :a3202. +:a3203 :a3203 :a3203. +:a3204 :a3204 :a3204. +:a3205 :a3205 :a3205. +:a3206 :a3206 :a3206. +:a3207 :a3207 :a3207. +:a3208 :a3208 :a3208. +:a3209 :a3209 :a3209. +:a3210 :a3210 :a3210. +:a3211 :a3211 :a3211. +:a3212 :a3212 :a3212. +:a3213 :a3213 :a3213. +:a3214 :a3214 :a3214. +:a3215 :a3215 :a3215. +:a3216 :a3216 :a3216. +:a3217 :a3217 :a3217. +:a3218 :a3218 :a3218. +:a3219 :a3219 :a3219. +:a3220 :a3220 :a3220. +:a3221 :a3221 :a3221. +:a3222 :a3222 :a3222. +:a3223 :a3223 :a3223. +:a3224 :a3224 :a3224. +:a3225 :a3225 :a3225. +:a3226 :a3226 :a3226. +:a3227 :a3227 :a3227. +:a3228 :a3228 :a3228. +:a3229 :a3229 :a3229. +:a3230 :a3230 :a3230. +:a3231 :a3231 :a3231. +:a3232 :a3232 :a3232. +:a3233 :a3233 :a3233. +:a3234 :a3234 :a3234. +:a3235 :a3235 :a3235. +:a3236 :a3236 :a3236. +:a3237 :a3237 :a3237. +:a3238 :a3238 :a3238. +:a3239 :a3239 :a3239. +:a3240 :a3240 :a3240. +:a3241 :a3241 :a3241. +:a3242 :a3242 :a3242. +:a3243 :a3243 :a3243. +:a3244 :a3244 :a3244. +:a3245 :a3245 :a3245. +:a3246 :a3246 :a3246. +:a3247 :a3247 :a3247. +:a3248 :a3248 :a3248. +:a3249 :a3249 :a3249. +:a3250 :a3250 :a3250. +:a3251 :a3251 :a3251. +:a3252 :a3252 :a3252. +:a3253 :a3253 :a3253. +:a3254 :a3254 :a3254. +:a3255 :a3255 :a3255. +:a3256 :a3256 :a3256. +:a3257 :a3257 :a3257. +:a3258 :a3258 :a3258. +:a3259 :a3259 :a3259. +:a3260 :a3260 :a3260. +:a3261 :a3261 :a3261. +:a3262 :a3262 :a3262. +:a3263 :a3263 :a3263. +:a3264 :a3264 :a3264. +:a3265 :a3265 :a3265. +:a3266 :a3266 :a3266. +:a3267 :a3267 :a3267. +:a3268 :a3268 :a3268. +:a3269 :a3269 :a3269. +:a3270 :a3270 :a3270. +:a3271 :a3271 :a3271. +:a3272 :a3272 :a3272. +:a3273 :a3273 :a3273. +:a3274 :a3274 :a3274. +:a3275 :a3275 :a3275. +:a3276 :a3276 :a3276. +:a3277 :a3277 :a3277. +:a3278 :a3278 :a3278. +:a3279 :a3279 :a3279. +:a3280 :a3280 :a3280. +:a3281 :a3281 :a3281. +:a3282 :a3282 :a3282. +:a3283 :a3283 :a3283. +:a3284 :a3284 :a3284. +:a3285 :a3285 :a3285. +:a3286 :a3286 :a3286. +:a3287 :a3287 :a3287. +:a3288 :a3288 :a3288. +:a3289 :a3289 :a3289. +:a3290 :a3290 :a3290. +:a3291 :a3291 :a3291. +:a3292 :a3292 :a3292. +:a3293 :a3293 :a3293. +:a3294 :a3294 :a3294. +:a3295 :a3295 :a3295. +:a3296 :a3296 :a3296. +:a3297 :a3297 :a3297. +:a3298 :a3298 :a3298. +:a3299 :a3299 :a3299. +:a3300 :a3300 :a3300. +:a3301 :a3301 :a3301. +:a3302 :a3302 :a3302. +:a3303 :a3303 :a3303. +:a3304 :a3304 :a3304. +:a3305 :a3305 :a3305. +:a3306 :a3306 :a3306. +:a3307 :a3307 :a3307. +:a3308 :a3308 :a3308. +:a3309 :a3309 :a3309. +:a3310 :a3310 :a3310. +:a3311 :a3311 :a3311. +:a3312 :a3312 :a3312. +:a3313 :a3313 :a3313. +:a3314 :a3314 :a3314. +:a3315 :a3315 :a3315. +:a3316 :a3316 :a3316. +:a3317 :a3317 :a3317. +:a3318 :a3318 :a3318. +:a3319 :a3319 :a3319. +:a3320 :a3320 :a3320. +:a3321 :a3321 :a3321. +:a3322 :a3322 :a3322. +:a3323 :a3323 :a3323. +:a3324 :a3324 :a3324. +:a3325 :a3325 :a3325. +:a3326 :a3326 :a3326. +:a3327 :a3327 :a3327. +:a3328 :a3328 :a3328. +:a3329 :a3329 :a3329. +:a3330 :a3330 :a3330. +:a3331 :a3331 :a3331. +:a3332 :a3332 :a3332. +:a3333 :a3333 :a3333. +:a3334 :a3334 :a3334. +:a3335 :a3335 :a3335. +:a3336 :a3336 :a3336. +:a3337 :a3337 :a3337. +:a3338 :a3338 :a3338. +:a3339 :a3339 :a3339. +:a3340 :a3340 :a3340. +:a3341 :a3341 :a3341. +:a3342 :a3342 :a3342. +:a3343 :a3343 :a3343. +:a3344 :a3344 :a3344. +:a3345 :a3345 :a3345. +:a3346 :a3346 :a3346. +:a3347 :a3347 :a3347. +:a3348 :a3348 :a3348. +:a3349 :a3349 :a3349. +:a3350 :a3350 :a3350. +:a3351 :a3351 :a3351. +:a3352 :a3352 :a3352. +:a3353 :a3353 :a3353. +:a3354 :a3354 :a3354. +:a3355 :a3355 :a3355. +:a3356 :a3356 :a3356. +:a3357 :a3357 :a3357. +:a3358 :a3358 :a3358. +:a3359 :a3359 :a3359. +:a3360 :a3360 :a3360. +:a3361 :a3361 :a3361. +:a3362 :a3362 :a3362. +:a3363 :a3363 :a3363. +:a3364 :a3364 :a3364. +:a3365 :a3365 :a3365. +:a3366 :a3366 :a3366. +:a3367 :a3367 :a3367. +:a3368 :a3368 :a3368. +:a3369 :a3369 :a3369. +:a3370 :a3370 :a3370. +:a3371 :a3371 :a3371. +:a3372 :a3372 :a3372. +:a3373 :a3373 :a3373. +:a3374 :a3374 :a3374. +:a3375 :a3375 :a3375. +:a3376 :a3376 :a3376. +:a3377 :a3377 :a3377. +:a3378 :a3378 :a3378. +:a3379 :a3379 :a3379. +:a3380 :a3380 :a3380. +:a3381 :a3381 :a3381. +:a3382 :a3382 :a3382. +:a3383 :a3383 :a3383. +:a3384 :a3384 :a3384. +:a3385 :a3385 :a3385. +:a3386 :a3386 :a3386. +:a3387 :a3387 :a3387. +:a3388 :a3388 :a3388. +:a3389 :a3389 :a3389. +:a3390 :a3390 :a3390. +:a3391 :a3391 :a3391. +:a3392 :a3392 :a3392. +:a3393 :a3393 :a3393. +:a3394 :a3394 :a3394. +:a3395 :a3395 :a3395. +:a3396 :a3396 :a3396. +:a3397 :a3397 :a3397. +:a3398 :a3398 :a3398. +:a3399 :a3399 :a3399. +:a3400 :a3400 :a3400. +:a3401 :a3401 :a3401. +:a3402 :a3402 :a3402. +:a3403 :a3403 :a3403. +:a3404 :a3404 :a3404. +:a3405 :a3405 :a3405. +:a3406 :a3406 :a3406. +:a3407 :a3407 :a3407. +:a3408 :a3408 :a3408. +:a3409 :a3409 :a3409. +:a3410 :a3410 :a3410. +:a3411 :a3411 :a3411. +:a3412 :a3412 :a3412. +:a3413 :a3413 :a3413. +:a3414 :a3414 :a3414. +:a3415 :a3415 :a3415. +:a3416 :a3416 :a3416. +:a3417 :a3417 :a3417. +:a3418 :a3418 :a3418. +:a3419 :a3419 :a3419. +:a3420 :a3420 :a3420. +:a3421 :a3421 :a3421. +:a3422 :a3422 :a3422. +:a3423 :a3423 :a3423. +:a3424 :a3424 :a3424. +:a3425 :a3425 :a3425. +:a3426 :a3426 :a3426. +:a3427 :a3427 :a3427. +:a3428 :a3428 :a3428. +:a3429 :a3429 :a3429. +:a3430 :a3430 :a3430. +:a3431 :a3431 :a3431. +:a3432 :a3432 :a3432. +:a3433 :a3433 :a3433. +:a3434 :a3434 :a3434. +:a3435 :a3435 :a3435. +:a3436 :a3436 :a3436. +:a3437 :a3437 :a3437. +:a3438 :a3438 :a3438. +:a3439 :a3439 :a3439. +:a3440 :a3440 :a3440. +:a3441 :a3441 :a3441. +:a3442 :a3442 :a3442. +:a3443 :a3443 :a3443. +:a3444 :a3444 :a3444. +:a3445 :a3445 :a3445. +:a3446 :a3446 :a3446. +:a3447 :a3447 :a3447. +:a3448 :a3448 :a3448. +:a3449 :a3449 :a3449. +:a3450 :a3450 :a3450. +:a3451 :a3451 :a3451. +:a3452 :a3452 :a3452. +:a3453 :a3453 :a3453. +:a3454 :a3454 :a3454. +:a3455 :a3455 :a3455. +:a3456 :a3456 :a3456. +:a3457 :a3457 :a3457. +:a3458 :a3458 :a3458. +:a3459 :a3459 :a3459. +:a3460 :a3460 :a3460. +:a3461 :a3461 :a3461. +:a3462 :a3462 :a3462. +:a3463 :a3463 :a3463. +:a3464 :a3464 :a3464. +:a3465 :a3465 :a3465. +:a3466 :a3466 :a3466. +:a3467 :a3467 :a3467. +:a3468 :a3468 :a3468. +:a3469 :a3469 :a3469. +:a3470 :a3470 :a3470. +:a3471 :a3471 :a3471. +:a3472 :a3472 :a3472. +:a3473 :a3473 :a3473. +:a3474 :a3474 :a3474. +:a3475 :a3475 :a3475. +:a3476 :a3476 :a3476. +:a3477 :a3477 :a3477. +:a3478 :a3478 :a3478. +:a3479 :a3479 :a3479. +:a3480 :a3480 :a3480. +:a3481 :a3481 :a3481. +:a3482 :a3482 :a3482. +:a3483 :a3483 :a3483. +:a3484 :a3484 :a3484. +:a3485 :a3485 :a3485. +:a3486 :a3486 :a3486. +:a3487 :a3487 :a3487. +:a3488 :a3488 :a3488. +:a3489 :a3489 :a3489. +:a3490 :a3490 :a3490. +:a3491 :a3491 :a3491. +:a3492 :a3492 :a3492. +:a3493 :a3493 :a3493. +:a3494 :a3494 :a3494. +:a3495 :a3495 :a3495. +:a3496 :a3496 :a3496. +:a3497 :a3497 :a3497. +:a3498 :a3498 :a3498. +:a3499 :a3499 :a3499. +:a3500 :a3500 :a3500. +:a3501 :a3501 :a3501. +:a3502 :a3502 :a3502. +:a3503 :a3503 :a3503. +:a3504 :a3504 :a3504. +:a3505 :a3505 :a3505. +:a3506 :a3506 :a3506. +:a3507 :a3507 :a3507. +:a3508 :a3508 :a3508. +:a3509 :a3509 :a3509. +:a3510 :a3510 :a3510. +:a3511 :a3511 :a3511. +:a3512 :a3512 :a3512. +:a3513 :a3513 :a3513. +:a3514 :a3514 :a3514. +:a3515 :a3515 :a3515. +:a3516 :a3516 :a3516. +:a3517 :a3517 :a3517. +:a3518 :a3518 :a3518. +:a3519 :a3519 :a3519. +:a3520 :a3520 :a3520. +:a3521 :a3521 :a3521. +:a3522 :a3522 :a3522. +:a3523 :a3523 :a3523. +:a3524 :a3524 :a3524. +:a3525 :a3525 :a3525. +:a3526 :a3526 :a3526. +:a3527 :a3527 :a3527. +:a3528 :a3528 :a3528. +:a3529 :a3529 :a3529. +:a3530 :a3530 :a3530. +:a3531 :a3531 :a3531. +:a3532 :a3532 :a3532. +:a3533 :a3533 :a3533. +:a3534 :a3534 :a3534. +:a3535 :a3535 :a3535. +:a3536 :a3536 :a3536. +:a3537 :a3537 :a3537. +:a3538 :a3538 :a3538. +:a3539 :a3539 :a3539. +:a3540 :a3540 :a3540. +:a3541 :a3541 :a3541. +:a3542 :a3542 :a3542. +:a3543 :a3543 :a3543. +:a3544 :a3544 :a3544. +:a3545 :a3545 :a3545. +:a3546 :a3546 :a3546. +:a3547 :a3547 :a3547. +:a3548 :a3548 :a3548. +:a3549 :a3549 :a3549. +:a3550 :a3550 :a3550. +:a3551 :a3551 :a3551. +:a3552 :a3552 :a3552. +:a3553 :a3553 :a3553. +:a3554 :a3554 :a3554. +:a3555 :a3555 :a3555. +:a3556 :a3556 :a3556. +:a3557 :a3557 :a3557. +:a3558 :a3558 :a3558. +:a3559 :a3559 :a3559. +:a3560 :a3560 :a3560. +:a3561 :a3561 :a3561. +:a3562 :a3562 :a3562. +:a3563 :a3563 :a3563. +:a3564 :a3564 :a3564. +:a3565 :a3565 :a3565. +:a3566 :a3566 :a3566. +:a3567 :a3567 :a3567. +:a3568 :a3568 :a3568. +:a3569 :a3569 :a3569. +:a3570 :a3570 :a3570. +:a3571 :a3571 :a3571. +:a3572 :a3572 :a3572. +:a3573 :a3573 :a3573. +:a3574 :a3574 :a3574. +:a3575 :a3575 :a3575. +:a3576 :a3576 :a3576. +:a3577 :a3577 :a3577. +:a3578 :a3578 :a3578. +:a3579 :a3579 :a3579. +:a3580 :a3580 :a3580. +:a3581 :a3581 :a3581. +:a3582 :a3582 :a3582. +:a3583 :a3583 :a3583. +:a3584 :a3584 :a3584. +:a3585 :a3585 :a3585. +:a3586 :a3586 :a3586. +:a3587 :a3587 :a3587. +:a3588 :a3588 :a3588. +:a3589 :a3589 :a3589. +:a3590 :a3590 :a3590. +:a3591 :a3591 :a3591. +:a3592 :a3592 :a3592. +:a3593 :a3593 :a3593. +:a3594 :a3594 :a3594. +:a3595 :a3595 :a3595. +:a3596 :a3596 :a3596. +:a3597 :a3597 :a3597. +:a3598 :a3598 :a3598. +:a3599 :a3599 :a3599. +:a3600 :a3600 :a3600. +:a3601 :a3601 :a3601. +:a3602 :a3602 :a3602. +:a3603 :a3603 :a3603. +:a3604 :a3604 :a3604. +:a3605 :a3605 :a3605. +:a3606 :a3606 :a3606. +:a3607 :a3607 :a3607. +:a3608 :a3608 :a3608. +:a3609 :a3609 :a3609. +:a3610 :a3610 :a3610. +:a3611 :a3611 :a3611. +:a3612 :a3612 :a3612. +:a3613 :a3613 :a3613. +:a3614 :a3614 :a3614. +:a3615 :a3615 :a3615. +:a3616 :a3616 :a3616. +:a3617 :a3617 :a3617. +:a3618 :a3618 :a3618. +:a3619 :a3619 :a3619. +:a3620 :a3620 :a3620. +:a3621 :a3621 :a3621. +:a3622 :a3622 :a3622. +:a3623 :a3623 :a3623. +:a3624 :a3624 :a3624. +:a3625 :a3625 :a3625. +:a3626 :a3626 :a3626. +:a3627 :a3627 :a3627. +:a3628 :a3628 :a3628. +:a3629 :a3629 :a3629. +:a3630 :a3630 :a3630. +:a3631 :a3631 :a3631. +:a3632 :a3632 :a3632. +:a3633 :a3633 :a3633. +:a3634 :a3634 :a3634. +:a3635 :a3635 :a3635. +:a3636 :a3636 :a3636. +:a3637 :a3637 :a3637. +:a3638 :a3638 :a3638. +:a3639 :a3639 :a3639. +:a3640 :a3640 :a3640. +:a3641 :a3641 :a3641. +:a3642 :a3642 :a3642. +:a3643 :a3643 :a3643. +:a3644 :a3644 :a3644. +:a3645 :a3645 :a3645. +:a3646 :a3646 :a3646. +:a3647 :a3647 :a3647. +:a3648 :a3648 :a3648. +:a3649 :a3649 :a3649. +:a3650 :a3650 :a3650. +:a3651 :a3651 :a3651. +:a3652 :a3652 :a3652. +:a3653 :a3653 :a3653. +:a3654 :a3654 :a3654. +:a3655 :a3655 :a3655. +:a3656 :a3656 :a3656. +:a3657 :a3657 :a3657. +:a3658 :a3658 :a3658. +:a3659 :a3659 :a3659. +:a3660 :a3660 :a3660. +:a3661 :a3661 :a3661. +:a3662 :a3662 :a3662. +:a3663 :a3663 :a3663. +:a3664 :a3664 :a3664. +:a3665 :a3665 :a3665. +:a3666 :a3666 :a3666. +:a3667 :a3667 :a3667. +:a3668 :a3668 :a3668. +:a3669 :a3669 :a3669. +:a3670 :a3670 :a3670. +:a3671 :a3671 :a3671. +:a3672 :a3672 :a3672. +:a3673 :a3673 :a3673. +:a3674 :a3674 :a3674. +:a3675 :a3675 :a3675. +:a3676 :a3676 :a3676. +:a3677 :a3677 :a3677. +:a3678 :a3678 :a3678. +:a3679 :a3679 :a3679. +:a3680 :a3680 :a3680. +:a3681 :a3681 :a3681. +:a3682 :a3682 :a3682. +:a3683 :a3683 :a3683. +:a3684 :a3684 :a3684. +:a3685 :a3685 :a3685. +:a3686 :a3686 :a3686. +:a3687 :a3687 :a3687. +:a3688 :a3688 :a3688. +:a3689 :a3689 :a3689. +:a3690 :a3690 :a3690. +:a3691 :a3691 :a3691. +:a3692 :a3692 :a3692. +:a3693 :a3693 :a3693. +:a3694 :a3694 :a3694. +:a3695 :a3695 :a3695. +:a3696 :a3696 :a3696. +:a3697 :a3697 :a3697. +:a3698 :a3698 :a3698. +:a3699 :a3699 :a3699. +:a3700 :a3700 :a3700. +:a3701 :a3701 :a3701. +:a3702 :a3702 :a3702. +:a3703 :a3703 :a3703. +:a3704 :a3704 :a3704. +:a3705 :a3705 :a3705. +:a3706 :a3706 :a3706. +:a3707 :a3707 :a3707. +:a3708 :a3708 :a3708. +:a3709 :a3709 :a3709. +:a3710 :a3710 :a3710. +:a3711 :a3711 :a3711. +:a3712 :a3712 :a3712. +:a3713 :a3713 :a3713. +:a3714 :a3714 :a3714. +:a3715 :a3715 :a3715. +:a3716 :a3716 :a3716. +:a3717 :a3717 :a3717. +:a3718 :a3718 :a3718. +:a3719 :a3719 :a3719. +:a3720 :a3720 :a3720. +:a3721 :a3721 :a3721. +:a3722 :a3722 :a3722. +:a3723 :a3723 :a3723. +:a3724 :a3724 :a3724. +:a3725 :a3725 :a3725. +:a3726 :a3726 :a3726. +:a3727 :a3727 :a3727. +:a3728 :a3728 :a3728. +:a3729 :a3729 :a3729. +:a3730 :a3730 :a3730. +:a3731 :a3731 :a3731. +:a3732 :a3732 :a3732. +:a3733 :a3733 :a3733. +:a3734 :a3734 :a3734. +:a3735 :a3735 :a3735. +:a3736 :a3736 :a3736. +:a3737 :a3737 :a3737. +:a3738 :a3738 :a3738. +:a3739 :a3739 :a3739. +:a3740 :a3740 :a3740. +:a3741 :a3741 :a3741. +:a3742 :a3742 :a3742. +:a3743 :a3743 :a3743. +:a3744 :a3744 :a3744. +:a3745 :a3745 :a3745. +:a3746 :a3746 :a3746. +:a3747 :a3747 :a3747. +:a3748 :a3748 :a3748. +:a3749 :a3749 :a3749. +:a3750 :a3750 :a3750. +:a3751 :a3751 :a3751. +:a3752 :a3752 :a3752. +:a3753 :a3753 :a3753. +:a3754 :a3754 :a3754. +:a3755 :a3755 :a3755. +:a3756 :a3756 :a3756. +:a3757 :a3757 :a3757. +:a3758 :a3758 :a3758. +:a3759 :a3759 :a3759. +:a3760 :a3760 :a3760. +:a3761 :a3761 :a3761. +:a3762 :a3762 :a3762. +:a3763 :a3763 :a3763. +:a3764 :a3764 :a3764. +:a3765 :a3765 :a3765. +:a3766 :a3766 :a3766. +:a3767 :a3767 :a3767. +:a3768 :a3768 :a3768. +:a3769 :a3769 :a3769. +:a3770 :a3770 :a3770. +:a3771 :a3771 :a3771. +:a3772 :a3772 :a3772. +:a3773 :a3773 :a3773. +:a3774 :a3774 :a3774. +:a3775 :a3775 :a3775. +:a3776 :a3776 :a3776. +:a3777 :a3777 :a3777. +:a3778 :a3778 :a3778. +:a3779 :a3779 :a3779. +:a3780 :a3780 :a3780. +:a3781 :a3781 :a3781. +:a3782 :a3782 :a3782. +:a3783 :a3783 :a3783. +:a3784 :a3784 :a3784. +:a3785 :a3785 :a3785. +:a3786 :a3786 :a3786. +:a3787 :a3787 :a3787. +:a3788 :a3788 :a3788. +:a3789 :a3789 :a3789. +:a3790 :a3790 :a3790. +:a3791 :a3791 :a3791. +:a3792 :a3792 :a3792. +:a3793 :a3793 :a3793. +:a3794 :a3794 :a3794. +:a3795 :a3795 :a3795. +:a3796 :a3796 :a3796. +:a3797 :a3797 :a3797. +:a3798 :a3798 :a3798. +:a3799 :a3799 :a3799. +:a3800 :a3800 :a3800. +:a3801 :a3801 :a3801. +:a3802 :a3802 :a3802. +:a3803 :a3803 :a3803. +:a3804 :a3804 :a3804. +:a3805 :a3805 :a3805. +:a3806 :a3806 :a3806. +:a3807 :a3807 :a3807. +:a3808 :a3808 :a3808. +:a3809 :a3809 :a3809. +:a3810 :a3810 :a3810. +:a3811 :a3811 :a3811. +:a3812 :a3812 :a3812. +:a3813 :a3813 :a3813. +:a3814 :a3814 :a3814. +:a3815 :a3815 :a3815. +:a3816 :a3816 :a3816. +:a3817 :a3817 :a3817. +:a3818 :a3818 :a3818. +:a3819 :a3819 :a3819. +:a3820 :a3820 :a3820. +:a3821 :a3821 :a3821. +:a3822 :a3822 :a3822. +:a3823 :a3823 :a3823. +:a3824 :a3824 :a3824. +:a3825 :a3825 :a3825. +:a3826 :a3826 :a3826. +:a3827 :a3827 :a3827. +:a3828 :a3828 :a3828. +:a3829 :a3829 :a3829. +:a3830 :a3830 :a3830. +:a3831 :a3831 :a3831. +:a3832 :a3832 :a3832. +:a3833 :a3833 :a3833. +:a3834 :a3834 :a3834. +:a3835 :a3835 :a3835. +:a3836 :a3836 :a3836. +:a3837 :a3837 :a3837. +:a3838 :a3838 :a3838. +:a3839 :a3839 :a3839. +:a3840 :a3840 :a3840. +:a3841 :a3841 :a3841. +:a3842 :a3842 :a3842. +:a3843 :a3843 :a3843. +:a3844 :a3844 :a3844. +:a3845 :a3845 :a3845. +:a3846 :a3846 :a3846. +:a3847 :a3847 :a3847. +:a3848 :a3848 :a3848. +:a3849 :a3849 :a3849. +:a3850 :a3850 :a3850. +:a3851 :a3851 :a3851. +:a3852 :a3852 :a3852. +:a3853 :a3853 :a3853. +:a3854 :a3854 :a3854. +:a3855 :a3855 :a3855. +:a3856 :a3856 :a3856. +:a3857 :a3857 :a3857. +:a3858 :a3858 :a3858. +:a3859 :a3859 :a3859. +:a3860 :a3860 :a3860. +:a3861 :a3861 :a3861. +:a3862 :a3862 :a3862. +:a3863 :a3863 :a3863. +:a3864 :a3864 :a3864. +:a3865 :a3865 :a3865. +:a3866 :a3866 :a3866. +:a3867 :a3867 :a3867. +:a3868 :a3868 :a3868. +:a3869 :a3869 :a3869. +:a3870 :a3870 :a3870. +:a3871 :a3871 :a3871. +:a3872 :a3872 :a3872. +:a3873 :a3873 :a3873. +:a3874 :a3874 :a3874. +:a3875 :a3875 :a3875. +:a3876 :a3876 :a3876. +:a3877 :a3877 :a3877. +:a3878 :a3878 :a3878. +:a3879 :a3879 :a3879. +:a3880 :a3880 :a3880. +:a3881 :a3881 :a3881. +:a3882 :a3882 :a3882. +:a3883 :a3883 :a3883. +:a3884 :a3884 :a3884. +:a3885 :a3885 :a3885. +:a3886 :a3886 :a3886. +:a3887 :a3887 :a3887. +:a3888 :a3888 :a3888. +:a3889 :a3889 :a3889. +:a3890 :a3890 :a3890. +:a3891 :a3891 :a3891. +:a3892 :a3892 :a3892. +:a3893 :a3893 :a3893. +:a3894 :a3894 :a3894. +:a3895 :a3895 :a3895. +:a3896 :a3896 :a3896. +:a3897 :a3897 :a3897. +:a3898 :a3898 :a3898. +:a3899 :a3899 :a3899. +:a3900 :a3900 :a3900. +:a3901 :a3901 :a3901. +:a3902 :a3902 :a3902. +:a3903 :a3903 :a3903. +:a3904 :a3904 :a3904. +:a3905 :a3905 :a3905. +:a3906 :a3906 :a3906. +:a3907 :a3907 :a3907. +:a3908 :a3908 :a3908. +:a3909 :a3909 :a3909. +:a3910 :a3910 :a3910. +:a3911 :a3911 :a3911. +:a3912 :a3912 :a3912. +:a3913 :a3913 :a3913. +:a3914 :a3914 :a3914. +:a3915 :a3915 :a3915. +:a3916 :a3916 :a3916. +:a3917 :a3917 :a3917. +:a3918 :a3918 :a3918. +:a3919 :a3919 :a3919. +:a3920 :a3920 :a3920. +:a3921 :a3921 :a3921. +:a3922 :a3922 :a3922. +:a3923 :a3923 :a3923. +:a3924 :a3924 :a3924. +:a3925 :a3925 :a3925. +:a3926 :a3926 :a3926. +:a3927 :a3927 :a3927. +:a3928 :a3928 :a3928. +:a3929 :a3929 :a3929. +:a3930 :a3930 :a3930. +:a3931 :a3931 :a3931. +:a3932 :a3932 :a3932. +:a3933 :a3933 :a3933. +:a3934 :a3934 :a3934. +:a3935 :a3935 :a3935. +:a3936 :a3936 :a3936. +:a3937 :a3937 :a3937. +:a3938 :a3938 :a3938. +:a3939 :a3939 :a3939. +:a3940 :a3940 :a3940. +:a3941 :a3941 :a3941. +:a3942 :a3942 :a3942. +:a3943 :a3943 :a3943. +:a3944 :a3944 :a3944. +:a3945 :a3945 :a3945. +:a3946 :a3946 :a3946. +:a3947 :a3947 :a3947. +:a3948 :a3948 :a3948. +:a3949 :a3949 :a3949. +:a3950 :a3950 :a3950. +:a3951 :a3951 :a3951. +:a3952 :a3952 :a3952. +:a3953 :a3953 :a3953. +:a3954 :a3954 :a3954. +:a3955 :a3955 :a3955. +:a3956 :a3956 :a3956. +:a3957 :a3957 :a3957. +:a3958 :a3958 :a3958. +:a3959 :a3959 :a3959. +:a3960 :a3960 :a3960. +:a3961 :a3961 :a3961. +:a3962 :a3962 :a3962. +:a3963 :a3963 :a3963. +:a3964 :a3964 :a3964. +:a3965 :a3965 :a3965. +:a3966 :a3966 :a3966. +:a3967 :a3967 :a3967. +:a3968 :a3968 :a3968. +:a3969 :a3969 :a3969. +:a3970 :a3970 :a3970. +:a3971 :a3971 :a3971. +:a3972 :a3972 :a3972. +:a3973 :a3973 :a3973. +:a3974 :a3974 :a3974. +:a3975 :a3975 :a3975. +:a3976 :a3976 :a3976. +:a3977 :a3977 :a3977. +:a3978 :a3978 :a3978. +:a3979 :a3979 :a3979. +:a3980 :a3980 :a3980. +:a3981 :a3981 :a3981. +:a3982 :a3982 :a3982. +:a3983 :a3983 :a3983. +:a3984 :a3984 :a3984. +:a3985 :a3985 :a3985. +:a3986 :a3986 :a3986. +:a3987 :a3987 :a3987. +:a3988 :a3988 :a3988. +:a3989 :a3989 :a3989. +:a3990 :a3990 :a3990. +:a3991 :a3991 :a3991. +:a3992 :a3992 :a3992. +:a3993 :a3993 :a3993. +:a3994 :a3994 :a3994. +:a3995 :a3995 :a3995. +:a3996 :a3996 :a3996. +:a3997 :a3997 :a3997. +:a3998 :a3998 :a3998. +:a3999 :a3999 :a3999. +:a4000 :a4000 :a4000. +:a4001 :a4001 :a4001. +:a4002 :a4002 :a4002. +:a4003 :a4003 :a4003. +:a4004 :a4004 :a4004. +:a4005 :a4005 :a4005. +:a4006 :a4006 :a4006. +:a4007 :a4007 :a4007. +:a4008 :a4008 :a4008. +:a4009 :a4009 :a4009. +:a4010 :a4010 :a4010. +:a4011 :a4011 :a4011. +:a4012 :a4012 :a4012. +:a4013 :a4013 :a4013. +:a4014 :a4014 :a4014. +:a4015 :a4015 :a4015. +:a4016 :a4016 :a4016. +:a4017 :a4017 :a4017. +:a4018 :a4018 :a4018. +:a4019 :a4019 :a4019. +:a4020 :a4020 :a4020. +:a4021 :a4021 :a4021. +:a4022 :a4022 :a4022. +:a4023 :a4023 :a4023. +:a4024 :a4024 :a4024. +:a4025 :a4025 :a4025. +:a4026 :a4026 :a4026. +:a4027 :a4027 :a4027. +:a4028 :a4028 :a4028. +:a4029 :a4029 :a4029. +:a4030 :a4030 :a4030. +:a4031 :a4031 :a4031. +:a4032 :a4032 :a4032. +:a4033 :a4033 :a4033. +:a4034 :a4034 :a4034. +:a4035 :a4035 :a4035. +:a4036 :a4036 :a4036. +:a4037 :a4037 :a4037. +:a4038 :a4038 :a4038. +:a4039 :a4039 :a4039. +:a4040 :a4040 :a4040. +:a4041 :a4041 :a4041. +:a4042 :a4042 :a4042. +:a4043 :a4043 :a4043. +:a4044 :a4044 :a4044. +:a4045 :a4045 :a4045. +:a4046 :a4046 :a4046. +:a4047 :a4047 :a4047. +:a4048 :a4048 :a4048. +:a4049 :a4049 :a4049. +:a4050 :a4050 :a4050. +:a4051 :a4051 :a4051. +:a4052 :a4052 :a4052. +:a4053 :a4053 :a4053. +:a4054 :a4054 :a4054. +:a4055 :a4055 :a4055. +:a4056 :a4056 :a4056. +:a4057 :a4057 :a4057. +:a4058 :a4058 :a4058. +:a4059 :a4059 :a4059. +:a4060 :a4060 :a4060. +:a4061 :a4061 :a4061. +:a4062 :a4062 :a4062. +:a4063 :a4063 :a4063. +:a4064 :a4064 :a4064. +:a4065 :a4065 :a4065. +:a4066 :a4066 :a4066. +:a4067 :a4067 :a4067. +:a4068 :a4068 :a4068. +:a4069 :a4069 :a4069. +:a4070 :a4070 :a4070. +:a4071 :a4071 :a4071. +:a4072 :a4072 :a4072. +:a4073 :a4073 :a4073. +:a4074 :a4074 :a4074. +:a4075 :a4075 :a4075. +:a4076 :a4076 :a4076. +:a4077 :a4077 :a4077. +:a4078 :a4078 :a4078. +:a4079 :a4079 :a4079. +:a4080 :a4080 :a4080. +:a4081 :a4081 :a4081. +:a4082 :a4082 :a4082. +:a4083 :a4083 :a4083. +:a4084 :a4084 :a4084. +:a4085 :a4085 :a4085. +:a4086 :a4086 :a4086. +:a4087 :a4087 :a4087. +:a4088 :a4088 :a4088. +:a4089 :a4089 :a4089. +:a4090 :a4090 :a4090. +:a4091 :a4091 :a4091. +:a4092 :a4092 :a4092. +:a4093 :a4093 :a4093. +:a4094 :a4094 :a4094. +:a4095 :a4095 :a4095. +:a4096 :a4096 :a4096. +:a4097 :a4097 :a4097. +:a4098 :a4098 :a4098. +:a4099 :a4099 :a4099. +:a4100 :a4100 :a4100. +:a4101 :a4101 :a4101. +:a4102 :a4102 :a4102. +:a4103 :a4103 :a4103. +:a4104 :a4104 :a4104. +:a4105 :a4105 :a4105. +:a4106 :a4106 :a4106. +:a4107 :a4107 :a4107. +:a4108 :a4108 :a4108. +:a4109 :a4109 :a4109. +:a4110 :a4110 :a4110. +:a4111 :a4111 :a4111. +:a4112 :a4112 :a4112. +:a4113 :a4113 :a4113. +:a4114 :a4114 :a4114. +:a4115 :a4115 :a4115. +:a4116 :a4116 :a4116. +:a4117 :a4117 :a4117. +:a4118 :a4118 :a4118. +:a4119 :a4119 :a4119. +:a4120 :a4120 :a4120. +:a4121 :a4121 :a4121. +:a4122 :a4122 :a4122. +:a4123 :a4123 :a4123. +:a4124 :a4124 :a4124. +:a4125 :a4125 :a4125. +:a4126 :a4126 :a4126. +:a4127 :a4127 :a4127. +:a4128 :a4128 :a4128. +:a4129 :a4129 :a4129. +:a4130 :a4130 :a4130. +:a4131 :a4131 :a4131. +:a4132 :a4132 :a4132. +:a4133 :a4133 :a4133. +:a4134 :a4134 :a4134. +:a4135 :a4135 :a4135. +:a4136 :a4136 :a4136. +:a4137 :a4137 :a4137. +:a4138 :a4138 :a4138. +:a4139 :a4139 :a4139. +:a4140 :a4140 :a4140. +:a4141 :a4141 :a4141. +:a4142 :a4142 :a4142. +:a4143 :a4143 :a4143. +:a4144 :a4144 :a4144. +:a4145 :a4145 :a4145. +:a4146 :a4146 :a4146. +:a4147 :a4147 :a4147. +:a4148 :a4148 :a4148. +:a4149 :a4149 :a4149. +:a4150 :a4150 :a4150. +:a4151 :a4151 :a4151. +:a4152 :a4152 :a4152. +:a4153 :a4153 :a4153. +:a4154 :a4154 :a4154. +:a4155 :a4155 :a4155. +:a4156 :a4156 :a4156. +:a4157 :a4157 :a4157. +:a4158 :a4158 :a4158. +:a4159 :a4159 :a4159. +:a4160 :a4160 :a4160. +:a4161 :a4161 :a4161. +:a4162 :a4162 :a4162. +:a4163 :a4163 :a4163. +:a4164 :a4164 :a4164. +:a4165 :a4165 :a4165. +:a4166 :a4166 :a4166. +:a4167 :a4167 :a4167. +:a4168 :a4168 :a4168. +:a4169 :a4169 :a4169. +:a4170 :a4170 :a4170. +:a4171 :a4171 :a4171. +:a4172 :a4172 :a4172. +:a4173 :a4173 :a4173. +:a4174 :a4174 :a4174. +:a4175 :a4175 :a4175. +:a4176 :a4176 :a4176. +:a4177 :a4177 :a4177. +:a4178 :a4178 :a4178. +:a4179 :a4179 :a4179. +:a4180 :a4180 :a4180. +:a4181 :a4181 :a4181. +:a4182 :a4182 :a4182. +:a4183 :a4183 :a4183. +:a4184 :a4184 :a4184. +:a4185 :a4185 :a4185. +:a4186 :a4186 :a4186. +:a4187 :a4187 :a4187. +:a4188 :a4188 :a4188. +:a4189 :a4189 :a4189. +:a4190 :a4190 :a4190. +:a4191 :a4191 :a4191. +:a4192 :a4192 :a4192. +:a4193 :a4193 :a4193. +:a4194 :a4194 :a4194. +:a4195 :a4195 :a4195. +:a4196 :a4196 :a4196. +:a4197 :a4197 :a4197. +:a4198 :a4198 :a4198. +:a4199 :a4199 :a4199. +:a4200 :a4200 :a4200. +:a4201 :a4201 :a4201. +:a4202 :a4202 :a4202. +:a4203 :a4203 :a4203. +:a4204 :a4204 :a4204. +:a4205 :a4205 :a4205. +:a4206 :a4206 :a4206. +:a4207 :a4207 :a4207. +:a4208 :a4208 :a4208. +:a4209 :a4209 :a4209. +:a4210 :a4210 :a4210. +:a4211 :a4211 :a4211. +:a4212 :a4212 :a4212. +:a4213 :a4213 :a4213. +:a4214 :a4214 :a4214. +:a4215 :a4215 :a4215. +:a4216 :a4216 :a4216. +:a4217 :a4217 :a4217. +:a4218 :a4218 :a4218. +:a4219 :a4219 :a4219. +:a4220 :a4220 :a4220. +:a4221 :a4221 :a4221. +:a4222 :a4222 :a4222. +:a4223 :a4223 :a4223. +:a4224 :a4224 :a4224. +:a4225 :a4225 :a4225. +:a4226 :a4226 :a4226. +:a4227 :a4227 :a4227. +:a4228 :a4228 :a4228. +:a4229 :a4229 :a4229. +:a4230 :a4230 :a4230. +:a4231 :a4231 :a4231. +:a4232 :a4232 :a4232. +:a4233 :a4233 :a4233. +:a4234 :a4234 :a4234. +:a4235 :a4235 :a4235. +:a4236 :a4236 :a4236. +:a4237 :a4237 :a4237. +:a4238 :a4238 :a4238. +:a4239 :a4239 :a4239. +:a4240 :a4240 :a4240. +:a4241 :a4241 :a4241. +:a4242 :a4242 :a4242. +:a4243 :a4243 :a4243. +:a4244 :a4244 :a4244. +:a4245 :a4245 :a4245. +:a4246 :a4246 :a4246. +:a4247 :a4247 :a4247. +:a4248 :a4248 :a4248. +:a4249 :a4249 :a4249. +:a4250 :a4250 :a4250. +:a4251 :a4251 :a4251. +:a4252 :a4252 :a4252. +:a4253 :a4253 :a4253. +:a4254 :a4254 :a4254. +:a4255 :a4255 :a4255. +:a4256 :a4256 :a4256. +:a4257 :a4257 :a4257. +:a4258 :a4258 :a4258. +:a4259 :a4259 :a4259. +:a4260 :a4260 :a4260. +:a4261 :a4261 :a4261. +:a4262 :a4262 :a4262. +:a4263 :a4263 :a4263. +:a4264 :a4264 :a4264. +:a4265 :a4265 :a4265. +:a4266 :a4266 :a4266. +:a4267 :a4267 :a4267. +:a4268 :a4268 :a4268. +:a4269 :a4269 :a4269. +:a4270 :a4270 :a4270. +:a4271 :a4271 :a4271. +:a4272 :a4272 :a4272. +:a4273 :a4273 :a4273. +:a4274 :a4274 :a4274. +:a4275 :a4275 :a4275. +:a4276 :a4276 :a4276. +:a4277 :a4277 :a4277. +:a4278 :a4278 :a4278. +:a4279 :a4279 :a4279. +:a4280 :a4280 :a4280. +:a4281 :a4281 :a4281. +:a4282 :a4282 :a4282. +:a4283 :a4283 :a4283. +:a4284 :a4284 :a4284. +:a4285 :a4285 :a4285. +:a4286 :a4286 :a4286. +:a4287 :a4287 :a4287. +:a4288 :a4288 :a4288. +:a4289 :a4289 :a4289. +:a4290 :a4290 :a4290. +:a4291 :a4291 :a4291. +:a4292 :a4292 :a4292. +:a4293 :a4293 :a4293. +:a4294 :a4294 :a4294. +:a4295 :a4295 :a4295. +:a4296 :a4296 :a4296. +:a4297 :a4297 :a4297. +:a4298 :a4298 :a4298. +:a4299 :a4299 :a4299. +:a4300 :a4300 :a4300. +:a4301 :a4301 :a4301. +:a4302 :a4302 :a4302. +:a4303 :a4303 :a4303. +:a4304 :a4304 :a4304. +:a4305 :a4305 :a4305. +:a4306 :a4306 :a4306. +:a4307 :a4307 :a4307. +:a4308 :a4308 :a4308. +:a4309 :a4309 :a4309. +:a4310 :a4310 :a4310. +:a4311 :a4311 :a4311. +:a4312 :a4312 :a4312. +:a4313 :a4313 :a4313. +:a4314 :a4314 :a4314. +:a4315 :a4315 :a4315. +:a4316 :a4316 :a4316. +:a4317 :a4317 :a4317. +:a4318 :a4318 :a4318. +:a4319 :a4319 :a4319. +:a4320 :a4320 :a4320. +:a4321 :a4321 :a4321. +:a4322 :a4322 :a4322. +:a4323 :a4323 :a4323. +:a4324 :a4324 :a4324. +:a4325 :a4325 :a4325. +:a4326 :a4326 :a4326. +:a4327 :a4327 :a4327. +:a4328 :a4328 :a4328. +:a4329 :a4329 :a4329. +:a4330 :a4330 :a4330. +:a4331 :a4331 :a4331. +:a4332 :a4332 :a4332. +:a4333 :a4333 :a4333. +:a4334 :a4334 :a4334. +:a4335 :a4335 :a4335. +:a4336 :a4336 :a4336. +:a4337 :a4337 :a4337. +:a4338 :a4338 :a4338. +:a4339 :a4339 :a4339. +:a4340 :a4340 :a4340. +:a4341 :a4341 :a4341. +:a4342 :a4342 :a4342. +:a4343 :a4343 :a4343. +:a4344 :a4344 :a4344. +:a4345 :a4345 :a4345. +:a4346 :a4346 :a4346. +:a4347 :a4347 :a4347. +:a4348 :a4348 :a4348. +:a4349 :a4349 :a4349. +:a4350 :a4350 :a4350. +:a4351 :a4351 :a4351. +:a4352 :a4352 :a4352. +:a4353 :a4353 :a4353. +:a4354 :a4354 :a4354. +:a4355 :a4355 :a4355. +:a4356 :a4356 :a4356. +:a4357 :a4357 :a4357. +:a4358 :a4358 :a4358. +:a4359 :a4359 :a4359. +:a4360 :a4360 :a4360. +:a4361 :a4361 :a4361. +:a4362 :a4362 :a4362. +:a4363 :a4363 :a4363. +:a4364 :a4364 :a4364. +:a4365 :a4365 :a4365. +:a4366 :a4366 :a4366. +:a4367 :a4367 :a4367. +:a4368 :a4368 :a4368. +:a4369 :a4369 :a4369. +:a4370 :a4370 :a4370. +:a4371 :a4371 :a4371. +:a4372 :a4372 :a4372. +:a4373 :a4373 :a4373. +:a4374 :a4374 :a4374. +:a4375 :a4375 :a4375. +:a4376 :a4376 :a4376. +:a4377 :a4377 :a4377. +:a4378 :a4378 :a4378. +:a4379 :a4379 :a4379. +:a4380 :a4380 :a4380. +:a4381 :a4381 :a4381. +:a4382 :a4382 :a4382. +:a4383 :a4383 :a4383. +:a4384 :a4384 :a4384. +:a4385 :a4385 :a4385. +:a4386 :a4386 :a4386. +:a4387 :a4387 :a4387. +:a4388 :a4388 :a4388. +:a4389 :a4389 :a4389. +:a4390 :a4390 :a4390. +:a4391 :a4391 :a4391. +:a4392 :a4392 :a4392. +:a4393 :a4393 :a4393. +:a4394 :a4394 :a4394. +:a4395 :a4395 :a4395. +:a4396 :a4396 :a4396. +:a4397 :a4397 :a4397. +:a4398 :a4398 :a4398. +:a4399 :a4399 :a4399. +:a4400 :a4400 :a4400. +:a4401 :a4401 :a4401. +:a4402 :a4402 :a4402. +:a4403 :a4403 :a4403. +:a4404 :a4404 :a4404. +:a4405 :a4405 :a4405. +:a4406 :a4406 :a4406. +:a4407 :a4407 :a4407. +:a4408 :a4408 :a4408. +:a4409 :a4409 :a4409. +:a4410 :a4410 :a4410. +:a4411 :a4411 :a4411. +:a4412 :a4412 :a4412. +:a4413 :a4413 :a4413. +:a4414 :a4414 :a4414. +:a4415 :a4415 :a4415. +:a4416 :a4416 :a4416. +:a4417 :a4417 :a4417. +:a4418 :a4418 :a4418. +:a4419 :a4419 :a4419. +:a4420 :a4420 :a4420. +:a4421 :a4421 :a4421. +:a4422 :a4422 :a4422. +:a4423 :a4423 :a4423. +:a4424 :a4424 :a4424. +:a4425 :a4425 :a4425. +:a4426 :a4426 :a4426. +:a4427 :a4427 :a4427. +:a4428 :a4428 :a4428. +:a4429 :a4429 :a4429. +:a4430 :a4430 :a4430. +:a4431 :a4431 :a4431. +:a4432 :a4432 :a4432. +:a4433 :a4433 :a4433. +:a4434 :a4434 :a4434. +:a4435 :a4435 :a4435. +:a4436 :a4436 :a4436. +:a4437 :a4437 :a4437. +:a4438 :a4438 :a4438. +:a4439 :a4439 :a4439. +:a4440 :a4440 :a4440. +:a4441 :a4441 :a4441. +:a4442 :a4442 :a4442. +:a4443 :a4443 :a4443. +:a4444 :a4444 :a4444. +:a4445 :a4445 :a4445. +:a4446 :a4446 :a4446. +:a4447 :a4447 :a4447. +:a4448 :a4448 :a4448. +:a4449 :a4449 :a4449. +:a4450 :a4450 :a4450. +:a4451 :a4451 :a4451. +:a4452 :a4452 :a4452. +:a4453 :a4453 :a4453. +:a4454 :a4454 :a4454. +:a4455 :a4455 :a4455. +:a4456 :a4456 :a4456. +:a4457 :a4457 :a4457. +:a4458 :a4458 :a4458. +:a4459 :a4459 :a4459. +:a4460 :a4460 :a4460. +:a4461 :a4461 :a4461. +:a4462 :a4462 :a4462. +:a4463 :a4463 :a4463. +:a4464 :a4464 :a4464. +:a4465 :a4465 :a4465. +:a4466 :a4466 :a4466. +:a4467 :a4467 :a4467. +:a4468 :a4468 :a4468. +:a4469 :a4469 :a4469. +:a4470 :a4470 :a4470. +:a4471 :a4471 :a4471. +:a4472 :a4472 :a4472. +:a4473 :a4473 :a4473. +:a4474 :a4474 :a4474. +:a4475 :a4475 :a4475. +:a4476 :a4476 :a4476. +:a4477 :a4477 :a4477. +:a4478 :a4478 :a4478. +:a4479 :a4479 :a4479. +:a4480 :a4480 :a4480. +:a4481 :a4481 :a4481. +:a4482 :a4482 :a4482. +:a4483 :a4483 :a4483. +:a4484 :a4484 :a4484. +:a4485 :a4485 :a4485. +:a4486 :a4486 :a4486. +:a4487 :a4487 :a4487. +:a4488 :a4488 :a4488. +:a4489 :a4489 :a4489. +:a4490 :a4490 :a4490. +:a4491 :a4491 :a4491. +:a4492 :a4492 :a4492. +:a4493 :a4493 :a4493. +:a4494 :a4494 :a4494. +:a4495 :a4495 :a4495. +:a4496 :a4496 :a4496. +:a4497 :a4497 :a4497. +:a4498 :a4498 :a4498. +:a4499 :a4499 :a4499. +:a4500 :a4500 :a4500. +:a4501 :a4501 :a4501. +:a4502 :a4502 :a4502. +:a4503 :a4503 :a4503. +:a4504 :a4504 :a4504. +:a4505 :a4505 :a4505. +:a4506 :a4506 :a4506. +:a4507 :a4507 :a4507. +:a4508 :a4508 :a4508. +:a4509 :a4509 :a4509. +:a4510 :a4510 :a4510. +:a4511 :a4511 :a4511. +:a4512 :a4512 :a4512. +:a4513 :a4513 :a4513. +:a4514 :a4514 :a4514. +:a4515 :a4515 :a4515. +:a4516 :a4516 :a4516. +:a4517 :a4517 :a4517. +:a4518 :a4518 :a4518. +:a4519 :a4519 :a4519. +:a4520 :a4520 :a4520. +:a4521 :a4521 :a4521. +:a4522 :a4522 :a4522. +:a4523 :a4523 :a4523. +:a4524 :a4524 :a4524. +:a4525 :a4525 :a4525. +:a4526 :a4526 :a4526. +:a4527 :a4527 :a4527. +:a4528 :a4528 :a4528. +:a4529 :a4529 :a4529. +:a4530 :a4530 :a4530. +:a4531 :a4531 :a4531. +:a4532 :a4532 :a4532. +:a4533 :a4533 :a4533. +:a4534 :a4534 :a4534. +:a4535 :a4535 :a4535. +:a4536 :a4536 :a4536. +:a4537 :a4537 :a4537. +:a4538 :a4538 :a4538. +:a4539 :a4539 :a4539. +:a4540 :a4540 :a4540. +:a4541 :a4541 :a4541. +:a4542 :a4542 :a4542. +:a4543 :a4543 :a4543. +:a4544 :a4544 :a4544. +:a4545 :a4545 :a4545. +:a4546 :a4546 :a4546. +:a4547 :a4547 :a4547. +:a4548 :a4548 :a4548. +:a4549 :a4549 :a4549. +:a4550 :a4550 :a4550. +:a4551 :a4551 :a4551. +:a4552 :a4552 :a4552. +:a4553 :a4553 :a4553. +:a4554 :a4554 :a4554. +:a4555 :a4555 :a4555. +:a4556 :a4556 :a4556. +:a4557 :a4557 :a4557. +:a4558 :a4558 :a4558. +:a4559 :a4559 :a4559. +:a4560 :a4560 :a4560. +:a4561 :a4561 :a4561. +:a4562 :a4562 :a4562. +:a4563 :a4563 :a4563. +:a4564 :a4564 :a4564. +:a4565 :a4565 :a4565. +:a4566 :a4566 :a4566. +:a4567 :a4567 :a4567. +:a4568 :a4568 :a4568. +:a4569 :a4569 :a4569. +:a4570 :a4570 :a4570. +:a4571 :a4571 :a4571. +:a4572 :a4572 :a4572. +:a4573 :a4573 :a4573. +:a4574 :a4574 :a4574. +:a4575 :a4575 :a4575. +:a4576 :a4576 :a4576. +:a4577 :a4577 :a4577. +:a4578 :a4578 :a4578. +:a4579 :a4579 :a4579. +:a4580 :a4580 :a4580. +:a4581 :a4581 :a4581. +:a4582 :a4582 :a4582. +:a4583 :a4583 :a4583. +:a4584 :a4584 :a4584. +:a4585 :a4585 :a4585. +:a4586 :a4586 :a4586. +:a4587 :a4587 :a4587. +:a4588 :a4588 :a4588. +:a4589 :a4589 :a4589. +:a4590 :a4590 :a4590. +:a4591 :a4591 :a4591. +:a4592 :a4592 :a4592. +:a4593 :a4593 :a4593. +:a4594 :a4594 :a4594. +:a4595 :a4595 :a4595. +:a4596 :a4596 :a4596. +:a4597 :a4597 :a4597. +:a4598 :a4598 :a4598. +:a4599 :a4599 :a4599. +:a4600 :a4600 :a4600. +:a4601 :a4601 :a4601. +:a4602 :a4602 :a4602. +:a4603 :a4603 :a4603. +:a4604 :a4604 :a4604. +:a4605 :a4605 :a4605. +:a4606 :a4606 :a4606. +:a4607 :a4607 :a4607. +:a4608 :a4608 :a4608. +:a4609 :a4609 :a4609. +:a4610 :a4610 :a4610. +:a4611 :a4611 :a4611. +:a4612 :a4612 :a4612. +:a4613 :a4613 :a4613. +:a4614 :a4614 :a4614. +:a4615 :a4615 :a4615. +:a4616 :a4616 :a4616. +:a4617 :a4617 :a4617. +:a4618 :a4618 :a4618. +:a4619 :a4619 :a4619. +:a4620 :a4620 :a4620. +:a4621 :a4621 :a4621. +:a4622 :a4622 :a4622. +:a4623 :a4623 :a4623. +:a4624 :a4624 :a4624. +:a4625 :a4625 :a4625. +:a4626 :a4626 :a4626. +:a4627 :a4627 :a4627. +:a4628 :a4628 :a4628. +:a4629 :a4629 :a4629. +:a4630 :a4630 :a4630. +:a4631 :a4631 :a4631. +:a4632 :a4632 :a4632. +:a4633 :a4633 :a4633. +:a4634 :a4634 :a4634. +:a4635 :a4635 :a4635. +:a4636 :a4636 :a4636. +:a4637 :a4637 :a4637. +:a4638 :a4638 :a4638. +:a4639 :a4639 :a4639. +:a4640 :a4640 :a4640. +:a4641 :a4641 :a4641. +:a4642 :a4642 :a4642. +:a4643 :a4643 :a4643. +:a4644 :a4644 :a4644. +:a4645 :a4645 :a4645. +:a4646 :a4646 :a4646. +:a4647 :a4647 :a4647. +:a4648 :a4648 :a4648. +:a4649 :a4649 :a4649. +:a4650 :a4650 :a4650. +:a4651 :a4651 :a4651. +:a4652 :a4652 :a4652. +:a4653 :a4653 :a4653. +:a4654 :a4654 :a4654. +:a4655 :a4655 :a4655. +:a4656 :a4656 :a4656. +:a4657 :a4657 :a4657. +:a4658 :a4658 :a4658. +:a4659 :a4659 :a4659. +:a4660 :a4660 :a4660. +:a4661 :a4661 :a4661. +:a4662 :a4662 :a4662. +:a4663 :a4663 :a4663. +:a4664 :a4664 :a4664. +:a4665 :a4665 :a4665. +:a4666 :a4666 :a4666. +:a4667 :a4667 :a4667. +:a4668 :a4668 :a4668. +:a4669 :a4669 :a4669. +:a4670 :a4670 :a4670. +:a4671 :a4671 :a4671. +:a4672 :a4672 :a4672. +:a4673 :a4673 :a4673. +:a4674 :a4674 :a4674. +:a4675 :a4675 :a4675. +:a4676 :a4676 :a4676. +:a4677 :a4677 :a4677. +:a4678 :a4678 :a4678. +:a4679 :a4679 :a4679. +:a4680 :a4680 :a4680. +:a4681 :a4681 :a4681. +:a4682 :a4682 :a4682. +:a4683 :a4683 :a4683. +:a4684 :a4684 :a4684. +:a4685 :a4685 :a4685. +:a4686 :a4686 :a4686. +:a4687 :a4687 :a4687. +:a4688 :a4688 :a4688. +:a4689 :a4689 :a4689. +:a4690 :a4690 :a4690. +:a4691 :a4691 :a4691. +:a4692 :a4692 :a4692. +:a4693 :a4693 :a4693. +:a4694 :a4694 :a4694. +:a4695 :a4695 :a4695. +:a4696 :a4696 :a4696. +:a4697 :a4697 :a4697. +:a4698 :a4698 :a4698. +:a4699 :a4699 :a4699. +:a4700 :a4700 :a4700. +:a4701 :a4701 :a4701. +:a4702 :a4702 :a4702. +:a4703 :a4703 :a4703. +:a4704 :a4704 :a4704. +:a4705 :a4705 :a4705. +:a4706 :a4706 :a4706. +:a4707 :a4707 :a4707. +:a4708 :a4708 :a4708. +:a4709 :a4709 :a4709. +:a4710 :a4710 :a4710. +:a4711 :a4711 :a4711. +:a4712 :a4712 :a4712. +:a4713 :a4713 :a4713. +:a4714 :a4714 :a4714. +:a4715 :a4715 :a4715. +:a4716 :a4716 :a4716. +:a4717 :a4717 :a4717. +:a4718 :a4718 :a4718. +:a4719 :a4719 :a4719. +:a4720 :a4720 :a4720. +:a4721 :a4721 :a4721. +:a4722 :a4722 :a4722. +:a4723 :a4723 :a4723. +:a4724 :a4724 :a4724. +:a4725 :a4725 :a4725. +:a4726 :a4726 :a4726. +:a4727 :a4727 :a4727. +:a4728 :a4728 :a4728. +:a4729 :a4729 :a4729. +:a4730 :a4730 :a4730. +:a4731 :a4731 :a4731. +:a4732 :a4732 :a4732. +:a4733 :a4733 :a4733. +:a4734 :a4734 :a4734. +:a4735 :a4735 :a4735. +:a4736 :a4736 :a4736. +:a4737 :a4737 :a4737. +:a4738 :a4738 :a4738. +:a4739 :a4739 :a4739. +:a4740 :a4740 :a4740. +:a4741 :a4741 :a4741. +:a4742 :a4742 :a4742. +:a4743 :a4743 :a4743. +:a4744 :a4744 :a4744. +:a4745 :a4745 :a4745. +:a4746 :a4746 :a4746. +:a4747 :a4747 :a4747. +:a4748 :a4748 :a4748. +:a4749 :a4749 :a4749. +:a4750 :a4750 :a4750. +:a4751 :a4751 :a4751. +:a4752 :a4752 :a4752. +:a4753 :a4753 :a4753. +:a4754 :a4754 :a4754. +:a4755 :a4755 :a4755. +:a4756 :a4756 :a4756. +:a4757 :a4757 :a4757. +:a4758 :a4758 :a4758. +:a4759 :a4759 :a4759. +:a4760 :a4760 :a4760. +:a4761 :a4761 :a4761. +:a4762 :a4762 :a4762. +:a4763 :a4763 :a4763. +:a4764 :a4764 :a4764. +:a4765 :a4765 :a4765. +:a4766 :a4766 :a4766. +:a4767 :a4767 :a4767. +:a4768 :a4768 :a4768. +:a4769 :a4769 :a4769. +:a4770 :a4770 :a4770. +:a4771 :a4771 :a4771. +:a4772 :a4772 :a4772. +:a4773 :a4773 :a4773. +:a4774 :a4774 :a4774. +:a4775 :a4775 :a4775. +:a4776 :a4776 :a4776. +:a4777 :a4777 :a4777. +:a4778 :a4778 :a4778. +:a4779 :a4779 :a4779. +:a4780 :a4780 :a4780. +:a4781 :a4781 :a4781. +:a4782 :a4782 :a4782. +:a4783 :a4783 :a4783. +:a4784 :a4784 :a4784. +:a4785 :a4785 :a4785. +:a4786 :a4786 :a4786. +:a4787 :a4787 :a4787. +:a4788 :a4788 :a4788. +:a4789 :a4789 :a4789. +:a4790 :a4790 :a4790. +:a4791 :a4791 :a4791. +:a4792 :a4792 :a4792. +:a4793 :a4793 :a4793. +:a4794 :a4794 :a4794. +:a4795 :a4795 :a4795. +:a4796 :a4796 :a4796. +:a4797 :a4797 :a4797. +:a4798 :a4798 :a4798. +:a4799 :a4799 :a4799. +:a4800 :a4800 :a4800. +:a4801 :a4801 :a4801. +:a4802 :a4802 :a4802. +:a4803 :a4803 :a4803. +:a4804 :a4804 :a4804. +:a4805 :a4805 :a4805. +:a4806 :a4806 :a4806. +:a4807 :a4807 :a4807. +:a4808 :a4808 :a4808. +:a4809 :a4809 :a4809. +:a4810 :a4810 :a4810. +:a4811 :a4811 :a4811. +:a4812 :a4812 :a4812. +:a4813 :a4813 :a4813. +:a4814 :a4814 :a4814. +:a4815 :a4815 :a4815. +:a4816 :a4816 :a4816. +:a4817 :a4817 :a4817. +:a4818 :a4818 :a4818. +:a4819 :a4819 :a4819. +:a4820 :a4820 :a4820. +:a4821 :a4821 :a4821. +:a4822 :a4822 :a4822. +:a4823 :a4823 :a4823. +:a4824 :a4824 :a4824. +:a4825 :a4825 :a4825. +:a4826 :a4826 :a4826. +:a4827 :a4827 :a4827. +:a4828 :a4828 :a4828. +:a4829 :a4829 :a4829. +:a4830 :a4830 :a4830. +:a4831 :a4831 :a4831. +:a4832 :a4832 :a4832. +:a4833 :a4833 :a4833. +:a4834 :a4834 :a4834. +:a4835 :a4835 :a4835. +:a4836 :a4836 :a4836. +:a4837 :a4837 :a4837. +:a4838 :a4838 :a4838. +:a4839 :a4839 :a4839. +:a4840 :a4840 :a4840. +:a4841 :a4841 :a4841. +:a4842 :a4842 :a4842. +:a4843 :a4843 :a4843. +:a4844 :a4844 :a4844. +:a4845 :a4845 :a4845. +:a4846 :a4846 :a4846. +:a4847 :a4847 :a4847. +:a4848 :a4848 :a4848. +:a4849 :a4849 :a4849. +:a4850 :a4850 :a4850. +:a4851 :a4851 :a4851. +:a4852 :a4852 :a4852. +:a4853 :a4853 :a4853. +:a4854 :a4854 :a4854. +:a4855 :a4855 :a4855. +:a4856 :a4856 :a4856. +:a4857 :a4857 :a4857. +:a4858 :a4858 :a4858. +:a4859 :a4859 :a4859. +:a4860 :a4860 :a4860. +:a4861 :a4861 :a4861. +:a4862 :a4862 :a4862. +:a4863 :a4863 :a4863. +:a4864 :a4864 :a4864. +:a4865 :a4865 :a4865. +:a4866 :a4866 :a4866. +:a4867 :a4867 :a4867. +:a4868 :a4868 :a4868. +:a4869 :a4869 :a4869. +:a4870 :a4870 :a4870. +:a4871 :a4871 :a4871. +:a4872 :a4872 :a4872. +:a4873 :a4873 :a4873. +:a4874 :a4874 :a4874. +:a4875 :a4875 :a4875. +:a4876 :a4876 :a4876. +:a4877 :a4877 :a4877. +:a4878 :a4878 :a4878. +:a4879 :a4879 :a4879. +:a4880 :a4880 :a4880. +:a4881 :a4881 :a4881. +:a4882 :a4882 :a4882. +:a4883 :a4883 :a4883. +:a4884 :a4884 :a4884. +:a4885 :a4885 :a4885. +:a4886 :a4886 :a4886. +:a4887 :a4887 :a4887. +:a4888 :a4888 :a4888. +:a4889 :a4889 :a4889. +:a4890 :a4890 :a4890. +:a4891 :a4891 :a4891. +:a4892 :a4892 :a4892. +:a4893 :a4893 :a4893. +:a4894 :a4894 :a4894. +:a4895 :a4895 :a4895. +:a4896 :a4896 :a4896. +:a4897 :a4897 :a4897. +:a4898 :a4898 :a4898. +:a4899 :a4899 :a4899. +:a4900 :a4900 :a4900. +:a4901 :a4901 :a4901. +:a4902 :a4902 :a4902. +:a4903 :a4903 :a4903. +:a4904 :a4904 :a4904. +:a4905 :a4905 :a4905. +:a4906 :a4906 :a4906. +:a4907 :a4907 :a4907. +:a4908 :a4908 :a4908. +:a4909 :a4909 :a4909. +:a4910 :a4910 :a4910. +:a4911 :a4911 :a4911. +:a4912 :a4912 :a4912. +:a4913 :a4913 :a4913. +:a4914 :a4914 :a4914. +:a4915 :a4915 :a4915. +:a4916 :a4916 :a4916. +:a4917 :a4917 :a4917. +:a4918 :a4918 :a4918. +:a4919 :a4919 :a4919. +:a4920 :a4920 :a4920. +:a4921 :a4921 :a4921. +:a4922 :a4922 :a4922. +:a4923 :a4923 :a4923. +:a4924 :a4924 :a4924. +:a4925 :a4925 :a4925. +:a4926 :a4926 :a4926. +:a4927 :a4927 :a4927. +:a4928 :a4928 :a4928. +:a4929 :a4929 :a4929. +:a4930 :a4930 :a4930. +:a4931 :a4931 :a4931. +:a4932 :a4932 :a4932. +:a4933 :a4933 :a4933. +:a4934 :a4934 :a4934. +:a4935 :a4935 :a4935. +:a4936 :a4936 :a4936. +:a4937 :a4937 :a4937. +:a4938 :a4938 :a4938. +:a4939 :a4939 :a4939. +:a4940 :a4940 :a4940. +:a4941 :a4941 :a4941. +:a4942 :a4942 :a4942. +:a4943 :a4943 :a4943. +:a4944 :a4944 :a4944. +:a4945 :a4945 :a4945. +:a4946 :a4946 :a4946. +:a4947 :a4947 :a4947. +:a4948 :a4948 :a4948. +:a4949 :a4949 :a4949. +:a4950 :a4950 :a4950. +:a4951 :a4951 :a4951. +:a4952 :a4952 :a4952. +:a4953 :a4953 :a4953. +:a4954 :a4954 :a4954. +:a4955 :a4955 :a4955. +:a4956 :a4956 :a4956. +:a4957 :a4957 :a4957. +:a4958 :a4958 :a4958. +:a4959 :a4959 :a4959. +:a4960 :a4960 :a4960. +:a4961 :a4961 :a4961. +:a4962 :a4962 :a4962. +:a4963 :a4963 :a4963. +:a4964 :a4964 :a4964. +:a4965 :a4965 :a4965. +:a4966 :a4966 :a4966. +:a4967 :a4967 :a4967. +:a4968 :a4968 :a4968. +:a4969 :a4969 :a4969. +:a4970 :a4970 :a4970. +:a4971 :a4971 :a4971. +:a4972 :a4972 :a4972. +:a4973 :a4973 :a4973. +:a4974 :a4974 :a4974. +:a4975 :a4975 :a4975. +:a4976 :a4976 :a4976. +:a4977 :a4977 :a4977. +:a4978 :a4978 :a4978. +:a4979 :a4979 :a4979. +:a4980 :a4980 :a4980. +:a4981 :a4981 :a4981. +:a4982 :a4982 :a4982. +:a4983 :a4983 :a4983. +:a4984 :a4984 :a4984. +:a4985 :a4985 :a4985. +:a4986 :a4986 :a4986. +:a4987 :a4987 :a4987. +:a4988 :a4988 :a4988. +:a4989 :a4989 :a4989. +:a4990 :a4990 :a4990. +:a4991 :a4991 :a4991. +:a4992 :a4992 :a4992. +:a4993 :a4993 :a4993. +:a4994 :a4994 :a4994. +:a4995 :a4995 :a4995. +:a4996 :a4996 :a4996. +:a4997 :a4997 :a4997. +:a4998 :a4998 :a4998. +:a4999 :a4999 :a4999. +:a5000 :a5000 :a5000. +:a5001 :a5001 :a5001. +:a5002 :a5002 :a5002. +:a5003 :a5003 :a5003. +:a5004 :a5004 :a5004. +:a5005 :a5005 :a5005. +:a5006 :a5006 :a5006. +:a5007 :a5007 :a5007. +:a5008 :a5008 :a5008. +:a5009 :a5009 :a5009. +:a5010 :a5010 :a5010. +:a5011 :a5011 :a5011. +:a5012 :a5012 :a5012. +:a5013 :a5013 :a5013. +:a5014 :a5014 :a5014. +:a5015 :a5015 :a5015. +:a5016 :a5016 :a5016. +:a5017 :a5017 :a5017. +:a5018 :a5018 :a5018. +:a5019 :a5019 :a5019. +:a5020 :a5020 :a5020. +:a5021 :a5021 :a5021. +:a5022 :a5022 :a5022. +:a5023 :a5023 :a5023. +:a5024 :a5024 :a5024. +:a5025 :a5025 :a5025. +:a5026 :a5026 :a5026. +:a5027 :a5027 :a5027. +:a5028 :a5028 :a5028. +:a5029 :a5029 :a5029. +:a5030 :a5030 :a5030. +:a5031 :a5031 :a5031. +:a5032 :a5032 :a5032. +:a5033 :a5033 :a5033. +:a5034 :a5034 :a5034. +:a5035 :a5035 :a5035. +:a5036 :a5036 :a5036. +:a5037 :a5037 :a5037. +:a5038 :a5038 :a5038. +:a5039 :a5039 :a5039. +:a5040 :a5040 :a5040. +:a5041 :a5041 :a5041. +:a5042 :a5042 :a5042. +:a5043 :a5043 :a5043. +:a5044 :a5044 :a5044. +:a5045 :a5045 :a5045. +:a5046 :a5046 :a5046. +:a5047 :a5047 :a5047. +:a5048 :a5048 :a5048. +:a5049 :a5049 :a5049. +:a5050 :a5050 :a5050. +:a5051 :a5051 :a5051. +:a5052 :a5052 :a5052. +:a5053 :a5053 :a5053. +:a5054 :a5054 :a5054. +:a5055 :a5055 :a5055. +:a5056 :a5056 :a5056. +:a5057 :a5057 :a5057. +:a5058 :a5058 :a5058. +:a5059 :a5059 :a5059. +:a5060 :a5060 :a5060. +:a5061 :a5061 :a5061. +:a5062 :a5062 :a5062. +:a5063 :a5063 :a5063. +:a5064 :a5064 :a5064. +:a5065 :a5065 :a5065. +:a5066 :a5066 :a5066. +:a5067 :a5067 :a5067. +:a5068 :a5068 :a5068. +:a5069 :a5069 :a5069. +:a5070 :a5070 :a5070. +:a5071 :a5071 :a5071. +:a5072 :a5072 :a5072. +:a5073 :a5073 :a5073. +:a5074 :a5074 :a5074. +:a5075 :a5075 :a5075. +:a5076 :a5076 :a5076. +:a5077 :a5077 :a5077. +:a5078 :a5078 :a5078. +:a5079 :a5079 :a5079. +:a5080 :a5080 :a5080. +:a5081 :a5081 :a5081. +:a5082 :a5082 :a5082. +:a5083 :a5083 :a5083. +:a5084 :a5084 :a5084. +:a5085 :a5085 :a5085. +:a5086 :a5086 :a5086. +:a5087 :a5087 :a5087. +:a5088 :a5088 :a5088. +:a5089 :a5089 :a5089. +:a5090 :a5090 :a5090. +:a5091 :a5091 :a5091. +:a5092 :a5092 :a5092. +:a5093 :a5093 :a5093. +:a5094 :a5094 :a5094. +:a5095 :a5095 :a5095. +:a5096 :a5096 :a5096. +:a5097 :a5097 :a5097. +:a5098 :a5098 :a5098. +:a5099 :a5099 :a5099. +:a5100 :a5100 :a5100. +:a5101 :a5101 :a5101. +:a5102 :a5102 :a5102. +:a5103 :a5103 :a5103. +:a5104 :a5104 :a5104. +:a5105 :a5105 :a5105. +:a5106 :a5106 :a5106. +:a5107 :a5107 :a5107. +:a5108 :a5108 :a5108. +:a5109 :a5109 :a5109. +:a5110 :a5110 :a5110. +:a5111 :a5111 :a5111. +:a5112 :a5112 :a5112. +:a5113 :a5113 :a5113. +:a5114 :a5114 :a5114. +:a5115 :a5115 :a5115. +:a5116 :a5116 :a5116. +:a5117 :a5117 :a5117. +:a5118 :a5118 :a5118. +:a5119 :a5119 :a5119. +:a5120 :a5120 :a5120. +:a5121 :a5121 :a5121. +:a5122 :a5122 :a5122. +:a5123 :a5123 :a5123. +:a5124 :a5124 :a5124. +:a5125 :a5125 :a5125. +:a5126 :a5126 :a5126. +:a5127 :a5127 :a5127. +:a5128 :a5128 :a5128. +:a5129 :a5129 :a5129. +:a5130 :a5130 :a5130. +:a5131 :a5131 :a5131. +:a5132 :a5132 :a5132. +:a5133 :a5133 :a5133. +:a5134 :a5134 :a5134. +:a5135 :a5135 :a5135. +:a5136 :a5136 :a5136. +:a5137 :a5137 :a5137. +:a5138 :a5138 :a5138. +:a5139 :a5139 :a5139. +:a5140 :a5140 :a5140. +:a5141 :a5141 :a5141. +:a5142 :a5142 :a5142. +:a5143 :a5143 :a5143. +:a5144 :a5144 :a5144. +:a5145 :a5145 :a5145. +:a5146 :a5146 :a5146. +:a5147 :a5147 :a5147. +:a5148 :a5148 :a5148. +:a5149 :a5149 :a5149. +:a5150 :a5150 :a5150. +:a5151 :a5151 :a5151. +:a5152 :a5152 :a5152. +:a5153 :a5153 :a5153. +:a5154 :a5154 :a5154. +:a5155 :a5155 :a5155. +:a5156 :a5156 :a5156. +:a5157 :a5157 :a5157. +:a5158 :a5158 :a5158. +:a5159 :a5159 :a5159. +:a5160 :a5160 :a5160. +:a5161 :a5161 :a5161. +:a5162 :a5162 :a5162. +:a5163 :a5163 :a5163. +:a5164 :a5164 :a5164. +:a5165 :a5165 :a5165. +:a5166 :a5166 :a5166. +:a5167 :a5167 :a5167. +:a5168 :a5168 :a5168. +:a5169 :a5169 :a5169. +:a5170 :a5170 :a5170. +:a5171 :a5171 :a5171. +:a5172 :a5172 :a5172. +:a5173 :a5173 :a5173. +:a5174 :a5174 :a5174. +:a5175 :a5175 :a5175. +:a5176 :a5176 :a5176. +:a5177 :a5177 :a5177. +:a5178 :a5178 :a5178. +:a5179 :a5179 :a5179. +:a5180 :a5180 :a5180. +:a5181 :a5181 :a5181. +:a5182 :a5182 :a5182. +:a5183 :a5183 :a5183. +:a5184 :a5184 :a5184. +:a5185 :a5185 :a5185. +:a5186 :a5186 :a5186. +:a5187 :a5187 :a5187. +:a5188 :a5188 :a5188. +:a5189 :a5189 :a5189. +:a5190 :a5190 :a5190. +:a5191 :a5191 :a5191. +:a5192 :a5192 :a5192. +:a5193 :a5193 :a5193. +:a5194 :a5194 :a5194. +:a5195 :a5195 :a5195. +:a5196 :a5196 :a5196. +:a5197 :a5197 :a5197. +:a5198 :a5198 :a5198. +:a5199 :a5199 :a5199. +:a5200 :a5200 :a5200. +:a5201 :a5201 :a5201. +:a5202 :a5202 :a5202. +:a5203 :a5203 :a5203. +:a5204 :a5204 :a5204. +:a5205 :a5205 :a5205. +:a5206 :a5206 :a5206. +:a5207 :a5207 :a5207. +:a5208 :a5208 :a5208. +:a5209 :a5209 :a5209. +:a5210 :a5210 :a5210. +:a5211 :a5211 :a5211. +:a5212 :a5212 :a5212. +:a5213 :a5213 :a5213. +:a5214 :a5214 :a5214. +:a5215 :a5215 :a5215. +:a5216 :a5216 :a5216. +:a5217 :a5217 :a5217. +:a5218 :a5218 :a5218. +:a5219 :a5219 :a5219. +:a5220 :a5220 :a5220. +:a5221 :a5221 :a5221. +:a5222 :a5222 :a5222. +:a5223 :a5223 :a5223. +:a5224 :a5224 :a5224. +:a5225 :a5225 :a5225. +:a5226 :a5226 :a5226. +:a5227 :a5227 :a5227. +:a5228 :a5228 :a5228. +:a5229 :a5229 :a5229. +:a5230 :a5230 :a5230. +:a5231 :a5231 :a5231. +:a5232 :a5232 :a5232. +:a5233 :a5233 :a5233. +:a5234 :a5234 :a5234. +:a5235 :a5235 :a5235. +:a5236 :a5236 :a5236. +:a5237 :a5237 :a5237. +:a5238 :a5238 :a5238. +:a5239 :a5239 :a5239. +:a5240 :a5240 :a5240. +:a5241 :a5241 :a5241. +:a5242 :a5242 :a5242. +:a5243 :a5243 :a5243. +:a5244 :a5244 :a5244. +:a5245 :a5245 :a5245. +:a5246 :a5246 :a5246. +:a5247 :a5247 :a5247. +:a5248 :a5248 :a5248. +:a5249 :a5249 :a5249. +:a5250 :a5250 :a5250. +:a5251 :a5251 :a5251. +:a5252 :a5252 :a5252. +:a5253 :a5253 :a5253. +:a5254 :a5254 :a5254. +:a5255 :a5255 :a5255. +:a5256 :a5256 :a5256. +:a5257 :a5257 :a5257. +:a5258 :a5258 :a5258. +:a5259 :a5259 :a5259. +:a5260 :a5260 :a5260. +:a5261 :a5261 :a5261. +:a5262 :a5262 :a5262. +:a5263 :a5263 :a5263. +:a5264 :a5264 :a5264. +:a5265 :a5265 :a5265. +:a5266 :a5266 :a5266. +:a5267 :a5267 :a5267. +:a5268 :a5268 :a5268. +:a5269 :a5269 :a5269. +:a5270 :a5270 :a5270. +:a5271 :a5271 :a5271. +:a5272 :a5272 :a5272. +:a5273 :a5273 :a5273. +:a5274 :a5274 :a5274. +:a5275 :a5275 :a5275. +:a5276 :a5276 :a5276. +:a5277 :a5277 :a5277. +:a5278 :a5278 :a5278. +:a5279 :a5279 :a5279. +:a5280 :a5280 :a5280. +:a5281 :a5281 :a5281. +:a5282 :a5282 :a5282. +:a5283 :a5283 :a5283. +:a5284 :a5284 :a5284. +:a5285 :a5285 :a5285. +:a5286 :a5286 :a5286. +:a5287 :a5287 :a5287. +:a5288 :a5288 :a5288. +:a5289 :a5289 :a5289. +:a5290 :a5290 :a5290. +:a5291 :a5291 :a5291. +:a5292 :a5292 :a5292. +:a5293 :a5293 :a5293. +:a5294 :a5294 :a5294. +:a5295 :a5295 :a5295. +:a5296 :a5296 :a5296. +:a5297 :a5297 :a5297. +:a5298 :a5298 :a5298. +:a5299 :a5299 :a5299. +:a5300 :a5300 :a5300. +:a5301 :a5301 :a5301. +:a5302 :a5302 :a5302. +:a5303 :a5303 :a5303. +:a5304 :a5304 :a5304. +:a5305 :a5305 :a5305. +:a5306 :a5306 :a5306. +:a5307 :a5307 :a5307. +:a5308 :a5308 :a5308. +:a5309 :a5309 :a5309. +:a5310 :a5310 :a5310. +:a5311 :a5311 :a5311. +:a5312 :a5312 :a5312. +:a5313 :a5313 :a5313. +:a5314 :a5314 :a5314. +:a5315 :a5315 :a5315. +:a5316 :a5316 :a5316. +:a5317 :a5317 :a5317. +:a5318 :a5318 :a5318. +:a5319 :a5319 :a5319. +:a5320 :a5320 :a5320. +:a5321 :a5321 :a5321. +:a5322 :a5322 :a5322. +:a5323 :a5323 :a5323. +:a5324 :a5324 :a5324. +:a5325 :a5325 :a5325. +:a5326 :a5326 :a5326. +:a5327 :a5327 :a5327. +:a5328 :a5328 :a5328. +:a5329 :a5329 :a5329. +:a5330 :a5330 :a5330. +:a5331 :a5331 :a5331. +:a5332 :a5332 :a5332. +:a5333 :a5333 :a5333. +:a5334 :a5334 :a5334. +:a5335 :a5335 :a5335. +:a5336 :a5336 :a5336. +:a5337 :a5337 :a5337. +:a5338 :a5338 :a5338. +:a5339 :a5339 :a5339. +:a5340 :a5340 :a5340. +:a5341 :a5341 :a5341. +:a5342 :a5342 :a5342. +:a5343 :a5343 :a5343. +:a5344 :a5344 :a5344. +:a5345 :a5345 :a5345. +:a5346 :a5346 :a5346. +:a5347 :a5347 :a5347. +:a5348 :a5348 :a5348. +:a5349 :a5349 :a5349. +:a5350 :a5350 :a5350. +:a5351 :a5351 :a5351. +:a5352 :a5352 :a5352. +:a5353 :a5353 :a5353. +:a5354 :a5354 :a5354. +:a5355 :a5355 :a5355. +:a5356 :a5356 :a5356. +:a5357 :a5357 :a5357. +:a5358 :a5358 :a5358. +:a5359 :a5359 :a5359. +:a5360 :a5360 :a5360. +:a5361 :a5361 :a5361. +:a5362 :a5362 :a5362. +:a5363 :a5363 :a5363. +:a5364 :a5364 :a5364. +:a5365 :a5365 :a5365. +:a5366 :a5366 :a5366. +:a5367 :a5367 :a5367. +:a5368 :a5368 :a5368. +:a5369 :a5369 :a5369. +:a5370 :a5370 :a5370. +:a5371 :a5371 :a5371. +:a5372 :a5372 :a5372. +:a5373 :a5373 :a5373. +:a5374 :a5374 :a5374. +:a5375 :a5375 :a5375. +:a5376 :a5376 :a5376. +:a5377 :a5377 :a5377. +:a5378 :a5378 :a5378. +:a5379 :a5379 :a5379. +:a5380 :a5380 :a5380. +:a5381 :a5381 :a5381. +:a5382 :a5382 :a5382. +:a5383 :a5383 :a5383. +:a5384 :a5384 :a5384. +:a5385 :a5385 :a5385. +:a5386 :a5386 :a5386. +:a5387 :a5387 :a5387. +:a5388 :a5388 :a5388. +:a5389 :a5389 :a5389. +:a5390 :a5390 :a5390. +:a5391 :a5391 :a5391. +:a5392 :a5392 :a5392. +:a5393 :a5393 :a5393. +:a5394 :a5394 :a5394. +:a5395 :a5395 :a5395. +:a5396 :a5396 :a5396. +:a5397 :a5397 :a5397. +:a5398 :a5398 :a5398. +:a5399 :a5399 :a5399. +:a5400 :a5400 :a5400. +:a5401 :a5401 :a5401. +:a5402 :a5402 :a5402. +:a5403 :a5403 :a5403. +:a5404 :a5404 :a5404. +:a5405 :a5405 :a5405. +:a5406 :a5406 :a5406. +:a5407 :a5407 :a5407. +:a5408 :a5408 :a5408. +:a5409 :a5409 :a5409. +:a5410 :a5410 :a5410. +:a5411 :a5411 :a5411. +:a5412 :a5412 :a5412. +:a5413 :a5413 :a5413. +:a5414 :a5414 :a5414. +:a5415 :a5415 :a5415. +:a5416 :a5416 :a5416. +:a5417 :a5417 :a5417. +:a5418 :a5418 :a5418. +:a5419 :a5419 :a5419. +:a5420 :a5420 :a5420. +:a5421 :a5421 :a5421. +:a5422 :a5422 :a5422. +:a5423 :a5423 :a5423. +:a5424 :a5424 :a5424. +:a5425 :a5425 :a5425. +:a5426 :a5426 :a5426. +:a5427 :a5427 :a5427. +:a5428 :a5428 :a5428. +:a5429 :a5429 :a5429. +:a5430 :a5430 :a5430. +:a5431 :a5431 :a5431. +:a5432 :a5432 :a5432. +:a5433 :a5433 :a5433. +:a5434 :a5434 :a5434. +:a5435 :a5435 :a5435. +:a5436 :a5436 :a5436. +:a5437 :a5437 :a5437. +:a5438 :a5438 :a5438. +:a5439 :a5439 :a5439. +:a5440 :a5440 :a5440. +:a5441 :a5441 :a5441. +:a5442 :a5442 :a5442. +:a5443 :a5443 :a5443. +:a5444 :a5444 :a5444. +:a5445 :a5445 :a5445. +:a5446 :a5446 :a5446. +:a5447 :a5447 :a5447. +:a5448 :a5448 :a5448. +:a5449 :a5449 :a5449. +:a5450 :a5450 :a5450. +:a5451 :a5451 :a5451. +:a5452 :a5452 :a5452. +:a5453 :a5453 :a5453. +:a5454 :a5454 :a5454. +:a5455 :a5455 :a5455. +:a5456 :a5456 :a5456. +:a5457 :a5457 :a5457. +:a5458 :a5458 :a5458. +:a5459 :a5459 :a5459. +:a5460 :a5460 :a5460. +:a5461 :a5461 :a5461. +:a5462 :a5462 :a5462. +:a5463 :a5463 :a5463. +:a5464 :a5464 :a5464. +:a5465 :a5465 :a5465. +:a5466 :a5466 :a5466. +:a5467 :a5467 :a5467. +:a5468 :a5468 :a5468. +:a5469 :a5469 :a5469. +:a5470 :a5470 :a5470. +:a5471 :a5471 :a5471. +:a5472 :a5472 :a5472. +:a5473 :a5473 :a5473. +:a5474 :a5474 :a5474. +:a5475 :a5475 :a5475. +:a5476 :a5476 :a5476. +:a5477 :a5477 :a5477. +:a5478 :a5478 :a5478. +:a5479 :a5479 :a5479. +:a5480 :a5480 :a5480. +:a5481 :a5481 :a5481. +:a5482 :a5482 :a5482. +:a5483 :a5483 :a5483. +:a5484 :a5484 :a5484. +:a5485 :a5485 :a5485. +:a5486 :a5486 :a5486. +:a5487 :a5487 :a5487. +:a5488 :a5488 :a5488. +:a5489 :a5489 :a5489. +:a5490 :a5490 :a5490. +:a5491 :a5491 :a5491. +:a5492 :a5492 :a5492. +:a5493 :a5493 :a5493. +:a5494 :a5494 :a5494. +:a5495 :a5495 :a5495. +:a5496 :a5496 :a5496. +:a5497 :a5497 :a5497. +:a5498 :a5498 :a5498. +:a5499 :a5499 :a5499. +:a5500 :a5500 :a5500. +:a5501 :a5501 :a5501. +:a5502 :a5502 :a5502. +:a5503 :a5503 :a5503. +:a5504 :a5504 :a5504. +:a5505 :a5505 :a5505. +:a5506 :a5506 :a5506. +:a5507 :a5507 :a5507. +:a5508 :a5508 :a5508. +:a5509 :a5509 :a5509. +:a5510 :a5510 :a5510. +:a5511 :a5511 :a5511. +:a5512 :a5512 :a5512. +:a5513 :a5513 :a5513. +:a5514 :a5514 :a5514. +:a5515 :a5515 :a5515. +:a5516 :a5516 :a5516. +:a5517 :a5517 :a5517. +:a5518 :a5518 :a5518. +:a5519 :a5519 :a5519. +:a5520 :a5520 :a5520. +:a5521 :a5521 :a5521. +:a5522 :a5522 :a5522. +:a5523 :a5523 :a5523. +:a5524 :a5524 :a5524. +:a5525 :a5525 :a5525. +:a5526 :a5526 :a5526. +:a5527 :a5527 :a5527. +:a5528 :a5528 :a5528. +:a5529 :a5529 :a5529. +:a5530 :a5530 :a5530. +:a5531 :a5531 :a5531. +:a5532 :a5532 :a5532. +:a5533 :a5533 :a5533. +:a5534 :a5534 :a5534. +:a5535 :a5535 :a5535. +:a5536 :a5536 :a5536. +:a5537 :a5537 :a5537. +:a5538 :a5538 :a5538. +:a5539 :a5539 :a5539. +:a5540 :a5540 :a5540. +:a5541 :a5541 :a5541. +:a5542 :a5542 :a5542. +:a5543 :a5543 :a5543. +:a5544 :a5544 :a5544. +:a5545 :a5545 :a5545. +:a5546 :a5546 :a5546. +:a5547 :a5547 :a5547. +:a5548 :a5548 :a5548. +:a5549 :a5549 :a5549. +:a5550 :a5550 :a5550. +:a5551 :a5551 :a5551. +:a5552 :a5552 :a5552. +:a5553 :a5553 :a5553. +:a5554 :a5554 :a5554. +:a5555 :a5555 :a5555. +:a5556 :a5556 :a5556. +:a5557 :a5557 :a5557. +:a5558 :a5558 :a5558. +:a5559 :a5559 :a5559. +:a5560 :a5560 :a5560. +:a5561 :a5561 :a5561. +:a5562 :a5562 :a5562. +:a5563 :a5563 :a5563. +:a5564 :a5564 :a5564. +:a5565 :a5565 :a5565. +:a5566 :a5566 :a5566. +:a5567 :a5567 :a5567. +:a5568 :a5568 :a5568. +:a5569 :a5569 :a5569. +:a5570 :a5570 :a5570. +:a5571 :a5571 :a5571. +:a5572 :a5572 :a5572. +:a5573 :a5573 :a5573. +:a5574 :a5574 :a5574. +:a5575 :a5575 :a5575. +:a5576 :a5576 :a5576. +:a5577 :a5577 :a5577. +:a5578 :a5578 :a5578. +:a5579 :a5579 :a5579. +:a5580 :a5580 :a5580. +:a5581 :a5581 :a5581. +:a5582 :a5582 :a5582. +:a5583 :a5583 :a5583. +:a5584 :a5584 :a5584. +:a5585 :a5585 :a5585. +:a5586 :a5586 :a5586. +:a5587 :a5587 :a5587. +:a5588 :a5588 :a5588. +:a5589 :a5589 :a5589. +:a5590 :a5590 :a5590. +:a5591 :a5591 :a5591. +:a5592 :a5592 :a5592. +:a5593 :a5593 :a5593. +:a5594 :a5594 :a5594. +:a5595 :a5595 :a5595. +:a5596 :a5596 :a5596. +:a5597 :a5597 :a5597. +:a5598 :a5598 :a5598. +:a5599 :a5599 :a5599. +:a5600 :a5600 :a5600. +:a5601 :a5601 :a5601. +:a5602 :a5602 :a5602. +:a5603 :a5603 :a5603. +:a5604 :a5604 :a5604. +:a5605 :a5605 :a5605. +:a5606 :a5606 :a5606. +:a5607 :a5607 :a5607. +:a5608 :a5608 :a5608. +:a5609 :a5609 :a5609. +:a5610 :a5610 :a5610. +:a5611 :a5611 :a5611. +:a5612 :a5612 :a5612. +:a5613 :a5613 :a5613. +:a5614 :a5614 :a5614. +:a5615 :a5615 :a5615. +:a5616 :a5616 :a5616. +:a5617 :a5617 :a5617. +:a5618 :a5618 :a5618. +:a5619 :a5619 :a5619. +:a5620 :a5620 :a5620. +:a5621 :a5621 :a5621. +:a5622 :a5622 :a5622. +:a5623 :a5623 :a5623. +:a5624 :a5624 :a5624. +:a5625 :a5625 :a5625. +:a5626 :a5626 :a5626. +:a5627 :a5627 :a5627. +:a5628 :a5628 :a5628. +:a5629 :a5629 :a5629. +:a5630 :a5630 :a5630. +:a5631 :a5631 :a5631. +:a5632 :a5632 :a5632. +:a5633 :a5633 :a5633. +:a5634 :a5634 :a5634. +:a5635 :a5635 :a5635. +:a5636 :a5636 :a5636. +:a5637 :a5637 :a5637. +:a5638 :a5638 :a5638. +:a5639 :a5639 :a5639. +:a5640 :a5640 :a5640. +:a5641 :a5641 :a5641. +:a5642 :a5642 :a5642. +:a5643 :a5643 :a5643. +:a5644 :a5644 :a5644. +:a5645 :a5645 :a5645. +:a5646 :a5646 :a5646. +:a5647 :a5647 :a5647. +:a5648 :a5648 :a5648. +:a5649 :a5649 :a5649. +:a5650 :a5650 :a5650. +:a5651 :a5651 :a5651. +:a5652 :a5652 :a5652. +:a5653 :a5653 :a5653. +:a5654 :a5654 :a5654. +:a5655 :a5655 :a5655. +:a5656 :a5656 :a5656. +:a5657 :a5657 :a5657. +:a5658 :a5658 :a5658. +:a5659 :a5659 :a5659. +:a5660 :a5660 :a5660. +:a5661 :a5661 :a5661. +:a5662 :a5662 :a5662. +:a5663 :a5663 :a5663. +:a5664 :a5664 :a5664. +:a5665 :a5665 :a5665. +:a5666 :a5666 :a5666. +:a5667 :a5667 :a5667. +:a5668 :a5668 :a5668. +:a5669 :a5669 :a5669. +:a5670 :a5670 :a5670. +:a5671 :a5671 :a5671. +:a5672 :a5672 :a5672. +:a5673 :a5673 :a5673. +:a5674 :a5674 :a5674. +:a5675 :a5675 :a5675. +:a5676 :a5676 :a5676. +:a5677 :a5677 :a5677. +:a5678 :a5678 :a5678. +:a5679 :a5679 :a5679. +:a5680 :a5680 :a5680. +:a5681 :a5681 :a5681. +:a5682 :a5682 :a5682. +:a5683 :a5683 :a5683. +:a5684 :a5684 :a5684. +:a5685 :a5685 :a5685. +:a5686 :a5686 :a5686. +:a5687 :a5687 :a5687. +:a5688 :a5688 :a5688. +:a5689 :a5689 :a5689. +:a5690 :a5690 :a5690. +:a5691 :a5691 :a5691. +:a5692 :a5692 :a5692. +:a5693 :a5693 :a5693. +:a5694 :a5694 :a5694. +:a5695 :a5695 :a5695. +:a5696 :a5696 :a5696. +:a5697 :a5697 :a5697. +:a5698 :a5698 :a5698. +:a5699 :a5699 :a5699. +:a5700 :a5700 :a5700. +:a5701 :a5701 :a5701. +:a5702 :a5702 :a5702. +:a5703 :a5703 :a5703. +:a5704 :a5704 :a5704. +:a5705 :a5705 :a5705. +:a5706 :a5706 :a5706. +:a5707 :a5707 :a5707. +:a5708 :a5708 :a5708. +:a5709 :a5709 :a5709. +:a5710 :a5710 :a5710. +:a5711 :a5711 :a5711. +:a5712 :a5712 :a5712. +:a5713 :a5713 :a5713. +:a5714 :a5714 :a5714. +:a5715 :a5715 :a5715. +:a5716 :a5716 :a5716. +:a5717 :a5717 :a5717. +:a5718 :a5718 :a5718. +:a5719 :a5719 :a5719. +:a5720 :a5720 :a5720. +:a5721 :a5721 :a5721. +:a5722 :a5722 :a5722. +:a5723 :a5723 :a5723. +:a5724 :a5724 :a5724. +:a5725 :a5725 :a5725. +:a5726 :a5726 :a5726. +:a5727 :a5727 :a5727. +:a5728 :a5728 :a5728. +:a5729 :a5729 :a5729. +:a5730 :a5730 :a5730. +:a5731 :a5731 :a5731. +:a5732 :a5732 :a5732. +:a5733 :a5733 :a5733. +:a5734 :a5734 :a5734. +:a5735 :a5735 :a5735. +:a5736 :a5736 :a5736. +:a5737 :a5737 :a5737. +:a5738 :a5738 :a5738. +:a5739 :a5739 :a5739. +:a5740 :a5740 :a5740. +:a5741 :a5741 :a5741. +:a5742 :a5742 :a5742. +:a5743 :a5743 :a5743. +:a5744 :a5744 :a5744. +:a5745 :a5745 :a5745. +:a5746 :a5746 :a5746. +:a5747 :a5747 :a5747. +:a5748 :a5748 :a5748. +:a5749 :a5749 :a5749. +:a5750 :a5750 :a5750. +:a5751 :a5751 :a5751. +:a5752 :a5752 :a5752. +:a5753 :a5753 :a5753. +:a5754 :a5754 :a5754. +:a5755 :a5755 :a5755. +:a5756 :a5756 :a5756. +:a5757 :a5757 :a5757. +:a5758 :a5758 :a5758. +:a5759 :a5759 :a5759. +:a5760 :a5760 :a5760. +:a5761 :a5761 :a5761. +:a5762 :a5762 :a5762. +:a5763 :a5763 :a5763. +:a5764 :a5764 :a5764. +:a5765 :a5765 :a5765. +:a5766 :a5766 :a5766. +:a5767 :a5767 :a5767. +:a5768 :a5768 :a5768. +:a5769 :a5769 :a5769. +:a5770 :a5770 :a5770. +:a5771 :a5771 :a5771. +:a5772 :a5772 :a5772. +:a5773 :a5773 :a5773. +:a5774 :a5774 :a5774. +:a5775 :a5775 :a5775. +:a5776 :a5776 :a5776. +:a5777 :a5777 :a5777. +:a5778 :a5778 :a5778. +:a5779 :a5779 :a5779. +:a5780 :a5780 :a5780. +:a5781 :a5781 :a5781. +:a5782 :a5782 :a5782. +:a5783 :a5783 :a5783. +:a5784 :a5784 :a5784. +:a5785 :a5785 :a5785. +:a5786 :a5786 :a5786. +:a5787 :a5787 :a5787. +:a5788 :a5788 :a5788. +:a5789 :a5789 :a5789. +:a5790 :a5790 :a5790. +:a5791 :a5791 :a5791. +:a5792 :a5792 :a5792. +:a5793 :a5793 :a5793. +:a5794 :a5794 :a5794. +:a5795 :a5795 :a5795. +:a5796 :a5796 :a5796. +:a5797 :a5797 :a5797. +:a5798 :a5798 :a5798. +:a5799 :a5799 :a5799. +:a5800 :a5800 :a5800. +:a5801 :a5801 :a5801. +:a5802 :a5802 :a5802. +:a5803 :a5803 :a5803. +:a5804 :a5804 :a5804. +:a5805 :a5805 :a5805. +:a5806 :a5806 :a5806. +:a5807 :a5807 :a5807. +:a5808 :a5808 :a5808. +:a5809 :a5809 :a5809. +:a5810 :a5810 :a5810. +:a5811 :a5811 :a5811. +:a5812 :a5812 :a5812. +:a5813 :a5813 :a5813. +:a5814 :a5814 :a5814. +:a5815 :a5815 :a5815. +:a5816 :a5816 :a5816. +:a5817 :a5817 :a5817. +:a5818 :a5818 :a5818. +:a5819 :a5819 :a5819. +:a5820 :a5820 :a5820. +:a5821 :a5821 :a5821. +:a5822 :a5822 :a5822. +:a5823 :a5823 :a5823. +:a5824 :a5824 :a5824. +:a5825 :a5825 :a5825. +:a5826 :a5826 :a5826. +:a5827 :a5827 :a5827. +:a5828 :a5828 :a5828. +:a5829 :a5829 :a5829. +:a5830 :a5830 :a5830. +:a5831 :a5831 :a5831. +:a5832 :a5832 :a5832. +:a5833 :a5833 :a5833. +:a5834 :a5834 :a5834. +:a5835 :a5835 :a5835. +:a5836 :a5836 :a5836. +:a5837 :a5837 :a5837. +:a5838 :a5838 :a5838. +:a5839 :a5839 :a5839. +:a5840 :a5840 :a5840. +:a5841 :a5841 :a5841. +:a5842 :a5842 :a5842. +:a5843 :a5843 :a5843. +:a5844 :a5844 :a5844. +:a5845 :a5845 :a5845. +:a5846 :a5846 :a5846. +:a5847 :a5847 :a5847. +:a5848 :a5848 :a5848. +:a5849 :a5849 :a5849. +:a5850 :a5850 :a5850. +:a5851 :a5851 :a5851. +:a5852 :a5852 :a5852. +:a5853 :a5853 :a5853. +:a5854 :a5854 :a5854. +:a5855 :a5855 :a5855. +:a5856 :a5856 :a5856. +:a5857 :a5857 :a5857. +:a5858 :a5858 :a5858. +:a5859 :a5859 :a5859. +:a5860 :a5860 :a5860. +:a5861 :a5861 :a5861. +:a5862 :a5862 :a5862. +:a5863 :a5863 :a5863. +:a5864 :a5864 :a5864. +:a5865 :a5865 :a5865. +:a5866 :a5866 :a5866. +:a5867 :a5867 :a5867. +:a5868 :a5868 :a5868. +:a5869 :a5869 :a5869. +:a5870 :a5870 :a5870. +:a5871 :a5871 :a5871. +:a5872 :a5872 :a5872. +:a5873 :a5873 :a5873. +:a5874 :a5874 :a5874. +:a5875 :a5875 :a5875. +:a5876 :a5876 :a5876. +:a5877 :a5877 :a5877. +:a5878 :a5878 :a5878. +:a5879 :a5879 :a5879. +:a5880 :a5880 :a5880. +:a5881 :a5881 :a5881. +:a5882 :a5882 :a5882. +:a5883 :a5883 :a5883. +:a5884 :a5884 :a5884. +:a5885 :a5885 :a5885. +:a5886 :a5886 :a5886. +:a5887 :a5887 :a5887. +:a5888 :a5888 :a5888. +:a5889 :a5889 :a5889. +:a5890 :a5890 :a5890. +:a5891 :a5891 :a5891. +:a5892 :a5892 :a5892. +:a5893 :a5893 :a5893. +:a5894 :a5894 :a5894. +:a5895 :a5895 :a5895. +:a5896 :a5896 :a5896. +:a5897 :a5897 :a5897. +:a5898 :a5898 :a5898. +:a5899 :a5899 :a5899. +:a5900 :a5900 :a5900. +:a5901 :a5901 :a5901. +:a5902 :a5902 :a5902. +:a5903 :a5903 :a5903. +:a5904 :a5904 :a5904. +:a5905 :a5905 :a5905. +:a5906 :a5906 :a5906. +:a5907 :a5907 :a5907. +:a5908 :a5908 :a5908. +:a5909 :a5909 :a5909. +:a5910 :a5910 :a5910. +:a5911 :a5911 :a5911. +:a5912 :a5912 :a5912. +:a5913 :a5913 :a5913. +:a5914 :a5914 :a5914. +:a5915 :a5915 :a5915. +:a5916 :a5916 :a5916. +:a5917 :a5917 :a5917. +:a5918 :a5918 :a5918. +:a5919 :a5919 :a5919. +:a5920 :a5920 :a5920. +:a5921 :a5921 :a5921. +:a5922 :a5922 :a5922. +:a5923 :a5923 :a5923. +:a5924 :a5924 :a5924. +:a5925 :a5925 :a5925. +:a5926 :a5926 :a5926. +:a5927 :a5927 :a5927. +:a5928 :a5928 :a5928. +:a5929 :a5929 :a5929. +:a5930 :a5930 :a5930. +:a5931 :a5931 :a5931. +:a5932 :a5932 :a5932. +:a5933 :a5933 :a5933. +:a5934 :a5934 :a5934. +:a5935 :a5935 :a5935. +:a5936 :a5936 :a5936. +:a5937 :a5937 :a5937. +:a5938 :a5938 :a5938. +:a5939 :a5939 :a5939. +:a5940 :a5940 :a5940. +:a5941 :a5941 :a5941. +:a5942 :a5942 :a5942. +:a5943 :a5943 :a5943. +:a5944 :a5944 :a5944. +:a5945 :a5945 :a5945. +:a5946 :a5946 :a5946. +:a5947 :a5947 :a5947. +:a5948 :a5948 :a5948. +:a5949 :a5949 :a5949. +:a5950 :a5950 :a5950. +:a5951 :a5951 :a5951. +:a5952 :a5952 :a5952. +:a5953 :a5953 :a5953. +:a5954 :a5954 :a5954. +:a5955 :a5955 :a5955. +:a5956 :a5956 :a5956. +:a5957 :a5957 :a5957. +:a5958 :a5958 :a5958. +:a5959 :a5959 :a5959. +:a5960 :a5960 :a5960. +:a5961 :a5961 :a5961. +:a5962 :a5962 :a5962. +:a5963 :a5963 :a5963. +:a5964 :a5964 :a5964. +:a5965 :a5965 :a5965. +:a5966 :a5966 :a5966. +:a5967 :a5967 :a5967. +:a5968 :a5968 :a5968. +:a5969 :a5969 :a5969. +:a5970 :a5970 :a5970. +:a5971 :a5971 :a5971. +:a5972 :a5972 :a5972. +:a5973 :a5973 :a5973. +:a5974 :a5974 :a5974. +:a5975 :a5975 :a5975. +:a5976 :a5976 :a5976. +:a5977 :a5977 :a5977. +:a5978 :a5978 :a5978. +:a5979 :a5979 :a5979. +:a5980 :a5980 :a5980. +:a5981 :a5981 :a5981. +:a5982 :a5982 :a5982. +:a5983 :a5983 :a5983. +:a5984 :a5984 :a5984. +:a5985 :a5985 :a5985. +:a5986 :a5986 :a5986. +:a5987 :a5987 :a5987. +:a5988 :a5988 :a5988. +:a5989 :a5989 :a5989. +:a5990 :a5990 :a5990. +:a5991 :a5991 :a5991. +:a5992 :a5992 :a5992. +:a5993 :a5993 :a5993. +:a5994 :a5994 :a5994. +:a5995 :a5995 :a5995. +:a5996 :a5996 :a5996. +:a5997 :a5997 :a5997. +:a5998 :a5998 :a5998. +:a5999 :a5999 :a5999. +:a6000 :a6000 :a6000. +:a6001 :a6001 :a6001. +:a6002 :a6002 :a6002. +:a6003 :a6003 :a6003. +:a6004 :a6004 :a6004. +:a6005 :a6005 :a6005. +:a6006 :a6006 :a6006. +:a6007 :a6007 :a6007. +:a6008 :a6008 :a6008. +:a6009 :a6009 :a6009. +:a6010 :a6010 :a6010. +:a6011 :a6011 :a6011. +:a6012 :a6012 :a6012. +:a6013 :a6013 :a6013. +:a6014 :a6014 :a6014. +:a6015 :a6015 :a6015. +:a6016 :a6016 :a6016. +:a6017 :a6017 :a6017. +:a6018 :a6018 :a6018. +:a6019 :a6019 :a6019. +:a6020 :a6020 :a6020. +:a6021 :a6021 :a6021. +:a6022 :a6022 :a6022. +:a6023 :a6023 :a6023. +:a6024 :a6024 :a6024. +:a6025 :a6025 :a6025. +:a6026 :a6026 :a6026. +:a6027 :a6027 :a6027. +:a6028 :a6028 :a6028. +:a6029 :a6029 :a6029. +:a6030 :a6030 :a6030. +:a6031 :a6031 :a6031. +:a6032 :a6032 :a6032. +:a6033 :a6033 :a6033. +:a6034 :a6034 :a6034. +:a6035 :a6035 :a6035. +:a6036 :a6036 :a6036. +:a6037 :a6037 :a6037. +:a6038 :a6038 :a6038. +:a6039 :a6039 :a6039. +:a6040 :a6040 :a6040. +:a6041 :a6041 :a6041. +:a6042 :a6042 :a6042. +:a6043 :a6043 :a6043. +:a6044 :a6044 :a6044. +:a6045 :a6045 :a6045. +:a6046 :a6046 :a6046. +:a6047 :a6047 :a6047. +:a6048 :a6048 :a6048. +:a6049 :a6049 :a6049. +:a6050 :a6050 :a6050. +:a6051 :a6051 :a6051. +:a6052 :a6052 :a6052. +:a6053 :a6053 :a6053. +:a6054 :a6054 :a6054. +:a6055 :a6055 :a6055. +:a6056 :a6056 :a6056. +:a6057 :a6057 :a6057. +:a6058 :a6058 :a6058. +:a6059 :a6059 :a6059. +:a6060 :a6060 :a6060. +:a6061 :a6061 :a6061. +:a6062 :a6062 :a6062. +:a6063 :a6063 :a6063. +:a6064 :a6064 :a6064. +:a6065 :a6065 :a6065. +:a6066 :a6066 :a6066. +:a6067 :a6067 :a6067. +:a6068 :a6068 :a6068. +:a6069 :a6069 :a6069. +:a6070 :a6070 :a6070. +:a6071 :a6071 :a6071. +:a6072 :a6072 :a6072. +:a6073 :a6073 :a6073. +:a6074 :a6074 :a6074. +:a6075 :a6075 :a6075. +:a6076 :a6076 :a6076. +:a6077 :a6077 :a6077. +:a6078 :a6078 :a6078. +:a6079 :a6079 :a6079. +:a6080 :a6080 :a6080. +:a6081 :a6081 :a6081. +:a6082 :a6082 :a6082. +:a6083 :a6083 :a6083. +:a6084 :a6084 :a6084. +:a6085 :a6085 :a6085. +:a6086 :a6086 :a6086. +:a6087 :a6087 :a6087. +:a6088 :a6088 :a6088. +:a6089 :a6089 :a6089. +:a6090 :a6090 :a6090. +:a6091 :a6091 :a6091. +:a6092 :a6092 :a6092. +:a6093 :a6093 :a6093. +:a6094 :a6094 :a6094. +:a6095 :a6095 :a6095. +:a6096 :a6096 :a6096. +:a6097 :a6097 :a6097. +:a6098 :a6098 :a6098. +:a6099 :a6099 :a6099. +:a6100 :a6100 :a6100. +:a6101 :a6101 :a6101. +:a6102 :a6102 :a6102. +:a6103 :a6103 :a6103. +:a6104 :a6104 :a6104. +:a6105 :a6105 :a6105. +:a6106 :a6106 :a6106. +:a6107 :a6107 :a6107. +:a6108 :a6108 :a6108. +:a6109 :a6109 :a6109. +:a6110 :a6110 :a6110. +:a6111 :a6111 :a6111. +:a6112 :a6112 :a6112. +:a6113 :a6113 :a6113. +:a6114 :a6114 :a6114. +:a6115 :a6115 :a6115. +:a6116 :a6116 :a6116. +:a6117 :a6117 :a6117. +:a6118 :a6118 :a6118. +:a6119 :a6119 :a6119. +:a6120 :a6120 :a6120. +:a6121 :a6121 :a6121. +:a6122 :a6122 :a6122. +:a6123 :a6123 :a6123. +:a6124 :a6124 :a6124. +:a6125 :a6125 :a6125. +:a6126 :a6126 :a6126. +:a6127 :a6127 :a6127. +:a6128 :a6128 :a6128. +:a6129 :a6129 :a6129. +:a6130 :a6130 :a6130. +:a6131 :a6131 :a6131. +:a6132 :a6132 :a6132. +:a6133 :a6133 :a6133. +:a6134 :a6134 :a6134. +:a6135 :a6135 :a6135. +:a6136 :a6136 :a6136. +:a6137 :a6137 :a6137. +:a6138 :a6138 :a6138. +:a6139 :a6139 :a6139. +:a6140 :a6140 :a6140. +:a6141 :a6141 :a6141. +:a6142 :a6142 :a6142. +:a6143 :a6143 :a6143. +:a6144 :a6144 :a6144. +:a6145 :a6145 :a6145. +:a6146 :a6146 :a6146. +:a6147 :a6147 :a6147. +:a6148 :a6148 :a6148. +:a6149 :a6149 :a6149. +:a6150 :a6150 :a6150. +:a6151 :a6151 :a6151. +:a6152 :a6152 :a6152. +:a6153 :a6153 :a6153. +:a6154 :a6154 :a6154. +:a6155 :a6155 :a6155. +:a6156 :a6156 :a6156. +:a6157 :a6157 :a6157. +:a6158 :a6158 :a6158. +:a6159 :a6159 :a6159. +:a6160 :a6160 :a6160. +:a6161 :a6161 :a6161. +:a6162 :a6162 :a6162. +:a6163 :a6163 :a6163. +:a6164 :a6164 :a6164. +:a6165 :a6165 :a6165. +:a6166 :a6166 :a6166. +:a6167 :a6167 :a6167. +:a6168 :a6168 :a6168. +:a6169 :a6169 :a6169. +:a6170 :a6170 :a6170. +:a6171 :a6171 :a6171. +:a6172 :a6172 :a6172. +:a6173 :a6173 :a6173. +:a6174 :a6174 :a6174. +:a6175 :a6175 :a6175. +:a6176 :a6176 :a6176. +:a6177 :a6177 :a6177. +:a6178 :a6178 :a6178. +:a6179 :a6179 :a6179. +:a6180 :a6180 :a6180. +:a6181 :a6181 :a6181. +:a6182 :a6182 :a6182. +:a6183 :a6183 :a6183. +:a6184 :a6184 :a6184. +:a6185 :a6185 :a6185. +:a6186 :a6186 :a6186. +:a6187 :a6187 :a6187. +:a6188 :a6188 :a6188. +:a6189 :a6189 :a6189. +:a6190 :a6190 :a6190. +:a6191 :a6191 :a6191. +:a6192 :a6192 :a6192. +:a6193 :a6193 :a6193. +:a6194 :a6194 :a6194. +:a6195 :a6195 :a6195. +:a6196 :a6196 :a6196. +:a6197 :a6197 :a6197. +:a6198 :a6198 :a6198. +:a6199 :a6199 :a6199. +:a6200 :a6200 :a6200. +:a6201 :a6201 :a6201. +:a6202 :a6202 :a6202. +:a6203 :a6203 :a6203. +:a6204 :a6204 :a6204. +:a6205 :a6205 :a6205. +:a6206 :a6206 :a6206. +:a6207 :a6207 :a6207. +:a6208 :a6208 :a6208. +:a6209 :a6209 :a6209. +:a6210 :a6210 :a6210. +:a6211 :a6211 :a6211. +:a6212 :a6212 :a6212. +:a6213 :a6213 :a6213. +:a6214 :a6214 :a6214. +:a6215 :a6215 :a6215. +:a6216 :a6216 :a6216. +:a6217 :a6217 :a6217. +:a6218 :a6218 :a6218. +:a6219 :a6219 :a6219. +:a6220 :a6220 :a6220. +:a6221 :a6221 :a6221. +:a6222 :a6222 :a6222. +:a6223 :a6223 :a6223. +:a6224 :a6224 :a6224. +:a6225 :a6225 :a6225. +:a6226 :a6226 :a6226. +:a6227 :a6227 :a6227. +:a6228 :a6228 :a6228. +:a6229 :a6229 :a6229. +:a6230 :a6230 :a6230. +:a6231 :a6231 :a6231. +:a6232 :a6232 :a6232. +:a6233 :a6233 :a6233. +:a6234 :a6234 :a6234. +:a6235 :a6235 :a6235. +:a6236 :a6236 :a6236. +:a6237 :a6237 :a6237. +:a6238 :a6238 :a6238. +:a6239 :a6239 :a6239. +:a6240 :a6240 :a6240. +:a6241 :a6241 :a6241. +:a6242 :a6242 :a6242. +:a6243 :a6243 :a6243. +:a6244 :a6244 :a6244. +:a6245 :a6245 :a6245. +:a6246 :a6246 :a6246. +:a6247 :a6247 :a6247. +:a6248 :a6248 :a6248. +:a6249 :a6249 :a6249. +:a6250 :a6250 :a6250. +:a6251 :a6251 :a6251. +:a6252 :a6252 :a6252. +:a6253 :a6253 :a6253. +:a6254 :a6254 :a6254. +:a6255 :a6255 :a6255. +:a6256 :a6256 :a6256. +:a6257 :a6257 :a6257. +:a6258 :a6258 :a6258. +:a6259 :a6259 :a6259. +:a6260 :a6260 :a6260. +:a6261 :a6261 :a6261. +:a6262 :a6262 :a6262. +:a6263 :a6263 :a6263. +:a6264 :a6264 :a6264. +:a6265 :a6265 :a6265. +:a6266 :a6266 :a6266. +:a6267 :a6267 :a6267. +:a6268 :a6268 :a6268. +:a6269 :a6269 :a6269. +:a6270 :a6270 :a6270. +:a6271 :a6271 :a6271. +:a6272 :a6272 :a6272. +:a6273 :a6273 :a6273. +:a6274 :a6274 :a6274. +:a6275 :a6275 :a6275. +:a6276 :a6276 :a6276. +:a6277 :a6277 :a6277. +:a6278 :a6278 :a6278. +:a6279 :a6279 :a6279. +:a6280 :a6280 :a6280. +:a6281 :a6281 :a6281. +:a6282 :a6282 :a6282. +:a6283 :a6283 :a6283. +:a6284 :a6284 :a6284. +:a6285 :a6285 :a6285. +:a6286 :a6286 :a6286. +:a6287 :a6287 :a6287. +:a6288 :a6288 :a6288. +:a6289 :a6289 :a6289. +:a6290 :a6290 :a6290. +:a6291 :a6291 :a6291. +:a6292 :a6292 :a6292. +:a6293 :a6293 :a6293. +:a6294 :a6294 :a6294. +:a6295 :a6295 :a6295. +:a6296 :a6296 :a6296. +:a6297 :a6297 :a6297. +:a6298 :a6298 :a6298. +:a6299 :a6299 :a6299. +:a6300 :a6300 :a6300. +:a6301 :a6301 :a6301. +:a6302 :a6302 :a6302. +:a6303 :a6303 :a6303. +:a6304 :a6304 :a6304. +:a6305 :a6305 :a6305. +:a6306 :a6306 :a6306. +:a6307 :a6307 :a6307. +:a6308 :a6308 :a6308. +:a6309 :a6309 :a6309. +:a6310 :a6310 :a6310. +:a6311 :a6311 :a6311. +:a6312 :a6312 :a6312. +:a6313 :a6313 :a6313. +:a6314 :a6314 :a6314. +:a6315 :a6315 :a6315. +:a6316 :a6316 :a6316. +:a6317 :a6317 :a6317. +:a6318 :a6318 :a6318. +:a6319 :a6319 :a6319. +:a6320 :a6320 :a6320. +:a6321 :a6321 :a6321. +:a6322 :a6322 :a6322. +:a6323 :a6323 :a6323. +:a6324 :a6324 :a6324. +:a6325 :a6325 :a6325. +:a6326 :a6326 :a6326. +:a6327 :a6327 :a6327. +:a6328 :a6328 :a6328. +:a6329 :a6329 :a6329. +:a6330 :a6330 :a6330. +:a6331 :a6331 :a6331. +:a6332 :a6332 :a6332. +:a6333 :a6333 :a6333. +:a6334 :a6334 :a6334. +:a6335 :a6335 :a6335. +:a6336 :a6336 :a6336. +:a6337 :a6337 :a6337. +:a6338 :a6338 :a6338. +:a6339 :a6339 :a6339. +:a6340 :a6340 :a6340. +:a6341 :a6341 :a6341. +:a6342 :a6342 :a6342. +:a6343 :a6343 :a6343. +:a6344 :a6344 :a6344. +:a6345 :a6345 :a6345. +:a6346 :a6346 :a6346. +:a6347 :a6347 :a6347. +:a6348 :a6348 :a6348. +:a6349 :a6349 :a6349. +:a6350 :a6350 :a6350. +:a6351 :a6351 :a6351. +:a6352 :a6352 :a6352. +:a6353 :a6353 :a6353. +:a6354 :a6354 :a6354. +:a6355 :a6355 :a6355. +:a6356 :a6356 :a6356. +:a6357 :a6357 :a6357. +:a6358 :a6358 :a6358. +:a6359 :a6359 :a6359. +:a6360 :a6360 :a6360. +:a6361 :a6361 :a6361. +:a6362 :a6362 :a6362. +:a6363 :a6363 :a6363. +:a6364 :a6364 :a6364. +:a6365 :a6365 :a6365. +:a6366 :a6366 :a6366. +:a6367 :a6367 :a6367. +:a6368 :a6368 :a6368. +:a6369 :a6369 :a6369. +:a6370 :a6370 :a6370. +:a6371 :a6371 :a6371. +:a6372 :a6372 :a6372. +:a6373 :a6373 :a6373. +:a6374 :a6374 :a6374. +:a6375 :a6375 :a6375. +:a6376 :a6376 :a6376. +:a6377 :a6377 :a6377. +:a6378 :a6378 :a6378. +:a6379 :a6379 :a6379. +:a6380 :a6380 :a6380. +:a6381 :a6381 :a6381. +:a6382 :a6382 :a6382. +:a6383 :a6383 :a6383. +:a6384 :a6384 :a6384. +:a6385 :a6385 :a6385. +:a6386 :a6386 :a6386. +:a6387 :a6387 :a6387. +:a6388 :a6388 :a6388. +:a6389 :a6389 :a6389. +:a6390 :a6390 :a6390. +:a6391 :a6391 :a6391. +:a6392 :a6392 :a6392. +:a6393 :a6393 :a6393. +:a6394 :a6394 :a6394. +:a6395 :a6395 :a6395. +:a6396 :a6396 :a6396. +:a6397 :a6397 :a6397. +:a6398 :a6398 :a6398. +:a6399 :a6399 :a6399. +:a6400 :a6400 :a6400. +:a6401 :a6401 :a6401. +:a6402 :a6402 :a6402. +:a6403 :a6403 :a6403. +:a6404 :a6404 :a6404. +:a6405 :a6405 :a6405. +:a6406 :a6406 :a6406. +:a6407 :a6407 :a6407. +:a6408 :a6408 :a6408. +:a6409 :a6409 :a6409. +:a6410 :a6410 :a6410. +:a6411 :a6411 :a6411. +:a6412 :a6412 :a6412. +:a6413 :a6413 :a6413. +:a6414 :a6414 :a6414. +:a6415 :a6415 :a6415. +:a6416 :a6416 :a6416. +:a6417 :a6417 :a6417. +:a6418 :a6418 :a6418. +:a6419 :a6419 :a6419. +:a6420 :a6420 :a6420. +:a6421 :a6421 :a6421. +:a6422 :a6422 :a6422. +:a6423 :a6423 :a6423. +:a6424 :a6424 :a6424. +:a6425 :a6425 :a6425. +:a6426 :a6426 :a6426. +:a6427 :a6427 :a6427. +:a6428 :a6428 :a6428. +:a6429 :a6429 :a6429. +:a6430 :a6430 :a6430. +:a6431 :a6431 :a6431. +:a6432 :a6432 :a6432. +:a6433 :a6433 :a6433. +:a6434 :a6434 :a6434. +:a6435 :a6435 :a6435. +:a6436 :a6436 :a6436. +:a6437 :a6437 :a6437. +:a6438 :a6438 :a6438. +:a6439 :a6439 :a6439. +:a6440 :a6440 :a6440. +:a6441 :a6441 :a6441. +:a6442 :a6442 :a6442. +:a6443 :a6443 :a6443. +:a6444 :a6444 :a6444. +:a6445 :a6445 :a6445. +:a6446 :a6446 :a6446. +:a6447 :a6447 :a6447. +:a6448 :a6448 :a6448. +:a6449 :a6449 :a6449. +:a6450 :a6450 :a6450. +:a6451 :a6451 :a6451. +:a6452 :a6452 :a6452. +:a6453 :a6453 :a6453. +:a6454 :a6454 :a6454. +:a6455 :a6455 :a6455. +:a6456 :a6456 :a6456. +:a6457 :a6457 :a6457. +:a6458 :a6458 :a6458. +:a6459 :a6459 :a6459. +:a6460 :a6460 :a6460. +:a6461 :a6461 :a6461. +:a6462 :a6462 :a6462. +:a6463 :a6463 :a6463. +:a6464 :a6464 :a6464. +:a6465 :a6465 :a6465. +:a6466 :a6466 :a6466. +:a6467 :a6467 :a6467. +:a6468 :a6468 :a6468. +:a6469 :a6469 :a6469. +:a6470 :a6470 :a6470. +:a6471 :a6471 :a6471. +:a6472 :a6472 :a6472. +:a6473 :a6473 :a6473. +:a6474 :a6474 :a6474. +:a6475 :a6475 :a6475. +:a6476 :a6476 :a6476. +:a6477 :a6477 :a6477. +:a6478 :a6478 :a6478. +:a6479 :a6479 :a6479. +:a6480 :a6480 :a6480. +:a6481 :a6481 :a6481. +:a6482 :a6482 :a6482. +:a6483 :a6483 :a6483. +:a6484 :a6484 :a6484. +:a6485 :a6485 :a6485. +:a6486 :a6486 :a6486. +:a6487 :a6487 :a6487. +:a6488 :a6488 :a6488. +:a6489 :a6489 :a6489. +:a6490 :a6490 :a6490. +:a6491 :a6491 :a6491. +:a6492 :a6492 :a6492. +:a6493 :a6493 :a6493. +:a6494 :a6494 :a6494. +:a6495 :a6495 :a6495. +:a6496 :a6496 :a6496. +:a6497 :a6497 :a6497. +:a6498 :a6498 :a6498. +:a6499 :a6499 :a6499. +:a6500 :a6500 :a6500. +:a6501 :a6501 :a6501. +:a6502 :a6502 :a6502. +:a6503 :a6503 :a6503. +:a6504 :a6504 :a6504. +:a6505 :a6505 :a6505. +:a6506 :a6506 :a6506. +:a6507 :a6507 :a6507. +:a6508 :a6508 :a6508. +:a6509 :a6509 :a6509. +:a6510 :a6510 :a6510. +:a6511 :a6511 :a6511. +:a6512 :a6512 :a6512. +:a6513 :a6513 :a6513. +:a6514 :a6514 :a6514. +:a6515 :a6515 :a6515. +:a6516 :a6516 :a6516. +:a6517 :a6517 :a6517. +:a6518 :a6518 :a6518. +:a6519 :a6519 :a6519. +:a6520 :a6520 :a6520. +:a6521 :a6521 :a6521. +:a6522 :a6522 :a6522. +:a6523 :a6523 :a6523. +:a6524 :a6524 :a6524. +:a6525 :a6525 :a6525. +:a6526 :a6526 :a6526. +:a6527 :a6527 :a6527. +:a6528 :a6528 :a6528. +:a6529 :a6529 :a6529. +:a6530 :a6530 :a6530. +:a6531 :a6531 :a6531. +:a6532 :a6532 :a6532. +:a6533 :a6533 :a6533. +:a6534 :a6534 :a6534. +:a6535 :a6535 :a6535. +:a6536 :a6536 :a6536. +:a6537 :a6537 :a6537. +:a6538 :a6538 :a6538. +:a6539 :a6539 :a6539. +:a6540 :a6540 :a6540. +:a6541 :a6541 :a6541. +:a6542 :a6542 :a6542. +:a6543 :a6543 :a6543. +:a6544 :a6544 :a6544. +:a6545 :a6545 :a6545. +:a6546 :a6546 :a6546. +:a6547 :a6547 :a6547. +:a6548 :a6548 :a6548. +:a6549 :a6549 :a6549. +:a6550 :a6550 :a6550. +:a6551 :a6551 :a6551. +:a6552 :a6552 :a6552. +:a6553 :a6553 :a6553. +:a6554 :a6554 :a6554. +:a6555 :a6555 :a6555. +:a6556 :a6556 :a6556. +:a6557 :a6557 :a6557. +:a6558 :a6558 :a6558. +:a6559 :a6559 :a6559. +:a6560 :a6560 :a6560. +:a6561 :a6561 :a6561. +:a6562 :a6562 :a6562. +:a6563 :a6563 :a6563. +:a6564 :a6564 :a6564. +:a6565 :a6565 :a6565. +:a6566 :a6566 :a6566. +:a6567 :a6567 :a6567. +:a6568 :a6568 :a6568. +:a6569 :a6569 :a6569. +:a6570 :a6570 :a6570. +:a6571 :a6571 :a6571. +:a6572 :a6572 :a6572. +:a6573 :a6573 :a6573. +:a6574 :a6574 :a6574. +:a6575 :a6575 :a6575. +:a6576 :a6576 :a6576. +:a6577 :a6577 :a6577. +:a6578 :a6578 :a6578. +:a6579 :a6579 :a6579. +:a6580 :a6580 :a6580. +:a6581 :a6581 :a6581. +:a6582 :a6582 :a6582. +:a6583 :a6583 :a6583. +:a6584 :a6584 :a6584. +:a6585 :a6585 :a6585. +:a6586 :a6586 :a6586. +:a6587 :a6587 :a6587. +:a6588 :a6588 :a6588. +:a6589 :a6589 :a6589. +:a6590 :a6590 :a6590. +:a6591 :a6591 :a6591. +:a6592 :a6592 :a6592. +:a6593 :a6593 :a6593. +:a6594 :a6594 :a6594. +:a6595 :a6595 :a6595. +:a6596 :a6596 :a6596. +:a6597 :a6597 :a6597. +:a6598 :a6598 :a6598. +:a6599 :a6599 :a6599. +:a6600 :a6600 :a6600. +:a6601 :a6601 :a6601. +:a6602 :a6602 :a6602. +:a6603 :a6603 :a6603. +:a6604 :a6604 :a6604. +:a6605 :a6605 :a6605. +:a6606 :a6606 :a6606. +:a6607 :a6607 :a6607. +:a6608 :a6608 :a6608. +:a6609 :a6609 :a6609. +:a6610 :a6610 :a6610. +:a6611 :a6611 :a6611. +:a6612 :a6612 :a6612. +:a6613 :a6613 :a6613. +:a6614 :a6614 :a6614. +:a6615 :a6615 :a6615. +:a6616 :a6616 :a6616. +:a6617 :a6617 :a6617. +:a6618 :a6618 :a6618. +:a6619 :a6619 :a6619. +:a6620 :a6620 :a6620. +:a6621 :a6621 :a6621. +:a6622 :a6622 :a6622. +:a6623 :a6623 :a6623. +:a6624 :a6624 :a6624. +:a6625 :a6625 :a6625. +:a6626 :a6626 :a6626. +:a6627 :a6627 :a6627. +:a6628 :a6628 :a6628. +:a6629 :a6629 :a6629. +:a6630 :a6630 :a6630. +:a6631 :a6631 :a6631. +:a6632 :a6632 :a6632. +:a6633 :a6633 :a6633. +:a6634 :a6634 :a6634. +:a6635 :a6635 :a6635. +:a6636 :a6636 :a6636. +:a6637 :a6637 :a6637. +:a6638 :a6638 :a6638. +:a6639 :a6639 :a6639. +:a6640 :a6640 :a6640. +:a6641 :a6641 :a6641. +:a6642 :a6642 :a6642. +:a6643 :a6643 :a6643. +:a6644 :a6644 :a6644. +:a6645 :a6645 :a6645. +:a6646 :a6646 :a6646. +:a6647 :a6647 :a6647. +:a6648 :a6648 :a6648. +:a6649 :a6649 :a6649. +:a6650 :a6650 :a6650. +:a6651 :a6651 :a6651. +:a6652 :a6652 :a6652. +:a6653 :a6653 :a6653. +:a6654 :a6654 :a6654. +:a6655 :a6655 :a6655. +:a6656 :a6656 :a6656. +:a6657 :a6657 :a6657. +:a6658 :a6658 :a6658. +:a6659 :a6659 :a6659. +:a6660 :a6660 :a6660. +:a6661 :a6661 :a6661. +:a6662 :a6662 :a6662. +:a6663 :a6663 :a6663. +:a6664 :a6664 :a6664. +:a6665 :a6665 :a6665. +:a6666 :a6666 :a6666. +:a6667 :a6667 :a6667. +:a6668 :a6668 :a6668. +:a6669 :a6669 :a6669. +:a6670 :a6670 :a6670. +:a6671 :a6671 :a6671. +:a6672 :a6672 :a6672. +:a6673 :a6673 :a6673. +:a6674 :a6674 :a6674. +:a6675 :a6675 :a6675. +:a6676 :a6676 :a6676. +:a6677 :a6677 :a6677. +:a6678 :a6678 :a6678. +:a6679 :a6679 :a6679. +:a6680 :a6680 :a6680. +:a6681 :a6681 :a6681. +:a6682 :a6682 :a6682. +:a6683 :a6683 :a6683. +:a6684 :a6684 :a6684. +:a6685 :a6685 :a6685. +:a6686 :a6686 :a6686. +:a6687 :a6687 :a6687. +:a6688 :a6688 :a6688. +:a6689 :a6689 :a6689. +:a6690 :a6690 :a6690. +:a6691 :a6691 :a6691. +:a6692 :a6692 :a6692. +:a6693 :a6693 :a6693. +:a6694 :a6694 :a6694. +:a6695 :a6695 :a6695. +:a6696 :a6696 :a6696. +:a6697 :a6697 :a6697. +:a6698 :a6698 :a6698. +:a6699 :a6699 :a6699. +:a6700 :a6700 :a6700. +:a6701 :a6701 :a6701. +:a6702 :a6702 :a6702. +:a6703 :a6703 :a6703. +:a6704 :a6704 :a6704. +:a6705 :a6705 :a6705. +:a6706 :a6706 :a6706. +:a6707 :a6707 :a6707. +:a6708 :a6708 :a6708. +:a6709 :a6709 :a6709. +:a6710 :a6710 :a6710. +:a6711 :a6711 :a6711. +:a6712 :a6712 :a6712. +:a6713 :a6713 :a6713. +:a6714 :a6714 :a6714. +:a6715 :a6715 :a6715. +:a6716 :a6716 :a6716. +:a6717 :a6717 :a6717. +:a6718 :a6718 :a6718. +:a6719 :a6719 :a6719. +:a6720 :a6720 :a6720. +:a6721 :a6721 :a6721. +:a6722 :a6722 :a6722. +:a6723 :a6723 :a6723. +:a6724 :a6724 :a6724. +:a6725 :a6725 :a6725. +:a6726 :a6726 :a6726. +:a6727 :a6727 :a6727. +:a6728 :a6728 :a6728. +:a6729 :a6729 :a6729. +:a6730 :a6730 :a6730. +:a6731 :a6731 :a6731. +:a6732 :a6732 :a6732. +:a6733 :a6733 :a6733. +:a6734 :a6734 :a6734. +:a6735 :a6735 :a6735. +:a6736 :a6736 :a6736. +:a6737 :a6737 :a6737. +:a6738 :a6738 :a6738. +:a6739 :a6739 :a6739. +:a6740 :a6740 :a6740. +:a6741 :a6741 :a6741. +:a6742 :a6742 :a6742. +:a6743 :a6743 :a6743. +:a6744 :a6744 :a6744. +:a6745 :a6745 :a6745. +:a6746 :a6746 :a6746. +:a6747 :a6747 :a6747. +:a6748 :a6748 :a6748. +:a6749 :a6749 :a6749. +:a6750 :a6750 :a6750. +:a6751 :a6751 :a6751. +:a6752 :a6752 :a6752. +:a6753 :a6753 :a6753. +:a6754 :a6754 :a6754. +:a6755 :a6755 :a6755. +:a6756 :a6756 :a6756. +:a6757 :a6757 :a6757. +:a6758 :a6758 :a6758. +:a6759 :a6759 :a6759. +:a6760 :a6760 :a6760. +:a6761 :a6761 :a6761. +:a6762 :a6762 :a6762. +:a6763 :a6763 :a6763. +:a6764 :a6764 :a6764. +:a6765 :a6765 :a6765. +:a6766 :a6766 :a6766. +:a6767 :a6767 :a6767. +:a6768 :a6768 :a6768. +:a6769 :a6769 :a6769. +:a6770 :a6770 :a6770. +:a6771 :a6771 :a6771. +:a6772 :a6772 :a6772. +:a6773 :a6773 :a6773. +:a6774 :a6774 :a6774. +:a6775 :a6775 :a6775. +:a6776 :a6776 :a6776. +:a6777 :a6777 :a6777. +:a6778 :a6778 :a6778. +:a6779 :a6779 :a6779. +:a6780 :a6780 :a6780. +:a6781 :a6781 :a6781. +:a6782 :a6782 :a6782. +:a6783 :a6783 :a6783. +:a6784 :a6784 :a6784. +:a6785 :a6785 :a6785. +:a6786 :a6786 :a6786. +:a6787 :a6787 :a6787. +:a6788 :a6788 :a6788. +:a6789 :a6789 :a6789. +:a6790 :a6790 :a6790. +:a6791 :a6791 :a6791. +:a6792 :a6792 :a6792. +:a6793 :a6793 :a6793. +:a6794 :a6794 :a6794. +:a6795 :a6795 :a6795. +:a6796 :a6796 :a6796. +:a6797 :a6797 :a6797. +:a6798 :a6798 :a6798. +:a6799 :a6799 :a6799. +:a6800 :a6800 :a6800. +:a6801 :a6801 :a6801. +:a6802 :a6802 :a6802. +:a6803 :a6803 :a6803. +:a6804 :a6804 :a6804. +:a6805 :a6805 :a6805. +:a6806 :a6806 :a6806. +:a6807 :a6807 :a6807. +:a6808 :a6808 :a6808. +:a6809 :a6809 :a6809. +:a6810 :a6810 :a6810. +:a6811 :a6811 :a6811. +:a6812 :a6812 :a6812. +:a6813 :a6813 :a6813. +:a6814 :a6814 :a6814. +:a6815 :a6815 :a6815. +:a6816 :a6816 :a6816. +:a6817 :a6817 :a6817. +:a6818 :a6818 :a6818. +:a6819 :a6819 :a6819. +:a6820 :a6820 :a6820. +:a6821 :a6821 :a6821. +:a6822 :a6822 :a6822. +:a6823 :a6823 :a6823. +:a6824 :a6824 :a6824. +:a6825 :a6825 :a6825. +:a6826 :a6826 :a6826. +:a6827 :a6827 :a6827. +:a6828 :a6828 :a6828. +:a6829 :a6829 :a6829. +:a6830 :a6830 :a6830. +:a6831 :a6831 :a6831. +:a6832 :a6832 :a6832. +:a6833 :a6833 :a6833. +:a6834 :a6834 :a6834. +:a6835 :a6835 :a6835. +:a6836 :a6836 :a6836. +:a6837 :a6837 :a6837. +:a6838 :a6838 :a6838. +:a6839 :a6839 :a6839. +:a6840 :a6840 :a6840. +:a6841 :a6841 :a6841. +:a6842 :a6842 :a6842. +:a6843 :a6843 :a6843. +:a6844 :a6844 :a6844. +:a6845 :a6845 :a6845. +:a6846 :a6846 :a6846. +:a6847 :a6847 :a6847. +:a6848 :a6848 :a6848. +:a6849 :a6849 :a6849. +:a6850 :a6850 :a6850. +:a6851 :a6851 :a6851. +:a6852 :a6852 :a6852. +:a6853 :a6853 :a6853. +:a6854 :a6854 :a6854. +:a6855 :a6855 :a6855. +:a6856 :a6856 :a6856. +:a6857 :a6857 :a6857. +:a6858 :a6858 :a6858. +:a6859 :a6859 :a6859. +:a6860 :a6860 :a6860. +:a6861 :a6861 :a6861. +:a6862 :a6862 :a6862. +:a6863 :a6863 :a6863. +:a6864 :a6864 :a6864. +:a6865 :a6865 :a6865. +:a6866 :a6866 :a6866. +:a6867 :a6867 :a6867. +:a6868 :a6868 :a6868. +:a6869 :a6869 :a6869. +:a6870 :a6870 :a6870. +:a6871 :a6871 :a6871. +:a6872 :a6872 :a6872. +:a6873 :a6873 :a6873. +:a6874 :a6874 :a6874. +:a6875 :a6875 :a6875. +:a6876 :a6876 :a6876. +:a6877 :a6877 :a6877. +:a6878 :a6878 :a6878. +:a6879 :a6879 :a6879. +:a6880 :a6880 :a6880. +:a6881 :a6881 :a6881. +:a6882 :a6882 :a6882. +:a6883 :a6883 :a6883. +:a6884 :a6884 :a6884. +:a6885 :a6885 :a6885. +:a6886 :a6886 :a6886. +:a6887 :a6887 :a6887. +:a6888 :a6888 :a6888. +:a6889 :a6889 :a6889. +:a6890 :a6890 :a6890. +:a6891 :a6891 :a6891. +:a6892 :a6892 :a6892. +:a6893 :a6893 :a6893. +:a6894 :a6894 :a6894. +:a6895 :a6895 :a6895. +:a6896 :a6896 :a6896. +:a6897 :a6897 :a6897. +:a6898 :a6898 :a6898. +:a6899 :a6899 :a6899. +:a6900 :a6900 :a6900. +:a6901 :a6901 :a6901. +:a6902 :a6902 :a6902. +:a6903 :a6903 :a6903. +:a6904 :a6904 :a6904. +:a6905 :a6905 :a6905. +:a6906 :a6906 :a6906. +:a6907 :a6907 :a6907. +:a6908 :a6908 :a6908. +:a6909 :a6909 :a6909. +:a6910 :a6910 :a6910. +:a6911 :a6911 :a6911. +:a6912 :a6912 :a6912. +:a6913 :a6913 :a6913. +:a6914 :a6914 :a6914. +:a6915 :a6915 :a6915. +:a6916 :a6916 :a6916. +:a6917 :a6917 :a6917. +:a6918 :a6918 :a6918. +:a6919 :a6919 :a6919. +:a6920 :a6920 :a6920. +:a6921 :a6921 :a6921. +:a6922 :a6922 :a6922. +:a6923 :a6923 :a6923. +:a6924 :a6924 :a6924. +:a6925 :a6925 :a6925. +:a6926 :a6926 :a6926. +:a6927 :a6927 :a6927. +:a6928 :a6928 :a6928. +:a6929 :a6929 :a6929. +:a6930 :a6930 :a6930. +:a6931 :a6931 :a6931. +:a6932 :a6932 :a6932. +:a6933 :a6933 :a6933. +:a6934 :a6934 :a6934. +:a6935 :a6935 :a6935. +:a6936 :a6936 :a6936. +:a6937 :a6937 :a6937. +:a6938 :a6938 :a6938. +:a6939 :a6939 :a6939. +:a6940 :a6940 :a6940. +:a6941 :a6941 :a6941. +:a6942 :a6942 :a6942. +:a6943 :a6943 :a6943. +:a6944 :a6944 :a6944. +:a6945 :a6945 :a6945. +:a6946 :a6946 :a6946. +:a6947 :a6947 :a6947. +:a6948 :a6948 :a6948. +:a6949 :a6949 :a6949. +:a6950 :a6950 :a6950. +:a6951 :a6951 :a6951. +:a6952 :a6952 :a6952. +:a6953 :a6953 :a6953. +:a6954 :a6954 :a6954. +:a6955 :a6955 :a6955. +:a6956 :a6956 :a6956. +:a6957 :a6957 :a6957. +:a6958 :a6958 :a6958. +:a6959 :a6959 :a6959. +:a6960 :a6960 :a6960. +:a6961 :a6961 :a6961. +:a6962 :a6962 :a6962. +:a6963 :a6963 :a6963. +:a6964 :a6964 :a6964. +:a6965 :a6965 :a6965. +:a6966 :a6966 :a6966. +:a6967 :a6967 :a6967. +:a6968 :a6968 :a6968. +:a6969 :a6969 :a6969. +:a6970 :a6970 :a6970. +:a6971 :a6971 :a6971. +:a6972 :a6972 :a6972. +:a6973 :a6973 :a6973. +:a6974 :a6974 :a6974. +:a6975 :a6975 :a6975. +:a6976 :a6976 :a6976. +:a6977 :a6977 :a6977. +:a6978 :a6978 :a6978. +:a6979 :a6979 :a6979. +:a6980 :a6980 :a6980. +:a6981 :a6981 :a6981. +:a6982 :a6982 :a6982. +:a6983 :a6983 :a6983. +:a6984 :a6984 :a6984. +:a6985 :a6985 :a6985. +:a6986 :a6986 :a6986. +:a6987 :a6987 :a6987. +:a6988 :a6988 :a6988. +:a6989 :a6989 :a6989. +:a6990 :a6990 :a6990. +:a6991 :a6991 :a6991. +:a6992 :a6992 :a6992. +:a6993 :a6993 :a6993. +:a6994 :a6994 :a6994. +:a6995 :a6995 :a6995. +:a6996 :a6996 :a6996. +:a6997 :a6997 :a6997. +:a6998 :a6998 :a6998. +:a6999 :a6999 :a6999. +:a7000 :a7000 :a7000. +:a7001 :a7001 :a7001. +:a7002 :a7002 :a7002. +:a7003 :a7003 :a7003. +:a7004 :a7004 :a7004. +:a7005 :a7005 :a7005. +:a7006 :a7006 :a7006. +:a7007 :a7007 :a7007. +:a7008 :a7008 :a7008. +:a7009 :a7009 :a7009. +:a7010 :a7010 :a7010. +:a7011 :a7011 :a7011. +:a7012 :a7012 :a7012. +:a7013 :a7013 :a7013. +:a7014 :a7014 :a7014. +:a7015 :a7015 :a7015. +:a7016 :a7016 :a7016. +:a7017 :a7017 :a7017. +:a7018 :a7018 :a7018. +:a7019 :a7019 :a7019. +:a7020 :a7020 :a7020. +:a7021 :a7021 :a7021. +:a7022 :a7022 :a7022. +:a7023 :a7023 :a7023. +:a7024 :a7024 :a7024. +:a7025 :a7025 :a7025. +:a7026 :a7026 :a7026. +:a7027 :a7027 :a7027. +:a7028 :a7028 :a7028. +:a7029 :a7029 :a7029. +:a7030 :a7030 :a7030. +:a7031 :a7031 :a7031. +:a7032 :a7032 :a7032. +:a7033 :a7033 :a7033. +:a7034 :a7034 :a7034. +:a7035 :a7035 :a7035. +:a7036 :a7036 :a7036. +:a7037 :a7037 :a7037. +:a7038 :a7038 :a7038. +:a7039 :a7039 :a7039. +:a7040 :a7040 :a7040. +:a7041 :a7041 :a7041. +:a7042 :a7042 :a7042. +:a7043 :a7043 :a7043. +:a7044 :a7044 :a7044. +:a7045 :a7045 :a7045. +:a7046 :a7046 :a7046. +:a7047 :a7047 :a7047. +:a7048 :a7048 :a7048. +:a7049 :a7049 :a7049. +:a7050 :a7050 :a7050. +:a7051 :a7051 :a7051. +:a7052 :a7052 :a7052. +:a7053 :a7053 :a7053. +:a7054 :a7054 :a7054. +:a7055 :a7055 :a7055. +:a7056 :a7056 :a7056. +:a7057 :a7057 :a7057. +:a7058 :a7058 :a7058. +:a7059 :a7059 :a7059. +:a7060 :a7060 :a7060. +:a7061 :a7061 :a7061. +:a7062 :a7062 :a7062. +:a7063 :a7063 :a7063. +:a7064 :a7064 :a7064. +:a7065 :a7065 :a7065. +:a7066 :a7066 :a7066. +:a7067 :a7067 :a7067. +:a7068 :a7068 :a7068. +:a7069 :a7069 :a7069. +:a7070 :a7070 :a7070. +:a7071 :a7071 :a7071. +:a7072 :a7072 :a7072. +:a7073 :a7073 :a7073. +:a7074 :a7074 :a7074. +:a7075 :a7075 :a7075. +:a7076 :a7076 :a7076. +:a7077 :a7077 :a7077. +:a7078 :a7078 :a7078. +:a7079 :a7079 :a7079. +:a7080 :a7080 :a7080. +:a7081 :a7081 :a7081. +:a7082 :a7082 :a7082. +:a7083 :a7083 :a7083. +:a7084 :a7084 :a7084. +:a7085 :a7085 :a7085. +:a7086 :a7086 :a7086. +:a7087 :a7087 :a7087. +:a7088 :a7088 :a7088. +:a7089 :a7089 :a7089. +:a7090 :a7090 :a7090. +:a7091 :a7091 :a7091. +:a7092 :a7092 :a7092. +:a7093 :a7093 :a7093. +:a7094 :a7094 :a7094. +:a7095 :a7095 :a7095. +:a7096 :a7096 :a7096. +:a7097 :a7097 :a7097. +:a7098 :a7098 :a7098. +:a7099 :a7099 :a7099. +:a7100 :a7100 :a7100. +:a7101 :a7101 :a7101. +:a7102 :a7102 :a7102. +:a7103 :a7103 :a7103. +:a7104 :a7104 :a7104. +:a7105 :a7105 :a7105. +:a7106 :a7106 :a7106. +:a7107 :a7107 :a7107. +:a7108 :a7108 :a7108. +:a7109 :a7109 :a7109. +:a7110 :a7110 :a7110. +:a7111 :a7111 :a7111. +:a7112 :a7112 :a7112. +:a7113 :a7113 :a7113. +:a7114 :a7114 :a7114. +:a7115 :a7115 :a7115. +:a7116 :a7116 :a7116. +:a7117 :a7117 :a7117. +:a7118 :a7118 :a7118. +:a7119 :a7119 :a7119. +:a7120 :a7120 :a7120. +:a7121 :a7121 :a7121. +:a7122 :a7122 :a7122. +:a7123 :a7123 :a7123. +:a7124 :a7124 :a7124. +:a7125 :a7125 :a7125. +:a7126 :a7126 :a7126. +:a7127 :a7127 :a7127. +:a7128 :a7128 :a7128. +:a7129 :a7129 :a7129. +:a7130 :a7130 :a7130. +:a7131 :a7131 :a7131. +:a7132 :a7132 :a7132. +:a7133 :a7133 :a7133. +:a7134 :a7134 :a7134. +:a7135 :a7135 :a7135. +:a7136 :a7136 :a7136. +:a7137 :a7137 :a7137. +:a7138 :a7138 :a7138. +:a7139 :a7139 :a7139. +:a7140 :a7140 :a7140. +:a7141 :a7141 :a7141. +:a7142 :a7142 :a7142. +:a7143 :a7143 :a7143. +:a7144 :a7144 :a7144. +:a7145 :a7145 :a7145. +:a7146 :a7146 :a7146. +:a7147 :a7147 :a7147. +:a7148 :a7148 :a7148. +:a7149 :a7149 :a7149. +:a7150 :a7150 :a7150. +:a7151 :a7151 :a7151. +:a7152 :a7152 :a7152. +:a7153 :a7153 :a7153. +:a7154 :a7154 :a7154. +:a7155 :a7155 :a7155. +:a7156 :a7156 :a7156. +:a7157 :a7157 :a7157. +:a7158 :a7158 :a7158. +:a7159 :a7159 :a7159. +:a7160 :a7160 :a7160. +:a7161 :a7161 :a7161. +:a7162 :a7162 :a7162. +:a7163 :a7163 :a7163. +:a7164 :a7164 :a7164. +:a7165 :a7165 :a7165. +:a7166 :a7166 :a7166. +:a7167 :a7167 :a7167. +:a7168 :a7168 :a7168. +:a7169 :a7169 :a7169. +:a7170 :a7170 :a7170. +:a7171 :a7171 :a7171. +:a7172 :a7172 :a7172. +:a7173 :a7173 :a7173. +:a7174 :a7174 :a7174. +:a7175 :a7175 :a7175. +:a7176 :a7176 :a7176. +:a7177 :a7177 :a7177. +:a7178 :a7178 :a7178. +:a7179 :a7179 :a7179. +:a7180 :a7180 :a7180. +:a7181 :a7181 :a7181. +:a7182 :a7182 :a7182. +:a7183 :a7183 :a7183. +:a7184 :a7184 :a7184. +:a7185 :a7185 :a7185. +:a7186 :a7186 :a7186. +:a7187 :a7187 :a7187. +:a7188 :a7188 :a7188. +:a7189 :a7189 :a7189. +:a7190 :a7190 :a7190. +:a7191 :a7191 :a7191. +:a7192 :a7192 :a7192. +:a7193 :a7193 :a7193. +:a7194 :a7194 :a7194. +:a7195 :a7195 :a7195. +:a7196 :a7196 :a7196. +:a7197 :a7197 :a7197. +:a7198 :a7198 :a7198. +:a7199 :a7199 :a7199. +:a7200 :a7200 :a7200. +:a7201 :a7201 :a7201. +:a7202 :a7202 :a7202. +:a7203 :a7203 :a7203. +:a7204 :a7204 :a7204. +:a7205 :a7205 :a7205. +:a7206 :a7206 :a7206. +:a7207 :a7207 :a7207. +:a7208 :a7208 :a7208. +:a7209 :a7209 :a7209. +:a7210 :a7210 :a7210. +:a7211 :a7211 :a7211. +:a7212 :a7212 :a7212. +:a7213 :a7213 :a7213. +:a7214 :a7214 :a7214. +:a7215 :a7215 :a7215. +:a7216 :a7216 :a7216. +:a7217 :a7217 :a7217. +:a7218 :a7218 :a7218. +:a7219 :a7219 :a7219. +:a7220 :a7220 :a7220. +:a7221 :a7221 :a7221. +:a7222 :a7222 :a7222. +:a7223 :a7223 :a7223. +:a7224 :a7224 :a7224. +:a7225 :a7225 :a7225. +:a7226 :a7226 :a7226. +:a7227 :a7227 :a7227. +:a7228 :a7228 :a7228. +:a7229 :a7229 :a7229. +:a7230 :a7230 :a7230. +:a7231 :a7231 :a7231. +:a7232 :a7232 :a7232. +:a7233 :a7233 :a7233. +:a7234 :a7234 :a7234. +:a7235 :a7235 :a7235. +:a7236 :a7236 :a7236. +:a7237 :a7237 :a7237. +:a7238 :a7238 :a7238. +:a7239 :a7239 :a7239. +:a7240 :a7240 :a7240. +:a7241 :a7241 :a7241. +:a7242 :a7242 :a7242. +:a7243 :a7243 :a7243. +:a7244 :a7244 :a7244. +:a7245 :a7245 :a7245. +:a7246 :a7246 :a7246. +:a7247 :a7247 :a7247. +:a7248 :a7248 :a7248. +:a7249 :a7249 :a7249. +:a7250 :a7250 :a7250. +:a7251 :a7251 :a7251. +:a7252 :a7252 :a7252. +:a7253 :a7253 :a7253. +:a7254 :a7254 :a7254. +:a7255 :a7255 :a7255. +:a7256 :a7256 :a7256. +:a7257 :a7257 :a7257. +:a7258 :a7258 :a7258. +:a7259 :a7259 :a7259. +:a7260 :a7260 :a7260. +:a7261 :a7261 :a7261. +:a7262 :a7262 :a7262. +:a7263 :a7263 :a7263. +:a7264 :a7264 :a7264. +:a7265 :a7265 :a7265. +:a7266 :a7266 :a7266. +:a7267 :a7267 :a7267. +:a7268 :a7268 :a7268. +:a7269 :a7269 :a7269. +:a7270 :a7270 :a7270. +:a7271 :a7271 :a7271. +:a7272 :a7272 :a7272. +:a7273 :a7273 :a7273. +:a7274 :a7274 :a7274. +:a7275 :a7275 :a7275. +:a7276 :a7276 :a7276. +:a7277 :a7277 :a7277. +:a7278 :a7278 :a7278. +:a7279 :a7279 :a7279. +:a7280 :a7280 :a7280. +:a7281 :a7281 :a7281. +:a7282 :a7282 :a7282. +:a7283 :a7283 :a7283. +:a7284 :a7284 :a7284. +:a7285 :a7285 :a7285. +:a7286 :a7286 :a7286. +:a7287 :a7287 :a7287. +:a7288 :a7288 :a7288. +:a7289 :a7289 :a7289. +:a7290 :a7290 :a7290. +:a7291 :a7291 :a7291. +:a7292 :a7292 :a7292. +:a7293 :a7293 :a7293. +:a7294 :a7294 :a7294. +:a7295 :a7295 :a7295. +:a7296 :a7296 :a7296. +:a7297 :a7297 :a7297. +:a7298 :a7298 :a7298. +:a7299 :a7299 :a7299. +:a7300 :a7300 :a7300. +:a7301 :a7301 :a7301. +:a7302 :a7302 :a7302. +:a7303 :a7303 :a7303. +:a7304 :a7304 :a7304. +:a7305 :a7305 :a7305. +:a7306 :a7306 :a7306. +:a7307 :a7307 :a7307. +:a7308 :a7308 :a7308. +:a7309 :a7309 :a7309. +:a7310 :a7310 :a7310. +:a7311 :a7311 :a7311. +:a7312 :a7312 :a7312. +:a7313 :a7313 :a7313. +:a7314 :a7314 :a7314. +:a7315 :a7315 :a7315. +:a7316 :a7316 :a7316. +:a7317 :a7317 :a7317. +:a7318 :a7318 :a7318. +:a7319 :a7319 :a7319. +:a7320 :a7320 :a7320. +:a7321 :a7321 :a7321. +:a7322 :a7322 :a7322. +:a7323 :a7323 :a7323. +:a7324 :a7324 :a7324. +:a7325 :a7325 :a7325. +:a7326 :a7326 :a7326. +:a7327 :a7327 :a7327. +:a7328 :a7328 :a7328. +:a7329 :a7329 :a7329. +:a7330 :a7330 :a7330. +:a7331 :a7331 :a7331. +:a7332 :a7332 :a7332. +:a7333 :a7333 :a7333. +:a7334 :a7334 :a7334. +:a7335 :a7335 :a7335. +:a7336 :a7336 :a7336. +:a7337 :a7337 :a7337. +:a7338 :a7338 :a7338. +:a7339 :a7339 :a7339. +:a7340 :a7340 :a7340. +:a7341 :a7341 :a7341. +:a7342 :a7342 :a7342. +:a7343 :a7343 :a7343. +:a7344 :a7344 :a7344. +:a7345 :a7345 :a7345. +:a7346 :a7346 :a7346. +:a7347 :a7347 :a7347. +:a7348 :a7348 :a7348. +:a7349 :a7349 :a7349. +:a7350 :a7350 :a7350. +:a7351 :a7351 :a7351. +:a7352 :a7352 :a7352. +:a7353 :a7353 :a7353. +:a7354 :a7354 :a7354. +:a7355 :a7355 :a7355. +:a7356 :a7356 :a7356. +:a7357 :a7357 :a7357. +:a7358 :a7358 :a7358. +:a7359 :a7359 :a7359. +:a7360 :a7360 :a7360. +:a7361 :a7361 :a7361. +:a7362 :a7362 :a7362. +:a7363 :a7363 :a7363. +:a7364 :a7364 :a7364. +:a7365 :a7365 :a7365. +:a7366 :a7366 :a7366. +:a7367 :a7367 :a7367. +:a7368 :a7368 :a7368. +:a7369 :a7369 :a7369. +:a7370 :a7370 :a7370. +:a7371 :a7371 :a7371. +:a7372 :a7372 :a7372. +:a7373 :a7373 :a7373. +:a7374 :a7374 :a7374. +:a7375 :a7375 :a7375. +:a7376 :a7376 :a7376. +:a7377 :a7377 :a7377. +:a7378 :a7378 :a7378. +:a7379 :a7379 :a7379. +:a7380 :a7380 :a7380. +:a7381 :a7381 :a7381. +:a7382 :a7382 :a7382. +:a7383 :a7383 :a7383. +:a7384 :a7384 :a7384. +:a7385 :a7385 :a7385. +:a7386 :a7386 :a7386. +:a7387 :a7387 :a7387. +:a7388 :a7388 :a7388. +:a7389 :a7389 :a7389. +:a7390 :a7390 :a7390. +:a7391 :a7391 :a7391. +:a7392 :a7392 :a7392. +:a7393 :a7393 :a7393. +:a7394 :a7394 :a7394. +:a7395 :a7395 :a7395. +:a7396 :a7396 :a7396. +:a7397 :a7397 :a7397. +:a7398 :a7398 :a7398. +:a7399 :a7399 :a7399. +:a7400 :a7400 :a7400. +:a7401 :a7401 :a7401. +:a7402 :a7402 :a7402. +:a7403 :a7403 :a7403. +:a7404 :a7404 :a7404. +:a7405 :a7405 :a7405. +:a7406 :a7406 :a7406. +:a7407 :a7407 :a7407. +:a7408 :a7408 :a7408. +:a7409 :a7409 :a7409. +:a7410 :a7410 :a7410. +:a7411 :a7411 :a7411. +:a7412 :a7412 :a7412. +:a7413 :a7413 :a7413. +:a7414 :a7414 :a7414. +:a7415 :a7415 :a7415. +:a7416 :a7416 :a7416. +:a7417 :a7417 :a7417. +:a7418 :a7418 :a7418. +:a7419 :a7419 :a7419. +:a7420 :a7420 :a7420. +:a7421 :a7421 :a7421. +:a7422 :a7422 :a7422. +:a7423 :a7423 :a7423. +:a7424 :a7424 :a7424. +:a7425 :a7425 :a7425. +:a7426 :a7426 :a7426. +:a7427 :a7427 :a7427. +:a7428 :a7428 :a7428. +:a7429 :a7429 :a7429. +:a7430 :a7430 :a7430. +:a7431 :a7431 :a7431. +:a7432 :a7432 :a7432. +:a7433 :a7433 :a7433. +:a7434 :a7434 :a7434. +:a7435 :a7435 :a7435. +:a7436 :a7436 :a7436. +:a7437 :a7437 :a7437. +:a7438 :a7438 :a7438. +:a7439 :a7439 :a7439. +:a7440 :a7440 :a7440. +:a7441 :a7441 :a7441. +:a7442 :a7442 :a7442. +:a7443 :a7443 :a7443. +:a7444 :a7444 :a7444. +:a7445 :a7445 :a7445. +:a7446 :a7446 :a7446. +:a7447 :a7447 :a7447. +:a7448 :a7448 :a7448. +:a7449 :a7449 :a7449. +:a7450 :a7450 :a7450. +:a7451 :a7451 :a7451. +:a7452 :a7452 :a7452. +:a7453 :a7453 :a7453. +:a7454 :a7454 :a7454. +:a7455 :a7455 :a7455. +:a7456 :a7456 :a7456. +:a7457 :a7457 :a7457. +:a7458 :a7458 :a7458. +:a7459 :a7459 :a7459. +:a7460 :a7460 :a7460. +:a7461 :a7461 :a7461. +:a7462 :a7462 :a7462. +:a7463 :a7463 :a7463. +:a7464 :a7464 :a7464. +:a7465 :a7465 :a7465. +:a7466 :a7466 :a7466. +:a7467 :a7467 :a7467. +:a7468 :a7468 :a7468. +:a7469 :a7469 :a7469. +:a7470 :a7470 :a7470. +:a7471 :a7471 :a7471. +:a7472 :a7472 :a7472. +:a7473 :a7473 :a7473. +:a7474 :a7474 :a7474. +:a7475 :a7475 :a7475. +:a7476 :a7476 :a7476. +:a7477 :a7477 :a7477. +:a7478 :a7478 :a7478. +:a7479 :a7479 :a7479. +:a7480 :a7480 :a7480. +:a7481 :a7481 :a7481. +:a7482 :a7482 :a7482. +:a7483 :a7483 :a7483. +:a7484 :a7484 :a7484. +:a7485 :a7485 :a7485. +:a7486 :a7486 :a7486. +:a7487 :a7487 :a7487. +:a7488 :a7488 :a7488. +:a7489 :a7489 :a7489. +:a7490 :a7490 :a7490. +:a7491 :a7491 :a7491. +:a7492 :a7492 :a7492. +:a7493 :a7493 :a7493. +:a7494 :a7494 :a7494. +:a7495 :a7495 :a7495. +:a7496 :a7496 :a7496. +:a7497 :a7497 :a7497. +:a7498 :a7498 :a7498. +:a7499 :a7499 :a7499. +:a7500 :a7500 :a7500. +:a7501 :a7501 :a7501. +:a7502 :a7502 :a7502. +:a7503 :a7503 :a7503. +:a7504 :a7504 :a7504. +:a7505 :a7505 :a7505. +:a7506 :a7506 :a7506. +:a7507 :a7507 :a7507. +:a7508 :a7508 :a7508. +:a7509 :a7509 :a7509. +:a7510 :a7510 :a7510. +:a7511 :a7511 :a7511. +:a7512 :a7512 :a7512. +:a7513 :a7513 :a7513. +:a7514 :a7514 :a7514. +:a7515 :a7515 :a7515. +:a7516 :a7516 :a7516. +:a7517 :a7517 :a7517. +:a7518 :a7518 :a7518. +:a7519 :a7519 :a7519. +:a7520 :a7520 :a7520. +:a7521 :a7521 :a7521. +:a7522 :a7522 :a7522. +:a7523 :a7523 :a7523. +:a7524 :a7524 :a7524. +:a7525 :a7525 :a7525. +:a7526 :a7526 :a7526. +:a7527 :a7527 :a7527. +:a7528 :a7528 :a7528. +:a7529 :a7529 :a7529. +:a7530 :a7530 :a7530. +:a7531 :a7531 :a7531. +:a7532 :a7532 :a7532. +:a7533 :a7533 :a7533. +:a7534 :a7534 :a7534. +:a7535 :a7535 :a7535. +:a7536 :a7536 :a7536. +:a7537 :a7537 :a7537. +:a7538 :a7538 :a7538. +:a7539 :a7539 :a7539. +:a7540 :a7540 :a7540. +:a7541 :a7541 :a7541. +:a7542 :a7542 :a7542. +:a7543 :a7543 :a7543. +:a7544 :a7544 :a7544. +:a7545 :a7545 :a7545. +:a7546 :a7546 :a7546. +:a7547 :a7547 :a7547. +:a7548 :a7548 :a7548. +:a7549 :a7549 :a7549. +:a7550 :a7550 :a7550. +:a7551 :a7551 :a7551. +:a7552 :a7552 :a7552. +:a7553 :a7553 :a7553. +:a7554 :a7554 :a7554. +:a7555 :a7555 :a7555. +:a7556 :a7556 :a7556. +:a7557 :a7557 :a7557. +:a7558 :a7558 :a7558. +:a7559 :a7559 :a7559. +:a7560 :a7560 :a7560. +:a7561 :a7561 :a7561. +:a7562 :a7562 :a7562. +:a7563 :a7563 :a7563. +:a7564 :a7564 :a7564. +:a7565 :a7565 :a7565. +:a7566 :a7566 :a7566. +:a7567 :a7567 :a7567. +:a7568 :a7568 :a7568. +:a7569 :a7569 :a7569. +:a7570 :a7570 :a7570. +:a7571 :a7571 :a7571. +:a7572 :a7572 :a7572. +:a7573 :a7573 :a7573. +:a7574 :a7574 :a7574. +:a7575 :a7575 :a7575. +:a7576 :a7576 :a7576. +:a7577 :a7577 :a7577. +:a7578 :a7578 :a7578. +:a7579 :a7579 :a7579. +:a7580 :a7580 :a7580. +:a7581 :a7581 :a7581. +:a7582 :a7582 :a7582. +:a7583 :a7583 :a7583. +:a7584 :a7584 :a7584. +:a7585 :a7585 :a7585. +:a7586 :a7586 :a7586. +:a7587 :a7587 :a7587. +:a7588 :a7588 :a7588. +:a7589 :a7589 :a7589. +:a7590 :a7590 :a7590. +:a7591 :a7591 :a7591. +:a7592 :a7592 :a7592. +:a7593 :a7593 :a7593. +:a7594 :a7594 :a7594. +:a7595 :a7595 :a7595. +:a7596 :a7596 :a7596. +:a7597 :a7597 :a7597. +:a7598 :a7598 :a7598. +:a7599 :a7599 :a7599. +:a7600 :a7600 :a7600. +:a7601 :a7601 :a7601. +:a7602 :a7602 :a7602. +:a7603 :a7603 :a7603. +:a7604 :a7604 :a7604. +:a7605 :a7605 :a7605. +:a7606 :a7606 :a7606. +:a7607 :a7607 :a7607. +:a7608 :a7608 :a7608. +:a7609 :a7609 :a7609. +:a7610 :a7610 :a7610. +:a7611 :a7611 :a7611. +:a7612 :a7612 :a7612. +:a7613 :a7613 :a7613. +:a7614 :a7614 :a7614. +:a7615 :a7615 :a7615. +:a7616 :a7616 :a7616. +:a7617 :a7617 :a7617. +:a7618 :a7618 :a7618. +:a7619 :a7619 :a7619. +:a7620 :a7620 :a7620. +:a7621 :a7621 :a7621. +:a7622 :a7622 :a7622. +:a7623 :a7623 :a7623. +:a7624 :a7624 :a7624. +:a7625 :a7625 :a7625. +:a7626 :a7626 :a7626. +:a7627 :a7627 :a7627. +:a7628 :a7628 :a7628. +:a7629 :a7629 :a7629. +:a7630 :a7630 :a7630. +:a7631 :a7631 :a7631. +:a7632 :a7632 :a7632. +:a7633 :a7633 :a7633. +:a7634 :a7634 :a7634. +:a7635 :a7635 :a7635. +:a7636 :a7636 :a7636. +:a7637 :a7637 :a7637. +:a7638 :a7638 :a7638. +:a7639 :a7639 :a7639. +:a7640 :a7640 :a7640. +:a7641 :a7641 :a7641. +:a7642 :a7642 :a7642. +:a7643 :a7643 :a7643. +:a7644 :a7644 :a7644. +:a7645 :a7645 :a7645. +:a7646 :a7646 :a7646. +:a7647 :a7647 :a7647. +:a7648 :a7648 :a7648. +:a7649 :a7649 :a7649. +:a7650 :a7650 :a7650. +:a7651 :a7651 :a7651. +:a7652 :a7652 :a7652. +:a7653 :a7653 :a7653. +:a7654 :a7654 :a7654. +:a7655 :a7655 :a7655. +:a7656 :a7656 :a7656. +:a7657 :a7657 :a7657. +:a7658 :a7658 :a7658. +:a7659 :a7659 :a7659. +:a7660 :a7660 :a7660. +:a7661 :a7661 :a7661. +:a7662 :a7662 :a7662. +:a7663 :a7663 :a7663. +:a7664 :a7664 :a7664. +:a7665 :a7665 :a7665. +:a7666 :a7666 :a7666. +:a7667 :a7667 :a7667. +:a7668 :a7668 :a7668. +:a7669 :a7669 :a7669. +:a7670 :a7670 :a7670. +:a7671 :a7671 :a7671. +:a7672 :a7672 :a7672. +:a7673 :a7673 :a7673. +:a7674 :a7674 :a7674. +:a7675 :a7675 :a7675. +:a7676 :a7676 :a7676. +:a7677 :a7677 :a7677. +:a7678 :a7678 :a7678. +:a7679 :a7679 :a7679. +:a7680 :a7680 :a7680. +:a7681 :a7681 :a7681. +:a7682 :a7682 :a7682. +:a7683 :a7683 :a7683. +:a7684 :a7684 :a7684. +:a7685 :a7685 :a7685. +:a7686 :a7686 :a7686. +:a7687 :a7687 :a7687. +:a7688 :a7688 :a7688. +:a7689 :a7689 :a7689. +:a7690 :a7690 :a7690. +:a7691 :a7691 :a7691. +:a7692 :a7692 :a7692. +:a7693 :a7693 :a7693. +:a7694 :a7694 :a7694. +:a7695 :a7695 :a7695. +:a7696 :a7696 :a7696. +:a7697 :a7697 :a7697. +:a7698 :a7698 :a7698. +:a7699 :a7699 :a7699. +:a7700 :a7700 :a7700. +:a7701 :a7701 :a7701. +:a7702 :a7702 :a7702. +:a7703 :a7703 :a7703. +:a7704 :a7704 :a7704. +:a7705 :a7705 :a7705. +:a7706 :a7706 :a7706. +:a7707 :a7707 :a7707. +:a7708 :a7708 :a7708. +:a7709 :a7709 :a7709. +:a7710 :a7710 :a7710. +:a7711 :a7711 :a7711. +:a7712 :a7712 :a7712. +:a7713 :a7713 :a7713. +:a7714 :a7714 :a7714. +:a7715 :a7715 :a7715. +:a7716 :a7716 :a7716. +:a7717 :a7717 :a7717. +:a7718 :a7718 :a7718. +:a7719 :a7719 :a7719. +:a7720 :a7720 :a7720. +:a7721 :a7721 :a7721. +:a7722 :a7722 :a7722. +:a7723 :a7723 :a7723. +:a7724 :a7724 :a7724. +:a7725 :a7725 :a7725. +:a7726 :a7726 :a7726. +:a7727 :a7727 :a7727. +:a7728 :a7728 :a7728. +:a7729 :a7729 :a7729. +:a7730 :a7730 :a7730. +:a7731 :a7731 :a7731. +:a7732 :a7732 :a7732. +:a7733 :a7733 :a7733. +:a7734 :a7734 :a7734. +:a7735 :a7735 :a7735. +:a7736 :a7736 :a7736. +:a7737 :a7737 :a7737. +:a7738 :a7738 :a7738. +:a7739 :a7739 :a7739. +:a7740 :a7740 :a7740. +:a7741 :a7741 :a7741. +:a7742 :a7742 :a7742. +:a7743 :a7743 :a7743. +:a7744 :a7744 :a7744. +:a7745 :a7745 :a7745. +:a7746 :a7746 :a7746. +:a7747 :a7747 :a7747. +:a7748 :a7748 :a7748. +:a7749 :a7749 :a7749. +:a7750 :a7750 :a7750. +:a7751 :a7751 :a7751. +:a7752 :a7752 :a7752. +:a7753 :a7753 :a7753. +:a7754 :a7754 :a7754. +:a7755 :a7755 :a7755. +:a7756 :a7756 :a7756. +:a7757 :a7757 :a7757. +:a7758 :a7758 :a7758. +:a7759 :a7759 :a7759. +:a7760 :a7760 :a7760. +:a7761 :a7761 :a7761. +:a7762 :a7762 :a7762. +:a7763 :a7763 :a7763. +:a7764 :a7764 :a7764. +:a7765 :a7765 :a7765. +:a7766 :a7766 :a7766. +:a7767 :a7767 :a7767. +:a7768 :a7768 :a7768. +:a7769 :a7769 :a7769. +:a7770 :a7770 :a7770. +:a7771 :a7771 :a7771. +:a7772 :a7772 :a7772. +:a7773 :a7773 :a7773. +:a7774 :a7774 :a7774. +:a7775 :a7775 :a7775. +:a7776 :a7776 :a7776. +:a7777 :a7777 :a7777. +:a7778 :a7778 :a7778. +:a7779 :a7779 :a7779. +:a7780 :a7780 :a7780. +:a7781 :a7781 :a7781. +:a7782 :a7782 :a7782. +:a7783 :a7783 :a7783. +:a7784 :a7784 :a7784. +:a7785 :a7785 :a7785. +:a7786 :a7786 :a7786. +:a7787 :a7787 :a7787. +:a7788 :a7788 :a7788. +:a7789 :a7789 :a7789. +:a7790 :a7790 :a7790. +:a7791 :a7791 :a7791. +:a7792 :a7792 :a7792. +:a7793 :a7793 :a7793. +:a7794 :a7794 :a7794. +:a7795 :a7795 :a7795. +:a7796 :a7796 :a7796. +:a7797 :a7797 :a7797. +:a7798 :a7798 :a7798. +:a7799 :a7799 :a7799. +:a7800 :a7800 :a7800. +:a7801 :a7801 :a7801. +:a7802 :a7802 :a7802. +:a7803 :a7803 :a7803. +:a7804 :a7804 :a7804. +:a7805 :a7805 :a7805. +:a7806 :a7806 :a7806. +:a7807 :a7807 :a7807. +:a7808 :a7808 :a7808. +:a7809 :a7809 :a7809. +:a7810 :a7810 :a7810. +:a7811 :a7811 :a7811. +:a7812 :a7812 :a7812. +:a7813 :a7813 :a7813. +:a7814 :a7814 :a7814. +:a7815 :a7815 :a7815. +:a7816 :a7816 :a7816. +:a7817 :a7817 :a7817. +:a7818 :a7818 :a7818. +:a7819 :a7819 :a7819. +:a7820 :a7820 :a7820. +:a7821 :a7821 :a7821. +:a7822 :a7822 :a7822. +:a7823 :a7823 :a7823. +:a7824 :a7824 :a7824. +:a7825 :a7825 :a7825. +:a7826 :a7826 :a7826. +:a7827 :a7827 :a7827. +:a7828 :a7828 :a7828. +:a7829 :a7829 :a7829. +:a7830 :a7830 :a7830. +:a7831 :a7831 :a7831. +:a7832 :a7832 :a7832. +:a7833 :a7833 :a7833. +:a7834 :a7834 :a7834. +:a7835 :a7835 :a7835. +:a7836 :a7836 :a7836. +:a7837 :a7837 :a7837. +:a7838 :a7838 :a7838. +:a7839 :a7839 :a7839. +:a7840 :a7840 :a7840. +:a7841 :a7841 :a7841. +:a7842 :a7842 :a7842. +:a7843 :a7843 :a7843. +:a7844 :a7844 :a7844. +:a7845 :a7845 :a7845. +:a7846 :a7846 :a7846. +:a7847 :a7847 :a7847. +:a7848 :a7848 :a7848. +:a7849 :a7849 :a7849. +:a7850 :a7850 :a7850. +:a7851 :a7851 :a7851. +:a7852 :a7852 :a7852. +:a7853 :a7853 :a7853. +:a7854 :a7854 :a7854. +:a7855 :a7855 :a7855. +:a7856 :a7856 :a7856. +:a7857 :a7857 :a7857. +:a7858 :a7858 :a7858. +:a7859 :a7859 :a7859. +:a7860 :a7860 :a7860. +:a7861 :a7861 :a7861. +:a7862 :a7862 :a7862. +:a7863 :a7863 :a7863. +:a7864 :a7864 :a7864. +:a7865 :a7865 :a7865. +:a7866 :a7866 :a7866. +:a7867 :a7867 :a7867. +:a7868 :a7868 :a7868. +:a7869 :a7869 :a7869. +:a7870 :a7870 :a7870. +:a7871 :a7871 :a7871. +:a7872 :a7872 :a7872. +:a7873 :a7873 :a7873. +:a7874 :a7874 :a7874. +:a7875 :a7875 :a7875. +:a7876 :a7876 :a7876. +:a7877 :a7877 :a7877. +:a7878 :a7878 :a7878. +:a7879 :a7879 :a7879. +:a7880 :a7880 :a7880. +:a7881 :a7881 :a7881. +:a7882 :a7882 :a7882. +:a7883 :a7883 :a7883. +:a7884 :a7884 :a7884. +:a7885 :a7885 :a7885. +:a7886 :a7886 :a7886. +:a7887 :a7887 :a7887. +:a7888 :a7888 :a7888. +:a7889 :a7889 :a7889. +:a7890 :a7890 :a7890. +:a7891 :a7891 :a7891. +:a7892 :a7892 :a7892. +:a7893 :a7893 :a7893. +:a7894 :a7894 :a7894. +:a7895 :a7895 :a7895. +:a7896 :a7896 :a7896. +:a7897 :a7897 :a7897. +:a7898 :a7898 :a7898. +:a7899 :a7899 :a7899. +:a7900 :a7900 :a7900. +:a7901 :a7901 :a7901. +:a7902 :a7902 :a7902. +:a7903 :a7903 :a7903. +:a7904 :a7904 :a7904. +:a7905 :a7905 :a7905. +:a7906 :a7906 :a7906. +:a7907 :a7907 :a7907. +:a7908 :a7908 :a7908. +:a7909 :a7909 :a7909. +:a7910 :a7910 :a7910. +:a7911 :a7911 :a7911. +:a7912 :a7912 :a7912. +:a7913 :a7913 :a7913. +:a7914 :a7914 :a7914. +:a7915 :a7915 :a7915. +:a7916 :a7916 :a7916. +:a7917 :a7917 :a7917. +:a7918 :a7918 :a7918. +:a7919 :a7919 :a7919. +:a7920 :a7920 :a7920. +:a7921 :a7921 :a7921. +:a7922 :a7922 :a7922. +:a7923 :a7923 :a7923. +:a7924 :a7924 :a7924. +:a7925 :a7925 :a7925. +:a7926 :a7926 :a7926. +:a7927 :a7927 :a7927. +:a7928 :a7928 :a7928. +:a7929 :a7929 :a7929. +:a7930 :a7930 :a7930. +:a7931 :a7931 :a7931. +:a7932 :a7932 :a7932. +:a7933 :a7933 :a7933. +:a7934 :a7934 :a7934. +:a7935 :a7935 :a7935. +:a7936 :a7936 :a7936. +:a7937 :a7937 :a7937. +:a7938 :a7938 :a7938. +:a7939 :a7939 :a7939. +:a7940 :a7940 :a7940. +:a7941 :a7941 :a7941. +:a7942 :a7942 :a7942. +:a7943 :a7943 :a7943. +:a7944 :a7944 :a7944. +:a7945 :a7945 :a7945. +:a7946 :a7946 :a7946. +:a7947 :a7947 :a7947. +:a7948 :a7948 :a7948. +:a7949 :a7949 :a7949. +:a7950 :a7950 :a7950. +:a7951 :a7951 :a7951. +:a7952 :a7952 :a7952. +:a7953 :a7953 :a7953. +:a7954 :a7954 :a7954. +:a7955 :a7955 :a7955. +:a7956 :a7956 :a7956. +:a7957 :a7957 :a7957. +:a7958 :a7958 :a7958. +:a7959 :a7959 :a7959. +:a7960 :a7960 :a7960. +:a7961 :a7961 :a7961. +:a7962 :a7962 :a7962. +:a7963 :a7963 :a7963. +:a7964 :a7964 :a7964. +:a7965 :a7965 :a7965. +:a7966 :a7966 :a7966. +:a7967 :a7967 :a7967. +:a7968 :a7968 :a7968. +:a7969 :a7969 :a7969. +:a7970 :a7970 :a7970. +:a7971 :a7971 :a7971. +:a7972 :a7972 :a7972. +:a7973 :a7973 :a7973. +:a7974 :a7974 :a7974. +:a7975 :a7975 :a7975. +:a7976 :a7976 :a7976. +:a7977 :a7977 :a7977. +:a7978 :a7978 :a7978. +:a7979 :a7979 :a7979. +:a7980 :a7980 :a7980. +:a7981 :a7981 :a7981. +:a7982 :a7982 :a7982. +:a7983 :a7983 :a7983. +:a7984 :a7984 :a7984. +:a7985 :a7985 :a7985. +:a7986 :a7986 :a7986. +:a7987 :a7987 :a7987. +:a7988 :a7988 :a7988. +:a7989 :a7989 :a7989. +:a7990 :a7990 :a7990. +:a7991 :a7991 :a7991. +:a7992 :a7992 :a7992. +:a7993 :a7993 :a7993. +:a7994 :a7994 :a7994. +:a7995 :a7995 :a7995. +:a7996 :a7996 :a7996. +:a7997 :a7997 :a7997. +:a7998 :a7998 :a7998. +:a7999 :a7999 :a7999. +:a8000 :a8000 :a8000. +:a8001 :a8001 :a8001. +:a8002 :a8002 :a8002. +:a8003 :a8003 :a8003. +:a8004 :a8004 :a8004. +:a8005 :a8005 :a8005. +:a8006 :a8006 :a8006. +:a8007 :a8007 :a8007. +:a8008 :a8008 :a8008. +:a8009 :a8009 :a8009. +:a8010 :a8010 :a8010. +:a8011 :a8011 :a8011. +:a8012 :a8012 :a8012. +:a8013 :a8013 :a8013. +:a8014 :a8014 :a8014. +:a8015 :a8015 :a8015. +:a8016 :a8016 :a8016. +:a8017 :a8017 :a8017. +:a8018 :a8018 :a8018. +:a8019 :a8019 :a8019. +:a8020 :a8020 :a8020. +:a8021 :a8021 :a8021. +:a8022 :a8022 :a8022. +:a8023 :a8023 :a8023. +:a8024 :a8024 :a8024. +:a8025 :a8025 :a8025. +:a8026 :a8026 :a8026. +:a8027 :a8027 :a8027. +:a8028 :a8028 :a8028. +:a8029 :a8029 :a8029. +:a8030 :a8030 :a8030. +:a8031 :a8031 :a8031. +:a8032 :a8032 :a8032. +:a8033 :a8033 :a8033. +:a8034 :a8034 :a8034. +:a8035 :a8035 :a8035. +:a8036 :a8036 :a8036. +:a8037 :a8037 :a8037. +:a8038 :a8038 :a8038. +:a8039 :a8039 :a8039. +:a8040 :a8040 :a8040. +:a8041 :a8041 :a8041. +:a8042 :a8042 :a8042. +:a8043 :a8043 :a8043. +:a8044 :a8044 :a8044. +:a8045 :a8045 :a8045. +:a8046 :a8046 :a8046. +:a8047 :a8047 :a8047. +:a8048 :a8048 :a8048. +:a8049 :a8049 :a8049. +:a8050 :a8050 :a8050. +:a8051 :a8051 :a8051. +:a8052 :a8052 :a8052. +:a8053 :a8053 :a8053. +:a8054 :a8054 :a8054. +:a8055 :a8055 :a8055. +:a8056 :a8056 :a8056. +:a8057 :a8057 :a8057. +:a8058 :a8058 :a8058. +:a8059 :a8059 :a8059. +:a8060 :a8060 :a8060. +:a8061 :a8061 :a8061. +:a8062 :a8062 :a8062. +:a8063 :a8063 :a8063. +:a8064 :a8064 :a8064. +:a8065 :a8065 :a8065. +:a8066 :a8066 :a8066. +:a8067 :a8067 :a8067. +:a8068 :a8068 :a8068. +:a8069 :a8069 :a8069. +:a8070 :a8070 :a8070. +:a8071 :a8071 :a8071. +:a8072 :a8072 :a8072. +:a8073 :a8073 :a8073. +:a8074 :a8074 :a8074. +:a8075 :a8075 :a8075. +:a8076 :a8076 :a8076. +:a8077 :a8077 :a8077. +:a8078 :a8078 :a8078. +:a8079 :a8079 :a8079. +:a8080 :a8080 :a8080. +:a8081 :a8081 :a8081. +:a8082 :a8082 :a8082. +:a8083 :a8083 :a8083. +:a8084 :a8084 :a8084. +:a8085 :a8085 :a8085. +:a8086 :a8086 :a8086. +:a8087 :a8087 :a8087. +:a8088 :a8088 :a8088. +:a8089 :a8089 :a8089. +:a8090 :a8090 :a8090. +:a8091 :a8091 :a8091. +:a8092 :a8092 :a8092. +:a8093 :a8093 :a8093. +:a8094 :a8094 :a8094. +:a8095 :a8095 :a8095. +:a8096 :a8096 :a8096. +:a8097 :a8097 :a8097. +:a8098 :a8098 :a8098. +:a8099 :a8099 :a8099. +:a8100 :a8100 :a8100. +:a8101 :a8101 :a8101. +:a8102 :a8102 :a8102. +:a8103 :a8103 :a8103. +:a8104 :a8104 :a8104. +:a8105 :a8105 :a8105. +:a8106 :a8106 :a8106. +:a8107 :a8107 :a8107. +:a8108 :a8108 :a8108. +:a8109 :a8109 :a8109. +:a8110 :a8110 :a8110. +:a8111 :a8111 :a8111. +:a8112 :a8112 :a8112. +:a8113 :a8113 :a8113. +:a8114 :a8114 :a8114. +:a8115 :a8115 :a8115. +:a8116 :a8116 :a8116. +:a8117 :a8117 :a8117. +:a8118 :a8118 :a8118. +:a8119 :a8119 :a8119. +:a8120 :a8120 :a8120. +:a8121 :a8121 :a8121. +:a8122 :a8122 :a8122. +:a8123 :a8123 :a8123. +:a8124 :a8124 :a8124. +:a8125 :a8125 :a8125. +:a8126 :a8126 :a8126. +:a8127 :a8127 :a8127. +:a8128 :a8128 :a8128. +:a8129 :a8129 :a8129. +:a8130 :a8130 :a8130. +:a8131 :a8131 :a8131. +:a8132 :a8132 :a8132. +:a8133 :a8133 :a8133. +:a8134 :a8134 :a8134. +:a8135 :a8135 :a8135. +:a8136 :a8136 :a8136. +:a8137 :a8137 :a8137. +:a8138 :a8138 :a8138. +:a8139 :a8139 :a8139. +:a8140 :a8140 :a8140. +:a8141 :a8141 :a8141. +:a8142 :a8142 :a8142. +:a8143 :a8143 :a8143. +:a8144 :a8144 :a8144. +:a8145 :a8145 :a8145. +:a8146 :a8146 :a8146. +:a8147 :a8147 :a8147. +:a8148 :a8148 :a8148. +:a8149 :a8149 :a8149. +:a8150 :a8150 :a8150. +:a8151 :a8151 :a8151. +:a8152 :a8152 :a8152. +:a8153 :a8153 :a8153. +:a8154 :a8154 :a8154. +:a8155 :a8155 :a8155. +:a8156 :a8156 :a8156. +:a8157 :a8157 :a8157. +:a8158 :a8158 :a8158. +:a8159 :a8159 :a8159. +:a8160 :a8160 :a8160. +:a8161 :a8161 :a8161. +:a8162 :a8162 :a8162. +:a8163 :a8163 :a8163. +:a8164 :a8164 :a8164. +:a8165 :a8165 :a8165. +:a8166 :a8166 :a8166. +:a8167 :a8167 :a8167. +:a8168 :a8168 :a8168. +:a8169 :a8169 :a8169. +:a8170 :a8170 :a8170. +:a8171 :a8171 :a8171. +:a8172 :a8172 :a8172. +:a8173 :a8173 :a8173. +:a8174 :a8174 :a8174. +:a8175 :a8175 :a8175. +:a8176 :a8176 :a8176. +:a8177 :a8177 :a8177. +:a8178 :a8178 :a8178. +:a8179 :a8179 :a8179. +:a8180 :a8180 :a8180. +:a8181 :a8181 :a8181. +:a8182 :a8182 :a8182. +:a8183 :a8183 :a8183. +:a8184 :a8184 :a8184. +:a8185 :a8185 :a8185. +:a8186 :a8186 :a8186. +:a8187 :a8187 :a8187. +:a8188 :a8188 :a8188. +:a8189 :a8189 :a8189. +:a8190 :a8190 :a8190. +:a8191 :a8191 :a8191. +:a8192 :a8192 :a8192. +:a8193 :a8193 :a8193. +:a8194 :a8194 :a8194. +:a8195 :a8195 :a8195. +:a8196 :a8196 :a8196. +:a8197 :a8197 :a8197. +:a8198 :a8198 :a8198. +:a8199 :a8199 :a8199. +:a8200 :a8200 :a8200. +:a8201 :a8201 :a8201. +:a8202 :a8202 :a8202. +:a8203 :a8203 :a8203. +:a8204 :a8204 :a8204. +:a8205 :a8205 :a8205. +:a8206 :a8206 :a8206. +:a8207 :a8207 :a8207. +:a8208 :a8208 :a8208. +:a8209 :a8209 :a8209. +:a8210 :a8210 :a8210. +:a8211 :a8211 :a8211. +:a8212 :a8212 :a8212. +:a8213 :a8213 :a8213. +:a8214 :a8214 :a8214. +:a8215 :a8215 :a8215. +:a8216 :a8216 :a8216. +:a8217 :a8217 :a8217. +:a8218 :a8218 :a8218. +:a8219 :a8219 :a8219. +:a8220 :a8220 :a8220. +:a8221 :a8221 :a8221. +:a8222 :a8222 :a8222. +:a8223 :a8223 :a8223. +:a8224 :a8224 :a8224. +:a8225 :a8225 :a8225. +:a8226 :a8226 :a8226. +:a8227 :a8227 :a8227. +:a8228 :a8228 :a8228. +:a8229 :a8229 :a8229. +:a8230 :a8230 :a8230. +:a8231 :a8231 :a8231. +:a8232 :a8232 :a8232. +:a8233 :a8233 :a8233. +:a8234 :a8234 :a8234. +:a8235 :a8235 :a8235. +:a8236 :a8236 :a8236. +:a8237 :a8237 :a8237. +:a8238 :a8238 :a8238. +:a8239 :a8239 :a8239. +:a8240 :a8240 :a8240. +:a8241 :a8241 :a8241. +:a8242 :a8242 :a8242. +:a8243 :a8243 :a8243. +:a8244 :a8244 :a8244. +:a8245 :a8245 :a8245. +:a8246 :a8246 :a8246. +:a8247 :a8247 :a8247. +:a8248 :a8248 :a8248. +:a8249 :a8249 :a8249. +:a8250 :a8250 :a8250. +:a8251 :a8251 :a8251. +:a8252 :a8252 :a8252. +:a8253 :a8253 :a8253. +:a8254 :a8254 :a8254. +:a8255 :a8255 :a8255. +:a8256 :a8256 :a8256. +:a8257 :a8257 :a8257. +:a8258 :a8258 :a8258. +:a8259 :a8259 :a8259. +:a8260 :a8260 :a8260. +:a8261 :a8261 :a8261. +:a8262 :a8262 :a8262. +:a8263 :a8263 :a8263. +:a8264 :a8264 :a8264. +:a8265 :a8265 :a8265. +:a8266 :a8266 :a8266. +:a8267 :a8267 :a8267. +:a8268 :a8268 :a8268. +:a8269 :a8269 :a8269. +:a8270 :a8270 :a8270. +:a8271 :a8271 :a8271. +:a8272 :a8272 :a8272. +:a8273 :a8273 :a8273. +:a8274 :a8274 :a8274. +:a8275 :a8275 :a8275. +:a8276 :a8276 :a8276. +:a8277 :a8277 :a8277. +:a8278 :a8278 :a8278. +:a8279 :a8279 :a8279. +:a8280 :a8280 :a8280. +:a8281 :a8281 :a8281. +:a8282 :a8282 :a8282. +:a8283 :a8283 :a8283. +:a8284 :a8284 :a8284. +:a8285 :a8285 :a8285. +:a8286 :a8286 :a8286. +:a8287 :a8287 :a8287. +:a8288 :a8288 :a8288. +:a8289 :a8289 :a8289. +:a8290 :a8290 :a8290. +:a8291 :a8291 :a8291. +:a8292 :a8292 :a8292. +:a8293 :a8293 :a8293. +:a8294 :a8294 :a8294. +:a8295 :a8295 :a8295. +:a8296 :a8296 :a8296. +:a8297 :a8297 :a8297. +:a8298 :a8298 :a8298. +:a8299 :a8299 :a8299. +:a8300 :a8300 :a8300. +:a8301 :a8301 :a8301. +:a8302 :a8302 :a8302. +:a8303 :a8303 :a8303. +:a8304 :a8304 :a8304. +:a8305 :a8305 :a8305. +:a8306 :a8306 :a8306. +:a8307 :a8307 :a8307. +:a8308 :a8308 :a8308. +:a8309 :a8309 :a8309. +:a8310 :a8310 :a8310. +:a8311 :a8311 :a8311. +:a8312 :a8312 :a8312. +:a8313 :a8313 :a8313. +:a8314 :a8314 :a8314. +:a8315 :a8315 :a8315. +:a8316 :a8316 :a8316. +:a8317 :a8317 :a8317. +:a8318 :a8318 :a8318. +:a8319 :a8319 :a8319. +:a8320 :a8320 :a8320. +:a8321 :a8321 :a8321. +:a8322 :a8322 :a8322. +:a8323 :a8323 :a8323. +:a8324 :a8324 :a8324. +:a8325 :a8325 :a8325. +:a8326 :a8326 :a8326. +:a8327 :a8327 :a8327. +:a8328 :a8328 :a8328. +:a8329 :a8329 :a8329. +:a8330 :a8330 :a8330. +:a8331 :a8331 :a8331. +:a8332 :a8332 :a8332. +:a8333 :a8333 :a8333. +:a8334 :a8334 :a8334. +:a8335 :a8335 :a8335. +:a8336 :a8336 :a8336. +:a8337 :a8337 :a8337. +:a8338 :a8338 :a8338. +:a8339 :a8339 :a8339. +:a8340 :a8340 :a8340. +:a8341 :a8341 :a8341. +:a8342 :a8342 :a8342. +:a8343 :a8343 :a8343. +:a8344 :a8344 :a8344. +:a8345 :a8345 :a8345. +:a8346 :a8346 :a8346. +:a8347 :a8347 :a8347. +:a8348 :a8348 :a8348. +:a8349 :a8349 :a8349. +:a8350 :a8350 :a8350. +:a8351 :a8351 :a8351. +:a8352 :a8352 :a8352. +:a8353 :a8353 :a8353. +:a8354 :a8354 :a8354. +:a8355 :a8355 :a8355. +:a8356 :a8356 :a8356. +:a8357 :a8357 :a8357. +:a8358 :a8358 :a8358. +:a8359 :a8359 :a8359. +:a8360 :a8360 :a8360. +:a8361 :a8361 :a8361. +:a8362 :a8362 :a8362. +:a8363 :a8363 :a8363. +:a8364 :a8364 :a8364. +:a8365 :a8365 :a8365. +:a8366 :a8366 :a8366. +:a8367 :a8367 :a8367. +:a8368 :a8368 :a8368. +:a8369 :a8369 :a8369. +:a8370 :a8370 :a8370. +:a8371 :a8371 :a8371. +:a8372 :a8372 :a8372. +:a8373 :a8373 :a8373. +:a8374 :a8374 :a8374. +:a8375 :a8375 :a8375. +:a8376 :a8376 :a8376. +:a8377 :a8377 :a8377. +:a8378 :a8378 :a8378. +:a8379 :a8379 :a8379. +:a8380 :a8380 :a8380. +:a8381 :a8381 :a8381. +:a8382 :a8382 :a8382. +:a8383 :a8383 :a8383. +:a8384 :a8384 :a8384. +:a8385 :a8385 :a8385. +:a8386 :a8386 :a8386. +:a8387 :a8387 :a8387. +:a8388 :a8388 :a8388. +:a8389 :a8389 :a8389. +:a8390 :a8390 :a8390. +:a8391 :a8391 :a8391. +:a8392 :a8392 :a8392. +:a8393 :a8393 :a8393. +:a8394 :a8394 :a8394. +:a8395 :a8395 :a8395. +:a8396 :a8396 :a8396. +:a8397 :a8397 :a8397. +:a8398 :a8398 :a8398. +:a8399 :a8399 :a8399. +:a8400 :a8400 :a8400. +:a8401 :a8401 :a8401. +:a8402 :a8402 :a8402. +:a8403 :a8403 :a8403. +:a8404 :a8404 :a8404. +:a8405 :a8405 :a8405. +:a8406 :a8406 :a8406. +:a8407 :a8407 :a8407. +:a8408 :a8408 :a8408. +:a8409 :a8409 :a8409. +:a8410 :a8410 :a8410. +:a8411 :a8411 :a8411. +:a8412 :a8412 :a8412. +:a8413 :a8413 :a8413. +:a8414 :a8414 :a8414. +:a8415 :a8415 :a8415. +:a8416 :a8416 :a8416. +:a8417 :a8417 :a8417. +:a8418 :a8418 :a8418. +:a8419 :a8419 :a8419. +:a8420 :a8420 :a8420. +:a8421 :a8421 :a8421. +:a8422 :a8422 :a8422. +:a8423 :a8423 :a8423. +:a8424 :a8424 :a8424. +:a8425 :a8425 :a8425. +:a8426 :a8426 :a8426. +:a8427 :a8427 :a8427. +:a8428 :a8428 :a8428. +:a8429 :a8429 :a8429. +:a8430 :a8430 :a8430. +:a8431 :a8431 :a8431. +:a8432 :a8432 :a8432. +:a8433 :a8433 :a8433. +:a8434 :a8434 :a8434. +:a8435 :a8435 :a8435. +:a8436 :a8436 :a8436. +:a8437 :a8437 :a8437. +:a8438 :a8438 :a8438. +:a8439 :a8439 :a8439. +:a8440 :a8440 :a8440. +:a8441 :a8441 :a8441. +:a8442 :a8442 :a8442. +:a8443 :a8443 :a8443. +:a8444 :a8444 :a8444. +:a8445 :a8445 :a8445. +:a8446 :a8446 :a8446. +:a8447 :a8447 :a8447. +:a8448 :a8448 :a8448. +:a8449 :a8449 :a8449. +:a8450 :a8450 :a8450. +:a8451 :a8451 :a8451. +:a8452 :a8452 :a8452. +:a8453 :a8453 :a8453. +:a8454 :a8454 :a8454. +:a8455 :a8455 :a8455. +:a8456 :a8456 :a8456. +:a8457 :a8457 :a8457. +:a8458 :a8458 :a8458. +:a8459 :a8459 :a8459. +:a8460 :a8460 :a8460. +:a8461 :a8461 :a8461. +:a8462 :a8462 :a8462. +:a8463 :a8463 :a8463. +:a8464 :a8464 :a8464. +:a8465 :a8465 :a8465. +:a8466 :a8466 :a8466. +:a8467 :a8467 :a8467. +:a8468 :a8468 :a8468. +:a8469 :a8469 :a8469. +:a8470 :a8470 :a8470. +:a8471 :a8471 :a8471. +:a8472 :a8472 :a8472. +:a8473 :a8473 :a8473. +:a8474 :a8474 :a8474. +:a8475 :a8475 :a8475. +:a8476 :a8476 :a8476. +:a8477 :a8477 :a8477. +:a8478 :a8478 :a8478. +:a8479 :a8479 :a8479. +:a8480 :a8480 :a8480. +:a8481 :a8481 :a8481. +:a8482 :a8482 :a8482. +:a8483 :a8483 :a8483. +:a8484 :a8484 :a8484. +:a8485 :a8485 :a8485. +:a8486 :a8486 :a8486. +:a8487 :a8487 :a8487. +:a8488 :a8488 :a8488. +:a8489 :a8489 :a8489. +:a8490 :a8490 :a8490. +:a8491 :a8491 :a8491. +:a8492 :a8492 :a8492. +:a8493 :a8493 :a8493. +:a8494 :a8494 :a8494. +:a8495 :a8495 :a8495. +:a8496 :a8496 :a8496. +:a8497 :a8497 :a8497. +:a8498 :a8498 :a8498. +:a8499 :a8499 :a8499. +:a8500 :a8500 :a8500. +:a8501 :a8501 :a8501. +:a8502 :a8502 :a8502. +:a8503 :a8503 :a8503. +:a8504 :a8504 :a8504. +:a8505 :a8505 :a8505. +:a8506 :a8506 :a8506. +:a8507 :a8507 :a8507. +:a8508 :a8508 :a8508. +:a8509 :a8509 :a8509. +:a8510 :a8510 :a8510. +:a8511 :a8511 :a8511. +:a8512 :a8512 :a8512. +:a8513 :a8513 :a8513. +:a8514 :a8514 :a8514. +:a8515 :a8515 :a8515. +:a8516 :a8516 :a8516. +:a8517 :a8517 :a8517. +:a8518 :a8518 :a8518. +:a8519 :a8519 :a8519. +:a8520 :a8520 :a8520. +:a8521 :a8521 :a8521. +:a8522 :a8522 :a8522. +:a8523 :a8523 :a8523. +:a8524 :a8524 :a8524. +:a8525 :a8525 :a8525. +:a8526 :a8526 :a8526. +:a8527 :a8527 :a8527. +:a8528 :a8528 :a8528. +:a8529 :a8529 :a8529. +:a8530 :a8530 :a8530. +:a8531 :a8531 :a8531. +:a8532 :a8532 :a8532. +:a8533 :a8533 :a8533. +:a8534 :a8534 :a8534. +:a8535 :a8535 :a8535. +:a8536 :a8536 :a8536. +:a8537 :a8537 :a8537. +:a8538 :a8538 :a8538. +:a8539 :a8539 :a8539. +:a8540 :a8540 :a8540. +:a8541 :a8541 :a8541. +:a8542 :a8542 :a8542. +:a8543 :a8543 :a8543. +:a8544 :a8544 :a8544. +:a8545 :a8545 :a8545. +:a8546 :a8546 :a8546. +:a8547 :a8547 :a8547. +:a8548 :a8548 :a8548. +:a8549 :a8549 :a8549. +:a8550 :a8550 :a8550. +:a8551 :a8551 :a8551. +:a8552 :a8552 :a8552. +:a8553 :a8553 :a8553. +:a8554 :a8554 :a8554. +:a8555 :a8555 :a8555. +:a8556 :a8556 :a8556. +:a8557 :a8557 :a8557. +:a8558 :a8558 :a8558. +:a8559 :a8559 :a8559. +:a8560 :a8560 :a8560. +:a8561 :a8561 :a8561. +:a8562 :a8562 :a8562. +:a8563 :a8563 :a8563. +:a8564 :a8564 :a8564. +:a8565 :a8565 :a8565. +:a8566 :a8566 :a8566. +:a8567 :a8567 :a8567. +:a8568 :a8568 :a8568. +:a8569 :a8569 :a8569. +:a8570 :a8570 :a8570. +:a8571 :a8571 :a8571. +:a8572 :a8572 :a8572. +:a8573 :a8573 :a8573. +:a8574 :a8574 :a8574. +:a8575 :a8575 :a8575. +:a8576 :a8576 :a8576. +:a8577 :a8577 :a8577. +:a8578 :a8578 :a8578. +:a8579 :a8579 :a8579. +:a8580 :a8580 :a8580. +:a8581 :a8581 :a8581. +:a8582 :a8582 :a8582. +:a8583 :a8583 :a8583. +:a8584 :a8584 :a8584. +:a8585 :a8585 :a8585. +:a8586 :a8586 :a8586. +:a8587 :a8587 :a8587. +:a8588 :a8588 :a8588. +:a8589 :a8589 :a8589. +:a8590 :a8590 :a8590. +:a8591 :a8591 :a8591. +:a8592 :a8592 :a8592. +:a8593 :a8593 :a8593. +:a8594 :a8594 :a8594. +:a8595 :a8595 :a8595. +:a8596 :a8596 :a8596. +:a8597 :a8597 :a8597. +:a8598 :a8598 :a8598. +:a8599 :a8599 :a8599. +:a8600 :a8600 :a8600. +:a8601 :a8601 :a8601. +:a8602 :a8602 :a8602. +:a8603 :a8603 :a8603. +:a8604 :a8604 :a8604. +:a8605 :a8605 :a8605. +:a8606 :a8606 :a8606. +:a8607 :a8607 :a8607. +:a8608 :a8608 :a8608. +:a8609 :a8609 :a8609. +:a8610 :a8610 :a8610. +:a8611 :a8611 :a8611. +:a8612 :a8612 :a8612. +:a8613 :a8613 :a8613. +:a8614 :a8614 :a8614. +:a8615 :a8615 :a8615. +:a8616 :a8616 :a8616. +:a8617 :a8617 :a8617. +:a8618 :a8618 :a8618. +:a8619 :a8619 :a8619. +:a8620 :a8620 :a8620. +:a8621 :a8621 :a8621. +:a8622 :a8622 :a8622. +:a8623 :a8623 :a8623. +:a8624 :a8624 :a8624. +:a8625 :a8625 :a8625. +:a8626 :a8626 :a8626. +:a8627 :a8627 :a8627. +:a8628 :a8628 :a8628. +:a8629 :a8629 :a8629. +:a8630 :a8630 :a8630. +:a8631 :a8631 :a8631. +:a8632 :a8632 :a8632. +:a8633 :a8633 :a8633. +:a8634 :a8634 :a8634. +:a8635 :a8635 :a8635. +:a8636 :a8636 :a8636. +:a8637 :a8637 :a8637. +:a8638 :a8638 :a8638. +:a8639 :a8639 :a8639. +:a8640 :a8640 :a8640. +:a8641 :a8641 :a8641. +:a8642 :a8642 :a8642. +:a8643 :a8643 :a8643. +:a8644 :a8644 :a8644. +:a8645 :a8645 :a8645. +:a8646 :a8646 :a8646. +:a8647 :a8647 :a8647. +:a8648 :a8648 :a8648. +:a8649 :a8649 :a8649. +:a8650 :a8650 :a8650. +:a8651 :a8651 :a8651. +:a8652 :a8652 :a8652. +:a8653 :a8653 :a8653. +:a8654 :a8654 :a8654. +:a8655 :a8655 :a8655. +:a8656 :a8656 :a8656. +:a8657 :a8657 :a8657. +:a8658 :a8658 :a8658. +:a8659 :a8659 :a8659. +:a8660 :a8660 :a8660. +:a8661 :a8661 :a8661. +:a8662 :a8662 :a8662. +:a8663 :a8663 :a8663. +:a8664 :a8664 :a8664. +:a8665 :a8665 :a8665. +:a8666 :a8666 :a8666. +:a8667 :a8667 :a8667. +:a8668 :a8668 :a8668. +:a8669 :a8669 :a8669. +:a8670 :a8670 :a8670. +:a8671 :a8671 :a8671. +:a8672 :a8672 :a8672. +:a8673 :a8673 :a8673. +:a8674 :a8674 :a8674. +:a8675 :a8675 :a8675. +:a8676 :a8676 :a8676. +:a8677 :a8677 :a8677. +:a8678 :a8678 :a8678. +:a8679 :a8679 :a8679. +:a8680 :a8680 :a8680. +:a8681 :a8681 :a8681. +:a8682 :a8682 :a8682. +:a8683 :a8683 :a8683. +:a8684 :a8684 :a8684. +:a8685 :a8685 :a8685. +:a8686 :a8686 :a8686. +:a8687 :a8687 :a8687. +:a8688 :a8688 :a8688. +:a8689 :a8689 :a8689. +:a8690 :a8690 :a8690. +:a8691 :a8691 :a8691. +:a8692 :a8692 :a8692. +:a8693 :a8693 :a8693. +:a8694 :a8694 :a8694. +:a8695 :a8695 :a8695. +:a8696 :a8696 :a8696. +:a8697 :a8697 :a8697. +:a8698 :a8698 :a8698. +:a8699 :a8699 :a8699. +:a8700 :a8700 :a8700. +:a8701 :a8701 :a8701. +:a8702 :a8702 :a8702. +:a8703 :a8703 :a8703. +:a8704 :a8704 :a8704. +:a8705 :a8705 :a8705. +:a8706 :a8706 :a8706. +:a8707 :a8707 :a8707. +:a8708 :a8708 :a8708. +:a8709 :a8709 :a8709. +:a8710 :a8710 :a8710. +:a8711 :a8711 :a8711. +:a8712 :a8712 :a8712. +:a8713 :a8713 :a8713. +:a8714 :a8714 :a8714. +:a8715 :a8715 :a8715. +:a8716 :a8716 :a8716. +:a8717 :a8717 :a8717. +:a8718 :a8718 :a8718. +:a8719 :a8719 :a8719. +:a8720 :a8720 :a8720. +:a8721 :a8721 :a8721. +:a8722 :a8722 :a8722. +:a8723 :a8723 :a8723. +:a8724 :a8724 :a8724. +:a8725 :a8725 :a8725. +:a8726 :a8726 :a8726. +:a8727 :a8727 :a8727. +:a8728 :a8728 :a8728. +:a8729 :a8729 :a8729. +:a8730 :a8730 :a8730. +:a8731 :a8731 :a8731. +:a8732 :a8732 :a8732. +:a8733 :a8733 :a8733. +:a8734 :a8734 :a8734. +:a8735 :a8735 :a8735. +:a8736 :a8736 :a8736. +:a8737 :a8737 :a8737. +:a8738 :a8738 :a8738. +:a8739 :a8739 :a8739. +:a8740 :a8740 :a8740. +:a8741 :a8741 :a8741. +:a8742 :a8742 :a8742. +:a8743 :a8743 :a8743. +:a8744 :a8744 :a8744. +:a8745 :a8745 :a8745. +:a8746 :a8746 :a8746. +:a8747 :a8747 :a8747. +:a8748 :a8748 :a8748. +:a8749 :a8749 :a8749. +:a8750 :a8750 :a8750. +:a8751 :a8751 :a8751. +:a8752 :a8752 :a8752. +:a8753 :a8753 :a8753. +:a8754 :a8754 :a8754. +:a8755 :a8755 :a8755. +:a8756 :a8756 :a8756. +:a8757 :a8757 :a8757. +:a8758 :a8758 :a8758. +:a8759 :a8759 :a8759. +:a8760 :a8760 :a8760. +:a8761 :a8761 :a8761. +:a8762 :a8762 :a8762. +:a8763 :a8763 :a8763. +:a8764 :a8764 :a8764. +:a8765 :a8765 :a8765. +:a8766 :a8766 :a8766. +:a8767 :a8767 :a8767. +:a8768 :a8768 :a8768. +:a8769 :a8769 :a8769. +:a8770 :a8770 :a8770. +:a8771 :a8771 :a8771. +:a8772 :a8772 :a8772. +:a8773 :a8773 :a8773. +:a8774 :a8774 :a8774. +:a8775 :a8775 :a8775. +:a8776 :a8776 :a8776. +:a8777 :a8777 :a8777. +:a8778 :a8778 :a8778. +:a8779 :a8779 :a8779. +:a8780 :a8780 :a8780. +:a8781 :a8781 :a8781. +:a8782 :a8782 :a8782. +:a8783 :a8783 :a8783. +:a8784 :a8784 :a8784. +:a8785 :a8785 :a8785. +:a8786 :a8786 :a8786. +:a8787 :a8787 :a8787. +:a8788 :a8788 :a8788. +:a8789 :a8789 :a8789. +:a8790 :a8790 :a8790. +:a8791 :a8791 :a8791. +:a8792 :a8792 :a8792. +:a8793 :a8793 :a8793. +:a8794 :a8794 :a8794. +:a8795 :a8795 :a8795. +:a8796 :a8796 :a8796. +:a8797 :a8797 :a8797. +:a8798 :a8798 :a8798. +:a8799 :a8799 :a8799. +:a8800 :a8800 :a8800. +:a8801 :a8801 :a8801. +:a8802 :a8802 :a8802. +:a8803 :a8803 :a8803. +:a8804 :a8804 :a8804. +:a8805 :a8805 :a8805. +:a8806 :a8806 :a8806. +:a8807 :a8807 :a8807. +:a8808 :a8808 :a8808. +:a8809 :a8809 :a8809. +:a8810 :a8810 :a8810. +:a8811 :a8811 :a8811. +:a8812 :a8812 :a8812. +:a8813 :a8813 :a8813. +:a8814 :a8814 :a8814. +:a8815 :a8815 :a8815. +:a8816 :a8816 :a8816. +:a8817 :a8817 :a8817. +:a8818 :a8818 :a8818. +:a8819 :a8819 :a8819. +:a8820 :a8820 :a8820. +:a8821 :a8821 :a8821. +:a8822 :a8822 :a8822. +:a8823 :a8823 :a8823. +:a8824 :a8824 :a8824. +:a8825 :a8825 :a8825. +:a8826 :a8826 :a8826. +:a8827 :a8827 :a8827. +:a8828 :a8828 :a8828. +:a8829 :a8829 :a8829. +:a8830 :a8830 :a8830. +:a8831 :a8831 :a8831. +:a8832 :a8832 :a8832. +:a8833 :a8833 :a8833. +:a8834 :a8834 :a8834. +:a8835 :a8835 :a8835. +:a8836 :a8836 :a8836. +:a8837 :a8837 :a8837. +:a8838 :a8838 :a8838. +:a8839 :a8839 :a8839. +:a8840 :a8840 :a8840. +:a8841 :a8841 :a8841. +:a8842 :a8842 :a8842. +:a8843 :a8843 :a8843. +:a8844 :a8844 :a8844. +:a8845 :a8845 :a8845. +:a8846 :a8846 :a8846. +:a8847 :a8847 :a8847. +:a8848 :a8848 :a8848. +:a8849 :a8849 :a8849. +:a8850 :a8850 :a8850. +:a8851 :a8851 :a8851. +:a8852 :a8852 :a8852. +:a8853 :a8853 :a8853. +:a8854 :a8854 :a8854. +:a8855 :a8855 :a8855. +:a8856 :a8856 :a8856. +:a8857 :a8857 :a8857. +:a8858 :a8858 :a8858. +:a8859 :a8859 :a8859. +:a8860 :a8860 :a8860. +:a8861 :a8861 :a8861. +:a8862 :a8862 :a8862. +:a8863 :a8863 :a8863. +:a8864 :a8864 :a8864. +:a8865 :a8865 :a8865. +:a8866 :a8866 :a8866. +:a8867 :a8867 :a8867. +:a8868 :a8868 :a8868. +:a8869 :a8869 :a8869. +:a8870 :a8870 :a8870. +:a8871 :a8871 :a8871. +:a8872 :a8872 :a8872. +:a8873 :a8873 :a8873. +:a8874 :a8874 :a8874. +:a8875 :a8875 :a8875. +:a8876 :a8876 :a8876. +:a8877 :a8877 :a8877. +:a8878 :a8878 :a8878. +:a8879 :a8879 :a8879. +:a8880 :a8880 :a8880. +:a8881 :a8881 :a8881. +:a8882 :a8882 :a8882. +:a8883 :a8883 :a8883. +:a8884 :a8884 :a8884. +:a8885 :a8885 :a8885. +:a8886 :a8886 :a8886. +:a8887 :a8887 :a8887. +:a8888 :a8888 :a8888. +:a8889 :a8889 :a8889. +:a8890 :a8890 :a8890. +:a8891 :a8891 :a8891. +:a8892 :a8892 :a8892. +:a8893 :a8893 :a8893. +:a8894 :a8894 :a8894. +:a8895 :a8895 :a8895. +:a8896 :a8896 :a8896. +:a8897 :a8897 :a8897. +:a8898 :a8898 :a8898. +:a8899 :a8899 :a8899. +:a8900 :a8900 :a8900. +:a8901 :a8901 :a8901. +:a8902 :a8902 :a8902. +:a8903 :a8903 :a8903. +:a8904 :a8904 :a8904. +:a8905 :a8905 :a8905. +:a8906 :a8906 :a8906. +:a8907 :a8907 :a8907. +:a8908 :a8908 :a8908. +:a8909 :a8909 :a8909. +:a8910 :a8910 :a8910. +:a8911 :a8911 :a8911. +:a8912 :a8912 :a8912. +:a8913 :a8913 :a8913. +:a8914 :a8914 :a8914. +:a8915 :a8915 :a8915. +:a8916 :a8916 :a8916. +:a8917 :a8917 :a8917. +:a8918 :a8918 :a8918. +:a8919 :a8919 :a8919. +:a8920 :a8920 :a8920. +:a8921 :a8921 :a8921. +:a8922 :a8922 :a8922. +:a8923 :a8923 :a8923. +:a8924 :a8924 :a8924. +:a8925 :a8925 :a8925. +:a8926 :a8926 :a8926. +:a8927 :a8927 :a8927. +:a8928 :a8928 :a8928. +:a8929 :a8929 :a8929. +:a8930 :a8930 :a8930. +:a8931 :a8931 :a8931. +:a8932 :a8932 :a8932. +:a8933 :a8933 :a8933. +:a8934 :a8934 :a8934. +:a8935 :a8935 :a8935. +:a8936 :a8936 :a8936. +:a8937 :a8937 :a8937. +:a8938 :a8938 :a8938. +:a8939 :a8939 :a8939. +:a8940 :a8940 :a8940. +:a8941 :a8941 :a8941. +:a8942 :a8942 :a8942. +:a8943 :a8943 :a8943. +:a8944 :a8944 :a8944. +:a8945 :a8945 :a8945. +:a8946 :a8946 :a8946. +:a8947 :a8947 :a8947. +:a8948 :a8948 :a8948. +:a8949 :a8949 :a8949. +:a8950 :a8950 :a8950. +:a8951 :a8951 :a8951. +:a8952 :a8952 :a8952. +:a8953 :a8953 :a8953. +:a8954 :a8954 :a8954. +:a8955 :a8955 :a8955. +:a8956 :a8956 :a8956. +:a8957 :a8957 :a8957. +:a8958 :a8958 :a8958. +:a8959 :a8959 :a8959. +:a8960 :a8960 :a8960. +:a8961 :a8961 :a8961. +:a8962 :a8962 :a8962. +:a8963 :a8963 :a8963. +:a8964 :a8964 :a8964. +:a8965 :a8965 :a8965. +:a8966 :a8966 :a8966. +:a8967 :a8967 :a8967. +:a8968 :a8968 :a8968. +:a8969 :a8969 :a8969. +:a8970 :a8970 :a8970. +:a8971 :a8971 :a8971. +:a8972 :a8972 :a8972. +:a8973 :a8973 :a8973. +:a8974 :a8974 :a8974. +:a8975 :a8975 :a8975. +:a8976 :a8976 :a8976. +:a8977 :a8977 :a8977. +:a8978 :a8978 :a8978. +:a8979 :a8979 :a8979. +:a8980 :a8980 :a8980. +:a8981 :a8981 :a8981. +:a8982 :a8982 :a8982. +:a8983 :a8983 :a8983. +:a8984 :a8984 :a8984. +:a8985 :a8985 :a8985. +:a8986 :a8986 :a8986. +:a8987 :a8987 :a8987. +:a8988 :a8988 :a8988. +:a8989 :a8989 :a8989. +:a8990 :a8990 :a8990. +:a8991 :a8991 :a8991. +:a8992 :a8992 :a8992. +:a8993 :a8993 :a8993. +:a8994 :a8994 :a8994. +:a8995 :a8995 :a8995. +:a8996 :a8996 :a8996. +:a8997 :a8997 :a8997. +:a8998 :a8998 :a8998. +:a8999 :a8999 :a8999. +:a9000 :a9000 :a9000. +:a9001 :a9001 :a9001. +:a9002 :a9002 :a9002. +:a9003 :a9003 :a9003. +:a9004 :a9004 :a9004. +:a9005 :a9005 :a9005. +:a9006 :a9006 :a9006. +:a9007 :a9007 :a9007. +:a9008 :a9008 :a9008. +:a9009 :a9009 :a9009. +:a9010 :a9010 :a9010. +:a9011 :a9011 :a9011. +:a9012 :a9012 :a9012. +:a9013 :a9013 :a9013. +:a9014 :a9014 :a9014. +:a9015 :a9015 :a9015. +:a9016 :a9016 :a9016. +:a9017 :a9017 :a9017. +:a9018 :a9018 :a9018. +:a9019 :a9019 :a9019. +:a9020 :a9020 :a9020. +:a9021 :a9021 :a9021. +:a9022 :a9022 :a9022. +:a9023 :a9023 :a9023. +:a9024 :a9024 :a9024. +:a9025 :a9025 :a9025. +:a9026 :a9026 :a9026. +:a9027 :a9027 :a9027. +:a9028 :a9028 :a9028. +:a9029 :a9029 :a9029. +:a9030 :a9030 :a9030. +:a9031 :a9031 :a9031. +:a9032 :a9032 :a9032. +:a9033 :a9033 :a9033. +:a9034 :a9034 :a9034. +:a9035 :a9035 :a9035. +:a9036 :a9036 :a9036. +:a9037 :a9037 :a9037. +:a9038 :a9038 :a9038. +:a9039 :a9039 :a9039. +:a9040 :a9040 :a9040. +:a9041 :a9041 :a9041. +:a9042 :a9042 :a9042. +:a9043 :a9043 :a9043. +:a9044 :a9044 :a9044. +:a9045 :a9045 :a9045. +:a9046 :a9046 :a9046. +:a9047 :a9047 :a9047. +:a9048 :a9048 :a9048. +:a9049 :a9049 :a9049. +:a9050 :a9050 :a9050. +:a9051 :a9051 :a9051. +:a9052 :a9052 :a9052. +:a9053 :a9053 :a9053. +:a9054 :a9054 :a9054. +:a9055 :a9055 :a9055. +:a9056 :a9056 :a9056. +:a9057 :a9057 :a9057. +:a9058 :a9058 :a9058. +:a9059 :a9059 :a9059. +:a9060 :a9060 :a9060. +:a9061 :a9061 :a9061. +:a9062 :a9062 :a9062. +:a9063 :a9063 :a9063. +:a9064 :a9064 :a9064. +:a9065 :a9065 :a9065. +:a9066 :a9066 :a9066. +:a9067 :a9067 :a9067. +:a9068 :a9068 :a9068. +:a9069 :a9069 :a9069. +:a9070 :a9070 :a9070. +:a9071 :a9071 :a9071. +:a9072 :a9072 :a9072. +:a9073 :a9073 :a9073. +:a9074 :a9074 :a9074. +:a9075 :a9075 :a9075. +:a9076 :a9076 :a9076. +:a9077 :a9077 :a9077. +:a9078 :a9078 :a9078. +:a9079 :a9079 :a9079. +:a9080 :a9080 :a9080. +:a9081 :a9081 :a9081. +:a9082 :a9082 :a9082. +:a9083 :a9083 :a9083. +:a9084 :a9084 :a9084. +:a9085 :a9085 :a9085. +:a9086 :a9086 :a9086. +:a9087 :a9087 :a9087. +:a9088 :a9088 :a9088. +:a9089 :a9089 :a9089. +:a9090 :a9090 :a9090. +:a9091 :a9091 :a9091. +:a9092 :a9092 :a9092. +:a9093 :a9093 :a9093. +:a9094 :a9094 :a9094. +:a9095 :a9095 :a9095. +:a9096 :a9096 :a9096. +:a9097 :a9097 :a9097. +:a9098 :a9098 :a9098. +:a9099 :a9099 :a9099. +:a9100 :a9100 :a9100. +:a9101 :a9101 :a9101. +:a9102 :a9102 :a9102. +:a9103 :a9103 :a9103. +:a9104 :a9104 :a9104. +:a9105 :a9105 :a9105. +:a9106 :a9106 :a9106. +:a9107 :a9107 :a9107. +:a9108 :a9108 :a9108. +:a9109 :a9109 :a9109. +:a9110 :a9110 :a9110. +:a9111 :a9111 :a9111. +:a9112 :a9112 :a9112. +:a9113 :a9113 :a9113. +:a9114 :a9114 :a9114. +:a9115 :a9115 :a9115. +:a9116 :a9116 :a9116. +:a9117 :a9117 :a9117. +:a9118 :a9118 :a9118. +:a9119 :a9119 :a9119. +:a9120 :a9120 :a9120. +:a9121 :a9121 :a9121. +:a9122 :a9122 :a9122. +:a9123 :a9123 :a9123. +:a9124 :a9124 :a9124. +:a9125 :a9125 :a9125. +:a9126 :a9126 :a9126. +:a9127 :a9127 :a9127. +:a9128 :a9128 :a9128. +:a9129 :a9129 :a9129. +:a9130 :a9130 :a9130. +:a9131 :a9131 :a9131. +:a9132 :a9132 :a9132. +:a9133 :a9133 :a9133. +:a9134 :a9134 :a9134. +:a9135 :a9135 :a9135. +:a9136 :a9136 :a9136. +:a9137 :a9137 :a9137. +:a9138 :a9138 :a9138. +:a9139 :a9139 :a9139. +:a9140 :a9140 :a9140. +:a9141 :a9141 :a9141. +:a9142 :a9142 :a9142. +:a9143 :a9143 :a9143. +:a9144 :a9144 :a9144. +:a9145 :a9145 :a9145. +:a9146 :a9146 :a9146. +:a9147 :a9147 :a9147. +:a9148 :a9148 :a9148. +:a9149 :a9149 :a9149. +:a9150 :a9150 :a9150. +:a9151 :a9151 :a9151. +:a9152 :a9152 :a9152. +:a9153 :a9153 :a9153. +:a9154 :a9154 :a9154. +:a9155 :a9155 :a9155. +:a9156 :a9156 :a9156. +:a9157 :a9157 :a9157. +:a9158 :a9158 :a9158. +:a9159 :a9159 :a9159. +:a9160 :a9160 :a9160. +:a9161 :a9161 :a9161. +:a9162 :a9162 :a9162. +:a9163 :a9163 :a9163. +:a9164 :a9164 :a9164. +:a9165 :a9165 :a9165. +:a9166 :a9166 :a9166. +:a9167 :a9167 :a9167. +:a9168 :a9168 :a9168. +:a9169 :a9169 :a9169. +:a9170 :a9170 :a9170. +:a9171 :a9171 :a9171. +:a9172 :a9172 :a9172. +:a9173 :a9173 :a9173. +:a9174 :a9174 :a9174. +:a9175 :a9175 :a9175. +:a9176 :a9176 :a9176. +:a9177 :a9177 :a9177. +:a9178 :a9178 :a9178. +:a9179 :a9179 :a9179. +:a9180 :a9180 :a9180. +:a9181 :a9181 :a9181. +:a9182 :a9182 :a9182. +:a9183 :a9183 :a9183. +:a9184 :a9184 :a9184. +:a9185 :a9185 :a9185. +:a9186 :a9186 :a9186. +:a9187 :a9187 :a9187. +:a9188 :a9188 :a9188. +:a9189 :a9189 :a9189. +:a9190 :a9190 :a9190. +:a9191 :a9191 :a9191. +:a9192 :a9192 :a9192. +:a9193 :a9193 :a9193. +:a9194 :a9194 :a9194. +:a9195 :a9195 :a9195. +:a9196 :a9196 :a9196. +:a9197 :a9197 :a9197. +:a9198 :a9198 :a9198. +:a9199 :a9199 :a9199. +:a9200 :a9200 :a9200. +:a9201 :a9201 :a9201. +:a9202 :a9202 :a9202. +:a9203 :a9203 :a9203. +:a9204 :a9204 :a9204. +:a9205 :a9205 :a9205. +:a9206 :a9206 :a9206. +:a9207 :a9207 :a9207. +:a9208 :a9208 :a9208. +:a9209 :a9209 :a9209. +:a9210 :a9210 :a9210. +:a9211 :a9211 :a9211. +:a9212 :a9212 :a9212. +:a9213 :a9213 :a9213. +:a9214 :a9214 :a9214. +:a9215 :a9215 :a9215. +:a9216 :a9216 :a9216. +:a9217 :a9217 :a9217. +:a9218 :a9218 :a9218. +:a9219 :a9219 :a9219. +:a9220 :a9220 :a9220. +:a9221 :a9221 :a9221. +:a9222 :a9222 :a9222. +:a9223 :a9223 :a9223. +:a9224 :a9224 :a9224. +:a9225 :a9225 :a9225. +:a9226 :a9226 :a9226. +:a9227 :a9227 :a9227. +:a9228 :a9228 :a9228. +:a9229 :a9229 :a9229. +:a9230 :a9230 :a9230. +:a9231 :a9231 :a9231. +:a9232 :a9232 :a9232. +:a9233 :a9233 :a9233. +:a9234 :a9234 :a9234. +:a9235 :a9235 :a9235. +:a9236 :a9236 :a9236. +:a9237 :a9237 :a9237. +:a9238 :a9238 :a9238. +:a9239 :a9239 :a9239. +:a9240 :a9240 :a9240. +:a9241 :a9241 :a9241. +:a9242 :a9242 :a9242. +:a9243 :a9243 :a9243. +:a9244 :a9244 :a9244. +:a9245 :a9245 :a9245. +:a9246 :a9246 :a9246. +:a9247 :a9247 :a9247. +:a9248 :a9248 :a9248. +:a9249 :a9249 :a9249. +:a9250 :a9250 :a9250. +:a9251 :a9251 :a9251. +:a9252 :a9252 :a9252. +:a9253 :a9253 :a9253. +:a9254 :a9254 :a9254. +:a9255 :a9255 :a9255. +:a9256 :a9256 :a9256. +:a9257 :a9257 :a9257. +:a9258 :a9258 :a9258. +:a9259 :a9259 :a9259. +:a9260 :a9260 :a9260. +:a9261 :a9261 :a9261. +:a9262 :a9262 :a9262. +:a9263 :a9263 :a9263. +:a9264 :a9264 :a9264. +:a9265 :a9265 :a9265. +:a9266 :a9266 :a9266. +:a9267 :a9267 :a9267. +:a9268 :a9268 :a9268. +:a9269 :a9269 :a9269. +:a9270 :a9270 :a9270. +:a9271 :a9271 :a9271. +:a9272 :a9272 :a9272. +:a9273 :a9273 :a9273. +:a9274 :a9274 :a9274. +:a9275 :a9275 :a9275. +:a9276 :a9276 :a9276. +:a9277 :a9277 :a9277. +:a9278 :a9278 :a9278. +:a9279 :a9279 :a9279. +:a9280 :a9280 :a9280. +:a9281 :a9281 :a9281. +:a9282 :a9282 :a9282. +:a9283 :a9283 :a9283. +:a9284 :a9284 :a9284. +:a9285 :a9285 :a9285. +:a9286 :a9286 :a9286. +:a9287 :a9287 :a9287. +:a9288 :a9288 :a9288. +:a9289 :a9289 :a9289. +:a9290 :a9290 :a9290. +:a9291 :a9291 :a9291. +:a9292 :a9292 :a9292. +:a9293 :a9293 :a9293. +:a9294 :a9294 :a9294. +:a9295 :a9295 :a9295. +:a9296 :a9296 :a9296. +:a9297 :a9297 :a9297. +:a9298 :a9298 :a9298. +:a9299 :a9299 :a9299. +:a9300 :a9300 :a9300. +:a9301 :a9301 :a9301. +:a9302 :a9302 :a9302. +:a9303 :a9303 :a9303. +:a9304 :a9304 :a9304. +:a9305 :a9305 :a9305. +:a9306 :a9306 :a9306. +:a9307 :a9307 :a9307. +:a9308 :a9308 :a9308. +:a9309 :a9309 :a9309. +:a9310 :a9310 :a9310. +:a9311 :a9311 :a9311. +:a9312 :a9312 :a9312. +:a9313 :a9313 :a9313. +:a9314 :a9314 :a9314. +:a9315 :a9315 :a9315. +:a9316 :a9316 :a9316. +:a9317 :a9317 :a9317. +:a9318 :a9318 :a9318. +:a9319 :a9319 :a9319. +:a9320 :a9320 :a9320. +:a9321 :a9321 :a9321. +:a9322 :a9322 :a9322. +:a9323 :a9323 :a9323. +:a9324 :a9324 :a9324. +:a9325 :a9325 :a9325. +:a9326 :a9326 :a9326. +:a9327 :a9327 :a9327. +:a9328 :a9328 :a9328. +:a9329 :a9329 :a9329. +:a9330 :a9330 :a9330. +:a9331 :a9331 :a9331. +:a9332 :a9332 :a9332. +:a9333 :a9333 :a9333. +:a9334 :a9334 :a9334. +:a9335 :a9335 :a9335. +:a9336 :a9336 :a9336. +:a9337 :a9337 :a9337. +:a9338 :a9338 :a9338. +:a9339 :a9339 :a9339. +:a9340 :a9340 :a9340. +:a9341 :a9341 :a9341. +:a9342 :a9342 :a9342. +:a9343 :a9343 :a9343. +:a9344 :a9344 :a9344. +:a9345 :a9345 :a9345. +:a9346 :a9346 :a9346. +:a9347 :a9347 :a9347. +:a9348 :a9348 :a9348. +:a9349 :a9349 :a9349. +:a9350 :a9350 :a9350. +:a9351 :a9351 :a9351. +:a9352 :a9352 :a9352. +:a9353 :a9353 :a9353. +:a9354 :a9354 :a9354. +:a9355 :a9355 :a9355. +:a9356 :a9356 :a9356. +:a9357 :a9357 :a9357. +:a9358 :a9358 :a9358. +:a9359 :a9359 :a9359. +:a9360 :a9360 :a9360. +:a9361 :a9361 :a9361. +:a9362 :a9362 :a9362. +:a9363 :a9363 :a9363. +:a9364 :a9364 :a9364. +:a9365 :a9365 :a9365. +:a9366 :a9366 :a9366. +:a9367 :a9367 :a9367. +:a9368 :a9368 :a9368. +:a9369 :a9369 :a9369. +:a9370 :a9370 :a9370. +:a9371 :a9371 :a9371. +:a9372 :a9372 :a9372. +:a9373 :a9373 :a9373. +:a9374 :a9374 :a9374. +:a9375 :a9375 :a9375. +:a9376 :a9376 :a9376. +:a9377 :a9377 :a9377. +:a9378 :a9378 :a9378. +:a9379 :a9379 :a9379. +:a9380 :a9380 :a9380. +:a9381 :a9381 :a9381. +:a9382 :a9382 :a9382. +:a9383 :a9383 :a9383. +:a9384 :a9384 :a9384. +:a9385 :a9385 :a9385. +:a9386 :a9386 :a9386. +:a9387 :a9387 :a9387. +:a9388 :a9388 :a9388. +:a9389 :a9389 :a9389. +:a9390 :a9390 :a9390. +:a9391 :a9391 :a9391. +:a9392 :a9392 :a9392. +:a9393 :a9393 :a9393. +:a9394 :a9394 :a9394. +:a9395 :a9395 :a9395. +:a9396 :a9396 :a9396. +:a9397 :a9397 :a9397. +:a9398 :a9398 :a9398. +:a9399 :a9399 :a9399. +:a9400 :a9400 :a9400. +:a9401 :a9401 :a9401. +:a9402 :a9402 :a9402. +:a9403 :a9403 :a9403. +:a9404 :a9404 :a9404. +:a9405 :a9405 :a9405. +:a9406 :a9406 :a9406. +:a9407 :a9407 :a9407. +:a9408 :a9408 :a9408. +:a9409 :a9409 :a9409. +:a9410 :a9410 :a9410. +:a9411 :a9411 :a9411. +:a9412 :a9412 :a9412. +:a9413 :a9413 :a9413. +:a9414 :a9414 :a9414. +:a9415 :a9415 :a9415. +:a9416 :a9416 :a9416. +:a9417 :a9417 :a9417. +:a9418 :a9418 :a9418. +:a9419 :a9419 :a9419. +:a9420 :a9420 :a9420. +:a9421 :a9421 :a9421. +:a9422 :a9422 :a9422. +:a9423 :a9423 :a9423. +:a9424 :a9424 :a9424. +:a9425 :a9425 :a9425. +:a9426 :a9426 :a9426. +:a9427 :a9427 :a9427. +:a9428 :a9428 :a9428. +:a9429 :a9429 :a9429. +:a9430 :a9430 :a9430. +:a9431 :a9431 :a9431. +:a9432 :a9432 :a9432. +:a9433 :a9433 :a9433. +:a9434 :a9434 :a9434. +:a9435 :a9435 :a9435. +:a9436 :a9436 :a9436. +:a9437 :a9437 :a9437. +:a9438 :a9438 :a9438. +:a9439 :a9439 :a9439. +:a9440 :a9440 :a9440. +:a9441 :a9441 :a9441. +:a9442 :a9442 :a9442. +:a9443 :a9443 :a9443. +:a9444 :a9444 :a9444. +:a9445 :a9445 :a9445. +:a9446 :a9446 :a9446. +:a9447 :a9447 :a9447. +:a9448 :a9448 :a9448. +:a9449 :a9449 :a9449. +:a9450 :a9450 :a9450. +:a9451 :a9451 :a9451. +:a9452 :a9452 :a9452. +:a9453 :a9453 :a9453. +:a9454 :a9454 :a9454. +:a9455 :a9455 :a9455. +:a9456 :a9456 :a9456. +:a9457 :a9457 :a9457. +:a9458 :a9458 :a9458. +:a9459 :a9459 :a9459. +:a9460 :a9460 :a9460. +:a9461 :a9461 :a9461. +:a9462 :a9462 :a9462. +:a9463 :a9463 :a9463. +:a9464 :a9464 :a9464. +:a9465 :a9465 :a9465. +:a9466 :a9466 :a9466. +:a9467 :a9467 :a9467. +:a9468 :a9468 :a9468. +:a9469 :a9469 :a9469. +:a9470 :a9470 :a9470. +:a9471 :a9471 :a9471. +:a9472 :a9472 :a9472. +:a9473 :a9473 :a9473. +:a9474 :a9474 :a9474. +:a9475 :a9475 :a9475. +:a9476 :a9476 :a9476. +:a9477 :a9477 :a9477. +:a9478 :a9478 :a9478. +:a9479 :a9479 :a9479. +:a9480 :a9480 :a9480. +:a9481 :a9481 :a9481. +:a9482 :a9482 :a9482. +:a9483 :a9483 :a9483. +:a9484 :a9484 :a9484. +:a9485 :a9485 :a9485. +:a9486 :a9486 :a9486. +:a9487 :a9487 :a9487. +:a9488 :a9488 :a9488. +:a9489 :a9489 :a9489. +:a9490 :a9490 :a9490. +:a9491 :a9491 :a9491. +:a9492 :a9492 :a9492. +:a9493 :a9493 :a9493. +:a9494 :a9494 :a9494. +:a9495 :a9495 :a9495. +:a9496 :a9496 :a9496. +:a9497 :a9497 :a9497. +:a9498 :a9498 :a9498. +:a9499 :a9499 :a9499. +:a9500 :a9500 :a9500. +:a9501 :a9501 :a9501. +:a9502 :a9502 :a9502. +:a9503 :a9503 :a9503. +:a9504 :a9504 :a9504. +:a9505 :a9505 :a9505. +:a9506 :a9506 :a9506. +:a9507 :a9507 :a9507. +:a9508 :a9508 :a9508. +:a9509 :a9509 :a9509. +:a9510 :a9510 :a9510. +:a9511 :a9511 :a9511. +:a9512 :a9512 :a9512. +:a9513 :a9513 :a9513. +:a9514 :a9514 :a9514. +:a9515 :a9515 :a9515. +:a9516 :a9516 :a9516. +:a9517 :a9517 :a9517. +:a9518 :a9518 :a9518. +:a9519 :a9519 :a9519. +:a9520 :a9520 :a9520. +:a9521 :a9521 :a9521. +:a9522 :a9522 :a9522. +:a9523 :a9523 :a9523. +:a9524 :a9524 :a9524. +:a9525 :a9525 :a9525. +:a9526 :a9526 :a9526. +:a9527 :a9527 :a9527. +:a9528 :a9528 :a9528. +:a9529 :a9529 :a9529. +:a9530 :a9530 :a9530. +:a9531 :a9531 :a9531. +:a9532 :a9532 :a9532. +:a9533 :a9533 :a9533. +:a9534 :a9534 :a9534. +:a9535 :a9535 :a9535. +:a9536 :a9536 :a9536. +:a9537 :a9537 :a9537. +:a9538 :a9538 :a9538. +:a9539 :a9539 :a9539. +:a9540 :a9540 :a9540. +:a9541 :a9541 :a9541. +:a9542 :a9542 :a9542. +:a9543 :a9543 :a9543. +:a9544 :a9544 :a9544. +:a9545 :a9545 :a9545. +:a9546 :a9546 :a9546. +:a9547 :a9547 :a9547. +:a9548 :a9548 :a9548. +:a9549 :a9549 :a9549. +:a9550 :a9550 :a9550. +:a9551 :a9551 :a9551. +:a9552 :a9552 :a9552. +:a9553 :a9553 :a9553. +:a9554 :a9554 :a9554. +:a9555 :a9555 :a9555. +:a9556 :a9556 :a9556. +:a9557 :a9557 :a9557. +:a9558 :a9558 :a9558. +:a9559 :a9559 :a9559. +:a9560 :a9560 :a9560. +:a9561 :a9561 :a9561. +:a9562 :a9562 :a9562. +:a9563 :a9563 :a9563. +:a9564 :a9564 :a9564. +:a9565 :a9565 :a9565. +:a9566 :a9566 :a9566. +:a9567 :a9567 :a9567. +:a9568 :a9568 :a9568. +:a9569 :a9569 :a9569. +:a9570 :a9570 :a9570. +:a9571 :a9571 :a9571. +:a9572 :a9572 :a9572. +:a9573 :a9573 :a9573. +:a9574 :a9574 :a9574. +:a9575 :a9575 :a9575. +:a9576 :a9576 :a9576. +:a9577 :a9577 :a9577. +:a9578 :a9578 :a9578. +:a9579 :a9579 :a9579. +:a9580 :a9580 :a9580. +:a9581 :a9581 :a9581. +:a9582 :a9582 :a9582. +:a9583 :a9583 :a9583. +:a9584 :a9584 :a9584. +:a9585 :a9585 :a9585. +:a9586 :a9586 :a9586. +:a9587 :a9587 :a9587. +:a9588 :a9588 :a9588. +:a9589 :a9589 :a9589. +:a9590 :a9590 :a9590. +:a9591 :a9591 :a9591. +:a9592 :a9592 :a9592. +:a9593 :a9593 :a9593. +:a9594 :a9594 :a9594. +:a9595 :a9595 :a9595. +:a9596 :a9596 :a9596. +:a9597 :a9597 :a9597. +:a9598 :a9598 :a9598. +:a9599 :a9599 :a9599. +:a9600 :a9600 :a9600. +:a9601 :a9601 :a9601. +:a9602 :a9602 :a9602. +:a9603 :a9603 :a9603. +:a9604 :a9604 :a9604. +:a9605 :a9605 :a9605. +:a9606 :a9606 :a9606. +:a9607 :a9607 :a9607. +:a9608 :a9608 :a9608. +:a9609 :a9609 :a9609. +:a9610 :a9610 :a9610. +:a9611 :a9611 :a9611. +:a9612 :a9612 :a9612. +:a9613 :a9613 :a9613. +:a9614 :a9614 :a9614. +:a9615 :a9615 :a9615. +:a9616 :a9616 :a9616. +:a9617 :a9617 :a9617. +:a9618 :a9618 :a9618. +:a9619 :a9619 :a9619. +:a9620 :a9620 :a9620. +:a9621 :a9621 :a9621. +:a9622 :a9622 :a9622. +:a9623 :a9623 :a9623. +:a9624 :a9624 :a9624. +:a9625 :a9625 :a9625. +:a9626 :a9626 :a9626. +:a9627 :a9627 :a9627. +:a9628 :a9628 :a9628. +:a9629 :a9629 :a9629. +:a9630 :a9630 :a9630. +:a9631 :a9631 :a9631. +:a9632 :a9632 :a9632. +:a9633 :a9633 :a9633. +:a9634 :a9634 :a9634. +:a9635 :a9635 :a9635. +:a9636 :a9636 :a9636. +:a9637 :a9637 :a9637. +:a9638 :a9638 :a9638. +:a9639 :a9639 :a9639. +:a9640 :a9640 :a9640. +:a9641 :a9641 :a9641. +:a9642 :a9642 :a9642. +:a9643 :a9643 :a9643. +:a9644 :a9644 :a9644. +:a9645 :a9645 :a9645. +:a9646 :a9646 :a9646. +:a9647 :a9647 :a9647. +:a9648 :a9648 :a9648. +:a9649 :a9649 :a9649. +:a9650 :a9650 :a9650. +:a9651 :a9651 :a9651. +:a9652 :a9652 :a9652. +:a9653 :a9653 :a9653. +:a9654 :a9654 :a9654. +:a9655 :a9655 :a9655. +:a9656 :a9656 :a9656. +:a9657 :a9657 :a9657. +:a9658 :a9658 :a9658. +:a9659 :a9659 :a9659. +:a9660 :a9660 :a9660. +:a9661 :a9661 :a9661. +:a9662 :a9662 :a9662. +:a9663 :a9663 :a9663. +:a9664 :a9664 :a9664. +:a9665 :a9665 :a9665. +:a9666 :a9666 :a9666. +:a9667 :a9667 :a9667. +:a9668 :a9668 :a9668. +:a9669 :a9669 :a9669. +:a9670 :a9670 :a9670. +:a9671 :a9671 :a9671. +:a9672 :a9672 :a9672. +:a9673 :a9673 :a9673. +:a9674 :a9674 :a9674. +:a9675 :a9675 :a9675. +:a9676 :a9676 :a9676. +:a9677 :a9677 :a9677. +:a9678 :a9678 :a9678. +:a9679 :a9679 :a9679. +:a9680 :a9680 :a9680. +:a9681 :a9681 :a9681. +:a9682 :a9682 :a9682. +:a9683 :a9683 :a9683. +:a9684 :a9684 :a9684. +:a9685 :a9685 :a9685. +:a9686 :a9686 :a9686. +:a9687 :a9687 :a9687. +:a9688 :a9688 :a9688. +:a9689 :a9689 :a9689. +:a9690 :a9690 :a9690. +:a9691 :a9691 :a9691. +:a9692 :a9692 :a9692. +:a9693 :a9693 :a9693. +:a9694 :a9694 :a9694. +:a9695 :a9695 :a9695. +:a9696 :a9696 :a9696. +:a9697 :a9697 :a9697. +:a9698 :a9698 :a9698. +:a9699 :a9699 :a9699. +:a9700 :a9700 :a9700. +:a9701 :a9701 :a9701. +:a9702 :a9702 :a9702. +:a9703 :a9703 :a9703. +:a9704 :a9704 :a9704. +:a9705 :a9705 :a9705. +:a9706 :a9706 :a9706. +:a9707 :a9707 :a9707. +:a9708 :a9708 :a9708. +:a9709 :a9709 :a9709. +:a9710 :a9710 :a9710. +:a9711 :a9711 :a9711. +:a9712 :a9712 :a9712. +:a9713 :a9713 :a9713. +:a9714 :a9714 :a9714. +:a9715 :a9715 :a9715. +:a9716 :a9716 :a9716. +:a9717 :a9717 :a9717. +:a9718 :a9718 :a9718. +:a9719 :a9719 :a9719. +:a9720 :a9720 :a9720. +:a9721 :a9721 :a9721. +:a9722 :a9722 :a9722. +:a9723 :a9723 :a9723. +:a9724 :a9724 :a9724. +:a9725 :a9725 :a9725. +:a9726 :a9726 :a9726. +:a9727 :a9727 :a9727. +:a9728 :a9728 :a9728. +:a9729 :a9729 :a9729. +:a9730 :a9730 :a9730. +:a9731 :a9731 :a9731. +:a9732 :a9732 :a9732. +:a9733 :a9733 :a9733. +:a9734 :a9734 :a9734. +:a9735 :a9735 :a9735. +:a9736 :a9736 :a9736. +:a9737 :a9737 :a9737. +:a9738 :a9738 :a9738. +:a9739 :a9739 :a9739. +:a9740 :a9740 :a9740. +:a9741 :a9741 :a9741. +:a9742 :a9742 :a9742. +:a9743 :a9743 :a9743. +:a9744 :a9744 :a9744. +:a9745 :a9745 :a9745. +:a9746 :a9746 :a9746. +:a9747 :a9747 :a9747. +:a9748 :a9748 :a9748. +:a9749 :a9749 :a9749. +:a9750 :a9750 :a9750. +:a9751 :a9751 :a9751. +:a9752 :a9752 :a9752. +:a9753 :a9753 :a9753. +:a9754 :a9754 :a9754. +:a9755 :a9755 :a9755. +:a9756 :a9756 :a9756. +:a9757 :a9757 :a9757. +:a9758 :a9758 :a9758. +:a9759 :a9759 :a9759. +:a9760 :a9760 :a9760. +:a9761 :a9761 :a9761. +:a9762 :a9762 :a9762. +:a9763 :a9763 :a9763. +:a9764 :a9764 :a9764. +:a9765 :a9765 :a9765. +:a9766 :a9766 :a9766. +:a9767 :a9767 :a9767. +:a9768 :a9768 :a9768. +:a9769 :a9769 :a9769. +:a9770 :a9770 :a9770. +:a9771 :a9771 :a9771. +:a9772 :a9772 :a9772. +:a9773 :a9773 :a9773. +:a9774 :a9774 :a9774. +:a9775 :a9775 :a9775. +:a9776 :a9776 :a9776. +:a9777 :a9777 :a9777. +:a9778 :a9778 :a9778. +:a9779 :a9779 :a9779. +:a9780 :a9780 :a9780. +:a9781 :a9781 :a9781. +:a9782 :a9782 :a9782. +:a9783 :a9783 :a9783. +:a9784 :a9784 :a9784. +:a9785 :a9785 :a9785. +:a9786 :a9786 :a9786. +:a9787 :a9787 :a9787. +:a9788 :a9788 :a9788. +:a9789 :a9789 :a9789. +:a9790 :a9790 :a9790. +:a9791 :a9791 :a9791. +:a9792 :a9792 :a9792. +:a9793 :a9793 :a9793. +:a9794 :a9794 :a9794. +:a9795 :a9795 :a9795. +:a9796 :a9796 :a9796. +:a9797 :a9797 :a9797. +:a9798 :a9798 :a9798. +:a9799 :a9799 :a9799. +:a9800 :a9800 :a9800. +:a9801 :a9801 :a9801. +:a9802 :a9802 :a9802. +:a9803 :a9803 :a9803. +:a9804 :a9804 :a9804. +:a9805 :a9805 :a9805. +:a9806 :a9806 :a9806. +:a9807 :a9807 :a9807. +:a9808 :a9808 :a9808. +:a9809 :a9809 :a9809. +:a9810 :a9810 :a9810. +:a9811 :a9811 :a9811. +:a9812 :a9812 :a9812. +:a9813 :a9813 :a9813. +:a9814 :a9814 :a9814. +:a9815 :a9815 :a9815. +:a9816 :a9816 :a9816. +:a9817 :a9817 :a9817. +:a9818 :a9818 :a9818. +:a9819 :a9819 :a9819. +:a9820 :a9820 :a9820. +:a9821 :a9821 :a9821. +:a9822 :a9822 :a9822. +:a9823 :a9823 :a9823. +:a9824 :a9824 :a9824. +:a9825 :a9825 :a9825. +:a9826 :a9826 :a9826. +:a9827 :a9827 :a9827. +:a9828 :a9828 :a9828. +:a9829 :a9829 :a9829. +:a9830 :a9830 :a9830. +:a9831 :a9831 :a9831. +:a9832 :a9832 :a9832. +:a9833 :a9833 :a9833. +:a9834 :a9834 :a9834. +:a9835 :a9835 :a9835. +:a9836 :a9836 :a9836. +:a9837 :a9837 :a9837. +:a9838 :a9838 :a9838. +:a9839 :a9839 :a9839. +:a9840 :a9840 :a9840. +:a9841 :a9841 :a9841. +:a9842 :a9842 :a9842. +:a9843 :a9843 :a9843. +:a9844 :a9844 :a9844. +:a9845 :a9845 :a9845. +:a9846 :a9846 :a9846. +:a9847 :a9847 :a9847. +:a9848 :a9848 :a9848. +:a9849 :a9849 :a9849. +:a9850 :a9850 :a9850. +:a9851 :a9851 :a9851. +:a9852 :a9852 :a9852. +:a9853 :a9853 :a9853. +:a9854 :a9854 :a9854. +:a9855 :a9855 :a9855. +:a9856 :a9856 :a9856. +:a9857 :a9857 :a9857. +:a9858 :a9858 :a9858. +:a9859 :a9859 :a9859. +:a9860 :a9860 :a9860. +:a9861 :a9861 :a9861. +:a9862 :a9862 :a9862. +:a9863 :a9863 :a9863. +:a9864 :a9864 :a9864. +:a9865 :a9865 :a9865. +:a9866 :a9866 :a9866. +:a9867 :a9867 :a9867. +:a9868 :a9868 :a9868. +:a9869 :a9869 :a9869. +:a9870 :a9870 :a9870. +:a9871 :a9871 :a9871. +:a9872 :a9872 :a9872. +:a9873 :a9873 :a9873. +:a9874 :a9874 :a9874. +:a9875 :a9875 :a9875. +:a9876 :a9876 :a9876. +:a9877 :a9877 :a9877. +:a9878 :a9878 :a9878. +:a9879 :a9879 :a9879. +:a9880 :a9880 :a9880. +:a9881 :a9881 :a9881. +:a9882 :a9882 :a9882. +:a9883 :a9883 :a9883. +:a9884 :a9884 :a9884. +:a9885 :a9885 :a9885. +:a9886 :a9886 :a9886. +:a9887 :a9887 :a9887. +:a9888 :a9888 :a9888. +:a9889 :a9889 :a9889. +:a9890 :a9890 :a9890. +:a9891 :a9891 :a9891. +:a9892 :a9892 :a9892. +:a9893 :a9893 :a9893. +:a9894 :a9894 :a9894. +:a9895 :a9895 :a9895. +:a9896 :a9896 :a9896. +:a9897 :a9897 :a9897. +:a9898 :a9898 :a9898. +:a9899 :a9899 :a9899. +:a9900 :a9900 :a9900. +:a9901 :a9901 :a9901. +:a9902 :a9902 :a9902. +:a9903 :a9903 :a9903. +:a9904 :a9904 :a9904. +:a9905 :a9905 :a9905. +:a9906 :a9906 :a9906. +:a9907 :a9907 :a9907. +:a9908 :a9908 :a9908. +:a9909 :a9909 :a9909. +:a9910 :a9910 :a9910. +:a9911 :a9911 :a9911. +:a9912 :a9912 :a9912. +:a9913 :a9913 :a9913. +:a9914 :a9914 :a9914. +:a9915 :a9915 :a9915. +:a9916 :a9916 :a9916. +:a9917 :a9917 :a9917. +:a9918 :a9918 :a9918. +:a9919 :a9919 :a9919. +:a9920 :a9920 :a9920. +:a9921 :a9921 :a9921. +:a9922 :a9922 :a9922. +:a9923 :a9923 :a9923. +:a9924 :a9924 :a9924. +:a9925 :a9925 :a9925. +:a9926 :a9926 :a9926. +:a9927 :a9927 :a9927. +:a9928 :a9928 :a9928. +:a9929 :a9929 :a9929. +:a9930 :a9930 :a9930. +:a9931 :a9931 :a9931. +:a9932 :a9932 :a9932. +:a9933 :a9933 :a9933. +:a9934 :a9934 :a9934. +:a9935 :a9935 :a9935. +:a9936 :a9936 :a9936. +:a9937 :a9937 :a9937. +:a9938 :a9938 :a9938. +:a9939 :a9939 :a9939. +:a9940 :a9940 :a9940. +:a9941 :a9941 :a9941. +:a9942 :a9942 :a9942. +:a9943 :a9943 :a9943. +:a9944 :a9944 :a9944. +:a9945 :a9945 :a9945. +:a9946 :a9946 :a9946. +:a9947 :a9947 :a9947. +:a9948 :a9948 :a9948. +:a9949 :a9949 :a9949. +:a9950 :a9950 :a9950. +:a9951 :a9951 :a9951. +:a9952 :a9952 :a9952. +:a9953 :a9953 :a9953. +:a9954 :a9954 :a9954. +:a9955 :a9955 :a9955. +:a9956 :a9956 :a9956. +:a9957 :a9957 :a9957. +:a9958 :a9958 :a9958. +:a9959 :a9959 :a9959. +:a9960 :a9960 :a9960. +:a9961 :a9961 :a9961. +:a9962 :a9962 :a9962. +:a9963 :a9963 :a9963. +:a9964 :a9964 :a9964. +:a9965 :a9965 :a9965. +:a9966 :a9966 :a9966. +:a9967 :a9967 :a9967. +:a9968 :a9968 :a9968. +:a9969 :a9969 :a9969. +:a9970 :a9970 :a9970. +:a9971 :a9971 :a9971. +:a9972 :a9972 :a9972. +:a9973 :a9973 :a9973. +:a9974 :a9974 :a9974. +:a9975 :a9975 :a9975. +:a9976 :a9976 :a9976. +:a9977 :a9977 :a9977. +:a9978 :a9978 :a9978. +:a9979 :a9979 :a9979. +:a9980 :a9980 :a9980. +:a9981 :a9981 :a9981. +:a9982 :a9982 :a9982. +:a9983 :a9983 :a9983. +:a9984 :a9984 :a9984. +:a9985 :a9985 :a9985. +:a9986 :a9986 :a9986. +:a9987 :a9987 :a9987. +:a9988 :a9988 :a9988. +:a9989 :a9989 :a9989. +:a9990 :a9990 :a9990. +:a9991 :a9991 :a9991. +:a9992 :a9992 :a9992. +:a9993 :a9993 :a9993. +:a9994 :a9994 :a9994. +:a9995 :a9995 :a9995. +:a9996 :a9996 :a9996. +:a9997 :a9997 :a9997. +:a9998 :a9998 :a9998. +:a9999 :a9999 :a9999. +:a10000 :a10000 :a10000. diff --git a/source/libs/lilv/serd-0.18.2/tests/test-15.out b/source/libs/lilv/serd-0.18.2/tests/test-15.out new file mode 100644 index 000000000..c0604b3b6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-15.out @@ -0,0 +1,10000 @@ + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-15.ttl b/source/libs/lilv/serd-0.18.2/tests/test-15.ttl new file mode 100644 index 000000000..10df17dfa --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-15.ttl @@ -0,0 +1,3 @@ +# 10000 triple objects (10000 triples) more than the default Bison stack size +@prefix : . +:a :b :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9, :c10, :c11, :c12, :c13, :c14, :c15, :c16, :c17, :c18, :c19, :c20, :c21, :c22, :c23, :c24, :c25, :c26, :c27, :c28, :c29, :c30, :c31, :c32, :c33, :c34, :c35, :c36, :c37, :c38, :c39, :c40, :c41, :c42, :c43, :c44, :c45, :c46, :c47, :c48, :c49, :c50, :c51, :c52, :c53, :c54, :c55, :c56, :c57, :c58, :c59, :c60, :c61, :c62, :c63, :c64, :c65, :c66, :c67, :c68, :c69, :c70, :c71, :c72, :c73, :c74, :c75, :c76, :c77, :c78, :c79, :c80, :c81, :c82, :c83, :c84, :c85, :c86, :c87, :c88, :c89, :c90, :c91, :c92, :c93, :c94, :c95, :c96, :c97, :c98, :c99, :c100, :c101, :c102, :c103, :c104, :c105, :c106, :c107, :c108, :c109, :c110, :c111, :c112, :c113, :c114, :c115, :c116, :c117, :c118, :c119, :c120, :c121, :c122, :c123, :c124, :c125, :c126, :c127, :c128, :c129, :c130, :c131, :c132, :c133, :c134, :c135, :c136, :c137, :c138, :c139, :c140, :c141, :c142, :c143, :c144, :c145, :c146, :c147, :c148, :c149, :c150, :c151, :c152, :c153, :c154, :c155, :c156, :c157, :c158, :c159, :c160, :c161, :c162, :c163, :c164, :c165, :c166, :c167, :c168, :c169, :c170, :c171, :c172, :c173, :c174, :c175, :c176, :c177, :c178, :c179, :c180, :c181, :c182, :c183, :c184, :c185, :c186, :c187, :c188, :c189, :c190, :c191, :c192, :c193, :c194, :c195, :c196, :c197, :c198, :c199, :c200, :c201, :c202, :c203, :c204, :c205, :c206, :c207, :c208, :c209, :c210, :c211, :c212, :c213, :c214, :c215, :c216, :c217, :c218, :c219, :c220, :c221, :c222, :c223, :c224, :c225, :c226, :c227, :c228, :c229, :c230, :c231, :c232, :c233, :c234, :c235, :c236, :c237, :c238, :c239, :c240, :c241, :c242, :c243, :c244, :c245, :c246, :c247, :c248, :c249, :c250, :c251, :c252, :c253, :c254, :c255, :c256, :c257, :c258, :c259, :c260, :c261, :c262, :c263, :c264, :c265, :c266, :c267, :c268, :c269, :c270, :c271, :c272, :c273, :c274, :c275, :c276, :c277, :c278, :c279, :c280, :c281, :c282, :c283, :c284, :c285, :c286, :c287, :c288, :c289, :c290, :c291, :c292, :c293, :c294, :c295, :c296, :c297, :c298, :c299, :c300, :c301, :c302, :c303, :c304, :c305, :c306, :c307, :c308, :c309, :c310, :c311, :c312, :c313, :c314, :c315, :c316, :c317, :c318, :c319, :c320, :c321, :c322, :c323, :c324, :c325, :c326, :c327, :c328, :c329, :c330, :c331, :c332, :c333, :c334, :c335, :c336, :c337, :c338, :c339, :c340, :c341, :c342, :c343, :c344, :c345, :c346, :c347, :c348, :c349, :c350, :c351, :c352, :c353, :c354, :c355, :c356, :c357, :c358, :c359, :c360, :c361, :c362, :c363, :c364, :c365, :c366, :c367, :c368, :c369, :c370, :c371, :c372, :c373, :c374, :c375, :c376, :c377, :c378, :c379, :c380, :c381, :c382, :c383, :c384, :c385, :c386, :c387, :c388, :c389, :c390, :c391, :c392, :c393, :c394, :c395, :c396, :c397, :c398, :c399, :c400, :c401, :c402, :c403, :c404, :c405, :c406, :c407, :c408, :c409, :c410, :c411, :c412, :c413, :c414, :c415, :c416, :c417, :c418, :c419, :c420, :c421, :c422, :c423, :c424, :c425, :c426, :c427, :c428, :c429, :c430, :c431, :c432, :c433, :c434, :c435, :c436, :c437, :c438, :c439, :c440, :c441, :c442, :c443, :c444, :c445, :c446, :c447, :c448, :c449, :c450, :c451, :c452, :c453, :c454, :c455, :c456, :c457, :c458, :c459, :c460, :c461, :c462, :c463, :c464, :c465, :c466, :c467, :c468, :c469, :c470, :c471, :c472, :c473, :c474, :c475, :c476, :c477, :c478, :c479, :c480, :c481, :c482, :c483, :c484, :c485, :c486, :c487, :c488, :c489, :c490, :c491, :c492, :c493, :c494, :c495, :c496, :c497, :c498, :c499, :c500, :c501, :c502, :c503, :c504, :c505, :c506, :c507, :c508, :c509, :c510, :c511, :c512, :c513, :c514, :c515, :c516, :c517, :c518, :c519, :c520, :c521, :c522, :c523, :c524, :c525, :c526, :c527, :c528, :c529, :c530, :c531, :c532, :c533, :c534, :c535, :c536, :c537, :c538, :c539, :c540, :c541, :c542, :c543, :c544, :c545, :c546, :c547, :c548, :c549, :c550, :c551, :c552, :c553, :c554, :c555, :c556, :c557, :c558, :c559, :c560, :c561, :c562, :c563, :c564, :c565, :c566, :c567, :c568, :c569, :c570, :c571, :c572, :c573, :c574, :c575, :c576, :c577, :c578, :c579, :c580, :c581, :c582, :c583, :c584, :c585, :c586, :c587, :c588, :c589, :c590, :c591, :c592, :c593, :c594, :c595, :c596, :c597, :c598, :c599, :c600, :c601, :c602, :c603, :c604, :c605, :c606, :c607, :c608, :c609, :c610, :c611, :c612, :c613, :c614, :c615, :c616, :c617, :c618, :c619, :c620, :c621, :c622, :c623, :c624, :c625, :c626, :c627, :c628, :c629, :c630, :c631, :c632, :c633, :c634, :c635, :c636, :c637, :c638, :c639, :c640, :c641, :c642, :c643, :c644, :c645, :c646, :c647, :c648, :c649, :c650, :c651, :c652, :c653, :c654, :c655, :c656, :c657, :c658, :c659, :c660, :c661, :c662, :c663, :c664, :c665, :c666, :c667, :c668, :c669, :c670, :c671, :c672, :c673, :c674, :c675, :c676, :c677, :c678, :c679, :c680, :c681, :c682, :c683, :c684, :c685, :c686, :c687, :c688, :c689, :c690, :c691, :c692, :c693, :c694, :c695, :c696, :c697, :c698, :c699, :c700, :c701, :c702, :c703, :c704, :c705, :c706, :c707, :c708, :c709, :c710, :c711, :c712, :c713, :c714, :c715, :c716, :c717, :c718, :c719, :c720, :c721, :c722, :c723, :c724, :c725, :c726, :c727, :c728, :c729, :c730, :c731, :c732, :c733, :c734, :c735, :c736, :c737, :c738, :c739, :c740, :c741, :c742, :c743, :c744, :c745, :c746, :c747, :c748, :c749, :c750, :c751, :c752, :c753, :c754, :c755, :c756, :c757, :c758, :c759, :c760, :c761, :c762, :c763, :c764, :c765, :c766, :c767, :c768, :c769, :c770, :c771, :c772, :c773, :c774, :c775, :c776, :c777, :c778, :c779, :c780, :c781, :c782, :c783, :c784, :c785, :c786, :c787, :c788, :c789, :c790, :c791, :c792, :c793, :c794, :c795, :c796, :c797, :c798, :c799, :c800, :c801, :c802, :c803, :c804, :c805, :c806, :c807, :c808, :c809, :c810, :c811, :c812, :c813, :c814, :c815, :c816, :c817, :c818, :c819, :c820, :c821, :c822, :c823, :c824, :c825, :c826, :c827, :c828, :c829, :c830, :c831, :c832, :c833, :c834, :c835, :c836, :c837, :c838, :c839, :c840, :c841, :c842, :c843, :c844, :c845, :c846, :c847, :c848, :c849, :c850, :c851, :c852, :c853, :c854, :c855, :c856, :c857, :c858, :c859, :c860, :c861, :c862, :c863, :c864, :c865, :c866, :c867, :c868, :c869, :c870, :c871, :c872, :c873, :c874, :c875, :c876, :c877, :c878, :c879, :c880, :c881, :c882, :c883, :c884, :c885, :c886, :c887, :c888, :c889, :c890, :c891, :c892, :c893, :c894, :c895, :c896, :c897, :c898, :c899, :c900, :c901, :c902, :c903, :c904, :c905, :c906, :c907, :c908, :c909, :c910, :c911, :c912, :c913, :c914, :c915, :c916, :c917, :c918, :c919, :c920, :c921, :c922, :c923, :c924, :c925, :c926, :c927, :c928, :c929, :c930, :c931, :c932, :c933, :c934, :c935, :c936, :c937, :c938, :c939, :c940, :c941, :c942, :c943, :c944, :c945, :c946, :c947, :c948, :c949, :c950, :c951, :c952, :c953, :c954, :c955, :c956, :c957, :c958, :c959, :c960, :c961, :c962, :c963, :c964, :c965, :c966, :c967, :c968, :c969, :c970, :c971, :c972, :c973, :c974, :c975, :c976, :c977, :c978, :c979, :c980, :c981, :c982, :c983, :c984, :c985, :c986, :c987, :c988, :c989, :c990, :c991, :c992, :c993, :c994, :c995, :c996, :c997, :c998, :c999, :c1000, :c1001, :c1002, :c1003, :c1004, :c1005, :c1006, :c1007, :c1008, :c1009, :c1010, :c1011, :c1012, :c1013, :c1014, :c1015, :c1016, :c1017, :c1018, :c1019, :c1020, :c1021, :c1022, :c1023, :c1024, :c1025, :c1026, :c1027, :c1028, :c1029, :c1030, :c1031, :c1032, :c1033, :c1034, :c1035, :c1036, :c1037, :c1038, :c1039, :c1040, :c1041, :c1042, :c1043, :c1044, :c1045, :c1046, :c1047, :c1048, :c1049, :c1050, :c1051, :c1052, :c1053, :c1054, :c1055, :c1056, :c1057, :c1058, :c1059, :c1060, :c1061, :c1062, :c1063, :c1064, :c1065, :c1066, :c1067, :c1068, :c1069, :c1070, :c1071, :c1072, :c1073, :c1074, :c1075, :c1076, :c1077, :c1078, :c1079, :c1080, :c1081, :c1082, :c1083, :c1084, :c1085, :c1086, :c1087, :c1088, :c1089, :c1090, :c1091, :c1092, :c1093, :c1094, :c1095, :c1096, :c1097, :c1098, :c1099, :c1100, :c1101, :c1102, :c1103, :c1104, :c1105, :c1106, :c1107, :c1108, :c1109, :c1110, :c1111, :c1112, :c1113, :c1114, :c1115, :c1116, :c1117, :c1118, :c1119, :c1120, :c1121, :c1122, :c1123, :c1124, :c1125, :c1126, :c1127, :c1128, :c1129, :c1130, :c1131, :c1132, :c1133, :c1134, :c1135, :c1136, :c1137, :c1138, :c1139, :c1140, :c1141, :c1142, :c1143, :c1144, :c1145, :c1146, :c1147, :c1148, :c1149, :c1150, :c1151, :c1152, :c1153, :c1154, :c1155, :c1156, :c1157, :c1158, :c1159, :c1160, :c1161, :c1162, :c1163, :c1164, :c1165, :c1166, :c1167, :c1168, :c1169, :c1170, :c1171, :c1172, :c1173, :c1174, :c1175, :c1176, :c1177, :c1178, :c1179, :c1180, :c1181, :c1182, :c1183, :c1184, :c1185, :c1186, :c1187, :c1188, :c1189, :c1190, :c1191, :c1192, :c1193, :c1194, :c1195, :c1196, :c1197, :c1198, :c1199, :c1200, :c1201, :c1202, :c1203, :c1204, :c1205, :c1206, :c1207, :c1208, :c1209, :c1210, :c1211, :c1212, :c1213, :c1214, :c1215, :c1216, :c1217, :c1218, :c1219, :c1220, :c1221, :c1222, :c1223, :c1224, :c1225, :c1226, :c1227, :c1228, :c1229, :c1230, :c1231, :c1232, :c1233, :c1234, :c1235, :c1236, :c1237, :c1238, :c1239, :c1240, :c1241, :c1242, :c1243, :c1244, :c1245, :c1246, :c1247, :c1248, :c1249, :c1250, :c1251, :c1252, :c1253, :c1254, :c1255, :c1256, :c1257, :c1258, :c1259, :c1260, :c1261, :c1262, :c1263, :c1264, :c1265, :c1266, :c1267, :c1268, :c1269, :c1270, :c1271, :c1272, :c1273, :c1274, :c1275, :c1276, :c1277, :c1278, :c1279, :c1280, :c1281, :c1282, :c1283, :c1284, :c1285, :c1286, :c1287, :c1288, :c1289, :c1290, :c1291, :c1292, :c1293, :c1294, :c1295, :c1296, :c1297, :c1298, :c1299, :c1300, :c1301, :c1302, :c1303, :c1304, :c1305, :c1306, :c1307, :c1308, :c1309, :c1310, :c1311, :c1312, :c1313, :c1314, :c1315, :c1316, :c1317, :c1318, :c1319, :c1320, :c1321, :c1322, :c1323, :c1324, :c1325, :c1326, :c1327, :c1328, :c1329, :c1330, :c1331, :c1332, :c1333, :c1334, :c1335, :c1336, :c1337, :c1338, :c1339, :c1340, :c1341, :c1342, :c1343, :c1344, :c1345, :c1346, :c1347, :c1348, :c1349, :c1350, :c1351, :c1352, :c1353, :c1354, :c1355, :c1356, :c1357, :c1358, :c1359, :c1360, :c1361, :c1362, :c1363, :c1364, :c1365, :c1366, :c1367, :c1368, :c1369, :c1370, :c1371, :c1372, :c1373, :c1374, :c1375, :c1376, :c1377, :c1378, :c1379, :c1380, :c1381, :c1382, :c1383, :c1384, :c1385, :c1386, :c1387, :c1388, :c1389, :c1390, :c1391, :c1392, :c1393, :c1394, :c1395, :c1396, :c1397, :c1398, :c1399, :c1400, :c1401, :c1402, :c1403, :c1404, :c1405, :c1406, :c1407, :c1408, :c1409, :c1410, :c1411, :c1412, :c1413, :c1414, :c1415, :c1416, :c1417, :c1418, :c1419, :c1420, :c1421, :c1422, :c1423, :c1424, :c1425, :c1426, :c1427, :c1428, :c1429, :c1430, :c1431, :c1432, :c1433, :c1434, :c1435, :c1436, :c1437, :c1438, :c1439, :c1440, :c1441, :c1442, :c1443, :c1444, :c1445, :c1446, :c1447, :c1448, :c1449, :c1450, :c1451, :c1452, :c1453, :c1454, :c1455, :c1456, :c1457, :c1458, :c1459, :c1460, :c1461, :c1462, :c1463, :c1464, :c1465, :c1466, :c1467, :c1468, :c1469, :c1470, :c1471, :c1472, :c1473, :c1474, :c1475, :c1476, :c1477, :c1478, :c1479, :c1480, :c1481, :c1482, :c1483, :c1484, :c1485, :c1486, :c1487, :c1488, :c1489, :c1490, :c1491, :c1492, :c1493, :c1494, :c1495, :c1496, :c1497, :c1498, :c1499, :c1500, :c1501, :c1502, :c1503, :c1504, :c1505, :c1506, :c1507, :c1508, :c1509, :c1510, :c1511, :c1512, :c1513, :c1514, :c1515, :c1516, :c1517, :c1518, :c1519, :c1520, :c1521, :c1522, :c1523, :c1524, :c1525, :c1526, :c1527, :c1528, :c1529, :c1530, :c1531, :c1532, :c1533, :c1534, :c1535, :c1536, :c1537, :c1538, :c1539, :c1540, :c1541, :c1542, :c1543, :c1544, :c1545, :c1546, :c1547, :c1548, :c1549, :c1550, :c1551, :c1552, :c1553, :c1554, :c1555, :c1556, :c1557, :c1558, :c1559, :c1560, :c1561, :c1562, :c1563, :c1564, :c1565, :c1566, :c1567, :c1568, :c1569, :c1570, :c1571, :c1572, :c1573, :c1574, :c1575, :c1576, :c1577, :c1578, :c1579, :c1580, :c1581, :c1582, :c1583, :c1584, :c1585, :c1586, :c1587, :c1588, :c1589, :c1590, :c1591, :c1592, :c1593, :c1594, :c1595, :c1596, :c1597, :c1598, :c1599, :c1600, :c1601, :c1602, :c1603, :c1604, :c1605, :c1606, :c1607, :c1608, :c1609, :c1610, :c1611, :c1612, :c1613, :c1614, :c1615, :c1616, :c1617, :c1618, :c1619, :c1620, :c1621, :c1622, :c1623, :c1624, :c1625, :c1626, :c1627, :c1628, :c1629, :c1630, :c1631, :c1632, :c1633, :c1634, :c1635, :c1636, :c1637, :c1638, :c1639, :c1640, :c1641, :c1642, :c1643, :c1644, :c1645, :c1646, :c1647, :c1648, :c1649, :c1650, :c1651, :c1652, :c1653, :c1654, :c1655, :c1656, :c1657, :c1658, :c1659, :c1660, :c1661, :c1662, :c1663, :c1664, :c1665, :c1666, :c1667, :c1668, :c1669, :c1670, :c1671, :c1672, :c1673, :c1674, :c1675, :c1676, :c1677, :c1678, :c1679, :c1680, :c1681, :c1682, :c1683, :c1684, :c1685, :c1686, :c1687, :c1688, :c1689, :c1690, :c1691, :c1692, :c1693, :c1694, :c1695, :c1696, :c1697, :c1698, :c1699, :c1700, :c1701, :c1702, :c1703, :c1704, :c1705, :c1706, :c1707, :c1708, :c1709, :c1710, :c1711, :c1712, :c1713, :c1714, :c1715, :c1716, :c1717, :c1718, :c1719, :c1720, :c1721, :c1722, :c1723, :c1724, :c1725, :c1726, :c1727, :c1728, :c1729, :c1730, :c1731, :c1732, :c1733, :c1734, :c1735, :c1736, :c1737, :c1738, :c1739, :c1740, :c1741, :c1742, :c1743, :c1744, :c1745, :c1746, :c1747, :c1748, :c1749, :c1750, :c1751, :c1752, :c1753, :c1754, :c1755, :c1756, :c1757, :c1758, :c1759, :c1760, :c1761, :c1762, :c1763, :c1764, :c1765, :c1766, :c1767, :c1768, :c1769, :c1770, :c1771, :c1772, :c1773, :c1774, :c1775, :c1776, :c1777, :c1778, :c1779, :c1780, :c1781, :c1782, :c1783, :c1784, :c1785, :c1786, :c1787, :c1788, :c1789, :c1790, :c1791, :c1792, :c1793, :c1794, :c1795, :c1796, :c1797, :c1798, :c1799, :c1800, :c1801, :c1802, :c1803, :c1804, :c1805, :c1806, :c1807, :c1808, :c1809, :c1810, :c1811, :c1812, :c1813, :c1814, :c1815, :c1816, :c1817, :c1818, :c1819, :c1820, :c1821, :c1822, :c1823, :c1824, :c1825, :c1826, :c1827, :c1828, :c1829, :c1830, :c1831, :c1832, :c1833, :c1834, :c1835, :c1836, :c1837, :c1838, :c1839, :c1840, :c1841, :c1842, :c1843, :c1844, :c1845, :c1846, :c1847, :c1848, :c1849, :c1850, :c1851, :c1852, :c1853, :c1854, :c1855, :c1856, :c1857, :c1858, :c1859, :c1860, :c1861, :c1862, :c1863, :c1864, :c1865, :c1866, :c1867, :c1868, :c1869, :c1870, :c1871, :c1872, :c1873, :c1874, :c1875, :c1876, :c1877, :c1878, :c1879, :c1880, :c1881, :c1882, :c1883, :c1884, :c1885, :c1886, :c1887, :c1888, :c1889, :c1890, :c1891, :c1892, :c1893, :c1894, :c1895, :c1896, :c1897, :c1898, :c1899, :c1900, :c1901, :c1902, :c1903, :c1904, :c1905, :c1906, :c1907, :c1908, :c1909, :c1910, :c1911, :c1912, :c1913, :c1914, :c1915, :c1916, :c1917, :c1918, :c1919, :c1920, :c1921, :c1922, :c1923, :c1924, :c1925, :c1926, :c1927, :c1928, :c1929, :c1930, :c1931, :c1932, :c1933, :c1934, :c1935, :c1936, :c1937, :c1938, :c1939, :c1940, :c1941, :c1942, :c1943, :c1944, :c1945, :c1946, :c1947, :c1948, :c1949, :c1950, :c1951, :c1952, :c1953, :c1954, :c1955, :c1956, :c1957, :c1958, :c1959, :c1960, :c1961, :c1962, :c1963, :c1964, :c1965, :c1966, :c1967, :c1968, :c1969, :c1970, :c1971, :c1972, :c1973, :c1974, :c1975, :c1976, :c1977, :c1978, :c1979, :c1980, :c1981, :c1982, :c1983, :c1984, :c1985, :c1986, :c1987, :c1988, :c1989, :c1990, :c1991, :c1992, :c1993, :c1994, :c1995, :c1996, :c1997, :c1998, :c1999, :c2000, :c2001, :c2002, :c2003, :c2004, :c2005, :c2006, :c2007, :c2008, :c2009, :c2010, :c2011, :c2012, :c2013, :c2014, :c2015, :c2016, :c2017, :c2018, :c2019, :c2020, :c2021, :c2022, :c2023, :c2024, :c2025, :c2026, :c2027, :c2028, :c2029, :c2030, :c2031, :c2032, :c2033, :c2034, :c2035, :c2036, :c2037, :c2038, :c2039, :c2040, :c2041, :c2042, :c2043, :c2044, :c2045, :c2046, :c2047, :c2048, :c2049, :c2050, :c2051, :c2052, :c2053, :c2054, :c2055, :c2056, :c2057, :c2058, :c2059, :c2060, :c2061, :c2062, :c2063, :c2064, :c2065, :c2066, :c2067, :c2068, :c2069, :c2070, :c2071, :c2072, :c2073, :c2074, :c2075, :c2076, :c2077, :c2078, :c2079, :c2080, :c2081, :c2082, :c2083, :c2084, :c2085, :c2086, :c2087, :c2088, :c2089, :c2090, :c2091, :c2092, :c2093, :c2094, :c2095, :c2096, :c2097, :c2098, :c2099, :c2100, :c2101, :c2102, :c2103, :c2104, :c2105, :c2106, :c2107, :c2108, :c2109, :c2110, :c2111, :c2112, :c2113, :c2114, :c2115, :c2116, :c2117, :c2118, :c2119, :c2120, :c2121, :c2122, :c2123, :c2124, :c2125, :c2126, :c2127, :c2128, :c2129, :c2130, :c2131, :c2132, :c2133, :c2134, :c2135, :c2136, :c2137, :c2138, :c2139, :c2140, :c2141, :c2142, :c2143, :c2144, :c2145, :c2146, :c2147, :c2148, :c2149, :c2150, :c2151, :c2152, :c2153, :c2154, :c2155, :c2156, :c2157, :c2158, :c2159, :c2160, :c2161, :c2162, :c2163, :c2164, :c2165, :c2166, :c2167, :c2168, :c2169, :c2170, :c2171, :c2172, :c2173, :c2174, :c2175, :c2176, :c2177, :c2178, :c2179, :c2180, :c2181, :c2182, :c2183, :c2184, :c2185, :c2186, :c2187, :c2188, :c2189, :c2190, :c2191, :c2192, :c2193, :c2194, :c2195, :c2196, :c2197, :c2198, :c2199, :c2200, :c2201, :c2202, :c2203, :c2204, :c2205, :c2206, :c2207, :c2208, :c2209, :c2210, :c2211, :c2212, :c2213, :c2214, :c2215, :c2216, :c2217, :c2218, :c2219, :c2220, :c2221, :c2222, :c2223, :c2224, :c2225, :c2226, :c2227, :c2228, :c2229, :c2230, :c2231, :c2232, :c2233, :c2234, :c2235, :c2236, :c2237, :c2238, :c2239, :c2240, :c2241, :c2242, :c2243, :c2244, :c2245, :c2246, :c2247, :c2248, :c2249, :c2250, :c2251, :c2252, :c2253, :c2254, :c2255, :c2256, :c2257, :c2258, :c2259, :c2260, :c2261, :c2262, :c2263, :c2264, :c2265, :c2266, :c2267, :c2268, :c2269, :c2270, :c2271, :c2272, :c2273, :c2274, :c2275, :c2276, :c2277, :c2278, :c2279, :c2280, :c2281, :c2282, :c2283, :c2284, :c2285, :c2286, :c2287, :c2288, :c2289, :c2290, :c2291, :c2292, :c2293, :c2294, :c2295, :c2296, :c2297, :c2298, :c2299, :c2300, :c2301, :c2302, :c2303, :c2304, :c2305, :c2306, :c2307, :c2308, :c2309, :c2310, :c2311, :c2312, :c2313, :c2314, :c2315, :c2316, :c2317, :c2318, :c2319, :c2320, :c2321, :c2322, :c2323, :c2324, :c2325, :c2326, :c2327, :c2328, :c2329, :c2330, :c2331, :c2332, :c2333, :c2334, :c2335, :c2336, :c2337, :c2338, :c2339, :c2340, :c2341, :c2342, :c2343, :c2344, :c2345, :c2346, :c2347, :c2348, :c2349, :c2350, :c2351, :c2352, :c2353, :c2354, :c2355, :c2356, :c2357, :c2358, :c2359, :c2360, :c2361, :c2362, :c2363, :c2364, :c2365, :c2366, :c2367, :c2368, :c2369, :c2370, :c2371, :c2372, :c2373, :c2374, :c2375, :c2376, :c2377, :c2378, :c2379, :c2380, :c2381, :c2382, :c2383, :c2384, :c2385, :c2386, :c2387, :c2388, :c2389, :c2390, :c2391, :c2392, :c2393, :c2394, :c2395, :c2396, :c2397, :c2398, :c2399, :c2400, :c2401, :c2402, :c2403, :c2404, :c2405, :c2406, :c2407, :c2408, :c2409, :c2410, :c2411, :c2412, :c2413, :c2414, :c2415, :c2416, :c2417, :c2418, :c2419, :c2420, :c2421, :c2422, :c2423, :c2424, :c2425, :c2426, :c2427, :c2428, :c2429, :c2430, :c2431, :c2432, :c2433, :c2434, :c2435, :c2436, :c2437, :c2438, :c2439, :c2440, :c2441, :c2442, :c2443, :c2444, :c2445, :c2446, :c2447, :c2448, :c2449, :c2450, :c2451, :c2452, :c2453, :c2454, :c2455, :c2456, :c2457, :c2458, :c2459, :c2460, :c2461, :c2462, :c2463, :c2464, :c2465, :c2466, :c2467, :c2468, :c2469, :c2470, :c2471, :c2472, :c2473, :c2474, :c2475, :c2476, :c2477, :c2478, :c2479, :c2480, :c2481, :c2482, :c2483, :c2484, :c2485, :c2486, :c2487, :c2488, :c2489, :c2490, :c2491, :c2492, :c2493, :c2494, :c2495, :c2496, :c2497, :c2498, :c2499, :c2500, :c2501, :c2502, :c2503, :c2504, :c2505, :c2506, :c2507, :c2508, :c2509, :c2510, :c2511, :c2512, :c2513, :c2514, :c2515, :c2516, :c2517, :c2518, :c2519, :c2520, :c2521, :c2522, :c2523, :c2524, :c2525, :c2526, :c2527, :c2528, :c2529, :c2530, :c2531, :c2532, :c2533, :c2534, :c2535, :c2536, :c2537, :c2538, :c2539, :c2540, :c2541, :c2542, :c2543, :c2544, :c2545, :c2546, :c2547, :c2548, :c2549, :c2550, :c2551, :c2552, :c2553, :c2554, :c2555, :c2556, :c2557, :c2558, :c2559, :c2560, :c2561, :c2562, :c2563, :c2564, :c2565, :c2566, :c2567, :c2568, :c2569, :c2570, :c2571, :c2572, :c2573, :c2574, :c2575, :c2576, :c2577, :c2578, :c2579, :c2580, :c2581, :c2582, :c2583, :c2584, :c2585, :c2586, :c2587, :c2588, :c2589, :c2590, :c2591, :c2592, :c2593, :c2594, :c2595, :c2596, :c2597, :c2598, :c2599, :c2600, :c2601, :c2602, :c2603, :c2604, :c2605, :c2606, :c2607, :c2608, :c2609, :c2610, :c2611, :c2612, :c2613, :c2614, :c2615, :c2616, :c2617, :c2618, :c2619, :c2620, :c2621, :c2622, :c2623, :c2624, :c2625, :c2626, :c2627, :c2628, :c2629, :c2630, :c2631, :c2632, :c2633, :c2634, :c2635, :c2636, :c2637, :c2638, :c2639, :c2640, :c2641, :c2642, :c2643, :c2644, :c2645, :c2646, :c2647, :c2648, :c2649, :c2650, :c2651, :c2652, :c2653, :c2654, :c2655, :c2656, :c2657, :c2658, :c2659, :c2660, :c2661, :c2662, :c2663, :c2664, :c2665, :c2666, :c2667, :c2668, :c2669, :c2670, :c2671, :c2672, :c2673, :c2674, :c2675, :c2676, :c2677, :c2678, :c2679, :c2680, :c2681, :c2682, :c2683, :c2684, :c2685, :c2686, :c2687, :c2688, :c2689, :c2690, :c2691, :c2692, :c2693, :c2694, :c2695, :c2696, :c2697, :c2698, :c2699, :c2700, :c2701, :c2702, :c2703, :c2704, :c2705, :c2706, :c2707, :c2708, :c2709, :c2710, :c2711, :c2712, :c2713, :c2714, :c2715, :c2716, :c2717, :c2718, :c2719, :c2720, :c2721, :c2722, :c2723, :c2724, :c2725, :c2726, :c2727, :c2728, :c2729, :c2730, :c2731, :c2732, :c2733, :c2734, :c2735, :c2736, :c2737, :c2738, :c2739, :c2740, :c2741, :c2742, :c2743, :c2744, :c2745, :c2746, :c2747, :c2748, :c2749, :c2750, :c2751, :c2752, :c2753, :c2754, :c2755, :c2756, :c2757, :c2758, :c2759, :c2760, :c2761, :c2762, :c2763, :c2764, :c2765, :c2766, :c2767, :c2768, :c2769, :c2770, :c2771, :c2772, :c2773, :c2774, :c2775, :c2776, :c2777, :c2778, :c2779, :c2780, :c2781, :c2782, :c2783, :c2784, :c2785, :c2786, :c2787, :c2788, :c2789, :c2790, :c2791, :c2792, :c2793, :c2794, :c2795, :c2796, :c2797, :c2798, :c2799, :c2800, :c2801, :c2802, :c2803, :c2804, :c2805, :c2806, :c2807, :c2808, :c2809, :c2810, :c2811, :c2812, :c2813, :c2814, :c2815, :c2816, :c2817, :c2818, :c2819, :c2820, :c2821, :c2822, :c2823, :c2824, :c2825, :c2826, :c2827, :c2828, :c2829, :c2830, :c2831, :c2832, :c2833, :c2834, :c2835, :c2836, :c2837, :c2838, :c2839, :c2840, :c2841, :c2842, :c2843, :c2844, :c2845, :c2846, :c2847, :c2848, :c2849, :c2850, :c2851, :c2852, :c2853, :c2854, :c2855, :c2856, :c2857, :c2858, :c2859, :c2860, :c2861, :c2862, :c2863, :c2864, :c2865, :c2866, :c2867, :c2868, :c2869, :c2870, :c2871, :c2872, :c2873, :c2874, :c2875, :c2876, :c2877, :c2878, :c2879, :c2880, :c2881, :c2882, :c2883, :c2884, :c2885, :c2886, :c2887, :c2888, :c2889, :c2890, :c2891, :c2892, :c2893, :c2894, :c2895, :c2896, :c2897, :c2898, :c2899, :c2900, :c2901, :c2902, :c2903, :c2904, :c2905, :c2906, :c2907, :c2908, :c2909, :c2910, :c2911, :c2912, :c2913, :c2914, :c2915, :c2916, :c2917, :c2918, :c2919, :c2920, :c2921, :c2922, :c2923, :c2924, :c2925, :c2926, :c2927, :c2928, :c2929, :c2930, :c2931, :c2932, :c2933, :c2934, :c2935, :c2936, :c2937, :c2938, :c2939, :c2940, :c2941, :c2942, :c2943, :c2944, :c2945, :c2946, :c2947, :c2948, :c2949, :c2950, :c2951, :c2952, :c2953, :c2954, :c2955, :c2956, :c2957, :c2958, :c2959, :c2960, :c2961, :c2962, :c2963, :c2964, :c2965, :c2966, :c2967, :c2968, :c2969, :c2970, :c2971, :c2972, :c2973, :c2974, :c2975, :c2976, :c2977, :c2978, :c2979, :c2980, :c2981, :c2982, :c2983, :c2984, :c2985, :c2986, :c2987, :c2988, :c2989, :c2990, :c2991, :c2992, :c2993, :c2994, :c2995, :c2996, :c2997, :c2998, :c2999, :c3000, :c3001, :c3002, :c3003, :c3004, :c3005, :c3006, :c3007, :c3008, :c3009, :c3010, :c3011, :c3012, :c3013, :c3014, :c3015, :c3016, :c3017, :c3018, :c3019, :c3020, :c3021, :c3022, :c3023, :c3024, :c3025, :c3026, :c3027, :c3028, :c3029, :c3030, :c3031, :c3032, :c3033, :c3034, :c3035, :c3036, :c3037, :c3038, :c3039, :c3040, :c3041, :c3042, :c3043, :c3044, :c3045, :c3046, :c3047, :c3048, :c3049, :c3050, :c3051, :c3052, :c3053, :c3054, :c3055, :c3056, :c3057, :c3058, :c3059, :c3060, :c3061, :c3062, :c3063, :c3064, :c3065, :c3066, :c3067, :c3068, :c3069, :c3070, :c3071, :c3072, :c3073, :c3074, :c3075, :c3076, :c3077, :c3078, :c3079, :c3080, :c3081, :c3082, :c3083, :c3084, :c3085, :c3086, :c3087, :c3088, :c3089, :c3090, :c3091, :c3092, :c3093, :c3094, :c3095, :c3096, :c3097, :c3098, :c3099, :c3100, :c3101, :c3102, :c3103, :c3104, :c3105, :c3106, :c3107, :c3108, :c3109, :c3110, :c3111, :c3112, :c3113, :c3114, :c3115, :c3116, :c3117, :c3118, :c3119, :c3120, :c3121, :c3122, :c3123, :c3124, :c3125, :c3126, :c3127, :c3128, :c3129, :c3130, :c3131, :c3132, :c3133, :c3134, :c3135, :c3136, :c3137, :c3138, :c3139, :c3140, :c3141, :c3142, :c3143, :c3144, :c3145, :c3146, :c3147, :c3148, :c3149, :c3150, :c3151, :c3152, :c3153, :c3154, :c3155, :c3156, :c3157, :c3158, :c3159, :c3160, :c3161, :c3162, :c3163, :c3164, :c3165, :c3166, :c3167, :c3168, :c3169, :c3170, :c3171, :c3172, :c3173, :c3174, :c3175, :c3176, :c3177, :c3178, :c3179, :c3180, :c3181, :c3182, :c3183, :c3184, :c3185, :c3186, :c3187, :c3188, :c3189, :c3190, :c3191, :c3192, :c3193, :c3194, :c3195, :c3196, :c3197, :c3198, :c3199, :c3200, :c3201, :c3202, :c3203, :c3204, :c3205, :c3206, :c3207, :c3208, :c3209, :c3210, :c3211, :c3212, :c3213, :c3214, :c3215, :c3216, :c3217, :c3218, :c3219, :c3220, :c3221, :c3222, :c3223, :c3224, :c3225, :c3226, :c3227, :c3228, :c3229, :c3230, :c3231, :c3232, :c3233, :c3234, :c3235, :c3236, :c3237, :c3238, :c3239, :c3240, :c3241, :c3242, :c3243, :c3244, :c3245, :c3246, :c3247, :c3248, :c3249, :c3250, :c3251, :c3252, :c3253, :c3254, :c3255, :c3256, :c3257, :c3258, :c3259, :c3260, :c3261, :c3262, :c3263, :c3264, :c3265, :c3266, :c3267, :c3268, :c3269, :c3270, :c3271, :c3272, :c3273, :c3274, :c3275, :c3276, :c3277, :c3278, :c3279, :c3280, :c3281, :c3282, :c3283, :c3284, :c3285, :c3286, :c3287, :c3288, :c3289, :c3290, :c3291, :c3292, :c3293, :c3294, :c3295, :c3296, :c3297, :c3298, :c3299, :c3300, :c3301, :c3302, :c3303, :c3304, :c3305, :c3306, :c3307, :c3308, :c3309, :c3310, :c3311, :c3312, :c3313, :c3314, :c3315, :c3316, :c3317, :c3318, :c3319, :c3320, :c3321, :c3322, :c3323, :c3324, :c3325, :c3326, :c3327, :c3328, :c3329, :c3330, :c3331, :c3332, :c3333, :c3334, :c3335, :c3336, :c3337, :c3338, :c3339, :c3340, :c3341, :c3342, :c3343, :c3344, :c3345, :c3346, :c3347, :c3348, :c3349, :c3350, :c3351, :c3352, :c3353, :c3354, :c3355, :c3356, :c3357, :c3358, :c3359, :c3360, :c3361, :c3362, :c3363, :c3364, :c3365, :c3366, :c3367, :c3368, :c3369, :c3370, :c3371, :c3372, :c3373, :c3374, :c3375, :c3376, :c3377, :c3378, :c3379, :c3380, :c3381, :c3382, :c3383, :c3384, :c3385, :c3386, :c3387, :c3388, :c3389, :c3390, :c3391, :c3392, :c3393, :c3394, :c3395, :c3396, :c3397, :c3398, :c3399, :c3400, :c3401, :c3402, :c3403, :c3404, :c3405, :c3406, :c3407, :c3408, :c3409, :c3410, :c3411, :c3412, :c3413, :c3414, :c3415, :c3416, :c3417, :c3418, :c3419, :c3420, :c3421, :c3422, :c3423, :c3424, :c3425, :c3426, :c3427, :c3428, :c3429, :c3430, :c3431, :c3432, :c3433, :c3434, :c3435, :c3436, :c3437, :c3438, :c3439, :c3440, :c3441, :c3442, :c3443, :c3444, :c3445, :c3446, :c3447, :c3448, :c3449, :c3450, :c3451, :c3452, :c3453, :c3454, :c3455, :c3456, :c3457, :c3458, :c3459, :c3460, :c3461, :c3462, :c3463, :c3464, :c3465, :c3466, :c3467, :c3468, :c3469, :c3470, :c3471, :c3472, :c3473, :c3474, :c3475, :c3476, :c3477, :c3478, :c3479, :c3480, :c3481, :c3482, :c3483, :c3484, :c3485, :c3486, :c3487, :c3488, :c3489, :c3490, :c3491, :c3492, :c3493, :c3494, :c3495, :c3496, :c3497, :c3498, :c3499, :c3500, :c3501, :c3502, :c3503, :c3504, :c3505, :c3506, :c3507, :c3508, :c3509, :c3510, :c3511, :c3512, :c3513, :c3514, :c3515, :c3516, :c3517, :c3518, :c3519, :c3520, :c3521, :c3522, :c3523, :c3524, :c3525, :c3526, :c3527, :c3528, :c3529, :c3530, :c3531, :c3532, :c3533, :c3534, :c3535, :c3536, :c3537, :c3538, :c3539, :c3540, :c3541, :c3542, :c3543, :c3544, :c3545, :c3546, :c3547, :c3548, :c3549, :c3550, :c3551, :c3552, :c3553, :c3554, :c3555, :c3556, :c3557, :c3558, :c3559, :c3560, :c3561, :c3562, :c3563, :c3564, :c3565, :c3566, :c3567, :c3568, :c3569, :c3570, :c3571, :c3572, :c3573, :c3574, :c3575, :c3576, :c3577, :c3578, :c3579, :c3580, :c3581, :c3582, :c3583, :c3584, :c3585, :c3586, :c3587, :c3588, :c3589, :c3590, :c3591, :c3592, :c3593, :c3594, :c3595, :c3596, :c3597, :c3598, :c3599, :c3600, :c3601, :c3602, :c3603, :c3604, :c3605, :c3606, :c3607, :c3608, :c3609, :c3610, :c3611, :c3612, :c3613, :c3614, :c3615, :c3616, :c3617, :c3618, :c3619, :c3620, :c3621, :c3622, :c3623, :c3624, :c3625, :c3626, :c3627, :c3628, :c3629, :c3630, :c3631, :c3632, :c3633, :c3634, :c3635, :c3636, :c3637, :c3638, :c3639, :c3640, :c3641, :c3642, :c3643, :c3644, :c3645, :c3646, :c3647, :c3648, :c3649, :c3650, :c3651, :c3652, :c3653, :c3654, :c3655, :c3656, :c3657, :c3658, :c3659, :c3660, :c3661, :c3662, :c3663, :c3664, :c3665, :c3666, :c3667, :c3668, :c3669, :c3670, :c3671, :c3672, :c3673, :c3674, :c3675, :c3676, :c3677, :c3678, :c3679, :c3680, :c3681, :c3682, :c3683, :c3684, :c3685, :c3686, :c3687, :c3688, :c3689, :c3690, :c3691, :c3692, :c3693, :c3694, :c3695, :c3696, :c3697, :c3698, :c3699, :c3700, :c3701, :c3702, :c3703, :c3704, :c3705, :c3706, :c3707, :c3708, :c3709, :c3710, :c3711, :c3712, :c3713, :c3714, :c3715, :c3716, :c3717, :c3718, :c3719, :c3720, :c3721, :c3722, :c3723, :c3724, :c3725, :c3726, :c3727, :c3728, :c3729, :c3730, :c3731, :c3732, :c3733, :c3734, :c3735, :c3736, :c3737, :c3738, :c3739, :c3740, :c3741, :c3742, :c3743, :c3744, :c3745, :c3746, :c3747, :c3748, :c3749, :c3750, :c3751, :c3752, :c3753, :c3754, :c3755, :c3756, :c3757, :c3758, :c3759, :c3760, :c3761, :c3762, :c3763, :c3764, :c3765, :c3766, :c3767, :c3768, :c3769, :c3770, :c3771, :c3772, :c3773, :c3774, :c3775, :c3776, :c3777, :c3778, :c3779, :c3780, :c3781, :c3782, :c3783, :c3784, :c3785, :c3786, :c3787, :c3788, :c3789, :c3790, :c3791, :c3792, :c3793, :c3794, :c3795, :c3796, :c3797, :c3798, :c3799, :c3800, :c3801, :c3802, :c3803, :c3804, :c3805, :c3806, :c3807, :c3808, :c3809, :c3810, :c3811, :c3812, :c3813, :c3814, :c3815, :c3816, :c3817, :c3818, :c3819, :c3820, :c3821, :c3822, :c3823, :c3824, :c3825, :c3826, :c3827, :c3828, :c3829, :c3830, :c3831, :c3832, :c3833, :c3834, :c3835, :c3836, :c3837, :c3838, :c3839, :c3840, :c3841, :c3842, :c3843, :c3844, :c3845, :c3846, :c3847, :c3848, :c3849, :c3850, :c3851, :c3852, :c3853, :c3854, :c3855, :c3856, :c3857, :c3858, :c3859, :c3860, :c3861, :c3862, :c3863, :c3864, :c3865, :c3866, :c3867, :c3868, :c3869, :c3870, :c3871, :c3872, :c3873, :c3874, :c3875, :c3876, :c3877, :c3878, :c3879, :c3880, :c3881, :c3882, :c3883, :c3884, :c3885, :c3886, :c3887, :c3888, :c3889, :c3890, :c3891, :c3892, :c3893, :c3894, :c3895, :c3896, :c3897, :c3898, :c3899, :c3900, :c3901, :c3902, :c3903, :c3904, :c3905, :c3906, :c3907, :c3908, :c3909, :c3910, :c3911, :c3912, :c3913, :c3914, :c3915, :c3916, :c3917, :c3918, :c3919, :c3920, :c3921, :c3922, :c3923, :c3924, :c3925, :c3926, :c3927, :c3928, :c3929, :c3930, :c3931, :c3932, :c3933, :c3934, :c3935, :c3936, :c3937, :c3938, :c3939, :c3940, :c3941, :c3942, :c3943, :c3944, :c3945, :c3946, :c3947, :c3948, :c3949, :c3950, :c3951, :c3952, :c3953, :c3954, :c3955, :c3956, :c3957, :c3958, :c3959, :c3960, :c3961, :c3962, :c3963, :c3964, :c3965, :c3966, :c3967, :c3968, :c3969, :c3970, :c3971, :c3972, :c3973, :c3974, :c3975, :c3976, :c3977, :c3978, :c3979, :c3980, :c3981, :c3982, :c3983, :c3984, :c3985, :c3986, :c3987, :c3988, :c3989, :c3990, :c3991, :c3992, :c3993, :c3994, :c3995, :c3996, :c3997, :c3998, :c3999, :c4000, :c4001, :c4002, :c4003, :c4004, :c4005, :c4006, :c4007, :c4008, :c4009, :c4010, :c4011, :c4012, :c4013, :c4014, :c4015, :c4016, :c4017, :c4018, :c4019, :c4020, :c4021, :c4022, :c4023, :c4024, :c4025, :c4026, :c4027, :c4028, :c4029, :c4030, :c4031, :c4032, :c4033, :c4034, :c4035, :c4036, :c4037, :c4038, :c4039, :c4040, :c4041, :c4042, :c4043, :c4044, :c4045, :c4046, :c4047, :c4048, :c4049, :c4050, :c4051, :c4052, :c4053, :c4054, :c4055, :c4056, :c4057, :c4058, :c4059, :c4060, :c4061, :c4062, :c4063, :c4064, :c4065, :c4066, :c4067, :c4068, :c4069, :c4070, :c4071, :c4072, :c4073, :c4074, :c4075, :c4076, :c4077, :c4078, :c4079, :c4080, :c4081, :c4082, :c4083, :c4084, :c4085, :c4086, :c4087, :c4088, :c4089, :c4090, :c4091, :c4092, :c4093, :c4094, :c4095, :c4096, :c4097, :c4098, :c4099, :c4100, :c4101, :c4102, :c4103, :c4104, :c4105, :c4106, :c4107, :c4108, :c4109, :c4110, :c4111, :c4112, :c4113, :c4114, :c4115, :c4116, :c4117, :c4118, :c4119, :c4120, :c4121, :c4122, :c4123, :c4124, :c4125, :c4126, :c4127, :c4128, :c4129, :c4130, :c4131, :c4132, :c4133, :c4134, :c4135, :c4136, :c4137, :c4138, :c4139, :c4140, :c4141, :c4142, :c4143, :c4144, :c4145, :c4146, :c4147, :c4148, :c4149, :c4150, :c4151, :c4152, :c4153, :c4154, :c4155, :c4156, :c4157, :c4158, :c4159, :c4160, :c4161, :c4162, :c4163, :c4164, :c4165, :c4166, :c4167, :c4168, :c4169, :c4170, :c4171, :c4172, :c4173, :c4174, :c4175, :c4176, :c4177, :c4178, :c4179, :c4180, :c4181, :c4182, :c4183, :c4184, :c4185, :c4186, :c4187, :c4188, :c4189, :c4190, :c4191, :c4192, :c4193, :c4194, :c4195, :c4196, :c4197, :c4198, :c4199, :c4200, :c4201, :c4202, :c4203, :c4204, :c4205, :c4206, :c4207, :c4208, :c4209, :c4210, :c4211, :c4212, :c4213, :c4214, :c4215, :c4216, :c4217, :c4218, :c4219, :c4220, :c4221, :c4222, :c4223, :c4224, :c4225, :c4226, :c4227, :c4228, :c4229, :c4230, :c4231, :c4232, :c4233, :c4234, :c4235, :c4236, :c4237, :c4238, :c4239, :c4240, :c4241, :c4242, :c4243, :c4244, :c4245, :c4246, :c4247, :c4248, :c4249, :c4250, :c4251, :c4252, :c4253, :c4254, :c4255, :c4256, :c4257, :c4258, :c4259, :c4260, :c4261, :c4262, :c4263, :c4264, :c4265, :c4266, :c4267, :c4268, :c4269, :c4270, :c4271, :c4272, :c4273, :c4274, :c4275, :c4276, :c4277, :c4278, :c4279, :c4280, :c4281, :c4282, :c4283, :c4284, :c4285, :c4286, :c4287, :c4288, :c4289, :c4290, :c4291, :c4292, :c4293, :c4294, :c4295, :c4296, :c4297, :c4298, :c4299, :c4300, :c4301, :c4302, :c4303, :c4304, :c4305, :c4306, :c4307, :c4308, :c4309, :c4310, :c4311, :c4312, :c4313, :c4314, :c4315, :c4316, :c4317, :c4318, :c4319, :c4320, :c4321, :c4322, :c4323, :c4324, :c4325, :c4326, :c4327, :c4328, :c4329, :c4330, :c4331, :c4332, :c4333, :c4334, :c4335, :c4336, :c4337, :c4338, :c4339, :c4340, :c4341, :c4342, :c4343, :c4344, :c4345, :c4346, :c4347, :c4348, :c4349, :c4350, :c4351, :c4352, :c4353, :c4354, :c4355, :c4356, :c4357, :c4358, :c4359, :c4360, :c4361, :c4362, :c4363, :c4364, :c4365, :c4366, :c4367, :c4368, :c4369, :c4370, :c4371, :c4372, :c4373, :c4374, :c4375, :c4376, :c4377, :c4378, :c4379, :c4380, :c4381, :c4382, :c4383, :c4384, :c4385, :c4386, :c4387, :c4388, :c4389, :c4390, :c4391, :c4392, :c4393, :c4394, :c4395, :c4396, :c4397, :c4398, :c4399, :c4400, :c4401, :c4402, :c4403, :c4404, :c4405, :c4406, :c4407, :c4408, :c4409, :c4410, :c4411, :c4412, :c4413, :c4414, :c4415, :c4416, :c4417, :c4418, :c4419, :c4420, :c4421, :c4422, :c4423, :c4424, :c4425, :c4426, :c4427, :c4428, :c4429, :c4430, :c4431, :c4432, :c4433, :c4434, :c4435, :c4436, :c4437, :c4438, :c4439, :c4440, :c4441, :c4442, :c4443, :c4444, :c4445, :c4446, :c4447, :c4448, :c4449, :c4450, :c4451, :c4452, :c4453, :c4454, :c4455, :c4456, :c4457, :c4458, :c4459, :c4460, :c4461, :c4462, :c4463, :c4464, :c4465, :c4466, :c4467, :c4468, :c4469, :c4470, :c4471, :c4472, :c4473, :c4474, :c4475, :c4476, :c4477, :c4478, :c4479, :c4480, :c4481, :c4482, :c4483, :c4484, :c4485, :c4486, :c4487, :c4488, :c4489, :c4490, :c4491, :c4492, :c4493, :c4494, :c4495, :c4496, :c4497, :c4498, :c4499, :c4500, :c4501, :c4502, :c4503, :c4504, :c4505, :c4506, :c4507, :c4508, :c4509, :c4510, :c4511, :c4512, :c4513, :c4514, :c4515, :c4516, :c4517, :c4518, :c4519, :c4520, :c4521, :c4522, :c4523, :c4524, :c4525, :c4526, :c4527, :c4528, :c4529, :c4530, :c4531, :c4532, :c4533, :c4534, :c4535, :c4536, :c4537, :c4538, :c4539, :c4540, :c4541, :c4542, :c4543, :c4544, :c4545, :c4546, :c4547, :c4548, :c4549, :c4550, :c4551, :c4552, :c4553, :c4554, :c4555, :c4556, :c4557, :c4558, :c4559, :c4560, :c4561, :c4562, :c4563, :c4564, :c4565, :c4566, :c4567, :c4568, :c4569, :c4570, :c4571, :c4572, :c4573, :c4574, :c4575, :c4576, :c4577, :c4578, :c4579, :c4580, :c4581, :c4582, :c4583, :c4584, :c4585, :c4586, :c4587, :c4588, :c4589, :c4590, :c4591, :c4592, :c4593, :c4594, :c4595, :c4596, :c4597, :c4598, :c4599, :c4600, :c4601, :c4602, :c4603, :c4604, :c4605, :c4606, :c4607, :c4608, :c4609, :c4610, :c4611, :c4612, :c4613, :c4614, :c4615, :c4616, :c4617, :c4618, :c4619, :c4620, :c4621, :c4622, :c4623, :c4624, :c4625, :c4626, :c4627, :c4628, :c4629, :c4630, :c4631, :c4632, :c4633, :c4634, :c4635, :c4636, :c4637, :c4638, :c4639, :c4640, :c4641, :c4642, :c4643, :c4644, :c4645, :c4646, :c4647, :c4648, :c4649, :c4650, :c4651, :c4652, :c4653, :c4654, :c4655, :c4656, :c4657, :c4658, :c4659, :c4660, :c4661, :c4662, :c4663, :c4664, :c4665, :c4666, :c4667, :c4668, :c4669, :c4670, :c4671, :c4672, :c4673, :c4674, :c4675, :c4676, :c4677, :c4678, :c4679, :c4680, :c4681, :c4682, :c4683, :c4684, :c4685, :c4686, :c4687, :c4688, :c4689, :c4690, :c4691, :c4692, :c4693, :c4694, :c4695, :c4696, :c4697, :c4698, :c4699, :c4700, :c4701, :c4702, :c4703, :c4704, :c4705, :c4706, :c4707, :c4708, :c4709, :c4710, :c4711, :c4712, :c4713, :c4714, :c4715, :c4716, :c4717, :c4718, :c4719, :c4720, :c4721, :c4722, :c4723, :c4724, :c4725, :c4726, :c4727, :c4728, :c4729, :c4730, :c4731, :c4732, :c4733, :c4734, :c4735, :c4736, :c4737, :c4738, :c4739, :c4740, :c4741, :c4742, :c4743, :c4744, :c4745, :c4746, :c4747, :c4748, :c4749, :c4750, :c4751, :c4752, :c4753, :c4754, :c4755, :c4756, :c4757, :c4758, :c4759, :c4760, :c4761, :c4762, :c4763, :c4764, :c4765, :c4766, :c4767, :c4768, :c4769, :c4770, :c4771, :c4772, :c4773, :c4774, :c4775, :c4776, :c4777, :c4778, :c4779, :c4780, :c4781, :c4782, :c4783, :c4784, :c4785, :c4786, :c4787, :c4788, :c4789, :c4790, :c4791, :c4792, :c4793, :c4794, :c4795, :c4796, :c4797, :c4798, :c4799, :c4800, :c4801, :c4802, :c4803, :c4804, :c4805, :c4806, :c4807, :c4808, :c4809, :c4810, :c4811, :c4812, :c4813, :c4814, :c4815, :c4816, :c4817, :c4818, :c4819, :c4820, :c4821, :c4822, :c4823, :c4824, :c4825, :c4826, :c4827, :c4828, :c4829, :c4830, :c4831, :c4832, :c4833, :c4834, :c4835, :c4836, :c4837, :c4838, :c4839, :c4840, :c4841, :c4842, :c4843, :c4844, :c4845, :c4846, :c4847, :c4848, :c4849, :c4850, :c4851, :c4852, :c4853, :c4854, :c4855, :c4856, :c4857, :c4858, :c4859, :c4860, :c4861, :c4862, :c4863, :c4864, :c4865, :c4866, :c4867, :c4868, :c4869, :c4870, :c4871, :c4872, :c4873, :c4874, :c4875, :c4876, :c4877, :c4878, :c4879, :c4880, :c4881, :c4882, :c4883, :c4884, :c4885, :c4886, :c4887, :c4888, :c4889, :c4890, :c4891, :c4892, :c4893, :c4894, :c4895, :c4896, :c4897, :c4898, :c4899, :c4900, :c4901, :c4902, :c4903, :c4904, :c4905, :c4906, :c4907, :c4908, :c4909, :c4910, :c4911, :c4912, :c4913, :c4914, :c4915, :c4916, :c4917, :c4918, :c4919, :c4920, :c4921, :c4922, :c4923, :c4924, :c4925, :c4926, :c4927, :c4928, :c4929, :c4930, :c4931, :c4932, :c4933, :c4934, :c4935, :c4936, :c4937, :c4938, :c4939, :c4940, :c4941, :c4942, :c4943, :c4944, :c4945, :c4946, :c4947, :c4948, :c4949, :c4950, :c4951, :c4952, :c4953, :c4954, :c4955, :c4956, :c4957, :c4958, :c4959, :c4960, :c4961, :c4962, :c4963, :c4964, :c4965, :c4966, :c4967, :c4968, :c4969, :c4970, :c4971, :c4972, :c4973, :c4974, :c4975, :c4976, :c4977, :c4978, :c4979, :c4980, :c4981, :c4982, :c4983, :c4984, :c4985, :c4986, :c4987, :c4988, :c4989, :c4990, :c4991, :c4992, :c4993, :c4994, :c4995, :c4996, :c4997, :c4998, :c4999, :c5000, :c5001, :c5002, :c5003, :c5004, :c5005, :c5006, :c5007, :c5008, :c5009, :c5010, :c5011, :c5012, :c5013, :c5014, :c5015, :c5016, :c5017, :c5018, :c5019, :c5020, :c5021, :c5022, :c5023, :c5024, :c5025, :c5026, :c5027, :c5028, :c5029, :c5030, :c5031, :c5032, :c5033, :c5034, :c5035, :c5036, :c5037, :c5038, :c5039, :c5040, :c5041, :c5042, :c5043, :c5044, :c5045, :c5046, :c5047, :c5048, :c5049, :c5050, :c5051, :c5052, :c5053, :c5054, :c5055, :c5056, :c5057, :c5058, :c5059, :c5060, :c5061, :c5062, :c5063, :c5064, :c5065, :c5066, :c5067, :c5068, :c5069, :c5070, :c5071, :c5072, :c5073, :c5074, :c5075, :c5076, :c5077, :c5078, :c5079, :c5080, :c5081, :c5082, :c5083, :c5084, :c5085, :c5086, :c5087, :c5088, :c5089, :c5090, :c5091, :c5092, :c5093, :c5094, :c5095, :c5096, :c5097, :c5098, :c5099, :c5100, :c5101, :c5102, :c5103, :c5104, :c5105, :c5106, :c5107, :c5108, :c5109, :c5110, :c5111, :c5112, :c5113, :c5114, :c5115, :c5116, :c5117, :c5118, :c5119, :c5120, :c5121, :c5122, :c5123, :c5124, :c5125, :c5126, :c5127, :c5128, :c5129, :c5130, :c5131, :c5132, :c5133, :c5134, :c5135, :c5136, :c5137, :c5138, :c5139, :c5140, :c5141, :c5142, :c5143, :c5144, :c5145, :c5146, :c5147, :c5148, :c5149, :c5150, :c5151, :c5152, :c5153, :c5154, :c5155, :c5156, :c5157, :c5158, :c5159, :c5160, :c5161, :c5162, :c5163, :c5164, :c5165, :c5166, :c5167, :c5168, :c5169, :c5170, :c5171, :c5172, :c5173, :c5174, :c5175, :c5176, :c5177, :c5178, :c5179, :c5180, :c5181, :c5182, :c5183, :c5184, :c5185, :c5186, :c5187, :c5188, :c5189, :c5190, :c5191, :c5192, :c5193, :c5194, :c5195, :c5196, :c5197, :c5198, :c5199, :c5200, :c5201, :c5202, :c5203, :c5204, :c5205, :c5206, :c5207, :c5208, :c5209, :c5210, :c5211, :c5212, :c5213, :c5214, :c5215, :c5216, :c5217, :c5218, :c5219, :c5220, :c5221, :c5222, :c5223, :c5224, :c5225, :c5226, :c5227, :c5228, :c5229, :c5230, :c5231, :c5232, :c5233, :c5234, :c5235, :c5236, :c5237, :c5238, :c5239, :c5240, :c5241, :c5242, :c5243, :c5244, :c5245, :c5246, :c5247, :c5248, :c5249, :c5250, :c5251, :c5252, :c5253, :c5254, :c5255, :c5256, :c5257, :c5258, :c5259, :c5260, :c5261, :c5262, :c5263, :c5264, :c5265, :c5266, :c5267, :c5268, :c5269, :c5270, :c5271, :c5272, :c5273, :c5274, :c5275, :c5276, :c5277, :c5278, :c5279, :c5280, :c5281, :c5282, :c5283, :c5284, :c5285, :c5286, :c5287, :c5288, :c5289, :c5290, :c5291, :c5292, :c5293, :c5294, :c5295, :c5296, :c5297, :c5298, :c5299, :c5300, :c5301, :c5302, :c5303, :c5304, :c5305, :c5306, :c5307, :c5308, :c5309, :c5310, :c5311, :c5312, :c5313, :c5314, :c5315, :c5316, :c5317, :c5318, :c5319, :c5320, :c5321, :c5322, :c5323, :c5324, :c5325, :c5326, :c5327, :c5328, :c5329, :c5330, :c5331, :c5332, :c5333, :c5334, :c5335, :c5336, :c5337, :c5338, :c5339, :c5340, :c5341, :c5342, :c5343, :c5344, :c5345, :c5346, :c5347, :c5348, :c5349, :c5350, :c5351, :c5352, :c5353, :c5354, :c5355, :c5356, :c5357, :c5358, :c5359, :c5360, :c5361, :c5362, :c5363, :c5364, :c5365, :c5366, :c5367, :c5368, :c5369, :c5370, :c5371, :c5372, :c5373, :c5374, :c5375, :c5376, :c5377, :c5378, :c5379, :c5380, :c5381, :c5382, :c5383, :c5384, :c5385, :c5386, :c5387, :c5388, :c5389, :c5390, :c5391, :c5392, :c5393, :c5394, :c5395, :c5396, :c5397, :c5398, :c5399, :c5400, :c5401, :c5402, :c5403, :c5404, :c5405, :c5406, :c5407, :c5408, :c5409, :c5410, :c5411, :c5412, :c5413, :c5414, :c5415, :c5416, :c5417, :c5418, :c5419, :c5420, :c5421, :c5422, :c5423, :c5424, :c5425, :c5426, :c5427, :c5428, :c5429, :c5430, :c5431, :c5432, :c5433, :c5434, :c5435, :c5436, :c5437, :c5438, :c5439, :c5440, :c5441, :c5442, :c5443, :c5444, :c5445, :c5446, :c5447, :c5448, :c5449, :c5450, :c5451, :c5452, :c5453, :c5454, :c5455, :c5456, :c5457, :c5458, :c5459, :c5460, :c5461, :c5462, :c5463, :c5464, :c5465, :c5466, :c5467, :c5468, :c5469, :c5470, :c5471, :c5472, :c5473, :c5474, :c5475, :c5476, :c5477, :c5478, :c5479, :c5480, :c5481, :c5482, :c5483, :c5484, :c5485, :c5486, :c5487, :c5488, :c5489, :c5490, :c5491, :c5492, :c5493, :c5494, :c5495, :c5496, :c5497, :c5498, :c5499, :c5500, :c5501, :c5502, :c5503, :c5504, :c5505, :c5506, :c5507, :c5508, :c5509, :c5510, :c5511, :c5512, :c5513, :c5514, :c5515, :c5516, :c5517, :c5518, :c5519, :c5520, :c5521, :c5522, :c5523, :c5524, :c5525, :c5526, :c5527, :c5528, :c5529, :c5530, :c5531, :c5532, :c5533, :c5534, :c5535, :c5536, :c5537, :c5538, :c5539, :c5540, :c5541, :c5542, :c5543, :c5544, :c5545, :c5546, :c5547, :c5548, :c5549, :c5550, :c5551, :c5552, :c5553, :c5554, :c5555, :c5556, :c5557, :c5558, :c5559, :c5560, :c5561, :c5562, :c5563, :c5564, :c5565, :c5566, :c5567, :c5568, :c5569, :c5570, :c5571, :c5572, :c5573, :c5574, :c5575, :c5576, :c5577, :c5578, :c5579, :c5580, :c5581, :c5582, :c5583, :c5584, :c5585, :c5586, :c5587, :c5588, :c5589, :c5590, :c5591, :c5592, :c5593, :c5594, :c5595, :c5596, :c5597, :c5598, :c5599, :c5600, :c5601, :c5602, :c5603, :c5604, :c5605, :c5606, :c5607, :c5608, :c5609, :c5610, :c5611, :c5612, :c5613, :c5614, :c5615, :c5616, :c5617, :c5618, :c5619, :c5620, :c5621, :c5622, :c5623, :c5624, :c5625, :c5626, :c5627, :c5628, :c5629, :c5630, :c5631, :c5632, :c5633, :c5634, :c5635, :c5636, :c5637, :c5638, :c5639, :c5640, :c5641, :c5642, :c5643, :c5644, :c5645, :c5646, :c5647, :c5648, :c5649, :c5650, :c5651, :c5652, :c5653, :c5654, :c5655, :c5656, :c5657, :c5658, :c5659, :c5660, :c5661, :c5662, :c5663, :c5664, :c5665, :c5666, :c5667, :c5668, :c5669, :c5670, :c5671, :c5672, :c5673, :c5674, :c5675, :c5676, :c5677, :c5678, :c5679, :c5680, :c5681, :c5682, :c5683, :c5684, :c5685, :c5686, :c5687, :c5688, :c5689, :c5690, :c5691, :c5692, :c5693, :c5694, :c5695, :c5696, :c5697, :c5698, :c5699, :c5700, :c5701, :c5702, :c5703, :c5704, :c5705, :c5706, :c5707, :c5708, :c5709, :c5710, :c5711, :c5712, :c5713, :c5714, :c5715, :c5716, :c5717, :c5718, :c5719, :c5720, :c5721, :c5722, :c5723, :c5724, :c5725, :c5726, :c5727, :c5728, :c5729, :c5730, :c5731, :c5732, :c5733, :c5734, :c5735, :c5736, :c5737, :c5738, :c5739, :c5740, :c5741, :c5742, :c5743, :c5744, :c5745, :c5746, :c5747, :c5748, :c5749, :c5750, :c5751, :c5752, :c5753, :c5754, :c5755, :c5756, :c5757, :c5758, :c5759, :c5760, :c5761, :c5762, :c5763, :c5764, :c5765, :c5766, :c5767, :c5768, :c5769, :c5770, :c5771, :c5772, :c5773, :c5774, :c5775, :c5776, :c5777, :c5778, :c5779, :c5780, :c5781, :c5782, :c5783, :c5784, :c5785, :c5786, :c5787, :c5788, :c5789, :c5790, :c5791, :c5792, :c5793, :c5794, :c5795, :c5796, :c5797, :c5798, :c5799, :c5800, :c5801, :c5802, :c5803, :c5804, :c5805, :c5806, :c5807, :c5808, :c5809, :c5810, :c5811, :c5812, :c5813, :c5814, :c5815, :c5816, :c5817, :c5818, :c5819, :c5820, :c5821, :c5822, :c5823, :c5824, :c5825, :c5826, :c5827, :c5828, :c5829, :c5830, :c5831, :c5832, :c5833, :c5834, :c5835, :c5836, :c5837, :c5838, :c5839, :c5840, :c5841, :c5842, :c5843, :c5844, :c5845, :c5846, :c5847, :c5848, :c5849, :c5850, :c5851, :c5852, :c5853, :c5854, :c5855, :c5856, :c5857, :c5858, :c5859, :c5860, :c5861, :c5862, :c5863, :c5864, :c5865, :c5866, :c5867, :c5868, :c5869, :c5870, :c5871, :c5872, :c5873, :c5874, :c5875, :c5876, :c5877, :c5878, :c5879, :c5880, :c5881, :c5882, :c5883, :c5884, :c5885, :c5886, :c5887, :c5888, :c5889, :c5890, :c5891, :c5892, :c5893, :c5894, :c5895, :c5896, :c5897, :c5898, :c5899, :c5900, :c5901, :c5902, :c5903, :c5904, :c5905, :c5906, :c5907, :c5908, :c5909, :c5910, :c5911, :c5912, :c5913, :c5914, :c5915, :c5916, :c5917, :c5918, :c5919, :c5920, :c5921, :c5922, :c5923, :c5924, :c5925, :c5926, :c5927, :c5928, :c5929, :c5930, :c5931, :c5932, :c5933, :c5934, :c5935, :c5936, :c5937, :c5938, :c5939, :c5940, :c5941, :c5942, :c5943, :c5944, :c5945, :c5946, :c5947, :c5948, :c5949, :c5950, :c5951, :c5952, :c5953, :c5954, :c5955, :c5956, :c5957, :c5958, :c5959, :c5960, :c5961, :c5962, :c5963, :c5964, :c5965, :c5966, :c5967, :c5968, :c5969, :c5970, :c5971, :c5972, :c5973, :c5974, :c5975, :c5976, :c5977, :c5978, :c5979, :c5980, :c5981, :c5982, :c5983, :c5984, :c5985, :c5986, :c5987, :c5988, :c5989, :c5990, :c5991, :c5992, :c5993, :c5994, :c5995, :c5996, :c5997, :c5998, :c5999, :c6000, :c6001, :c6002, :c6003, :c6004, :c6005, :c6006, :c6007, :c6008, :c6009, :c6010, :c6011, :c6012, :c6013, :c6014, :c6015, :c6016, :c6017, :c6018, :c6019, :c6020, :c6021, :c6022, :c6023, :c6024, :c6025, :c6026, :c6027, :c6028, :c6029, :c6030, :c6031, :c6032, :c6033, :c6034, :c6035, :c6036, :c6037, :c6038, :c6039, :c6040, :c6041, :c6042, :c6043, :c6044, :c6045, :c6046, :c6047, :c6048, :c6049, :c6050, :c6051, :c6052, :c6053, :c6054, :c6055, :c6056, :c6057, :c6058, :c6059, :c6060, :c6061, :c6062, :c6063, :c6064, :c6065, :c6066, :c6067, :c6068, :c6069, :c6070, :c6071, :c6072, :c6073, :c6074, :c6075, :c6076, :c6077, :c6078, :c6079, :c6080, :c6081, :c6082, :c6083, :c6084, :c6085, :c6086, :c6087, :c6088, :c6089, :c6090, :c6091, :c6092, :c6093, :c6094, :c6095, :c6096, :c6097, :c6098, :c6099, :c6100, :c6101, :c6102, :c6103, :c6104, :c6105, :c6106, :c6107, :c6108, :c6109, :c6110, :c6111, :c6112, :c6113, :c6114, :c6115, :c6116, :c6117, :c6118, :c6119, :c6120, :c6121, :c6122, :c6123, :c6124, :c6125, :c6126, :c6127, :c6128, :c6129, :c6130, :c6131, :c6132, :c6133, :c6134, :c6135, :c6136, :c6137, :c6138, :c6139, :c6140, :c6141, :c6142, :c6143, :c6144, :c6145, :c6146, :c6147, :c6148, :c6149, :c6150, :c6151, :c6152, :c6153, :c6154, :c6155, :c6156, :c6157, :c6158, :c6159, :c6160, :c6161, :c6162, :c6163, :c6164, :c6165, :c6166, :c6167, :c6168, :c6169, :c6170, :c6171, :c6172, :c6173, :c6174, :c6175, :c6176, :c6177, :c6178, :c6179, :c6180, :c6181, :c6182, :c6183, :c6184, :c6185, :c6186, :c6187, :c6188, :c6189, :c6190, :c6191, :c6192, :c6193, :c6194, :c6195, :c6196, :c6197, :c6198, :c6199, :c6200, :c6201, :c6202, :c6203, :c6204, :c6205, :c6206, :c6207, :c6208, :c6209, :c6210, :c6211, :c6212, :c6213, :c6214, :c6215, :c6216, :c6217, :c6218, :c6219, :c6220, :c6221, :c6222, :c6223, :c6224, :c6225, :c6226, :c6227, :c6228, :c6229, :c6230, :c6231, :c6232, :c6233, :c6234, :c6235, :c6236, :c6237, :c6238, :c6239, :c6240, :c6241, :c6242, :c6243, :c6244, :c6245, :c6246, :c6247, :c6248, :c6249, :c6250, :c6251, :c6252, :c6253, :c6254, :c6255, :c6256, :c6257, :c6258, :c6259, :c6260, :c6261, :c6262, :c6263, :c6264, :c6265, :c6266, :c6267, :c6268, :c6269, :c6270, :c6271, :c6272, :c6273, :c6274, :c6275, :c6276, :c6277, :c6278, :c6279, :c6280, :c6281, :c6282, :c6283, :c6284, :c6285, :c6286, :c6287, :c6288, :c6289, :c6290, :c6291, :c6292, :c6293, :c6294, :c6295, :c6296, :c6297, :c6298, :c6299, :c6300, :c6301, :c6302, :c6303, :c6304, :c6305, :c6306, :c6307, :c6308, :c6309, :c6310, :c6311, :c6312, :c6313, :c6314, :c6315, :c6316, :c6317, :c6318, :c6319, :c6320, :c6321, :c6322, :c6323, :c6324, :c6325, :c6326, :c6327, :c6328, :c6329, :c6330, :c6331, :c6332, :c6333, :c6334, :c6335, :c6336, :c6337, :c6338, :c6339, :c6340, :c6341, :c6342, :c6343, :c6344, :c6345, :c6346, :c6347, :c6348, :c6349, :c6350, :c6351, :c6352, :c6353, :c6354, :c6355, :c6356, :c6357, :c6358, :c6359, :c6360, :c6361, :c6362, :c6363, :c6364, :c6365, :c6366, :c6367, :c6368, :c6369, :c6370, :c6371, :c6372, :c6373, :c6374, :c6375, :c6376, :c6377, :c6378, :c6379, :c6380, :c6381, :c6382, :c6383, :c6384, :c6385, :c6386, :c6387, :c6388, :c6389, :c6390, :c6391, :c6392, :c6393, :c6394, :c6395, :c6396, :c6397, :c6398, :c6399, :c6400, :c6401, :c6402, :c6403, :c6404, :c6405, :c6406, :c6407, :c6408, :c6409, :c6410, :c6411, :c6412, :c6413, :c6414, :c6415, :c6416, :c6417, :c6418, :c6419, :c6420, :c6421, :c6422, :c6423, :c6424, :c6425, :c6426, :c6427, :c6428, :c6429, :c6430, :c6431, :c6432, :c6433, :c6434, :c6435, :c6436, :c6437, :c6438, :c6439, :c6440, :c6441, :c6442, :c6443, :c6444, :c6445, :c6446, :c6447, :c6448, :c6449, :c6450, :c6451, :c6452, :c6453, :c6454, :c6455, :c6456, :c6457, :c6458, :c6459, :c6460, :c6461, :c6462, :c6463, :c6464, :c6465, :c6466, :c6467, :c6468, :c6469, :c6470, :c6471, :c6472, :c6473, :c6474, :c6475, :c6476, :c6477, :c6478, :c6479, :c6480, :c6481, :c6482, :c6483, :c6484, :c6485, :c6486, :c6487, :c6488, :c6489, :c6490, :c6491, :c6492, :c6493, :c6494, :c6495, :c6496, :c6497, :c6498, :c6499, :c6500, :c6501, :c6502, :c6503, :c6504, :c6505, :c6506, :c6507, :c6508, :c6509, :c6510, :c6511, :c6512, :c6513, :c6514, :c6515, :c6516, :c6517, :c6518, :c6519, :c6520, :c6521, :c6522, :c6523, :c6524, :c6525, :c6526, :c6527, :c6528, :c6529, :c6530, :c6531, :c6532, :c6533, :c6534, :c6535, :c6536, :c6537, :c6538, :c6539, :c6540, :c6541, :c6542, :c6543, :c6544, :c6545, :c6546, :c6547, :c6548, :c6549, :c6550, :c6551, :c6552, :c6553, :c6554, :c6555, :c6556, :c6557, :c6558, :c6559, :c6560, :c6561, :c6562, :c6563, :c6564, :c6565, :c6566, :c6567, :c6568, :c6569, :c6570, :c6571, :c6572, :c6573, :c6574, :c6575, :c6576, :c6577, :c6578, :c6579, :c6580, :c6581, :c6582, :c6583, :c6584, :c6585, :c6586, :c6587, :c6588, :c6589, :c6590, :c6591, :c6592, :c6593, :c6594, :c6595, :c6596, :c6597, :c6598, :c6599, :c6600, :c6601, :c6602, :c6603, :c6604, :c6605, :c6606, :c6607, :c6608, :c6609, :c6610, :c6611, :c6612, :c6613, :c6614, :c6615, :c6616, :c6617, :c6618, :c6619, :c6620, :c6621, :c6622, :c6623, :c6624, :c6625, :c6626, :c6627, :c6628, :c6629, :c6630, :c6631, :c6632, :c6633, :c6634, :c6635, :c6636, :c6637, :c6638, :c6639, :c6640, :c6641, :c6642, :c6643, :c6644, :c6645, :c6646, :c6647, :c6648, :c6649, :c6650, :c6651, :c6652, :c6653, :c6654, :c6655, :c6656, :c6657, :c6658, :c6659, :c6660, :c6661, :c6662, :c6663, :c6664, :c6665, :c6666, :c6667, :c6668, :c6669, :c6670, :c6671, :c6672, :c6673, :c6674, :c6675, :c6676, :c6677, :c6678, :c6679, :c6680, :c6681, :c6682, :c6683, :c6684, :c6685, :c6686, :c6687, :c6688, :c6689, :c6690, :c6691, :c6692, :c6693, :c6694, :c6695, :c6696, :c6697, :c6698, :c6699, :c6700, :c6701, :c6702, :c6703, :c6704, :c6705, :c6706, :c6707, :c6708, :c6709, :c6710, :c6711, :c6712, :c6713, :c6714, :c6715, :c6716, :c6717, :c6718, :c6719, :c6720, :c6721, :c6722, :c6723, :c6724, :c6725, :c6726, :c6727, :c6728, :c6729, :c6730, :c6731, :c6732, :c6733, :c6734, :c6735, :c6736, :c6737, :c6738, :c6739, :c6740, :c6741, :c6742, :c6743, :c6744, :c6745, :c6746, :c6747, :c6748, :c6749, :c6750, :c6751, :c6752, :c6753, :c6754, :c6755, :c6756, :c6757, :c6758, :c6759, :c6760, :c6761, :c6762, :c6763, :c6764, :c6765, :c6766, :c6767, :c6768, :c6769, :c6770, :c6771, :c6772, :c6773, :c6774, :c6775, :c6776, :c6777, :c6778, :c6779, :c6780, :c6781, :c6782, :c6783, :c6784, :c6785, :c6786, :c6787, :c6788, :c6789, :c6790, :c6791, :c6792, :c6793, :c6794, :c6795, :c6796, :c6797, :c6798, :c6799, :c6800, :c6801, :c6802, :c6803, :c6804, :c6805, :c6806, :c6807, :c6808, :c6809, :c6810, :c6811, :c6812, :c6813, :c6814, :c6815, :c6816, :c6817, :c6818, :c6819, :c6820, :c6821, :c6822, :c6823, :c6824, :c6825, :c6826, :c6827, :c6828, :c6829, :c6830, :c6831, :c6832, :c6833, :c6834, :c6835, :c6836, :c6837, :c6838, :c6839, :c6840, :c6841, :c6842, :c6843, :c6844, :c6845, :c6846, :c6847, :c6848, :c6849, :c6850, :c6851, :c6852, :c6853, :c6854, :c6855, :c6856, :c6857, :c6858, :c6859, :c6860, :c6861, :c6862, :c6863, :c6864, :c6865, :c6866, :c6867, :c6868, :c6869, :c6870, :c6871, :c6872, :c6873, :c6874, :c6875, :c6876, :c6877, :c6878, :c6879, :c6880, :c6881, :c6882, :c6883, :c6884, :c6885, :c6886, :c6887, :c6888, :c6889, :c6890, :c6891, :c6892, :c6893, :c6894, :c6895, :c6896, :c6897, :c6898, :c6899, :c6900, :c6901, :c6902, :c6903, :c6904, :c6905, :c6906, :c6907, :c6908, :c6909, :c6910, :c6911, :c6912, :c6913, :c6914, :c6915, :c6916, :c6917, :c6918, :c6919, :c6920, :c6921, :c6922, :c6923, :c6924, :c6925, :c6926, :c6927, :c6928, :c6929, :c6930, :c6931, :c6932, :c6933, :c6934, :c6935, :c6936, :c6937, :c6938, :c6939, :c6940, :c6941, :c6942, :c6943, :c6944, :c6945, :c6946, :c6947, :c6948, :c6949, :c6950, :c6951, :c6952, :c6953, :c6954, :c6955, :c6956, :c6957, :c6958, :c6959, :c6960, :c6961, :c6962, :c6963, :c6964, :c6965, :c6966, :c6967, :c6968, :c6969, :c6970, :c6971, :c6972, :c6973, :c6974, :c6975, :c6976, :c6977, :c6978, :c6979, :c6980, :c6981, :c6982, :c6983, :c6984, :c6985, :c6986, :c6987, :c6988, :c6989, :c6990, :c6991, :c6992, :c6993, :c6994, :c6995, :c6996, :c6997, :c6998, :c6999, :c7000, :c7001, :c7002, :c7003, :c7004, :c7005, :c7006, :c7007, :c7008, :c7009, :c7010, :c7011, :c7012, :c7013, :c7014, :c7015, :c7016, :c7017, :c7018, :c7019, :c7020, :c7021, :c7022, :c7023, :c7024, :c7025, :c7026, :c7027, :c7028, :c7029, :c7030, :c7031, :c7032, :c7033, :c7034, :c7035, :c7036, :c7037, :c7038, :c7039, :c7040, :c7041, :c7042, :c7043, :c7044, :c7045, :c7046, :c7047, :c7048, :c7049, :c7050, :c7051, :c7052, :c7053, :c7054, :c7055, :c7056, :c7057, :c7058, :c7059, :c7060, :c7061, :c7062, :c7063, :c7064, :c7065, :c7066, :c7067, :c7068, :c7069, :c7070, :c7071, :c7072, :c7073, :c7074, :c7075, :c7076, :c7077, :c7078, :c7079, :c7080, :c7081, :c7082, :c7083, :c7084, :c7085, :c7086, :c7087, :c7088, :c7089, :c7090, :c7091, :c7092, :c7093, :c7094, :c7095, :c7096, :c7097, :c7098, :c7099, :c7100, :c7101, :c7102, :c7103, :c7104, :c7105, :c7106, :c7107, :c7108, :c7109, :c7110, :c7111, :c7112, :c7113, :c7114, :c7115, :c7116, :c7117, :c7118, :c7119, :c7120, :c7121, :c7122, :c7123, :c7124, :c7125, :c7126, :c7127, :c7128, :c7129, :c7130, :c7131, :c7132, :c7133, :c7134, :c7135, :c7136, :c7137, :c7138, :c7139, :c7140, :c7141, :c7142, :c7143, :c7144, :c7145, :c7146, :c7147, :c7148, :c7149, :c7150, :c7151, :c7152, :c7153, :c7154, :c7155, :c7156, :c7157, :c7158, :c7159, :c7160, :c7161, :c7162, :c7163, :c7164, :c7165, :c7166, :c7167, :c7168, :c7169, :c7170, :c7171, :c7172, :c7173, :c7174, :c7175, :c7176, :c7177, :c7178, :c7179, :c7180, :c7181, :c7182, :c7183, :c7184, :c7185, :c7186, :c7187, :c7188, :c7189, :c7190, :c7191, :c7192, :c7193, :c7194, :c7195, :c7196, :c7197, :c7198, :c7199, :c7200, :c7201, :c7202, :c7203, :c7204, :c7205, :c7206, :c7207, :c7208, :c7209, :c7210, :c7211, :c7212, :c7213, :c7214, :c7215, :c7216, :c7217, :c7218, :c7219, :c7220, :c7221, :c7222, :c7223, :c7224, :c7225, :c7226, :c7227, :c7228, :c7229, :c7230, :c7231, :c7232, :c7233, :c7234, :c7235, :c7236, :c7237, :c7238, :c7239, :c7240, :c7241, :c7242, :c7243, :c7244, :c7245, :c7246, :c7247, :c7248, :c7249, :c7250, :c7251, :c7252, :c7253, :c7254, :c7255, :c7256, :c7257, :c7258, :c7259, :c7260, :c7261, :c7262, :c7263, :c7264, :c7265, :c7266, :c7267, :c7268, :c7269, :c7270, :c7271, :c7272, :c7273, :c7274, :c7275, :c7276, :c7277, :c7278, :c7279, :c7280, :c7281, :c7282, :c7283, :c7284, :c7285, :c7286, :c7287, :c7288, :c7289, :c7290, :c7291, :c7292, :c7293, :c7294, :c7295, :c7296, :c7297, :c7298, :c7299, :c7300, :c7301, :c7302, :c7303, :c7304, :c7305, :c7306, :c7307, :c7308, :c7309, :c7310, :c7311, :c7312, :c7313, :c7314, :c7315, :c7316, :c7317, :c7318, :c7319, :c7320, :c7321, :c7322, :c7323, :c7324, :c7325, :c7326, :c7327, :c7328, :c7329, :c7330, :c7331, :c7332, :c7333, :c7334, :c7335, :c7336, :c7337, :c7338, :c7339, :c7340, :c7341, :c7342, :c7343, :c7344, :c7345, :c7346, :c7347, :c7348, :c7349, :c7350, :c7351, :c7352, :c7353, :c7354, :c7355, :c7356, :c7357, :c7358, :c7359, :c7360, :c7361, :c7362, :c7363, :c7364, :c7365, :c7366, :c7367, :c7368, :c7369, :c7370, :c7371, :c7372, :c7373, :c7374, :c7375, :c7376, :c7377, :c7378, :c7379, :c7380, :c7381, :c7382, :c7383, :c7384, :c7385, :c7386, :c7387, :c7388, :c7389, :c7390, :c7391, :c7392, :c7393, :c7394, :c7395, :c7396, :c7397, :c7398, :c7399, :c7400, :c7401, :c7402, :c7403, :c7404, :c7405, :c7406, :c7407, :c7408, :c7409, :c7410, :c7411, :c7412, :c7413, :c7414, :c7415, :c7416, :c7417, :c7418, :c7419, :c7420, :c7421, :c7422, :c7423, :c7424, :c7425, :c7426, :c7427, :c7428, :c7429, :c7430, :c7431, :c7432, :c7433, :c7434, :c7435, :c7436, :c7437, :c7438, :c7439, :c7440, :c7441, :c7442, :c7443, :c7444, :c7445, :c7446, :c7447, :c7448, :c7449, :c7450, :c7451, :c7452, :c7453, :c7454, :c7455, :c7456, :c7457, :c7458, :c7459, :c7460, :c7461, :c7462, :c7463, :c7464, :c7465, :c7466, :c7467, :c7468, :c7469, :c7470, :c7471, :c7472, :c7473, :c7474, :c7475, :c7476, :c7477, :c7478, :c7479, :c7480, :c7481, :c7482, :c7483, :c7484, :c7485, :c7486, :c7487, :c7488, :c7489, :c7490, :c7491, :c7492, :c7493, :c7494, :c7495, :c7496, :c7497, :c7498, :c7499, :c7500, :c7501, :c7502, :c7503, :c7504, :c7505, :c7506, :c7507, :c7508, :c7509, :c7510, :c7511, :c7512, :c7513, :c7514, :c7515, :c7516, :c7517, :c7518, :c7519, :c7520, :c7521, :c7522, :c7523, :c7524, :c7525, :c7526, :c7527, :c7528, :c7529, :c7530, :c7531, :c7532, :c7533, :c7534, :c7535, :c7536, :c7537, :c7538, :c7539, :c7540, :c7541, :c7542, :c7543, :c7544, :c7545, :c7546, :c7547, :c7548, :c7549, :c7550, :c7551, :c7552, :c7553, :c7554, :c7555, :c7556, :c7557, :c7558, :c7559, :c7560, :c7561, :c7562, :c7563, :c7564, :c7565, :c7566, :c7567, :c7568, :c7569, :c7570, :c7571, :c7572, :c7573, :c7574, :c7575, :c7576, :c7577, :c7578, :c7579, :c7580, :c7581, :c7582, :c7583, :c7584, :c7585, :c7586, :c7587, :c7588, :c7589, :c7590, :c7591, :c7592, :c7593, :c7594, :c7595, :c7596, :c7597, :c7598, :c7599, :c7600, :c7601, :c7602, :c7603, :c7604, :c7605, :c7606, :c7607, :c7608, :c7609, :c7610, :c7611, :c7612, :c7613, :c7614, :c7615, :c7616, :c7617, :c7618, :c7619, :c7620, :c7621, :c7622, :c7623, :c7624, :c7625, :c7626, :c7627, :c7628, :c7629, :c7630, :c7631, :c7632, :c7633, :c7634, :c7635, :c7636, :c7637, :c7638, :c7639, :c7640, :c7641, :c7642, :c7643, :c7644, :c7645, :c7646, :c7647, :c7648, :c7649, :c7650, :c7651, :c7652, :c7653, :c7654, :c7655, :c7656, :c7657, :c7658, :c7659, :c7660, :c7661, :c7662, :c7663, :c7664, :c7665, :c7666, :c7667, :c7668, :c7669, :c7670, :c7671, :c7672, :c7673, :c7674, :c7675, :c7676, :c7677, :c7678, :c7679, :c7680, :c7681, :c7682, :c7683, :c7684, :c7685, :c7686, :c7687, :c7688, :c7689, :c7690, :c7691, :c7692, :c7693, :c7694, :c7695, :c7696, :c7697, :c7698, :c7699, :c7700, :c7701, :c7702, :c7703, :c7704, :c7705, :c7706, :c7707, :c7708, :c7709, :c7710, :c7711, :c7712, :c7713, :c7714, :c7715, :c7716, :c7717, :c7718, :c7719, :c7720, :c7721, :c7722, :c7723, :c7724, :c7725, :c7726, :c7727, :c7728, :c7729, :c7730, :c7731, :c7732, :c7733, :c7734, :c7735, :c7736, :c7737, :c7738, :c7739, :c7740, :c7741, :c7742, :c7743, :c7744, :c7745, :c7746, :c7747, :c7748, :c7749, :c7750, :c7751, :c7752, :c7753, :c7754, :c7755, :c7756, :c7757, :c7758, :c7759, :c7760, :c7761, :c7762, :c7763, :c7764, :c7765, :c7766, :c7767, :c7768, :c7769, :c7770, :c7771, :c7772, :c7773, :c7774, :c7775, :c7776, :c7777, :c7778, :c7779, :c7780, :c7781, :c7782, :c7783, :c7784, :c7785, :c7786, :c7787, :c7788, :c7789, :c7790, :c7791, :c7792, :c7793, :c7794, :c7795, :c7796, :c7797, :c7798, :c7799, :c7800, :c7801, :c7802, :c7803, :c7804, :c7805, :c7806, :c7807, :c7808, :c7809, :c7810, :c7811, :c7812, :c7813, :c7814, :c7815, :c7816, :c7817, :c7818, :c7819, :c7820, :c7821, :c7822, :c7823, :c7824, :c7825, :c7826, :c7827, :c7828, :c7829, :c7830, :c7831, :c7832, :c7833, :c7834, :c7835, :c7836, :c7837, :c7838, :c7839, :c7840, :c7841, :c7842, :c7843, :c7844, :c7845, :c7846, :c7847, :c7848, :c7849, :c7850, :c7851, :c7852, :c7853, :c7854, :c7855, :c7856, :c7857, :c7858, :c7859, :c7860, :c7861, :c7862, :c7863, :c7864, :c7865, :c7866, :c7867, :c7868, :c7869, :c7870, :c7871, :c7872, :c7873, :c7874, :c7875, :c7876, :c7877, :c7878, :c7879, :c7880, :c7881, :c7882, :c7883, :c7884, :c7885, :c7886, :c7887, :c7888, :c7889, :c7890, :c7891, :c7892, :c7893, :c7894, :c7895, :c7896, :c7897, :c7898, :c7899, :c7900, :c7901, :c7902, :c7903, :c7904, :c7905, :c7906, :c7907, :c7908, :c7909, :c7910, :c7911, :c7912, :c7913, :c7914, :c7915, :c7916, :c7917, :c7918, :c7919, :c7920, :c7921, :c7922, :c7923, :c7924, :c7925, :c7926, :c7927, :c7928, :c7929, :c7930, :c7931, :c7932, :c7933, :c7934, :c7935, :c7936, :c7937, :c7938, :c7939, :c7940, :c7941, :c7942, :c7943, :c7944, :c7945, :c7946, :c7947, :c7948, :c7949, :c7950, :c7951, :c7952, :c7953, :c7954, :c7955, :c7956, :c7957, :c7958, :c7959, :c7960, :c7961, :c7962, :c7963, :c7964, :c7965, :c7966, :c7967, :c7968, :c7969, :c7970, :c7971, :c7972, :c7973, :c7974, :c7975, :c7976, :c7977, :c7978, :c7979, :c7980, :c7981, :c7982, :c7983, :c7984, :c7985, :c7986, :c7987, :c7988, :c7989, :c7990, :c7991, :c7992, :c7993, :c7994, :c7995, :c7996, :c7997, :c7998, :c7999, :c8000, :c8001, :c8002, :c8003, :c8004, :c8005, :c8006, :c8007, :c8008, :c8009, :c8010, :c8011, :c8012, :c8013, :c8014, :c8015, :c8016, :c8017, :c8018, :c8019, :c8020, :c8021, :c8022, :c8023, :c8024, :c8025, :c8026, :c8027, :c8028, :c8029, :c8030, :c8031, :c8032, :c8033, :c8034, :c8035, :c8036, :c8037, :c8038, :c8039, :c8040, :c8041, :c8042, :c8043, :c8044, :c8045, :c8046, :c8047, :c8048, :c8049, :c8050, :c8051, :c8052, :c8053, :c8054, :c8055, :c8056, :c8057, :c8058, :c8059, :c8060, :c8061, :c8062, :c8063, :c8064, :c8065, :c8066, :c8067, :c8068, :c8069, :c8070, :c8071, :c8072, :c8073, :c8074, :c8075, :c8076, :c8077, :c8078, :c8079, :c8080, :c8081, :c8082, :c8083, :c8084, :c8085, :c8086, :c8087, :c8088, :c8089, :c8090, :c8091, :c8092, :c8093, :c8094, :c8095, :c8096, :c8097, :c8098, :c8099, :c8100, :c8101, :c8102, :c8103, :c8104, :c8105, :c8106, :c8107, :c8108, :c8109, :c8110, :c8111, :c8112, :c8113, :c8114, :c8115, :c8116, :c8117, :c8118, :c8119, :c8120, :c8121, :c8122, :c8123, :c8124, :c8125, :c8126, :c8127, :c8128, :c8129, :c8130, :c8131, :c8132, :c8133, :c8134, :c8135, :c8136, :c8137, :c8138, :c8139, :c8140, :c8141, :c8142, :c8143, :c8144, :c8145, :c8146, :c8147, :c8148, :c8149, :c8150, :c8151, :c8152, :c8153, :c8154, :c8155, :c8156, :c8157, :c8158, :c8159, :c8160, :c8161, :c8162, :c8163, :c8164, :c8165, :c8166, :c8167, :c8168, :c8169, :c8170, :c8171, :c8172, :c8173, :c8174, :c8175, :c8176, :c8177, :c8178, :c8179, :c8180, :c8181, :c8182, :c8183, :c8184, :c8185, :c8186, :c8187, :c8188, :c8189, :c8190, :c8191, :c8192, :c8193, :c8194, :c8195, :c8196, :c8197, :c8198, :c8199, :c8200, :c8201, :c8202, :c8203, :c8204, :c8205, :c8206, :c8207, :c8208, :c8209, :c8210, :c8211, :c8212, :c8213, :c8214, :c8215, :c8216, :c8217, :c8218, :c8219, :c8220, :c8221, :c8222, :c8223, :c8224, :c8225, :c8226, :c8227, :c8228, :c8229, :c8230, :c8231, :c8232, :c8233, :c8234, :c8235, :c8236, :c8237, :c8238, :c8239, :c8240, :c8241, :c8242, :c8243, :c8244, :c8245, :c8246, :c8247, :c8248, :c8249, :c8250, :c8251, :c8252, :c8253, :c8254, :c8255, :c8256, :c8257, :c8258, :c8259, :c8260, :c8261, :c8262, :c8263, :c8264, :c8265, :c8266, :c8267, :c8268, :c8269, :c8270, :c8271, :c8272, :c8273, :c8274, :c8275, :c8276, :c8277, :c8278, :c8279, :c8280, :c8281, :c8282, :c8283, :c8284, :c8285, :c8286, :c8287, :c8288, :c8289, :c8290, :c8291, :c8292, :c8293, :c8294, :c8295, :c8296, :c8297, :c8298, :c8299, :c8300, :c8301, :c8302, :c8303, :c8304, :c8305, :c8306, :c8307, :c8308, :c8309, :c8310, :c8311, :c8312, :c8313, :c8314, :c8315, :c8316, :c8317, :c8318, :c8319, :c8320, :c8321, :c8322, :c8323, :c8324, :c8325, :c8326, :c8327, :c8328, :c8329, :c8330, :c8331, :c8332, :c8333, :c8334, :c8335, :c8336, :c8337, :c8338, :c8339, :c8340, :c8341, :c8342, :c8343, :c8344, :c8345, :c8346, :c8347, :c8348, :c8349, :c8350, :c8351, :c8352, :c8353, :c8354, :c8355, :c8356, :c8357, :c8358, :c8359, :c8360, :c8361, :c8362, :c8363, :c8364, :c8365, :c8366, :c8367, :c8368, :c8369, :c8370, :c8371, :c8372, :c8373, :c8374, :c8375, :c8376, :c8377, :c8378, :c8379, :c8380, :c8381, :c8382, :c8383, :c8384, :c8385, :c8386, :c8387, :c8388, :c8389, :c8390, :c8391, :c8392, :c8393, :c8394, :c8395, :c8396, :c8397, :c8398, :c8399, :c8400, :c8401, :c8402, :c8403, :c8404, :c8405, :c8406, :c8407, :c8408, :c8409, :c8410, :c8411, :c8412, :c8413, :c8414, :c8415, :c8416, :c8417, :c8418, :c8419, :c8420, :c8421, :c8422, :c8423, :c8424, :c8425, :c8426, :c8427, :c8428, :c8429, :c8430, :c8431, :c8432, :c8433, :c8434, :c8435, :c8436, :c8437, :c8438, :c8439, :c8440, :c8441, :c8442, :c8443, :c8444, :c8445, :c8446, :c8447, :c8448, :c8449, :c8450, :c8451, :c8452, :c8453, :c8454, :c8455, :c8456, :c8457, :c8458, :c8459, :c8460, :c8461, :c8462, :c8463, :c8464, :c8465, :c8466, :c8467, :c8468, :c8469, :c8470, :c8471, :c8472, :c8473, :c8474, :c8475, :c8476, :c8477, :c8478, :c8479, :c8480, :c8481, :c8482, :c8483, :c8484, :c8485, :c8486, :c8487, :c8488, :c8489, :c8490, :c8491, :c8492, :c8493, :c8494, :c8495, :c8496, :c8497, :c8498, :c8499, :c8500, :c8501, :c8502, :c8503, :c8504, :c8505, :c8506, :c8507, :c8508, :c8509, :c8510, :c8511, :c8512, :c8513, :c8514, :c8515, :c8516, :c8517, :c8518, :c8519, :c8520, :c8521, :c8522, :c8523, :c8524, :c8525, :c8526, :c8527, :c8528, :c8529, :c8530, :c8531, :c8532, :c8533, :c8534, :c8535, :c8536, :c8537, :c8538, :c8539, :c8540, :c8541, :c8542, :c8543, :c8544, :c8545, :c8546, :c8547, :c8548, :c8549, :c8550, :c8551, :c8552, :c8553, :c8554, :c8555, :c8556, :c8557, :c8558, :c8559, :c8560, :c8561, :c8562, :c8563, :c8564, :c8565, :c8566, :c8567, :c8568, :c8569, :c8570, :c8571, :c8572, :c8573, :c8574, :c8575, :c8576, :c8577, :c8578, :c8579, :c8580, :c8581, :c8582, :c8583, :c8584, :c8585, :c8586, :c8587, :c8588, :c8589, :c8590, :c8591, :c8592, :c8593, :c8594, :c8595, :c8596, :c8597, :c8598, :c8599, :c8600, :c8601, :c8602, :c8603, :c8604, :c8605, :c8606, :c8607, :c8608, :c8609, :c8610, :c8611, :c8612, :c8613, :c8614, :c8615, :c8616, :c8617, :c8618, :c8619, :c8620, :c8621, :c8622, :c8623, :c8624, :c8625, :c8626, :c8627, :c8628, :c8629, :c8630, :c8631, :c8632, :c8633, :c8634, :c8635, :c8636, :c8637, :c8638, :c8639, :c8640, :c8641, :c8642, :c8643, :c8644, :c8645, :c8646, :c8647, :c8648, :c8649, :c8650, :c8651, :c8652, :c8653, :c8654, :c8655, :c8656, :c8657, :c8658, :c8659, :c8660, :c8661, :c8662, :c8663, :c8664, :c8665, :c8666, :c8667, :c8668, :c8669, :c8670, :c8671, :c8672, :c8673, :c8674, :c8675, :c8676, :c8677, :c8678, :c8679, :c8680, :c8681, :c8682, :c8683, :c8684, :c8685, :c8686, :c8687, :c8688, :c8689, :c8690, :c8691, :c8692, :c8693, :c8694, :c8695, :c8696, :c8697, :c8698, :c8699, :c8700, :c8701, :c8702, :c8703, :c8704, :c8705, :c8706, :c8707, :c8708, :c8709, :c8710, :c8711, :c8712, :c8713, :c8714, :c8715, :c8716, :c8717, :c8718, :c8719, :c8720, :c8721, :c8722, :c8723, :c8724, :c8725, :c8726, :c8727, :c8728, :c8729, :c8730, :c8731, :c8732, :c8733, :c8734, :c8735, :c8736, :c8737, :c8738, :c8739, :c8740, :c8741, :c8742, :c8743, :c8744, :c8745, :c8746, :c8747, :c8748, :c8749, :c8750, :c8751, :c8752, :c8753, :c8754, :c8755, :c8756, :c8757, :c8758, :c8759, :c8760, :c8761, :c8762, :c8763, :c8764, :c8765, :c8766, :c8767, :c8768, :c8769, :c8770, :c8771, :c8772, :c8773, :c8774, :c8775, :c8776, :c8777, :c8778, :c8779, :c8780, :c8781, :c8782, :c8783, :c8784, :c8785, :c8786, :c8787, :c8788, :c8789, :c8790, :c8791, :c8792, :c8793, :c8794, :c8795, :c8796, :c8797, :c8798, :c8799, :c8800, :c8801, :c8802, :c8803, :c8804, :c8805, :c8806, :c8807, :c8808, :c8809, :c8810, :c8811, :c8812, :c8813, :c8814, :c8815, :c8816, :c8817, :c8818, :c8819, :c8820, :c8821, :c8822, :c8823, :c8824, :c8825, :c8826, :c8827, :c8828, :c8829, :c8830, :c8831, :c8832, :c8833, :c8834, :c8835, :c8836, :c8837, :c8838, :c8839, :c8840, :c8841, :c8842, :c8843, :c8844, :c8845, :c8846, :c8847, :c8848, :c8849, :c8850, :c8851, :c8852, :c8853, :c8854, :c8855, :c8856, :c8857, :c8858, :c8859, :c8860, :c8861, :c8862, :c8863, :c8864, :c8865, :c8866, :c8867, :c8868, :c8869, :c8870, :c8871, :c8872, :c8873, :c8874, :c8875, :c8876, :c8877, :c8878, :c8879, :c8880, :c8881, :c8882, :c8883, :c8884, :c8885, :c8886, :c8887, :c8888, :c8889, :c8890, :c8891, :c8892, :c8893, :c8894, :c8895, :c8896, :c8897, :c8898, :c8899, :c8900, :c8901, :c8902, :c8903, :c8904, :c8905, :c8906, :c8907, :c8908, :c8909, :c8910, :c8911, :c8912, :c8913, :c8914, :c8915, :c8916, :c8917, :c8918, :c8919, :c8920, :c8921, :c8922, :c8923, :c8924, :c8925, :c8926, :c8927, :c8928, :c8929, :c8930, :c8931, :c8932, :c8933, :c8934, :c8935, :c8936, :c8937, :c8938, :c8939, :c8940, :c8941, :c8942, :c8943, :c8944, :c8945, :c8946, :c8947, :c8948, :c8949, :c8950, :c8951, :c8952, :c8953, :c8954, :c8955, :c8956, :c8957, :c8958, :c8959, :c8960, :c8961, :c8962, :c8963, :c8964, :c8965, :c8966, :c8967, :c8968, :c8969, :c8970, :c8971, :c8972, :c8973, :c8974, :c8975, :c8976, :c8977, :c8978, :c8979, :c8980, :c8981, :c8982, :c8983, :c8984, :c8985, :c8986, :c8987, :c8988, :c8989, :c8990, :c8991, :c8992, :c8993, :c8994, :c8995, :c8996, :c8997, :c8998, :c8999, :c9000, :c9001, :c9002, :c9003, :c9004, :c9005, :c9006, :c9007, :c9008, :c9009, :c9010, :c9011, :c9012, :c9013, :c9014, :c9015, :c9016, :c9017, :c9018, :c9019, :c9020, :c9021, :c9022, :c9023, :c9024, :c9025, :c9026, :c9027, :c9028, :c9029, :c9030, :c9031, :c9032, :c9033, :c9034, :c9035, :c9036, :c9037, :c9038, :c9039, :c9040, :c9041, :c9042, :c9043, :c9044, :c9045, :c9046, :c9047, :c9048, :c9049, :c9050, :c9051, :c9052, :c9053, :c9054, :c9055, :c9056, :c9057, :c9058, :c9059, :c9060, :c9061, :c9062, :c9063, :c9064, :c9065, :c9066, :c9067, :c9068, :c9069, :c9070, :c9071, :c9072, :c9073, :c9074, :c9075, :c9076, :c9077, :c9078, :c9079, :c9080, :c9081, :c9082, :c9083, :c9084, :c9085, :c9086, :c9087, :c9088, :c9089, :c9090, :c9091, :c9092, :c9093, :c9094, :c9095, :c9096, :c9097, :c9098, :c9099, :c9100, :c9101, :c9102, :c9103, :c9104, :c9105, :c9106, :c9107, :c9108, :c9109, :c9110, :c9111, :c9112, :c9113, :c9114, :c9115, :c9116, :c9117, :c9118, :c9119, :c9120, :c9121, :c9122, :c9123, :c9124, :c9125, :c9126, :c9127, :c9128, :c9129, :c9130, :c9131, :c9132, :c9133, :c9134, :c9135, :c9136, :c9137, :c9138, :c9139, :c9140, :c9141, :c9142, :c9143, :c9144, :c9145, :c9146, :c9147, :c9148, :c9149, :c9150, :c9151, :c9152, :c9153, :c9154, :c9155, :c9156, :c9157, :c9158, :c9159, :c9160, :c9161, :c9162, :c9163, :c9164, :c9165, :c9166, :c9167, :c9168, :c9169, :c9170, :c9171, :c9172, :c9173, :c9174, :c9175, :c9176, :c9177, :c9178, :c9179, :c9180, :c9181, :c9182, :c9183, :c9184, :c9185, :c9186, :c9187, :c9188, :c9189, :c9190, :c9191, :c9192, :c9193, :c9194, :c9195, :c9196, :c9197, :c9198, :c9199, :c9200, :c9201, :c9202, :c9203, :c9204, :c9205, :c9206, :c9207, :c9208, :c9209, :c9210, :c9211, :c9212, :c9213, :c9214, :c9215, :c9216, :c9217, :c9218, :c9219, :c9220, :c9221, :c9222, :c9223, :c9224, :c9225, :c9226, :c9227, :c9228, :c9229, :c9230, :c9231, :c9232, :c9233, :c9234, :c9235, :c9236, :c9237, :c9238, :c9239, :c9240, :c9241, :c9242, :c9243, :c9244, :c9245, :c9246, :c9247, :c9248, :c9249, :c9250, :c9251, :c9252, :c9253, :c9254, :c9255, :c9256, :c9257, :c9258, :c9259, :c9260, :c9261, :c9262, :c9263, :c9264, :c9265, :c9266, :c9267, :c9268, :c9269, :c9270, :c9271, :c9272, :c9273, :c9274, :c9275, :c9276, :c9277, :c9278, :c9279, :c9280, :c9281, :c9282, :c9283, :c9284, :c9285, :c9286, :c9287, :c9288, :c9289, :c9290, :c9291, :c9292, :c9293, :c9294, :c9295, :c9296, :c9297, :c9298, :c9299, :c9300, :c9301, :c9302, :c9303, :c9304, :c9305, :c9306, :c9307, :c9308, :c9309, :c9310, :c9311, :c9312, :c9313, :c9314, :c9315, :c9316, :c9317, :c9318, :c9319, :c9320, :c9321, :c9322, :c9323, :c9324, :c9325, :c9326, :c9327, :c9328, :c9329, :c9330, :c9331, :c9332, :c9333, :c9334, :c9335, :c9336, :c9337, :c9338, :c9339, :c9340, :c9341, :c9342, :c9343, :c9344, :c9345, :c9346, :c9347, :c9348, :c9349, :c9350, :c9351, :c9352, :c9353, :c9354, :c9355, :c9356, :c9357, :c9358, :c9359, :c9360, :c9361, :c9362, :c9363, :c9364, :c9365, :c9366, :c9367, :c9368, :c9369, :c9370, :c9371, :c9372, :c9373, :c9374, :c9375, :c9376, :c9377, :c9378, :c9379, :c9380, :c9381, :c9382, :c9383, :c9384, :c9385, :c9386, :c9387, :c9388, :c9389, :c9390, :c9391, :c9392, :c9393, :c9394, :c9395, :c9396, :c9397, :c9398, :c9399, :c9400, :c9401, :c9402, :c9403, :c9404, :c9405, :c9406, :c9407, :c9408, :c9409, :c9410, :c9411, :c9412, :c9413, :c9414, :c9415, :c9416, :c9417, :c9418, :c9419, :c9420, :c9421, :c9422, :c9423, :c9424, :c9425, :c9426, :c9427, :c9428, :c9429, :c9430, :c9431, :c9432, :c9433, :c9434, :c9435, :c9436, :c9437, :c9438, :c9439, :c9440, :c9441, :c9442, :c9443, :c9444, :c9445, :c9446, :c9447, :c9448, :c9449, :c9450, :c9451, :c9452, :c9453, :c9454, :c9455, :c9456, :c9457, :c9458, :c9459, :c9460, :c9461, :c9462, :c9463, :c9464, :c9465, :c9466, :c9467, :c9468, :c9469, :c9470, :c9471, :c9472, :c9473, :c9474, :c9475, :c9476, :c9477, :c9478, :c9479, :c9480, :c9481, :c9482, :c9483, :c9484, :c9485, :c9486, :c9487, :c9488, :c9489, :c9490, :c9491, :c9492, :c9493, :c9494, :c9495, :c9496, :c9497, :c9498, :c9499, :c9500, :c9501, :c9502, :c9503, :c9504, :c9505, :c9506, :c9507, :c9508, :c9509, :c9510, :c9511, :c9512, :c9513, :c9514, :c9515, :c9516, :c9517, :c9518, :c9519, :c9520, :c9521, :c9522, :c9523, :c9524, :c9525, :c9526, :c9527, :c9528, :c9529, :c9530, :c9531, :c9532, :c9533, :c9534, :c9535, :c9536, :c9537, :c9538, :c9539, :c9540, :c9541, :c9542, :c9543, :c9544, :c9545, :c9546, :c9547, :c9548, :c9549, :c9550, :c9551, :c9552, :c9553, :c9554, :c9555, :c9556, :c9557, :c9558, :c9559, :c9560, :c9561, :c9562, :c9563, :c9564, :c9565, :c9566, :c9567, :c9568, :c9569, :c9570, :c9571, :c9572, :c9573, :c9574, :c9575, :c9576, :c9577, :c9578, :c9579, :c9580, :c9581, :c9582, :c9583, :c9584, :c9585, :c9586, :c9587, :c9588, :c9589, :c9590, :c9591, :c9592, :c9593, :c9594, :c9595, :c9596, :c9597, :c9598, :c9599, :c9600, :c9601, :c9602, :c9603, :c9604, :c9605, :c9606, :c9607, :c9608, :c9609, :c9610, :c9611, :c9612, :c9613, :c9614, :c9615, :c9616, :c9617, :c9618, :c9619, :c9620, :c9621, :c9622, :c9623, :c9624, :c9625, :c9626, :c9627, :c9628, :c9629, :c9630, :c9631, :c9632, :c9633, :c9634, :c9635, :c9636, :c9637, :c9638, :c9639, :c9640, :c9641, :c9642, :c9643, :c9644, :c9645, :c9646, :c9647, :c9648, :c9649, :c9650, :c9651, :c9652, :c9653, :c9654, :c9655, :c9656, :c9657, :c9658, :c9659, :c9660, :c9661, :c9662, :c9663, :c9664, :c9665, :c9666, :c9667, :c9668, :c9669, :c9670, :c9671, :c9672, :c9673, :c9674, :c9675, :c9676, :c9677, :c9678, :c9679, :c9680, :c9681, :c9682, :c9683, :c9684, :c9685, :c9686, :c9687, :c9688, :c9689, :c9690, :c9691, :c9692, :c9693, :c9694, :c9695, :c9696, :c9697, :c9698, :c9699, :c9700, :c9701, :c9702, :c9703, :c9704, :c9705, :c9706, :c9707, :c9708, :c9709, :c9710, :c9711, :c9712, :c9713, :c9714, :c9715, :c9716, :c9717, :c9718, :c9719, :c9720, :c9721, :c9722, :c9723, :c9724, :c9725, :c9726, :c9727, :c9728, :c9729, :c9730, :c9731, :c9732, :c9733, :c9734, :c9735, :c9736, :c9737, :c9738, :c9739, :c9740, :c9741, :c9742, :c9743, :c9744, :c9745, :c9746, :c9747, :c9748, :c9749, :c9750, :c9751, :c9752, :c9753, :c9754, :c9755, :c9756, :c9757, :c9758, :c9759, :c9760, :c9761, :c9762, :c9763, :c9764, :c9765, :c9766, :c9767, :c9768, :c9769, :c9770, :c9771, :c9772, :c9773, :c9774, :c9775, :c9776, :c9777, :c9778, :c9779, :c9780, :c9781, :c9782, :c9783, :c9784, :c9785, :c9786, :c9787, :c9788, :c9789, :c9790, :c9791, :c9792, :c9793, :c9794, :c9795, :c9796, :c9797, :c9798, :c9799, :c9800, :c9801, :c9802, :c9803, :c9804, :c9805, :c9806, :c9807, :c9808, :c9809, :c9810, :c9811, :c9812, :c9813, :c9814, :c9815, :c9816, :c9817, :c9818, :c9819, :c9820, :c9821, :c9822, :c9823, :c9824, :c9825, :c9826, :c9827, :c9828, :c9829, :c9830, :c9831, :c9832, :c9833, :c9834, :c9835, :c9836, :c9837, :c9838, :c9839, :c9840, :c9841, :c9842, :c9843, :c9844, :c9845, :c9846, :c9847, :c9848, :c9849, :c9850, :c9851, :c9852, :c9853, :c9854, :c9855, :c9856, :c9857, :c9858, :c9859, :c9860, :c9861, :c9862, :c9863, :c9864, :c9865, :c9866, :c9867, :c9868, :c9869, :c9870, :c9871, :c9872, :c9873, :c9874, :c9875, :c9876, :c9877, :c9878, :c9879, :c9880, :c9881, :c9882, :c9883, :c9884, :c9885, :c9886, :c9887, :c9888, :c9889, :c9890, :c9891, :c9892, :c9893, :c9894, :c9895, :c9896, :c9897, :c9898, :c9899, :c9900, :c9901, :c9902, :c9903, :c9904, :c9905, :c9906, :c9907, :c9908, :c9909, :c9910, :c9911, :c9912, :c9913, :c9914, :c9915, :c9916, :c9917, :c9918, :c9919, :c9920, :c9921, :c9922, :c9923, :c9924, :c9925, :c9926, :c9927, :c9928, :c9929, :c9930, :c9931, :c9932, :c9933, :c9934, :c9935, :c9936, :c9937, :c9938, :c9939, :c9940, :c9941, :c9942, :c9943, :c9944, :c9945, :c9946, :c9947, :c9948, :c9949, :c9950, :c9951, :c9952, :c9953, :c9954, :c9955, :c9956, :c9957, :c9958, :c9959, :c9960, :c9961, :c9962, :c9963, :c9964, :c9965, :c9966, :c9967, :c9968, :c9969, :c9970, :c9971, :c9972, :c9973, :c9974, :c9975, :c9976, :c9977, :c9978, :c9979, :c9980, :c9981, :c9982, :c9983, :c9984, :c9985, :c9986, :c9987, :c9988, :c9989, :c9990, :c9991, :c9992, :c9993, :c9994, :c9995, :c9996, :c9997, :c9998, :c9999, :c10000 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-16.out b/source/libs/lilv/serd-0.18.2/tests/test-16.out new file mode 100644 index 000000000..c0604b3b6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-16.out @@ -0,0 +1,10000 @@ + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-16.ttl b/source/libs/lilv/serd-0.18.2/tests/test-16.ttl new file mode 100644 index 000000000..a9ac37fb3 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-16.ttl @@ -0,0 +1,10002 @@ +# 10000 items (10000 triples) more than the default Bison stack size +@prefix : . +:a :b :c1; + :b :c2; + :b :c3; + :b :c4; + :b :c5; + :b :c6; + :b :c7; + :b :c8; + :b :c9; + :b :c10; + :b :c11; + :b :c12; + :b :c13; + :b :c14; + :b :c15; + :b :c16; + :b :c17; + :b :c18; + :b :c19; + :b :c20; + :b :c21; + :b :c22; + :b :c23; + :b :c24; + :b :c25; + :b :c26; + :b :c27; + :b :c28; + :b :c29; + :b :c30; + :b :c31; + :b :c32; + :b :c33; + :b :c34; + :b :c35; + :b :c36; + :b :c37; + :b :c38; + :b :c39; + :b :c40; + :b :c41; + :b :c42; + :b :c43; + :b :c44; + :b :c45; + :b :c46; + :b :c47; + :b :c48; + :b :c49; + :b :c50; + :b :c51; + :b :c52; + :b :c53; + :b :c54; + :b :c55; + :b :c56; + :b :c57; + :b :c58; + :b :c59; + :b :c60; + :b :c61; + :b :c62; + :b :c63; + :b :c64; + :b :c65; + :b :c66; + :b :c67; + :b :c68; + :b :c69; + :b :c70; + :b :c71; + :b :c72; + :b :c73; + :b :c74; + :b :c75; + :b :c76; + :b :c77; + :b :c78; + :b :c79; + :b :c80; + :b :c81; + :b :c82; + :b :c83; + :b :c84; + :b :c85; + :b :c86; + :b :c87; + :b :c88; + :b :c89; + :b :c90; + :b :c91; + :b :c92; + :b :c93; + :b :c94; + :b :c95; + :b :c96; + :b :c97; + :b :c98; + :b :c99; + :b :c100; + :b :c101; + :b :c102; + :b :c103; + :b :c104; + :b :c105; + :b :c106; + :b :c107; + :b :c108; + :b :c109; + :b :c110; + :b :c111; + :b :c112; + :b :c113; + :b :c114; + :b :c115; + :b :c116; + :b :c117; + :b :c118; + :b :c119; + :b :c120; + :b :c121; + :b :c122; + :b :c123; + :b :c124; + :b :c125; + :b :c126; + :b :c127; + :b :c128; + :b :c129; + :b :c130; + :b :c131; + :b :c132; + :b :c133; + :b :c134; + :b :c135; + :b :c136; + :b :c137; + :b :c138; + :b :c139; + :b :c140; + :b :c141; + :b :c142; + :b :c143; + :b :c144; + :b :c145; + :b :c146; + :b :c147; + :b :c148; + :b :c149; + :b :c150; + :b :c151; + :b :c152; + :b :c153; + :b :c154; + :b :c155; + :b :c156; + :b :c157; + :b :c158; + :b :c159; + :b :c160; + :b :c161; + :b :c162; + :b :c163; + :b :c164; + :b :c165; + :b :c166; + :b :c167; + :b :c168; + :b :c169; + :b :c170; + :b :c171; + :b :c172; + :b :c173; + :b :c174; + :b :c175; + :b :c176; + :b :c177; + :b :c178; + :b :c179; + :b :c180; + :b :c181; + :b :c182; + :b :c183; + :b :c184; + :b :c185; + :b :c186; + :b :c187; + :b :c188; + :b :c189; + :b :c190; + :b :c191; + :b :c192; + :b :c193; + :b :c194; + :b :c195; + :b :c196; + :b :c197; + :b :c198; + :b :c199; + :b :c200; + :b :c201; + :b :c202; + :b :c203; + :b :c204; + :b :c205; + :b :c206; + :b :c207; + :b :c208; + :b :c209; + :b :c210; + :b :c211; + :b :c212; + :b :c213; + :b :c214; + :b :c215; + :b :c216; + :b :c217; + :b :c218; + :b :c219; + :b :c220; + :b :c221; + :b :c222; + :b :c223; + :b :c224; + :b :c225; + :b :c226; + :b :c227; + :b :c228; + :b :c229; + :b :c230; + :b :c231; + :b :c232; + :b :c233; + :b :c234; + :b :c235; + :b :c236; + :b :c237; + :b :c238; + :b :c239; + :b :c240; + :b :c241; + :b :c242; + :b :c243; + :b :c244; + :b :c245; + :b :c246; + :b :c247; + :b :c248; + :b :c249; + :b :c250; + :b :c251; + :b :c252; + :b :c253; + :b :c254; + :b :c255; + :b :c256; + :b :c257; + :b :c258; + :b :c259; + :b :c260; + :b :c261; + :b :c262; + :b :c263; + :b :c264; + :b :c265; + :b :c266; + :b :c267; + :b :c268; + :b :c269; + :b :c270; + :b :c271; + :b :c272; + :b :c273; + :b :c274; + :b :c275; + :b :c276; + :b :c277; + :b :c278; + :b :c279; + :b :c280; + :b :c281; + :b :c282; + :b :c283; + :b :c284; + :b :c285; + :b :c286; + :b :c287; + :b :c288; + :b :c289; + :b :c290; + :b :c291; + :b :c292; + :b :c293; + :b :c294; + :b :c295; + :b :c296; + :b :c297; + :b :c298; + :b :c299; + :b :c300; + :b :c301; + :b :c302; + :b :c303; + :b :c304; + :b :c305; + :b :c306; + :b :c307; + :b :c308; + :b :c309; + :b :c310; + :b :c311; + :b :c312; + :b :c313; + :b :c314; + :b :c315; + :b :c316; + :b :c317; + :b :c318; + :b :c319; + :b :c320; + :b :c321; + :b :c322; + :b :c323; + :b :c324; + :b :c325; + :b :c326; + :b :c327; + :b :c328; + :b :c329; + :b :c330; + :b :c331; + :b :c332; + :b :c333; + :b :c334; + :b :c335; + :b :c336; + :b :c337; + :b :c338; + :b :c339; + :b :c340; + :b :c341; + :b :c342; + :b :c343; + :b :c344; + :b :c345; + :b :c346; + :b :c347; + :b :c348; + :b :c349; + :b :c350; + :b :c351; + :b :c352; + :b :c353; + :b :c354; + :b :c355; + :b :c356; + :b :c357; + :b :c358; + :b :c359; + :b :c360; + :b :c361; + :b :c362; + :b :c363; + :b :c364; + :b :c365; + :b :c366; + :b :c367; + :b :c368; + :b :c369; + :b :c370; + :b :c371; + :b :c372; + :b :c373; + :b :c374; + :b :c375; + :b :c376; + :b :c377; + :b :c378; + :b :c379; + :b :c380; + :b :c381; + :b :c382; + :b :c383; + :b :c384; + :b :c385; + :b :c386; + :b :c387; + :b :c388; + :b :c389; + :b :c390; + :b :c391; + :b :c392; + :b :c393; + :b :c394; + :b :c395; + :b :c396; + :b :c397; + :b :c398; + :b :c399; + :b :c400; + :b :c401; + :b :c402; + :b :c403; + :b :c404; + :b :c405; + :b :c406; + :b :c407; + :b :c408; + :b :c409; + :b :c410; + :b :c411; + :b :c412; + :b :c413; + :b :c414; + :b :c415; + :b :c416; + :b :c417; + :b :c418; + :b :c419; + :b :c420; + :b :c421; + :b :c422; + :b :c423; + :b :c424; + :b :c425; + :b :c426; + :b :c427; + :b :c428; + :b :c429; + :b :c430; + :b :c431; + :b :c432; + :b :c433; + :b :c434; + :b :c435; + :b :c436; + :b :c437; + :b :c438; + :b :c439; + :b :c440; + :b :c441; + :b :c442; + :b :c443; + :b :c444; + :b :c445; + :b :c446; + :b :c447; + :b :c448; + :b :c449; + :b :c450; + :b :c451; + :b :c452; + :b :c453; + :b :c454; + :b :c455; + :b :c456; + :b :c457; + :b :c458; + :b :c459; + :b :c460; + :b :c461; + :b :c462; + :b :c463; + :b :c464; + :b :c465; + :b :c466; + :b :c467; + :b :c468; + :b :c469; + :b :c470; + :b :c471; + :b :c472; + :b :c473; + :b :c474; + :b :c475; + :b :c476; + :b :c477; + :b :c478; + :b :c479; + :b :c480; + :b :c481; + :b :c482; + :b :c483; + :b :c484; + :b :c485; + :b :c486; + :b :c487; + :b :c488; + :b :c489; + :b :c490; + :b :c491; + :b :c492; + :b :c493; + :b :c494; + :b :c495; + :b :c496; + :b :c497; + :b :c498; + :b :c499; + :b :c500; + :b :c501; + :b :c502; + :b :c503; + :b :c504; + :b :c505; + :b :c506; + :b :c507; + :b :c508; + :b :c509; + :b :c510; + :b :c511; + :b :c512; + :b :c513; + :b :c514; + :b :c515; + :b :c516; + :b :c517; + :b :c518; + :b :c519; + :b :c520; + :b :c521; + :b :c522; + :b :c523; + :b :c524; + :b :c525; + :b :c526; + :b :c527; + :b :c528; + :b :c529; + :b :c530; + :b :c531; + :b :c532; + :b :c533; + :b :c534; + :b :c535; + :b :c536; + :b :c537; + :b :c538; + :b :c539; + :b :c540; + :b :c541; + :b :c542; + :b :c543; + :b :c544; + :b :c545; + :b :c546; + :b :c547; + :b :c548; + :b :c549; + :b :c550; + :b :c551; + :b :c552; + :b :c553; + :b :c554; + :b :c555; + :b :c556; + :b :c557; + :b :c558; + :b :c559; + :b :c560; + :b :c561; + :b :c562; + :b :c563; + :b :c564; + :b :c565; + :b :c566; + :b :c567; + :b :c568; + :b :c569; + :b :c570; + :b :c571; + :b :c572; + :b :c573; + :b :c574; + :b :c575; + :b :c576; + :b :c577; + :b :c578; + :b :c579; + :b :c580; + :b :c581; + :b :c582; + :b :c583; + :b :c584; + :b :c585; + :b :c586; + :b :c587; + :b :c588; + :b :c589; + :b :c590; + :b :c591; + :b :c592; + :b :c593; + :b :c594; + :b :c595; + :b :c596; + :b :c597; + :b :c598; + :b :c599; + :b :c600; + :b :c601; + :b :c602; + :b :c603; + :b :c604; + :b :c605; + :b :c606; + :b :c607; + :b :c608; + :b :c609; + :b :c610; + :b :c611; + :b :c612; + :b :c613; + :b :c614; + :b :c615; + :b :c616; + :b :c617; + :b :c618; + :b :c619; + :b :c620; + :b :c621; + :b :c622; + :b :c623; + :b :c624; + :b :c625; + :b :c626; + :b :c627; + :b :c628; + :b :c629; + :b :c630; + :b :c631; + :b :c632; + :b :c633; + :b :c634; + :b :c635; + :b :c636; + :b :c637; + :b :c638; + :b :c639; + :b :c640; + :b :c641; + :b :c642; + :b :c643; + :b :c644; + :b :c645; + :b :c646; + :b :c647; + :b :c648; + :b :c649; + :b :c650; + :b :c651; + :b :c652; + :b :c653; + :b :c654; + :b :c655; + :b :c656; + :b :c657; + :b :c658; + :b :c659; + :b :c660; + :b :c661; + :b :c662; + :b :c663; + :b :c664; + :b :c665; + :b :c666; + :b :c667; + :b :c668; + :b :c669; + :b :c670; + :b :c671; + :b :c672; + :b :c673; + :b :c674; + :b :c675; + :b :c676; + :b :c677; + :b :c678; + :b :c679; + :b :c680; + :b :c681; + :b :c682; + :b :c683; + :b :c684; + :b :c685; + :b :c686; + :b :c687; + :b :c688; + :b :c689; + :b :c690; + :b :c691; + :b :c692; + :b :c693; + :b :c694; + :b :c695; + :b :c696; + :b :c697; + :b :c698; + :b :c699; + :b :c700; + :b :c701; + :b :c702; + :b :c703; + :b :c704; + :b :c705; + :b :c706; + :b :c707; + :b :c708; + :b :c709; + :b :c710; + :b :c711; + :b :c712; + :b :c713; + :b :c714; + :b :c715; + :b :c716; + :b :c717; + :b :c718; + :b :c719; + :b :c720; + :b :c721; + :b :c722; + :b :c723; + :b :c724; + :b :c725; + :b :c726; + :b :c727; + :b :c728; + :b :c729; + :b :c730; + :b :c731; + :b :c732; + :b :c733; + :b :c734; + :b :c735; + :b :c736; + :b :c737; + :b :c738; + :b :c739; + :b :c740; + :b :c741; + :b :c742; + :b :c743; + :b :c744; + :b :c745; + :b :c746; + :b :c747; + :b :c748; + :b :c749; + :b :c750; + :b :c751; + :b :c752; + :b :c753; + :b :c754; + :b :c755; + :b :c756; + :b :c757; + :b :c758; + :b :c759; + :b :c760; + :b :c761; + :b :c762; + :b :c763; + :b :c764; + :b :c765; + :b :c766; + :b :c767; + :b :c768; + :b :c769; + :b :c770; + :b :c771; + :b :c772; + :b :c773; + :b :c774; + :b :c775; + :b :c776; + :b :c777; + :b :c778; + :b :c779; + :b :c780; + :b :c781; + :b :c782; + :b :c783; + :b :c784; + :b :c785; + :b :c786; + :b :c787; + :b :c788; + :b :c789; + :b :c790; + :b :c791; + :b :c792; + :b :c793; + :b :c794; + :b :c795; + :b :c796; + :b :c797; + :b :c798; + :b :c799; + :b :c800; + :b :c801; + :b :c802; + :b :c803; + :b :c804; + :b :c805; + :b :c806; + :b :c807; + :b :c808; + :b :c809; + :b :c810; + :b :c811; + :b :c812; + :b :c813; + :b :c814; + :b :c815; + :b :c816; + :b :c817; + :b :c818; + :b :c819; + :b :c820; + :b :c821; + :b :c822; + :b :c823; + :b :c824; + :b :c825; + :b :c826; + :b :c827; + :b :c828; + :b :c829; + :b :c830; + :b :c831; + :b :c832; + :b :c833; + :b :c834; + :b :c835; + :b :c836; + :b :c837; + :b :c838; + :b :c839; + :b :c840; + :b :c841; + :b :c842; + :b :c843; + :b :c844; + :b :c845; + :b :c846; + :b :c847; + :b :c848; + :b :c849; + :b :c850; + :b :c851; + :b :c852; + :b :c853; + :b :c854; + :b :c855; + :b :c856; + :b :c857; + :b :c858; + :b :c859; + :b :c860; + :b :c861; + :b :c862; + :b :c863; + :b :c864; + :b :c865; + :b :c866; + :b :c867; + :b :c868; + :b :c869; + :b :c870; + :b :c871; + :b :c872; + :b :c873; + :b :c874; + :b :c875; + :b :c876; + :b :c877; + :b :c878; + :b :c879; + :b :c880; + :b :c881; + :b :c882; + :b :c883; + :b :c884; + :b :c885; + :b :c886; + :b :c887; + :b :c888; + :b :c889; + :b :c890; + :b :c891; + :b :c892; + :b :c893; + :b :c894; + :b :c895; + :b :c896; + :b :c897; + :b :c898; + :b :c899; + :b :c900; + :b :c901; + :b :c902; + :b :c903; + :b :c904; + :b :c905; + :b :c906; + :b :c907; + :b :c908; + :b :c909; + :b :c910; + :b :c911; + :b :c912; + :b :c913; + :b :c914; + :b :c915; + :b :c916; + :b :c917; + :b :c918; + :b :c919; + :b :c920; + :b :c921; + :b :c922; + :b :c923; + :b :c924; + :b :c925; + :b :c926; + :b :c927; + :b :c928; + :b :c929; + :b :c930; + :b :c931; + :b :c932; + :b :c933; + :b :c934; + :b :c935; + :b :c936; + :b :c937; + :b :c938; + :b :c939; + :b :c940; + :b :c941; + :b :c942; + :b :c943; + :b :c944; + :b :c945; + :b :c946; + :b :c947; + :b :c948; + :b :c949; + :b :c950; + :b :c951; + :b :c952; + :b :c953; + :b :c954; + :b :c955; + :b :c956; + :b :c957; + :b :c958; + :b :c959; + :b :c960; + :b :c961; + :b :c962; + :b :c963; + :b :c964; + :b :c965; + :b :c966; + :b :c967; + :b :c968; + :b :c969; + :b :c970; + :b :c971; + :b :c972; + :b :c973; + :b :c974; + :b :c975; + :b :c976; + :b :c977; + :b :c978; + :b :c979; + :b :c980; + :b :c981; + :b :c982; + :b :c983; + :b :c984; + :b :c985; + :b :c986; + :b :c987; + :b :c988; + :b :c989; + :b :c990; + :b :c991; + :b :c992; + :b :c993; + :b :c994; + :b :c995; + :b :c996; + :b :c997; + :b :c998; + :b :c999; + :b :c1000; + :b :c1001; + :b :c1002; + :b :c1003; + :b :c1004; + :b :c1005; + :b :c1006; + :b :c1007; + :b :c1008; + :b :c1009; + :b :c1010; + :b :c1011; + :b :c1012; + :b :c1013; + :b :c1014; + :b :c1015; + :b :c1016; + :b :c1017; + :b :c1018; + :b :c1019; + :b :c1020; + :b :c1021; + :b :c1022; + :b :c1023; + :b :c1024; + :b :c1025; + :b :c1026; + :b :c1027; + :b :c1028; + :b :c1029; + :b :c1030; + :b :c1031; + :b :c1032; + :b :c1033; + :b :c1034; + :b :c1035; + :b :c1036; + :b :c1037; + :b :c1038; + :b :c1039; + :b :c1040; + :b :c1041; + :b :c1042; + :b :c1043; + :b :c1044; + :b :c1045; + :b :c1046; + :b :c1047; + :b :c1048; + :b :c1049; + :b :c1050; + :b :c1051; + :b :c1052; + :b :c1053; + :b :c1054; + :b :c1055; + :b :c1056; + :b :c1057; + :b :c1058; + :b :c1059; + :b :c1060; + :b :c1061; + :b :c1062; + :b :c1063; + :b :c1064; + :b :c1065; + :b :c1066; + :b :c1067; + :b :c1068; + :b :c1069; + :b :c1070; + :b :c1071; + :b :c1072; + :b :c1073; + :b :c1074; + :b :c1075; + :b :c1076; + :b :c1077; + :b :c1078; + :b :c1079; + :b :c1080; + :b :c1081; + :b :c1082; + :b :c1083; + :b :c1084; + :b :c1085; + :b :c1086; + :b :c1087; + :b :c1088; + :b :c1089; + :b :c1090; + :b :c1091; + :b :c1092; + :b :c1093; + :b :c1094; + :b :c1095; + :b :c1096; + :b :c1097; + :b :c1098; + :b :c1099; + :b :c1100; + :b :c1101; + :b :c1102; + :b :c1103; + :b :c1104; + :b :c1105; + :b :c1106; + :b :c1107; + :b :c1108; + :b :c1109; + :b :c1110; + :b :c1111; + :b :c1112; + :b :c1113; + :b :c1114; + :b :c1115; + :b :c1116; + :b :c1117; + :b :c1118; + :b :c1119; + :b :c1120; + :b :c1121; + :b :c1122; + :b :c1123; + :b :c1124; + :b :c1125; + :b :c1126; + :b :c1127; + :b :c1128; + :b :c1129; + :b :c1130; + :b :c1131; + :b :c1132; + :b :c1133; + :b :c1134; + :b :c1135; + :b :c1136; + :b :c1137; + :b :c1138; + :b :c1139; + :b :c1140; + :b :c1141; + :b :c1142; + :b :c1143; + :b :c1144; + :b :c1145; + :b :c1146; + :b :c1147; + :b :c1148; + :b :c1149; + :b :c1150; + :b :c1151; + :b :c1152; + :b :c1153; + :b :c1154; + :b :c1155; + :b :c1156; + :b :c1157; + :b :c1158; + :b :c1159; + :b :c1160; + :b :c1161; + :b :c1162; + :b :c1163; + :b :c1164; + :b :c1165; + :b :c1166; + :b :c1167; + :b :c1168; + :b :c1169; + :b :c1170; + :b :c1171; + :b :c1172; + :b :c1173; + :b :c1174; + :b :c1175; + :b :c1176; + :b :c1177; + :b :c1178; + :b :c1179; + :b :c1180; + :b :c1181; + :b :c1182; + :b :c1183; + :b :c1184; + :b :c1185; + :b :c1186; + :b :c1187; + :b :c1188; + :b :c1189; + :b :c1190; + :b :c1191; + :b :c1192; + :b :c1193; + :b :c1194; + :b :c1195; + :b :c1196; + :b :c1197; + :b :c1198; + :b :c1199; + :b :c1200; + :b :c1201; + :b :c1202; + :b :c1203; + :b :c1204; + :b :c1205; + :b :c1206; + :b :c1207; + :b :c1208; + :b :c1209; + :b :c1210; + :b :c1211; + :b :c1212; + :b :c1213; + :b :c1214; + :b :c1215; + :b :c1216; + :b :c1217; + :b :c1218; + :b :c1219; + :b :c1220; + :b :c1221; + :b :c1222; + :b :c1223; + :b :c1224; + :b :c1225; + :b :c1226; + :b :c1227; + :b :c1228; + :b :c1229; + :b :c1230; + :b :c1231; + :b :c1232; + :b :c1233; + :b :c1234; + :b :c1235; + :b :c1236; + :b :c1237; + :b :c1238; + :b :c1239; + :b :c1240; + :b :c1241; + :b :c1242; + :b :c1243; + :b :c1244; + :b :c1245; + :b :c1246; + :b :c1247; + :b :c1248; + :b :c1249; + :b :c1250; + :b :c1251; + :b :c1252; + :b :c1253; + :b :c1254; + :b :c1255; + :b :c1256; + :b :c1257; + :b :c1258; + :b :c1259; + :b :c1260; + :b :c1261; + :b :c1262; + :b :c1263; + :b :c1264; + :b :c1265; + :b :c1266; + :b :c1267; + :b :c1268; + :b :c1269; + :b :c1270; + :b :c1271; + :b :c1272; + :b :c1273; + :b :c1274; + :b :c1275; + :b :c1276; + :b :c1277; + :b :c1278; + :b :c1279; + :b :c1280; + :b :c1281; + :b :c1282; + :b :c1283; + :b :c1284; + :b :c1285; + :b :c1286; + :b :c1287; + :b :c1288; + :b :c1289; + :b :c1290; + :b :c1291; + :b :c1292; + :b :c1293; + :b :c1294; + :b :c1295; + :b :c1296; + :b :c1297; + :b :c1298; + :b :c1299; + :b :c1300; + :b :c1301; + :b :c1302; + :b :c1303; + :b :c1304; + :b :c1305; + :b :c1306; + :b :c1307; + :b :c1308; + :b :c1309; + :b :c1310; + :b :c1311; + :b :c1312; + :b :c1313; + :b :c1314; + :b :c1315; + :b :c1316; + :b :c1317; + :b :c1318; + :b :c1319; + :b :c1320; + :b :c1321; + :b :c1322; + :b :c1323; + :b :c1324; + :b :c1325; + :b :c1326; + :b :c1327; + :b :c1328; + :b :c1329; + :b :c1330; + :b :c1331; + :b :c1332; + :b :c1333; + :b :c1334; + :b :c1335; + :b :c1336; + :b :c1337; + :b :c1338; + :b :c1339; + :b :c1340; + :b :c1341; + :b :c1342; + :b :c1343; + :b :c1344; + :b :c1345; + :b :c1346; + :b :c1347; + :b :c1348; + :b :c1349; + :b :c1350; + :b :c1351; + :b :c1352; + :b :c1353; + :b :c1354; + :b :c1355; + :b :c1356; + :b :c1357; + :b :c1358; + :b :c1359; + :b :c1360; + :b :c1361; + :b :c1362; + :b :c1363; + :b :c1364; + :b :c1365; + :b :c1366; + :b :c1367; + :b :c1368; + :b :c1369; + :b :c1370; + :b :c1371; + :b :c1372; + :b :c1373; + :b :c1374; + :b :c1375; + :b :c1376; + :b :c1377; + :b :c1378; + :b :c1379; + :b :c1380; + :b :c1381; + :b :c1382; + :b :c1383; + :b :c1384; + :b :c1385; + :b :c1386; + :b :c1387; + :b :c1388; + :b :c1389; + :b :c1390; + :b :c1391; + :b :c1392; + :b :c1393; + :b :c1394; + :b :c1395; + :b :c1396; + :b :c1397; + :b :c1398; + :b :c1399; + :b :c1400; + :b :c1401; + :b :c1402; + :b :c1403; + :b :c1404; + :b :c1405; + :b :c1406; + :b :c1407; + :b :c1408; + :b :c1409; + :b :c1410; + :b :c1411; + :b :c1412; + :b :c1413; + :b :c1414; + :b :c1415; + :b :c1416; + :b :c1417; + :b :c1418; + :b :c1419; + :b :c1420; + :b :c1421; + :b :c1422; + :b :c1423; + :b :c1424; + :b :c1425; + :b :c1426; + :b :c1427; + :b :c1428; + :b :c1429; + :b :c1430; + :b :c1431; + :b :c1432; + :b :c1433; + :b :c1434; + :b :c1435; + :b :c1436; + :b :c1437; + :b :c1438; + :b :c1439; + :b :c1440; + :b :c1441; + :b :c1442; + :b :c1443; + :b :c1444; + :b :c1445; + :b :c1446; + :b :c1447; + :b :c1448; + :b :c1449; + :b :c1450; + :b :c1451; + :b :c1452; + :b :c1453; + :b :c1454; + :b :c1455; + :b :c1456; + :b :c1457; + :b :c1458; + :b :c1459; + :b :c1460; + :b :c1461; + :b :c1462; + :b :c1463; + :b :c1464; + :b :c1465; + :b :c1466; + :b :c1467; + :b :c1468; + :b :c1469; + :b :c1470; + :b :c1471; + :b :c1472; + :b :c1473; + :b :c1474; + :b :c1475; + :b :c1476; + :b :c1477; + :b :c1478; + :b :c1479; + :b :c1480; + :b :c1481; + :b :c1482; + :b :c1483; + :b :c1484; + :b :c1485; + :b :c1486; + :b :c1487; + :b :c1488; + :b :c1489; + :b :c1490; + :b :c1491; + :b :c1492; + :b :c1493; + :b :c1494; + :b :c1495; + :b :c1496; + :b :c1497; + :b :c1498; + :b :c1499; + :b :c1500; + :b :c1501; + :b :c1502; + :b :c1503; + :b :c1504; + :b :c1505; + :b :c1506; + :b :c1507; + :b :c1508; + :b :c1509; + :b :c1510; + :b :c1511; + :b :c1512; + :b :c1513; + :b :c1514; + :b :c1515; + :b :c1516; + :b :c1517; + :b :c1518; + :b :c1519; + :b :c1520; + :b :c1521; + :b :c1522; + :b :c1523; + :b :c1524; + :b :c1525; + :b :c1526; + :b :c1527; + :b :c1528; + :b :c1529; + :b :c1530; + :b :c1531; + :b :c1532; + :b :c1533; + :b :c1534; + :b :c1535; + :b :c1536; + :b :c1537; + :b :c1538; + :b :c1539; + :b :c1540; + :b :c1541; + :b :c1542; + :b :c1543; + :b :c1544; + :b :c1545; + :b :c1546; + :b :c1547; + :b :c1548; + :b :c1549; + :b :c1550; + :b :c1551; + :b :c1552; + :b :c1553; + :b :c1554; + :b :c1555; + :b :c1556; + :b :c1557; + :b :c1558; + :b :c1559; + :b :c1560; + :b :c1561; + :b :c1562; + :b :c1563; + :b :c1564; + :b :c1565; + :b :c1566; + :b :c1567; + :b :c1568; + :b :c1569; + :b :c1570; + :b :c1571; + :b :c1572; + :b :c1573; + :b :c1574; + :b :c1575; + :b :c1576; + :b :c1577; + :b :c1578; + :b :c1579; + :b :c1580; + :b :c1581; + :b :c1582; + :b :c1583; + :b :c1584; + :b :c1585; + :b :c1586; + :b :c1587; + :b :c1588; + :b :c1589; + :b :c1590; + :b :c1591; + :b :c1592; + :b :c1593; + :b :c1594; + :b :c1595; + :b :c1596; + :b :c1597; + :b :c1598; + :b :c1599; + :b :c1600; + :b :c1601; + :b :c1602; + :b :c1603; + :b :c1604; + :b :c1605; + :b :c1606; + :b :c1607; + :b :c1608; + :b :c1609; + :b :c1610; + :b :c1611; + :b :c1612; + :b :c1613; + :b :c1614; + :b :c1615; + :b :c1616; + :b :c1617; + :b :c1618; + :b :c1619; + :b :c1620; + :b :c1621; + :b :c1622; + :b :c1623; + :b :c1624; + :b :c1625; + :b :c1626; + :b :c1627; + :b :c1628; + :b :c1629; + :b :c1630; + :b :c1631; + :b :c1632; + :b :c1633; + :b :c1634; + :b :c1635; + :b :c1636; + :b :c1637; + :b :c1638; + :b :c1639; + :b :c1640; + :b :c1641; + :b :c1642; + :b :c1643; + :b :c1644; + :b :c1645; + :b :c1646; + :b :c1647; + :b :c1648; + :b :c1649; + :b :c1650; + :b :c1651; + :b :c1652; + :b :c1653; + :b :c1654; + :b :c1655; + :b :c1656; + :b :c1657; + :b :c1658; + :b :c1659; + :b :c1660; + :b :c1661; + :b :c1662; + :b :c1663; + :b :c1664; + :b :c1665; + :b :c1666; + :b :c1667; + :b :c1668; + :b :c1669; + :b :c1670; + :b :c1671; + :b :c1672; + :b :c1673; + :b :c1674; + :b :c1675; + :b :c1676; + :b :c1677; + :b :c1678; + :b :c1679; + :b :c1680; + :b :c1681; + :b :c1682; + :b :c1683; + :b :c1684; + :b :c1685; + :b :c1686; + :b :c1687; + :b :c1688; + :b :c1689; + :b :c1690; + :b :c1691; + :b :c1692; + :b :c1693; + :b :c1694; + :b :c1695; + :b :c1696; + :b :c1697; + :b :c1698; + :b :c1699; + :b :c1700; + :b :c1701; + :b :c1702; + :b :c1703; + :b :c1704; + :b :c1705; + :b :c1706; + :b :c1707; + :b :c1708; + :b :c1709; + :b :c1710; + :b :c1711; + :b :c1712; + :b :c1713; + :b :c1714; + :b :c1715; + :b :c1716; + :b :c1717; + :b :c1718; + :b :c1719; + :b :c1720; + :b :c1721; + :b :c1722; + :b :c1723; + :b :c1724; + :b :c1725; + :b :c1726; + :b :c1727; + :b :c1728; + :b :c1729; + :b :c1730; + :b :c1731; + :b :c1732; + :b :c1733; + :b :c1734; + :b :c1735; + :b :c1736; + :b :c1737; + :b :c1738; + :b :c1739; + :b :c1740; + :b :c1741; + :b :c1742; + :b :c1743; + :b :c1744; + :b :c1745; + :b :c1746; + :b :c1747; + :b :c1748; + :b :c1749; + :b :c1750; + :b :c1751; + :b :c1752; + :b :c1753; + :b :c1754; + :b :c1755; + :b :c1756; + :b :c1757; + :b :c1758; + :b :c1759; + :b :c1760; + :b :c1761; + :b :c1762; + :b :c1763; + :b :c1764; + :b :c1765; + :b :c1766; + :b :c1767; + :b :c1768; + :b :c1769; + :b :c1770; + :b :c1771; + :b :c1772; + :b :c1773; + :b :c1774; + :b :c1775; + :b :c1776; + :b :c1777; + :b :c1778; + :b :c1779; + :b :c1780; + :b :c1781; + :b :c1782; + :b :c1783; + :b :c1784; + :b :c1785; + :b :c1786; + :b :c1787; + :b :c1788; + :b :c1789; + :b :c1790; + :b :c1791; + :b :c1792; + :b :c1793; + :b :c1794; + :b :c1795; + :b :c1796; + :b :c1797; + :b :c1798; + :b :c1799; + :b :c1800; + :b :c1801; + :b :c1802; + :b :c1803; + :b :c1804; + :b :c1805; + :b :c1806; + :b :c1807; + :b :c1808; + :b :c1809; + :b :c1810; + :b :c1811; + :b :c1812; + :b :c1813; + :b :c1814; + :b :c1815; + :b :c1816; + :b :c1817; + :b :c1818; + :b :c1819; + :b :c1820; + :b :c1821; + :b :c1822; + :b :c1823; + :b :c1824; + :b :c1825; + :b :c1826; + :b :c1827; + :b :c1828; + :b :c1829; + :b :c1830; + :b :c1831; + :b :c1832; + :b :c1833; + :b :c1834; + :b :c1835; + :b :c1836; + :b :c1837; + :b :c1838; + :b :c1839; + :b :c1840; + :b :c1841; + :b :c1842; + :b :c1843; + :b :c1844; + :b :c1845; + :b :c1846; + :b :c1847; + :b :c1848; + :b :c1849; + :b :c1850; + :b :c1851; + :b :c1852; + :b :c1853; + :b :c1854; + :b :c1855; + :b :c1856; + :b :c1857; + :b :c1858; + :b :c1859; + :b :c1860; + :b :c1861; + :b :c1862; + :b :c1863; + :b :c1864; + :b :c1865; + :b :c1866; + :b :c1867; + :b :c1868; + :b :c1869; + :b :c1870; + :b :c1871; + :b :c1872; + :b :c1873; + :b :c1874; + :b :c1875; + :b :c1876; + :b :c1877; + :b :c1878; + :b :c1879; + :b :c1880; + :b :c1881; + :b :c1882; + :b :c1883; + :b :c1884; + :b :c1885; + :b :c1886; + :b :c1887; + :b :c1888; + :b :c1889; + :b :c1890; + :b :c1891; + :b :c1892; + :b :c1893; + :b :c1894; + :b :c1895; + :b :c1896; + :b :c1897; + :b :c1898; + :b :c1899; + :b :c1900; + :b :c1901; + :b :c1902; + :b :c1903; + :b :c1904; + :b :c1905; + :b :c1906; + :b :c1907; + :b :c1908; + :b :c1909; + :b :c1910; + :b :c1911; + :b :c1912; + :b :c1913; + :b :c1914; + :b :c1915; + :b :c1916; + :b :c1917; + :b :c1918; + :b :c1919; + :b :c1920; + :b :c1921; + :b :c1922; + :b :c1923; + :b :c1924; + :b :c1925; + :b :c1926; + :b :c1927; + :b :c1928; + :b :c1929; + :b :c1930; + :b :c1931; + :b :c1932; + :b :c1933; + :b :c1934; + :b :c1935; + :b :c1936; + :b :c1937; + :b :c1938; + :b :c1939; + :b :c1940; + :b :c1941; + :b :c1942; + :b :c1943; + :b :c1944; + :b :c1945; + :b :c1946; + :b :c1947; + :b :c1948; + :b :c1949; + :b :c1950; + :b :c1951; + :b :c1952; + :b :c1953; + :b :c1954; + :b :c1955; + :b :c1956; + :b :c1957; + :b :c1958; + :b :c1959; + :b :c1960; + :b :c1961; + :b :c1962; + :b :c1963; + :b :c1964; + :b :c1965; + :b :c1966; + :b :c1967; + :b :c1968; + :b :c1969; + :b :c1970; + :b :c1971; + :b :c1972; + :b :c1973; + :b :c1974; + :b :c1975; + :b :c1976; + :b :c1977; + :b :c1978; + :b :c1979; + :b :c1980; + :b :c1981; + :b :c1982; + :b :c1983; + :b :c1984; + :b :c1985; + :b :c1986; + :b :c1987; + :b :c1988; + :b :c1989; + :b :c1990; + :b :c1991; + :b :c1992; + :b :c1993; + :b :c1994; + :b :c1995; + :b :c1996; + :b :c1997; + :b :c1998; + :b :c1999; + :b :c2000; + :b :c2001; + :b :c2002; + :b :c2003; + :b :c2004; + :b :c2005; + :b :c2006; + :b :c2007; + :b :c2008; + :b :c2009; + :b :c2010; + :b :c2011; + :b :c2012; + :b :c2013; + :b :c2014; + :b :c2015; + :b :c2016; + :b :c2017; + :b :c2018; + :b :c2019; + :b :c2020; + :b :c2021; + :b :c2022; + :b :c2023; + :b :c2024; + :b :c2025; + :b :c2026; + :b :c2027; + :b :c2028; + :b :c2029; + :b :c2030; + :b :c2031; + :b :c2032; + :b :c2033; + :b :c2034; + :b :c2035; + :b :c2036; + :b :c2037; + :b :c2038; + :b :c2039; + :b :c2040; + :b :c2041; + :b :c2042; + :b :c2043; + :b :c2044; + :b :c2045; + :b :c2046; + :b :c2047; + :b :c2048; + :b :c2049; + :b :c2050; + :b :c2051; + :b :c2052; + :b :c2053; + :b :c2054; + :b :c2055; + :b :c2056; + :b :c2057; + :b :c2058; + :b :c2059; + :b :c2060; + :b :c2061; + :b :c2062; + :b :c2063; + :b :c2064; + :b :c2065; + :b :c2066; + :b :c2067; + :b :c2068; + :b :c2069; + :b :c2070; + :b :c2071; + :b :c2072; + :b :c2073; + :b :c2074; + :b :c2075; + :b :c2076; + :b :c2077; + :b :c2078; + :b :c2079; + :b :c2080; + :b :c2081; + :b :c2082; + :b :c2083; + :b :c2084; + :b :c2085; + :b :c2086; + :b :c2087; + :b :c2088; + :b :c2089; + :b :c2090; + :b :c2091; + :b :c2092; + :b :c2093; + :b :c2094; + :b :c2095; + :b :c2096; + :b :c2097; + :b :c2098; + :b :c2099; + :b :c2100; + :b :c2101; + :b :c2102; + :b :c2103; + :b :c2104; + :b :c2105; + :b :c2106; + :b :c2107; + :b :c2108; + :b :c2109; + :b :c2110; + :b :c2111; + :b :c2112; + :b :c2113; + :b :c2114; + :b :c2115; + :b :c2116; + :b :c2117; + :b :c2118; + :b :c2119; + :b :c2120; + :b :c2121; + :b :c2122; + :b :c2123; + :b :c2124; + :b :c2125; + :b :c2126; + :b :c2127; + :b :c2128; + :b :c2129; + :b :c2130; + :b :c2131; + :b :c2132; + :b :c2133; + :b :c2134; + :b :c2135; + :b :c2136; + :b :c2137; + :b :c2138; + :b :c2139; + :b :c2140; + :b :c2141; + :b :c2142; + :b :c2143; + :b :c2144; + :b :c2145; + :b :c2146; + :b :c2147; + :b :c2148; + :b :c2149; + :b :c2150; + :b :c2151; + :b :c2152; + :b :c2153; + :b :c2154; + :b :c2155; + :b :c2156; + :b :c2157; + :b :c2158; + :b :c2159; + :b :c2160; + :b :c2161; + :b :c2162; + :b :c2163; + :b :c2164; + :b :c2165; + :b :c2166; + :b :c2167; + :b :c2168; + :b :c2169; + :b :c2170; + :b :c2171; + :b :c2172; + :b :c2173; + :b :c2174; + :b :c2175; + :b :c2176; + :b :c2177; + :b :c2178; + :b :c2179; + :b :c2180; + :b :c2181; + :b :c2182; + :b :c2183; + :b :c2184; + :b :c2185; + :b :c2186; + :b :c2187; + :b :c2188; + :b :c2189; + :b :c2190; + :b :c2191; + :b :c2192; + :b :c2193; + :b :c2194; + :b :c2195; + :b :c2196; + :b :c2197; + :b :c2198; + :b :c2199; + :b :c2200; + :b :c2201; + :b :c2202; + :b :c2203; + :b :c2204; + :b :c2205; + :b :c2206; + :b :c2207; + :b :c2208; + :b :c2209; + :b :c2210; + :b :c2211; + :b :c2212; + :b :c2213; + :b :c2214; + :b :c2215; + :b :c2216; + :b :c2217; + :b :c2218; + :b :c2219; + :b :c2220; + :b :c2221; + :b :c2222; + :b :c2223; + :b :c2224; + :b :c2225; + :b :c2226; + :b :c2227; + :b :c2228; + :b :c2229; + :b :c2230; + :b :c2231; + :b :c2232; + :b :c2233; + :b :c2234; + :b :c2235; + :b :c2236; + :b :c2237; + :b :c2238; + :b :c2239; + :b :c2240; + :b :c2241; + :b :c2242; + :b :c2243; + :b :c2244; + :b :c2245; + :b :c2246; + :b :c2247; + :b :c2248; + :b :c2249; + :b :c2250; + :b :c2251; + :b :c2252; + :b :c2253; + :b :c2254; + :b :c2255; + :b :c2256; + :b :c2257; + :b :c2258; + :b :c2259; + :b :c2260; + :b :c2261; + :b :c2262; + :b :c2263; + :b :c2264; + :b :c2265; + :b :c2266; + :b :c2267; + :b :c2268; + :b :c2269; + :b :c2270; + :b :c2271; + :b :c2272; + :b :c2273; + :b :c2274; + :b :c2275; + :b :c2276; + :b :c2277; + :b :c2278; + :b :c2279; + :b :c2280; + :b :c2281; + :b :c2282; + :b :c2283; + :b :c2284; + :b :c2285; + :b :c2286; + :b :c2287; + :b :c2288; + :b :c2289; + :b :c2290; + :b :c2291; + :b :c2292; + :b :c2293; + :b :c2294; + :b :c2295; + :b :c2296; + :b :c2297; + :b :c2298; + :b :c2299; + :b :c2300; + :b :c2301; + :b :c2302; + :b :c2303; + :b :c2304; + :b :c2305; + :b :c2306; + :b :c2307; + :b :c2308; + :b :c2309; + :b :c2310; + :b :c2311; + :b :c2312; + :b :c2313; + :b :c2314; + :b :c2315; + :b :c2316; + :b :c2317; + :b :c2318; + :b :c2319; + :b :c2320; + :b :c2321; + :b :c2322; + :b :c2323; + :b :c2324; + :b :c2325; + :b :c2326; + :b :c2327; + :b :c2328; + :b :c2329; + :b :c2330; + :b :c2331; + :b :c2332; + :b :c2333; + :b :c2334; + :b :c2335; + :b :c2336; + :b :c2337; + :b :c2338; + :b :c2339; + :b :c2340; + :b :c2341; + :b :c2342; + :b :c2343; + :b :c2344; + :b :c2345; + :b :c2346; + :b :c2347; + :b :c2348; + :b :c2349; + :b :c2350; + :b :c2351; + :b :c2352; + :b :c2353; + :b :c2354; + :b :c2355; + :b :c2356; + :b :c2357; + :b :c2358; + :b :c2359; + :b :c2360; + :b :c2361; + :b :c2362; + :b :c2363; + :b :c2364; + :b :c2365; + :b :c2366; + :b :c2367; + :b :c2368; + :b :c2369; + :b :c2370; + :b :c2371; + :b :c2372; + :b :c2373; + :b :c2374; + :b :c2375; + :b :c2376; + :b :c2377; + :b :c2378; + :b :c2379; + :b :c2380; + :b :c2381; + :b :c2382; + :b :c2383; + :b :c2384; + :b :c2385; + :b :c2386; + :b :c2387; + :b :c2388; + :b :c2389; + :b :c2390; + :b :c2391; + :b :c2392; + :b :c2393; + :b :c2394; + :b :c2395; + :b :c2396; + :b :c2397; + :b :c2398; + :b :c2399; + :b :c2400; + :b :c2401; + :b :c2402; + :b :c2403; + :b :c2404; + :b :c2405; + :b :c2406; + :b :c2407; + :b :c2408; + :b :c2409; + :b :c2410; + :b :c2411; + :b :c2412; + :b :c2413; + :b :c2414; + :b :c2415; + :b :c2416; + :b :c2417; + :b :c2418; + :b :c2419; + :b :c2420; + :b :c2421; + :b :c2422; + :b :c2423; + :b :c2424; + :b :c2425; + :b :c2426; + :b :c2427; + :b :c2428; + :b :c2429; + :b :c2430; + :b :c2431; + :b :c2432; + :b :c2433; + :b :c2434; + :b :c2435; + :b :c2436; + :b :c2437; + :b :c2438; + :b :c2439; + :b :c2440; + :b :c2441; + :b :c2442; + :b :c2443; + :b :c2444; + :b :c2445; + :b :c2446; + :b :c2447; + :b :c2448; + :b :c2449; + :b :c2450; + :b :c2451; + :b :c2452; + :b :c2453; + :b :c2454; + :b :c2455; + :b :c2456; + :b :c2457; + :b :c2458; + :b :c2459; + :b :c2460; + :b :c2461; + :b :c2462; + :b :c2463; + :b :c2464; + :b :c2465; + :b :c2466; + :b :c2467; + :b :c2468; + :b :c2469; + :b :c2470; + :b :c2471; + :b :c2472; + :b :c2473; + :b :c2474; + :b :c2475; + :b :c2476; + :b :c2477; + :b :c2478; + :b :c2479; + :b :c2480; + :b :c2481; + :b :c2482; + :b :c2483; + :b :c2484; + :b :c2485; + :b :c2486; + :b :c2487; + :b :c2488; + :b :c2489; + :b :c2490; + :b :c2491; + :b :c2492; + :b :c2493; + :b :c2494; + :b :c2495; + :b :c2496; + :b :c2497; + :b :c2498; + :b :c2499; + :b :c2500; + :b :c2501; + :b :c2502; + :b :c2503; + :b :c2504; + :b :c2505; + :b :c2506; + :b :c2507; + :b :c2508; + :b :c2509; + :b :c2510; + :b :c2511; + :b :c2512; + :b :c2513; + :b :c2514; + :b :c2515; + :b :c2516; + :b :c2517; + :b :c2518; + :b :c2519; + :b :c2520; + :b :c2521; + :b :c2522; + :b :c2523; + :b :c2524; + :b :c2525; + :b :c2526; + :b :c2527; + :b :c2528; + :b :c2529; + :b :c2530; + :b :c2531; + :b :c2532; + :b :c2533; + :b :c2534; + :b :c2535; + :b :c2536; + :b :c2537; + :b :c2538; + :b :c2539; + :b :c2540; + :b :c2541; + :b :c2542; + :b :c2543; + :b :c2544; + :b :c2545; + :b :c2546; + :b :c2547; + :b :c2548; + :b :c2549; + :b :c2550; + :b :c2551; + :b :c2552; + :b :c2553; + :b :c2554; + :b :c2555; + :b :c2556; + :b :c2557; + :b :c2558; + :b :c2559; + :b :c2560; + :b :c2561; + :b :c2562; + :b :c2563; + :b :c2564; + :b :c2565; + :b :c2566; + :b :c2567; + :b :c2568; + :b :c2569; + :b :c2570; + :b :c2571; + :b :c2572; + :b :c2573; + :b :c2574; + :b :c2575; + :b :c2576; + :b :c2577; + :b :c2578; + :b :c2579; + :b :c2580; + :b :c2581; + :b :c2582; + :b :c2583; + :b :c2584; + :b :c2585; + :b :c2586; + :b :c2587; + :b :c2588; + :b :c2589; + :b :c2590; + :b :c2591; + :b :c2592; + :b :c2593; + :b :c2594; + :b :c2595; + :b :c2596; + :b :c2597; + :b :c2598; + :b :c2599; + :b :c2600; + :b :c2601; + :b :c2602; + :b :c2603; + :b :c2604; + :b :c2605; + :b :c2606; + :b :c2607; + :b :c2608; + :b :c2609; + :b :c2610; + :b :c2611; + :b :c2612; + :b :c2613; + :b :c2614; + :b :c2615; + :b :c2616; + :b :c2617; + :b :c2618; + :b :c2619; + :b :c2620; + :b :c2621; + :b :c2622; + :b :c2623; + :b :c2624; + :b :c2625; + :b :c2626; + :b :c2627; + :b :c2628; + :b :c2629; + :b :c2630; + :b :c2631; + :b :c2632; + :b :c2633; + :b :c2634; + :b :c2635; + :b :c2636; + :b :c2637; + :b :c2638; + :b :c2639; + :b :c2640; + :b :c2641; + :b :c2642; + :b :c2643; + :b :c2644; + :b :c2645; + :b :c2646; + :b :c2647; + :b :c2648; + :b :c2649; + :b :c2650; + :b :c2651; + :b :c2652; + :b :c2653; + :b :c2654; + :b :c2655; + :b :c2656; + :b :c2657; + :b :c2658; + :b :c2659; + :b :c2660; + :b :c2661; + :b :c2662; + :b :c2663; + :b :c2664; + :b :c2665; + :b :c2666; + :b :c2667; + :b :c2668; + :b :c2669; + :b :c2670; + :b :c2671; + :b :c2672; + :b :c2673; + :b :c2674; + :b :c2675; + :b :c2676; + :b :c2677; + :b :c2678; + :b :c2679; + :b :c2680; + :b :c2681; + :b :c2682; + :b :c2683; + :b :c2684; + :b :c2685; + :b :c2686; + :b :c2687; + :b :c2688; + :b :c2689; + :b :c2690; + :b :c2691; + :b :c2692; + :b :c2693; + :b :c2694; + :b :c2695; + :b :c2696; + :b :c2697; + :b :c2698; + :b :c2699; + :b :c2700; + :b :c2701; + :b :c2702; + :b :c2703; + :b :c2704; + :b :c2705; + :b :c2706; + :b :c2707; + :b :c2708; + :b :c2709; + :b :c2710; + :b :c2711; + :b :c2712; + :b :c2713; + :b :c2714; + :b :c2715; + :b :c2716; + :b :c2717; + :b :c2718; + :b :c2719; + :b :c2720; + :b :c2721; + :b :c2722; + :b :c2723; + :b :c2724; + :b :c2725; + :b :c2726; + :b :c2727; + :b :c2728; + :b :c2729; + :b :c2730; + :b :c2731; + :b :c2732; + :b :c2733; + :b :c2734; + :b :c2735; + :b :c2736; + :b :c2737; + :b :c2738; + :b :c2739; + :b :c2740; + :b :c2741; + :b :c2742; + :b :c2743; + :b :c2744; + :b :c2745; + :b :c2746; + :b :c2747; + :b :c2748; + :b :c2749; + :b :c2750; + :b :c2751; + :b :c2752; + :b :c2753; + :b :c2754; + :b :c2755; + :b :c2756; + :b :c2757; + :b :c2758; + :b :c2759; + :b :c2760; + :b :c2761; + :b :c2762; + :b :c2763; + :b :c2764; + :b :c2765; + :b :c2766; + :b :c2767; + :b :c2768; + :b :c2769; + :b :c2770; + :b :c2771; + :b :c2772; + :b :c2773; + :b :c2774; + :b :c2775; + :b :c2776; + :b :c2777; + :b :c2778; + :b :c2779; + :b :c2780; + :b :c2781; + :b :c2782; + :b :c2783; + :b :c2784; + :b :c2785; + :b :c2786; + :b :c2787; + :b :c2788; + :b :c2789; + :b :c2790; + :b :c2791; + :b :c2792; + :b :c2793; + :b :c2794; + :b :c2795; + :b :c2796; + :b :c2797; + :b :c2798; + :b :c2799; + :b :c2800; + :b :c2801; + :b :c2802; + :b :c2803; + :b :c2804; + :b :c2805; + :b :c2806; + :b :c2807; + :b :c2808; + :b :c2809; + :b :c2810; + :b :c2811; + :b :c2812; + :b :c2813; + :b :c2814; + :b :c2815; + :b :c2816; + :b :c2817; + :b :c2818; + :b :c2819; + :b :c2820; + :b :c2821; + :b :c2822; + :b :c2823; + :b :c2824; + :b :c2825; + :b :c2826; + :b :c2827; + :b :c2828; + :b :c2829; + :b :c2830; + :b :c2831; + :b :c2832; + :b :c2833; + :b :c2834; + :b :c2835; + :b :c2836; + :b :c2837; + :b :c2838; + :b :c2839; + :b :c2840; + :b :c2841; + :b :c2842; + :b :c2843; + :b :c2844; + :b :c2845; + :b :c2846; + :b :c2847; + :b :c2848; + :b :c2849; + :b :c2850; + :b :c2851; + :b :c2852; + :b :c2853; + :b :c2854; + :b :c2855; + :b :c2856; + :b :c2857; + :b :c2858; + :b :c2859; + :b :c2860; + :b :c2861; + :b :c2862; + :b :c2863; + :b :c2864; + :b :c2865; + :b :c2866; + :b :c2867; + :b :c2868; + :b :c2869; + :b :c2870; + :b :c2871; + :b :c2872; + :b :c2873; + :b :c2874; + :b :c2875; + :b :c2876; + :b :c2877; + :b :c2878; + :b :c2879; + :b :c2880; + :b :c2881; + :b :c2882; + :b :c2883; + :b :c2884; + :b :c2885; + :b :c2886; + :b :c2887; + :b :c2888; + :b :c2889; + :b :c2890; + :b :c2891; + :b :c2892; + :b :c2893; + :b :c2894; + :b :c2895; + :b :c2896; + :b :c2897; + :b :c2898; + :b :c2899; + :b :c2900; + :b :c2901; + :b :c2902; + :b :c2903; + :b :c2904; + :b :c2905; + :b :c2906; + :b :c2907; + :b :c2908; + :b :c2909; + :b :c2910; + :b :c2911; + :b :c2912; + :b :c2913; + :b :c2914; + :b :c2915; + :b :c2916; + :b :c2917; + :b :c2918; + :b :c2919; + :b :c2920; + :b :c2921; + :b :c2922; + :b :c2923; + :b :c2924; + :b :c2925; + :b :c2926; + :b :c2927; + :b :c2928; + :b :c2929; + :b :c2930; + :b :c2931; + :b :c2932; + :b :c2933; + :b :c2934; + :b :c2935; + :b :c2936; + :b :c2937; + :b :c2938; + :b :c2939; + :b :c2940; + :b :c2941; + :b :c2942; + :b :c2943; + :b :c2944; + :b :c2945; + :b :c2946; + :b :c2947; + :b :c2948; + :b :c2949; + :b :c2950; + :b :c2951; + :b :c2952; + :b :c2953; + :b :c2954; + :b :c2955; + :b :c2956; + :b :c2957; + :b :c2958; + :b :c2959; + :b :c2960; + :b :c2961; + :b :c2962; + :b :c2963; + :b :c2964; + :b :c2965; + :b :c2966; + :b :c2967; + :b :c2968; + :b :c2969; + :b :c2970; + :b :c2971; + :b :c2972; + :b :c2973; + :b :c2974; + :b :c2975; + :b :c2976; + :b :c2977; + :b :c2978; + :b :c2979; + :b :c2980; + :b :c2981; + :b :c2982; + :b :c2983; + :b :c2984; + :b :c2985; + :b :c2986; + :b :c2987; + :b :c2988; + :b :c2989; + :b :c2990; + :b :c2991; + :b :c2992; + :b :c2993; + :b :c2994; + :b :c2995; + :b :c2996; + :b :c2997; + :b :c2998; + :b :c2999; + :b :c3000; + :b :c3001; + :b :c3002; + :b :c3003; + :b :c3004; + :b :c3005; + :b :c3006; + :b :c3007; + :b :c3008; + :b :c3009; + :b :c3010; + :b :c3011; + :b :c3012; + :b :c3013; + :b :c3014; + :b :c3015; + :b :c3016; + :b :c3017; + :b :c3018; + :b :c3019; + :b :c3020; + :b :c3021; + :b :c3022; + :b :c3023; + :b :c3024; + :b :c3025; + :b :c3026; + :b :c3027; + :b :c3028; + :b :c3029; + :b :c3030; + :b :c3031; + :b :c3032; + :b :c3033; + :b :c3034; + :b :c3035; + :b :c3036; + :b :c3037; + :b :c3038; + :b :c3039; + :b :c3040; + :b :c3041; + :b :c3042; + :b :c3043; + :b :c3044; + :b :c3045; + :b :c3046; + :b :c3047; + :b :c3048; + :b :c3049; + :b :c3050; + :b :c3051; + :b :c3052; + :b :c3053; + :b :c3054; + :b :c3055; + :b :c3056; + :b :c3057; + :b :c3058; + :b :c3059; + :b :c3060; + :b :c3061; + :b :c3062; + :b :c3063; + :b :c3064; + :b :c3065; + :b :c3066; + :b :c3067; + :b :c3068; + :b :c3069; + :b :c3070; + :b :c3071; + :b :c3072; + :b :c3073; + :b :c3074; + :b :c3075; + :b :c3076; + :b :c3077; + :b :c3078; + :b :c3079; + :b :c3080; + :b :c3081; + :b :c3082; + :b :c3083; + :b :c3084; + :b :c3085; + :b :c3086; + :b :c3087; + :b :c3088; + :b :c3089; + :b :c3090; + :b :c3091; + :b :c3092; + :b :c3093; + :b :c3094; + :b :c3095; + :b :c3096; + :b :c3097; + :b :c3098; + :b :c3099; + :b :c3100; + :b :c3101; + :b :c3102; + :b :c3103; + :b :c3104; + :b :c3105; + :b :c3106; + :b :c3107; + :b :c3108; + :b :c3109; + :b :c3110; + :b :c3111; + :b :c3112; + :b :c3113; + :b :c3114; + :b :c3115; + :b :c3116; + :b :c3117; + :b :c3118; + :b :c3119; + :b :c3120; + :b :c3121; + :b :c3122; + :b :c3123; + :b :c3124; + :b :c3125; + :b :c3126; + :b :c3127; + :b :c3128; + :b :c3129; + :b :c3130; + :b :c3131; + :b :c3132; + :b :c3133; + :b :c3134; + :b :c3135; + :b :c3136; + :b :c3137; + :b :c3138; + :b :c3139; + :b :c3140; + :b :c3141; + :b :c3142; + :b :c3143; + :b :c3144; + :b :c3145; + :b :c3146; + :b :c3147; + :b :c3148; + :b :c3149; + :b :c3150; + :b :c3151; + :b :c3152; + :b :c3153; + :b :c3154; + :b :c3155; + :b :c3156; + :b :c3157; + :b :c3158; + :b :c3159; + :b :c3160; + :b :c3161; + :b :c3162; + :b :c3163; + :b :c3164; + :b :c3165; + :b :c3166; + :b :c3167; + :b :c3168; + :b :c3169; + :b :c3170; + :b :c3171; + :b :c3172; + :b :c3173; + :b :c3174; + :b :c3175; + :b :c3176; + :b :c3177; + :b :c3178; + :b :c3179; + :b :c3180; + :b :c3181; + :b :c3182; + :b :c3183; + :b :c3184; + :b :c3185; + :b :c3186; + :b :c3187; + :b :c3188; + :b :c3189; + :b :c3190; + :b :c3191; + :b :c3192; + :b :c3193; + :b :c3194; + :b :c3195; + :b :c3196; + :b :c3197; + :b :c3198; + :b :c3199; + :b :c3200; + :b :c3201; + :b :c3202; + :b :c3203; + :b :c3204; + :b :c3205; + :b :c3206; + :b :c3207; + :b :c3208; + :b :c3209; + :b :c3210; + :b :c3211; + :b :c3212; + :b :c3213; + :b :c3214; + :b :c3215; + :b :c3216; + :b :c3217; + :b :c3218; + :b :c3219; + :b :c3220; + :b :c3221; + :b :c3222; + :b :c3223; + :b :c3224; + :b :c3225; + :b :c3226; + :b :c3227; + :b :c3228; + :b :c3229; + :b :c3230; + :b :c3231; + :b :c3232; + :b :c3233; + :b :c3234; + :b :c3235; + :b :c3236; + :b :c3237; + :b :c3238; + :b :c3239; + :b :c3240; + :b :c3241; + :b :c3242; + :b :c3243; + :b :c3244; + :b :c3245; + :b :c3246; + :b :c3247; + :b :c3248; + :b :c3249; + :b :c3250; + :b :c3251; + :b :c3252; + :b :c3253; + :b :c3254; + :b :c3255; + :b :c3256; + :b :c3257; + :b :c3258; + :b :c3259; + :b :c3260; + :b :c3261; + :b :c3262; + :b :c3263; + :b :c3264; + :b :c3265; + :b :c3266; + :b :c3267; + :b :c3268; + :b :c3269; + :b :c3270; + :b :c3271; + :b :c3272; + :b :c3273; + :b :c3274; + :b :c3275; + :b :c3276; + :b :c3277; + :b :c3278; + :b :c3279; + :b :c3280; + :b :c3281; + :b :c3282; + :b :c3283; + :b :c3284; + :b :c3285; + :b :c3286; + :b :c3287; + :b :c3288; + :b :c3289; + :b :c3290; + :b :c3291; + :b :c3292; + :b :c3293; + :b :c3294; + :b :c3295; + :b :c3296; + :b :c3297; + :b :c3298; + :b :c3299; + :b :c3300; + :b :c3301; + :b :c3302; + :b :c3303; + :b :c3304; + :b :c3305; + :b :c3306; + :b :c3307; + :b :c3308; + :b :c3309; + :b :c3310; + :b :c3311; + :b :c3312; + :b :c3313; + :b :c3314; + :b :c3315; + :b :c3316; + :b :c3317; + :b :c3318; + :b :c3319; + :b :c3320; + :b :c3321; + :b :c3322; + :b :c3323; + :b :c3324; + :b :c3325; + :b :c3326; + :b :c3327; + :b :c3328; + :b :c3329; + :b :c3330; + :b :c3331; + :b :c3332; + :b :c3333; + :b :c3334; + :b :c3335; + :b :c3336; + :b :c3337; + :b :c3338; + :b :c3339; + :b :c3340; + :b :c3341; + :b :c3342; + :b :c3343; + :b :c3344; + :b :c3345; + :b :c3346; + :b :c3347; + :b :c3348; + :b :c3349; + :b :c3350; + :b :c3351; + :b :c3352; + :b :c3353; + :b :c3354; + :b :c3355; + :b :c3356; + :b :c3357; + :b :c3358; + :b :c3359; + :b :c3360; + :b :c3361; + :b :c3362; + :b :c3363; + :b :c3364; + :b :c3365; + :b :c3366; + :b :c3367; + :b :c3368; + :b :c3369; + :b :c3370; + :b :c3371; + :b :c3372; + :b :c3373; + :b :c3374; + :b :c3375; + :b :c3376; + :b :c3377; + :b :c3378; + :b :c3379; + :b :c3380; + :b :c3381; + :b :c3382; + :b :c3383; + :b :c3384; + :b :c3385; + :b :c3386; + :b :c3387; + :b :c3388; + :b :c3389; + :b :c3390; + :b :c3391; + :b :c3392; + :b :c3393; + :b :c3394; + :b :c3395; + :b :c3396; + :b :c3397; + :b :c3398; + :b :c3399; + :b :c3400; + :b :c3401; + :b :c3402; + :b :c3403; + :b :c3404; + :b :c3405; + :b :c3406; + :b :c3407; + :b :c3408; + :b :c3409; + :b :c3410; + :b :c3411; + :b :c3412; + :b :c3413; + :b :c3414; + :b :c3415; + :b :c3416; + :b :c3417; + :b :c3418; + :b :c3419; + :b :c3420; + :b :c3421; + :b :c3422; + :b :c3423; + :b :c3424; + :b :c3425; + :b :c3426; + :b :c3427; + :b :c3428; + :b :c3429; + :b :c3430; + :b :c3431; + :b :c3432; + :b :c3433; + :b :c3434; + :b :c3435; + :b :c3436; + :b :c3437; + :b :c3438; + :b :c3439; + :b :c3440; + :b :c3441; + :b :c3442; + :b :c3443; + :b :c3444; + :b :c3445; + :b :c3446; + :b :c3447; + :b :c3448; + :b :c3449; + :b :c3450; + :b :c3451; + :b :c3452; + :b :c3453; + :b :c3454; + :b :c3455; + :b :c3456; + :b :c3457; + :b :c3458; + :b :c3459; + :b :c3460; + :b :c3461; + :b :c3462; + :b :c3463; + :b :c3464; + :b :c3465; + :b :c3466; + :b :c3467; + :b :c3468; + :b :c3469; + :b :c3470; + :b :c3471; + :b :c3472; + :b :c3473; + :b :c3474; + :b :c3475; + :b :c3476; + :b :c3477; + :b :c3478; + :b :c3479; + :b :c3480; + :b :c3481; + :b :c3482; + :b :c3483; + :b :c3484; + :b :c3485; + :b :c3486; + :b :c3487; + :b :c3488; + :b :c3489; + :b :c3490; + :b :c3491; + :b :c3492; + :b :c3493; + :b :c3494; + :b :c3495; + :b :c3496; + :b :c3497; + :b :c3498; + :b :c3499; + :b :c3500; + :b :c3501; + :b :c3502; + :b :c3503; + :b :c3504; + :b :c3505; + :b :c3506; + :b :c3507; + :b :c3508; + :b :c3509; + :b :c3510; + :b :c3511; + :b :c3512; + :b :c3513; + :b :c3514; + :b :c3515; + :b :c3516; + :b :c3517; + :b :c3518; + :b :c3519; + :b :c3520; + :b :c3521; + :b :c3522; + :b :c3523; + :b :c3524; + :b :c3525; + :b :c3526; + :b :c3527; + :b :c3528; + :b :c3529; + :b :c3530; + :b :c3531; + :b :c3532; + :b :c3533; + :b :c3534; + :b :c3535; + :b :c3536; + :b :c3537; + :b :c3538; + :b :c3539; + :b :c3540; + :b :c3541; + :b :c3542; + :b :c3543; + :b :c3544; + :b :c3545; + :b :c3546; + :b :c3547; + :b :c3548; + :b :c3549; + :b :c3550; + :b :c3551; + :b :c3552; + :b :c3553; + :b :c3554; + :b :c3555; + :b :c3556; + :b :c3557; + :b :c3558; + :b :c3559; + :b :c3560; + :b :c3561; + :b :c3562; + :b :c3563; + :b :c3564; + :b :c3565; + :b :c3566; + :b :c3567; + :b :c3568; + :b :c3569; + :b :c3570; + :b :c3571; + :b :c3572; + :b :c3573; + :b :c3574; + :b :c3575; + :b :c3576; + :b :c3577; + :b :c3578; + :b :c3579; + :b :c3580; + :b :c3581; + :b :c3582; + :b :c3583; + :b :c3584; + :b :c3585; + :b :c3586; + :b :c3587; + :b :c3588; + :b :c3589; + :b :c3590; + :b :c3591; + :b :c3592; + :b :c3593; + :b :c3594; + :b :c3595; + :b :c3596; + :b :c3597; + :b :c3598; + :b :c3599; + :b :c3600; + :b :c3601; + :b :c3602; + :b :c3603; + :b :c3604; + :b :c3605; + :b :c3606; + :b :c3607; + :b :c3608; + :b :c3609; + :b :c3610; + :b :c3611; + :b :c3612; + :b :c3613; + :b :c3614; + :b :c3615; + :b :c3616; + :b :c3617; + :b :c3618; + :b :c3619; + :b :c3620; + :b :c3621; + :b :c3622; + :b :c3623; + :b :c3624; + :b :c3625; + :b :c3626; + :b :c3627; + :b :c3628; + :b :c3629; + :b :c3630; + :b :c3631; + :b :c3632; + :b :c3633; + :b :c3634; + :b :c3635; + :b :c3636; + :b :c3637; + :b :c3638; + :b :c3639; + :b :c3640; + :b :c3641; + :b :c3642; + :b :c3643; + :b :c3644; + :b :c3645; + :b :c3646; + :b :c3647; + :b :c3648; + :b :c3649; + :b :c3650; + :b :c3651; + :b :c3652; + :b :c3653; + :b :c3654; + :b :c3655; + :b :c3656; + :b :c3657; + :b :c3658; + :b :c3659; + :b :c3660; + :b :c3661; + :b :c3662; + :b :c3663; + :b :c3664; + :b :c3665; + :b :c3666; + :b :c3667; + :b :c3668; + :b :c3669; + :b :c3670; + :b :c3671; + :b :c3672; + :b :c3673; + :b :c3674; + :b :c3675; + :b :c3676; + :b :c3677; + :b :c3678; + :b :c3679; + :b :c3680; + :b :c3681; + :b :c3682; + :b :c3683; + :b :c3684; + :b :c3685; + :b :c3686; + :b :c3687; + :b :c3688; + :b :c3689; + :b :c3690; + :b :c3691; + :b :c3692; + :b :c3693; + :b :c3694; + :b :c3695; + :b :c3696; + :b :c3697; + :b :c3698; + :b :c3699; + :b :c3700; + :b :c3701; + :b :c3702; + :b :c3703; + :b :c3704; + :b :c3705; + :b :c3706; + :b :c3707; + :b :c3708; + :b :c3709; + :b :c3710; + :b :c3711; + :b :c3712; + :b :c3713; + :b :c3714; + :b :c3715; + :b :c3716; + :b :c3717; + :b :c3718; + :b :c3719; + :b :c3720; + :b :c3721; + :b :c3722; + :b :c3723; + :b :c3724; + :b :c3725; + :b :c3726; + :b :c3727; + :b :c3728; + :b :c3729; + :b :c3730; + :b :c3731; + :b :c3732; + :b :c3733; + :b :c3734; + :b :c3735; + :b :c3736; + :b :c3737; + :b :c3738; + :b :c3739; + :b :c3740; + :b :c3741; + :b :c3742; + :b :c3743; + :b :c3744; + :b :c3745; + :b :c3746; + :b :c3747; + :b :c3748; + :b :c3749; + :b :c3750; + :b :c3751; + :b :c3752; + :b :c3753; + :b :c3754; + :b :c3755; + :b :c3756; + :b :c3757; + :b :c3758; + :b :c3759; + :b :c3760; + :b :c3761; + :b :c3762; + :b :c3763; + :b :c3764; + :b :c3765; + :b :c3766; + :b :c3767; + :b :c3768; + :b :c3769; + :b :c3770; + :b :c3771; + :b :c3772; + :b :c3773; + :b :c3774; + :b :c3775; + :b :c3776; + :b :c3777; + :b :c3778; + :b :c3779; + :b :c3780; + :b :c3781; + :b :c3782; + :b :c3783; + :b :c3784; + :b :c3785; + :b :c3786; + :b :c3787; + :b :c3788; + :b :c3789; + :b :c3790; + :b :c3791; + :b :c3792; + :b :c3793; + :b :c3794; + :b :c3795; + :b :c3796; + :b :c3797; + :b :c3798; + :b :c3799; + :b :c3800; + :b :c3801; + :b :c3802; + :b :c3803; + :b :c3804; + :b :c3805; + :b :c3806; + :b :c3807; + :b :c3808; + :b :c3809; + :b :c3810; + :b :c3811; + :b :c3812; + :b :c3813; + :b :c3814; + :b :c3815; + :b :c3816; + :b :c3817; + :b :c3818; + :b :c3819; + :b :c3820; + :b :c3821; + :b :c3822; + :b :c3823; + :b :c3824; + :b :c3825; + :b :c3826; + :b :c3827; + :b :c3828; + :b :c3829; + :b :c3830; + :b :c3831; + :b :c3832; + :b :c3833; + :b :c3834; + :b :c3835; + :b :c3836; + :b :c3837; + :b :c3838; + :b :c3839; + :b :c3840; + :b :c3841; + :b :c3842; + :b :c3843; + :b :c3844; + :b :c3845; + :b :c3846; + :b :c3847; + :b :c3848; + :b :c3849; + :b :c3850; + :b :c3851; + :b :c3852; + :b :c3853; + :b :c3854; + :b :c3855; + :b :c3856; + :b :c3857; + :b :c3858; + :b :c3859; + :b :c3860; + :b :c3861; + :b :c3862; + :b :c3863; + :b :c3864; + :b :c3865; + :b :c3866; + :b :c3867; + :b :c3868; + :b :c3869; + :b :c3870; + :b :c3871; + :b :c3872; + :b :c3873; + :b :c3874; + :b :c3875; + :b :c3876; + :b :c3877; + :b :c3878; + :b :c3879; + :b :c3880; + :b :c3881; + :b :c3882; + :b :c3883; + :b :c3884; + :b :c3885; + :b :c3886; + :b :c3887; + :b :c3888; + :b :c3889; + :b :c3890; + :b :c3891; + :b :c3892; + :b :c3893; + :b :c3894; + :b :c3895; + :b :c3896; + :b :c3897; + :b :c3898; + :b :c3899; + :b :c3900; + :b :c3901; + :b :c3902; + :b :c3903; + :b :c3904; + :b :c3905; + :b :c3906; + :b :c3907; + :b :c3908; + :b :c3909; + :b :c3910; + :b :c3911; + :b :c3912; + :b :c3913; + :b :c3914; + :b :c3915; + :b :c3916; + :b :c3917; + :b :c3918; + :b :c3919; + :b :c3920; + :b :c3921; + :b :c3922; + :b :c3923; + :b :c3924; + :b :c3925; + :b :c3926; + :b :c3927; + :b :c3928; + :b :c3929; + :b :c3930; + :b :c3931; + :b :c3932; + :b :c3933; + :b :c3934; + :b :c3935; + :b :c3936; + :b :c3937; + :b :c3938; + :b :c3939; + :b :c3940; + :b :c3941; + :b :c3942; + :b :c3943; + :b :c3944; + :b :c3945; + :b :c3946; + :b :c3947; + :b :c3948; + :b :c3949; + :b :c3950; + :b :c3951; + :b :c3952; + :b :c3953; + :b :c3954; + :b :c3955; + :b :c3956; + :b :c3957; + :b :c3958; + :b :c3959; + :b :c3960; + :b :c3961; + :b :c3962; + :b :c3963; + :b :c3964; + :b :c3965; + :b :c3966; + :b :c3967; + :b :c3968; + :b :c3969; + :b :c3970; + :b :c3971; + :b :c3972; + :b :c3973; + :b :c3974; + :b :c3975; + :b :c3976; + :b :c3977; + :b :c3978; + :b :c3979; + :b :c3980; + :b :c3981; + :b :c3982; + :b :c3983; + :b :c3984; + :b :c3985; + :b :c3986; + :b :c3987; + :b :c3988; + :b :c3989; + :b :c3990; + :b :c3991; + :b :c3992; + :b :c3993; + :b :c3994; + :b :c3995; + :b :c3996; + :b :c3997; + :b :c3998; + :b :c3999; + :b :c4000; + :b :c4001; + :b :c4002; + :b :c4003; + :b :c4004; + :b :c4005; + :b :c4006; + :b :c4007; + :b :c4008; + :b :c4009; + :b :c4010; + :b :c4011; + :b :c4012; + :b :c4013; + :b :c4014; + :b :c4015; + :b :c4016; + :b :c4017; + :b :c4018; + :b :c4019; + :b :c4020; + :b :c4021; + :b :c4022; + :b :c4023; + :b :c4024; + :b :c4025; + :b :c4026; + :b :c4027; + :b :c4028; + :b :c4029; + :b :c4030; + :b :c4031; + :b :c4032; + :b :c4033; + :b :c4034; + :b :c4035; + :b :c4036; + :b :c4037; + :b :c4038; + :b :c4039; + :b :c4040; + :b :c4041; + :b :c4042; + :b :c4043; + :b :c4044; + :b :c4045; + :b :c4046; + :b :c4047; + :b :c4048; + :b :c4049; + :b :c4050; + :b :c4051; + :b :c4052; + :b :c4053; + :b :c4054; + :b :c4055; + :b :c4056; + :b :c4057; + :b :c4058; + :b :c4059; + :b :c4060; + :b :c4061; + :b :c4062; + :b :c4063; + :b :c4064; + :b :c4065; + :b :c4066; + :b :c4067; + :b :c4068; + :b :c4069; + :b :c4070; + :b :c4071; + :b :c4072; + :b :c4073; + :b :c4074; + :b :c4075; + :b :c4076; + :b :c4077; + :b :c4078; + :b :c4079; + :b :c4080; + :b :c4081; + :b :c4082; + :b :c4083; + :b :c4084; + :b :c4085; + :b :c4086; + :b :c4087; + :b :c4088; + :b :c4089; + :b :c4090; + :b :c4091; + :b :c4092; + :b :c4093; + :b :c4094; + :b :c4095; + :b :c4096; + :b :c4097; + :b :c4098; + :b :c4099; + :b :c4100; + :b :c4101; + :b :c4102; + :b :c4103; + :b :c4104; + :b :c4105; + :b :c4106; + :b :c4107; + :b :c4108; + :b :c4109; + :b :c4110; + :b :c4111; + :b :c4112; + :b :c4113; + :b :c4114; + :b :c4115; + :b :c4116; + :b :c4117; + :b :c4118; + :b :c4119; + :b :c4120; + :b :c4121; + :b :c4122; + :b :c4123; + :b :c4124; + :b :c4125; + :b :c4126; + :b :c4127; + :b :c4128; + :b :c4129; + :b :c4130; + :b :c4131; + :b :c4132; + :b :c4133; + :b :c4134; + :b :c4135; + :b :c4136; + :b :c4137; + :b :c4138; + :b :c4139; + :b :c4140; + :b :c4141; + :b :c4142; + :b :c4143; + :b :c4144; + :b :c4145; + :b :c4146; + :b :c4147; + :b :c4148; + :b :c4149; + :b :c4150; + :b :c4151; + :b :c4152; + :b :c4153; + :b :c4154; + :b :c4155; + :b :c4156; + :b :c4157; + :b :c4158; + :b :c4159; + :b :c4160; + :b :c4161; + :b :c4162; + :b :c4163; + :b :c4164; + :b :c4165; + :b :c4166; + :b :c4167; + :b :c4168; + :b :c4169; + :b :c4170; + :b :c4171; + :b :c4172; + :b :c4173; + :b :c4174; + :b :c4175; + :b :c4176; + :b :c4177; + :b :c4178; + :b :c4179; + :b :c4180; + :b :c4181; + :b :c4182; + :b :c4183; + :b :c4184; + :b :c4185; + :b :c4186; + :b :c4187; + :b :c4188; + :b :c4189; + :b :c4190; + :b :c4191; + :b :c4192; + :b :c4193; + :b :c4194; + :b :c4195; + :b :c4196; + :b :c4197; + :b :c4198; + :b :c4199; + :b :c4200; + :b :c4201; + :b :c4202; + :b :c4203; + :b :c4204; + :b :c4205; + :b :c4206; + :b :c4207; + :b :c4208; + :b :c4209; + :b :c4210; + :b :c4211; + :b :c4212; + :b :c4213; + :b :c4214; + :b :c4215; + :b :c4216; + :b :c4217; + :b :c4218; + :b :c4219; + :b :c4220; + :b :c4221; + :b :c4222; + :b :c4223; + :b :c4224; + :b :c4225; + :b :c4226; + :b :c4227; + :b :c4228; + :b :c4229; + :b :c4230; + :b :c4231; + :b :c4232; + :b :c4233; + :b :c4234; + :b :c4235; + :b :c4236; + :b :c4237; + :b :c4238; + :b :c4239; + :b :c4240; + :b :c4241; + :b :c4242; + :b :c4243; + :b :c4244; + :b :c4245; + :b :c4246; + :b :c4247; + :b :c4248; + :b :c4249; + :b :c4250; + :b :c4251; + :b :c4252; + :b :c4253; + :b :c4254; + :b :c4255; + :b :c4256; + :b :c4257; + :b :c4258; + :b :c4259; + :b :c4260; + :b :c4261; + :b :c4262; + :b :c4263; + :b :c4264; + :b :c4265; + :b :c4266; + :b :c4267; + :b :c4268; + :b :c4269; + :b :c4270; + :b :c4271; + :b :c4272; + :b :c4273; + :b :c4274; + :b :c4275; + :b :c4276; + :b :c4277; + :b :c4278; + :b :c4279; + :b :c4280; + :b :c4281; + :b :c4282; + :b :c4283; + :b :c4284; + :b :c4285; + :b :c4286; + :b :c4287; + :b :c4288; + :b :c4289; + :b :c4290; + :b :c4291; + :b :c4292; + :b :c4293; + :b :c4294; + :b :c4295; + :b :c4296; + :b :c4297; + :b :c4298; + :b :c4299; + :b :c4300; + :b :c4301; + :b :c4302; + :b :c4303; + :b :c4304; + :b :c4305; + :b :c4306; + :b :c4307; + :b :c4308; + :b :c4309; + :b :c4310; + :b :c4311; + :b :c4312; + :b :c4313; + :b :c4314; + :b :c4315; + :b :c4316; + :b :c4317; + :b :c4318; + :b :c4319; + :b :c4320; + :b :c4321; + :b :c4322; + :b :c4323; + :b :c4324; + :b :c4325; + :b :c4326; + :b :c4327; + :b :c4328; + :b :c4329; + :b :c4330; + :b :c4331; + :b :c4332; + :b :c4333; + :b :c4334; + :b :c4335; + :b :c4336; + :b :c4337; + :b :c4338; + :b :c4339; + :b :c4340; + :b :c4341; + :b :c4342; + :b :c4343; + :b :c4344; + :b :c4345; + :b :c4346; + :b :c4347; + :b :c4348; + :b :c4349; + :b :c4350; + :b :c4351; + :b :c4352; + :b :c4353; + :b :c4354; + :b :c4355; + :b :c4356; + :b :c4357; + :b :c4358; + :b :c4359; + :b :c4360; + :b :c4361; + :b :c4362; + :b :c4363; + :b :c4364; + :b :c4365; + :b :c4366; + :b :c4367; + :b :c4368; + :b :c4369; + :b :c4370; + :b :c4371; + :b :c4372; + :b :c4373; + :b :c4374; + :b :c4375; + :b :c4376; + :b :c4377; + :b :c4378; + :b :c4379; + :b :c4380; + :b :c4381; + :b :c4382; + :b :c4383; + :b :c4384; + :b :c4385; + :b :c4386; + :b :c4387; + :b :c4388; + :b :c4389; + :b :c4390; + :b :c4391; + :b :c4392; + :b :c4393; + :b :c4394; + :b :c4395; + :b :c4396; + :b :c4397; + :b :c4398; + :b :c4399; + :b :c4400; + :b :c4401; + :b :c4402; + :b :c4403; + :b :c4404; + :b :c4405; + :b :c4406; + :b :c4407; + :b :c4408; + :b :c4409; + :b :c4410; + :b :c4411; + :b :c4412; + :b :c4413; + :b :c4414; + :b :c4415; + :b :c4416; + :b :c4417; + :b :c4418; + :b :c4419; + :b :c4420; + :b :c4421; + :b :c4422; + :b :c4423; + :b :c4424; + :b :c4425; + :b :c4426; + :b :c4427; + :b :c4428; + :b :c4429; + :b :c4430; + :b :c4431; + :b :c4432; + :b :c4433; + :b :c4434; + :b :c4435; + :b :c4436; + :b :c4437; + :b :c4438; + :b :c4439; + :b :c4440; + :b :c4441; + :b :c4442; + :b :c4443; + :b :c4444; + :b :c4445; + :b :c4446; + :b :c4447; + :b :c4448; + :b :c4449; + :b :c4450; + :b :c4451; + :b :c4452; + :b :c4453; + :b :c4454; + :b :c4455; + :b :c4456; + :b :c4457; + :b :c4458; + :b :c4459; + :b :c4460; + :b :c4461; + :b :c4462; + :b :c4463; + :b :c4464; + :b :c4465; + :b :c4466; + :b :c4467; + :b :c4468; + :b :c4469; + :b :c4470; + :b :c4471; + :b :c4472; + :b :c4473; + :b :c4474; + :b :c4475; + :b :c4476; + :b :c4477; + :b :c4478; + :b :c4479; + :b :c4480; + :b :c4481; + :b :c4482; + :b :c4483; + :b :c4484; + :b :c4485; + :b :c4486; + :b :c4487; + :b :c4488; + :b :c4489; + :b :c4490; + :b :c4491; + :b :c4492; + :b :c4493; + :b :c4494; + :b :c4495; + :b :c4496; + :b :c4497; + :b :c4498; + :b :c4499; + :b :c4500; + :b :c4501; + :b :c4502; + :b :c4503; + :b :c4504; + :b :c4505; + :b :c4506; + :b :c4507; + :b :c4508; + :b :c4509; + :b :c4510; + :b :c4511; + :b :c4512; + :b :c4513; + :b :c4514; + :b :c4515; + :b :c4516; + :b :c4517; + :b :c4518; + :b :c4519; + :b :c4520; + :b :c4521; + :b :c4522; + :b :c4523; + :b :c4524; + :b :c4525; + :b :c4526; + :b :c4527; + :b :c4528; + :b :c4529; + :b :c4530; + :b :c4531; + :b :c4532; + :b :c4533; + :b :c4534; + :b :c4535; + :b :c4536; + :b :c4537; + :b :c4538; + :b :c4539; + :b :c4540; + :b :c4541; + :b :c4542; + :b :c4543; + :b :c4544; + :b :c4545; + :b :c4546; + :b :c4547; + :b :c4548; + :b :c4549; + :b :c4550; + :b :c4551; + :b :c4552; + :b :c4553; + :b :c4554; + :b :c4555; + :b :c4556; + :b :c4557; + :b :c4558; + :b :c4559; + :b :c4560; + :b :c4561; + :b :c4562; + :b :c4563; + :b :c4564; + :b :c4565; + :b :c4566; + :b :c4567; + :b :c4568; + :b :c4569; + :b :c4570; + :b :c4571; + :b :c4572; + :b :c4573; + :b :c4574; + :b :c4575; + :b :c4576; + :b :c4577; + :b :c4578; + :b :c4579; + :b :c4580; + :b :c4581; + :b :c4582; + :b :c4583; + :b :c4584; + :b :c4585; + :b :c4586; + :b :c4587; + :b :c4588; + :b :c4589; + :b :c4590; + :b :c4591; + :b :c4592; + :b :c4593; + :b :c4594; + :b :c4595; + :b :c4596; + :b :c4597; + :b :c4598; + :b :c4599; + :b :c4600; + :b :c4601; + :b :c4602; + :b :c4603; + :b :c4604; + :b :c4605; + :b :c4606; + :b :c4607; + :b :c4608; + :b :c4609; + :b :c4610; + :b :c4611; + :b :c4612; + :b :c4613; + :b :c4614; + :b :c4615; + :b :c4616; + :b :c4617; + :b :c4618; + :b :c4619; + :b :c4620; + :b :c4621; + :b :c4622; + :b :c4623; + :b :c4624; + :b :c4625; + :b :c4626; + :b :c4627; + :b :c4628; + :b :c4629; + :b :c4630; + :b :c4631; + :b :c4632; + :b :c4633; + :b :c4634; + :b :c4635; + :b :c4636; + :b :c4637; + :b :c4638; + :b :c4639; + :b :c4640; + :b :c4641; + :b :c4642; + :b :c4643; + :b :c4644; + :b :c4645; + :b :c4646; + :b :c4647; + :b :c4648; + :b :c4649; + :b :c4650; + :b :c4651; + :b :c4652; + :b :c4653; + :b :c4654; + :b :c4655; + :b :c4656; + :b :c4657; + :b :c4658; + :b :c4659; + :b :c4660; + :b :c4661; + :b :c4662; + :b :c4663; + :b :c4664; + :b :c4665; + :b :c4666; + :b :c4667; + :b :c4668; + :b :c4669; + :b :c4670; + :b :c4671; + :b :c4672; + :b :c4673; + :b :c4674; + :b :c4675; + :b :c4676; + :b :c4677; + :b :c4678; + :b :c4679; + :b :c4680; + :b :c4681; + :b :c4682; + :b :c4683; + :b :c4684; + :b :c4685; + :b :c4686; + :b :c4687; + :b :c4688; + :b :c4689; + :b :c4690; + :b :c4691; + :b :c4692; + :b :c4693; + :b :c4694; + :b :c4695; + :b :c4696; + :b :c4697; + :b :c4698; + :b :c4699; + :b :c4700; + :b :c4701; + :b :c4702; + :b :c4703; + :b :c4704; + :b :c4705; + :b :c4706; + :b :c4707; + :b :c4708; + :b :c4709; + :b :c4710; + :b :c4711; + :b :c4712; + :b :c4713; + :b :c4714; + :b :c4715; + :b :c4716; + :b :c4717; + :b :c4718; + :b :c4719; + :b :c4720; + :b :c4721; + :b :c4722; + :b :c4723; + :b :c4724; + :b :c4725; + :b :c4726; + :b :c4727; + :b :c4728; + :b :c4729; + :b :c4730; + :b :c4731; + :b :c4732; + :b :c4733; + :b :c4734; + :b :c4735; + :b :c4736; + :b :c4737; + :b :c4738; + :b :c4739; + :b :c4740; + :b :c4741; + :b :c4742; + :b :c4743; + :b :c4744; + :b :c4745; + :b :c4746; + :b :c4747; + :b :c4748; + :b :c4749; + :b :c4750; + :b :c4751; + :b :c4752; + :b :c4753; + :b :c4754; + :b :c4755; + :b :c4756; + :b :c4757; + :b :c4758; + :b :c4759; + :b :c4760; + :b :c4761; + :b :c4762; + :b :c4763; + :b :c4764; + :b :c4765; + :b :c4766; + :b :c4767; + :b :c4768; + :b :c4769; + :b :c4770; + :b :c4771; + :b :c4772; + :b :c4773; + :b :c4774; + :b :c4775; + :b :c4776; + :b :c4777; + :b :c4778; + :b :c4779; + :b :c4780; + :b :c4781; + :b :c4782; + :b :c4783; + :b :c4784; + :b :c4785; + :b :c4786; + :b :c4787; + :b :c4788; + :b :c4789; + :b :c4790; + :b :c4791; + :b :c4792; + :b :c4793; + :b :c4794; + :b :c4795; + :b :c4796; + :b :c4797; + :b :c4798; + :b :c4799; + :b :c4800; + :b :c4801; + :b :c4802; + :b :c4803; + :b :c4804; + :b :c4805; + :b :c4806; + :b :c4807; + :b :c4808; + :b :c4809; + :b :c4810; + :b :c4811; + :b :c4812; + :b :c4813; + :b :c4814; + :b :c4815; + :b :c4816; + :b :c4817; + :b :c4818; + :b :c4819; + :b :c4820; + :b :c4821; + :b :c4822; + :b :c4823; + :b :c4824; + :b :c4825; + :b :c4826; + :b :c4827; + :b :c4828; + :b :c4829; + :b :c4830; + :b :c4831; + :b :c4832; + :b :c4833; + :b :c4834; + :b :c4835; + :b :c4836; + :b :c4837; + :b :c4838; + :b :c4839; + :b :c4840; + :b :c4841; + :b :c4842; + :b :c4843; + :b :c4844; + :b :c4845; + :b :c4846; + :b :c4847; + :b :c4848; + :b :c4849; + :b :c4850; + :b :c4851; + :b :c4852; + :b :c4853; + :b :c4854; + :b :c4855; + :b :c4856; + :b :c4857; + :b :c4858; + :b :c4859; + :b :c4860; + :b :c4861; + :b :c4862; + :b :c4863; + :b :c4864; + :b :c4865; + :b :c4866; + :b :c4867; + :b :c4868; + :b :c4869; + :b :c4870; + :b :c4871; + :b :c4872; + :b :c4873; + :b :c4874; + :b :c4875; + :b :c4876; + :b :c4877; + :b :c4878; + :b :c4879; + :b :c4880; + :b :c4881; + :b :c4882; + :b :c4883; + :b :c4884; + :b :c4885; + :b :c4886; + :b :c4887; + :b :c4888; + :b :c4889; + :b :c4890; + :b :c4891; + :b :c4892; + :b :c4893; + :b :c4894; + :b :c4895; + :b :c4896; + :b :c4897; + :b :c4898; + :b :c4899; + :b :c4900; + :b :c4901; + :b :c4902; + :b :c4903; + :b :c4904; + :b :c4905; + :b :c4906; + :b :c4907; + :b :c4908; + :b :c4909; + :b :c4910; + :b :c4911; + :b :c4912; + :b :c4913; + :b :c4914; + :b :c4915; + :b :c4916; + :b :c4917; + :b :c4918; + :b :c4919; + :b :c4920; + :b :c4921; + :b :c4922; + :b :c4923; + :b :c4924; + :b :c4925; + :b :c4926; + :b :c4927; + :b :c4928; + :b :c4929; + :b :c4930; + :b :c4931; + :b :c4932; + :b :c4933; + :b :c4934; + :b :c4935; + :b :c4936; + :b :c4937; + :b :c4938; + :b :c4939; + :b :c4940; + :b :c4941; + :b :c4942; + :b :c4943; + :b :c4944; + :b :c4945; + :b :c4946; + :b :c4947; + :b :c4948; + :b :c4949; + :b :c4950; + :b :c4951; + :b :c4952; + :b :c4953; + :b :c4954; + :b :c4955; + :b :c4956; + :b :c4957; + :b :c4958; + :b :c4959; + :b :c4960; + :b :c4961; + :b :c4962; + :b :c4963; + :b :c4964; + :b :c4965; + :b :c4966; + :b :c4967; + :b :c4968; + :b :c4969; + :b :c4970; + :b :c4971; + :b :c4972; + :b :c4973; + :b :c4974; + :b :c4975; + :b :c4976; + :b :c4977; + :b :c4978; + :b :c4979; + :b :c4980; + :b :c4981; + :b :c4982; + :b :c4983; + :b :c4984; + :b :c4985; + :b :c4986; + :b :c4987; + :b :c4988; + :b :c4989; + :b :c4990; + :b :c4991; + :b :c4992; + :b :c4993; + :b :c4994; + :b :c4995; + :b :c4996; + :b :c4997; + :b :c4998; + :b :c4999; + :b :c5000; + :b :c5001; + :b :c5002; + :b :c5003; + :b :c5004; + :b :c5005; + :b :c5006; + :b :c5007; + :b :c5008; + :b :c5009; + :b :c5010; + :b :c5011; + :b :c5012; + :b :c5013; + :b :c5014; + :b :c5015; + :b :c5016; + :b :c5017; + :b :c5018; + :b :c5019; + :b :c5020; + :b :c5021; + :b :c5022; + :b :c5023; + :b :c5024; + :b :c5025; + :b :c5026; + :b :c5027; + :b :c5028; + :b :c5029; + :b :c5030; + :b :c5031; + :b :c5032; + :b :c5033; + :b :c5034; + :b :c5035; + :b :c5036; + :b :c5037; + :b :c5038; + :b :c5039; + :b :c5040; + :b :c5041; + :b :c5042; + :b :c5043; + :b :c5044; + :b :c5045; + :b :c5046; + :b :c5047; + :b :c5048; + :b :c5049; + :b :c5050; + :b :c5051; + :b :c5052; + :b :c5053; + :b :c5054; + :b :c5055; + :b :c5056; + :b :c5057; + :b :c5058; + :b :c5059; + :b :c5060; + :b :c5061; + :b :c5062; + :b :c5063; + :b :c5064; + :b :c5065; + :b :c5066; + :b :c5067; + :b :c5068; + :b :c5069; + :b :c5070; + :b :c5071; + :b :c5072; + :b :c5073; + :b :c5074; + :b :c5075; + :b :c5076; + :b :c5077; + :b :c5078; + :b :c5079; + :b :c5080; + :b :c5081; + :b :c5082; + :b :c5083; + :b :c5084; + :b :c5085; + :b :c5086; + :b :c5087; + :b :c5088; + :b :c5089; + :b :c5090; + :b :c5091; + :b :c5092; + :b :c5093; + :b :c5094; + :b :c5095; + :b :c5096; + :b :c5097; + :b :c5098; + :b :c5099; + :b :c5100; + :b :c5101; + :b :c5102; + :b :c5103; + :b :c5104; + :b :c5105; + :b :c5106; + :b :c5107; + :b :c5108; + :b :c5109; + :b :c5110; + :b :c5111; + :b :c5112; + :b :c5113; + :b :c5114; + :b :c5115; + :b :c5116; + :b :c5117; + :b :c5118; + :b :c5119; + :b :c5120; + :b :c5121; + :b :c5122; + :b :c5123; + :b :c5124; + :b :c5125; + :b :c5126; + :b :c5127; + :b :c5128; + :b :c5129; + :b :c5130; + :b :c5131; + :b :c5132; + :b :c5133; + :b :c5134; + :b :c5135; + :b :c5136; + :b :c5137; + :b :c5138; + :b :c5139; + :b :c5140; + :b :c5141; + :b :c5142; + :b :c5143; + :b :c5144; + :b :c5145; + :b :c5146; + :b :c5147; + :b :c5148; + :b :c5149; + :b :c5150; + :b :c5151; + :b :c5152; + :b :c5153; + :b :c5154; + :b :c5155; + :b :c5156; + :b :c5157; + :b :c5158; + :b :c5159; + :b :c5160; + :b :c5161; + :b :c5162; + :b :c5163; + :b :c5164; + :b :c5165; + :b :c5166; + :b :c5167; + :b :c5168; + :b :c5169; + :b :c5170; + :b :c5171; + :b :c5172; + :b :c5173; + :b :c5174; + :b :c5175; + :b :c5176; + :b :c5177; + :b :c5178; + :b :c5179; + :b :c5180; + :b :c5181; + :b :c5182; + :b :c5183; + :b :c5184; + :b :c5185; + :b :c5186; + :b :c5187; + :b :c5188; + :b :c5189; + :b :c5190; + :b :c5191; + :b :c5192; + :b :c5193; + :b :c5194; + :b :c5195; + :b :c5196; + :b :c5197; + :b :c5198; + :b :c5199; + :b :c5200; + :b :c5201; + :b :c5202; + :b :c5203; + :b :c5204; + :b :c5205; + :b :c5206; + :b :c5207; + :b :c5208; + :b :c5209; + :b :c5210; + :b :c5211; + :b :c5212; + :b :c5213; + :b :c5214; + :b :c5215; + :b :c5216; + :b :c5217; + :b :c5218; + :b :c5219; + :b :c5220; + :b :c5221; + :b :c5222; + :b :c5223; + :b :c5224; + :b :c5225; + :b :c5226; + :b :c5227; + :b :c5228; + :b :c5229; + :b :c5230; + :b :c5231; + :b :c5232; + :b :c5233; + :b :c5234; + :b :c5235; + :b :c5236; + :b :c5237; + :b :c5238; + :b :c5239; + :b :c5240; + :b :c5241; + :b :c5242; + :b :c5243; + :b :c5244; + :b :c5245; + :b :c5246; + :b :c5247; + :b :c5248; + :b :c5249; + :b :c5250; + :b :c5251; + :b :c5252; + :b :c5253; + :b :c5254; + :b :c5255; + :b :c5256; + :b :c5257; + :b :c5258; + :b :c5259; + :b :c5260; + :b :c5261; + :b :c5262; + :b :c5263; + :b :c5264; + :b :c5265; + :b :c5266; + :b :c5267; + :b :c5268; + :b :c5269; + :b :c5270; + :b :c5271; + :b :c5272; + :b :c5273; + :b :c5274; + :b :c5275; + :b :c5276; + :b :c5277; + :b :c5278; + :b :c5279; + :b :c5280; + :b :c5281; + :b :c5282; + :b :c5283; + :b :c5284; + :b :c5285; + :b :c5286; + :b :c5287; + :b :c5288; + :b :c5289; + :b :c5290; + :b :c5291; + :b :c5292; + :b :c5293; + :b :c5294; + :b :c5295; + :b :c5296; + :b :c5297; + :b :c5298; + :b :c5299; + :b :c5300; + :b :c5301; + :b :c5302; + :b :c5303; + :b :c5304; + :b :c5305; + :b :c5306; + :b :c5307; + :b :c5308; + :b :c5309; + :b :c5310; + :b :c5311; + :b :c5312; + :b :c5313; + :b :c5314; + :b :c5315; + :b :c5316; + :b :c5317; + :b :c5318; + :b :c5319; + :b :c5320; + :b :c5321; + :b :c5322; + :b :c5323; + :b :c5324; + :b :c5325; + :b :c5326; + :b :c5327; + :b :c5328; + :b :c5329; + :b :c5330; + :b :c5331; + :b :c5332; + :b :c5333; + :b :c5334; + :b :c5335; + :b :c5336; + :b :c5337; + :b :c5338; + :b :c5339; + :b :c5340; + :b :c5341; + :b :c5342; + :b :c5343; + :b :c5344; + :b :c5345; + :b :c5346; + :b :c5347; + :b :c5348; + :b :c5349; + :b :c5350; + :b :c5351; + :b :c5352; + :b :c5353; + :b :c5354; + :b :c5355; + :b :c5356; + :b :c5357; + :b :c5358; + :b :c5359; + :b :c5360; + :b :c5361; + :b :c5362; + :b :c5363; + :b :c5364; + :b :c5365; + :b :c5366; + :b :c5367; + :b :c5368; + :b :c5369; + :b :c5370; + :b :c5371; + :b :c5372; + :b :c5373; + :b :c5374; + :b :c5375; + :b :c5376; + :b :c5377; + :b :c5378; + :b :c5379; + :b :c5380; + :b :c5381; + :b :c5382; + :b :c5383; + :b :c5384; + :b :c5385; + :b :c5386; + :b :c5387; + :b :c5388; + :b :c5389; + :b :c5390; + :b :c5391; + :b :c5392; + :b :c5393; + :b :c5394; + :b :c5395; + :b :c5396; + :b :c5397; + :b :c5398; + :b :c5399; + :b :c5400; + :b :c5401; + :b :c5402; + :b :c5403; + :b :c5404; + :b :c5405; + :b :c5406; + :b :c5407; + :b :c5408; + :b :c5409; + :b :c5410; + :b :c5411; + :b :c5412; + :b :c5413; + :b :c5414; + :b :c5415; + :b :c5416; + :b :c5417; + :b :c5418; + :b :c5419; + :b :c5420; + :b :c5421; + :b :c5422; + :b :c5423; + :b :c5424; + :b :c5425; + :b :c5426; + :b :c5427; + :b :c5428; + :b :c5429; + :b :c5430; + :b :c5431; + :b :c5432; + :b :c5433; + :b :c5434; + :b :c5435; + :b :c5436; + :b :c5437; + :b :c5438; + :b :c5439; + :b :c5440; + :b :c5441; + :b :c5442; + :b :c5443; + :b :c5444; + :b :c5445; + :b :c5446; + :b :c5447; + :b :c5448; + :b :c5449; + :b :c5450; + :b :c5451; + :b :c5452; + :b :c5453; + :b :c5454; + :b :c5455; + :b :c5456; + :b :c5457; + :b :c5458; + :b :c5459; + :b :c5460; + :b :c5461; + :b :c5462; + :b :c5463; + :b :c5464; + :b :c5465; + :b :c5466; + :b :c5467; + :b :c5468; + :b :c5469; + :b :c5470; + :b :c5471; + :b :c5472; + :b :c5473; + :b :c5474; + :b :c5475; + :b :c5476; + :b :c5477; + :b :c5478; + :b :c5479; + :b :c5480; + :b :c5481; + :b :c5482; + :b :c5483; + :b :c5484; + :b :c5485; + :b :c5486; + :b :c5487; + :b :c5488; + :b :c5489; + :b :c5490; + :b :c5491; + :b :c5492; + :b :c5493; + :b :c5494; + :b :c5495; + :b :c5496; + :b :c5497; + :b :c5498; + :b :c5499; + :b :c5500; + :b :c5501; + :b :c5502; + :b :c5503; + :b :c5504; + :b :c5505; + :b :c5506; + :b :c5507; + :b :c5508; + :b :c5509; + :b :c5510; + :b :c5511; + :b :c5512; + :b :c5513; + :b :c5514; + :b :c5515; + :b :c5516; + :b :c5517; + :b :c5518; + :b :c5519; + :b :c5520; + :b :c5521; + :b :c5522; + :b :c5523; + :b :c5524; + :b :c5525; + :b :c5526; + :b :c5527; + :b :c5528; + :b :c5529; + :b :c5530; + :b :c5531; + :b :c5532; + :b :c5533; + :b :c5534; + :b :c5535; + :b :c5536; + :b :c5537; + :b :c5538; + :b :c5539; + :b :c5540; + :b :c5541; + :b :c5542; + :b :c5543; + :b :c5544; + :b :c5545; + :b :c5546; + :b :c5547; + :b :c5548; + :b :c5549; + :b :c5550; + :b :c5551; + :b :c5552; + :b :c5553; + :b :c5554; + :b :c5555; + :b :c5556; + :b :c5557; + :b :c5558; + :b :c5559; + :b :c5560; + :b :c5561; + :b :c5562; + :b :c5563; + :b :c5564; + :b :c5565; + :b :c5566; + :b :c5567; + :b :c5568; + :b :c5569; + :b :c5570; + :b :c5571; + :b :c5572; + :b :c5573; + :b :c5574; + :b :c5575; + :b :c5576; + :b :c5577; + :b :c5578; + :b :c5579; + :b :c5580; + :b :c5581; + :b :c5582; + :b :c5583; + :b :c5584; + :b :c5585; + :b :c5586; + :b :c5587; + :b :c5588; + :b :c5589; + :b :c5590; + :b :c5591; + :b :c5592; + :b :c5593; + :b :c5594; + :b :c5595; + :b :c5596; + :b :c5597; + :b :c5598; + :b :c5599; + :b :c5600; + :b :c5601; + :b :c5602; + :b :c5603; + :b :c5604; + :b :c5605; + :b :c5606; + :b :c5607; + :b :c5608; + :b :c5609; + :b :c5610; + :b :c5611; + :b :c5612; + :b :c5613; + :b :c5614; + :b :c5615; + :b :c5616; + :b :c5617; + :b :c5618; + :b :c5619; + :b :c5620; + :b :c5621; + :b :c5622; + :b :c5623; + :b :c5624; + :b :c5625; + :b :c5626; + :b :c5627; + :b :c5628; + :b :c5629; + :b :c5630; + :b :c5631; + :b :c5632; + :b :c5633; + :b :c5634; + :b :c5635; + :b :c5636; + :b :c5637; + :b :c5638; + :b :c5639; + :b :c5640; + :b :c5641; + :b :c5642; + :b :c5643; + :b :c5644; + :b :c5645; + :b :c5646; + :b :c5647; + :b :c5648; + :b :c5649; + :b :c5650; + :b :c5651; + :b :c5652; + :b :c5653; + :b :c5654; + :b :c5655; + :b :c5656; + :b :c5657; + :b :c5658; + :b :c5659; + :b :c5660; + :b :c5661; + :b :c5662; + :b :c5663; + :b :c5664; + :b :c5665; + :b :c5666; + :b :c5667; + :b :c5668; + :b :c5669; + :b :c5670; + :b :c5671; + :b :c5672; + :b :c5673; + :b :c5674; + :b :c5675; + :b :c5676; + :b :c5677; + :b :c5678; + :b :c5679; + :b :c5680; + :b :c5681; + :b :c5682; + :b :c5683; + :b :c5684; + :b :c5685; + :b :c5686; + :b :c5687; + :b :c5688; + :b :c5689; + :b :c5690; + :b :c5691; + :b :c5692; + :b :c5693; + :b :c5694; + :b :c5695; + :b :c5696; + :b :c5697; + :b :c5698; + :b :c5699; + :b :c5700; + :b :c5701; + :b :c5702; + :b :c5703; + :b :c5704; + :b :c5705; + :b :c5706; + :b :c5707; + :b :c5708; + :b :c5709; + :b :c5710; + :b :c5711; + :b :c5712; + :b :c5713; + :b :c5714; + :b :c5715; + :b :c5716; + :b :c5717; + :b :c5718; + :b :c5719; + :b :c5720; + :b :c5721; + :b :c5722; + :b :c5723; + :b :c5724; + :b :c5725; + :b :c5726; + :b :c5727; + :b :c5728; + :b :c5729; + :b :c5730; + :b :c5731; + :b :c5732; + :b :c5733; + :b :c5734; + :b :c5735; + :b :c5736; + :b :c5737; + :b :c5738; + :b :c5739; + :b :c5740; + :b :c5741; + :b :c5742; + :b :c5743; + :b :c5744; + :b :c5745; + :b :c5746; + :b :c5747; + :b :c5748; + :b :c5749; + :b :c5750; + :b :c5751; + :b :c5752; + :b :c5753; + :b :c5754; + :b :c5755; + :b :c5756; + :b :c5757; + :b :c5758; + :b :c5759; + :b :c5760; + :b :c5761; + :b :c5762; + :b :c5763; + :b :c5764; + :b :c5765; + :b :c5766; + :b :c5767; + :b :c5768; + :b :c5769; + :b :c5770; + :b :c5771; + :b :c5772; + :b :c5773; + :b :c5774; + :b :c5775; + :b :c5776; + :b :c5777; + :b :c5778; + :b :c5779; + :b :c5780; + :b :c5781; + :b :c5782; + :b :c5783; + :b :c5784; + :b :c5785; + :b :c5786; + :b :c5787; + :b :c5788; + :b :c5789; + :b :c5790; + :b :c5791; + :b :c5792; + :b :c5793; + :b :c5794; + :b :c5795; + :b :c5796; + :b :c5797; + :b :c5798; + :b :c5799; + :b :c5800; + :b :c5801; + :b :c5802; + :b :c5803; + :b :c5804; + :b :c5805; + :b :c5806; + :b :c5807; + :b :c5808; + :b :c5809; + :b :c5810; + :b :c5811; + :b :c5812; + :b :c5813; + :b :c5814; + :b :c5815; + :b :c5816; + :b :c5817; + :b :c5818; + :b :c5819; + :b :c5820; + :b :c5821; + :b :c5822; + :b :c5823; + :b :c5824; + :b :c5825; + :b :c5826; + :b :c5827; + :b :c5828; + :b :c5829; + :b :c5830; + :b :c5831; + :b :c5832; + :b :c5833; + :b :c5834; + :b :c5835; + :b :c5836; + :b :c5837; + :b :c5838; + :b :c5839; + :b :c5840; + :b :c5841; + :b :c5842; + :b :c5843; + :b :c5844; + :b :c5845; + :b :c5846; + :b :c5847; + :b :c5848; + :b :c5849; + :b :c5850; + :b :c5851; + :b :c5852; + :b :c5853; + :b :c5854; + :b :c5855; + :b :c5856; + :b :c5857; + :b :c5858; + :b :c5859; + :b :c5860; + :b :c5861; + :b :c5862; + :b :c5863; + :b :c5864; + :b :c5865; + :b :c5866; + :b :c5867; + :b :c5868; + :b :c5869; + :b :c5870; + :b :c5871; + :b :c5872; + :b :c5873; + :b :c5874; + :b :c5875; + :b :c5876; + :b :c5877; + :b :c5878; + :b :c5879; + :b :c5880; + :b :c5881; + :b :c5882; + :b :c5883; + :b :c5884; + :b :c5885; + :b :c5886; + :b :c5887; + :b :c5888; + :b :c5889; + :b :c5890; + :b :c5891; + :b :c5892; + :b :c5893; + :b :c5894; + :b :c5895; + :b :c5896; + :b :c5897; + :b :c5898; + :b :c5899; + :b :c5900; + :b :c5901; + :b :c5902; + :b :c5903; + :b :c5904; + :b :c5905; + :b :c5906; + :b :c5907; + :b :c5908; + :b :c5909; + :b :c5910; + :b :c5911; + :b :c5912; + :b :c5913; + :b :c5914; + :b :c5915; + :b :c5916; + :b :c5917; + :b :c5918; + :b :c5919; + :b :c5920; + :b :c5921; + :b :c5922; + :b :c5923; + :b :c5924; + :b :c5925; + :b :c5926; + :b :c5927; + :b :c5928; + :b :c5929; + :b :c5930; + :b :c5931; + :b :c5932; + :b :c5933; + :b :c5934; + :b :c5935; + :b :c5936; + :b :c5937; + :b :c5938; + :b :c5939; + :b :c5940; + :b :c5941; + :b :c5942; + :b :c5943; + :b :c5944; + :b :c5945; + :b :c5946; + :b :c5947; + :b :c5948; + :b :c5949; + :b :c5950; + :b :c5951; + :b :c5952; + :b :c5953; + :b :c5954; + :b :c5955; + :b :c5956; + :b :c5957; + :b :c5958; + :b :c5959; + :b :c5960; + :b :c5961; + :b :c5962; + :b :c5963; + :b :c5964; + :b :c5965; + :b :c5966; + :b :c5967; + :b :c5968; + :b :c5969; + :b :c5970; + :b :c5971; + :b :c5972; + :b :c5973; + :b :c5974; + :b :c5975; + :b :c5976; + :b :c5977; + :b :c5978; + :b :c5979; + :b :c5980; + :b :c5981; + :b :c5982; + :b :c5983; + :b :c5984; + :b :c5985; + :b :c5986; + :b :c5987; + :b :c5988; + :b :c5989; + :b :c5990; + :b :c5991; + :b :c5992; + :b :c5993; + :b :c5994; + :b :c5995; + :b :c5996; + :b :c5997; + :b :c5998; + :b :c5999; + :b :c6000; + :b :c6001; + :b :c6002; + :b :c6003; + :b :c6004; + :b :c6005; + :b :c6006; + :b :c6007; + :b :c6008; + :b :c6009; + :b :c6010; + :b :c6011; + :b :c6012; + :b :c6013; + :b :c6014; + :b :c6015; + :b :c6016; + :b :c6017; + :b :c6018; + :b :c6019; + :b :c6020; + :b :c6021; + :b :c6022; + :b :c6023; + :b :c6024; + :b :c6025; + :b :c6026; + :b :c6027; + :b :c6028; + :b :c6029; + :b :c6030; + :b :c6031; + :b :c6032; + :b :c6033; + :b :c6034; + :b :c6035; + :b :c6036; + :b :c6037; + :b :c6038; + :b :c6039; + :b :c6040; + :b :c6041; + :b :c6042; + :b :c6043; + :b :c6044; + :b :c6045; + :b :c6046; + :b :c6047; + :b :c6048; + :b :c6049; + :b :c6050; + :b :c6051; + :b :c6052; + :b :c6053; + :b :c6054; + :b :c6055; + :b :c6056; + :b :c6057; + :b :c6058; + :b :c6059; + :b :c6060; + :b :c6061; + :b :c6062; + :b :c6063; + :b :c6064; + :b :c6065; + :b :c6066; + :b :c6067; + :b :c6068; + :b :c6069; + :b :c6070; + :b :c6071; + :b :c6072; + :b :c6073; + :b :c6074; + :b :c6075; + :b :c6076; + :b :c6077; + :b :c6078; + :b :c6079; + :b :c6080; + :b :c6081; + :b :c6082; + :b :c6083; + :b :c6084; + :b :c6085; + :b :c6086; + :b :c6087; + :b :c6088; + :b :c6089; + :b :c6090; + :b :c6091; + :b :c6092; + :b :c6093; + :b :c6094; + :b :c6095; + :b :c6096; + :b :c6097; + :b :c6098; + :b :c6099; + :b :c6100; + :b :c6101; + :b :c6102; + :b :c6103; + :b :c6104; + :b :c6105; + :b :c6106; + :b :c6107; + :b :c6108; + :b :c6109; + :b :c6110; + :b :c6111; + :b :c6112; + :b :c6113; + :b :c6114; + :b :c6115; + :b :c6116; + :b :c6117; + :b :c6118; + :b :c6119; + :b :c6120; + :b :c6121; + :b :c6122; + :b :c6123; + :b :c6124; + :b :c6125; + :b :c6126; + :b :c6127; + :b :c6128; + :b :c6129; + :b :c6130; + :b :c6131; + :b :c6132; + :b :c6133; + :b :c6134; + :b :c6135; + :b :c6136; + :b :c6137; + :b :c6138; + :b :c6139; + :b :c6140; + :b :c6141; + :b :c6142; + :b :c6143; + :b :c6144; + :b :c6145; + :b :c6146; + :b :c6147; + :b :c6148; + :b :c6149; + :b :c6150; + :b :c6151; + :b :c6152; + :b :c6153; + :b :c6154; + :b :c6155; + :b :c6156; + :b :c6157; + :b :c6158; + :b :c6159; + :b :c6160; + :b :c6161; + :b :c6162; + :b :c6163; + :b :c6164; + :b :c6165; + :b :c6166; + :b :c6167; + :b :c6168; + :b :c6169; + :b :c6170; + :b :c6171; + :b :c6172; + :b :c6173; + :b :c6174; + :b :c6175; + :b :c6176; + :b :c6177; + :b :c6178; + :b :c6179; + :b :c6180; + :b :c6181; + :b :c6182; + :b :c6183; + :b :c6184; + :b :c6185; + :b :c6186; + :b :c6187; + :b :c6188; + :b :c6189; + :b :c6190; + :b :c6191; + :b :c6192; + :b :c6193; + :b :c6194; + :b :c6195; + :b :c6196; + :b :c6197; + :b :c6198; + :b :c6199; + :b :c6200; + :b :c6201; + :b :c6202; + :b :c6203; + :b :c6204; + :b :c6205; + :b :c6206; + :b :c6207; + :b :c6208; + :b :c6209; + :b :c6210; + :b :c6211; + :b :c6212; + :b :c6213; + :b :c6214; + :b :c6215; + :b :c6216; + :b :c6217; + :b :c6218; + :b :c6219; + :b :c6220; + :b :c6221; + :b :c6222; + :b :c6223; + :b :c6224; + :b :c6225; + :b :c6226; + :b :c6227; + :b :c6228; + :b :c6229; + :b :c6230; + :b :c6231; + :b :c6232; + :b :c6233; + :b :c6234; + :b :c6235; + :b :c6236; + :b :c6237; + :b :c6238; + :b :c6239; + :b :c6240; + :b :c6241; + :b :c6242; + :b :c6243; + :b :c6244; + :b :c6245; + :b :c6246; + :b :c6247; + :b :c6248; + :b :c6249; + :b :c6250; + :b :c6251; + :b :c6252; + :b :c6253; + :b :c6254; + :b :c6255; + :b :c6256; + :b :c6257; + :b :c6258; + :b :c6259; + :b :c6260; + :b :c6261; + :b :c6262; + :b :c6263; + :b :c6264; + :b :c6265; + :b :c6266; + :b :c6267; + :b :c6268; + :b :c6269; + :b :c6270; + :b :c6271; + :b :c6272; + :b :c6273; + :b :c6274; + :b :c6275; + :b :c6276; + :b :c6277; + :b :c6278; + :b :c6279; + :b :c6280; + :b :c6281; + :b :c6282; + :b :c6283; + :b :c6284; + :b :c6285; + :b :c6286; + :b :c6287; + :b :c6288; + :b :c6289; + :b :c6290; + :b :c6291; + :b :c6292; + :b :c6293; + :b :c6294; + :b :c6295; + :b :c6296; + :b :c6297; + :b :c6298; + :b :c6299; + :b :c6300; + :b :c6301; + :b :c6302; + :b :c6303; + :b :c6304; + :b :c6305; + :b :c6306; + :b :c6307; + :b :c6308; + :b :c6309; + :b :c6310; + :b :c6311; + :b :c6312; + :b :c6313; + :b :c6314; + :b :c6315; + :b :c6316; + :b :c6317; + :b :c6318; + :b :c6319; + :b :c6320; + :b :c6321; + :b :c6322; + :b :c6323; + :b :c6324; + :b :c6325; + :b :c6326; + :b :c6327; + :b :c6328; + :b :c6329; + :b :c6330; + :b :c6331; + :b :c6332; + :b :c6333; + :b :c6334; + :b :c6335; + :b :c6336; + :b :c6337; + :b :c6338; + :b :c6339; + :b :c6340; + :b :c6341; + :b :c6342; + :b :c6343; + :b :c6344; + :b :c6345; + :b :c6346; + :b :c6347; + :b :c6348; + :b :c6349; + :b :c6350; + :b :c6351; + :b :c6352; + :b :c6353; + :b :c6354; + :b :c6355; + :b :c6356; + :b :c6357; + :b :c6358; + :b :c6359; + :b :c6360; + :b :c6361; + :b :c6362; + :b :c6363; + :b :c6364; + :b :c6365; + :b :c6366; + :b :c6367; + :b :c6368; + :b :c6369; + :b :c6370; + :b :c6371; + :b :c6372; + :b :c6373; + :b :c6374; + :b :c6375; + :b :c6376; + :b :c6377; + :b :c6378; + :b :c6379; + :b :c6380; + :b :c6381; + :b :c6382; + :b :c6383; + :b :c6384; + :b :c6385; + :b :c6386; + :b :c6387; + :b :c6388; + :b :c6389; + :b :c6390; + :b :c6391; + :b :c6392; + :b :c6393; + :b :c6394; + :b :c6395; + :b :c6396; + :b :c6397; + :b :c6398; + :b :c6399; + :b :c6400; + :b :c6401; + :b :c6402; + :b :c6403; + :b :c6404; + :b :c6405; + :b :c6406; + :b :c6407; + :b :c6408; + :b :c6409; + :b :c6410; + :b :c6411; + :b :c6412; + :b :c6413; + :b :c6414; + :b :c6415; + :b :c6416; + :b :c6417; + :b :c6418; + :b :c6419; + :b :c6420; + :b :c6421; + :b :c6422; + :b :c6423; + :b :c6424; + :b :c6425; + :b :c6426; + :b :c6427; + :b :c6428; + :b :c6429; + :b :c6430; + :b :c6431; + :b :c6432; + :b :c6433; + :b :c6434; + :b :c6435; + :b :c6436; + :b :c6437; + :b :c6438; + :b :c6439; + :b :c6440; + :b :c6441; + :b :c6442; + :b :c6443; + :b :c6444; + :b :c6445; + :b :c6446; + :b :c6447; + :b :c6448; + :b :c6449; + :b :c6450; + :b :c6451; + :b :c6452; + :b :c6453; + :b :c6454; + :b :c6455; + :b :c6456; + :b :c6457; + :b :c6458; + :b :c6459; + :b :c6460; + :b :c6461; + :b :c6462; + :b :c6463; + :b :c6464; + :b :c6465; + :b :c6466; + :b :c6467; + :b :c6468; + :b :c6469; + :b :c6470; + :b :c6471; + :b :c6472; + :b :c6473; + :b :c6474; + :b :c6475; + :b :c6476; + :b :c6477; + :b :c6478; + :b :c6479; + :b :c6480; + :b :c6481; + :b :c6482; + :b :c6483; + :b :c6484; + :b :c6485; + :b :c6486; + :b :c6487; + :b :c6488; + :b :c6489; + :b :c6490; + :b :c6491; + :b :c6492; + :b :c6493; + :b :c6494; + :b :c6495; + :b :c6496; + :b :c6497; + :b :c6498; + :b :c6499; + :b :c6500; + :b :c6501; + :b :c6502; + :b :c6503; + :b :c6504; + :b :c6505; + :b :c6506; + :b :c6507; + :b :c6508; + :b :c6509; + :b :c6510; + :b :c6511; + :b :c6512; + :b :c6513; + :b :c6514; + :b :c6515; + :b :c6516; + :b :c6517; + :b :c6518; + :b :c6519; + :b :c6520; + :b :c6521; + :b :c6522; + :b :c6523; + :b :c6524; + :b :c6525; + :b :c6526; + :b :c6527; + :b :c6528; + :b :c6529; + :b :c6530; + :b :c6531; + :b :c6532; + :b :c6533; + :b :c6534; + :b :c6535; + :b :c6536; + :b :c6537; + :b :c6538; + :b :c6539; + :b :c6540; + :b :c6541; + :b :c6542; + :b :c6543; + :b :c6544; + :b :c6545; + :b :c6546; + :b :c6547; + :b :c6548; + :b :c6549; + :b :c6550; + :b :c6551; + :b :c6552; + :b :c6553; + :b :c6554; + :b :c6555; + :b :c6556; + :b :c6557; + :b :c6558; + :b :c6559; + :b :c6560; + :b :c6561; + :b :c6562; + :b :c6563; + :b :c6564; + :b :c6565; + :b :c6566; + :b :c6567; + :b :c6568; + :b :c6569; + :b :c6570; + :b :c6571; + :b :c6572; + :b :c6573; + :b :c6574; + :b :c6575; + :b :c6576; + :b :c6577; + :b :c6578; + :b :c6579; + :b :c6580; + :b :c6581; + :b :c6582; + :b :c6583; + :b :c6584; + :b :c6585; + :b :c6586; + :b :c6587; + :b :c6588; + :b :c6589; + :b :c6590; + :b :c6591; + :b :c6592; + :b :c6593; + :b :c6594; + :b :c6595; + :b :c6596; + :b :c6597; + :b :c6598; + :b :c6599; + :b :c6600; + :b :c6601; + :b :c6602; + :b :c6603; + :b :c6604; + :b :c6605; + :b :c6606; + :b :c6607; + :b :c6608; + :b :c6609; + :b :c6610; + :b :c6611; + :b :c6612; + :b :c6613; + :b :c6614; + :b :c6615; + :b :c6616; + :b :c6617; + :b :c6618; + :b :c6619; + :b :c6620; + :b :c6621; + :b :c6622; + :b :c6623; + :b :c6624; + :b :c6625; + :b :c6626; + :b :c6627; + :b :c6628; + :b :c6629; + :b :c6630; + :b :c6631; + :b :c6632; + :b :c6633; + :b :c6634; + :b :c6635; + :b :c6636; + :b :c6637; + :b :c6638; + :b :c6639; + :b :c6640; + :b :c6641; + :b :c6642; + :b :c6643; + :b :c6644; + :b :c6645; + :b :c6646; + :b :c6647; + :b :c6648; + :b :c6649; + :b :c6650; + :b :c6651; + :b :c6652; + :b :c6653; + :b :c6654; + :b :c6655; + :b :c6656; + :b :c6657; + :b :c6658; + :b :c6659; + :b :c6660; + :b :c6661; + :b :c6662; + :b :c6663; + :b :c6664; + :b :c6665; + :b :c6666; + :b :c6667; + :b :c6668; + :b :c6669; + :b :c6670; + :b :c6671; + :b :c6672; + :b :c6673; + :b :c6674; + :b :c6675; + :b :c6676; + :b :c6677; + :b :c6678; + :b :c6679; + :b :c6680; + :b :c6681; + :b :c6682; + :b :c6683; + :b :c6684; + :b :c6685; + :b :c6686; + :b :c6687; + :b :c6688; + :b :c6689; + :b :c6690; + :b :c6691; + :b :c6692; + :b :c6693; + :b :c6694; + :b :c6695; + :b :c6696; + :b :c6697; + :b :c6698; + :b :c6699; + :b :c6700; + :b :c6701; + :b :c6702; + :b :c6703; + :b :c6704; + :b :c6705; + :b :c6706; + :b :c6707; + :b :c6708; + :b :c6709; + :b :c6710; + :b :c6711; + :b :c6712; + :b :c6713; + :b :c6714; + :b :c6715; + :b :c6716; + :b :c6717; + :b :c6718; + :b :c6719; + :b :c6720; + :b :c6721; + :b :c6722; + :b :c6723; + :b :c6724; + :b :c6725; + :b :c6726; + :b :c6727; + :b :c6728; + :b :c6729; + :b :c6730; + :b :c6731; + :b :c6732; + :b :c6733; + :b :c6734; + :b :c6735; + :b :c6736; + :b :c6737; + :b :c6738; + :b :c6739; + :b :c6740; + :b :c6741; + :b :c6742; + :b :c6743; + :b :c6744; + :b :c6745; + :b :c6746; + :b :c6747; + :b :c6748; + :b :c6749; + :b :c6750; + :b :c6751; + :b :c6752; + :b :c6753; + :b :c6754; + :b :c6755; + :b :c6756; + :b :c6757; + :b :c6758; + :b :c6759; + :b :c6760; + :b :c6761; + :b :c6762; + :b :c6763; + :b :c6764; + :b :c6765; + :b :c6766; + :b :c6767; + :b :c6768; + :b :c6769; + :b :c6770; + :b :c6771; + :b :c6772; + :b :c6773; + :b :c6774; + :b :c6775; + :b :c6776; + :b :c6777; + :b :c6778; + :b :c6779; + :b :c6780; + :b :c6781; + :b :c6782; + :b :c6783; + :b :c6784; + :b :c6785; + :b :c6786; + :b :c6787; + :b :c6788; + :b :c6789; + :b :c6790; + :b :c6791; + :b :c6792; + :b :c6793; + :b :c6794; + :b :c6795; + :b :c6796; + :b :c6797; + :b :c6798; + :b :c6799; + :b :c6800; + :b :c6801; + :b :c6802; + :b :c6803; + :b :c6804; + :b :c6805; + :b :c6806; + :b :c6807; + :b :c6808; + :b :c6809; + :b :c6810; + :b :c6811; + :b :c6812; + :b :c6813; + :b :c6814; + :b :c6815; + :b :c6816; + :b :c6817; + :b :c6818; + :b :c6819; + :b :c6820; + :b :c6821; + :b :c6822; + :b :c6823; + :b :c6824; + :b :c6825; + :b :c6826; + :b :c6827; + :b :c6828; + :b :c6829; + :b :c6830; + :b :c6831; + :b :c6832; + :b :c6833; + :b :c6834; + :b :c6835; + :b :c6836; + :b :c6837; + :b :c6838; + :b :c6839; + :b :c6840; + :b :c6841; + :b :c6842; + :b :c6843; + :b :c6844; + :b :c6845; + :b :c6846; + :b :c6847; + :b :c6848; + :b :c6849; + :b :c6850; + :b :c6851; + :b :c6852; + :b :c6853; + :b :c6854; + :b :c6855; + :b :c6856; + :b :c6857; + :b :c6858; + :b :c6859; + :b :c6860; + :b :c6861; + :b :c6862; + :b :c6863; + :b :c6864; + :b :c6865; + :b :c6866; + :b :c6867; + :b :c6868; + :b :c6869; + :b :c6870; + :b :c6871; + :b :c6872; + :b :c6873; + :b :c6874; + :b :c6875; + :b :c6876; + :b :c6877; + :b :c6878; + :b :c6879; + :b :c6880; + :b :c6881; + :b :c6882; + :b :c6883; + :b :c6884; + :b :c6885; + :b :c6886; + :b :c6887; + :b :c6888; + :b :c6889; + :b :c6890; + :b :c6891; + :b :c6892; + :b :c6893; + :b :c6894; + :b :c6895; + :b :c6896; + :b :c6897; + :b :c6898; + :b :c6899; + :b :c6900; + :b :c6901; + :b :c6902; + :b :c6903; + :b :c6904; + :b :c6905; + :b :c6906; + :b :c6907; + :b :c6908; + :b :c6909; + :b :c6910; + :b :c6911; + :b :c6912; + :b :c6913; + :b :c6914; + :b :c6915; + :b :c6916; + :b :c6917; + :b :c6918; + :b :c6919; + :b :c6920; + :b :c6921; + :b :c6922; + :b :c6923; + :b :c6924; + :b :c6925; + :b :c6926; + :b :c6927; + :b :c6928; + :b :c6929; + :b :c6930; + :b :c6931; + :b :c6932; + :b :c6933; + :b :c6934; + :b :c6935; + :b :c6936; + :b :c6937; + :b :c6938; + :b :c6939; + :b :c6940; + :b :c6941; + :b :c6942; + :b :c6943; + :b :c6944; + :b :c6945; + :b :c6946; + :b :c6947; + :b :c6948; + :b :c6949; + :b :c6950; + :b :c6951; + :b :c6952; + :b :c6953; + :b :c6954; + :b :c6955; + :b :c6956; + :b :c6957; + :b :c6958; + :b :c6959; + :b :c6960; + :b :c6961; + :b :c6962; + :b :c6963; + :b :c6964; + :b :c6965; + :b :c6966; + :b :c6967; + :b :c6968; + :b :c6969; + :b :c6970; + :b :c6971; + :b :c6972; + :b :c6973; + :b :c6974; + :b :c6975; + :b :c6976; + :b :c6977; + :b :c6978; + :b :c6979; + :b :c6980; + :b :c6981; + :b :c6982; + :b :c6983; + :b :c6984; + :b :c6985; + :b :c6986; + :b :c6987; + :b :c6988; + :b :c6989; + :b :c6990; + :b :c6991; + :b :c6992; + :b :c6993; + :b :c6994; + :b :c6995; + :b :c6996; + :b :c6997; + :b :c6998; + :b :c6999; + :b :c7000; + :b :c7001; + :b :c7002; + :b :c7003; + :b :c7004; + :b :c7005; + :b :c7006; + :b :c7007; + :b :c7008; + :b :c7009; + :b :c7010; + :b :c7011; + :b :c7012; + :b :c7013; + :b :c7014; + :b :c7015; + :b :c7016; + :b :c7017; + :b :c7018; + :b :c7019; + :b :c7020; + :b :c7021; + :b :c7022; + :b :c7023; + :b :c7024; + :b :c7025; + :b :c7026; + :b :c7027; + :b :c7028; + :b :c7029; + :b :c7030; + :b :c7031; + :b :c7032; + :b :c7033; + :b :c7034; + :b :c7035; + :b :c7036; + :b :c7037; + :b :c7038; + :b :c7039; + :b :c7040; + :b :c7041; + :b :c7042; + :b :c7043; + :b :c7044; + :b :c7045; + :b :c7046; + :b :c7047; + :b :c7048; + :b :c7049; + :b :c7050; + :b :c7051; + :b :c7052; + :b :c7053; + :b :c7054; + :b :c7055; + :b :c7056; + :b :c7057; + :b :c7058; + :b :c7059; + :b :c7060; + :b :c7061; + :b :c7062; + :b :c7063; + :b :c7064; + :b :c7065; + :b :c7066; + :b :c7067; + :b :c7068; + :b :c7069; + :b :c7070; + :b :c7071; + :b :c7072; + :b :c7073; + :b :c7074; + :b :c7075; + :b :c7076; + :b :c7077; + :b :c7078; + :b :c7079; + :b :c7080; + :b :c7081; + :b :c7082; + :b :c7083; + :b :c7084; + :b :c7085; + :b :c7086; + :b :c7087; + :b :c7088; + :b :c7089; + :b :c7090; + :b :c7091; + :b :c7092; + :b :c7093; + :b :c7094; + :b :c7095; + :b :c7096; + :b :c7097; + :b :c7098; + :b :c7099; + :b :c7100; + :b :c7101; + :b :c7102; + :b :c7103; + :b :c7104; + :b :c7105; + :b :c7106; + :b :c7107; + :b :c7108; + :b :c7109; + :b :c7110; + :b :c7111; + :b :c7112; + :b :c7113; + :b :c7114; + :b :c7115; + :b :c7116; + :b :c7117; + :b :c7118; + :b :c7119; + :b :c7120; + :b :c7121; + :b :c7122; + :b :c7123; + :b :c7124; + :b :c7125; + :b :c7126; + :b :c7127; + :b :c7128; + :b :c7129; + :b :c7130; + :b :c7131; + :b :c7132; + :b :c7133; + :b :c7134; + :b :c7135; + :b :c7136; + :b :c7137; + :b :c7138; + :b :c7139; + :b :c7140; + :b :c7141; + :b :c7142; + :b :c7143; + :b :c7144; + :b :c7145; + :b :c7146; + :b :c7147; + :b :c7148; + :b :c7149; + :b :c7150; + :b :c7151; + :b :c7152; + :b :c7153; + :b :c7154; + :b :c7155; + :b :c7156; + :b :c7157; + :b :c7158; + :b :c7159; + :b :c7160; + :b :c7161; + :b :c7162; + :b :c7163; + :b :c7164; + :b :c7165; + :b :c7166; + :b :c7167; + :b :c7168; + :b :c7169; + :b :c7170; + :b :c7171; + :b :c7172; + :b :c7173; + :b :c7174; + :b :c7175; + :b :c7176; + :b :c7177; + :b :c7178; + :b :c7179; + :b :c7180; + :b :c7181; + :b :c7182; + :b :c7183; + :b :c7184; + :b :c7185; + :b :c7186; + :b :c7187; + :b :c7188; + :b :c7189; + :b :c7190; + :b :c7191; + :b :c7192; + :b :c7193; + :b :c7194; + :b :c7195; + :b :c7196; + :b :c7197; + :b :c7198; + :b :c7199; + :b :c7200; + :b :c7201; + :b :c7202; + :b :c7203; + :b :c7204; + :b :c7205; + :b :c7206; + :b :c7207; + :b :c7208; + :b :c7209; + :b :c7210; + :b :c7211; + :b :c7212; + :b :c7213; + :b :c7214; + :b :c7215; + :b :c7216; + :b :c7217; + :b :c7218; + :b :c7219; + :b :c7220; + :b :c7221; + :b :c7222; + :b :c7223; + :b :c7224; + :b :c7225; + :b :c7226; + :b :c7227; + :b :c7228; + :b :c7229; + :b :c7230; + :b :c7231; + :b :c7232; + :b :c7233; + :b :c7234; + :b :c7235; + :b :c7236; + :b :c7237; + :b :c7238; + :b :c7239; + :b :c7240; + :b :c7241; + :b :c7242; + :b :c7243; + :b :c7244; + :b :c7245; + :b :c7246; + :b :c7247; + :b :c7248; + :b :c7249; + :b :c7250; + :b :c7251; + :b :c7252; + :b :c7253; + :b :c7254; + :b :c7255; + :b :c7256; + :b :c7257; + :b :c7258; + :b :c7259; + :b :c7260; + :b :c7261; + :b :c7262; + :b :c7263; + :b :c7264; + :b :c7265; + :b :c7266; + :b :c7267; + :b :c7268; + :b :c7269; + :b :c7270; + :b :c7271; + :b :c7272; + :b :c7273; + :b :c7274; + :b :c7275; + :b :c7276; + :b :c7277; + :b :c7278; + :b :c7279; + :b :c7280; + :b :c7281; + :b :c7282; + :b :c7283; + :b :c7284; + :b :c7285; + :b :c7286; + :b :c7287; + :b :c7288; + :b :c7289; + :b :c7290; + :b :c7291; + :b :c7292; + :b :c7293; + :b :c7294; + :b :c7295; + :b :c7296; + :b :c7297; + :b :c7298; + :b :c7299; + :b :c7300; + :b :c7301; + :b :c7302; + :b :c7303; + :b :c7304; + :b :c7305; + :b :c7306; + :b :c7307; + :b :c7308; + :b :c7309; + :b :c7310; + :b :c7311; + :b :c7312; + :b :c7313; + :b :c7314; + :b :c7315; + :b :c7316; + :b :c7317; + :b :c7318; + :b :c7319; + :b :c7320; + :b :c7321; + :b :c7322; + :b :c7323; + :b :c7324; + :b :c7325; + :b :c7326; + :b :c7327; + :b :c7328; + :b :c7329; + :b :c7330; + :b :c7331; + :b :c7332; + :b :c7333; + :b :c7334; + :b :c7335; + :b :c7336; + :b :c7337; + :b :c7338; + :b :c7339; + :b :c7340; + :b :c7341; + :b :c7342; + :b :c7343; + :b :c7344; + :b :c7345; + :b :c7346; + :b :c7347; + :b :c7348; + :b :c7349; + :b :c7350; + :b :c7351; + :b :c7352; + :b :c7353; + :b :c7354; + :b :c7355; + :b :c7356; + :b :c7357; + :b :c7358; + :b :c7359; + :b :c7360; + :b :c7361; + :b :c7362; + :b :c7363; + :b :c7364; + :b :c7365; + :b :c7366; + :b :c7367; + :b :c7368; + :b :c7369; + :b :c7370; + :b :c7371; + :b :c7372; + :b :c7373; + :b :c7374; + :b :c7375; + :b :c7376; + :b :c7377; + :b :c7378; + :b :c7379; + :b :c7380; + :b :c7381; + :b :c7382; + :b :c7383; + :b :c7384; + :b :c7385; + :b :c7386; + :b :c7387; + :b :c7388; + :b :c7389; + :b :c7390; + :b :c7391; + :b :c7392; + :b :c7393; + :b :c7394; + :b :c7395; + :b :c7396; + :b :c7397; + :b :c7398; + :b :c7399; + :b :c7400; + :b :c7401; + :b :c7402; + :b :c7403; + :b :c7404; + :b :c7405; + :b :c7406; + :b :c7407; + :b :c7408; + :b :c7409; + :b :c7410; + :b :c7411; + :b :c7412; + :b :c7413; + :b :c7414; + :b :c7415; + :b :c7416; + :b :c7417; + :b :c7418; + :b :c7419; + :b :c7420; + :b :c7421; + :b :c7422; + :b :c7423; + :b :c7424; + :b :c7425; + :b :c7426; + :b :c7427; + :b :c7428; + :b :c7429; + :b :c7430; + :b :c7431; + :b :c7432; + :b :c7433; + :b :c7434; + :b :c7435; + :b :c7436; + :b :c7437; + :b :c7438; + :b :c7439; + :b :c7440; + :b :c7441; + :b :c7442; + :b :c7443; + :b :c7444; + :b :c7445; + :b :c7446; + :b :c7447; + :b :c7448; + :b :c7449; + :b :c7450; + :b :c7451; + :b :c7452; + :b :c7453; + :b :c7454; + :b :c7455; + :b :c7456; + :b :c7457; + :b :c7458; + :b :c7459; + :b :c7460; + :b :c7461; + :b :c7462; + :b :c7463; + :b :c7464; + :b :c7465; + :b :c7466; + :b :c7467; + :b :c7468; + :b :c7469; + :b :c7470; + :b :c7471; + :b :c7472; + :b :c7473; + :b :c7474; + :b :c7475; + :b :c7476; + :b :c7477; + :b :c7478; + :b :c7479; + :b :c7480; + :b :c7481; + :b :c7482; + :b :c7483; + :b :c7484; + :b :c7485; + :b :c7486; + :b :c7487; + :b :c7488; + :b :c7489; + :b :c7490; + :b :c7491; + :b :c7492; + :b :c7493; + :b :c7494; + :b :c7495; + :b :c7496; + :b :c7497; + :b :c7498; + :b :c7499; + :b :c7500; + :b :c7501; + :b :c7502; + :b :c7503; + :b :c7504; + :b :c7505; + :b :c7506; + :b :c7507; + :b :c7508; + :b :c7509; + :b :c7510; + :b :c7511; + :b :c7512; + :b :c7513; + :b :c7514; + :b :c7515; + :b :c7516; + :b :c7517; + :b :c7518; + :b :c7519; + :b :c7520; + :b :c7521; + :b :c7522; + :b :c7523; + :b :c7524; + :b :c7525; + :b :c7526; + :b :c7527; + :b :c7528; + :b :c7529; + :b :c7530; + :b :c7531; + :b :c7532; + :b :c7533; + :b :c7534; + :b :c7535; + :b :c7536; + :b :c7537; + :b :c7538; + :b :c7539; + :b :c7540; + :b :c7541; + :b :c7542; + :b :c7543; + :b :c7544; + :b :c7545; + :b :c7546; + :b :c7547; + :b :c7548; + :b :c7549; + :b :c7550; + :b :c7551; + :b :c7552; + :b :c7553; + :b :c7554; + :b :c7555; + :b :c7556; + :b :c7557; + :b :c7558; + :b :c7559; + :b :c7560; + :b :c7561; + :b :c7562; + :b :c7563; + :b :c7564; + :b :c7565; + :b :c7566; + :b :c7567; + :b :c7568; + :b :c7569; + :b :c7570; + :b :c7571; + :b :c7572; + :b :c7573; + :b :c7574; + :b :c7575; + :b :c7576; + :b :c7577; + :b :c7578; + :b :c7579; + :b :c7580; + :b :c7581; + :b :c7582; + :b :c7583; + :b :c7584; + :b :c7585; + :b :c7586; + :b :c7587; + :b :c7588; + :b :c7589; + :b :c7590; + :b :c7591; + :b :c7592; + :b :c7593; + :b :c7594; + :b :c7595; + :b :c7596; + :b :c7597; + :b :c7598; + :b :c7599; + :b :c7600; + :b :c7601; + :b :c7602; + :b :c7603; + :b :c7604; + :b :c7605; + :b :c7606; + :b :c7607; + :b :c7608; + :b :c7609; + :b :c7610; + :b :c7611; + :b :c7612; + :b :c7613; + :b :c7614; + :b :c7615; + :b :c7616; + :b :c7617; + :b :c7618; + :b :c7619; + :b :c7620; + :b :c7621; + :b :c7622; + :b :c7623; + :b :c7624; + :b :c7625; + :b :c7626; + :b :c7627; + :b :c7628; + :b :c7629; + :b :c7630; + :b :c7631; + :b :c7632; + :b :c7633; + :b :c7634; + :b :c7635; + :b :c7636; + :b :c7637; + :b :c7638; + :b :c7639; + :b :c7640; + :b :c7641; + :b :c7642; + :b :c7643; + :b :c7644; + :b :c7645; + :b :c7646; + :b :c7647; + :b :c7648; + :b :c7649; + :b :c7650; + :b :c7651; + :b :c7652; + :b :c7653; + :b :c7654; + :b :c7655; + :b :c7656; + :b :c7657; + :b :c7658; + :b :c7659; + :b :c7660; + :b :c7661; + :b :c7662; + :b :c7663; + :b :c7664; + :b :c7665; + :b :c7666; + :b :c7667; + :b :c7668; + :b :c7669; + :b :c7670; + :b :c7671; + :b :c7672; + :b :c7673; + :b :c7674; + :b :c7675; + :b :c7676; + :b :c7677; + :b :c7678; + :b :c7679; + :b :c7680; + :b :c7681; + :b :c7682; + :b :c7683; + :b :c7684; + :b :c7685; + :b :c7686; + :b :c7687; + :b :c7688; + :b :c7689; + :b :c7690; + :b :c7691; + :b :c7692; + :b :c7693; + :b :c7694; + :b :c7695; + :b :c7696; + :b :c7697; + :b :c7698; + :b :c7699; + :b :c7700; + :b :c7701; + :b :c7702; + :b :c7703; + :b :c7704; + :b :c7705; + :b :c7706; + :b :c7707; + :b :c7708; + :b :c7709; + :b :c7710; + :b :c7711; + :b :c7712; + :b :c7713; + :b :c7714; + :b :c7715; + :b :c7716; + :b :c7717; + :b :c7718; + :b :c7719; + :b :c7720; + :b :c7721; + :b :c7722; + :b :c7723; + :b :c7724; + :b :c7725; + :b :c7726; + :b :c7727; + :b :c7728; + :b :c7729; + :b :c7730; + :b :c7731; + :b :c7732; + :b :c7733; + :b :c7734; + :b :c7735; + :b :c7736; + :b :c7737; + :b :c7738; + :b :c7739; + :b :c7740; + :b :c7741; + :b :c7742; + :b :c7743; + :b :c7744; + :b :c7745; + :b :c7746; + :b :c7747; + :b :c7748; + :b :c7749; + :b :c7750; + :b :c7751; + :b :c7752; + :b :c7753; + :b :c7754; + :b :c7755; + :b :c7756; + :b :c7757; + :b :c7758; + :b :c7759; + :b :c7760; + :b :c7761; + :b :c7762; + :b :c7763; + :b :c7764; + :b :c7765; + :b :c7766; + :b :c7767; + :b :c7768; + :b :c7769; + :b :c7770; + :b :c7771; + :b :c7772; + :b :c7773; + :b :c7774; + :b :c7775; + :b :c7776; + :b :c7777; + :b :c7778; + :b :c7779; + :b :c7780; + :b :c7781; + :b :c7782; + :b :c7783; + :b :c7784; + :b :c7785; + :b :c7786; + :b :c7787; + :b :c7788; + :b :c7789; + :b :c7790; + :b :c7791; + :b :c7792; + :b :c7793; + :b :c7794; + :b :c7795; + :b :c7796; + :b :c7797; + :b :c7798; + :b :c7799; + :b :c7800; + :b :c7801; + :b :c7802; + :b :c7803; + :b :c7804; + :b :c7805; + :b :c7806; + :b :c7807; + :b :c7808; + :b :c7809; + :b :c7810; + :b :c7811; + :b :c7812; + :b :c7813; + :b :c7814; + :b :c7815; + :b :c7816; + :b :c7817; + :b :c7818; + :b :c7819; + :b :c7820; + :b :c7821; + :b :c7822; + :b :c7823; + :b :c7824; + :b :c7825; + :b :c7826; + :b :c7827; + :b :c7828; + :b :c7829; + :b :c7830; + :b :c7831; + :b :c7832; + :b :c7833; + :b :c7834; + :b :c7835; + :b :c7836; + :b :c7837; + :b :c7838; + :b :c7839; + :b :c7840; + :b :c7841; + :b :c7842; + :b :c7843; + :b :c7844; + :b :c7845; + :b :c7846; + :b :c7847; + :b :c7848; + :b :c7849; + :b :c7850; + :b :c7851; + :b :c7852; + :b :c7853; + :b :c7854; + :b :c7855; + :b :c7856; + :b :c7857; + :b :c7858; + :b :c7859; + :b :c7860; + :b :c7861; + :b :c7862; + :b :c7863; + :b :c7864; + :b :c7865; + :b :c7866; + :b :c7867; + :b :c7868; + :b :c7869; + :b :c7870; + :b :c7871; + :b :c7872; + :b :c7873; + :b :c7874; + :b :c7875; + :b :c7876; + :b :c7877; + :b :c7878; + :b :c7879; + :b :c7880; + :b :c7881; + :b :c7882; + :b :c7883; + :b :c7884; + :b :c7885; + :b :c7886; + :b :c7887; + :b :c7888; + :b :c7889; + :b :c7890; + :b :c7891; + :b :c7892; + :b :c7893; + :b :c7894; + :b :c7895; + :b :c7896; + :b :c7897; + :b :c7898; + :b :c7899; + :b :c7900; + :b :c7901; + :b :c7902; + :b :c7903; + :b :c7904; + :b :c7905; + :b :c7906; + :b :c7907; + :b :c7908; + :b :c7909; + :b :c7910; + :b :c7911; + :b :c7912; + :b :c7913; + :b :c7914; + :b :c7915; + :b :c7916; + :b :c7917; + :b :c7918; + :b :c7919; + :b :c7920; + :b :c7921; + :b :c7922; + :b :c7923; + :b :c7924; + :b :c7925; + :b :c7926; + :b :c7927; + :b :c7928; + :b :c7929; + :b :c7930; + :b :c7931; + :b :c7932; + :b :c7933; + :b :c7934; + :b :c7935; + :b :c7936; + :b :c7937; + :b :c7938; + :b :c7939; + :b :c7940; + :b :c7941; + :b :c7942; + :b :c7943; + :b :c7944; + :b :c7945; + :b :c7946; + :b :c7947; + :b :c7948; + :b :c7949; + :b :c7950; + :b :c7951; + :b :c7952; + :b :c7953; + :b :c7954; + :b :c7955; + :b :c7956; + :b :c7957; + :b :c7958; + :b :c7959; + :b :c7960; + :b :c7961; + :b :c7962; + :b :c7963; + :b :c7964; + :b :c7965; + :b :c7966; + :b :c7967; + :b :c7968; + :b :c7969; + :b :c7970; + :b :c7971; + :b :c7972; + :b :c7973; + :b :c7974; + :b :c7975; + :b :c7976; + :b :c7977; + :b :c7978; + :b :c7979; + :b :c7980; + :b :c7981; + :b :c7982; + :b :c7983; + :b :c7984; + :b :c7985; + :b :c7986; + :b :c7987; + :b :c7988; + :b :c7989; + :b :c7990; + :b :c7991; + :b :c7992; + :b :c7993; + :b :c7994; + :b :c7995; + :b :c7996; + :b :c7997; + :b :c7998; + :b :c7999; + :b :c8000; + :b :c8001; + :b :c8002; + :b :c8003; + :b :c8004; + :b :c8005; + :b :c8006; + :b :c8007; + :b :c8008; + :b :c8009; + :b :c8010; + :b :c8011; + :b :c8012; + :b :c8013; + :b :c8014; + :b :c8015; + :b :c8016; + :b :c8017; + :b :c8018; + :b :c8019; + :b :c8020; + :b :c8021; + :b :c8022; + :b :c8023; + :b :c8024; + :b :c8025; + :b :c8026; + :b :c8027; + :b :c8028; + :b :c8029; + :b :c8030; + :b :c8031; + :b :c8032; + :b :c8033; + :b :c8034; + :b :c8035; + :b :c8036; + :b :c8037; + :b :c8038; + :b :c8039; + :b :c8040; + :b :c8041; + :b :c8042; + :b :c8043; + :b :c8044; + :b :c8045; + :b :c8046; + :b :c8047; + :b :c8048; + :b :c8049; + :b :c8050; + :b :c8051; + :b :c8052; + :b :c8053; + :b :c8054; + :b :c8055; + :b :c8056; + :b :c8057; + :b :c8058; + :b :c8059; + :b :c8060; + :b :c8061; + :b :c8062; + :b :c8063; + :b :c8064; + :b :c8065; + :b :c8066; + :b :c8067; + :b :c8068; + :b :c8069; + :b :c8070; + :b :c8071; + :b :c8072; + :b :c8073; + :b :c8074; + :b :c8075; + :b :c8076; + :b :c8077; + :b :c8078; + :b :c8079; + :b :c8080; + :b :c8081; + :b :c8082; + :b :c8083; + :b :c8084; + :b :c8085; + :b :c8086; + :b :c8087; + :b :c8088; + :b :c8089; + :b :c8090; + :b :c8091; + :b :c8092; + :b :c8093; + :b :c8094; + :b :c8095; + :b :c8096; + :b :c8097; + :b :c8098; + :b :c8099; + :b :c8100; + :b :c8101; + :b :c8102; + :b :c8103; + :b :c8104; + :b :c8105; + :b :c8106; + :b :c8107; + :b :c8108; + :b :c8109; + :b :c8110; + :b :c8111; + :b :c8112; + :b :c8113; + :b :c8114; + :b :c8115; + :b :c8116; + :b :c8117; + :b :c8118; + :b :c8119; + :b :c8120; + :b :c8121; + :b :c8122; + :b :c8123; + :b :c8124; + :b :c8125; + :b :c8126; + :b :c8127; + :b :c8128; + :b :c8129; + :b :c8130; + :b :c8131; + :b :c8132; + :b :c8133; + :b :c8134; + :b :c8135; + :b :c8136; + :b :c8137; + :b :c8138; + :b :c8139; + :b :c8140; + :b :c8141; + :b :c8142; + :b :c8143; + :b :c8144; + :b :c8145; + :b :c8146; + :b :c8147; + :b :c8148; + :b :c8149; + :b :c8150; + :b :c8151; + :b :c8152; + :b :c8153; + :b :c8154; + :b :c8155; + :b :c8156; + :b :c8157; + :b :c8158; + :b :c8159; + :b :c8160; + :b :c8161; + :b :c8162; + :b :c8163; + :b :c8164; + :b :c8165; + :b :c8166; + :b :c8167; + :b :c8168; + :b :c8169; + :b :c8170; + :b :c8171; + :b :c8172; + :b :c8173; + :b :c8174; + :b :c8175; + :b :c8176; + :b :c8177; + :b :c8178; + :b :c8179; + :b :c8180; + :b :c8181; + :b :c8182; + :b :c8183; + :b :c8184; + :b :c8185; + :b :c8186; + :b :c8187; + :b :c8188; + :b :c8189; + :b :c8190; + :b :c8191; + :b :c8192; + :b :c8193; + :b :c8194; + :b :c8195; + :b :c8196; + :b :c8197; + :b :c8198; + :b :c8199; + :b :c8200; + :b :c8201; + :b :c8202; + :b :c8203; + :b :c8204; + :b :c8205; + :b :c8206; + :b :c8207; + :b :c8208; + :b :c8209; + :b :c8210; + :b :c8211; + :b :c8212; + :b :c8213; + :b :c8214; + :b :c8215; + :b :c8216; + :b :c8217; + :b :c8218; + :b :c8219; + :b :c8220; + :b :c8221; + :b :c8222; + :b :c8223; + :b :c8224; + :b :c8225; + :b :c8226; + :b :c8227; + :b :c8228; + :b :c8229; + :b :c8230; + :b :c8231; + :b :c8232; + :b :c8233; + :b :c8234; + :b :c8235; + :b :c8236; + :b :c8237; + :b :c8238; + :b :c8239; + :b :c8240; + :b :c8241; + :b :c8242; + :b :c8243; + :b :c8244; + :b :c8245; + :b :c8246; + :b :c8247; + :b :c8248; + :b :c8249; + :b :c8250; + :b :c8251; + :b :c8252; + :b :c8253; + :b :c8254; + :b :c8255; + :b :c8256; + :b :c8257; + :b :c8258; + :b :c8259; + :b :c8260; + :b :c8261; + :b :c8262; + :b :c8263; + :b :c8264; + :b :c8265; + :b :c8266; + :b :c8267; + :b :c8268; + :b :c8269; + :b :c8270; + :b :c8271; + :b :c8272; + :b :c8273; + :b :c8274; + :b :c8275; + :b :c8276; + :b :c8277; + :b :c8278; + :b :c8279; + :b :c8280; + :b :c8281; + :b :c8282; + :b :c8283; + :b :c8284; + :b :c8285; + :b :c8286; + :b :c8287; + :b :c8288; + :b :c8289; + :b :c8290; + :b :c8291; + :b :c8292; + :b :c8293; + :b :c8294; + :b :c8295; + :b :c8296; + :b :c8297; + :b :c8298; + :b :c8299; + :b :c8300; + :b :c8301; + :b :c8302; + :b :c8303; + :b :c8304; + :b :c8305; + :b :c8306; + :b :c8307; + :b :c8308; + :b :c8309; + :b :c8310; + :b :c8311; + :b :c8312; + :b :c8313; + :b :c8314; + :b :c8315; + :b :c8316; + :b :c8317; + :b :c8318; + :b :c8319; + :b :c8320; + :b :c8321; + :b :c8322; + :b :c8323; + :b :c8324; + :b :c8325; + :b :c8326; + :b :c8327; + :b :c8328; + :b :c8329; + :b :c8330; + :b :c8331; + :b :c8332; + :b :c8333; + :b :c8334; + :b :c8335; + :b :c8336; + :b :c8337; + :b :c8338; + :b :c8339; + :b :c8340; + :b :c8341; + :b :c8342; + :b :c8343; + :b :c8344; + :b :c8345; + :b :c8346; + :b :c8347; + :b :c8348; + :b :c8349; + :b :c8350; + :b :c8351; + :b :c8352; + :b :c8353; + :b :c8354; + :b :c8355; + :b :c8356; + :b :c8357; + :b :c8358; + :b :c8359; + :b :c8360; + :b :c8361; + :b :c8362; + :b :c8363; + :b :c8364; + :b :c8365; + :b :c8366; + :b :c8367; + :b :c8368; + :b :c8369; + :b :c8370; + :b :c8371; + :b :c8372; + :b :c8373; + :b :c8374; + :b :c8375; + :b :c8376; + :b :c8377; + :b :c8378; + :b :c8379; + :b :c8380; + :b :c8381; + :b :c8382; + :b :c8383; + :b :c8384; + :b :c8385; + :b :c8386; + :b :c8387; + :b :c8388; + :b :c8389; + :b :c8390; + :b :c8391; + :b :c8392; + :b :c8393; + :b :c8394; + :b :c8395; + :b :c8396; + :b :c8397; + :b :c8398; + :b :c8399; + :b :c8400; + :b :c8401; + :b :c8402; + :b :c8403; + :b :c8404; + :b :c8405; + :b :c8406; + :b :c8407; + :b :c8408; + :b :c8409; + :b :c8410; + :b :c8411; + :b :c8412; + :b :c8413; + :b :c8414; + :b :c8415; + :b :c8416; + :b :c8417; + :b :c8418; + :b :c8419; + :b :c8420; + :b :c8421; + :b :c8422; + :b :c8423; + :b :c8424; + :b :c8425; + :b :c8426; + :b :c8427; + :b :c8428; + :b :c8429; + :b :c8430; + :b :c8431; + :b :c8432; + :b :c8433; + :b :c8434; + :b :c8435; + :b :c8436; + :b :c8437; + :b :c8438; + :b :c8439; + :b :c8440; + :b :c8441; + :b :c8442; + :b :c8443; + :b :c8444; + :b :c8445; + :b :c8446; + :b :c8447; + :b :c8448; + :b :c8449; + :b :c8450; + :b :c8451; + :b :c8452; + :b :c8453; + :b :c8454; + :b :c8455; + :b :c8456; + :b :c8457; + :b :c8458; + :b :c8459; + :b :c8460; + :b :c8461; + :b :c8462; + :b :c8463; + :b :c8464; + :b :c8465; + :b :c8466; + :b :c8467; + :b :c8468; + :b :c8469; + :b :c8470; + :b :c8471; + :b :c8472; + :b :c8473; + :b :c8474; + :b :c8475; + :b :c8476; + :b :c8477; + :b :c8478; + :b :c8479; + :b :c8480; + :b :c8481; + :b :c8482; + :b :c8483; + :b :c8484; + :b :c8485; + :b :c8486; + :b :c8487; + :b :c8488; + :b :c8489; + :b :c8490; + :b :c8491; + :b :c8492; + :b :c8493; + :b :c8494; + :b :c8495; + :b :c8496; + :b :c8497; + :b :c8498; + :b :c8499; + :b :c8500; + :b :c8501; + :b :c8502; + :b :c8503; + :b :c8504; + :b :c8505; + :b :c8506; + :b :c8507; + :b :c8508; + :b :c8509; + :b :c8510; + :b :c8511; + :b :c8512; + :b :c8513; + :b :c8514; + :b :c8515; + :b :c8516; + :b :c8517; + :b :c8518; + :b :c8519; + :b :c8520; + :b :c8521; + :b :c8522; + :b :c8523; + :b :c8524; + :b :c8525; + :b :c8526; + :b :c8527; + :b :c8528; + :b :c8529; + :b :c8530; + :b :c8531; + :b :c8532; + :b :c8533; + :b :c8534; + :b :c8535; + :b :c8536; + :b :c8537; + :b :c8538; + :b :c8539; + :b :c8540; + :b :c8541; + :b :c8542; + :b :c8543; + :b :c8544; + :b :c8545; + :b :c8546; + :b :c8547; + :b :c8548; + :b :c8549; + :b :c8550; + :b :c8551; + :b :c8552; + :b :c8553; + :b :c8554; + :b :c8555; + :b :c8556; + :b :c8557; + :b :c8558; + :b :c8559; + :b :c8560; + :b :c8561; + :b :c8562; + :b :c8563; + :b :c8564; + :b :c8565; + :b :c8566; + :b :c8567; + :b :c8568; + :b :c8569; + :b :c8570; + :b :c8571; + :b :c8572; + :b :c8573; + :b :c8574; + :b :c8575; + :b :c8576; + :b :c8577; + :b :c8578; + :b :c8579; + :b :c8580; + :b :c8581; + :b :c8582; + :b :c8583; + :b :c8584; + :b :c8585; + :b :c8586; + :b :c8587; + :b :c8588; + :b :c8589; + :b :c8590; + :b :c8591; + :b :c8592; + :b :c8593; + :b :c8594; + :b :c8595; + :b :c8596; + :b :c8597; + :b :c8598; + :b :c8599; + :b :c8600; + :b :c8601; + :b :c8602; + :b :c8603; + :b :c8604; + :b :c8605; + :b :c8606; + :b :c8607; + :b :c8608; + :b :c8609; + :b :c8610; + :b :c8611; + :b :c8612; + :b :c8613; + :b :c8614; + :b :c8615; + :b :c8616; + :b :c8617; + :b :c8618; + :b :c8619; + :b :c8620; + :b :c8621; + :b :c8622; + :b :c8623; + :b :c8624; + :b :c8625; + :b :c8626; + :b :c8627; + :b :c8628; + :b :c8629; + :b :c8630; + :b :c8631; + :b :c8632; + :b :c8633; + :b :c8634; + :b :c8635; + :b :c8636; + :b :c8637; + :b :c8638; + :b :c8639; + :b :c8640; + :b :c8641; + :b :c8642; + :b :c8643; + :b :c8644; + :b :c8645; + :b :c8646; + :b :c8647; + :b :c8648; + :b :c8649; + :b :c8650; + :b :c8651; + :b :c8652; + :b :c8653; + :b :c8654; + :b :c8655; + :b :c8656; + :b :c8657; + :b :c8658; + :b :c8659; + :b :c8660; + :b :c8661; + :b :c8662; + :b :c8663; + :b :c8664; + :b :c8665; + :b :c8666; + :b :c8667; + :b :c8668; + :b :c8669; + :b :c8670; + :b :c8671; + :b :c8672; + :b :c8673; + :b :c8674; + :b :c8675; + :b :c8676; + :b :c8677; + :b :c8678; + :b :c8679; + :b :c8680; + :b :c8681; + :b :c8682; + :b :c8683; + :b :c8684; + :b :c8685; + :b :c8686; + :b :c8687; + :b :c8688; + :b :c8689; + :b :c8690; + :b :c8691; + :b :c8692; + :b :c8693; + :b :c8694; + :b :c8695; + :b :c8696; + :b :c8697; + :b :c8698; + :b :c8699; + :b :c8700; + :b :c8701; + :b :c8702; + :b :c8703; + :b :c8704; + :b :c8705; + :b :c8706; + :b :c8707; + :b :c8708; + :b :c8709; + :b :c8710; + :b :c8711; + :b :c8712; + :b :c8713; + :b :c8714; + :b :c8715; + :b :c8716; + :b :c8717; + :b :c8718; + :b :c8719; + :b :c8720; + :b :c8721; + :b :c8722; + :b :c8723; + :b :c8724; + :b :c8725; + :b :c8726; + :b :c8727; + :b :c8728; + :b :c8729; + :b :c8730; + :b :c8731; + :b :c8732; + :b :c8733; + :b :c8734; + :b :c8735; + :b :c8736; + :b :c8737; + :b :c8738; + :b :c8739; + :b :c8740; + :b :c8741; + :b :c8742; + :b :c8743; + :b :c8744; + :b :c8745; + :b :c8746; + :b :c8747; + :b :c8748; + :b :c8749; + :b :c8750; + :b :c8751; + :b :c8752; + :b :c8753; + :b :c8754; + :b :c8755; + :b :c8756; + :b :c8757; + :b :c8758; + :b :c8759; + :b :c8760; + :b :c8761; + :b :c8762; + :b :c8763; + :b :c8764; + :b :c8765; + :b :c8766; + :b :c8767; + :b :c8768; + :b :c8769; + :b :c8770; + :b :c8771; + :b :c8772; + :b :c8773; + :b :c8774; + :b :c8775; + :b :c8776; + :b :c8777; + :b :c8778; + :b :c8779; + :b :c8780; + :b :c8781; + :b :c8782; + :b :c8783; + :b :c8784; + :b :c8785; + :b :c8786; + :b :c8787; + :b :c8788; + :b :c8789; + :b :c8790; + :b :c8791; + :b :c8792; + :b :c8793; + :b :c8794; + :b :c8795; + :b :c8796; + :b :c8797; + :b :c8798; + :b :c8799; + :b :c8800; + :b :c8801; + :b :c8802; + :b :c8803; + :b :c8804; + :b :c8805; + :b :c8806; + :b :c8807; + :b :c8808; + :b :c8809; + :b :c8810; + :b :c8811; + :b :c8812; + :b :c8813; + :b :c8814; + :b :c8815; + :b :c8816; + :b :c8817; + :b :c8818; + :b :c8819; + :b :c8820; + :b :c8821; + :b :c8822; + :b :c8823; + :b :c8824; + :b :c8825; + :b :c8826; + :b :c8827; + :b :c8828; + :b :c8829; + :b :c8830; + :b :c8831; + :b :c8832; + :b :c8833; + :b :c8834; + :b :c8835; + :b :c8836; + :b :c8837; + :b :c8838; + :b :c8839; + :b :c8840; + :b :c8841; + :b :c8842; + :b :c8843; + :b :c8844; + :b :c8845; + :b :c8846; + :b :c8847; + :b :c8848; + :b :c8849; + :b :c8850; + :b :c8851; + :b :c8852; + :b :c8853; + :b :c8854; + :b :c8855; + :b :c8856; + :b :c8857; + :b :c8858; + :b :c8859; + :b :c8860; + :b :c8861; + :b :c8862; + :b :c8863; + :b :c8864; + :b :c8865; + :b :c8866; + :b :c8867; + :b :c8868; + :b :c8869; + :b :c8870; + :b :c8871; + :b :c8872; + :b :c8873; + :b :c8874; + :b :c8875; + :b :c8876; + :b :c8877; + :b :c8878; + :b :c8879; + :b :c8880; + :b :c8881; + :b :c8882; + :b :c8883; + :b :c8884; + :b :c8885; + :b :c8886; + :b :c8887; + :b :c8888; + :b :c8889; + :b :c8890; + :b :c8891; + :b :c8892; + :b :c8893; + :b :c8894; + :b :c8895; + :b :c8896; + :b :c8897; + :b :c8898; + :b :c8899; + :b :c8900; + :b :c8901; + :b :c8902; + :b :c8903; + :b :c8904; + :b :c8905; + :b :c8906; + :b :c8907; + :b :c8908; + :b :c8909; + :b :c8910; + :b :c8911; + :b :c8912; + :b :c8913; + :b :c8914; + :b :c8915; + :b :c8916; + :b :c8917; + :b :c8918; + :b :c8919; + :b :c8920; + :b :c8921; + :b :c8922; + :b :c8923; + :b :c8924; + :b :c8925; + :b :c8926; + :b :c8927; + :b :c8928; + :b :c8929; + :b :c8930; + :b :c8931; + :b :c8932; + :b :c8933; + :b :c8934; + :b :c8935; + :b :c8936; + :b :c8937; + :b :c8938; + :b :c8939; + :b :c8940; + :b :c8941; + :b :c8942; + :b :c8943; + :b :c8944; + :b :c8945; + :b :c8946; + :b :c8947; + :b :c8948; + :b :c8949; + :b :c8950; + :b :c8951; + :b :c8952; + :b :c8953; + :b :c8954; + :b :c8955; + :b :c8956; + :b :c8957; + :b :c8958; + :b :c8959; + :b :c8960; + :b :c8961; + :b :c8962; + :b :c8963; + :b :c8964; + :b :c8965; + :b :c8966; + :b :c8967; + :b :c8968; + :b :c8969; + :b :c8970; + :b :c8971; + :b :c8972; + :b :c8973; + :b :c8974; + :b :c8975; + :b :c8976; + :b :c8977; + :b :c8978; + :b :c8979; + :b :c8980; + :b :c8981; + :b :c8982; + :b :c8983; + :b :c8984; + :b :c8985; + :b :c8986; + :b :c8987; + :b :c8988; + :b :c8989; + :b :c8990; + :b :c8991; + :b :c8992; + :b :c8993; + :b :c8994; + :b :c8995; + :b :c8996; + :b :c8997; + :b :c8998; + :b :c8999; + :b :c9000; + :b :c9001; + :b :c9002; + :b :c9003; + :b :c9004; + :b :c9005; + :b :c9006; + :b :c9007; + :b :c9008; + :b :c9009; + :b :c9010; + :b :c9011; + :b :c9012; + :b :c9013; + :b :c9014; + :b :c9015; + :b :c9016; + :b :c9017; + :b :c9018; + :b :c9019; + :b :c9020; + :b :c9021; + :b :c9022; + :b :c9023; + :b :c9024; + :b :c9025; + :b :c9026; + :b :c9027; + :b :c9028; + :b :c9029; + :b :c9030; + :b :c9031; + :b :c9032; + :b :c9033; + :b :c9034; + :b :c9035; + :b :c9036; + :b :c9037; + :b :c9038; + :b :c9039; + :b :c9040; + :b :c9041; + :b :c9042; + :b :c9043; + :b :c9044; + :b :c9045; + :b :c9046; + :b :c9047; + :b :c9048; + :b :c9049; + :b :c9050; + :b :c9051; + :b :c9052; + :b :c9053; + :b :c9054; + :b :c9055; + :b :c9056; + :b :c9057; + :b :c9058; + :b :c9059; + :b :c9060; + :b :c9061; + :b :c9062; + :b :c9063; + :b :c9064; + :b :c9065; + :b :c9066; + :b :c9067; + :b :c9068; + :b :c9069; + :b :c9070; + :b :c9071; + :b :c9072; + :b :c9073; + :b :c9074; + :b :c9075; + :b :c9076; + :b :c9077; + :b :c9078; + :b :c9079; + :b :c9080; + :b :c9081; + :b :c9082; + :b :c9083; + :b :c9084; + :b :c9085; + :b :c9086; + :b :c9087; + :b :c9088; + :b :c9089; + :b :c9090; + :b :c9091; + :b :c9092; + :b :c9093; + :b :c9094; + :b :c9095; + :b :c9096; + :b :c9097; + :b :c9098; + :b :c9099; + :b :c9100; + :b :c9101; + :b :c9102; + :b :c9103; + :b :c9104; + :b :c9105; + :b :c9106; + :b :c9107; + :b :c9108; + :b :c9109; + :b :c9110; + :b :c9111; + :b :c9112; + :b :c9113; + :b :c9114; + :b :c9115; + :b :c9116; + :b :c9117; + :b :c9118; + :b :c9119; + :b :c9120; + :b :c9121; + :b :c9122; + :b :c9123; + :b :c9124; + :b :c9125; + :b :c9126; + :b :c9127; + :b :c9128; + :b :c9129; + :b :c9130; + :b :c9131; + :b :c9132; + :b :c9133; + :b :c9134; + :b :c9135; + :b :c9136; + :b :c9137; + :b :c9138; + :b :c9139; + :b :c9140; + :b :c9141; + :b :c9142; + :b :c9143; + :b :c9144; + :b :c9145; + :b :c9146; + :b :c9147; + :b :c9148; + :b :c9149; + :b :c9150; + :b :c9151; + :b :c9152; + :b :c9153; + :b :c9154; + :b :c9155; + :b :c9156; + :b :c9157; + :b :c9158; + :b :c9159; + :b :c9160; + :b :c9161; + :b :c9162; + :b :c9163; + :b :c9164; + :b :c9165; + :b :c9166; + :b :c9167; + :b :c9168; + :b :c9169; + :b :c9170; + :b :c9171; + :b :c9172; + :b :c9173; + :b :c9174; + :b :c9175; + :b :c9176; + :b :c9177; + :b :c9178; + :b :c9179; + :b :c9180; + :b :c9181; + :b :c9182; + :b :c9183; + :b :c9184; + :b :c9185; + :b :c9186; + :b :c9187; + :b :c9188; + :b :c9189; + :b :c9190; + :b :c9191; + :b :c9192; + :b :c9193; + :b :c9194; + :b :c9195; + :b :c9196; + :b :c9197; + :b :c9198; + :b :c9199; + :b :c9200; + :b :c9201; + :b :c9202; + :b :c9203; + :b :c9204; + :b :c9205; + :b :c9206; + :b :c9207; + :b :c9208; + :b :c9209; + :b :c9210; + :b :c9211; + :b :c9212; + :b :c9213; + :b :c9214; + :b :c9215; + :b :c9216; + :b :c9217; + :b :c9218; + :b :c9219; + :b :c9220; + :b :c9221; + :b :c9222; + :b :c9223; + :b :c9224; + :b :c9225; + :b :c9226; + :b :c9227; + :b :c9228; + :b :c9229; + :b :c9230; + :b :c9231; + :b :c9232; + :b :c9233; + :b :c9234; + :b :c9235; + :b :c9236; + :b :c9237; + :b :c9238; + :b :c9239; + :b :c9240; + :b :c9241; + :b :c9242; + :b :c9243; + :b :c9244; + :b :c9245; + :b :c9246; + :b :c9247; + :b :c9248; + :b :c9249; + :b :c9250; + :b :c9251; + :b :c9252; + :b :c9253; + :b :c9254; + :b :c9255; + :b :c9256; + :b :c9257; + :b :c9258; + :b :c9259; + :b :c9260; + :b :c9261; + :b :c9262; + :b :c9263; + :b :c9264; + :b :c9265; + :b :c9266; + :b :c9267; + :b :c9268; + :b :c9269; + :b :c9270; + :b :c9271; + :b :c9272; + :b :c9273; + :b :c9274; + :b :c9275; + :b :c9276; + :b :c9277; + :b :c9278; + :b :c9279; + :b :c9280; + :b :c9281; + :b :c9282; + :b :c9283; + :b :c9284; + :b :c9285; + :b :c9286; + :b :c9287; + :b :c9288; + :b :c9289; + :b :c9290; + :b :c9291; + :b :c9292; + :b :c9293; + :b :c9294; + :b :c9295; + :b :c9296; + :b :c9297; + :b :c9298; + :b :c9299; + :b :c9300; + :b :c9301; + :b :c9302; + :b :c9303; + :b :c9304; + :b :c9305; + :b :c9306; + :b :c9307; + :b :c9308; + :b :c9309; + :b :c9310; + :b :c9311; + :b :c9312; + :b :c9313; + :b :c9314; + :b :c9315; + :b :c9316; + :b :c9317; + :b :c9318; + :b :c9319; + :b :c9320; + :b :c9321; + :b :c9322; + :b :c9323; + :b :c9324; + :b :c9325; + :b :c9326; + :b :c9327; + :b :c9328; + :b :c9329; + :b :c9330; + :b :c9331; + :b :c9332; + :b :c9333; + :b :c9334; + :b :c9335; + :b :c9336; + :b :c9337; + :b :c9338; + :b :c9339; + :b :c9340; + :b :c9341; + :b :c9342; + :b :c9343; + :b :c9344; + :b :c9345; + :b :c9346; + :b :c9347; + :b :c9348; + :b :c9349; + :b :c9350; + :b :c9351; + :b :c9352; + :b :c9353; + :b :c9354; + :b :c9355; + :b :c9356; + :b :c9357; + :b :c9358; + :b :c9359; + :b :c9360; + :b :c9361; + :b :c9362; + :b :c9363; + :b :c9364; + :b :c9365; + :b :c9366; + :b :c9367; + :b :c9368; + :b :c9369; + :b :c9370; + :b :c9371; + :b :c9372; + :b :c9373; + :b :c9374; + :b :c9375; + :b :c9376; + :b :c9377; + :b :c9378; + :b :c9379; + :b :c9380; + :b :c9381; + :b :c9382; + :b :c9383; + :b :c9384; + :b :c9385; + :b :c9386; + :b :c9387; + :b :c9388; + :b :c9389; + :b :c9390; + :b :c9391; + :b :c9392; + :b :c9393; + :b :c9394; + :b :c9395; + :b :c9396; + :b :c9397; + :b :c9398; + :b :c9399; + :b :c9400; + :b :c9401; + :b :c9402; + :b :c9403; + :b :c9404; + :b :c9405; + :b :c9406; + :b :c9407; + :b :c9408; + :b :c9409; + :b :c9410; + :b :c9411; + :b :c9412; + :b :c9413; + :b :c9414; + :b :c9415; + :b :c9416; + :b :c9417; + :b :c9418; + :b :c9419; + :b :c9420; + :b :c9421; + :b :c9422; + :b :c9423; + :b :c9424; + :b :c9425; + :b :c9426; + :b :c9427; + :b :c9428; + :b :c9429; + :b :c9430; + :b :c9431; + :b :c9432; + :b :c9433; + :b :c9434; + :b :c9435; + :b :c9436; + :b :c9437; + :b :c9438; + :b :c9439; + :b :c9440; + :b :c9441; + :b :c9442; + :b :c9443; + :b :c9444; + :b :c9445; + :b :c9446; + :b :c9447; + :b :c9448; + :b :c9449; + :b :c9450; + :b :c9451; + :b :c9452; + :b :c9453; + :b :c9454; + :b :c9455; + :b :c9456; + :b :c9457; + :b :c9458; + :b :c9459; + :b :c9460; + :b :c9461; + :b :c9462; + :b :c9463; + :b :c9464; + :b :c9465; + :b :c9466; + :b :c9467; + :b :c9468; + :b :c9469; + :b :c9470; + :b :c9471; + :b :c9472; + :b :c9473; + :b :c9474; + :b :c9475; + :b :c9476; + :b :c9477; + :b :c9478; + :b :c9479; + :b :c9480; + :b :c9481; + :b :c9482; + :b :c9483; + :b :c9484; + :b :c9485; + :b :c9486; + :b :c9487; + :b :c9488; + :b :c9489; + :b :c9490; + :b :c9491; + :b :c9492; + :b :c9493; + :b :c9494; + :b :c9495; + :b :c9496; + :b :c9497; + :b :c9498; + :b :c9499; + :b :c9500; + :b :c9501; + :b :c9502; + :b :c9503; + :b :c9504; + :b :c9505; + :b :c9506; + :b :c9507; + :b :c9508; + :b :c9509; + :b :c9510; + :b :c9511; + :b :c9512; + :b :c9513; + :b :c9514; + :b :c9515; + :b :c9516; + :b :c9517; + :b :c9518; + :b :c9519; + :b :c9520; + :b :c9521; + :b :c9522; + :b :c9523; + :b :c9524; + :b :c9525; + :b :c9526; + :b :c9527; + :b :c9528; + :b :c9529; + :b :c9530; + :b :c9531; + :b :c9532; + :b :c9533; + :b :c9534; + :b :c9535; + :b :c9536; + :b :c9537; + :b :c9538; + :b :c9539; + :b :c9540; + :b :c9541; + :b :c9542; + :b :c9543; + :b :c9544; + :b :c9545; + :b :c9546; + :b :c9547; + :b :c9548; + :b :c9549; + :b :c9550; + :b :c9551; + :b :c9552; + :b :c9553; + :b :c9554; + :b :c9555; + :b :c9556; + :b :c9557; + :b :c9558; + :b :c9559; + :b :c9560; + :b :c9561; + :b :c9562; + :b :c9563; + :b :c9564; + :b :c9565; + :b :c9566; + :b :c9567; + :b :c9568; + :b :c9569; + :b :c9570; + :b :c9571; + :b :c9572; + :b :c9573; + :b :c9574; + :b :c9575; + :b :c9576; + :b :c9577; + :b :c9578; + :b :c9579; + :b :c9580; + :b :c9581; + :b :c9582; + :b :c9583; + :b :c9584; + :b :c9585; + :b :c9586; + :b :c9587; + :b :c9588; + :b :c9589; + :b :c9590; + :b :c9591; + :b :c9592; + :b :c9593; + :b :c9594; + :b :c9595; + :b :c9596; + :b :c9597; + :b :c9598; + :b :c9599; + :b :c9600; + :b :c9601; + :b :c9602; + :b :c9603; + :b :c9604; + :b :c9605; + :b :c9606; + :b :c9607; + :b :c9608; + :b :c9609; + :b :c9610; + :b :c9611; + :b :c9612; + :b :c9613; + :b :c9614; + :b :c9615; + :b :c9616; + :b :c9617; + :b :c9618; + :b :c9619; + :b :c9620; + :b :c9621; + :b :c9622; + :b :c9623; + :b :c9624; + :b :c9625; + :b :c9626; + :b :c9627; + :b :c9628; + :b :c9629; + :b :c9630; + :b :c9631; + :b :c9632; + :b :c9633; + :b :c9634; + :b :c9635; + :b :c9636; + :b :c9637; + :b :c9638; + :b :c9639; + :b :c9640; + :b :c9641; + :b :c9642; + :b :c9643; + :b :c9644; + :b :c9645; + :b :c9646; + :b :c9647; + :b :c9648; + :b :c9649; + :b :c9650; + :b :c9651; + :b :c9652; + :b :c9653; + :b :c9654; + :b :c9655; + :b :c9656; + :b :c9657; + :b :c9658; + :b :c9659; + :b :c9660; + :b :c9661; + :b :c9662; + :b :c9663; + :b :c9664; + :b :c9665; + :b :c9666; + :b :c9667; + :b :c9668; + :b :c9669; + :b :c9670; + :b :c9671; + :b :c9672; + :b :c9673; + :b :c9674; + :b :c9675; + :b :c9676; + :b :c9677; + :b :c9678; + :b :c9679; + :b :c9680; + :b :c9681; + :b :c9682; + :b :c9683; + :b :c9684; + :b :c9685; + :b :c9686; + :b :c9687; + :b :c9688; + :b :c9689; + :b :c9690; + :b :c9691; + :b :c9692; + :b :c9693; + :b :c9694; + :b :c9695; + :b :c9696; + :b :c9697; + :b :c9698; + :b :c9699; + :b :c9700; + :b :c9701; + :b :c9702; + :b :c9703; + :b :c9704; + :b :c9705; + :b :c9706; + :b :c9707; + :b :c9708; + :b :c9709; + :b :c9710; + :b :c9711; + :b :c9712; + :b :c9713; + :b :c9714; + :b :c9715; + :b :c9716; + :b :c9717; + :b :c9718; + :b :c9719; + :b :c9720; + :b :c9721; + :b :c9722; + :b :c9723; + :b :c9724; + :b :c9725; + :b :c9726; + :b :c9727; + :b :c9728; + :b :c9729; + :b :c9730; + :b :c9731; + :b :c9732; + :b :c9733; + :b :c9734; + :b :c9735; + :b :c9736; + :b :c9737; + :b :c9738; + :b :c9739; + :b :c9740; + :b :c9741; + :b :c9742; + :b :c9743; + :b :c9744; + :b :c9745; + :b :c9746; + :b :c9747; + :b :c9748; + :b :c9749; + :b :c9750; + :b :c9751; + :b :c9752; + :b :c9753; + :b :c9754; + :b :c9755; + :b :c9756; + :b :c9757; + :b :c9758; + :b :c9759; + :b :c9760; + :b :c9761; + :b :c9762; + :b :c9763; + :b :c9764; + :b :c9765; + :b :c9766; + :b :c9767; + :b :c9768; + :b :c9769; + :b :c9770; + :b :c9771; + :b :c9772; + :b :c9773; + :b :c9774; + :b :c9775; + :b :c9776; + :b :c9777; + :b :c9778; + :b :c9779; + :b :c9780; + :b :c9781; + :b :c9782; + :b :c9783; + :b :c9784; + :b :c9785; + :b :c9786; + :b :c9787; + :b :c9788; + :b :c9789; + :b :c9790; + :b :c9791; + :b :c9792; + :b :c9793; + :b :c9794; + :b :c9795; + :b :c9796; + :b :c9797; + :b :c9798; + :b :c9799; + :b :c9800; + :b :c9801; + :b :c9802; + :b :c9803; + :b :c9804; + :b :c9805; + :b :c9806; + :b :c9807; + :b :c9808; + :b :c9809; + :b :c9810; + :b :c9811; + :b :c9812; + :b :c9813; + :b :c9814; + :b :c9815; + :b :c9816; + :b :c9817; + :b :c9818; + :b :c9819; + :b :c9820; + :b :c9821; + :b :c9822; + :b :c9823; + :b :c9824; + :b :c9825; + :b :c9826; + :b :c9827; + :b :c9828; + :b :c9829; + :b :c9830; + :b :c9831; + :b :c9832; + :b :c9833; + :b :c9834; + :b :c9835; + :b :c9836; + :b :c9837; + :b :c9838; + :b :c9839; + :b :c9840; + :b :c9841; + :b :c9842; + :b :c9843; + :b :c9844; + :b :c9845; + :b :c9846; + :b :c9847; + :b :c9848; + :b :c9849; + :b :c9850; + :b :c9851; + :b :c9852; + :b :c9853; + :b :c9854; + :b :c9855; + :b :c9856; + :b :c9857; + :b :c9858; + :b :c9859; + :b :c9860; + :b :c9861; + :b :c9862; + :b :c9863; + :b :c9864; + :b :c9865; + :b :c9866; + :b :c9867; + :b :c9868; + :b :c9869; + :b :c9870; + :b :c9871; + :b :c9872; + :b :c9873; + :b :c9874; + :b :c9875; + :b :c9876; + :b :c9877; + :b :c9878; + :b :c9879; + :b :c9880; + :b :c9881; + :b :c9882; + :b :c9883; + :b :c9884; + :b :c9885; + :b :c9886; + :b :c9887; + :b :c9888; + :b :c9889; + :b :c9890; + :b :c9891; + :b :c9892; + :b :c9893; + :b :c9894; + :b :c9895; + :b :c9896; + :b :c9897; + :b :c9898; + :b :c9899; + :b :c9900; + :b :c9901; + :b :c9902; + :b :c9903; + :b :c9904; + :b :c9905; + :b :c9906; + :b :c9907; + :b :c9908; + :b :c9909; + :b :c9910; + :b :c9911; + :b :c9912; + :b :c9913; + :b :c9914; + :b :c9915; + :b :c9916; + :b :c9917; + :b :c9918; + :b :c9919; + :b :c9920; + :b :c9921; + :b :c9922; + :b :c9923; + :b :c9924; + :b :c9925; + :b :c9926; + :b :c9927; + :b :c9928; + :b :c9929; + :b :c9930; + :b :c9931; + :b :c9932; + :b :c9933; + :b :c9934; + :b :c9935; + :b :c9936; + :b :c9937; + :b :c9938; + :b :c9939; + :b :c9940; + :b :c9941; + :b :c9942; + :b :c9943; + :b :c9944; + :b :c9945; + :b :c9946; + :b :c9947; + :b :c9948; + :b :c9949; + :b :c9950; + :b :c9951; + :b :c9952; + :b :c9953; + :b :c9954; + :b :c9955; + :b :c9956; + :b :c9957; + :b :c9958; + :b :c9959; + :b :c9960; + :b :c9961; + :b :c9962; + :b :c9963; + :b :c9964; + :b :c9965; + :b :c9966; + :b :c9967; + :b :c9968; + :b :c9969; + :b :c9970; + :b :c9971; + :b :c9972; + :b :c9973; + :b :c9974; + :b :c9975; + :b :c9976; + :b :c9977; + :b :c9978; + :b :c9979; + :b :c9980; + :b :c9981; + :b :c9982; + :b :c9983; + :b :c9984; + :b :c9985; + :b :c9986; + :b :c9987; + :b :c9988; + :b :c9989; + :b :c9990; + :b :c9991; + :b :c9992; + :b :c9993; + :b :c9994; + :b :c9995; + :b :c9996; + :b :c9997; + :b :c9998; + :b :c9999; + :b :c10000 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-17.out b/source/libs/lilv/serd-0.18.2/tests/test-17.out new file mode 100644 index 000000000..466edbb2d --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-17.out @@ -0,0 +1 @@ + "a long\n\tliteral\nwith\nnewlines" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-17.ttl b/source/libs/lilv/serd-0.18.2/tests/test-17.ttl new file mode 100644 index 000000000..86c453bd8 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-17.ttl @@ -0,0 +1,6 @@ +# Test long literal +@prefix : . +:a :b """a long + literal +with +newlines""" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-18.out b/source/libs/lilv/serd-0.18.2/tests/test-18.out new file mode 100644 index 000000000..4ff4b95b3 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-18.out @@ -0,0 +1,2 @@ + "\nthis \ris a \U00015678long\t\nliteral\uABCD\n" . + "\tThis \uABCDis\r \U00015678another\n\none\n" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-18.ttl b/source/libs/lilv/serd-0.18.2/tests/test-18.ttl new file mode 100644 index 000000000..1adfa4516 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-18.ttl @@ -0,0 +1,9 @@ +@prefix : . + +:a :b """\nthis \ris a \U00015678long\t +literal\uABCD +""" . + +:d :e """\tThis \uABCDis\r \U00015678another\n +one +""" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-19.out b/source/libs/lilv/serd-0.18.2/tests/test-19.out new file mode 100644 index 000000000..2e2dbe404 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-19.out @@ -0,0 +1 @@ + "1.0"^^ . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-19.ttl b/source/libs/lilv/serd-0.18.2/tests/test-19.ttl new file mode 100644 index 000000000..9de0c07b2 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-19.ttl @@ -0,0 +1,4 @@ +@prefix : . + +:a :b 1.0 . + diff --git a/source/libs/lilv/serd-0.18.2/tests/test-20.out b/source/libs/lilv/serd-0.18.2/tests/test-20.out new file mode 100644 index 000000000..fff2da56b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-20.out @@ -0,0 +1,2 @@ + "" . + "" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-20.ttl b/source/libs/lilv/serd-0.18.2/tests/test-20.ttl new file mode 100644 index 000000000..37a9a4f33 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-20.ttl @@ -0,0 +1,6 @@ +@prefix : . + +:a :b "" . + +:c :d """""" . + diff --git a/source/libs/lilv/serd-0.18.2/tests/test-21.out b/source/libs/lilv/serd-0.18.2/tests/test-21.out new file mode 100644 index 000000000..d5dca6907 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-21.out @@ -0,0 +1,3 @@ + "1.0"^^ . + "1"^^ . + "1.0e0"^^ . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-21.ttl b/source/libs/lilv/serd-0.18.2/tests/test-21.ttl new file mode 100644 index 000000000..a8e8dc15a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-21.ttl @@ -0,0 +1,4 @@ +@prefix : . +:a :b 1.0 . +:c :d 1 . +:e :f 1.0e0 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-22.out b/source/libs/lilv/serd-0.18.2/tests/test-22.out new file mode 100644 index 000000000..3d0f970e8 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-22.out @@ -0,0 +1,3 @@ + "-1.0"^^ . + "-1"^^ . + "-1.0e0"^^ . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-22.ttl b/source/libs/lilv/serd-0.18.2/tests/test-22.ttl new file mode 100644 index 000000000..9b1a725aa --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-22.ttl @@ -0,0 +1,4 @@ +@prefix : . +:a :b -1.0 . +:c :d -1 . +:e :f -1.0e0 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-23.out b/source/libs/lilv/serd-0.18.2/tests/test-23.out new file mode 100644 index 000000000..fde31312e --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-23.out @@ -0,0 +1 @@ + "John said: \"Hello World!\"" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-23.ttl b/source/libs/lilv/serd-0.18.2/tests/test-23.ttl new file mode 100644 index 000000000..9f5360af8 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-23.ttl @@ -0,0 +1,3 @@ +# Test long literal +@prefix : . +:a :b """John said: "Hello World!\"""" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-24.out b/source/libs/lilv/serd-0.18.2/tests/test-24.out new file mode 100644 index 000000000..5a70bff19 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-24.out @@ -0,0 +1,2 @@ + "true"^^ . + "false"^^ . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-24.ttl b/source/libs/lilv/serd-0.18.2/tests/test-24.ttl new file mode 100644 index 000000000..25f3b7579 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-24.ttl @@ -0,0 +1,3 @@ +@prefix : . +:a :b true . +:c :d false . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-25.out b/source/libs/lilv/serd-0.18.2/tests/test-25.out new file mode 100644 index 000000000..1a38415fe --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-25.out @@ -0,0 +1,7 @@ + . + . + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-25.ttl b/source/libs/lilv/serd-0.18.2/tests/test-25.ttl new file mode 100644 index 000000000..310349da1 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-25.ttl @@ -0,0 +1,14 @@ +# comment test +@prefix : . +:a :b :c . # end of line comment +:d # ignore me + :e # and me + :f # and me + . +:g :h #ignore me + :i, # and me + :j . # and me + +:k :l :m ; #ignore me + :n :o ; # and me + :p :q . # and me diff --git a/source/libs/lilv/serd-0.18.2/tests/test-26.out b/source/libs/lilv/serd-0.18.2/tests/test-26.out new file mode 100644 index 000000000..ad105cf48 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-26.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-26.ttl b/source/libs/lilv/serd-0.18.2/tests/test-26.ttl new file mode 100644 index 000000000..0667c6b4a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-26.ttl @@ -0,0 +1,4 @@ +# comment line with no final newline test +@prefix : . +:a :b :c . +#foo diff --git a/source/libs/lilv/serd-0.18.2/tests/test-27.out b/source/libs/lilv/serd-0.18.2/tests/test-27.out new file mode 100644 index 000000000..7da0635ba --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-27.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-27.ttl b/source/libs/lilv/serd-0.18.2/tests/test-27.ttl new file mode 100644 index 000000000..569023c8a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-27.ttl @@ -0,0 +1,5 @@ +@prefix foo: . +@prefix foo: . + +foo:blah foo:blah foo:blah . + diff --git a/source/libs/lilv/serd-0.18.2/tests/test-29.out b/source/libs/lilv/serd-0.18.2/tests/test-29.out new file mode 100644 index 000000000..612052d3b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-29.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-29.ttl b/source/libs/lilv/serd-0.18.2/tests/test-29.ttl new file mode 100644 index 000000000..612052d3b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-29.ttl @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-30.out b/source/libs/lilv/serd-0.18.2/tests/test-30.out new file mode 100644 index 000000000..ce5c67d04 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-30.out @@ -0,0 +1,5 @@ + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-30.ttl b/source/libs/lilv/serd-0.18.2/tests/test-30.ttl new file mode 100644 index 000000000..6721ec243 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-30.ttl @@ -0,0 +1,12 @@ +# In-scope base URI is http://www.w3.org/2001/sw/DataAccess/df1/tests/ at this point + . +@base . +# In-scope base URI is http://example.org/ns/ at this point + . +@base . +# In-scope base URI is http://example.org/ns/foo/ at this point + . +@prefix : . +:a4 :b4 :c4 . +@prefix : . +:a5 :b5 :c5 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-backspace.out b/source/libs/lilv/serd-0.18.2/tests/test-backspace.out new file mode 100644 index 000000000..ad4806cfe --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-backspace.out @@ -0,0 +1,2 @@ + "\u0008" . + "\uFFFD" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-backspace.ttl b/source/libs/lilv/serd-0.18.2/tests/test-backspace.ttl new file mode 100644 index 000000000..07375d76f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-backspace.ttl @@ -0,0 +1,2 @@ + "\u0008" . + "" . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.out b/source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.out new file mode 100644 index 000000000..6d73993d1 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.out @@ -0,0 +1,3 @@ + "Impossible bytes: \uFFFD \uFFFD" . + "2 continuation bytes: \uFFFD" . + "Missing continuation: \uFFFD" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.ttl b/source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.ttl new file mode 100644 index 000000000..2c105f5b9 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-bad-utf8.ttl @@ -0,0 +1,3 @@ + "Impossible bytes: þ ÿ" . + "2 continuation bytes: €¿" . + "Missing continuation: À" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-base-query.out b/source/libs/lilv/serd-0.18.2/tests/test-base-query.out new file mode 100644 index 000000000..d40c2f6bf --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-base-query.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-base-query.ttl b/source/libs/lilv/serd-0.18.2/tests/test-base-query.ttl new file mode 100644 index 000000000..776388172 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-base-query.ttl @@ -0,0 +1,3 @@ +@base . + +<> a . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-blank-cont.out b/source/libs/lilv/serd-0.18.2/tests/test-blank-cont.out new file mode 100644 index 000000000..d64e3e469 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-blank-cont.out @@ -0,0 +1,4 @@ + _:genid1 . +_:genid1 . + _:genid2 . +_:genid2 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-blank-cont.ttl b/source/libs/lilv/serd-0.18.2/tests/test-blank-cont.ttl new file mode 100644 index 000000000..b161cdc4f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-blank-cont.ttl @@ -0,0 +1,4 @@ +@prefix : . + +:subj :pred [ a :FirstThing ] ; + :pred [ a :SecondThing ] . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.out b/source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.out new file mode 100644 index 000000000..2e0c0eb08 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.out @@ -0,0 +1,4 @@ + _:genid1 . +_:genid1 _:genid2 . +_:genid2 . +_:genid1 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.ttl b/source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.ttl new file mode 100644 index 000000000..5c0b0766a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-blank-in-list.ttl @@ -0,0 +1,2 @@ +@prefix : . +:a :b ( [ :c :d ] ) . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-bom.out b/source/libs/lilv/serd-0.18.2/tests/test-bom.out new file mode 100644 index 000000000..aea1655bc --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-bom.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-bom.ttl b/source/libs/lilv/serd-0.18.2/tests/test-bom.ttl new file mode 100644 index 000000000..8d6534e1a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-bom.ttl @@ -0,0 +1,3 @@ +# This file starts with a UTF-8 Byte Order Mark + + a . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-cr.out b/source/libs/lilv/serd-0.18.2/tests/test-cr.out new file mode 100644 index 000000000..aea1655bc --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-cr.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-cr.ttl b/source/libs/lilv/serd-0.18.2/tests/test-cr.ttl new file mode 100644 index 000000000..5410648ae --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-cr.ttl @@ -0,0 +1,2 @@ +#Test a . + diff --git a/source/libs/lilv/serd-0.18.2/tests/test-delete.out b/source/libs/lilv/serd-0.18.2/tests/test-delete.out new file mode 100644 index 000000000..41ac8062f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-delete.out @@ -0,0 +1,2 @@ + "\u007F" . + "\u007F" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-delete.ttl b/source/libs/lilv/serd-0.18.2/tests/test-delete.ttl new file mode 100644 index 000000000..4bc97060e --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-delete.ttl @@ -0,0 +1,2 @@ + "\u007F" . + "" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.out b/source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.out new file mode 100644 index 000000000..66eab7dbd --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.ttl b/source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.ttl new file mode 100644 index 000000000..6ca8ade87 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-digit-start-pname.ttl @@ -0,0 +1,3 @@ +@prefix eg: . + +eg:1thing a eg:Thing . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.out b/source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.out new file mode 100644 index 000000000..64d245860 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.out @@ -0,0 +1 @@ + "\n0123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.ttl b/source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.ttl new file mode 100644 index 000000000..d6d9af260 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-eof-at-page-end.ttl @@ -0,0 +1,85 @@ + """ +0123456789012345678901234567890123456789 + +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 + +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 + +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 + +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567""" . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-escapes.out b/source/libs/lilv/serd-0.18.2/tests/test-escapes.out new file mode 100644 index 000000000..725b832c0 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-escapes.out @@ -0,0 +1,2 @@ + "\\\r\n\t" . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-escapes.ttl b/source/libs/lilv/serd-0.18.2/tests/test-escapes.ttl new file mode 100644 index 000000000..ff306b154 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-escapes.ttl @@ -0,0 +1,2 @@ + "\\\r\n\t" . + > . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-id.out b/source/libs/lilv/serd-0.18.2/tests/test-id.out new file mode 100644 index 000000000..722fc6d1f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-id.out @@ -0,0 +1,2 @@ + _:genid1 . +_:docid1 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-id.ttl b/source/libs/lilv/serd-0.18.2/tests/test-id.ttl new file mode 100644 index 000000000..6bc1c37d9 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-id.ttl @@ -0,0 +1,4 @@ +@prefix : . + +:c :d [] . +_:genid1 :a :b . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-lang.out b/source/libs/lilv/serd-0.18.2/tests/test-lang.out new file mode 100644 index 000000000..61daecb3a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-lang.out @@ -0,0 +1,5 @@ + "Hello"@en . + "Howdy"@en-us . + "Bonjour"@fr . + "Guten Tag"@de-latn-de . + "HEY MAN"@en-crazy0place . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-lang.ttl b/source/libs/lilv/serd-0.18.2/tests/test-lang.ttl new file mode 100644 index 000000000..b06164752 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-lang.ttl @@ -0,0 +1,7 @@ +@prefix : . + +:thing :greeting "Hello"@en ; + :greeting "Howdy"@en-us ; + :greeting "Bonjour"@fr ; + :greeting "Guten Tag"@de-latn-de ; + :greeting "HEY MAN"@en-crazy0place . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.out b/source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.out new file mode 100644 index 000000000..76023a8ba --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.out @@ -0,0 +1,6 @@ + _:genid1 . +_:genid1 _:genid2 . +_:genid2 "apple" . +_:genid2 _:genid3 . +_:genid3 "banana" . +_:genid3 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.ttl b/source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.ttl new file mode 100644 index 000000000..bdf75fce1 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-list-in-blank.ttl @@ -0,0 +1,2 @@ +@prefix : . +:a :b [ :c ( "apple" "banana" ) ] . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-list-subject.out b/source/libs/lilv/serd-0.18.2/tests/test-list-subject.out new file mode 100644 index 000000000..9a853774b --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-list-subject.out @@ -0,0 +1,6 @@ + . +_:genid1 "apple" . +_:genid1 _:genid2 . +_:genid2 "banana" . +_:genid2 . +_:genid1 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-list-subject.ttl b/source/libs/lilv/serd-0.18.2/tests/test-list-subject.ttl new file mode 100644 index 000000000..5cd81dfbf --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-list-subject.ttl @@ -0,0 +1,2 @@ +() a . +("apple" "banana") a . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-list.out b/source/libs/lilv/serd-0.18.2/tests/test-list.out new file mode 100644 index 000000000..3a27a5a61 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-list.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-list.ttl b/source/libs/lilv/serd-0.18.2/tests/test-list.ttl new file mode 100644 index 000000000..7f4c7699c --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-list.ttl @@ -0,0 +1 @@ +() a . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-long-string.out b/source/libs/lilv/serd-0.18.2/tests/test-long-string.out new file mode 100644 index 000000000..ba6be49c2 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-long-string.out @@ -0,0 +1 @@ + "This is a\nlong string\nwith\n tabs\nand spaces." . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-long-string.ttl b/source/libs/lilv/serd-0.18.2/tests/test-long-string.ttl new file mode 100644 index 000000000..7da44b4b8 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-long-string.ttl @@ -0,0 +1,7 @@ +@prefix : . + +:thing :greeting """This is a +long string +with + tabs +and spaces.""" . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-no-spaces.out b/source/libs/lilv/serd-0.18.2/tests/test-no-spaces.out new file mode 100644 index 000000000..3619a5f0c --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-no-spaces.out @@ -0,0 +1,4 @@ + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-no-spaces.ttl b/source/libs/lilv/serd-0.18.2/tests/test-no-spaces.ttl new file mode 100644 index 000000000..88171e717 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-no-spaces.ttl @@ -0,0 +1,3 @@ +@prefix eg: . +eg:s eg:p eg:o;eg:p2 eg:o2,eg:o3 . +eg:s a . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-num.out b/source/libs/lilv/serd-0.18.2/tests/test-num.out new file mode 100644 index 000000000..54263d46f --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-num.out @@ -0,0 +1,10 @@ + "0.1"^^ . + "+0.2"^^ . + "-0.3"^^ . + ".4"^^ . + "+.5"^^ . + "-.6"^^ . + "1.58490e-05"^^ . + "1.58490e+05"^^ . + "1.58490e05"^^ . + "1.58490E05"^^ . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-num.ttl b/source/libs/lilv/serd-0.18.2/tests/test-num.ttl new file mode 100644 index 000000000..68ad290b7 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-num.ttl @@ -0,0 +1,12 @@ +@prefix eg: . + +eg:thing eg:num 0.1 . +eg:thing eg:num +0.2 . +eg:thing eg:num -0.3 . +eg:thing eg:num .4 . +eg:thing eg:num +.5 . +eg:thing eg:num -.6 . +eg:thing eg:num 1.58490e-05 . +eg:thing eg:num 1.58490e+05 . +eg:thing eg:num 1.58490e05 . +eg:thing eg:num 1.58490E05 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.out b/source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.out new file mode 100644 index 000000000..5def9e31e --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.out @@ -0,0 +1 @@ + "\uFFFD" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.ttl b/source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.ttl new file mode 100644 index 000000000..7e64785a5 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-out-of-range-unicode.ttl @@ -0,0 +1 @@ + "\U00110000" . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-prefix.out b/source/libs/lilv/serd-0.18.2/tests/test-prefix.out new file mode 100644 index 000000000..bcfdd4b67 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-prefix.out @@ -0,0 +1,6 @@ + . + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-prefix.ttl b/source/libs/lilv/serd-0.18.2/tests/test-prefix.ttl new file mode 100644 index 000000000..f79896cbc --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-prefix.ttl @@ -0,0 +1,8 @@ +@prefix eg: . + + a . + a . + a . + a . + a . + a . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-pretty.out b/source/libs/lilv/serd-0.18.2/tests/test-pretty.out new file mode 100644 index 000000000..c61f7c22a --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-pretty.out @@ -0,0 +1,46 @@ + . +_:genid1 . + . +_:genid2 _:genid3 . +_:genid4 "apple" . +_:genid4 _:genid5 . +_:genid5 "banana" . +_:genid5 _:genid6 . +_:genid6 "pear" . +_:genid6 . +_:genid4 . +_:genid7 _:genid8 . +_:genid8 . +_:genid8 _:genid9 . +_:genid9 . +_:genid9 . +_:genid7 _:genid10 . +_:genid10 _:genid11 . +_:genid11 . +_:genid11 _:genid12 . +_:genid12 . +_:genid12 . +_:genid10 . +_:genid7 . +_:genid13 _:genid14 . +_:genid14 "apple" . +_:genid14 _:genid15 . +_:genid15 "banana" . +_:genid15 _:genid16 . +_:genid16 "pear" . +_:genid16 . +_:genid17 . +_:genid17 . +_:genid17 . +_:genid18 _:genid19 . +_:genid19 . +_:genid19 . +_:genid18 _:genid20 . +_:genid20 . +_:genid21 _:genid22 . +_:genid22 _:genid23 . +_:genid23 . +_:genid22 _:genid24 . +_:genid24 _:genid25 . +_:genid25 . +_:genid24 . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-pretty.ttl b/source/libs/lilv/serd-0.18.2/tests/test-pretty.ttl new file mode 100644 index 000000000..4eb7204ff --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-pretty.ttl @@ -0,0 +1,44 @@ +@prefix : . + +() :isA :List . + +[] :isA :Blank . + +() :sameAs () . + +[] :sameAs [] . + +( + "apple" + "banana" + "pear" +) a :List . + +( + (:a :b) + (:c :d) +) a :List . + +[] + :list ( + "apple" + "banana" + "pear" + ) . + +[] + :a :b , :c , :d . + +[] + :a [ + :b :c ; + :d :e ; + ] , [ + :f :g + ] . + +[] + :list ( + [ a :Apple ] + [ a :Banana ] + ) . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-rel.out b/source/libs/lilv/serd-0.18.2/tests/test-rel.out new file mode 100644 index 000000000..01c18c2f9 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-rel.out @@ -0,0 +1,6 @@ + . + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-rel.ttl b/source/libs/lilv/serd-0.18.2/tests/test-rel.ttl new file mode 100644 index 000000000..a5927cd34 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-rel.ttl @@ -0,0 +1,6 @@ + a . + a . + a . + a . + a . + a . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-semi-dot.out b/source/libs/lilv/serd-0.18.2/tests/test-semi-dot.out new file mode 100644 index 000000000..aea1655bc --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-semi-dot.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-semi-dot.ttl b/source/libs/lilv/serd-0.18.2/tests/test-semi-dot.ttl new file mode 100644 index 000000000..6d4b41461 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-semi-dot.ttl @@ -0,0 +1 @@ + a ; . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/tests/test-uri.out b/source/libs/lilv/serd-0.18.2/tests/test-uri.out new file mode 100644 index 000000000..6c56f5946 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-uri.out @@ -0,0 +1,45 @@ + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-uri.ttl b/source/libs/lilv/serd-0.18.2/tests/test-uri.ttl new file mode 100644 index 000000000..cf43a38ba --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-uri.ttl @@ -0,0 +1,68 @@ +# http://tools.ietf.org/html/rfc3986#section-5.4 + +@base . + +@prefix owl: . + +# 5.4.1. Normal Examples + owl:sameAs . + owl:sameAs . +<./g> owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . +<#s> owl:sameAs . + owl:sameAs . + owl:sameAs . +<;x> owl:sameAs . + owl:sameAs . + owl:sameAs . +<> owl:sameAs . +<.> owl:sameAs . +<./> owl:sameAs . +<..> owl:sameAs . +<../> owl:sameAs . +<../g> owl:sameAs . +<../..> owl:sameAs . +<../../> owl:sameAs . +<../../g> owl:sameAs . + +# 5.4.2. Abnormal Examples +<../../../g> owl:sameAs . +<../../../../g> owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . +<.g> owl:sameAs . + owl:sameAs . +<..g> owl:sameAs . +<./../g> owl:sameAs . +# Serd only resolves the leading components +#<./g/.> owl:sameAs . +# owl:sameAs . +# owl:sameAs . +# owl:sameAs . +# owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . + +# Additional tests for Serd + owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . + owl:sameAs . +<#afragment> owl:sameAs . +<../../../../../../> owl:sameAs . + +@base . + + owl:sameAs . + +@base . + + owl:sameAs . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.out b/source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.out new file mode 100644 index 000000000..b8a73a88c --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.ttl b/source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.ttl new file mode 100644 index 000000000..51f26ff20 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/tests/test-utf8-uri.ttl @@ -0,0 +1 @@ + a . \ No newline at end of file diff --git a/source/libs/lilv/serd-0.18.2/waf b/source/libs/lilv/serd-0.18.2/waf new file mode 100755 index 0000000000000000000000000000000000000000..3945ced05b8521d8f66546c57befa117c1c34b7c GIT binary patch literal 80004 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 z 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 U?ntL2F%krUt$08RBRoAl3YY^R1^@s6 literal 0 HcmV?d00001 diff --git a/source/libs/lilv/serd-0.18.2/wscript b/source/libs/lilv/serd-0.18.2/wscript new file mode 100644 index 000000000..bb7fb0df6 --- /dev/null +++ b/source/libs/lilv/serd-0.18.2/wscript @@ -0,0 +1,391 @@ +#!/usr/bin/env python +import glob +import os +import shutil +import subprocess +import waflib.Logs as Logs +import waflib.Options as Options +import waflib.extras.autowaf as autowaf + +# Library and package version (UNIX style major, minor, micro) +# major increment <=> incompatible changes +# minor increment <=> compatible changes (additions) +# micro increment <=> no interface changes +SERD_VERSION = '0.18.2' +SERD_MAJOR_VERSION = '0' + +# Mandatory waf variables +APPNAME = 'serd' # Package name for waf dist +VERSION = SERD_VERSION # Package version for waf dist +top = '.' # Source directory +out = 'build' # Build directory + +def options(opt): + opt.load('compiler_c') + autowaf.set_options(opt) + opt.add_option('--no-utils', action='store_true', dest='no_utils', + help='Do not build command line utilities') + opt.add_option('--test', action='store_true', dest='build_tests', + help='Build unit tests') + opt.add_option('--stack-check', action='store_true', dest='stack_check', + help='Include runtime stack sanity checks') + opt.add_option('--static', action='store_true', dest='static', + help='Build static library') + opt.add_option('--no-shared', action='store_true', dest='no_shared', + help='Do not build shared library') + opt.add_option('--static-progs', action='store_true', dest='static_progs', + help='Build programs as static binaries') + opt.add_option('--largefile', action='store_true', dest='largefile', + help='Build with large file support on 32-bit systems') + +def configure(conf): + conf.load('compiler_c') + autowaf.configure(conf) + autowaf.set_c99_mode(conf) + autowaf.display_header('Serd Configuration') + + conf.env.BUILD_TESTS = Options.options.build_tests + conf.env.BUILD_UTILS = not Options.options.no_utils + conf.env.BUILD_SHARED = not Options.options.no_shared + conf.env.STATIC_PROGS = Options.options.static_progs + conf.env.BUILD_STATIC = (Options.options.static or + Options.options.static_progs) + + if not conf.env.BUILD_SHARED and not conf.env.BUILD_STATIC: + conf.fatal('Neither a shared nor a static build requested') + + if Options.options.stack_check: + autowaf.define(conf, 'SERD_STACK_CHECK', SERD_VERSION) + + if Options.options.largefile: + conf.env.append_unique('DEFINES', ['_FILE_OFFSET_BITS=64']) + + if conf.env.BUILD_TESTS: + conf.check(lib = 'gcov', + define_name = 'HAVE_GCOV', + mandatory = False) + + conf.check(function_name = 'fmax', + header_name = 'math.h', + define_name = 'HAVE_FMAX', + lib = ['m'], + mandatory = False) + + conf.check(function_name = 'posix_memalign', + header_name = 'stdlib.h', + define_name = 'HAVE_POSIX_MEMALIGN', + defines = ['_POSIX_C_SOURCE=201112L'], + mandatory = False) + + conf.check(function_name = 'posix_fadvise', + header_name = 'fcntl.h', + define_name = 'HAVE_POSIX_FADVISE', + defines = ['_POSIX_C_SOURCE=201112L'], + mandatory = False) + + conf.check(function_name = 'fileno', + header_name = 'stdio.h', + define_name = 'HAVE_FILENO', + defines = ['_POSIX_C_SOURCE=201112L'], + mandatory = False) + + autowaf.define(conf, 'SERD_VERSION', SERD_VERSION) + autowaf.set_lib_env(conf, 'serd', SERD_VERSION) + conf.write_config_header('serd_config.h', remove=False) + + autowaf.display_msg(conf, 'Utilities', str(conf.env.BUILD_UTILS)) + autowaf.display_msg(conf, 'Unit tests', str(conf.env.BUILD_TESTS)) + print('') + +lib_source = [ + 'src/env.c', + 'src/node.c', + 'src/reader.c', + 'src/string.c', + 'src/uri.c', + 'src/writer.c', +] + +def build(bld): + # C Headers + includedir = '${INCLUDEDIR}/serd-%s/serd' % SERD_MAJOR_VERSION + bld.install_files(includedir, bld.path.ant_glob('serd/*.h')) + + # Pkgconfig file + autowaf.build_pc(bld, 'SERD', SERD_VERSION, SERD_MAJOR_VERSION, [], + {'SERD_MAJOR_VERSION' : SERD_MAJOR_VERSION}) + + libflags = ['-fvisibility=hidden'] + libs = ['m'] + defines = [] + if bld.env.MSVC_COMPILER: + libflags = [] + libs = [] + defines = ['snprintf=_snprintf'] + + # Shared Library + if bld.env.BUILD_SHARED: + bld(features = 'c cshlib', + export_includes = ['.'], + source = lib_source, + includes = ['.', './src'], + lib = libs, + name = 'libserd', + target = 'serd-%s' % SERD_MAJOR_VERSION, + vnum = SERD_VERSION, + install_path = '${LIBDIR}', + defines = defines + ['SERD_SHARED', 'SERD_INTERNAL'], + cflags = libflags) + + # Static library + if bld.env.BUILD_STATIC: + bld(features = 'c cstlib', + export_includes = ['.'], + source = lib_source, + includes = ['.', './src'], + lib = libs, + name = 'libserd_static', + target = 'serd-%s' % SERD_MAJOR_VERSION, + vnum = SERD_VERSION, + install_path = '${LIBDIR}', + defines = defines + ['SERD_INTERNAL']) + + if bld.env.BUILD_TESTS: + test_libs = libs + test_cflags = [''] + if bld.is_defined('HAVE_GCOV'): + test_libs += ['gcov'] + test_cflags += ['-fprofile-arcs', '-ftest-coverage'] + + # Profiled static library for test coverage + bld(features = 'c cstlib', + source = lib_source, + includes = ['.', './src'], + lib = test_libs, + name = 'libserd_profiled', + target = 'serd_profiled', + install_path = '', + defines = defines + ['SERD_INTERNAL'], + cflags = test_cflags) + + # Static profiled serdi for tests + bld(features = 'c cprogram', + source = 'src/serdi.c', + includes = ['.', './src'], + use = 'libserd_profiled', + lib = test_libs, + target = 'serdi_static', + install_path = '', + defines = defines, + cflags = test_cflags) + + # Unit test program + bld(features = 'c cprogram', + source = 'tests/serd_test.c', + includes = ['.', './src'], + use = 'libserd_profiled', + lib = test_libs, + target = 'serd_test', + install_path = '', + defines = defines, + cflags = test_cflags) + + # Utilities + if bld.env.BUILD_UTILS: + obj = bld(features = 'c cprogram', + source = 'src/serdi.c', + target = 'serdi', + includes = ['.', './src'], + use = 'libserd', + lib = libs, + install_path = '${BINDIR}') + if not bld.env.BUILD_SHARED or bld.env.STATIC_PROGS: + obj.use = 'libserd_static' + if bld.env.STATIC_PROGS: + obj.env.SHLIB_MARKER = obj.env.STLIB_MARKER + obj.linkflags = ['-static'] + + # Documentation + autowaf.build_dox(bld, 'SERD', SERD_VERSION, top, out) + + # Man page + bld.install_files('${MANDIR}/man1', 'doc/serdi.1') + + bld.add_post_fun(autowaf.run_ldconfig) + if bld.env.DOCS: + bld.add_post_fun(fix_docs) + +def lint(ctx): + subprocess.call('cpplint.py --filter=+whitespace/comments,-whitespace/tab,-whitespace/braces,-whitespace/labels,-build/header_guard,-readability/casting,-readability/todo,-build/include src/* serd/*', shell=True) + +def amalgamate(ctx): + shutil.copy('serd/serd.h', 'build/serd.h') + amalgamation = open('build/serd.c', 'w') + + serd_internal_h = open('src/serd_internal.h') + for l in serd_internal_h: + if l == '#include "serd/serd.h"\n': + amalgamation.write('#include "serd.h"\n') + else: + amalgamation.write(l) + serd_internal_h.close() + + for f in lib_source: + fd = open(f) + amalgamation.write('\n/**\n @file %s\n*/' % f) + header = True + for l in fd: + if header: + if l == '*/\n': + header = False + else: + if l != '#include "serd_internal.h"\n': + amalgamation.write(l) + fd.close() + amalgamation.close() + + for i in ['c', 'h']: + Logs.info('Wrote build/serd.%s' % i) + +def fix_docs(ctx): + if ctx.cmd == 'build': + autowaf.make_simple_dox(APPNAME) + +def upload_docs(ctx): + os.system('rsync -ravz --delete -e ssh build/doc/html/ drobilla@drobilla.net:~/drobilla.net/docs/serd/') + +def file_equals(patha, pathb, subst_from='', subst_to=''): + fa = open(patha, 'rU') + fb = open(pathb, 'rU') + for line in fa: + if line.replace(subst_from, subst_to) != fb.readline().replace(subst_from, subst_to): + return False + fa.close() + fb.close() + return True + +def test(ctx): + blddir = autowaf.build_dir(APPNAME, 'tests') + try: + os.makedirs(blddir) + except: + pass + + for i in glob.glob(blddir + '/*.*'): + os.remove(i) + + srcdir = ctx.path.abspath() + orig_dir = os.path.abspath(os.curdir) + + os.chdir(srcdir) + + good_tests = glob.glob('tests/test-*.ttl') + good_tests.sort() + + bad_tests = glob.glob('tests/bad-*.ttl') + bad_tests.sort() + + os.chdir(orig_dir) + + autowaf.pre_test(ctx, APPNAME) + + os.environ['PATH'] = '.' + os.pathsep + os.getenv('PATH') + + autowaf.run_tests(ctx, APPNAME, ['serd_test'], dirs=['.']) + + autowaf.run_tests(ctx, APPNAME, [ + 'serdi_static -o turtle %s/tests/base.ttl "base.ttl" > tests/base.ttl.out' % srcdir], + 0, name='base') + + if not file_equals('%s/tests/base.ttl' % srcdir, 'tests/base.ttl.out'): + Logs.pprint('RED', 'FAIL: build/tests/base.ttl.out is incorrect') + + nul = os.devnull + autowaf.run_tests(ctx, APPNAME, [ + 'serdi_static file://%s/tests/manifest.ttl > %s' % (srcdir, nul), + 'serdi_static %s/tests/UTF-8.ttl > %s' % (srcdir, nul), + 'serdi_static -v > %s' % nul, + 'serdi_static -h > %s' % nul, + 'serdi_static -s " a <#Thingie> ." > %s' % nul, + 'serdi_static %s > %s' % (nul, nul)], + 0, name='serdi-cmd-good') + + autowaf.run_tests(ctx, APPNAME, [ + 'serdi_static -q file://%s/tests/bad-id-clash.ttl > %s' % (srcdir, nul), + 'serdi_static > %s' % nul, + 'serdi_static ftp://example.org/unsupported.ttl > %s' % nul, + 'serdi_static -i > %s' % nul, + 'serdi_static -o > %s' % nul, + 'serdi_static -z > %s' % nul, + 'serdi_static -p > %s' % nul, + 'serdi_static -c > %s' % nul, + 'serdi_static -r > %s' % nul, + 'serdi_static -i illegal > %s' % nul, + 'serdi_static -o illegal > %s' % nul, + 'serdi_static -i turtle > %s' % nul, + 'serdi_static /no/such/file > %s' % nul], + 1, name='serdi-cmd-bad') + + commands = [] + for test in good_tests: + base_uri = 'http://www.w3.org/2001/sw/DataAccess/df1/' + test.replace('\\', '/') + commands += [ 'serdi_static -f "%s" "%s" > %s.out' % ( + os.path.join(srcdir, test), base_uri, test) ] + + autowaf.run_tests(ctx, APPNAME, commands, 0, name='good') + + Logs.pprint('BOLD', '\nVerifying turtle => ntriples') + for test in good_tests: + out_filename = test + '.out' + if not os.access(out_filename, os.F_OK): + Logs.pprint('RED', 'FAIL: %s output is missing' % test) + elif not file_equals(srcdir + '/' + test.replace('.ttl', '.out'), + test + '.out'): + Logs.pprint('RED', 'FAIL: %s is incorrect' % out_filename) + else: + Logs.pprint('GREEN', 'Pass: %s' % test) + + commands = [] + for test in bad_tests: + commands += [ 'serdi_static "%s" "http://www.w3.org/2001/sw/DataAccess/df1/%s" > %s.out' % (os.path.join(srcdir, test), test.replace('\\', '/'), test) ] + + autowaf.run_tests(ctx, APPNAME, commands, 1, name='bad') + + thru_tests = good_tests + thru_tests.remove(os.path.join('tests', 'test-id.ttl')) # IDs are mapped so files won't be identical + + commands = [] + num = 0 + for test in thru_tests: + num += 1 + flags = '' + if (num % 2 == 0): + flags += '-b' + if (num % 5 == 0): + flags += ' -f' + if (num % 3 == 0): + flags += ' -r http://www.w3.org/' + if (num % 7 == 0): + flags += ' -e' + base_uri = 'http://www.w3.org/2001/sw/DataAccess/df1/' + test.replace('\\', '/') + out_filename = test + '.thru' + commands += [ + '%s %s -i ntriples -o turtle -p foo "%s" "%s" | %s -i turtle -o ntriples -c foo - "%s" > %s.thru' % ( + 'serdi_static', flags.ljust(5), + os.path.join(srcdir, test), base_uri, + 'serdi_static', base_uri, test) ] + + autowaf.run_tests(ctx, APPNAME, commands, 0, name='turtle-round-trip') + Logs.pprint('BOLD', '\nVerifying ntriples => turtle => ntriples') + for test in thru_tests: + out_filename = test + '.thru' + if not os.access(out_filename, os.F_OK): + Logs.pprint('RED', 'FAIL: %s output is missing' % test) + elif not file_equals(srcdir + '/' + test.replace('.ttl', '.out'), + test + '.thru', + '_:docid', '_:genid'): + Logs.pprint('RED', 'FAIL: %s is incorrect' % out_filename) + else: + Logs.pprint('GREEN', 'Pass: %s' % test) + + autowaf.post_test(ctx, APPNAME) diff --git a/source/libs/lilv/serd.c b/source/libs/lilv/serd.c new file mode 100644 index 000000000..eb8888f3d --- /dev/null +++ b/source/libs/lilv/serd.c @@ -0,0 +1,23 @@ +/* + * Carla static lilv code + * Copyright (C) 2012 Filipe Coelho + * + * 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 + * 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. + * + * For a full copy of the GNU General Public License see the COPYING file + */ + +#include "src/env.c" +#include "src/node.c" +#include "src/reader.c" +#include "src/string.c" +#include "src/uri.c" +#include "src/writer.c" diff --git a/source/libs/lilv/sord-0.10.4/AUTHORS b/source/libs/lilv/sord-0.10.4/AUTHORS new file mode 100644 index 000000000..134f007aa --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/AUTHORS @@ -0,0 +1 @@ +David Robillard diff --git a/source/libs/lilv/sord-0.10.4/COPYING b/source/libs/lilv/sord-0.10.4/COPYING new file mode 100644 index 000000000..a739216fd --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/COPYING @@ -0,0 +1,13 @@ +Copyright 2011 David Robillard + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/source/libs/lilv/sord-0.10.4/INSTALL b/source/libs/lilv/sord-0.10.4/INSTALL new file mode 100644 index 000000000..623cddde4 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/INSTALL @@ -0,0 +1,59 @@ +Installation Instructions +========================= + +Basic Installation +------------------ + +Building this software requires only Python. To install with default options: + + ./waf configure + ./waf + ./waf install + +You may need to become root for the install stage, for example: + + sudo ./waf install + +Configuration Options +--------------------- + +All supported options can be viewed using the command: + + ./waf --help + +Most options only need to be passed during the configure stage, for example: + + ./waf configure --prefix=/usr + ./waf + ./waf install + +Compiler Configuration +---------------------- + +Several standard environment variables can be used to control how compilers are +invoked: + + * CC: Path to C compiler + * CFLAGS: C compiler options + * CXX: Path to C++ compiler + * CXXFLAGS: C++ compiler options + * CPPFLAGS: C preprocessor options + * LINKFLAGS: Linker options + +Installation Directories +------------------------ + +The --prefix option (or the PREFIX environment variable) can be used to change +the prefix which all files are installed under. There are also several options +allowing for more fine-tuned control, see the --help output for details. + +Packaging +--------- + +Everything can be installed to a specific root directory by passing a --destdir +option to the install stage (or setting the DESTDIR environment variable), +which adds a prefix to all install paths. For example: + + ./waf configure --prefix=/usr + ./waf + ./waf install --destdir=/tmp/package diff --git a/source/libs/lilv/sord-0.10.4/NEWS b/source/libs/lilv/sord-0.10.4/NEWS new file mode 100644 index 000000000..f3635abfa --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/NEWS @@ -0,0 +1,68 @@ +sord (0.10.4) stable; + + * Implement better data type validation in sord_validate conformant with + the XSD and OWL specifications + * Fix memory leaks in sord_validate + * Install sord_validate man page + * Disable timestamps in HTML documentation for reproducible build + + -- David Robillard Sun, 14 Oct 2012 18:23:55 -0400 + +sord (0.10.0) stable; + + * Add error callback to world for custom error reporting + * Performance and space (per node) improvements + * SSE4.2 accelerated hashing for node interning, where available + * Make all 'zix' symbols private to avoid symbol clashes in static builds + * Remove problematic "Loaded n statements" output from serdi + * Strip down API documentation to a single clean page + * Fix various hyper-strict warnings + * Do not require a C++ compiler to build + * Add option to build utilities as static binaries + * Upgrade to waf 1.7.2 + * sordmm.hpp: Add indices and graphs parameters to Model constructor + * sordmm.hpp: Remove overzealous URI scheme assertion + * sordmm.hpp: Correctly handle Sord::Node self-assignment + + -- David Robillard Thu, 23 Aug 2012 00:19:51 -0400 + +sord (0.8.0) stable; + + * Use path variables in pkgconfig files + * Install man page to DATADIR (e.g. PREFIX/share/man, not PREFIX/man) + * Tolerate serd passing NULL nodes to reader callback (serd 0.6.0) + * Fix comparison of typed literals + * Take advantage of interning in sord_node_equals() + * Support compilation as C++ under MSVC++. + * Add sord_iter_get_node() + * Refuse to intern relative URIs in sord_new_uri*() + * Add sord_new_relative_uri() + * Add SordInserter for writing to a model via Serd sink functions. + * Add convenient sord_search(), sord_ask(), and sord_count() + * Add sord_validate tool for validating data against RDF/OWL schemas + + -- David Robillard Tue, 17 Apr 2012 18:24:53 -0400 + +sord (0.5.0) stable; + + * Remove glib dependency + * Add function sord_contains for checking for a triple pattern + * Add function sord_write_iter for writing a queried range + * Fix Sord::Namespaces::qualify to no longer chop prefixes + * Add ability to build static library + + -- David Robillard Thu, 29 Sep 2011 00:00:00 -0400 + +sord (0.4.2) stable; + + * Fix compilation issues on some systems + * Fix build system Python 3 compatibility + * Bump Serd dependency to 0.4.0 + + -- David Robillard Wed, 25 May 2011 19:00:00 -0400 + +sord (0.4.0) stable; + + * Initial release + + -- David Robillard Tue, 24 May 2011 23:00:00 -0400 diff --git a/source/libs/lilv/sord-0.10.4/PACKAGING b/source/libs/lilv/sord-0.10.4/PACKAGING new file mode 100644 index 000000000..3eced1698 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/PACKAGING @@ -0,0 +1,29 @@ +This library is designed to allow parallel installation of different major +versions. To facilitate this, the shared library name, include directory, and +pkg-config file are suffixed with the major version number of the library. + +For example, if this library was named "foo" and at version 1.x.y: + +/usr/include/foo-1/foo/foo.h +/usr/lib/foo-1.so.1.x.y +/usr/lib/pkgconfig/foo-1.pc + +Dependencies check for pkg-config name "foo-1" and will build +against a compatible version 1, regardless any other installed versions. + +*** IMPORTANT GUIDELINES FOR PACKAGERS *** + +Packages should follow the same conventions as above, i.e. include the major +version (and only the major version) in the name of the package. Continuing the +example above, the package(s) would be named foo-1 and foo-1-dev. This way, +if/when version 2 comes out, it may be installed at the same time as version 1 +without breaking anything. + +Please do not create packages of this library that do not follow these +guidelines, you will break things and cause unnecessary headaches. Please do +not use any number as a suffix other than the actual major version number of the +upstream source package. + +Because program and documentation names are not versioned, these should be +included in separate packages which may replace previous versions, since +there is little use in having parallel installations of them. \ No newline at end of file diff --git a/source/libs/lilv/sord-0.10.4/README b/source/libs/lilv/sord-0.10.4/README new file mode 100644 index 000000000..93a678a43 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/README @@ -0,0 +1,9 @@ +Sord +---- + +Sord is a lightweight C library for storing RDF statements in memory. + +For more information, see . + + -- David Robillard + diff --git a/source/libs/lilv/sord-0.10.4/doc/layout.xml b/source/libs/lilv/sord-0.10.4/doc/layout.xml new file mode 100644 index 000000000..74a109fc3 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/doc/layout.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/libs/lilv/sord-0.10.4/doc/reference.doxygen.in b/source/libs/lilv/sord-0.10.4/doc/reference.doxygen.in new file mode 100644 index 000000000..b679c1c9f --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/doc/reference.doxygen.in @@ -0,0 +1,1792 @@ +# Doxyfile 1.8.1.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = Sord + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @SORD_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = @SORD_DOC_DIR@ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = NO + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = YES + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = YES + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = NO + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = NO + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = @SORD_SRCDIR@/doc/layout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @SORD_SRCDIR@/sord/sord.h + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = *.c + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = @SORD_SRCDIR@/doc/style.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 160 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = NO + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = NO + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/source/libs/lilv/sord-0.10.4/doc/sord_validate.1 b/source/libs/lilv/sord-0.10.4/doc/sord_validate.1 new file mode 100644 index 000000000..9b8668aef --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/doc/sord_validate.1 @@ -0,0 +1,57 @@ +.TH SORD_VALIDATE 1 "21 Mar 2012" + +.SH NAME +.B sord_validate \- Validate RDF data + +.SH SYNOPSIS +sord_validate [OPTION]... INPUT... + +.SH OPTIONS +.TP +\fB\-h\fR +Print the command line options. + +.TP +\fB\-l\fR +Print errors on a single line. + +.TP +\fB\-v\fR +Display version information and exit. + +.SH DESCRIPTION +This is a simple validator which checks that all used properties are actually +defined, and that the domain and range of properties is explicitly correct. +Note that an "error" from this program does not necessarily mean data is +invalid, since it is not required to explicitly list types in RDF, however it +is a good idea to do so. + +This program never retrieves data from the web or magical places on the file +system, it only processes files passed directly on the command line. This +means you must pass all used vocabularies to get a useful result. + +If an appropriate schema is available, literals are checked against datatype +definitions (both the explicit datatype of the literal itself as well as any +types implied by the corresponding property). Three XML Schema Datatypes (XSD) +constraints are currently supported: regular expressions (xsd:pattern), and +inclusive range (xsd:minimumInclusive and xsd:maximumInclusive). Given an +appropriate schema, this is enough to validate against most of the standard XSD +datatypes. + +.SH EXAMPLES +sord_validate `find ~/schemas/ -name '*.ttl'` data.ttl + +.SH AUTHOR +sord_validate was written by David Robillard + +.SH COPYRIGHT +Copyright \(co 2012 David Robillard. +.br +License: +.br +This is free software; you are free to change and redistribute it. +.br +There is NO WARRANTY, to the extent permitted by law. + +.SH "SEE ALSO" + diff --git a/source/libs/lilv/sord-0.10.4/doc/sordi.1 b/source/libs/lilv/sord-0.10.4/doc/sordi.1 new file mode 100644 index 000000000..6c5375574 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/doc/sordi.1 @@ -0,0 +1,43 @@ +.TH SORDI 1 "17 Jan 2012" + +.SH NAME +.B sordi \- Load and re-serialise RDF data + +.SH SYNOPSIS +sordi [OPTION]... INPUT BASE_URI + +.SH OPTIONS +.TP +\fB\-h\fR +Print the command line options. + +.TP +\fB\-i SYNTAX\fR +Read input in SYNTAX (`turtle' or `ntriples'). + +.TP +\fB\-o SYNTAX\fR +Write output in SYNTAX (`turtle' or `ntriples'). + +.TP +\fB\-s INPUT\fR +Parse INPUT as a string (terminates options). + +.TP +\fB\-v\fR +Display version information and exit. + +.SH AUTHOR +Sordi was written by David Robillard + +.SH COPYRIGHT +Copyright \(co 2011 David Robillard. +.br +License: +.br +This is free software; you are free to change and redistribute it. +.br +There is NO WARRANTY, to the extent permitted by law. + +.SH "SEE ALSO" + diff --git a/source/libs/lilv/sord-0.10.4/doc/style.css b/source/libs/lilv/sord-0.10.4/doc/style.css new file mode 100644 index 000000000..4c62b46a8 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/doc/style.css @@ -0,0 +1,563 @@ +body { + font-size: medium; + font-family: sans-serif; +} + +#top { + background-color: #F3F3F3; + margin: 0; + padding: 0; + border-bottom: 1px solid #DDD; + margin-bottom: 1ex; + font-size: xx-large; + font-weight: bold; +} + +div.header { + display: none; +} + +.tabs { + display: none; +} + +h1 h2 h3 h4 h5 h6 { + font-weight: bold; +} + +h1 { + font-size: 164%; +} + +h2 { + font-size: 132%; +} + +h3 { + font-size: 124%; +} + +h4 { + font-size: 116%; +} + +h5 { + font-size: 108%; +} + +h6 { + font-size: 100%; +} + +p { + margin: 0 0 1ex 0; +} + +br { + display: none; +} + +dt { + font-weight: 700; +} + +div.multicol { +} + +p.startli,p.startdd,p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +caption { + font-weight: 700; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex,div.navtab { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex,div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ +a { + color: #3D8C57; + text-decoration: none; +} + +.contents a:visited { + color: #50755E; +} + +a:hover { + text-decoration: underline; +} + +a.qindexHL { + background-color: #9CAFD4; + color: #FFF; + border: 1px double #869DCA; +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4C4C4; + background-color: #F9F9F9; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: #000; + font-weight: 700; + color: #FFF; + margin-bottom: 3px; + margin-top: 3px; + padding: .2em; + border: thin solid #333; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: 700; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: #FFF; + color: #000; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: 700; + border: 1px solid #C4CFE5; + margin: 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0; + margin-bottom: 0; + padding: 0; +} + +div.center img { + border: 0; +} + +address.footer { + text-align: right; + padding: 0 0.25em 0.25em 0; +} + +img.footer { + border: 0; + vertical-align: middle; +} + +/* @group Code Colorization */ +span.keyword { + color: green; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #e08000; +} + +span.comment { + color: maroon; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: teal; +} + +span.vhdldigit { + color: #F0F; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: red; +} + +/* @end */ +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: 700; +} + +hr { + height: 0; + border: none; + border-top: 1px solid #DDD; + margin: 2em 0 1em; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ +table.memberdecls { + border-spacing: 0; + font-size: small; +} + +.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,.memTemplItemLeft,.memTemplItemRight,.memTemplParams { + background-color: #FBFBFB; + margin: 0; + padding: 0.25ex; +} + +.mdescLeft,.mdescRight { + color: #555; +} + +.memItemLeft,.memItemRight,.memTemplParams { + border-top: 1px solid #DDD; +} + +.memItemLeft,.memTemplItemLeft { + white-space: nowrap; + padding-left: 2em; +} + +.memTemplParams { + color: #464646; + white-space: nowrap; +} + +/* @end */ +/* @group Member Details */ +/* Styles for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: bold; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; + margin: 1ex 0 2ex 0; + border: 1px solid #CCC; +} + +.memname { + white-space: nowrap; + font-weight: bold; +} + +.memproto { + border-bottom: 1px solid #DDD; + padding: 0.5ex; + font-weight: bold; + background-color: #F3F3F3; +} + +.memdoc { + padding: 1ex; + background-color: #FBFBFB; + border-top-width: 0; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} + +.paramname em { + font-style: normal; +} + +/* @end */ +/* @group Directory (tree) */ +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin: 0; +} + +/* these are for tree view when used as main index */ +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse: collapse; + margin: 0.5ex; +} + +table.doxtable td,table.doxtable th { + border: 1px solid #DDD; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #F3F3F3; + color: #000; + padding-bottom: 4px; + padding-top: 5px; + text-align: left; + font-weight: bold; +} + +.tabsearch { + top: 0; + left: 10px; + height: 36px; + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul { + font-size: 11px; + height: 30px; + line-height: 30px; + color: #8AA0CC; + border: 1px solid #C2CDE4; + overflow: hidden; + margin: 0; + padding: 0; +} + +.navpath li { + list-style-type: none; + float: left; + padding-left: 10px; + padding-right: 15px; + color: #364D7C; +} + +.navpath a { + height: 32px; + display: block; + text-decoration: none; + outline: none; +} + +.navpath a:hover { + color: #6884BD; +} + +div.summary { + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a { + white-space: nowrap; +} + +div.header { + background-color: #F3F3F3; + margin: 0; + border-bottom: 1px solid #DDD; +} + +div.headertitle { + padding: 5px 5px 5px 10px; + font-size: 180%; + font-weight: bold; +} diff --git a/source/libs/lilv/sord-0.10.4/sord-0.10.4.tar.bz2.sig b/source/libs/lilv/sord-0.10.4/sord-0.10.4.tar.bz2.sig new file mode 100644 index 0000000000000000000000000000000000000000..e2337480c575501d406818be32af349431bcccd4 GIT binary patch literal 543 zcmV+)0^t3L0vrSY0SEvF1p-ieJ1PJQ2@p1Ncq*IoX!A&W5B?)f#KiCZkv0hEB|I)A zWVc-T1}31Y?r#6W#ro_ovzvoIUf{3J)3}er_=F~sNt|>{;mvAz4&8UX**}k1B$w)! zxvTeMK2O|+i$G8*s2w%0(i7+MM9`&KWQzW&n-;wnWy;6BQwz;L8n6|O^kS)LeS}ZF zj5)+Z+^g&j<-=>%enN)68r)Ssm5y~ViXIF7G;|?Y06MfbMGuqSskpVyDO<=jnf1WP zX;+7?hRV{IB(TE5(XqrE8ICBGg#$U~Q_HoLS80nT>i&KH$H)I*r2k}JNOY)b3Pz-o z7wKsVS+ncRk>!F|d#NqEHHekRw)o0$dL&Euc#(!X4wDPd8H_ApB~=bwk9fYEfcDJe z?R9|VuA*_4VwR_+sudnPDU)+O&V$LcXtY=sQ?wu${p)Eq9z~h=N?&BIBvA6Ys`o6V z;^}y$(0J`|f$FMQQkJC=NYZ2&9onEV$z7KZ&yZy9K2+Qo9I964z9CH6T7D-&iC&NP zq{rIO-Yl&Mb)EBVd?t6iF1t+Ljmq}D_%sr%D;{g(Qe + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file sord.h API for Sord, a lightweight RDF model library. +*/ + +#ifndef SORD_SORD_H +#define SORD_SORD_H + +#include +#include +#include + +#include "serd/serd.h" + +#ifdef SORD_SHARED +# ifdef _WIN32 +# define SORD_LIB_IMPORT __declspec(dllimport) +# define SORD_LIB_EXPORT __declspec(dllexport) +# else +# define SORD_LIB_IMPORT __attribute__((visibility("default"))) +# define SORD_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef SORD_INTERNAL +# define SORD_API SORD_LIB_EXPORT +# else +# define SORD_API SORD_LIB_IMPORT +# endif +#else +# define SORD_API +#endif + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** + @defgroup sord Sord + A lightweight RDF model library. + + Sord stores RDF (subject object predicate context) quads, where the context + may be omitted (to represent triples in the default graph). + @{ +*/ + +/** + Sord World. + The World represents all library state, including interned strings. +*/ +typedef struct SordWorldImpl SordWorld; + +/** + Sord Model. + + A model is an indexed set of Quads (i.e. it can contain several RDF + graphs). It may be searched using various patterns depending on which + indices are enabled. +*/ +typedef struct SordModelImpl SordModel; + +/** + Model Inserter. + + An inserter is used for writing statements to a model using the Serd sink + interface. This makes it simple to write to a model directly using a + SerdReader, or any other code that writes statements to a SerdStatementSink. +*/ +typedef struct SordInserterImpl SordInserter; + +/** + Model Iterator. +*/ +typedef struct SordIterImpl SordIter; + +/** + RDF Node. + A Node is a component of a Quad. Nodes may be URIs, blank nodes, or + (in the case of quad objects only) string literals. Literal nodes may + have an associate language or datatype (but not both). +*/ +typedef struct SordNodeImpl SordNode; + +/** + Quad of nodes (a statement), or a quad pattern. + + Nodes are ordered (S P O G). The ID of the default graph is 0. +*/ +typedef const SordNode* SordQuad[4]; + +/** + Index into a SordQuad. +*/ +typedef enum { + SORD_SUBJECT = 0, /**< Subject */ + SORD_PREDICATE = 1, /**< Predicate (a.k.a. "key") */ + SORD_OBJECT = 2, /**< Object (a.k.a. "value") */ + SORD_GRAPH = 3 /**< Graph (a.k.a. "context") */ +} SordQuadIndex; + +/** + Type of a node. +*/ +typedef enum { + SORD_URI = 1, /**< URI */ + SORD_BLANK = 2, /**< Blank node identifier */ + SORD_LITERAL = 3 /**< Literal (string with optional lang or datatype) */ +} SordNodeType; + +/** + Indexing option. +*/ +typedef enum { + SORD_SPO = 1, /**< Subject, Predicate, Object */ + SORD_SOP = 1 << 1, /**< Subject, Object, Predicate */ + SORD_OPS = 1 << 2, /**< Object, Predicate, Subject */ + SORD_OSP = 1 << 3, /**< Object, Subject, Predicate */ + SORD_PSO = 1 << 4, /**< Predicate, Subject, Object */ + SORD_POS = 1 << 5 /**< Predicate, Object, Subject */ +} SordIndexOption; + +/** + @name World + @{ +*/ + +/** + Create a new Sord World. + It is safe to use multiple worlds in one process, though no data + (e.g. nodes) can be shared between worlds, and this should be avoided if + possible for performance reasons. +*/ +SORD_API +SordWorld* +sord_world_new(void); + +/** + Free @c world. +*/ +SORD_API +void +sord_world_free(SordWorld* world); + +/** + Set a function to be called when errors occur. + + The @p error_sink will be called with @p handle as its first argument. If + no error function is set, errors are printed to stderr. +*/ +SORD_API +void +sord_world_set_error_sink(SordWorld* world, + SerdErrorSink error_sink, + void* handle); + +/** + @} + @name Node + @{ +*/ + +/** + Get a URI node from a string. + + Note this function measures @c str, which is a common bottleneck. + Use sord_node_from_serd_node instead if @c str is already measured. +*/ +SORD_API +SordNode* +sord_new_uri(SordWorld* world, const uint8_t* uri); + +/** + Get a URI node from a relative URI string. +*/ +SORD_API +SordNode* +sord_new_relative_uri(SordWorld* world, + const uint8_t* str, + const uint8_t* base_uri); + +/** + Get a blank node from a string. + + Note this function measures @c str, which is a common bottleneck. + Use sord_node_from_serd_node instead if @c str is already measured. +*/ +SORD_API +SordNode* +sord_new_blank(SordWorld* world, const uint8_t* str); + +/** + Get a literal node from a string. + + Note this function measures @c str, which is a common bottleneck. + Use sord_node_from_serd_node instead if @c str is already measured. +*/ +SORD_API +SordNode* +sord_new_literal(SordWorld* world, + SordNode* datatype, + const uint8_t* str, + const char* lang); + +/** + Copy a node (obtain a reference). + + Node that since nodes are interned and reference counted, this does not + actually create a deep copy of @c node. +*/ +SORD_API +SordNode* +sord_node_copy(const SordNode* node); + +/** + Free a node (drop a reference). +*/ +SORD_API +void +sord_node_free(SordWorld* world, SordNode* node); + +/** + Return the type of a node (SORD_URI, SORD_BLANK, or SORD_LITERAL). +*/ +SORD_API +SordNodeType +sord_node_get_type(const SordNode* node); + +/** + Return the string value of a node. +*/ +SORD_API +const uint8_t* +sord_node_get_string(const SordNode* node); + +/** + Return the string value of a node, and set @c len to its length. +*/ +SORD_API +const uint8_t* +sord_node_get_string_counted(const SordNode* node, size_t* len); + +/** + Return the language of a literal node (or NULL). +*/ +SORD_API +const char* +sord_node_get_language(const SordNode* node); + +/** + Return the datatype URI of a literal node (or NULL). +*/ +SORD_API +SordNode* +sord_node_get_datatype(const SordNode* node); + +/** + Return the flags (string attributes) of a node. +*/ +SORD_API +SerdNodeFlags +sord_node_get_flags(const SordNode* node); + +/** + Return true iff node can be serialised as an inline object. + + More specifically, this returns true iff the node is the object field + of exactly one statement, and therefore can be inlined since it needn't + be referred to by name. +*/ +SORD_API +bool +sord_node_is_inline_object(const SordNode* node); + +/** + Return true iff @c a is equal to @c b. + + Note this is much faster than comparing the node's strings. +*/ +SORD_API +bool +sord_node_equals(const SordNode* a, + const SordNode* b); + +/** + Return a SordNode as a SerdNode. + + The returned node is shared and must not be freed or modified. +*/ +SORD_API +const SerdNode* +sord_node_to_serd_node(const SordNode* node); + +/** + Create a new SordNode from a SerdNode. + + The returned node must be freed using sord_node_free. +*/ +SORD_API +SordNode* +sord_node_from_serd_node(SordWorld* world, + SerdEnv* env, + const SerdNode* node, + const SerdNode* datatype, + const SerdNode* lang); + +/** + @} + @name Model + @{ +*/ + +/** + Create a new model. + + @param world The world in which to make this model. + + @param indices SordIndexOption flags (e.g. SORD_SPO|SORD_OPS). Be sure to + enable an index where the most significant node(s) are not variables in your + queries (e.g. to make (? P O) queries, enable either SORD_OPS or SORD_POS). + + @param graphs If true, store (and index) graph contexts. +*/ +SORD_API +SordModel* +sord_new(SordWorld* world, + unsigned indices, + bool graphs); + +/** + Close and free @c model. +*/ +SORD_API +void +sord_free(SordModel* model); + +/** + Get the world associated with @c model. +*/ +SORD_API +SordWorld* +sord_get_world(SordModel* model); + +/** + Return the number of nodes stored in @c world. + + Nodes are included in this count iff they are a part of a quad in @c world. +*/ +SORD_API +size_t +sord_num_nodes(const SordWorld* world); + +/** + Return the number of quads stored in @c model. +*/ +SORD_API +size_t +sord_num_quads(const SordModel* model); + +/** + Return an iterator to the start of @c model. +*/ +SORD_API +SordIter* +sord_begin(const SordModel* model); + +/** + Search for statements by a quad pattern. + @return an iterator to the first match, or NULL if no matches found. +*/ +SORD_API +SordIter* +sord_find(SordModel* model, const SordQuad pat); + +/** + Search for statements by nodes. + @return an iterator to the first match, or NULL if no matches found. +*/ +SORD_API +SordIter* +sord_search(SordModel* model, + const SordNode* s, + const SordNode* p, + const SordNode* o, + const SordNode* g); + +/** + Return true iff a statement exists. +*/ +SORD_API +bool +sord_ask(SordModel* model, + const SordNode* s, + const SordNode* p, + const SordNode* o, + const SordNode* g); + +/** + Return the number of matching statements. +*/ +SORD_API +uint64_t +sord_count(SordModel* model, + const SordNode* s, + const SordNode* p, + const SordNode* o, + const SordNode* g); + +/** + Check if @a model contains a triple pattern. +*/ +SORD_API +bool +sord_contains(SordModel* model, const SordQuad pat); + +/** + Add a quad to a model. +*/ +SORD_API +bool +sord_add(SordModel* model, const SordQuad quad); + +/** + Remove a quad from a model. + + Note that is it illegal to remove while iterating over @c model. +*/ +SORD_API +void +sord_remove(SordModel* model, const SordQuad quad); + +/** + @} + @name Inserter + @{ +*/ + +/** + Create an inserter for writing statements to a model. +*/ +SORD_API +SordInserter* +sord_inserter_new(SordModel* model, + SerdEnv* env); + +/** + Free an inserter. +*/ +SORD_API +void +sord_inserter_free(SordInserter* inserter); + +/** + Set the current base URI for writing to the model. + + Note this function can be safely casted to SerdBaseSink. +*/ +SORD_API +SerdStatus +sord_inserter_set_base_uri(SordInserter* inserter, + const SerdNode* uri); + +/** + Set a namespace prefix for writing to the model. + + Note this function can be safely casted to SerdPrefixSink. +*/ +SORD_API +SerdStatus +sord_inserter_set_prefix(SordInserter* inserter, + const SerdNode* name, + const SerdNode* uri); + +/** + Write a statement to the model. + + Note this function can be safely casted to SerdStatementSink. +*/ +SORD_API +SerdStatus +sord_inserter_write_statement(SordInserter* inserter, + SerdStatementFlags flags, + const SerdNode* graph, + const SerdNode* subject, + const SerdNode* predicate, + const SerdNode* object, + const SerdNode* object_datatype, + const SerdNode* object_lang); + +/** + @} + @name Iteration + @{ +*/ + +/** + Set @c quad to the quad pointed to by @c iter. +*/ +SORD_API +void +sord_iter_get(const SordIter* iter, SordQuad quad); + +/** + Return a field of the quad pointed to by @c iter. +*/ +SORD_API +const SordNode* +sord_iter_get_node(const SordIter* iter, SordQuadIndex index); + +/** + Return the store pointed to by @c iter. +*/ +SORD_API +const SordModel* +sord_iter_get_model(SordIter* iter); + +/** + Increment @c iter to point to the next statement. +*/ +SORD_API +bool +sord_iter_next(SordIter* iter); + +/** + Return true iff @c iter is at the end of its range. +*/ +SORD_API +bool +sord_iter_end(const SordIter* iter); + +/** + Free @c iter. +*/ +SORD_API +void +sord_iter_free(SordIter* iter); + +/** + @} + @name Utilities + @{ +*/ + +/** + Match two quads (using ID comparison only). + + This function is a straightforward and fast equivalence match with wildcard + support (ID 0 is a wildcard). It does not actually read node data. + @return true iff @c x and @c y match. +*/ +SORD_API +bool +sord_quad_match(const SordQuad x, const SordQuad y); + +/** + @} + @name Serialisation + @{ +*/ + +/** + Return a reader that will read into @c model. +*/ +SORD_API +SerdReader* +sord_new_reader(SordModel* model, + SerdEnv* env, + SerdSyntax syntax, + SordNode* graph); + +/** + Write a model to a writer. +*/ +SORD_API +bool +sord_write(SordModel* model, + SerdWriter* writer, + SordNode* graph); + +/** + Write a range to a writer. + + This increments @c iter to its end, then frees it. +*/ +SORD_API +bool +sord_write_iter(SordIter* iter, + SerdWriter* writer); + +/** + @} + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* SORD_SORD_H */ diff --git a/source/libs/lilv/sord-0.10.4/sord/sordmm.hpp b/source/libs/lilv/sord-0.10.4/sord/sordmm.hpp new file mode 100644 index 000000000..4f3b60904 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/sord/sordmm.hpp @@ -0,0 +1,602 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file sordmm.hpp + Public Sord C++ API. +*/ + +#ifndef SORD_SORDMM_HPP +#define SORD_SORDMM_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include "serd/serd.h" +#include "sord/sord.h" + +#define SORD_NS_XSD "http://www.w3.org/2001/XMLSchema#" + +namespace Sord { + +/** Utility base class to prevent copying. */ +class Noncopyable { +protected: + Noncopyable() {} + ~Noncopyable() {} +private: + Noncopyable(const Noncopyable&); + const Noncopyable& operator=(const Noncopyable&); +}; + +/** C++ wrapper for a Sord object. */ +template +class Wrapper { +public: + inline Wrapper(T c_obj = NULL) : _c_obj(c_obj) {} + + inline T c_obj() { return _c_obj; } + inline const T c_obj() const { return _c_obj; } + +protected: + T _c_obj; +}; + +/** Collection of RDF namespaces with prefixes. */ +class Namespaces : public Wrapper { +public: + Namespaces() : Wrapper(serd_env_new(NULL)) {} + ~Namespaces() { serd_env_free(_c_obj); } + + static inline SerdNode string_to_node(SerdType type, const std::string& s) { + SerdNode ret = { + (const uint8_t*)s.c_str(), s.length(), s.length(), 0, type }; + return ret; + } + + inline void add(const std::string& name, + const std::string& uri) { + const SerdNode name_node = string_to_node(SERD_LITERAL, name); + const SerdNode uri_node = string_to_node(SERD_URI, uri); + serd_env_set_prefix(_c_obj, &name_node, &uri_node); + } + + inline std::string qualify(std::string uri) const { + const SerdNode uri_node = string_to_node(SERD_URI, uri); + SerdNode prefix; + SerdChunk suffix; + if (serd_env_qualify(_c_obj, &uri_node, &prefix, &suffix)) { + std::string ret((const char*)prefix.buf, prefix.n_bytes); + ret.append(":").append((const char*)suffix.buf, suffix.len); + return ret; + } + return uri; + } + + inline std::string expand(const std::string& curie) const { + assert(curie.find(":") != std::string::npos); + SerdNode curie_node = string_to_node(SERD_CURIE, curie); + SerdChunk uri_prefix; + SerdChunk uri_suffix; + if (!serd_env_expand(_c_obj, &curie_node, &uri_prefix, &uri_suffix)) { + std::string ret((const char*)uri_prefix.buf, uri_prefix.len); + ret.append((const char*)uri_suffix.buf, uri_suffix.len); + return ret; + } + std::cerr << "CURIE `" << curie << "' has unknown prefix." << std::endl; + return curie; + } +}; + +/** Sord library state. */ +class World : public Noncopyable, public Wrapper { +public: + inline World() + : _next_blank_id(0) + { + _c_obj = sord_world_new(); + add_prefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); + } + + inline ~World() { + sord_world_free(_c_obj); + } + + inline uint64_t blank_id() { return _next_blank_id++; } + + inline void add_prefix(const std::string& prefix, const std::string& uri) { + _prefixes.add(prefix, uri); + } + + inline const Namespaces& prefixes() const { return _prefixes; } + inline SordWorld* world() { return _c_obj; } + +private: + Namespaces _prefixes; + std::set _blank_ids; + uint64_t _next_blank_id; +}; + +/** An RDF Node (resource, literal, etc) + */ +class Node : public Wrapper { +public: + enum Type { + UNKNOWN = 0, + URI = SORD_URI, + BLANK = SORD_BLANK, + LITERAL = SORD_LITERAL + }; + + inline Node() : Wrapper(NULL), _world(NULL) {} + + inline Node(World& world, Type t, const std::string& s); + inline Node(World& world); + inline Node(World& world, const SordNode* node); + inline Node(const Node& other); + inline ~Node(); + + inline Type type() const { + return _c_obj ? (Type)sord_node_get_type(_c_obj) : UNKNOWN; + } + + inline const SordNode* get_node() const { return _c_obj; } + inline SordNode* get_node() { return _c_obj; } + + inline bool is_valid() const { return type() != UNKNOWN; } + + inline bool operator<(const Node& other) const { + if (type() != other.type()) { + return type() < other.type(); + } else { + return to_string() < other.to_string(); + } + } + + Node& operator=(const Node& other) { + if (&other != this) { + if (_c_obj) { + sord_node_free(_world->c_obj(), _c_obj); + } + _world = other._world; + _c_obj = other._c_obj ? sord_node_copy(other._c_obj) : NULL; + } + return *this; + } + + inline bool operator==(const Node& other) const { + return sord_node_equals(_c_obj, other._c_obj); + } + + inline const uint8_t* to_u_string() const; + inline const char* to_c_string() const; + inline std::string to_string() const; + + inline bool is_literal_type(const char* type_uri) const; + + inline bool is_uri() const { return _c_obj && type() == URI; } + inline bool is_blank() const { return _c_obj && type() == BLANK; } + inline bool is_int() const { return is_literal_type(SORD_NS_XSD "integer"); } + inline bool is_float() const { return is_literal_type(SORD_NS_XSD "decimal"); } + inline bool is_bool() const { return is_literal_type(SORD_NS_XSD "boolean"); } + + inline int to_int() const; + inline float to_float() const; + inline bool to_bool() const; + + inline static Node blank_id(World& world, const std::string base="b") { + const uint64_t num = world.blank_id(); + std::ostringstream ss; + ss << base << num; + return Node(world, Node::BLANK, ss.str()); + } + +private: + World* _world; +}; + +inline std::ostream& +operator<<(std::ostream& os, const Node& node) +{ + return os << node.to_string(); +} + +class URI : public Node { +public: + inline URI(World& world, const std::string& s) + : Node(world, Node::URI, s) {} + inline URI(World& world, const std::string& s, const std::string& base) + : Node(world, sord_new_relative_uri(world.world(), + (const uint8_t*)s.c_str(), + (const uint8_t*)base.c_str())) + {} +}; + +class Curie : public Node { +public: + inline Curie(World& world, const std::string& s) + : Node(world, Node::URI, world.prefixes().expand(s)) {} +}; + +class Literal : public Node { +public: + inline Literal(World& world, const std::string& s) + : Node(world, Node::LITERAL, s) {} +}; + +inline +Node::Node(World& world, Type type, const std::string& s) + : _world(&world) +{ + switch (type) { + case URI: + _c_obj = sord_new_uri( + world.world(), (const unsigned char*)s.c_str()); + break; + case LITERAL: + _c_obj = sord_new_literal( + world.world(), NULL, (const unsigned char*)s.c_str(), NULL); + break; + case BLANK: + _c_obj = sord_new_blank( + world.world(), (const unsigned char*)s.c_str()); + break; + default: + _c_obj = NULL; + } + + assert(this->type() == type); +} + +inline +Node::Node(World& world) + : _world(&world) +{ + Node me = blank_id(world); + *this = me; +} + +inline +Node::Node(World& world, const SordNode* node) + : _world(&world) +{ + _c_obj = node ? sord_node_copy(node) : NULL; +} + +inline +Node::Node(const Node& other) + : Wrapper() + , _world(other._world) +{ + if (_world) { + _c_obj = other._c_obj ? sord_node_copy(other._c_obj) : NULL; + } + + assert((!_c_obj && !other._c_obj) || to_string() == other.to_string()); +} + +inline +Node::~Node() +{ + if (_world) { + sord_node_free(_world->c_obj(), _c_obj); + } +} + +inline std::string +Node::to_string() const +{ + return _c_obj ? (const char*)sord_node_get_string(_c_obj) : ""; +} + +inline const char* +Node::to_c_string() const +{ + return (const char*)sord_node_get_string(_c_obj); +} + +inline const uint8_t* +Node::to_u_string() const +{ + return sord_node_get_string(_c_obj); +} + +inline bool +Node::is_literal_type(const char* type_uri) const +{ + if (_c_obj && sord_node_get_type(_c_obj) == SORD_LITERAL) { + const SordNode* datatype = sord_node_get_datatype(_c_obj); + if (datatype && !strcmp((const char*)sord_node_get_string(datatype), + type_uri)) + return true; + } + return false; +} + +inline int +Node::to_int() const +{ + assert(is_int()); + char* endptr; + return strtol((const char*)sord_node_get_string(_c_obj), &endptr, 10); +} + +inline float +Node::to_float() const +{ + assert(is_float()); + char* endptr; + return serd_strtod((const char*)sord_node_get_string(_c_obj), &endptr); +} + +inline bool +Node::to_bool() const +{ + assert(is_bool()); + return !strcmp((const char*)sord_node_get_string(_c_obj), "true"); +} + +struct Iter : public Wrapper { + inline Iter(World& world, SordIter* c_obj) + : Wrapper(c_obj), _world(world) {} + inline ~Iter() { sord_iter_free(_c_obj); } + inline bool end() const { return sord_iter_end(_c_obj); } + inline bool next() const { return sord_iter_next(_c_obj); } + inline Iter& operator++() { + assert(!end()); + next(); + return *this; + } + inline const Node get_subject() const { + SordQuad quad; + sord_iter_get(_c_obj, quad); + return Node(_world, quad[SORD_SUBJECT]); + } + inline const Node get_predicate() const { + SordQuad quad; + sord_iter_get(_c_obj, quad); + return Node(_world, quad[SORD_PREDICATE]); + } + inline const Node get_object() const { + SordQuad quad; + sord_iter_get(_c_obj, quad); + return Node(_world, quad[SORD_OBJECT]); + } + World& _world; +}; + +/** An RDF Model (collection of triples). + */ +class Model : public Noncopyable, public Wrapper { +public: + inline Model(World& world, + const std::string& base_uri, + unsigned indices = (SORD_SPO | SORD_OPS), + bool graphs = true); + + inline ~Model(); + + inline const Node& base_uri() const { return _base; } + + size_t num_quads() const { return sord_num_quads(_c_obj); } + + inline void load_file(SerdEnv* env, + SerdSyntax syntax, + const std::string& uri, + const std::string& base_uri=""); + + inline void load_string(SerdEnv* env, + SerdSyntax syntax, + const char* str, + size_t len, + const std::string& base_uri); + + inline SerdStatus write_to_file( + const std::string& uri, + SerdSyntax syntax = SERD_TURTLE, + SerdStyle style = (SerdStyle)(SERD_STYLE_ABBREVIATED + |SERD_STYLE_CURIED + |SERD_STYLE_RESOLVED)); + + inline std::string write_to_string( + const std::string& base_uri, + SerdSyntax syntax = SERD_TURTLE, + SerdStyle style = (SerdStyle)(SERD_STYLE_ABBREVIATED + |SERD_STYLE_CURIED + |SERD_STYLE_RESOLVED)); + + inline void add_statement(const Node& subject, + const Node& predicate, + const Node& object); + + inline Iter find(const Node& subject, + const Node& predicate, + const Node& object); + + inline World& world() const { return _world; } + +private: + World& _world; + Node _base; + SerdWriter* _writer; + size_t _next_blank_id; +}; + +/** Create an empty in-memory RDF model. + */ +inline +Model::Model(World& world, + const std::string& base_uri, + unsigned indices, + bool graphs) + : _world(world) + , _base(world, Node::URI, base_uri) + , _writer(NULL) +{ + _c_obj = sord_new(_world.world(), indices, graphs); +} + +inline void +Model::load_string(SerdEnv* env, + SerdSyntax syntax, + const char* str, + size_t len, + const std::string& base_uri) +{ + SerdReader* reader = sord_new_reader(_c_obj, env, syntax, NULL); + serd_reader_read_string(reader, (const uint8_t*)str); + serd_reader_free(reader); +} + +inline Model::~Model() +{ + sord_free(_c_obj); +} + +inline void +Model::load_file(SerdEnv* env, + SerdSyntax syntax, + const std::string& data_uri, + const std::string& base_uri) +{ + uint8_t* path = serd_file_uri_parse((const uint8_t*)data_uri.c_str(), NULL); + if (!path) { + fprintf(stderr, "Failed to parse file URI <%s>\n", data_uri.c_str()); + return; + } + + // FIXME: blank prefix parameter? + SerdReader* reader = sord_new_reader(_c_obj, env, syntax, NULL); + serd_reader_read_file(reader, path); + serd_reader_free(reader); + free(path); +} + +inline SerdStatus +Model::write_to_file(const std::string& uri, SerdSyntax syntax, SerdStyle style) +{ + uint8_t* path = serd_file_uri_parse((const uint8_t*)uri.c_str(), NULL); + if (!path) { + fprintf(stderr, "Failed to parse file URI <%s>\n", uri.c_str()); + return SERD_ERR_BAD_ARG; + } + + FILE* const fd = fopen((const char*)path, "w"); + if (!fd) { + fprintf(stderr, "Failed to open file %s\n", path); + free(path); + return SERD_ERR_UNKNOWN; + } + free(path); + + SerdURI base_uri = SERD_URI_NULL; + if (serd_uri_parse((const uint8_t*)uri.c_str(), &base_uri)) { + fprintf(stderr, "Invalid base URI <%s>\n", uri.c_str()); + fclose(fd); + return SERD_ERR_BAD_ARG; + } + + SerdWriter* writer = serd_writer_new(syntax, + style, + _world.prefixes().c_obj(), + &base_uri, + serd_file_sink, + fd); + + serd_env_foreach(_world.prefixes().c_obj(), + (SerdPrefixSink)serd_writer_set_prefix, + writer); + + sord_write(_c_obj, writer, 0); + serd_writer_free(writer); + fclose(fd); + + return SERD_SUCCESS; +} + +static size_t +string_sink(const void* buf, size_t len, void* stream) +{ + std::string* str = (std::string*)stream; + str->append((const char*)buf, len); + return len; +} + +inline std::string +Model::write_to_string(const std::string& base_uri_str, + SerdSyntax syntax, + SerdStyle style) +{ + SerdURI base_uri = SERD_URI_NULL; + if (serd_uri_parse((const uint8_t*)base_uri_str.c_str(), &base_uri)) { + fprintf(stderr, "Invalid base URI <%s>\n", base_uri_str.c_str()); + return ""; + } + + std::string ret; + + SerdWriter* writer = serd_writer_new(syntax, + style, + _world.prefixes().c_obj(), + &base_uri, + string_sink, + &ret); + + serd_env_foreach(_world.prefixes().c_obj(), + (SerdPrefixSink)serd_writer_set_prefix, + writer); + + sord_write(_c_obj, writer, 0); + + serd_writer_free(writer); + return ret; +} + +inline void +Model::add_statement(const Node& subject, + const Node& predicate, + const Node& object) +{ + SordQuad quad = { subject.c_obj(), + predicate.c_obj(), + object.c_obj(), + NULL }; + + sord_add(_c_obj, quad); +} + +inline Iter +Model::find(const Node& subject, + const Node& predicate, + const Node& object) +{ + SordQuad quad = { subject.c_obj(), + predicate.c_obj(), + object.c_obj(), + NULL }; + + return Iter(_world, sord_find(_c_obj, quad)); +} + +} // namespace Sord + +#endif // SORD_SORDMM_HPP + diff --git a/source/libs/lilv/sord-0.10.4/src/sord.c b/source/libs/lilv/sord-0.10.4/src/sord.c new file mode 100644 index 000000000..9510d5007 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/sord.c @@ -0,0 +1,1236 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +// C99 +#include +#include +#include +#include +#include +#include + +#define ZIX_INLINE +#include "zix/digest.c" +#include "zix/hash.c" +#include "zix/tree.c" + +#include "sord_config.h" +#include "sord_internal.h" + +#define SORD_LOG(prefix, ...) fprintf(stderr, "[Sord::" prefix "] " __VA_ARGS__) + +#ifdef SORD_DEBUG_ITER +# define SORD_ITER_LOG(...) SORD_LOG("iter", __VA_ARGS__) +#else +# define SORD_ITER_LOG(...) +#endif +#ifdef SORD_DEBUG_SEARCH +# define SORD_FIND_LOG(...) SORD_LOG("search", __VA_ARGS__) +#else +# define SORD_FIND_LOG(...) +#endif +#ifdef SORD_DEBUG_WRITE +# define SORD_WRITE_LOG(...) SORD_LOG("write", __VA_ARGS__) +#else +# define SORD_WRITE_LOG(...) +#endif + +#define NUM_ORDERS 12 +#define STATEMENT_LEN 3 +#define TUP_LEN STATEMENT_LEN + 1 +#define DEFAULT_ORDER SPO +#define DEFAULT_GRAPH_ORDER GSPO + +#define TUP_FMT "(%s %s %s %s)" +#define TUP_FMT_ELEM(e) ((e) ? sord_node_get_string(e) : (const uint8_t*)"*") +#define TUP_FMT_ARGS(t) \ + TUP_FMT_ELEM((t)[0]), \ + TUP_FMT_ELEM((t)[1]), \ + TUP_FMT_ELEM((t)[2]), \ + TUP_FMT_ELEM((t)[3]) + +#define TUP_S 0 +#define TUP_P 1 +#define TUP_O 2 +#define TUP_G 3 + +/** Triple ordering */ +typedef enum { + SPO, ///< Subject, Predicate, Object + SOP, ///< Subject, Object, Predicate + OPS, ///< Object, Predicate, Subject + OSP, ///< Object, Subject, Predicate + PSO, ///< Predicate, Subject, Object + POS, ///< Predicate, Object, Subject + GSPO, ///< Graph, Subject, Predicate, Object + GSOP, ///< Graph, Subject, Object, Predicate + GOPS, ///< Graph, Object, Predicate, Subject + GOSP, ///< Graph, Object, Subject, Predicate + GPSO, ///< Graph, Predicate, Subject, Object + GPOS, ///< Graph, Predicate, Object, Subject +} SordOrder; + +/** String name of each ordering (array indexed by SordOrder) */ +static const char* const order_names[NUM_ORDERS] = { + "spo", "sop", "ops", "osp", "pso", "pos", + "gspo", "gsop", "gops", "gosp", "gpso", "gpos" +}; + +/** + Quads of indices for each order, from most to least significant + (array indexed by SordOrder) +*/ +static const int orderings[NUM_ORDERS][TUP_LEN] = { + { 0, 1, 2, 3 }, { 0, 2, 1, 3 }, // SPO, SOP + { 2, 1, 0, 3 }, { 2, 0, 1, 3 }, // OPS, OSP + { 1, 0, 2, 3 }, { 1, 2, 0, 3 }, // PSO, POS + { 3, 0, 1, 2 }, { 3, 0, 2, 1 }, // GSPO, GSOP + { 3, 2, 1, 0 }, { 3, 2, 0, 1 }, // GOPS, GOSP + { 3, 1, 0, 2 }, { 3, 1, 2, 0 } // GPSO, GPOS +}; + +/** World */ +struct SordWorldImpl { + ZixHash* nodes; + SerdErrorSink error_sink; + void* error_handle; +}; + +/** Store */ +struct SordModelImpl { + SordWorld* world; + + /** Index for each possible triple ordering (may or may not exist). + * Each index is a tree of SordQuad with the appropriate ordering. + */ + ZixTree* indices[NUM_ORDERS]; + + size_t n_quads; +}; + +/** Mode for searching or iteration */ +typedef enum { + ALL, ///< Iterate over entire store + SINGLE, ///< Iteration over a single element (exact search) + RANGE, ///< Iterate over range with equal prefix + FILTER_RANGE, ///< Iterate over range with equal prefix, filtering + FILTER_ALL ///< Iterate to end of store, filtering +} SearchMode; + +/** Iterator over some range of a store */ +struct SordIterImpl { + const SordModel* sord; ///< Model being iterated over + ZixTreeIter* cur; ///< Current DB cursor + SordQuad pat; ///< Pattern (in ordering order) + int ordering[TUP_LEN]; ///< Store ordering + SearchMode mode; ///< Iteration mode + int n_prefix; ///< Prefix for RANGE and FILTER_RANGE + bool end; ///< True iff reached end + bool skip_graphs; ///< Iteration should ignore graphs +}; + +static uint32_t +sord_node_hash(const void* n) +{ + const SordNode* node = (const SordNode*)n; + uint32_t hash = zix_digest_start(); + hash = zix_digest_add(hash, node->node.buf, node->node.n_bytes); + hash = zix_digest_add(hash, &node->node.type, sizeof(node->node.type)); + if (node->node.type == SERD_LITERAL) { + hash = zix_digest_add(hash, &node->meta.lit, sizeof(node->meta.lit)); + } + return hash; +} + +static bool +sord_node_hash_equal(const void* a, const void* b) +{ + const SordNode* a_node = (const SordNode*)a; + const SordNode* b_node = (const SordNode*)b; + return (a_node == b_node) + || ((a_node->node.type == b_node->node.type) && + (a_node->node.type != SERD_LITERAL || + (a_node->meta.lit.datatype == b_node->meta.lit.datatype && + !strncmp(a_node->meta.lit.lang, + b_node->meta.lit.lang, + sizeof(a_node->meta.lit.lang)))) && + (serd_node_equals(&a_node->node, &b_node->node))); +} + +static void +error(SordWorld* world, SerdStatus st, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + const SerdError e = { st, NULL, 0, 0, fmt, &args }; + if (world->error_sink) { + world->error_sink(world->error_handle, &e); + } else { + fprintf(stderr, "error: "); + vfprintf(stderr, fmt, args); + } + va_end(args); +} + +SordWorld* +sord_world_new(void) +{ + SordWorld* world = (SordWorld*)malloc(sizeof(SordWorld)); + world->error_sink = NULL; + world->error_handle = NULL; + + world->nodes = zix_hash_new( + sord_node_hash, sord_node_hash_equal, sizeof(SordNode)); + + return world; +} + +static void +free_node_entry(const void* value, void* user_data) +{ + const SordNode* node = (const SordNode*)value; + if (node->node.type == SERD_LITERAL) { + sord_node_free((SordWorld*)user_data, node->meta.lit.datatype); + } + free((uint8_t*)node->node.buf); +} + +void +sord_world_free(SordWorld* world) +{ + zix_hash_foreach(world->nodes, free_node_entry, world); + zix_hash_free(world->nodes); + free(world); +} + +void +sord_world_set_error_sink(SordWorld* world, + SerdErrorSink error_sink, + void* handle) +{ + world->error_sink = error_sink; + world->error_handle = handle; +} + +/** Compare nodes, considering NULL a wildcard match. */ +static inline int +sord_node_compare(const SordNode* a, const SordNode* b) +{ + if (a == b || !a || !b) { + return 0; // Exact or wildcard match + } else if (a->node.type != b->node.type) { + return a->node.type - b->node.type; + } + + int cmp = 0; + switch (a->node.type) { + case SERD_URI: + case SERD_BLANK: + return strcmp((const char*)a->node.buf, (const char*)b->node.buf); + case SERD_LITERAL: + cmp = strcmp((const char*)sord_node_get_string(a), + (const char*)sord_node_get_string(b)); + if (cmp == 0) { + // Note: Can't use sord_node_compare here since it does wildcards + if (!a->meta.lit.datatype || !b->meta.lit.datatype) { + cmp = a->meta.lit.datatype - b->meta.lit.datatype; + } else { + cmp = strcmp((const char*)a->meta.lit.datatype->node.buf, + (const char*)b->meta.lit.datatype->node.buf); + } + } + if (cmp == 0) { + cmp = strcmp(a->meta.lit.lang, b->meta.lit.lang); + } + default: + break; + } + return cmp; +} + +bool +sord_node_equals(const SordNode* a, const SordNode* b) +{ + return a == b; // Nodes are interned +} + +/** Return true iff IDs are equivalent, or one is a wildcard */ +static inline bool +sord_id_match(const SordNode* a, const SordNode* b) +{ + return !a || !b || (a == b); +} + +static inline bool +sord_quad_match_inline(const SordQuad x, const SordQuad y) +{ + return sord_id_match(x[0], y[0]) + && sord_id_match(x[1], y[1]) + && sord_id_match(x[2], y[2]) + && sord_id_match(x[3], y[3]); +} + +bool +sord_quad_match(const SordQuad x, const SordQuad y) +{ + return sord_quad_match_inline(x, y); +} + +/** + Compare two quad IDs lexicographically. + NULL IDs (equal to 0) are treated as wildcards, always less than every + other possible ID, except itself. +*/ +static int +sord_quad_compare(const void* x_ptr, const void* y_ptr, void* user_data) +{ + const int* const ordering = (const int*)user_data; + const SordNode*const*const x = (const SordNode*const*)x_ptr; + const SordNode*const*const y = (const SordNode*const*)y_ptr; + + for (int i = 0; i < TUP_LEN; ++i) { + const int idx = ordering[i]; + const int cmp = sord_node_compare(x[idx], y[idx]); + if (cmp) { + return cmp; + } + } + + return 0; +} + +static inline bool +sord_iter_forward(SordIter* iter) +{ + if (!iter->skip_graphs) { + iter->cur = zix_tree_iter_next(iter->cur); + return zix_tree_iter_is_end(iter->cur); + } + + SordNode** key = (SordNode**)zix_tree_get(iter->cur); + const SordQuad initial = { key[0], key[1], key[2], key[3] }; + while (true) { + iter->cur = zix_tree_iter_next(iter->cur); + if (zix_tree_iter_is_end(iter->cur)) + return true; + + key = (SordNode**)zix_tree_get(iter->cur); + for (int i = 0; i < 3; ++i) + if (key[i] != initial[i]) + return false; + } + assert(false); +} + +/** + Seek forward as necessary until @a iter points at a match. + @return true iff iterator reached end of valid range. +*/ +static inline bool +sord_iter_seek_match(SordIter* iter) +{ + for (iter->end = true; + !zix_tree_iter_is_end(iter->cur); + sord_iter_forward(iter)) { + const SordNode** const key = (const SordNode**)zix_tree_get(iter->cur); + if (sord_quad_match_inline(key, iter->pat)) + return (iter->end = false); + } + return true; +} + +/** + Seek forward as necessary until @a iter points at a match, or the prefix + no longer matches iter->pat. + @return true iff iterator reached end of valid range. +*/ +static inline bool +sord_iter_seek_match_range(SordIter* iter) +{ + if (iter->end) + return true; + + do { + const SordNode** key = (const SordNode**)zix_tree_get(iter->cur); + + if (sord_quad_match_inline(key, iter->pat)) + return false; // Found match + + for (int i = 0; i < iter->n_prefix; ++i) { + const int idx = iter->ordering[i]; + if (!sord_id_match(key[idx], iter->pat[idx])) { + iter->end = true; // Reached end of valid range + return true; + } + } + } while (!sord_iter_forward(iter)); + + return (iter->end = true); // Reached end +} + +static SordIter* +sord_iter_new(const SordModel* sord, ZixTreeIter* cur, const SordQuad pat, + SordOrder order, SearchMode mode, int n_prefix) +{ + const int* ordering = orderings[order]; + + SordIter* iter = (SordIter*)malloc(sizeof(SordIter)); + iter->sord = sord; + iter->cur = cur; + iter->mode = mode; + iter->n_prefix = n_prefix; + iter->end = false; + iter->skip_graphs = order < GSPO; + for (int i = 0; i < TUP_LEN; ++i) { + iter->pat[i] = pat[i]; + iter->ordering[i] = ordering[i]; + } + + switch (iter->mode) { + case ALL: + case SINGLE: + case RANGE: + assert( + sord_quad_match_inline((const SordNode**)zix_tree_get(iter->cur), + iter->pat)); + break; + case FILTER_RANGE: + sord_iter_seek_match_range(iter); + break; + case FILTER_ALL: + sord_iter_seek_match(iter); + break; + } + +#ifdef SORD_DEBUG_ITER + SordQuad value; + sord_iter_get(iter, value); + SORD_ITER_LOG("New %p pat=" TUP_FMT " cur=" TUP_FMT " end=%d skip=%d\n", + (void*)iter, TUP_FMT_ARGS(pat), TUP_FMT_ARGS(value), + iter->end, iter->skip_graphs); +#endif + return iter; +} + +const SordModel* +sord_iter_get_model(SordIter* iter) +{ + return iter->sord; +} + +void +sord_iter_get(const SordIter* iter, SordQuad id) +{ + SordNode** key = (SordNode**)zix_tree_get(iter->cur); + for (int i = 0; i < TUP_LEN; ++i) { + id[i] = key[i]; + } +} + +const SordNode* +sord_iter_get_node(const SordIter* iter, SordQuadIndex index) +{ + return iter ? ((SordNode**)zix_tree_get(iter->cur))[index] : NULL; +} + +bool +sord_iter_next(SordIter* iter) +{ + if (iter->end) + return true; + + const SordNode** key; + iter->end = sord_iter_forward(iter); + if (!iter->end) { + switch (iter->mode) { + case ALL: + // At the end if the cursor is (assigned above) + break; + case SINGLE: + iter->end = true; + SORD_ITER_LOG("%p reached single end\n", (void*)iter); + break; + case RANGE: + SORD_ITER_LOG("%p range next\n", (void*)iter); + // At the end if the MSNs no longer match + key = (const SordNode**)zix_tree_get(iter->cur); + assert(key); + for (int i = 0; i < iter->n_prefix; ++i) { + const int idx = iter->ordering[i]; + if (!sord_id_match(key[idx], iter->pat[idx])) { + iter->end = true; + SORD_ITER_LOG("%p reached non-match end\n", (void*)iter); + break; + } + } + break; + case FILTER_RANGE: + // Seek forward to next match, stopping if prefix changes + sord_iter_seek_match_range(iter); + break; + case FILTER_ALL: + // Seek forward to next match + sord_iter_seek_match(iter); + break; + } + } else { + SORD_ITER_LOG("%p reached index end\n", (void*)iter); + } + + if (iter->end) { + SORD_ITER_LOG("%p Reached end\n", (void*)iter); + return true; + } else { +#ifdef SORD_DEBUG_ITER + SordQuad tup; + sord_iter_get(iter, tup); + SORD_ITER_LOG("%p Increment to " TUP_FMT "\n", + (void*)iter, TUP_FMT_ARGS(tup)); +#endif + return false; + } +} + +bool +sord_iter_end(const SordIter* iter) +{ + return !iter || iter->end; +} + +void +sord_iter_free(SordIter* iter) +{ + SORD_ITER_LOG("%p Free\n", (void*)iter); + if (iter) { + free(iter); + } +} + +/** + Return true iff @a sord has an index for @a order. + If @a graphs is true, @a order will be modified to be the + corresponding order with a G prepended (so G will be the MSN). +*/ +static inline bool +sord_has_index(SordModel* sord, SordOrder* order, int* n_prefix, bool graphs) +{ + if (graphs) { + *order = (SordOrder)(*order + GSPO); + *n_prefix += 1; + } + + return sord->indices[*order]; +} + +/** + Return the best available index for a pattern. + @param pat Pattern in standard (S P O G) order + @param mode Set to the (best) iteration mode for iterating over results + @param n_prefix Set to the length of the range prefix + (for @a mode == RANGE and @a mode == FILTER_RANGE) +*/ +static inline SordOrder +sord_best_index(SordModel* sord, + const SordQuad pat, + SearchMode* mode, + int* n_prefix) +{ + const bool graph_search = (pat[TUP_G] != 0); + + const unsigned sig + = (pat[0] ? 1 : 0) * 0x100 + + (pat[1] ? 1 : 0) * 0x010 + + (pat[2] ? 1 : 0) * 0x001; + + SordOrder good[2] = { (SordOrder)-1, (SordOrder)-1 }; + +#define PAT_CASE(sig, m, g0, g1, np) \ + case sig: \ + *mode = m; \ + good[0] = g0; \ + good[1] = g1; \ + *n_prefix = np; \ + break + + // Good orderings that don't require filtering + *mode = RANGE; + *n_prefix = 0; + switch (sig) { + case 0x000: + *mode = ALL; + return graph_search ? DEFAULT_GRAPH_ORDER : DEFAULT_ORDER; + case 0x111: + *mode = SINGLE; + return graph_search ? DEFAULT_GRAPH_ORDER : DEFAULT_ORDER; + + PAT_CASE(0x001, RANGE, OPS, OSP, 1); + PAT_CASE(0x010, RANGE, POS, PSO, 1); + PAT_CASE(0x011, RANGE, OPS, POS, 2); + PAT_CASE(0x100, RANGE, SPO, SOP, 1); + PAT_CASE(0x101, RANGE, SOP, OSP, 2); + PAT_CASE(0x110, RANGE, SPO, PSO, 2); + } + + if (*mode == RANGE) { + if (sord_has_index(sord, &good[0], n_prefix, graph_search)) { + return good[0]; + } else if (sord_has_index(sord, &good[1], n_prefix, graph_search)) { + return good[1]; + } + } + + // Not so good orderings that require filtering, but can + // still be constrained to a range + switch (sig) { + PAT_CASE(0x011, FILTER_RANGE, OSP, PSO, 1); + PAT_CASE(0x101, FILTER_RANGE, SPO, OPS, 1); + PAT_CASE(0x110, FILTER_RANGE, SOP, POS, 1); + default: break; + } + + if (*mode == FILTER_RANGE) { + if (sord_has_index(sord, &good[0], n_prefix, graph_search)) { + return good[0]; + } else if (sord_has_index(sord, &good[1], n_prefix, graph_search)) { + return good[1]; + } + } + + if (graph_search) { + *mode = FILTER_RANGE; + *n_prefix = 1; + return DEFAULT_GRAPH_ORDER; + } else { + *mode = FILTER_ALL; + return DEFAULT_ORDER; + } +} + +SordModel* +sord_new(SordWorld* world, unsigned indices, bool graphs) +{ + SordModel* sord = (SordModel*)malloc(sizeof(struct SordModelImpl)); + sord->world = world; + sord->n_quads = 0; + + for (unsigned i = 0; i < (NUM_ORDERS / 2); ++i) { + const int* const ordering = orderings[i]; + const int* const g_ordering = orderings[i + (NUM_ORDERS / 2)]; + + if (indices & (1 << i)) { + sord->indices[i] = zix_tree_new( + false, sord_quad_compare, (void*)ordering, NULL); + if (graphs) { + sord->indices[i + (NUM_ORDERS / 2)] = zix_tree_new( + false, sord_quad_compare, (void*)g_ordering, NULL); + } else { + sord->indices[i + (NUM_ORDERS / 2)] = NULL; + } + } else { + sord->indices[i] = NULL; + sord->indices[i + (NUM_ORDERS / 2)] = NULL; + } + } + + if (!sord->indices[DEFAULT_ORDER]) { + sord->indices[DEFAULT_ORDER] = zix_tree_new( + false, sord_quad_compare, (void*)orderings[DEFAULT_ORDER], NULL); + } + if (graphs && !sord->indices[DEFAULT_GRAPH_ORDER]) { + sord->indices[DEFAULT_GRAPH_ORDER] = zix_tree_new( + false, sord_quad_compare, (void*)orderings[DEFAULT_GRAPH_ORDER], NULL); + } + + return sord; +} + +static void +sord_node_free_internal(SordWorld* world, SordNode* node) +{ + assert(node->refs == 0); + + // Cache pointer to buffer to free after node removal and destruction + const uint8_t* const buf = node->node.buf; + + // Remove node from hash (which frees the node) + if (zix_hash_remove(world->nodes, node)) { + error(world, SERD_ERR_INTERNAL, "failed to remove node from hash\n"); + } + + // Free buffer + free((uint8_t*)buf); +} + +static void +sord_add_quad_ref(SordModel* sord, const SordNode* node, SordQuadIndex i) +{ + if (node) { + assert(node->refs > 0); + ++((SordNode*)node)->refs; + if (node->node.type != SERD_LITERAL && i == SORD_OBJECT) { + ++((SordNode*)node)->meta.res.refs_as_obj; + } + } +} + +static void +sord_drop_quad_ref(SordModel* sord, const SordNode* node, SordQuadIndex i) +{ + if (!node) { + return; + } + + assert(node->refs > 0); + if (node->node.type != SERD_LITERAL && i == SORD_OBJECT) { + assert(node->meta.res.refs_as_obj > 0); + --((SordNode*)node)->meta.res.refs_as_obj; + } + if (--((SordNode*)node)->refs == 0) { + sord_node_free_internal(sord_get_world(sord), (SordNode*)node); + } +} + +void +sord_free(SordModel* sord) +{ + if (!sord) + return; + + // Free nodes + SordQuad tup; + SordIter* i = sord_begin(sord); + for (; !sord_iter_end(i); sord_iter_next(i)) { + sord_iter_get(i, tup); + for (int t = 0; t < TUP_LEN; ++t) { + sord_drop_quad_ref(sord, tup[t], (SordQuadIndex)t); + } + } + sord_iter_free(i); + + // Free quads + for (ZixTreeIter* t = zix_tree_begin(sord->indices[DEFAULT_ORDER]); + !zix_tree_iter_is_end(t); + t = zix_tree_iter_next(t)) { + free(zix_tree_get(t)); + } + + // Free indices + for (unsigned o = 0; o < NUM_ORDERS; ++o) + if (sord->indices[o]) + zix_tree_free(sord->indices[o]); + + free(sord); +} + +SordWorld* +sord_get_world(SordModel* sord) +{ + return sord->world; +} + +size_t +sord_num_quads(const SordModel* sord) +{ + return sord->n_quads; +} + +size_t +sord_num_nodes(const SordWorld* world) +{ + return zix_hash_size(world->nodes); +} + +SordIter* +sord_begin(const SordModel* sord) +{ + if (sord_num_quads(sord) == 0) { + return NULL; + } else { + ZixTreeIter* cur = zix_tree_begin(sord->indices[DEFAULT_ORDER]); + SordQuad pat = { 0, 0, 0, 0 }; + return sord_iter_new(sord, cur, pat, DEFAULT_ORDER, ALL, 0); + } +} + +static inline ZixTreeIter* +index_search(ZixTree* db, const SordQuad search_key) +{ + ZixTreeIter* iter = NULL; + zix_tree_find(db, (const void*)search_key, &iter); + return iter; +} + +static inline ZixTreeIter* +index_lower_bound(ZixTree* db, const SordQuad search_key) +{ + ZixTreeIter* iter = NULL; + zix_tree_find(db, (const void*)search_key, &iter); + if (!iter) { + return NULL; + } + + ZixTreeIter* prev = NULL; + while ((prev = zix_tree_iter_prev(iter))) { + if (!prev) { + return iter; + } + + const SordNode** const key = (const SordNode**)zix_tree_get(prev); + if (!sord_quad_match_inline(key, search_key)) { + return iter; + } + + iter = prev; + } + + return iter; +} + +SordIter* +sord_find(SordModel* sord, const SordQuad pat) +{ + if (!pat[0] && !pat[1] && !pat[2] && !pat[3]) + return sord_begin(sord); + + SearchMode mode; + int n_prefix; + const SordOrder index_order = sord_best_index(sord, pat, &mode, &n_prefix); + + SORD_FIND_LOG("Find " TUP_FMT " index=%s mode=%d" + " n_prefix=%d ordering=%d%d%d%d\n", + TUP_FMT_ARGS(pat), order_names[index_order], mode, n_prefix, + ordering[0], ordering[1], ordering[2], ordering[3]); + + if (pat[0] && pat[1] && pat[2] && pat[3]) + mode = SINGLE; // No duplicate quads (Sord is a set) + + ZixTree* const db = sord->indices[index_order]; + ZixTreeIter* const cur = index_lower_bound(db, pat); + if (zix_tree_iter_is_end(cur)) { + SORD_FIND_LOG("No match found\n"); + return NULL; + } + const SordNode** const key = (const SordNode**)zix_tree_get(cur); + if (!key || ( (mode == RANGE || mode == SINGLE) + && !sord_quad_match_inline(pat, key) )) { + SORD_FIND_LOG("No match found\n"); + return NULL; + } + + return sord_iter_new(sord, cur, pat, index_order, mode, n_prefix); +} + +SordIter* +sord_search(SordModel* model, + const SordNode* s, + const SordNode* p, + const SordNode* o, + const SordNode* g) +{ + SordQuad pat = { s, p, o, g }; + return sord_find(model, pat); +} + +bool +sord_ask(SordModel* model, + const SordNode* s, + const SordNode* p, + const SordNode* o, + const SordNode* g) +{ + SordQuad pat = { s, p, o, g }; + return sord_contains(model, pat); +} + +uint64_t +sord_count(SordModel* model, + const SordNode* s, + const SordNode* p, + const SordNode* o, + const SordNode* g) +{ + SordIter* i = sord_search(model, s, p, o, g); + uint64_t n = 0; + for (; !sord_iter_end(i); sord_iter_next(i)) { + ++n; + } + sord_iter_free(i); + return n; +} + +bool +sord_contains(SordModel* sord, const SordQuad pat) +{ + SordIter* iter = sord_find(sord, pat); + bool ret = (iter != NULL); + sord_iter_free(iter); + return ret; +} + +static uint8_t* +sord_strndup(const uint8_t* str, size_t len) +{ + uint8_t* dup = (uint8_t*)malloc(len + 1); + memcpy(dup, str, len + 1); + return dup; +} + +SordNodeType +sord_node_get_type(const SordNode* node) +{ + switch (node->node.type) { + case SERD_BLANK: + return SORD_BLANK; + case SERD_LITERAL: + return SORD_LITERAL; + case SERD_URI: + return SORD_URI; + default: + fprintf(stderr, "error: invalid node type\n"); + return (SordNodeType)0; + } +} + +const uint8_t* +sord_node_get_string(const SordNode* node) +{ + return node->node.buf; +} + +const uint8_t* +sord_node_get_string_counted(const SordNode* node, size_t* len) +{ + *len = node->node.n_chars; + return node->node.buf; +} + +const char* +sord_node_get_language(const SordNode* node) +{ + if (node->node.type != SERD_LITERAL || !node->meta.lit.lang[0]) { + return NULL; + } + return node->meta.lit.lang; +} + +SordNode* +sord_node_get_datatype(const SordNode* node) +{ + return (node->node.type == SERD_LITERAL) ? node->meta.lit.datatype : NULL; +} + +SerdNodeFlags +sord_node_get_flags(const SordNode* node) +{ + return node->node.flags; +} + +bool +sord_node_is_inline_object(const SordNode* node) +{ + return (node->node.type == SERD_BLANK) && (node->meta.res.refs_as_obj == 1); +} + +static SordNode* +sord_insert_node(SordWorld* world, const SordNode* key, bool copy) +{ + SordNode* node = NULL; + ZixStatus st = zix_hash_insert(world->nodes, key, (const void**)&node); + switch (st) { + case ZIX_STATUS_EXISTS: + ++node->refs; + break; + case ZIX_STATUS_SUCCESS: + assert(node->refs == 1); + if (copy) { + node->node.buf = sord_strndup(node->node.buf, node->node.n_bytes); + } + if (node->node.type == SERD_LITERAL) { + node->meta.lit.datatype = sord_node_copy(node->meta.lit.datatype); + } + return node; + default: + assert(!node); + error(world, SERD_ERR_INTERNAL, + "error inserting node `%s'\n", key->node.buf); + } + + if (!copy) { + // Free the buffer we would have copied if a new node was created + free((uint8_t*)key->node.buf); + } + + return node; +} + +static SordNode* +sord_new_uri_counted(SordWorld* world, const uint8_t* str, + size_t n_bytes, size_t n_chars, bool copy) +{ + if (!serd_uri_string_has_scheme(str)) { + error(world, SERD_ERR_BAD_ARG, + "attempt to map invalid URI `%s'\n", str); + return NULL; // Can't intern relative URIs + } + + const SordNode key = { + { str, n_bytes, n_chars, 0, SERD_URI }, 1, { { 0 } } + }; + + return sord_insert_node(world, &key, copy); +} + +SordNode* +sord_new_uri(SordWorld* world, const uint8_t* str) +{ + const SerdNode node = serd_node_from_string(SERD_URI, str); + return sord_new_uri_counted(world, str, node.n_bytes, node.n_chars, true); +} + +SordNode* +sord_new_relative_uri(SordWorld* world, + const uint8_t* str, + const uint8_t* base_str) +{ + if (serd_uri_string_has_scheme(str)) { + return sord_new_uri(world, str); + } + SerdURI buri = SERD_URI_NULL; + SerdNode base = serd_node_new_uri_from_string(base_str, NULL, &buri); + SerdNode node = serd_node_new_uri_from_string(str, &buri, NULL); + + SordNode* ret = sord_new_uri_counted( + world, node.buf, node.n_bytes, node.n_chars, false); + + serd_node_free(&base); + return ret; +} + +static SordNode* +sord_new_blank_counted(SordWorld* world, const uint8_t* str, + size_t n_bytes, size_t n_chars) +{ + const SordNode key = { + { str, n_bytes, n_chars, 0, SERD_BLANK }, 1, { { 0 } } + }; + + return sord_insert_node(world, &key, true); +} + +SordNode* +sord_new_blank(SordWorld* world, const uint8_t* str) +{ + const SerdNode node = serd_node_from_string(SERD_URI, str); + return sord_new_blank_counted(world, str, node.n_bytes, node.n_chars); +} + +static SordNode* +sord_new_literal_counted(SordWorld* world, + SordNode* datatype, + const uint8_t* str, + size_t n_bytes, + size_t n_chars, + SerdNodeFlags flags, + const char* lang) +{ + SordNode key = { + { str, n_bytes, n_chars, flags, SERD_LITERAL }, 1, { { 0 } } + }; + key.meta.lit.datatype = datatype; + memset(key.meta.lit.lang, 0, sizeof(key.meta.lit.lang)); + if (lang) { + strncpy(key.meta.lit.lang, lang, sizeof(key.meta.lit.lang)); + } + + return sord_insert_node(world, &key, true); +} + +SordNode* +sord_new_literal(SordWorld* world, SordNode* datatype, + const uint8_t* str, const char* lang) +{ + SerdNodeFlags flags = 0; + size_t n_bytes = 0; + size_t n_chars = serd_strlen(str, &n_bytes, &flags); + return sord_new_literal_counted(world, datatype, + str, n_bytes, n_chars, flags, + lang); +} + +SordNode* +sord_node_from_serd_node(SordWorld* world, + SerdEnv* env, + const SerdNode* sn, + const SerdNode* datatype, + const SerdNode* lang) +{ + if (!sn) { + return NULL; + } + + SordNode* datatype_node = NULL; + SordNode* ret = NULL; + switch (sn->type) { + case SERD_NOTHING: + return NULL; + case SERD_LITERAL: + datatype_node = sord_node_from_serd_node( + world, env, datatype, NULL, NULL), + ret = sord_new_literal_counted( + world, + datatype_node, + sn->buf, + sn->n_bytes, + sn->n_chars, + sn->flags, + lang ? (const char*)lang->buf : NULL); + sord_node_free(world, datatype_node); + return ret; + case SERD_URI: + if (serd_uri_string_has_scheme(sn->buf)) { + return sord_new_uri_counted( + world, sn->buf, sn->n_bytes, sn->n_chars, true); + } else { + SerdURI base_uri; + serd_env_get_base_uri(env, &base_uri); + SerdURI abs_uri; + SerdNode abs_uri_node = serd_node_new_uri_from_node( + sn, &base_uri, &abs_uri); + ret = sord_new_uri_counted(world, + abs_uri_node.buf, + abs_uri_node.n_bytes, + abs_uri_node.n_chars, + true); + serd_node_free(&abs_uri_node); + return ret; + } + case SERD_CURIE: { + SerdChunk uri_prefix; + SerdChunk uri_suffix; + if (serd_env_expand(env, sn, &uri_prefix, &uri_suffix)) { + error(world, SERD_ERR_BAD_CURIE, + "failed to expand CURIE `%s'\n", sn->buf); + return NULL; + } + const size_t uri_len = uri_prefix.len + uri_suffix.len; + uint8_t* buf = (uint8_t*)malloc(uri_len + 1); + memcpy(buf, uri_prefix.buf, uri_prefix.len); + memcpy(buf + uri_prefix.len, uri_suffix.buf, uri_suffix.len); + buf[uri_len] = '\0'; + ret = sord_new_uri_counted( + world, buf, uri_prefix.len + uri_suffix.len, + uri_prefix.len + uri_suffix.len, false); // FIXME: UTF-8 + return ret; + } + case SERD_BLANK: + return sord_new_blank_counted(world, sn->buf, sn->n_bytes, sn->n_chars); + } + return NULL; +} + +const SerdNode* +sord_node_to_serd_node(const SordNode* node) +{ + return node ? &node->node : &SERD_NODE_NULL; +} + +void +sord_node_free(SordWorld* world, SordNode* node) +{ + if (!node) { + return; + } + + assert(node->refs > 0); + if (--node->refs == 0) { + sord_node_free_internal(world, node); + } +} + +SordNode* +sord_node_copy(const SordNode* node) +{ + SordNode* copy = (SordNode*)node; + if (copy) { + ++copy->refs; + } + return copy; +} + +static inline bool +sord_add_to_index(SordModel* sord, const SordNode** tup, SordOrder order) +{ + return !zix_tree_insert(sord->indices[order], tup, NULL); +} + +bool +sord_add(SordModel* sord, const SordQuad tup) +{ + SORD_WRITE_LOG("Add " TUP_FMT "\n", TUP_FMT_ARGS(tup)); + if (!tup[0] || !tup[1] || !tup[2]) { + error(sord->world, SERD_ERR_BAD_ARG, + "attempt to add quad with NULL field\n"); + return false; + } + + const SordNode** quad = (const SordNode**)malloc(sizeof(SordQuad)); + memcpy(quad, tup, sizeof(SordQuad)); + + for (unsigned i = 0; i < NUM_ORDERS; ++i) { + if (sord->indices[i]) { + if (!sord_add_to_index(sord, quad, (SordOrder)i)) { + assert(i == 0); // Assuming index coherency + free(quad); + return false; // Quad already stored, do nothing + } + } + } + + for (int i = 0; i < TUP_LEN; ++i) + sord_add_quad_ref(sord, tup[i], (SordQuadIndex)i); + + ++sord->n_quads; + return true; +} + +void +sord_remove(SordModel* sord, const SordQuad tup) +{ + SORD_WRITE_LOG("Remove " TUP_FMT "\n", TUP_FMT_ARGS(tup)); + + SordNode** quad = NULL; + for (unsigned i = 0; i < NUM_ORDERS; ++i) { + if (sord->indices[i]) { + ZixTreeIter* const cur = index_search(sord->indices[i], tup); + if (!zix_tree_iter_is_end(cur)) { + if (!quad) { + quad = (SordNode**)zix_tree_get(cur); + } + zix_tree_remove(sord->indices[i], cur); + } else { + assert(i == 0); // Assuming index coherency + return; // Quad not found, do nothing + } + } + } + + free(quad); + + for (int i = 0; i < TUP_LEN; ++i) + sord_drop_quad_ref(sord, tup[i], (SordQuadIndex)i); + + --sord->n_quads; +} diff --git a/source/libs/lilv/sord-0.10.4/src/sord_internal.h b/source/libs/lilv/sord-0.10.4/src/sord_internal.h new file mode 100644 index 000000000..16d6ef2b5 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/sord_internal.h @@ -0,0 +1,46 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef SORD_SORD_INTERNAL_H +#define SORD_SORD_INTERNAL_H + +#include +#include + +#include "sord/sord.h" + +/** Resource node metadata */ +typedef struct { + size_t refs_as_obj; ///< References as a quad object +} SordResourceMetadata; + +/** Literal node metadata */ +typedef struct { + SordNode* datatype; ///< Optional literal data type URI + char lang[16]; ///< Optional language tag +} SordLiteralMetadata; + +/** Node */ +struct SordNodeImpl { + SerdNode node; ///< Serd node + size_t refs; ///< Reference count (# of containing quads) + union { + SordResourceMetadata res; + SordLiteralMetadata lit; + } meta; +}; + +#endif /* SORD_SORD_INTERNAL_H */ diff --git a/source/libs/lilv/sord-0.10.4/src/sord_test.c b/source/libs/lilv/sord-0.10.4/src/sord_test.c new file mode 100644 index 000000000..a7a74e5e7 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/sord_test.c @@ -0,0 +1,535 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include + +#include "sord/sord.h" + +static const int DIGITS = 3; +static const int MAX_NUM = 999; +static const unsigned n_objects_per = 2; + +typedef struct { + SordQuad query; + int expected_num_results; +} QueryTest; + +#define USTR(s) ((const uint8_t*)(s)) + +static SordNode* +uri(SordWorld* world, int num) +{ + if (num == 0) + return 0; + + char str[] = "eg:000"; + char* uri_num = str + 3; // First `0' + snprintf(uri_num, DIGITS + 1, "%0*d", DIGITS, num); + return sord_new_uri(world, (const uint8_t*)str); +} + +static int +test_fail(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stderr, "error: "); + vfprintf(stderr, fmt, args); + va_end(args); + return 1; +} + +static int +generate(SordWorld* world, + SordModel* sord, + size_t n_quads, + SordNode* graph) +{ + fprintf(stderr, "Generating %zu (S P *) quads with %u objects each\n", + n_quads, n_objects_per); + + for (size_t i = 0; i < n_quads; ++i) { + int num = (i * n_objects_per) + 1; + + SordNode* ids[2 + n_objects_per]; + for (unsigned j = 0; j < 2 + n_objects_per; ++j) { + ids[j] = uri(world, num++); + } + + for (unsigned j = 0; j < n_objects_per; ++j) { + SordQuad tup = { ids[0], ids[1], ids[2 + j] }; + if (!sord_add(sord, tup)) { + return test_fail("Fail: Failed to add quad\n"); + } + } + + for (unsigned j = 0; j < 2 + n_objects_per; ++j) { + sord_node_free(world, ids[j]); + } + } + + // Add some literals + + // (98 4 "hello") and (98 4 "hello"^^<5>) + SordQuad tup = { 0, 0, 0, 0}; + tup[0] = uri(world, 98); + tup[1] = uri(world, 4); + tup[2] = sord_new_literal(world, 0, USTR("hello"), NULL); + tup[3] = 0; + sord_add(sord, tup); + sord_node_free(world, (SordNode*)tup[2]); + tup[2] = sord_new_literal(world, uri(world, 5), USTR("hello"), NULL); + if (!sord_add(sord, tup)) { + return test_fail("Failed to add typed literal\n"); + } + + // (96 4 "hello"^^<4>) and (96 4 "hello"^^<5>) + tup[0] = uri(world, 96); + tup[1] = uri(world, 4); + tup[2] = sord_new_literal(world, uri(world, 4), USTR("hello"), NULL); + tup[3] = 0; + sord_add(sord, tup); + sord_node_free(world, (SordNode*)tup[2]); + tup[2] = sord_new_literal(world, uri(world, 5), USTR("hello"), NULL); + if (!sord_add(sord, tup)) { + return test_fail("Failed to add typed literal\n"); + } + + // (94 5 "hello") and (94 5 "hello"@en-gb) + tup[0] = uri(world, 94); + tup[1] = uri(world, 5); + tup[2] = sord_new_literal(world, 0, USTR("hello"), NULL); + tup[3] = 0; + sord_add(sord, tup); + sord_node_free(world, (SordNode*)tup[2]); + tup[2] = sord_new_literal(world, NULL, USTR("hello"), "en-gb"); + if (!sord_add(sord, tup)) { + return test_fail("Failed to add literal with language\n"); + } + + // (92 6 "hello"@en-us) and (92 5 "hello"@en-gb) + tup[0] = uri(world, 92); + tup[1] = uri(world, 6); + tup[2] = sord_new_literal(world, 0, USTR("hello"), "en-us"); + tup[3] = 0; + sord_add(sord, tup); + sord_node_free(world, (SordNode*)tup[2]); + tup[2] = sord_new_literal(world, NULL, USTR("hello"), "en-gb"); + if (!sord_add(sord, tup)) { + return test_fail("Failed to add literal with language\n"); + } + + sord_node_free(world, (SordNode*)tup[0]); + sord_node_free(world, (SordNode*)tup[2]); + tup[0] = uri(world, 14); + tup[2] = sord_new_literal(world, 0, USTR("bonjour"), "fr"); + sord_add(sord, tup); + sord_node_free(world, (SordNode*)tup[2]); + tup[2] = sord_new_literal(world, 0, USTR("salut"), "fr"); + sord_add(sord, tup); + + // Attempt to add some duplicates + if (sord_add(sord, tup)) { + return test_fail("Fail: Successfully added duplicate quad\n"); + } + if (sord_add(sord, tup)) { + return test_fail("Fail: Successfully added duplicate quad\n"); + } + + // Add a blank node subject + sord_node_free(world, (SordNode*)tup[0]); + tup[0] = sord_new_blank(world, USTR("ablank")); + sord_add(sord, tup); + + sord_node_free(world, (SordNode*)tup[1]); + sord_node_free(world, (SordNode*)tup[2]); + tup[1] = uri(world, 6); + tup[2] = uri(world, 7); + sord_add(sord, tup); + sord_node_free(world, (SordNode*)tup[0]); + sord_node_free(world, (SordNode*)tup[1]); + sord_node_free(world, (SordNode*)tup[2]); + + return EXIT_SUCCESS; +} + +#define TUP_FMT "(%6s %6s %6s)" +#define TUP_FMT_ARGS(t) \ + ((t)[0] ? sord_node_get_string((t)[0]) : USTR("*")), \ + ((t)[1] ? sord_node_get_string((t)[1]) : USTR("*")), \ + ((t)[2] ? sord_node_get_string((t)[2]) : USTR("*")) + +static int +test_read(SordWorld* world, SordModel* sord, SordNode* g, + const size_t n_quads) +{ + int ret = EXIT_SUCCESS; + + SordQuad id; + + SordIter* iter = sord_begin(sord); + if (sord_iter_get_model(iter) != sord) { + return test_fail("Fail: Iterator has incorrect sord pointer\n"); + } + + for (; !sord_iter_end(iter); sord_iter_next(iter)) + sord_iter_get(iter, id); + + // Attempt to increment past end + if (!sord_iter_next(iter)) { + return test_fail("Fail: Successfully incremented past end\n"); + } + + sord_iter_free(iter); + + const uint8_t* s = USTR("hello"); + SordNode* plain_hello = sord_new_literal(world, 0, s, NULL); + SordNode* type4_hello = sord_new_literal(world, uri(world, 4), s, NULL); + SordNode* type5_hello = sord_new_literal(world, uri(world, 5), s, NULL); + SordNode* gb_hello = sord_new_literal(world, NULL, s, "en-gb"); + SordNode* us_hello = sord_new_literal(world, NULL, s, "en-us"); + +#define NUM_PATTERNS 17 + + QueryTest patterns[NUM_PATTERNS] = { + { { 0, 0, 0 }, (n_quads * n_objects_per) + 12 }, + { { uri(world, 9), uri(world, 9), uri(world, 9) }, 0 }, + { { uri(world, 1), uri(world, 2), uri(world, 4) }, 1 }, + { { uri(world, 3), uri(world, 4), uri(world, 0) }, 2 }, + { { uri(world, 0), uri(world, 2), uri(world, 4) }, 1 }, + { { uri(world, 0), uri(world, 0), uri(world, 4) }, 1 }, + { { uri(world, 1), uri(world, 0), uri(world, 0) }, 2 }, + { { uri(world, 1), uri(world, 0), uri(world, 4) }, 1 }, + { { uri(world, 0), uri(world, 2), uri(world, 0) }, 2 }, + { { uri(world, 98), uri(world, 4), plain_hello }, 1 }, + { { uri(world, 98), uri(world, 4), type5_hello }, 1 }, + { { uri(world, 96), uri(world, 4), type4_hello }, 1 }, + { { uri(world, 96), uri(world, 4), type5_hello }, 1 }, + { { uri(world, 94), uri(world, 5), plain_hello }, 1 }, + { { uri(world, 94), uri(world, 5), gb_hello }, 1 }, + { { uri(world, 92), uri(world, 6), gb_hello }, 1 }, + { { uri(world, 92), uri(world, 6), us_hello }, 1 } }; + + SordQuad match = { uri(world, 1), uri(world, 2), uri(world, 4), g }; + if (!sord_contains(sord, match)) { + return test_fail("Fail: No match for " TUP_FMT "\n", + TUP_FMT_ARGS(match)); + } + + SordQuad nomatch = { uri(world, 1), uri(world, 2), uri(world, 9), g }; + if (sord_contains(sord, nomatch)) { + return test_fail("Fail: False match for " TUP_FMT "\n", + TUP_FMT_ARGS(nomatch)); + } + + for (unsigned i = 0; i < NUM_PATTERNS; ++i) { + QueryTest test = patterns[i]; + SordQuad pat = { test.query[0], test.query[1], test.query[2], g }; + fprintf(stderr, "Query " TUP_FMT "... ", TUP_FMT_ARGS(pat)); + + iter = sord_find(sord, pat); + int num_results = 0; + for (; !sord_iter_end(iter); sord_iter_next(iter)) { + sord_iter_get(iter, id); + ++num_results; + if (!sord_quad_match(pat, id)) { + sord_iter_free(iter); + return test_fail( + "Fail: Query result " TUP_FMT " does not match pattern\n", + TUP_FMT_ARGS(id)); + } + } + sord_iter_free(iter); + if (num_results != test.expected_num_results) { + return test_fail("Fail: Expected %d results, got %d\n", + test.expected_num_results, num_results); + } + fprintf(stderr, "OK (%u matches)\n", test.expected_num_results); + } + + // Query blank node subject + SordQuad pat = { sord_new_blank(world, USTR("ablank")), 0, 0 }; + if (!pat[0]) { + return test_fail("Blank node subject lost\n"); + } + fprintf(stderr, "Query " TUP_FMT "... ", TUP_FMT_ARGS(pat)); + iter = sord_find(sord, pat); + int num_results = 0; + for (; !sord_iter_end(iter); sord_iter_next(iter)) { + sord_iter_get(iter, id); + ++num_results; + if (!sord_quad_match(pat, id)) { + sord_iter_free(iter); + return test_fail( + "Fail: Query result " TUP_FMT " does not match pattern\n", + TUP_FMT_ARGS(id)); + } + } + fprintf(stderr, "OK\n"); + sord_node_free(world, (SordNode*)pat[0]); + sord_iter_free(iter); + if (num_results != 2) { + return test_fail("Blank node subject query failed\n"); + } + + // Test nested queries + fprintf(stderr, "Nested Queries... "); + const SordNode* last_subject = 0; + iter = sord_search(sord, NULL, NULL, NULL, NULL); + for (; !sord_iter_end(iter); sord_iter_next(iter)) { + sord_iter_get(iter, id); + if (id[0] == last_subject) + continue; + + SordQuad subpat = { id[0], 0, 0 }; + SordIter* subiter = sord_find(sord, subpat); + uint64_t num_sub_results = 0; + if (sord_iter_get_node(subiter, SORD_SUBJECT) != id[0]) { + return test_fail("Fail: Incorrect initial submatch\n"); + } + for (; !sord_iter_end(subiter); sord_iter_next(subiter)) { + SordQuad subid; + sord_iter_get(subiter, subid); + if (!sord_quad_match(subpat, subid)) { + sord_iter_free(iter); + sord_iter_free(subiter); + return test_fail( + "Fail: Nested query result does not match pattern\n"); + } + ++num_sub_results; + } + sord_iter_free(subiter); + if (num_sub_results != n_objects_per) { + return test_fail( + "Fail: Nested query " TUP_FMT " failed" + " (%d results, expected %d)\n", + TUP_FMT_ARGS(subpat), num_sub_results, n_objects_per); + } + + uint64_t count = sord_count(sord, id[0], 0, 0, 0); + if (count != num_sub_results) { + return test_fail("Fail: Query " TUP_FMT " sord_count() %d" + "does not match result count %d\n", + TUP_FMT_ARGS(subpat), count, num_sub_results); + } + + last_subject = id[0]; + } + fprintf(stderr, "OK\n\n"); + sord_iter_free(iter); + + return ret; +} + +int +main(int argc, char** argv) +{ + static const size_t n_quads = 300; + + sord_free(NULL); // Shouldn't crash + + SordWorld* world = sord_world_new(); + + // Create with minimal indexing + SordModel* sord = sord_new(world, SORD_SPO, false); + generate(world, sord, n_quads, NULL); + + if (test_read(world, sord, NULL, n_quads)) { + sord_free(sord); + sord_world_free(world); + return EXIT_FAILURE; + } + + // Check adding tuples with NULL fields fails + const size_t initial_num_quads = sord_num_quads(sord); + SordQuad tup = { 0, 0, 0, 0}; + if (sord_add(sord, tup)) { + return test_fail("Added NULL tuple\n"); + } + tup[0] = uri(world, 1); + if (sord_add(sord, tup)) { + return test_fail("Added tuple with NULL P and O\n"); + } + tup[1] = uri(world, 2); + if (sord_add(sord, tup)) { + return test_fail("Added tuple with NULL O\n"); + } + + if (sord_num_quads(sord) != initial_num_quads) { + return test_fail("Num quads %zu != %zu\n", + sord_num_quads(sord), initial_num_quads); + } + + // Check interning merges equivalent values + SordNode* uri_id = sord_new_uri(world, USTR("http://example.org")); + SordNode* blank_id = sord_new_blank(world, USTR("testblank")); + SordNode* lit_id = sord_new_literal(world, uri_id, USTR("hello"), NULL); + if (sord_node_get_type(uri_id) != SORD_URI) { + return test_fail("URI node has incorrect type\n"); + } else if (sord_node_get_type(blank_id) != SORD_BLANK) { + return test_fail("Blank node has incorrect type\n"); + } else if (sord_node_get_type(lit_id) != SORD_LITERAL) { + return test_fail("Literal node has incorrect type\n"); + } + + const size_t initial_num_nodes = sord_num_nodes(world); + + SordNode* uri_id2 = sord_new_uri(world, USTR("http://example.org")); + SordNode* blank_id2 = sord_new_blank(world, USTR("testblank")); + SordNode* lit_id2 = sord_new_literal(world, uri_id, USTR("hello"), NULL); + if (uri_id2 != uri_id || !sord_node_equals(uri_id2, uri_id)) { + fprintf(stderr, "Fail: URI interning failed (duplicates)\n"); + goto fail; + } else if (blank_id2 != blank_id + || !sord_node_equals(blank_id2, blank_id)) { + fprintf(stderr, "Fail: Blank node interning failed (duplicates)\n"); + goto fail; + } else if (lit_id2 != lit_id || !sord_node_equals(lit_id2, lit_id)) { + fprintf(stderr, "Fail: Literal interning failed (duplicates)\n"); + goto fail; + } + + size_t len; + const uint8_t* str = sord_node_get_string_counted(lit_id2, &len); + if (strcmp((const char*)str, "hello")) { + return test_fail("Literal node corrupt\n"); + } else if (len != strlen("hello")) { + return test_fail("Literal length incorrect\n"); + } + + if (sord_num_nodes(world) != initial_num_nodes) { + return test_fail("Num nodes %zu != %zu\n", + sord_num_nodes(world), initial_num_nodes); + } + + // Check interning doesn't clash non-equivalent values + SordNode* uri_id3 = sord_new_uri(world, USTR("http://example.orgX")); + SordNode* blank_id3 = sord_new_blank(world, USTR("testblankX")); + SordNode* lit_id3 = sord_new_literal(world, uri_id, USTR("helloX"), NULL); + if (uri_id3 == uri_id || sord_node_equals(uri_id3, uri_id)) { + fprintf(stderr, "Fail: URI interning failed (clash)\n"); + goto fail; + } else if (blank_id3 == blank_id || sord_node_equals(blank_id3, blank_id)) { + fprintf(stderr, "Fail: Blank node interning failed (clash)\n"); + goto fail; + } else if (lit_id3 == lit_id || sord_node_equals(lit_id3, lit_id)) { + fprintf(stderr, "Fail: Literal interning failed (clash)\n"); + goto fail; + } + + // Check literal interning + SordNode* lit4 = sord_new_literal(world, NULL, USTR("hello"), NULL); + SordNode* lit5 = sord_new_literal(world, uri_id2, USTR("hello"), NULL); + SordNode* lit6 = sord_new_literal(world, NULL, USTR("hello"), "en-ca"); + if (lit4 == lit5 || sord_node_equals(lit4, lit5) + || lit4 == lit6 || sord_node_equals(lit4, lit6) + || lit5 == lit6 || sord_node_equals(lit5, lit6)) { + fprintf(stderr, "Fail: Literal interning failed (type/lang clash)\n"); + goto fail; + } + + // Check relative URI construction + SordNode* reluri = sord_new_relative_uri( + world, USTR("a/b"), USTR("http://example.org/")); + if (strcmp((const char*)sord_node_get_string(reluri), + "http://example.org/a/b")) { + fprintf(stderr, "Fail: Bad relative URI constructed: <%s>\n", + sord_node_get_string(reluri)); + goto fail; + } + SordNode* reluri2 = sord_new_relative_uri( + world, USTR("http://drobilla.net/"), USTR("http://example.org/")); + if (strcmp((const char*)sord_node_get_string(reluri2), + "http://drobilla.net/")) { + fprintf(stderr, "Fail: Bad relative URI constructed: <%s>\n", + sord_node_get_string(reluri)); + goto fail; + } + + // Check comparison with NULL + sord_node_free(world, uri_id); + sord_node_free(world, blank_id); + sord_node_free(world, lit_id); + sord_node_free(world, uri_id2); + sord_node_free(world, blank_id2); + sord_node_free(world, lit_id2); + sord_node_free(world, uri_id3); + sord_node_free(world, blank_id3); + sord_node_free(world, lit_id3); + sord_free(sord); + + static const char* const index_names[6] = { + "spo", "sop", "ops", "osp", "pso", "pos" + }; + + for (int i = 0; i < 6; ++i) { + sord = sord_new(world, (1 << i), false); + printf("Testing Index `%s'\n", index_names[i]); + generate(world, sord, n_quads, 0); + if (test_read(world, sord, 0, n_quads)) + goto fail; + sord_free(sord); + } + + static const char* const graph_index_names[6] = { + "gspo", "gsop", "gops", "gosp", "gpso", "gpos" + }; + + for (int i = 0; i < 6; ++i) { + sord = sord_new(world, (1 << i), true); + printf("Testing Index `%s'\n", graph_index_names[i]); + SordNode* graph = uri(world, 42); + generate(world, sord, n_quads, graph); + if (test_read(world, sord, graph, n_quads)) + goto fail; + sord_free(sord); + } + + // Test removing + sord = sord_new(world, SORD_SPO, false); + tup[0] = uri(world, 1); + tup[1] = uri(world, 2); + tup[2] = sord_new_literal(world, 0, USTR("hello"), NULL); + tup[3] = 0; + sord_add(sord, tup); + if (!sord_ask(sord, tup[0], tup[1], tup[2], tup[3])) { + fprintf(stderr, "Failed to add tuple\n"); + goto fail; + } + sord_node_free(world, (SordNode*)tup[2]); + tup[2] = sord_new_literal(world, 0, USTR("hi"), NULL); + sord_add(sord, tup); + sord_remove(sord, tup); + if (sord_num_quads(sord) != 1) { + fprintf(stderr, "Removed failed (%zu quads, expected 1)\n", + sord_num_quads(sord)); + goto fail; + } + + sord_free(sord); + + sord_world_free(world); + + return EXIT_SUCCESS; + +fail: + sord_free(sord); + sord_world_free(world); + return EXIT_FAILURE; +} diff --git a/source/libs/lilv/sord-0.10.4/src/sord_validate.c b/source/libs/lilv/sord-0.10.4/src/sord_validate.c new file mode 100644 index 000000000..2418b87ea --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/sord_validate.c @@ -0,0 +1,550 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#define _BSD_SOURCE // for realpath + +#include +#include +#include + +#ifdef _WIN32 +# include +#endif + +#include "serd/serd.h" +#include "sord/sord.h" +#include "sord_config.h" + +#ifdef HAVE_PCRE +# include +#endif + +#define USTR(s) ((const uint8_t*)s) + +#define NS_foaf (const uint8_t*)"http://xmlns.com/foaf/0.1/" +#define NS_owl (const uint8_t*)"http://www.w3.org/2002/07/owl#" +#define NS_rdf (const uint8_t*)"http://www.w3.org/1999/02/22-rdf-syntax-ns#" +#define NS_rdfs (const uint8_t*)"http://www.w3.org/2000/01/rdf-schema#" +#define NS_xsd (const uint8_t*)"http://www.w3.org/2001/XMLSchema#" + +typedef struct { + SordNode* foaf_Document; + SordNode* owl_AnnotationProperty; + SordNode* owl_Class; + SordNode* owl_DatatypeProperty; + SordNode* owl_FunctionalProperty; + SordNode* owl_InverseFunctionalProperty; + SordNode* owl_ObjectProperty; + SordNode* owl_OntologyProperty; + SordNode* owl_Thing; + SordNode* owl_equivalentClass; + SordNode* owl_onDatatype; + SordNode* owl_withRestrictions; + SordNode* rdf_Property; + SordNode* rdf_first; + SordNode* rdf_rest; + SordNode* rdf_type; + SordNode* rdfs_Class; + SordNode* rdfs_Literal; + SordNode* rdfs_Resource; + SordNode* rdfs_domain; + SordNode* rdfs_range; + SordNode* rdfs_subClassOf; + SordNode* xsd_decimal; + SordNode* xsd_maxInclusive; + SordNode* xsd_minInclusive; + SordNode* xsd_pattern; + SordNode* xsd_string; +} URIs; + +int n_errors = 0; +int n_restrictions = 0; +bool one_line_errors = false; + +static int +print_version(void) +{ + printf("sord_validate " SORD_VERSION + " \n"); + printf("Copyright 2012 David Robillard .\n" + "License: \n" + "This is free software; you are free to change and redistribute it." + "\nThere is NO WARRANTY, to the extent permitted by law.\n"); + return 0; +} + +static int +print_usage(const char* name, bool error) +{ + FILE* const os = error ? stderr : stdout; + fprintf(os, "Usage: %s [OPTION]... INPUT...\n", name); + fprintf(os, "Validate RDF data\n\n"); + fprintf(os, " -h Display this help and exit\n"); + fprintf(os, " -l Print errors on a single line.\n"); + fprintf(os, " -v Display version information and exit\n"); + fprintf(os, + "Validate RDF data. This is a simple validator which checks\n" + "that all used properties are actually defined. It does not do\n" + "any fancy file retrieval, the files passed on the command line\n" + "are the only data that is read. In other words, you must pass\n" + "the definition of all vocabularies used on the command line.\n"); + return error ? 1 : 0; +} + +static uint8_t* +absolute_path(const uint8_t* path) +{ +#ifdef _WIN32 + char* out = (char*)malloc(MAX_PATH); + GetFullPathName((const char*)path, MAX_PATH, out, NULL); + return (uint8_t*)out; +#else + return (uint8_t*)realpath((const char*)path, NULL); +#endif +} + +static void +error(const char* msg, const SordQuad quad) +{ + const char* sep = one_line_errors ? "\t" : "\n "; + ++n_errors; + fprintf(stderr, "error: %s:%s%s%s%s%s%s\n", + msg, + sep, (const char*)sord_node_get_string(quad[SORD_SUBJECT]), + sep, (const char*)sord_node_get_string(quad[SORD_PREDICATE]), + sep, (const char*)sord_node_get_string(quad[SORD_OBJECT])); +} + +static bool +is_descendant_of(SordModel* model, + const URIs* uris, + const SordNode* child, + const SordNode* parent, + const SordNode* pred) +{ + if (!child) { + return false; + } else if (sord_node_equals(child, parent) || + sord_ask(model, child, uris->owl_equivalentClass, parent, NULL)) { + return true; + } + + SordIter* i = sord_search(model, child, pred, NULL, NULL); + for (; !sord_iter_end(i); sord_iter_next(i)) { + const SordNode* o = sord_iter_get_node(i, SORD_OBJECT); + if (sord_node_equals(child, o)) { + continue; // Weird class is explicitly a descendent of itself + } + if (is_descendant_of(model, uris, o, parent, pred)) { + sord_iter_free(i); + return true; + } + } + sord_iter_free(i); + + return false; +} + +static bool +regexp_match(const uint8_t* pat, const char* str) +{ +#ifdef HAVE_PCRE + // Append a $ to the pattern so we only match if the entire string matches + const size_t len = strlen((const char*)pat); + char* const regx = malloc(len + 2); + memcpy(regx, pat, len); + regx[len] = '$'; + regx[len + 1] = '\0'; + + const char* err; + int erroffset; + pcre* re = pcre_compile(regx, PCRE_ANCHORED, &err, &erroffset, NULL); + free(regx); + if (!re) { + fprintf(stderr, "Error in pattern `%s' at offset %d (%s)\n", + pat, erroffset, err); + return false; + } + + const bool ret = pcre_exec(re, NULL, str, strlen(str), 0, 0, NULL, 0) >= 0; + pcre_free(re); + return ret; +#endif // HAVE_PCRE + return true; +} + +static bool +check_restriction(SordModel* model, + const URIs* uris, + const SordNode* literal, + const SordNode* type, + const SordNode* restriction) +{ + size_t len = 0; + const char* str = (const char*)sord_node_get_string_counted(literal, &len); + ++n_restrictions; + + // Check xsd:pattern + SordIter* p = sord_search(model, restriction, uris->xsd_pattern, 0, 0); + if (p) { + const SordNode* pat = sord_iter_get_node(p, SORD_OBJECT); + const bool good = regexp_match(sord_node_get_string(pat), str); + if (!good) { + fprintf(stderr, "`%s' does not match <%s> pattern `%s'\n", + sord_node_get_string(literal), + sord_node_get_string(type), + sord_node_get_string(pat)); + } + + sord_iter_free(p); + return good; + } + + /* We'll do some comparison tricks for xsd:decimal types, where + lexicographical comparison would be incorrect. Note that if the + literal's type is a descendant of xsd:decimal, we'll end up checking it + against the xsd:decimal pattern so there's no need to validate digits + here. At worst we'll get a false positive but it will fail later. */ + const bool is_decimal = is_descendant_of( + model, uris, type, uris->xsd_decimal, uris->owl_onDatatype); + + // Check xsd:minInclusive + SordIter* l = sord_search(model, restriction, uris->xsd_minInclusive, 0, 0); + if (l) { + const SordNode* lower = sord_iter_get_node(l, SORD_OBJECT); + size_t lower_len = 0; + const char* lower_str = (const char*)sord_node_get_string_counted(lower, &lower_len); + bool good = false; + if (!is_decimal || len == lower_len) { + // Not decimal, or equal lengths, strcmp + good = (strcmp(str, lower_str) >= 0); + } else { + // Decimal with different length, only good if longer than the min + good = (len > lower_len); + } + if (!good) { + fprintf(stderr, "`%s' is not >= <%s> minimum `%s'\n", + sord_node_get_string(literal), + sord_node_get_string(type), + sord_node_get_string(lower)); + } + + sord_iter_free(l); + return good; + } + + // Check xsd:maxInclusive + SordIter* u = sord_search(model, restriction, uris->xsd_maxInclusive, 0, 0); + if (u) { + const SordNode* upper = sord_iter_get_node(u, SORD_OBJECT); + size_t upper_len = 0; + const char* upper_str = (const char*)sord_node_get_string_counted(upper, &upper_len); + bool good = false; + if (!is_decimal || len == upper_len) { + // Not decimal, or equal lengths, strcmp + good = (strcmp(str, upper_str) <= 0); + } else { + // Decimal with different length, only good if shorter than the max + good = (len < upper_len); + } + if (!good) { + fprintf(stderr, "`%s' is not <= <%s> maximum `%s'\n", + sord_node_get_string(literal), + sord_node_get_string(type), + sord_node_get_string(upper)); + } + + sord_iter_free(u); + return good; + } + + --n_restrictions; + return true; // Unknown restriction, be quietly tolerant +} + +static bool +literal_is_valid(SordModel* model, + const URIs* uris, + const SordNode* literal, + const SordNode* type) +{ + if (!type) { + return true; + } + + // Find restrictions list + SordIter* rs = sord_search(model, type, uris->owl_withRestrictions, 0, 0); + if (sord_iter_end(rs)) { + return true; // No restrictions + } + + // Walk list, checking each restriction + const SordNode* head = sord_iter_get_node(rs, SORD_OBJECT); + while (head) { + SordIter* f = sord_search(model, head, uris->rdf_first, 0, 0); + if (!f) { + break; // Reached end of restrictions list without failure + } + + // Check this restriction + const bool good = check_restriction( + model, uris, literal, type, sord_iter_get_node(f, SORD_OBJECT)); + sord_iter_free(f); + + if (!good) { + sord_iter_free(rs); + return false; // Failed, literal is invalid + } + + // Seek to next list node + SordIter* n = sord_search(model, head, uris->rdf_rest, 0, 0); + head = n ? sord_iter_get_node(n, SORD_OBJECT) : NULL; + sord_iter_free(n); + } + + sord_iter_free(rs); + + SordIter* s = sord_search(model, type, uris->owl_onDatatype, 0, 0); + if (s) { + const SordNode* super = sord_iter_get_node(s, SORD_OBJECT); + const bool good = literal_is_valid(model, uris, literal, super); + sord_iter_free(s); + return good; // Match iff literal also matches supertype + } + + return true; // Matches top level type +} + +static bool +check_type(SordModel* model, + URIs* uris, + const SordNode* node, + const SordNode* type) +{ + if (sord_node_equals(type, uris->rdfs_Resource) || + sord_node_equals(type, uris->owl_Thing)) { + return true; + } + + if (sord_node_get_type(node) == SORD_LITERAL) { + if (sord_node_equals(type, uris->rdfs_Literal) || + sord_node_equals(type, uris->xsd_string)) { + return true; + } else { + return literal_is_valid(model, uris, node, type); + } + } else if (sord_node_get_type(node) == SORD_URI) { + if (sord_node_equals(type, uris->foaf_Document)) { + return true; // Questionable... + } else { + SordIter* t = sord_search(model, node, uris->rdf_type, NULL, NULL); + for (; !sord_iter_end(t); sord_iter_next(t)) { + if (is_descendant_of(model, uris, + sord_iter_get_node(t, SORD_OBJECT), + type, + uris->rdfs_subClassOf)) { + sord_iter_free(t); + return true; + } + } + sord_iter_free(t); + return false; + } + } else { + return true; // Blanks often lack explicit types, ignore + } + + return false; +} + +int +main(int argc, char** argv) +{ + if (argc < 2) { + return print_usage(argv[0], true); + } + + int a = 1; + for (; a < argc && argv[a][0] == '-'; ++a) { + if (argv[a][1] == 'l') { + one_line_errors = true; + } else if (argv[a][1] == 'v') { + return print_version(); + } else { + fprintf(stderr, "%s: Unknown option `%s'\n", argv[0], argv[a]); + return print_usage(argv[0], true); + } + } + + SordWorld* world = sord_world_new(); + SordModel* model = sord_new(world, SORD_SPO|SORD_OPS, false); + SerdEnv* env = serd_env_new(&SERD_NODE_NULL); + SerdReader* reader = sord_new_reader(model, env, SERD_TURTLE, NULL); + + for (; a < argc; ++a) { + const uint8_t* input = (const uint8_t*)argv[a]; + uint8_t* in_path = absolute_path(serd_uri_to_path(input)); + + if (!in_path) { + fprintf(stderr, "Skipping file %s\n", input); + continue; + } + + SerdURI base_uri; + SerdNode base_uri_node = serd_node_new_file_uri( + in_path, NULL, &base_uri, false); + + serd_env_set_base_uri(env, &base_uri_node); + const SerdStatus st = serd_reader_read_file(reader, in_path); + if (st) { + fprintf(stderr, "error reading %s: %s\n", + in_path, serd_strerror(st)); + } + + serd_node_free(&base_uri_node); + free(in_path); + } + serd_reader_free(reader); + serd_env_free(env); + +#define URI(prefix, suffix) \ + uris.prefix##_##suffix = sord_new_uri(world, NS_##prefix #suffix) + + URIs uris; + URI(foaf, Document); + URI(owl, AnnotationProperty); + URI(owl, Class); + URI(owl, DatatypeProperty); + URI(owl, FunctionalProperty); + URI(owl, InverseFunctionalProperty); + URI(owl, ObjectProperty); + URI(owl, OntologyProperty); + URI(owl, Thing); + URI(owl, equivalentClass); + URI(owl, onDatatype); + URI(owl, withRestrictions); + URI(rdf, Property); + URI(rdf, first); + URI(rdf, rest); + URI(rdf, type); + URI(rdfs, Class); + URI(rdfs, Literal); + URI(rdfs, Resource); + URI(rdfs, domain); + URI(rdfs, range); + URI(rdfs, subClassOf); + URI(xsd, decimal); + URI(xsd, maxInclusive); + URI(xsd, minInclusive); + URI(xsd, pattern); + URI(xsd, string); + +#ifndef HAVE_PCRE + fprintf(stderr, "warning: Built without PCRE, datatypes not checked.\n"); +#endif + + SordIter* i = sord_begin(model); + for (; !sord_iter_end(i); sord_iter_next(i)) { + SordQuad quad; + sord_iter_get(i, quad); + + const SordNode* subj = quad[SORD_SUBJECT]; + const SordNode* pred = quad[SORD_PREDICATE]; + const SordNode* obj = quad[SORD_OBJECT]; + + bool is_Property = sord_ask( + model, pred, uris.rdf_type, uris.rdf_Property, 0); + bool is_OntologyProperty = sord_ask( + model, pred, uris.rdf_type, uris.owl_OntologyProperty, 0); + bool is_ObjectProperty = sord_ask( + model, pred, uris.rdf_type, uris.owl_ObjectProperty, 0); + bool is_FunctionalProperty = sord_ask( + model, pred, uris.rdf_type, uris.owl_FunctionalProperty, 0); + bool is_InverseFunctionalProperty = sord_ask( + model, pred, uris.rdf_type, uris.owl_InverseFunctionalProperty, 0); + bool is_DatatypeProperty = sord_ask( + model, pred, uris.rdf_type, uris.owl_DatatypeProperty, 0); + bool is_AnnotationProperty = sord_ask( + model, pred, uris.rdf_type, uris.owl_AnnotationProperty, 0); + + if (!is_Property && !is_OntologyProperty && !is_ObjectProperty && + !is_FunctionalProperty && !is_InverseFunctionalProperty && + !is_DatatypeProperty && !is_AnnotationProperty) { + error("Use of undefined property", quad); + } + + if (is_DatatypeProperty && + sord_node_get_type(obj) != SORD_LITERAL) { + error("Datatype property with non-literal value", quad); + } + + if (is_ObjectProperty && + sord_node_get_type(obj) == SORD_LITERAL) { + error("Object property with literal value", quad); + } + + if (is_FunctionalProperty && + sord_count(model, subj, pred, NULL, NULL) > 1) { + error("Functional property with several objects", quad); + } + + if (is_InverseFunctionalProperty && + sord_count(model, NULL, pred, obj, NULL) > 1) { + error("Inverse functional property with several subjects", quad); + } + + if (sord_node_equals(pred, uris.rdf_type) && + !sord_ask(model, obj, uris.rdf_type, uris.rdfs_Class, NULL) && + !sord_ask(model, obj, uris.rdf_type, uris.owl_Class, NULL)) { + error("Type is not a rdfs:Class or owl:Class", quad); + } + + if (sord_node_get_type(obj) == SORD_LITERAL && + !literal_is_valid(model, &uris, obj, sord_node_get_datatype(obj))) { + error("Literal does not match datatype", quad); + } + + SordIter* r = sord_search(model, pred, uris.rdfs_range, NULL, NULL); + if (r) { + const SordNode* range = sord_iter_get_node(r, SORD_OBJECT); + if (!check_type(model, &uris, obj, range)) { + error("Object not in property range", quad); + fprintf(stderr, "note: Range is <%s>\n", + sord_node_get_string(range)); + } + sord_iter_free(r); + } + + SordIter* d = sord_search(model, pred, uris.rdfs_domain, NULL, NULL); + if (d) { + const SordNode* domain = sord_iter_get_node(d, SORD_OBJECT); + if (!check_type(model, &uris, subj, domain)) { + error("Subject not in property domain", quad); + fprintf(stderr, "note: Domain is <%s>\n", + sord_node_get_string(domain)); + } + sord_iter_free(d); + } + } + sord_iter_free(i); + + printf("Found %d errors among %d files (checked %d restrictions)\n", + n_errors, argc - 1, n_restrictions); + + sord_free(model); + sord_world_free(world); + return 0; +} diff --git a/source/libs/lilv/sord-0.10.4/src/sordi.c b/source/libs/lilv/sord-0.10.4/src/sordi.c new file mode 100644 index 000000000..004c6cf13 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/sordi.c @@ -0,0 +1,215 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#define _BSD_SOURCE // for realpath + +#include +#include +#include + +#ifdef _WIN32 +# include +#endif + +#include "serd/serd.h" +#include "sord/sord.h" +#include "sord_config.h" + +typedef struct { + SerdWriter* writer; + SerdEnv* env; + SerdNode base_uri_node; + SerdURI base_uri; + SordModel* sord; +} State; + +static int +print_version(void) +{ + printf("sordi " SORD_VERSION " \n"); + printf("Copyright 2011-2012 David Robillard .\n" + "License: \n" + "This is free software; you are free to change and redistribute it." + "\nThere is NO WARRANTY, to the extent permitted by law.\n"); + return 0; +} + +static int +print_usage(const char* name, bool error) +{ + FILE* const os = error ? stderr : stdout; + fprintf(os, "Usage: %s [OPTION]... INPUT [BASE_URI]\n", name); + fprintf(os, "Load and re-serialise RDF data.\n"); + fprintf(os, "Use - for INPUT to read from standard input.\n\n"); + fprintf(os, " -h Display this help and exit\n"); + fprintf(os, " -i SYNTAX Input syntax (`turtle' or `ntriples')\n"); + fprintf(os, " -o SYNTAX Output syntax (`turtle' or `ntriples')\n"); + fprintf(os, " -s INPUT Parse INPUT as string (terminates options)\n"); + fprintf(os, " -v Display version information and exit\n"); + return error ? 1 : 0; +} + +static bool +set_syntax(SerdSyntax* syntax, const char* name) +{ + if (!strcmp(name, "turtle")) { + *syntax = SERD_TURTLE; + } else if (!strcmp(name, "ntriples")) { + *syntax = SERD_NTRIPLES; + } else { + fprintf(stderr, "Unknown input format `%s'\n", name); + return false; + } + return true; +} + +static uint8_t* +absolute_path(const uint8_t* path) +{ +#ifdef _WIN32 + char* out = (char*)malloc(MAX_PATH); + GetFullPathName((const char*)path, MAX_PATH, out, NULL); + return (uint8_t*)out; +#else + return (uint8_t*)realpath((const char*)path, NULL); +#endif +} + +int +main(int argc, char** argv) +{ + if (argc < 2) { + return print_usage(argv[0], true); + } + + FILE* in_fd = NULL; + SerdSyntax input_syntax = SERD_TURTLE; + SerdSyntax output_syntax = SERD_NTRIPLES; + bool from_file = true; + const uint8_t* in_name = NULL; + int a = 1; + for (; a < argc && argv[a][0] == '-'; ++a) { + if (argv[a][1] == '\0') { + in_name = (const uint8_t*)"(stdin)"; + in_fd = stdin; + break; + } else if (argv[a][1] == 'h') { + return print_usage(argv[0], false); + } else if (argv[a][1] == 'v') { + return print_version(); + } else if (argv[a][1] == 's') { + in_name = (const uint8_t*)"(string)"; + from_file = false; + ++a; + break; + } else if (argv[a][1] == 'i') { + if (++a == argc) { + fprintf(stderr, "Missing value for -i\n"); + return 1; + } + if (!set_syntax(&input_syntax, argv[a])) { + return 1; + } + } else if (argv[a][1] == 'o') { + if (++a == argc) { + fprintf(stderr, "Missing value for -o\n"); + return 1; + } + if (!set_syntax(&output_syntax, argv[a])) { + return 1; + } + } else { + fprintf(stderr, "Unknown option `%s'\n", argv[a]); + return print_usage(argv[0], true); + } + } + + if (a == argc) { + fprintf(stderr, "Missing input\n"); + return 1; + } + + const uint8_t* input = (const uint8_t*)argv[a++]; + uint8_t* in_path = NULL; + if (from_file) { + in_name = in_name ? in_name : input; + if (!in_fd) { + in_path = absolute_path(serd_uri_to_path(in_name)); + if (!in_path || !(in_fd = fopen((const char*)in_path, "rb"))) { + return 1; + } + } + } + + SerdURI base_uri = SERD_URI_NULL; + SerdNode base_uri_node = SERD_NODE_NULL; + if (a < argc) { // Base URI given on command line + base_uri_node = serd_node_new_uri_from_string( + (const uint8_t*)argv[a], NULL, &base_uri); + } else if (from_file) { // Use input file URI + base_uri_node = serd_node_new_file_uri(in_path, NULL, &base_uri, false); + } + + if (!base_uri_node.buf) { + fprintf(stderr, "Missing base URI\n"); + return 1; + } + + SordWorld* world = sord_world_new(); + SordModel* sord = sord_new(world, SORD_SPO|SORD_OPS, false); + SerdEnv* env = serd_env_new(&base_uri_node); + SerdReader* reader = sord_new_reader(sord, env, input_syntax, NULL); + + const SerdStatus status = (from_file) + ? serd_reader_read_file_handle(reader, in_fd, in_name) + : serd_reader_read_string(reader, input); + + serd_reader_free(reader); + + SerdEnv* write_env = serd_env_new(&base_uri_node); + + int output_style = SERD_STYLE_RESOLVED; + if (output_syntax == SERD_NTRIPLES) { + output_style |= SERD_STYLE_ASCII; + } else { + output_style |= SERD_STYLE_CURIED | SERD_STYLE_ABBREVIATED; + } + + SerdWriter* writer = serd_writer_new( + output_syntax, + (SerdStyle)output_style, + write_env, &base_uri, serd_file_sink, stdout); + + // Write @prefix directives + serd_env_foreach(env, + (SerdPrefixSink)serd_writer_set_prefix, + writer); + + // Write statements + sord_write(sord, writer, NULL); + + serd_writer_finish(writer); + serd_writer_free(writer); + + serd_env_free(env); + serd_env_free(write_env); + serd_node_free(&base_uri_node); + + sord_free(sord); + sord_world_free(world); + + return (status > SERD_FAILURE) ? 1 : 0; +} diff --git a/source/libs/lilv/sord-0.10.4/src/sordmm_test.cpp b/source/libs/lilv/sord-0.10.4/src/sordmm_test.cpp new file mode 100644 index 000000000..d0a5a3a36 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/sordmm_test.cpp @@ -0,0 +1,25 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "sord/sordmm.hpp" + +int +main(int argc, char** argv) +{ + Sord::World world; + Sord::Model model(world, "http://example.org/"); + return 0; +} diff --git a/source/libs/lilv/sord-0.10.4/src/syntax.c b/source/libs/lilv/sord-0.10.4/src/syntax.c new file mode 100644 index 000000000..9c7fa74fc --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/syntax.c @@ -0,0 +1,205 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include + +#include "serd/serd.h" + +#include "sord_config.h" +#include "sord_internal.h" + +struct SordInserterImpl { + SordModel* model; + SerdEnv* env; +}; + +SordInserter* +sord_inserter_new(SordModel* model, + SerdEnv* env) +{ + SordInserter* inserter = (SordInserter*)malloc(sizeof(SordInserter)); + inserter->model = model; + inserter->env = env; + return inserter; +} + +void +sord_inserter_free(SordInserter* inserter) +{ + free(inserter); +} + +SerdStatus +sord_inserter_set_base_uri(SordInserter* inserter, + const SerdNode* uri_node) +{ + return serd_env_set_base_uri(inserter->env, uri_node); +} + +SerdStatus +sord_inserter_set_prefix(SordInserter* inserter, + const SerdNode* name, + const SerdNode* uri_node) +{ + return serd_env_set_prefix(inserter->env, name, uri_node); +} + +SerdStatus +sord_inserter_write_statement(SordInserter* inserter, + SerdStatementFlags flags, + const SerdNode* graph, + const SerdNode* subject, + const SerdNode* predicate, + const SerdNode* object, + const SerdNode* object_datatype, + const SerdNode* object_lang) +{ + SordWorld* world = sord_get_world(inserter->model); + SerdEnv* env = inserter->env; + + SordNode* g = sord_node_from_serd_node(world, env, graph, NULL, NULL); + SordNode* s = sord_node_from_serd_node(world, env, subject, NULL, NULL); + SordNode* p = sord_node_from_serd_node(world, env, predicate, NULL, NULL); + SordNode* o = sord_node_from_serd_node(world, env, object, + object_datatype, object_lang); + + const SordQuad tup = { s, p, o, g }; + sord_add(inserter->model, tup); + + sord_node_free(world, o); + sord_node_free(world, p); + sord_node_free(world, s); + sord_node_free(world, g); + + return SERD_SUCCESS; +} + +SORD_API +SerdReader* +sord_new_reader(SordModel* model, + SerdEnv* env, + SerdSyntax syntax, + SordNode* graph) +{ + SordInserter* inserter = sord_inserter_new(model, env); + + SerdReader* reader = serd_reader_new( + syntax, inserter, (void (*)(void*))sord_inserter_free, + (SerdBaseSink)sord_inserter_set_base_uri, + (SerdPrefixSink)sord_inserter_set_prefix, + (SerdStatementSink)sord_inserter_write_statement, + NULL); + + if (graph) { + serd_reader_set_default_graph(reader, sord_node_to_serd_node(graph)); + } + + return reader; +} + +static void +write_statement(SordModel* sord, + SerdWriter* writer, + SordQuad tup, + SerdStatementFlags flags) +{ + const SordNode* s = tup[SORD_SUBJECT]; + const SordNode* p = tup[SORD_PREDICATE]; + const SordNode* o = tup[SORD_OBJECT]; + const SordNode* d = sord_node_get_datatype(o); + const SerdNode* ss = sord_node_to_serd_node(s); + const SerdNode* sp = sord_node_to_serd_node(p); + const SerdNode* so = sord_node_to_serd_node(o); + const SerdNode* sd = sord_node_to_serd_node(d); + + const char* lang_str = sord_node_get_language(o); + size_t lang_len = lang_str ? strlen(lang_str) : 0; + SerdNode language = SERD_NODE_NULL; + if (lang_str) { + language.type = SERD_LITERAL; + language.n_bytes = lang_len; + language.n_chars = lang_len; + language.buf = (const uint8_t*)lang_str; + }; + + // TODO: Subject abbreviation + + if (sord_node_is_inline_object(s) && !(flags & SERD_ANON_CONT)) { + return; + } + + SerdStatus st = SERD_SUCCESS; + if (sord_node_is_inline_object(o)) { + SordQuad sub_pat = { o, 0, 0, 0 }; + SordIter* sub_iter = sord_find(sord, sub_pat); + + SerdStatementFlags start_flags = flags + | ((sub_iter) ? SERD_ANON_O_BEGIN : SERD_EMPTY_O); + + st = serd_writer_write_statement( + writer, start_flags, NULL, ss, sp, so, sd, &language); + + if (!st && sub_iter) { + flags |= SERD_ANON_CONT; + for (; !sord_iter_end(sub_iter); sord_iter_next(sub_iter)) { + SordQuad sub_tup; + sord_iter_get(sub_iter, sub_tup); + write_statement(sord, writer, sub_tup, flags); + } + sord_iter_free(sub_iter); + serd_writer_end_anon(writer, so); + } + } else { + st = serd_writer_write_statement( + writer, flags, NULL, ss, sp, so, sd, &language); + } + + if (st) { + fprintf(stderr, "Failed to write statement (%s)\n", + serd_strerror(st)); + return; + } +} + +bool +sord_write(SordModel* model, + SerdWriter* writer, + SordNode* graph) +{ + SordQuad pat = { 0, 0, 0, graph }; + SordIter* iter = sord_find(model, pat); + return sord_write_iter(iter, writer); +} + +bool +sord_write_iter(SordIter* iter, + SerdWriter* writer) +{ + if (!iter) { + return false; + } + + SordModel* model = (SordModel*)sord_iter_get_model(iter); + for (; !sord_iter_end(iter); sord_iter_next(iter)) { + SordQuad tup; + sord_iter_get(iter, tup); + write_statement(model, writer, tup, 0); + } + sord_iter_free(iter); + return true; +} diff --git a/source/libs/lilv/sord-0.10.4/src/zix/common.h b/source/libs/lilv/sord-0.10.4/src/zix/common.h new file mode 100644 index 000000000..f126cd13a --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/zix/common.h @@ -0,0 +1,88 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef ZIX_COMMON_H +#define ZIX_COMMON_H + +/** + @addtogroup zix + @{ +*/ + +/** @cond */ +#ifdef ZIX_SHARED +# ifdef _WIN32 +# define ZIX_LIB_IMPORT __declspec(dllimport) +# define ZIX_LIB_EXPORT __declspec(dllexport) +# else +# define ZIX_LIB_IMPORT __attribute__((visibility("default"))) +# define ZIX_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef ZIX_INTERNAL +# define ZIX_API ZIX_LIB_EXPORT +# else +# define ZIX_API ZIX_LIB_IMPORT +# endif +# define ZIX_PRIVATE static +#elif defined(ZIX_INLINE) +# define ZIX_API static inline +# define ZIX_PRIVATE static inline +#else +# define ZIX_API +# define ZIX_PRIVATE static +#endif +/** @endcond */ + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +typedef enum { + ZIX_STATUS_SUCCESS, + ZIX_STATUS_ERROR, + ZIX_STATUS_NO_MEM, + ZIX_STATUS_NOT_FOUND, + ZIX_STATUS_EXISTS, + ZIX_STATUS_BAD_ARG, + ZIX_STATUS_BAD_PERMS, +} ZixStatus; + +/** + Function for comparing two elements. +*/ +typedef int (*ZixComparator)(const void* a, const void* b, void* user_data); + +/** + Function for testing equality of two elements. +*/ +typedef bool (*ZixEqualFunc)(const void* a, const void* b); + +/** + Function to destroy an element. +*/ +typedef void (*ZixDestroyFunc)(void* ptr); + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* ZIX_COMMON_H */ diff --git a/source/libs/lilv/sord-0.10.4/src/zix/digest.c b/source/libs/lilv/sord-0.10.4/src/zix/digest.c new file mode 100644 index 000000000..04f48f036 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/zix/digest.c @@ -0,0 +1,57 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "zix/digest.h" + +#ifdef __SSE4_2__ +# include +#endif + +ZIX_API uint32_t +zix_digest_start(void) +{ +#ifdef __SSE4_2__ + return 1; // CRC32 initial value +#else + return 5381; // DJB hash initial value +#endif +} + +ZIX_API uint32_t +zix_digest_add(uint32_t hash, const void* const buf, const size_t len) +{ + const uint8_t* str = (const uint8_t*)buf; +#ifdef __SSE4_2__ + // SSE 4.2 CRC32 + for (size_t i = 0; i < (len / sizeof(uint32_t)); ++i) { + hash = _mm_crc32_u32(hash, *(uint32_t*)str); + str += sizeof(uint32_t); + } + if (len & sizeof(uint16_t)) { + hash = _mm_crc32_u16(hash, *(uint16_t*)str); + str += sizeof(uint16_t); + } + if (len & sizeof(uint8_t)) { + hash = _mm_crc32_u8(hash, *(uint8_t*)str); + } +#else + // Classic DJB hash + for (size_t i = 0; i < len; ++i) { + hash = (hash << 5) + hash + str[i]; + } +#endif + return hash; +} diff --git a/source/libs/lilv/sord-0.10.4/src/zix/digest.h b/source/libs/lilv/sord-0.10.4/src/zix/digest.h new file mode 100644 index 000000000..34ab37657 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/zix/digest.h @@ -0,0 +1,39 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef ZIX_DIGEST_H +#define ZIX_DIGEST_H + +#include +#include + +#include "zix/common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +ZIX_API uint32_t +zix_digest_start(void); + +ZIX_API uint32_t +zix_digest_add(uint32_t hash, const void* buf, const size_t len); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* ZIX_DIGEST_H */ diff --git a/source/libs/lilv/sord-0.10.4/src/zix/hash.c b/source/libs/lilv/sord-0.10.4/src/zix/hash.c new file mode 100644 index 000000000..b24ee7823 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/zix/hash.c @@ -0,0 +1,228 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include + +#include "zix/hash.h" + +/** + Primes, each slightly less than twice its predecessor, and as far away + from powers of two as possible. +*/ +static const unsigned sizes[] = { + 53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593, 49157, 98317, + 196613, 393241, 786433, 1572869, 3145739, 6291469, 12582917, 25165843, + 50331653, 100663319, 201326611, 402653189, 805306457, 1610612741, 0 +}; + +typedef struct ZixHashEntry { + struct ZixHashEntry* next; ///< Next entry in bucket + uint32_t hash; ///< Non-modulo hash value + // Value follows here (access with zix_hash_value) +} ZixHashEntry; + +struct ZixHashImpl { + ZixHashFunc hash_func; + ZixEqualFunc equal_func; + ZixHashEntry** buckets; + const unsigned* n_buckets; + size_t value_size; + unsigned count; +}; + +static inline const void* +zix_hash_value(const ZixHashEntry* entry) +{ + return entry + 1; +} + +ZIX_API ZixHash* +zix_hash_new(ZixHashFunc hash_func, + ZixEqualFunc equal_func, + size_t value_size) +{ + ZixHash* hash = (ZixHash*)malloc(sizeof(ZixHash)); + hash->hash_func = hash_func; + hash->equal_func = equal_func; + hash->n_buckets = &sizes[0]; + hash->value_size = value_size; + hash->count = 0; + hash->buckets = (ZixHashEntry**)calloc(*hash->n_buckets, + sizeof(ZixHashEntry*)); + return hash; +} + +ZIX_API void +zix_hash_free(ZixHash* hash) +{ + for (unsigned b = 0; b < *hash->n_buckets; ++b) { + ZixHashEntry* bucket = hash->buckets[b]; + for (ZixHashEntry* e = bucket; e;) { + ZixHashEntry* next = e->next; + free(e); + e = next; + } + } + + free(hash->buckets); + free(hash); +} + +ZIX_API size_t +zix_hash_size(const ZixHash* hash) +{ + return hash->count; +} + +static inline void +insert_entry(ZixHashEntry** bucket, ZixHashEntry* entry) +{ + entry->next = *bucket; + *bucket = entry; +} + +static inline ZixStatus +rehash(ZixHash* hash, unsigned new_n_buckets) +{ + ZixHashEntry** new_buckets = (ZixHashEntry**)calloc( + new_n_buckets, sizeof(ZixHashEntry*)); + if (!new_buckets) { + return ZIX_STATUS_NO_MEM; + } + + const unsigned old_n_buckets = *hash->n_buckets; + for (unsigned b = 0; b < old_n_buckets; ++b) { + for (ZixHashEntry* e = hash->buckets[b]; e;) { + ZixHashEntry* const next = e->next; + const unsigned h = e->hash % new_n_buckets; + insert_entry(&new_buckets[h], e); + e = next; + } + } + + free(hash->buckets); + hash->buckets = new_buckets; + + return ZIX_STATUS_SUCCESS; +} + +static inline ZixHashEntry* +find_entry(const ZixHash* hash, + const void* key, + const unsigned h, + const unsigned h_nomod) +{ + for (ZixHashEntry* e = hash->buckets[h]; e; e = e->next) { + if (e->hash == h_nomod && hash->equal_func(zix_hash_value(e), key)) { + return e; + } + } + return NULL; +} + +ZIX_API const void* +zix_hash_find(const ZixHash* hash, const void* value) +{ + const unsigned h_nomod = hash->hash_func(value); + const unsigned h = h_nomod % *hash->n_buckets; + ZixHashEntry* const entry = find_entry(hash, value, h, h_nomod); + return entry ? zix_hash_value(entry) : 0; +} + +ZIX_API ZixStatus +zix_hash_insert(ZixHash* hash, const void* value, const void** inserted) +{ + unsigned h_nomod = hash->hash_func(value); + unsigned h = h_nomod % *hash->n_buckets; + + ZixHashEntry* elem = find_entry(hash, value, h, h_nomod); + if (elem) { + assert(elem->hash == h_nomod); + if (inserted) { + *inserted = zix_hash_value(elem); + } + return ZIX_STATUS_EXISTS; + } + + elem = (ZixHashEntry*)malloc(sizeof(ZixHashEntry) + hash->value_size); + if (!elem) { + return ZIX_STATUS_NO_MEM; + } + elem->next = NULL; + elem->hash = h_nomod; + memcpy(elem + 1, value, hash->value_size); + + const unsigned next_n_buckets = *(hash->n_buckets + 1); + if (next_n_buckets != 0 && (hash->count + 1) >= next_n_buckets) { + if (!rehash(hash, next_n_buckets)) { + h = h_nomod % *(++hash->n_buckets); + } + } + + insert_entry(&hash->buckets[h], elem); + ++hash->count; + if (inserted) { + *inserted = zix_hash_value(elem); + } + return ZIX_STATUS_SUCCESS; +} + +ZIX_API ZixStatus +zix_hash_remove(ZixHash* hash, const void* value) +{ + const unsigned h_nomod = hash->hash_func(value); + const unsigned h = h_nomod % *hash->n_buckets; + + ZixHashEntry** next_ptr = &hash->buckets[h]; + for (ZixHashEntry* e = hash->buckets[h]; e; e = e->next) { + if (h_nomod == e->hash && + hash->equal_func(zix_hash_value(e), value)) { + *next_ptr = e->next; + free(e); + return ZIX_STATUS_SUCCESS; + } + next_ptr = &e->next; + } + + if (hash->n_buckets != sizes) { + const unsigned prev_n_buckets = *(hash->n_buckets - 1); + if (hash->count - 1 <= prev_n_buckets) { + if (!rehash(hash, prev_n_buckets)) { + --hash->n_buckets; + } + } + } + + --hash->count; + return ZIX_STATUS_NOT_FOUND; +} + +ZIX_API void +zix_hash_foreach(const ZixHash* hash, + ZixHashVisitFunc f, + void* user_data) +{ + for (unsigned b = 0; b < *hash->n_buckets; ++b) { + ZixHashEntry* bucket = hash->buckets[b]; + for (const ZixHashEntry* e = bucket; e; e = e->next) { + f(zix_hash_value(e), user_data); + } + } +} + diff --git a/source/libs/lilv/sord-0.10.4/src/zix/hash.h b/source/libs/lilv/sord-0.10.4/src/zix/hash.h new file mode 100644 index 000000000..c99211734 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/zix/hash.h @@ -0,0 +1,140 @@ +/* + Copyright 2011-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef ZIX_HASH_H +#define ZIX_HASH_H + +#include +#include + +#include "zix/common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + @addtogroup zix + @{ + @name Hash + @{ +*/ + +typedef struct ZixHashImpl ZixHash; + +/** + Function for computing the hash of an element. +*/ +typedef uint32_t (*ZixHashFunc)(const void* value); + +/** + Function to visit a hash element. +*/ +typedef void (*ZixHashVisitFunc)(const void* value, + void* user_data); + +/** + Create a new hash table. + + To minimize space overhead, unlike many hash tables this stores a single + value, not a key and a value. Any size of value can be stored, but all the + values in the hash table must be the same size, and the values must be safe + to copy with memcpy. To get key:value behaviour, simply insert a struct + with a key and value into the hash. + + @param hash_func The hashing function. + @param equal_func A function to test value equality. + @param value_size The size of the values to be stored. +*/ +ZIX_API ZixHash* +zix_hash_new(ZixHashFunc hash_func, + ZixEqualFunc equal_func, + size_t value_size); + +/** + Free @p hash. +*/ +ZIX_API void +zix_hash_free(ZixHash* hash); + +/** + Return the number of elements in @p hash. +*/ +ZIX_API size_t +zix_hash_size(const ZixHash* hash); + +/** + Insert an item into @p hash. + + If no matching value is found, ZIX_STATUS_SUCCESS will be returned, and @p + inserted will be pointed to the copy of @p value made in the new hash node. + + If a matching value already exists, ZIX_STATUS_EXISTS will be returned, and + @p inserted will be pointed to the existing value. + + @param hash The hash table. + @param value The value to be inserted. + @param inserted The copy of @p value in the hash table. + @return ZIX_STATUS_SUCCESS, ZIX_STATUS_EXISTS, or ZIX_STATUS_NO_MEM. +*/ +ZIX_API ZixStatus +zix_hash_insert(ZixHash* hash, + const void* value, + const void** inserted); + +/** + Remove an item from @p hash. + + @param hash The hash table. + @param value The value to remove. + @return ZIX_STATUS_SUCCES or ZIX_STATUS_NOT_FOUND. +*/ +ZIX_API ZixStatus +zix_hash_remove(ZixHash* hash, + const void* value); + +/** + Search for an item in @p hash. + + @param hash The hash table. + @param value The value to search for. +*/ +ZIX_API const void* +zix_hash_find(const ZixHash* hash, + const void* value); + +/** + Call @p f on each value in @p hash. + + @param hash The hash table. + @param f The function to call on each value. + @param user_data The user_data parameter passed to @p f. +*/ +ZIX_API void +zix_hash_foreach(const ZixHash* hash, + ZixHashVisitFunc f, + void* user_data); + +/** + @} + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* ZIX_HASH_H */ diff --git a/source/libs/lilv/sord-0.10.4/src/zix/tree.c b/source/libs/lilv/sord-0.10.4/src/zix/tree.c new file mode 100644 index 000000000..844adb97e --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/zix/tree.c @@ -0,0 +1,716 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include +#include + +#include "zix/common.h" +#include "zix/tree.h" + +typedef struct ZixTreeNodeImpl ZixTreeNode; + +struct ZixTreeImpl { + ZixTreeNode* root; + ZixDestroyFunc destroy; + ZixComparator cmp; + void* cmp_data; + size_t size; + bool allow_duplicates; +}; + +struct ZixTreeNodeImpl { + void* data; + struct ZixTreeNodeImpl* left; + struct ZixTreeNodeImpl* right; + struct ZixTreeNodeImpl* parent; + int_fast8_t balance; +}; + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +// Uncomment these for debugging features +// #define ZIX_TREE_DUMP 1 +// #define ZIX_TREE_VERIFY 1 +// #define ZIX_TREE_HYPER_VERIFY 1 + +#if defined(ZIX_TREE_VERIFY) || defined(ZIX_TREE_HYPER_VERIFY) +# include "tree_debug.h" +# define ASSERT_BALANCE(n) assert(verify_balance(n)) +#else +# define ASSERT_BALANCE(n) +#endif + +#ifdef ZIX_TREE_DUMP +# include "tree_debug.h" +# define DUMP(t) zix_tree_print(t->root, 0) +# define DEBUG_PRINTF(fmt, ...) printf(fmt, __VA_ARGS__) +#else +# define DUMP(t) +# define DEBUG_PRINTF(fmt, ...) +#endif + +ZIX_API ZixTree* +zix_tree_new(bool allow_duplicates, + ZixComparator cmp, + void* cmp_data, + ZixDestroyFunc destroy) +{ + ZixTree* t = (ZixTree*)malloc(sizeof(ZixTree)); + t->root = NULL; + t->destroy = destroy; + t->cmp = cmp; + t->cmp_data = cmp_data; + t->size = 0; + t->allow_duplicates = allow_duplicates; + return t; +} + +ZIX_PRIVATE void +zix_tree_free_rec(ZixTree* t, ZixTreeNode* n) +{ + if (n) { + zix_tree_free_rec(t, n->left); + zix_tree_free_rec(t, n->right); + if (t->destroy) { + t->destroy(n->data); + } + free(n); + } +} + +ZIX_API void +zix_tree_free(ZixTree* t) +{ + if (t) { + zix_tree_free_rec(t, t->root); + free(t); + } +} + +ZIX_API size_t +zix_tree_size(const ZixTree* t) +{ + return t->size; +} + +ZIX_PRIVATE void +rotate(ZixTreeNode* p, ZixTreeNode* q) +{ + assert(q->parent == p); + assert(p->left == q || p->right == q); + + q->parent = p->parent; + if (q->parent) { + if (q->parent->left == p) { + q->parent->left = q; + } else { + q->parent->right = q; + } + } + + if (p->right == q) { + // Rotate left + p->right = q->left; + q->left = p; + if (p->right) { + p->right->parent = p; + } + } else { + // Rotate right + assert(p->left == q); + p->left = q->right; + q->right = p; + if (p->left) { + p->left->parent = p; + } + } + + p->parent = q; +} + +/** + * Rotate left about @a p. + * + * p q + * / \ / \ + * A q => p C + * / \ / \ + * B C A B + */ +ZIX_PRIVATE ZixTreeNode* +rotate_left(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->right; + *height_change = (q->balance == 0) ? 0 : -1; + + DEBUG_PRINTF("LL %ld\n", (intptr_t)p->data); + + assert(p->balance == 2); + assert(q->balance == 0 || q->balance == 1); + + rotate(p, q); + + // p->balance -= 1 + MAX(0, q->balance); + // q->balance -= 1 - MIN(0, p->balance); + --q->balance; + p->balance = -(q->balance); + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + return q; +} + +/** + * Rotate right about @a p. + * + * p q + * / \ / \ + * q C => A p + * / \ / \ + * A B B C + * + */ +ZIX_PRIVATE ZixTreeNode* +rotate_right(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->left; + *height_change = (q->balance == 0) ? 0 : -1; + + DEBUG_PRINTF("RR %ld\n", (intptr_t)p->data); + + assert(p->balance == -2); + assert(q->balance == 0 || q->balance == -1); + + rotate(p, q); + + // p->balance += 1 - MIN(0, q->balance); + // q->balance += 1 + MAX(0, p->balance); + ++q->balance; + p->balance = -(q->balance); + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + return q; +} + +/** + * Rotate left about @a p->left then right about @a p. + * + * p r + * / \ / \ + * q D => q p + * / \ / \ / \ + * A r A B C D + * / \ + * B C + * + */ +ZIX_PRIVATE ZixTreeNode* +rotate_left_right(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->left; + ZixTreeNode* const r = q->right; + + assert(p->balance == -2); + assert(q->balance == 1); + assert(r->balance == -1 || r->balance == 0 || r->balance == 1); + + DEBUG_PRINTF("LR %ld P: %2d Q: %2d R: %2d\n", + (intptr_t)p->data, p->balance, q->balance, r->balance); + + rotate(q, r); + rotate(p, r); + + q->balance -= 1 + MAX(0, r->balance); + p->balance += 1 - MIN(MIN(0, r->balance) - 1, r->balance + q->balance); + // r->balance += MAX(0, p->balance) + MIN(0, q->balance); + + // p->balance = (p->left && p->right) ? -MIN(r->balance, 0) : 0; + // q->balance = - MAX(r->balance, 0); + r->balance = 0; + + *height_change = -1; + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + ASSERT_BALANCE(r); + return r; +} + +/** + * Rotate right about @a p->right then right about @a p. + * + * p r + * / \ / \ + * A q => p q + * / \ / \ / \ + * r D A B C D + * / \ + * B C + * + */ +ZIX_PRIVATE ZixTreeNode* +rotate_right_left(ZixTreeNode* p, int* height_change) +{ + ZixTreeNode* const q = p->right; + ZixTreeNode* const r = q->left; + + assert(p->balance == 2); + assert(q->balance == -1); + assert(r->balance == -1 || r->balance == 0 || r->balance == 1); + + DEBUG_PRINTF("RL %ld P: %2d Q: %2d R: %2d\n", + (intptr_t)p->data, p->balance, q->balance, r->balance); + + rotate(q, r); + rotate(p, r); + + q->balance += 1 - MIN(0, r->balance); + p->balance -= 1 + MAX(MAX(0, r->balance) + 1, r->balance + q->balance); + // r->balance += MAX(0, q->balance) + MIN(0, p->balance); + + // p->balance = (p->left && p->right) ? -MAX(r->balance, 0) : 0; + // q->balance = - MIN(r->balance, 0); + r->balance = 0; + // assert(r->balance == 0); + + *height_change = -1; + + ASSERT_BALANCE(p); + ASSERT_BALANCE(q); + ASSERT_BALANCE(r); + return r; +} + +ZIX_PRIVATE ZixTreeNode* +zix_tree_rebalance(ZixTree* t, ZixTreeNode* node, int* height_change) +{ +#ifdef ZIX_TREE_HYPER_VERIFY + const size_t old_height = height(node); +#endif + DEBUG_PRINTF("REBALANCE %ld (%d)\n", (intptr_t)node->data, node->balance); + *height_change = 0; + const bool is_root = !node->parent; + assert((is_root && t->root == node) || (!is_root && t->root != node)); + ZixTreeNode* replacement = node; + if (node->balance == -2) { + assert(node->left); + if (node->left->balance == 1) { + replacement = rotate_left_right(node, height_change); + } else { + replacement = rotate_right(node, height_change); + } + } else if (node->balance == 2) { + assert(node->right); + if (node->right->balance == -1) { + replacement = rotate_right_left(node, height_change); + } else { + replacement = rotate_left(node, height_change); + } + } + if (is_root) { + assert(!replacement->parent); + t->root = replacement; + } + DUMP(t); +#ifdef ZIX_TREE_HYPER_VERIFY + assert(old_height + *height_change == height(replacement)); +#endif + return replacement; +} + +ZIX_API ZixStatus +zix_tree_insert(ZixTree* t, void* e, ZixTreeIter** ti) +{ + DEBUG_PRINTF("**** INSERT %ld\n", (intptr_t)e); + int cmp = 0; + ZixTreeNode* n = t->root; + ZixTreeNode* p = NULL; + + // Find the parent p of e + while (n) { + p = n; + cmp = t->cmp(e, n->data, t->cmp_data); + if (cmp < 0) { + n = n->left; + } else if (cmp > 0) { + n = n->right; + } else if (t->allow_duplicates) { + n = n->right; + } else { + if (ti) { + *ti = n; + } + DEBUG_PRINTF("%ld EXISTS!\n", (intptr_t)e); + return ZIX_STATUS_EXISTS; + } + } + + // Allocate a new node n + if (!(n = (ZixTreeNode*)malloc(sizeof(ZixTreeNode)))) { + return ZIX_STATUS_NO_MEM; + } + memset(n, '\0', sizeof(ZixTreeNode)); + n->data = e; + n->balance = 0; + if (ti) { + *ti = n; + } + + bool p_height_increased = false; + + // Make p the parent of n + n->parent = p; + if (!p) { + t->root = n; + } else { + if (cmp < 0) { + assert(!p->left); + assert(p->balance == 0 || p->balance == 1); + p->left = n; + --p->balance; + p_height_increased = !p->right; + } else { + assert(!p->right); + assert(p->balance == 0 || p->balance == -1); + p->right = n; + ++p->balance; + p_height_increased = !p->left; + } + } + + DUMP(t); + + // Rebalance if necessary (at most 1 rotation) + assert(!p || p->balance == -1 || p->balance == 0 || p->balance == 1); + if (p && p_height_increased) { + int height_change = 0; + for (ZixTreeNode* i = p; i && i->parent; i = i->parent) { + if (i == i->parent->left) { + if (--i->parent->balance == -2) { + zix_tree_rebalance(t, i->parent, &height_change); + break; + } + } else { + assert(i == i->parent->right); + if (++i->parent->balance == 2) { + zix_tree_rebalance(t, i->parent, &height_change); + break; + } + } + + if (i->parent->balance == 0) { + break; + } + } + } + + DUMP(t); + + ++t->size; + +#ifdef ZIX_TREE_VERIFY + if (!verify(t, t->root)) { + return ZIX_STATUS_ERROR; + } +#endif + + return ZIX_STATUS_SUCCESS; +} + +ZIX_API ZixStatus +zix_tree_remove(ZixTree* t, ZixTreeIter* ti) +{ + ZixTreeNode* const n = ti; + ZixTreeNode** pp = NULL; // parent pointer + ZixTreeNode* to_balance = n->parent; // lowest node to balance + int8_t d_balance = 0; // delta(balance) for n->parent + + DEBUG_PRINTF("*** REMOVE %ld\n", (intptr_t)n->data); + + if ((n == t->root) && !n->left && !n->right) { + t->root = NULL; + if (t->destroy) { + t->destroy(n->data); + } + free(n); + --t->size; + assert(t->size == 0); + return ZIX_STATUS_SUCCESS; + } + + // Set pp to the parent pointer to n, if applicable + if (n->parent) { + assert(n->parent->left == n || n->parent->right == n); + if (n->parent->left == n) { // n is left child + pp = &n->parent->left; + d_balance = 1; + } else { // n is right child + assert(n->parent->right == n); + pp = &n->parent->right; + d_balance = -1; + } + } + + assert(!pp || *pp == n); + + int height_change = 0; + if (!n->left && !n->right) { + // n is a leaf, just remove it + if (pp) { + *pp = NULL; + to_balance = n->parent; + height_change = (!n->parent->left && !n->parent->right) ? -1 : 0; + } + } else if (!n->left) { + // Replace n with right (only) child + if (pp) { + *pp = n->right; + to_balance = n->parent; + } else { + t->root = n->right; + } + n->right->parent = n->parent; + height_change = -1; + } else if (!n->right) { + // Replace n with left (only) child + if (pp) { + *pp = n->left; + to_balance = n->parent; + } else { + t->root = n->left; + } + n->left->parent = n->parent; + height_change = -1; + } else { + // Replace n with in-order successor (leftmost child of right subtree) + ZixTreeNode* replace = n->right; + while (replace->left) { + assert(replace->left->parent == replace); + replace = replace->left; + } + + // Remove replace from parent (replace_p) + if (replace->parent->left == replace) { + height_change = replace->parent->right ? 0 : -1; + d_balance = 1; + to_balance = replace->parent; + replace->parent->left = replace->right; + } else { + assert(replace->parent == n); + height_change = replace->parent->left ? 0 : -1; + d_balance = -1; + to_balance = replace->parent; + replace->parent->right = replace->right; + } + + if (to_balance == n) { + to_balance = replace; + } + + if (replace->right) { + replace->right->parent = replace->parent; + } + + replace->balance = n->balance; + + // Swap node to delete with replace + if (pp) { + *pp = replace; + } else { + assert(t->root == n); + t->root = replace; + } + replace->parent = n->parent; + replace->left = n->left; + n->left->parent = replace; + replace->right = n->right; + if (n->right) { + n->right->parent = replace; + } + + assert(!replace->parent + || replace->parent->left == replace + || replace->parent->right == replace); + } + + // Rebalance starting at to_balance upwards. + for (ZixTreeNode* i = to_balance; i; i = i->parent) { + i->balance += d_balance; + if (d_balance == 0 || i->balance == -1 || i->balance == 1) { + break; + } + + assert(i != n); + i = zix_tree_rebalance(t, i, &height_change); + if (i->balance == 0) { + height_change = -1; + } + + if (i->parent) { + if (i == i->parent->left) { + d_balance = height_change * -1; + } else { + assert(i == i->parent->right); + d_balance = height_change; + } + } + } + + DUMP(t); + + if (t->destroy) { + t->destroy(n->data); + } + free(n); + + --t->size; + +#ifdef ZIX_TREE_VERIFY + if (!verify(t, t->root)) { + return ZIX_STATUS_ERROR; + } +#endif + + return ZIX_STATUS_SUCCESS; +} + +ZIX_API ZixStatus +zix_tree_find(const ZixTree* t, const void* e, ZixTreeIter** ti) +{ + ZixTreeNode* n = t->root; + while (n) { + const int cmp = t->cmp(e, n->data, t->cmp_data); + if (cmp == 0) { + break; + } else if (cmp < 0) { + n = n->left; + } else { + n = n->right; + } + } + + *ti = n; + return (n) ? ZIX_STATUS_SUCCESS : ZIX_STATUS_NOT_FOUND; +} + +ZIX_API void* +zix_tree_get(ZixTreeIter* ti) +{ + return ti ? ti->data : NULL; +} + +ZIX_API ZixTreeIter* +zix_tree_begin(ZixTree* t) +{ + if (!t->root) { + return NULL; + } + + ZixTreeNode* n = t->root; + while (n->left) { + n = n->left; + } + return n; +} + +ZIX_API ZixTreeIter* +zix_tree_end(ZixTree* t) +{ + return NULL; +} + +ZIX_API ZixTreeIter* +zix_tree_rbegin(ZixTree* t) +{ + if (!t->root) { + return NULL; + } + + ZixTreeNode* n = t->root; + while (n->right) { + n = n->right; + } + return n; +} + +ZIX_API ZixTreeIter* +zix_tree_rend(ZixTree* t) +{ + return NULL; +} + +ZIX_API bool +zix_tree_iter_is_end(ZixTreeIter* i) +{ + return !i; +} + +ZIX_API bool +zix_tree_iter_is_rend(ZixTreeIter* i) +{ + return !i; +} + +ZIX_API ZixTreeIter* +zix_tree_iter_next(ZixTreeIter* i) +{ + if (!i) { + return NULL; + } + + if (i->right) { + i = i->right; + while (i->left) { + i = i->left; + } + } else { + while (i->parent && i->parent->right == i) { // i is a right child + i = i->parent; + } + + i = i->parent; + } + + return i; +} + +ZIX_API ZixTreeIter* +zix_tree_iter_prev(ZixTreeIter* i) +{ + if (!i) { + return NULL; + } + + if (i->left) { + i = i->left; + while (i->right) { + i = i->right; + } + } else { + while (i->parent && i->parent->left == i) { // i is a left child + i = i->parent; + } + + i = i->parent; + } + + return i; +} diff --git a/source/libs/lilv/sord-0.10.4/src/zix/tree.h b/source/libs/lilv/sord-0.10.4/src/zix/tree.h new file mode 100644 index 000000000..f89d9e50c --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/src/zix/tree.h @@ -0,0 +1,148 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef ZIX_TREE_H +#define ZIX_TREE_H + +#include + +#include "zix/common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + @addtogroup zix + @{ + @name Tree + @{ +*/ + +/** + A balanced binary search tree. +*/ +typedef struct ZixTreeImpl ZixTree; + +/** + An iterator over a @ref ZixTree. +*/ +typedef struct ZixTreeNodeImpl ZixTreeIter; + +/** + Create a new (empty) tree. +*/ +ZIX_API ZixTree* +zix_tree_new(bool allow_duplicates, + ZixComparator cmp, + void* cmp_data, + ZixDestroyFunc destroy); + +/** + Free @a t. +*/ +ZIX_API void +zix_tree_free(ZixTree* t); + +/** + Return the number of elements in @a t. +*/ +ZIX_API size_t +zix_tree_size(const ZixTree* t); + +/** + Insert the element @a e into @a t and point @a ti at the new element. +*/ +ZIX_API ZixStatus +zix_tree_insert(ZixTree* t, void* e, ZixTreeIter** ti); + +/** + Remove the item pointed at by @a ti from @a t. +*/ +ZIX_API ZixStatus +zix_tree_remove(ZixTree* t, ZixTreeIter* ti); + +/** + Set @a ti to an element equal to @a e in @a t. + If no such item exists, @a ti is set to NULL. +*/ +ZIX_API ZixStatus +zix_tree_find(const ZixTree* t, const void* e, ZixTreeIter** ti); + +/** + Return the data associated with the given tree item. +*/ +ZIX_API void* +zix_tree_get(ZixTreeIter* ti); + +/** + Return an iterator to the first (smallest) element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_begin(ZixTree* t); + +/** + Return an iterator the the element one past the last element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_end(ZixTree* t); + +/** + Return true iff @a i is an iterator to the end of its tree. +*/ +ZIX_API bool +zix_tree_iter_is_end(ZixTreeIter* i); + +/** + Return an iterator to the last (largest) element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_rbegin(ZixTree* t); + +/** + Return an iterator the the element one before the first element in @a t. +*/ +ZIX_API ZixTreeIter* +zix_tree_rend(ZixTree* t); + +/** + Return true iff @a i is an iterator to the reverse end of its tree. +*/ +ZIX_API bool +zix_tree_iter_is_rend(ZixTreeIter* i); + +/** + Return an iterator that points to the element one past @a i. +*/ +ZIX_API ZixTreeIter* +zix_tree_iter_next(ZixTreeIter* i); + +/** + Return an iterator that points to the element one before @a i. +*/ +ZIX_API ZixTreeIter* +zix_tree_iter_prev(ZixTreeIter* i); + +/** + @} + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* ZIX_TREE_H */ diff --git a/source/libs/lilv/sord-0.10.4/tests/README.txt b/source/libs/lilv/sord-0.10.4/tests/README.txt new file mode 100644 index 000000000..37460e60f --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/README.txt @@ -0,0 +1,20 @@ +These are the tests for the Turtle Terse RDF Triple Language +that must be passed by conformant systems. See + http://www.dajobe.org/2004/01/turtle/ +for the full conformance information. + +The format is a set of good tests and bad tests. + +Good tests are a pair of files: + abc.ttl abc.out +which are the input Turtle file and the expected output RDF triples, +written in N-Triples. + +bad tests are of the form + bad-XX.ttl +which must fail. + +The tests should be performed with an assumed base URI +of http://www.w3.org/2001/sw/DataAccess/df1/tests/ + +Dave diff --git a/source/libs/lilv/sord-0.10.4/tests/UTF-8.ttl b/source/libs/lilv/sord-0.10.4/tests/UTF-8.ttl new file mode 100644 index 000000000..82587c578 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/UTF-8.ttl @@ -0,0 +1,219 @@ +@prefix rdfs: . + +<> rdfs:comment """ +UTF-8 encoded sample plain-text file +‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +Markus Kuhn [ˈmaʳkÊŠs kuËn] — 2002-07-25 + + +The ASCII compatible UTF-8 encoding used in this plain-text file +is defined in Unicode, ISO 10646-1, and RFC 2279. + + +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), ⎧⎡⎛┌─────â”⎞⎤⎫ + ⎪⎢⎜│a²+b³ ⎟⎥⎪ + ∀x∈â„: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), ⎪⎢⎜│───── ⎟⎥⎪ + ⎪⎢⎜⎷ c₈ ⎟⎥⎪ + â„• ⊆ â„•â‚€ ⊂ ℤ ⊂ â„š ⊂ ℠⊂ â„‚, ⎨⎢⎜ ⎟⎥⎬ + ⎪⎢⎜ ∞ ⎟⎥⎪ + ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫), ⎪⎢⎜ ⎲ ⎟⎥⎪ + ⎪⎢⎜ ⎳aâ±-bâ±âŽŸâŽ¥âŽª + 2Hâ‚‚ + Oâ‚‚ ⇌ 2Hâ‚‚O, R = 4.7 kΩ, ⌀ 200 mm ⎩⎣âŽi=1 ⎠⎦⎭ + +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 € │ â•‘ + â•‘ ╰─────────╯ â•‘ + â•šâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â• + +Combining characters: + + STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑ + +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: â–ˆ + â–‰ + â•”â•â•â•¦â•â•â•— ┌──┬──┠╭──┬──╮ ╭──┬──╮ â”â”â”┳â”â”┓ ┎┒â”┑ â•· â•» â”┯┓ ┌┰┠▊ ╱╲╱╲╳╳╳ + ║┌─╨─â”â•‘ │╔â•â•§â•â•—│ │╒â•â•ªâ•â••â”‚ │╓─â•â”€â•–│ ┃┌─╂─â”┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ â”╋┥ â–‹ ╲╱╲╱╳╳╳ + ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ â•¿ │┃ â”╅╆┓ ╵ ╹ â”—â”·â”› └┸┘ â–Œ ╱╲╱╲╳╳╳ + â• â•¡ ╳ â•žâ•£ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┠╎ â”┅┅┓ ┋ ■╲╱╲╱╳╳╳ + ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ â•Ž ╠┇ ┋ â–Ž + ║└─╥─┘║ │╚â•â•¤â•â•â”‚ │╘â•â•ªâ•â•›â”‚ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ â•Ž ╠┇ ┋ â– + â•šâ•â•â•©â•â•â• └──┴──┘ ╰──┴──╯ ╰──┴──╯ â”—â”â”â”»â”â”â”› ▗▄▖▛▀▜ └╌╌┘ â•Ž â”—â•â•â”› ┋ â–▂▃▄▅▆▇█ + â–▀▘▙▄▟ +""" . +<> rdfs:comment """ + Two byte Unicode escape: \u00E0 + Largest Unicode escape in Turtle: \U0010FFFF +""" . diff --git a/source/libs/lilv/sord-0.10.4/tests/manifest.ttl b/source/libs/lilv/sord-0.10.4/tests/manifest.ttl new file mode 100644 index 000000000..6a2cae262 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/manifest.ttl @@ -0,0 +1,215 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix mf: . +@prefix qt: . + +<> rdf:type mf:Manifest ; + rdfs:comment "Turtle good syntax test cases (must pass)" ; + mf:entries + ( + [ mf:name "test-00" ; + rdfs:comment "Blank subject" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-01" ; + rdfs:comment "@prefix and qnames" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-02" ; + rdfs:comment ", operator" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-03" ; + rdfs:comment "; operator" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-04" ; + rdfs:comment "empty [] as subject and object" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-05" ; + rdfs:comment "non-empty [] as subject and object" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-06" ; + rdfs:comment "'a' as predicate" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-07" ; + rdfs:comment "simple collection" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-08" ; + rdfs:comment "empty collection" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-09" ; + rdfs:comment "integer datatyped literal" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-10" ; + rdfs:comment "decimal integer canonicalization" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-11" ; + rdfs:comment "- and _ in names and qnames" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-12" ; + rdfs:comment "tests for rdf:_ and other qnames starting with _" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-13" ; + rdfs:comment "bare : allowed" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-14" ; + rdfs:comment "10000 triples, more than the default Bison stack size" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-15" ; + rdfs:comment "10000 triple objects (10000 triples)" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-16" ; + rdfs:comment "10000 items (10000 triples)" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-17" ; + rdfs:comment "simple long literal" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-18" ; + rdfs:comment "long literals with escapes" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-19" ; + rdfs:comment "floating point number" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-20" ; + rdfs:comment "empty literals, normal and long variant" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-21" ; + rdfs:comment "positive integer, decimal and doubles" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-22" ; + rdfs:comment "negative integer, decimal and doubles" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-23" ; + rdfs:comment "long literal ending in double quote" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-24" ; + rdfs:comment "boolean literals" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-25" ; + rdfs:comment "comments" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-26" ; + rdfs:comment "no final mewline" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-27" ; + rdfs:comment "duplicate prefix" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-28" ; + rdfs:comment "decimal data types (serializing test)" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-29" ; + rdfs:comment "Escaping U+0001 to U+007F in a URI" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "test-30" ; + rdfs:comment "@base" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "rdf-schema" ; + rdfs:comment "RDF Namespace document converted into Turtle" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "rdfs-namespace" ; + rdfs:comment "RDFS Namespace document converted into Turtle" ; + mf:action [ qt:data ] ; + mf:result + ] + + [ mf:name "rdfq-results" ; + rdfs:comment "Example query result from http://www.w3.org/2003/03/rdfqr-tests/recording-query-results.html" ; + mf:action [ qt:data ] ; + mf:result + ] + + # End of tests + ). diff --git a/source/libs/lilv/sord-0.10.4/tests/rdf-schema.out b/source/libs/lilv/sord-0.10.4/tests/rdf-schema.out new file mode 100644 index 000000000..94e14045a --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/rdf-schema.out @@ -0,0 +1,126 @@ + . + "Indicates membership of a class" . + "type"@en . + "type"@fr . + . + . + "The concept of Class" . + "Class"@en . + "Classe"@fr . + . + . + "Properties used to express RDF Schema constraints." . + "ConstraintProperty"@en . + "Propri\u00E9t\u00E9Contrainte"@fr . + . + . + . + . + "Resources used to express RDF Schema constraints." . + "ConstraintResource"@en . + "RessourceContrainte"@fr . + . + . + "This represents the set Containers." . + "Container"@en . + "Enveloppe"@fr . + . + . + "ContainerMembershipProperty"@en . + . + . + . + "This represents the set of atomic values, eg. textual strings." . + "Literal"@en . + "Litt\u00E9ral"@fr . + . + "The most general class" . + "Resource"@en . + "Ressource"@fr . + . + "Use this for descriptions" . + . + "comment"@en . + "commentaire"@fr . + . + . + "This is how we associate a class with properties that its instances can have" . + "domain"@en . + "domaine"@fr . + . + "Indicates a resource containing and defining the subject resource." . + . + "esD\u00E9finiPar"@fr . + "isDefinedBy"@en . + . + . + . + "Provides a human-readable version of a resource name." . + . + "label"@en . + "label"@fr . + . + . + "Properties that can be used in a schema to provide constraints" . + . + "range"@en . + "\u00E9tendue"@fr . + . + . + "Indicates a resource that provides information about the subject resource." . + . + "seeAlso"@en . + "voirAussi"@fr . + . + . + "Indicates membership of a class" . + . + "sousClasseDe"@fr . + "subClassOf"@en . + . + . + "Indicates specialization of properties" . + . + "sousPropri\u00E9t\u00E9De"@fr . + "subPropertyOf"@en . + . + . + "Alt"@en . + "Choix"@fr . + . + . + "Bag"@en . + "Ensemble"@fr . + . + . + "The concept of a property." . + "Property"@en . + "Propri\u00E9t\u00E9"@fr . + . + . + "Sequence"@en . + "S\u00E9quence"@fr . + . + . + "This represents the set of reified statements." . + "D\u00E9claration"@fr . + "Statement"@en . + . + . + . + "object"@en . + "objet"@fr . + . + . + "predicate"@en . + "pr\u00E9dicat"@fr . + . + . + . + "subject"@en . + "sujet"@fr . + . + . + "object"@en . + "value"@fr . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/rdf-schema.ttl b/source/libs/lilv/sord-0.10.4/tests/rdf-schema.ttl new file mode 100644 index 000000000..8a61794e6 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/rdf-schema.ttl @@ -0,0 +1,156 @@ +# RDF Namespace document converted into Turtle + +@prefix : . +@prefix rdf: . + +rdf:type a rdf:Property; + :comment "Indicates membership of a class"; + :label "type"@en, + "type"@fr; + :range :Class . + +:Class a :Class; + :comment "The concept of Class"; + :label "Class"@en, + "Classe"@fr; + :subClassOf :Resource . + +:ConstraintProperty a :Class; + :comment "Properties used to express RDF Schema constraints."; + :label "ConstraintProperty"@en, + "Propri\u00E9t\u00E9Contrainte"@fr; + :subClassOf :ConstraintResource, + rdf:Property . + +:ConstraintResource a :Class, + :Class; + :comment "Resources used to express RDF Schema constraints."; + :label "ConstraintResource"@en, + "RessourceContrainte"@fr; + :subClassOf :Resource . + +:Container a :Class; + :comment "This represents the set Containers."; + :label "Container"@en, + "Enveloppe"@fr; + :subClassOf :Resource . + +:ContainerMembershipProperty a :Class; + :label "ContainerMembershipProperty"@en; + :subClassOf rdf:Property . + +:Literal a :Class, + :Class; + :comment "This represents the set of atomic values, eg. textual strings."; + :label "Literal"@en, + "Litt\u00E9ral"@fr . + +:Resource a :Class; + :comment "The most general class"; + :label "Resource"@en, + "Ressource"@fr . + +:comment a rdf:Property; + :comment "Use this for descriptions"; + :domain :Resource; + :label "comment"@en, + "commentaire"@fr; + :range :Literal . + +:domain a :ConstraintProperty; + :comment "This is how we associate a class with properties that its instances can have"; + :label "domain"@en, + "domaine"@fr . + +:isDefinedBy a rdf:Property; + :comment "Indicates a resource containing and defining the subject resource."; + :domain :Resource; + :label "esD\u00E9finiPar"@fr, + "isDefinedBy"@en; + :range :Resource; + :subPropertyOf :seeAlso . + +:label a rdf:Property; + :comment "Provides a human-readable version of a resource name."; + :domain :Resource; + :label "label"@en, + "label"@fr; + :range :Literal . + +:range a :ConstraintProperty; + :comment "Properties that can be used in a schema to provide constraints"; + :domain rdf:Property; + :label "range"@en, + "\u00E9tendue"@fr; + :range :Class . + +:seeAlso a rdf:Property; + :comment "Indicates a resource that provides information about the subject resource."; + :domain :Resource; + :label "seeAlso"@en, + "voirAussi"@fr; + :range :Resource . + +:subClassOf a rdf:Property; + :comment "Indicates membership of a class"; + :domain :Class; + :label "sousClasseDe"@fr, + "subClassOf"@en; + :range :Class . + +:subPropertyOf a rdf:Property; + :comment "Indicates specialization of properties"; + :domain rdf:Property; + :label "sousPropri\u00E9t\u00E9De"@fr, + "subPropertyOf"@en; + :range rdf:Property . + +rdf:Alt a :Class; + :label "Alt"@en, + "Choix"@fr; + :subClassOf :Container . + +rdf:Bag a :Class; + :label "Bag"@en, + "Ensemble"@fr; + :subClassOf :Container . + +rdf:Property a :Class; + :comment "The concept of a property."; + :label "Property"@en, + "Propri\u00E9t\u00E9"@fr; + :subClassOf :Resource . + +rdf:Seq a :Class; + :label "Sequence"@en, + "S\u00E9quence"@fr; + :subClassOf :Container . + +rdf:Statement a :Class; + :comment "This represents the set of reified statements."; + :label "D\u00E9claration"@fr, + "Statement"@en; + :subClassOf :Resource . + +rdf:object a rdf:Property; + :domain rdf:Statement; + :label "object"@en, + "objet"@fr . + +rdf:predicate a rdf:Property; + :domain rdf:Statement; + :label "predicate"@en, + "pr\u00E9dicat"@fr; + :range rdf:Property . + +rdf:subject a rdf:Property; + :domain rdf:Statement; + :label "subject"@en, + "sujet"@fr; + :range :Resource . + +rdf:value a rdf:Property; + :label "object"@en, + "value"@fr . + +: :seeAlso . diff --git a/source/libs/lilv/sord-0.10.4/tests/rdfq-results.out b/source/libs/lilv/sord-0.10.4/tests/rdfq-results.out new file mode 100644 index 000000000..fb2542932 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/rdfq-results.out @@ -0,0 +1,36 @@ +_:genid1 "x" . +_:genid1 "123"^^ . +_:genid2 "y" . +_:genid2 . +_:genid3 . +_:genid3 _:genid1 . +_:genid3 _:genid2 . +_:genid4 "x" . +_:genid4 "2003-01-21" . +_:genid5 "y" . +_:genid5 . +_:genid6 . +_:genid6 _:genid4 . +_:genid6 _:genid5 . +_:genid7 "x" . +_:genid7 "anon1" . +_:genid8 "y" . +_:genid8 _:a . +_:genid9 . +_:genid9 _:genid7 . +_:genid9 _:genid8 . +_:genid10 "x" . +_:genid10 "anon2" . +_:genid11 "y" . +_:genid11 _:a . +_:genid12 . +_:genid12 _:genid10 . +_:genid12 _:genid11 . + . + "4"^^ . + "x" . + "y" . + _:genid3 . + _:genid6 . + _:genid9 . + _:genid12 . diff --git a/source/libs/lilv/sord-0.10.4/tests/rdfq-results.ttl b/source/libs/lilv/sord-0.10.4/tests/rdfq-results.ttl new file mode 100644 index 000000000..c6e72aa7e --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/rdfq-results.ttl @@ -0,0 +1,39 @@ +# from http://www.w3.org/2003/03/rdfqr-tests/recording-query-results.html + +@prefix rdf: . +@prefix rs: . + + +<> rdf:type rs:ResultSet ; + rs:size 4 ; + rs:resultVariable "x" ; rs:resultVariable "y" ; + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; rs:value 123 ] ; + rs:binding [ rs:variable "y" ; rs:value ] + ] ; + + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; + rs:value "2003-01-21" ] ; + rs:binding [ rs:variable "y" ; + rs:value ] + ] ; + + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; + rs:value "anon1" ] ; + rs:binding [ rs:variable "y" ; + rs:value _:a ] + ] ; + + rs:solution + [ rdf:type rs:ResultSolution ; + rs:binding [ rs:variable "x" ; + rs:value "anon2" ] ; + rs:binding [ rs:variable "y" ; + rs:value _:a ] + ] ; + . diff --git a/source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.out b/source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.out new file mode 100644 index 000000000..4696f8cfb --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.out @@ -0,0 +1,131 @@ + . + "Indicates membership of a class" . + . + . + "type"@en . + . + . + "A collection of alternatives."@en . + . + "Alt"@en . + . + . + "An unordered collection."@en . + . + "Bag"@en . + . + . + "The concept of a property." . + . + "Property"@en . + . + . + "An ordered collection."@en . + . + "Seq"@en . + . + . + "The class of RDF statements." . + . + "Statement"@en . + . + . + "The object of an RDF statement." . + . + . + "object"@en . + . + "the predicate of an RDF statement." . + . + . + "predicate"@en . + . + . + "The subject of an RDF statement." . + . + . + "subject"@en . + . + . + "Identifies the principal value (usually a string) of a property when the property value is a structured resource" . + . + . + "value"@en . + . + . + "The concept of Class" . + . + "Class"@en . + . + . + "This represents the set Containers." . + . + "Container"@en . + . + . + "The container membership properties, rdf:1, rdf:2, ..., all of which are sub-properties of 'member'." . + . + "ContainerMembershipProperty"@en . + . + . + "This represents the set of atomic values, eg. textual strings." . + . + "Literal"@en . + . + "The class resource, everything." . + . + "Resource"@en . + . + "Use this for descriptions" . + . + . + "comment"@en . + . + . + "A domain class for a property type" . + . + . + "domain"@en . + . + . + "Indicates the namespace of a resource" . + . + . + "isDefinedBy"@en . + . + . + . + "Provides a human-readable version of a resource name." . + . + . + "label"@en . + . + . + "a member of a container" . + . + . + "member"@en . + . + "A range class for a property type" . + . + . + "range"@en . + . + . + "A resource that provides information about the subject resource" . + . + . + "seeAlso"@en . + . + . + "Indicates membership of a class" . + . + . + "subClassOf"@en . + . + . + "Indicates specialization of properties" . + . + . + "subPropertyOf"@en . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.ttl b/source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.ttl new file mode 100644 index 000000000..0d73e6bf7 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/rdfs-namespace.ttl @@ -0,0 +1,160 @@ +# RDFS Namespace document converted into Turtle + +@prefix : . +@prefix rdf: . + +rdf:type a rdf:Property; + :comment "Indicates membership of a class"; + :domain :Resource; + :isDefinedBy rdf:; + :label "type"@en; + :range :Class . + +rdf:Alt a :Class; + :comment "A collection of alternatives."@en; + :isDefinedBy rdf:; + :label "Alt"@en; + :subClassOf :Container . + +rdf:Bag a :Class; + :comment "An unordered collection."@en; + :isDefinedBy rdf:; + :label "Bag"@en; + :subClassOf :Container . + +rdf:Property a :Class; + :comment "The concept of a property."; + :isDefinedBy rdf:; + :label "Property"@en; + :subClassOf :Resource . + +rdf:Seq a :Class; + :comment "An ordered collection."@en; + :isDefinedBy rdf:; + :label "Seq"@en; + :subClassOf :Container . + +rdf:Statement a :Class; + :comment "The class of RDF statements."; + :isDefinedBy rdf:; + :label "Statement"@en; + :subClassOf :Resource . + +rdf:object a rdf:Property; + :comment "The object of an RDF statement."; + :domain rdf:Statement; + :isDefinedBy rdf:; + :label "object"@en . + +rdf:predicate a rdf:Property; + :comment "the predicate of an RDF statement."; + :domain rdf:Statement; + :isDefinedBy rdf:; + :label "predicate"@en; + :range rdf:Property . + +rdf:subject a rdf:Property; + :comment "The subject of an RDF statement."; + :domain rdf:Statement; + :isDefinedBy rdf:; + :label "subject"@en; + :range :Resource . + +rdf:value a rdf:Property; + :comment "Identifies the principal value (usually a string) of a property when the property value is a structured resource"; + :domain :Resource; + :isDefinedBy rdf:; + :label "value"@en . + +: :seeAlso . + +:Class a :Class; + :comment "The concept of Class"; + :isDefinedBy :; + :label "Class"@en; + :subClassOf :Resource . + +:Container a :Class; + :comment "This represents the set Containers."; + :isDefinedBy :; + :label "Container"@en; + :subClassOf :Resource . + +:ContainerMembershipProperty a :Class; + :comment "The container membership properties, rdf:1, rdf:2, ..., all of which are sub-properties of 'member'."; + :isDefinedBy :; + :label "ContainerMembershipProperty"@en; + :subClassOf rdf:Property . + +:Literal a :Class; + :comment "This represents the set of atomic values, eg. textual strings."; + :isDefinedBy :; + :label "Literal"@en . + +:Resource a :Class; + :comment "The class resource, everything."; + :isDefinedBy :; + :label "Resource"@en . + +:comment a rdf:Property; + :comment "Use this for descriptions"; + :domain :Resource; + :isDefinedBy :; + :label "comment"@en; + :range :Literal . + +:domain a rdf:Property; + :comment "A domain class for a property type"; + :domain rdf:Property; + :isDefinedBy :; + :label "domain"@en; + :range :Class . + +:isDefinedBy a rdf:Property; + :comment "Indicates the namespace of a resource"; + :domain :Resource; + :isDefinedBy :; + :label "isDefinedBy"@en; + :range :Resource; + :subPropertyOf :seeAlso . + +:label a rdf:Property; + :comment "Provides a human-readable version of a resource name."; + :domain :Resource; + :isDefinedBy :; + :label "label"@en; + :range :Literal . + +:member a rdf:Property; + :comment "a member of a container"; + :domain :Container; + :isDefinedBy :; + :label "member"@en . + +:range a rdf:Property; + :comment "A range class for a property type"; + :domain rdf:Property; + :isDefinedBy :; + :label "range"@en; + :range :Class . + +:seeAlso a rdf:Property; + :comment "A resource that provides information about the subject resource"; + :domain :Resource; + :isDefinedBy :; + :label "seeAlso"@en; + :range :Resource . + +:subClassOf a rdf:Property; + :comment "Indicates membership of a class"; + :domain :Class; + :isDefinedBy :; + :label "subClassOf"@en; + :range :Class . + +:subPropertyOf a rdf:Property; + :comment "Indicates specialization of properties"; + :domain rdf:Property; + :isDefinedBy :; + :label "subPropertyOf"@en; + :range rdf:Property . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-00.out b/source/libs/lilv/sord-0.10.4/tests/test-00.out new file mode 100644 index 000000000..7f8b717e2 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-00.out @@ -0,0 +1 @@ +_:genid1 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-00.ttl b/source/libs/lilv/sord-0.10.4/tests/test-00.ttl new file mode 100644 index 000000000..78da35e60 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-00.ttl @@ -0,0 +1,2 @@ +@prefix : <#> . +[] :x :y . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-01.out b/source/libs/lilv/sord-0.10.4/tests/test-01.out new file mode 100644 index 000000000..5ccb5bd20 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-01.out @@ -0,0 +1,3 @@ + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-01.ttl b/source/libs/lilv/sord-0.10.4/tests/test-01.ttl new file mode 100644 index 000000000..9070d2c41 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-01.ttl @@ -0,0 +1,7 @@ +# Test @prefix and qnames +@prefix : . +@prefix a: . +@prefix b: . +:a :b :c . +a:a a:b a:c . +:a a:a b:a . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-02.out b/source/libs/lilv/sord-0.10.4/tests/test-02.out new file mode 100644 index 000000000..99732ab37 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-02.out @@ -0,0 +1,3 @@ + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-02.ttl b/source/libs/lilv/sord-0.10.4/tests/test-02.ttl new file mode 100644 index 000000000..a623f3c17 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-02.ttl @@ -0,0 +1,5 @@ +# Test , operator +@prefix : . +:a :b :c, + :d, + :e . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-03.out b/source/libs/lilv/sord-0.10.4/tests/test-03.out new file mode 100644 index 000000000..d6ce9e8fe --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-03.out @@ -0,0 +1,3 @@ + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-03.ttl b/source/libs/lilv/sord-0.10.4/tests/test-03.ttl new file mode 100644 index 000000000..9179fa508 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-03.ttl @@ -0,0 +1,5 @@ +# Test ; operator +@prefix : . +:a :b :c ; + :d :e ; + :f :g . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-04.out b/source/libs/lilv/sord-0.10.4/tests/test-04.out new file mode 100644 index 000000000..414e4b84b --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-04.out @@ -0,0 +1,2 @@ +_:genid1 . + _:genid2 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-04.ttl b/source/libs/lilv/sord-0.10.4/tests/test-04.ttl new file mode 100644 index 000000000..c51814793 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-04.ttl @@ -0,0 +1,4 @@ +# Test empty [] operator; not allowed as predicate +@prefix : . +[] :a :b . +:c :d [] . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-05.out b/source/libs/lilv/sord-0.10.4/tests/test-05.out new file mode 100644 index 000000000..bf904178c --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-05.out @@ -0,0 +1,4 @@ +_:genid1 . +_:genid1 . + _:genid2 . +_:genid2 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-05.ttl b/source/libs/lilv/sord-0.10.4/tests/test-05.ttl new file mode 100644 index 000000000..adcbcabd0 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-05.ttl @@ -0,0 +1,4 @@ +# Test non empty [] operator; not allowed as predicate +@prefix : . +[ :a :b ] :c :d . +:e :f [ :g :h ] . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-06.out b/source/libs/lilv/sord-0.10.4/tests/test-06.out new file mode 100644 index 000000000..49961ea62 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-06.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-06.ttl b/source/libs/lilv/sord-0.10.4/tests/test-06.ttl new file mode 100644 index 000000000..9c1005cc9 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-06.ttl @@ -0,0 +1,3 @@ +# 'a' only allowed as a predicate +@prefix : . +:a a :b . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-07.out b/source/libs/lilv/sord-0.10.4/tests/test-07.out new file mode 100644 index 000000000..4a4e8ee24 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-07.out @@ -0,0 +1,5 @@ +_:genid1 "apple" . +_:genid1 _:genid2 . +_:genid2 "banana" . +_:genid2 . + _:genid1 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-07.ttl b/source/libs/lilv/sord-0.10.4/tests/test-07.ttl new file mode 100644 index 000000000..84559403b --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-07.ttl @@ -0,0 +1,3 @@ +@prefix : . +:a :b ( "apple" "banana" ) . + diff --git a/source/libs/lilv/sord-0.10.4/tests/test-08.out b/source/libs/lilv/sord-0.10.4/tests/test-08.out new file mode 100644 index 000000000..a77939cdd --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-08.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-08.ttl b/source/libs/lilv/sord-0.10.4/tests/test-08.ttl new file mode 100644 index 000000000..adce0a20f --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-08.ttl @@ -0,0 +1,3 @@ +@prefix : . +:a :b ( ) . + diff --git a/source/libs/lilv/sord-0.10.4/tests/test-09.out b/source/libs/lilv/sord-0.10.4/tests/test-09.out new file mode 100644 index 000000000..5fdb90991 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-09.out @@ -0,0 +1,4 @@ +_:hasParent . +_:genid1 . +_:genid1 _:hasParent . +_:genid1 "2"^^ . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-09.ttl b/source/libs/lilv/sord-0.10.4/tests/test-09.ttl new file mode 100644 index 000000000..0afe1b0ae --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-09.ttl @@ -0,0 +1,10 @@ +# Test integer datatyped literals using an OWL cardinality constraint +@prefix owl: . + +# based on examples in the OWL Reference + +_:hasParent a owl:ObjectProperty . + +[] a owl:Restriction ; + owl:onProperty _:hasParent ; + owl:maxCardinality 2 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-10.out b/source/libs/lilv/sord-0.10.4/tests/test-10.out new file mode 100644 index 000000000..ff88aa6f4 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-10.out @@ -0,0 +1,5 @@ + "000000"^^ . + "0"^^ . + "000001"^^ . + "2"^^ . + "4"^^ . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-10.ttl b/source/libs/lilv/sord-0.10.4/tests/test-10.ttl new file mode 100644 index 000000000..5d36360ea --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-10.ttl @@ -0,0 +1,5 @@ + 000000 . + 0 . + 000001 . + 2 . + 4 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-11.out b/source/libs/lilv/sord-0.10.4/tests/test-11.out new file mode 100644 index 000000000..f936a5b66 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-11.out @@ -0,0 +1,4 @@ + "a" . + "b" . + "c" . + "d" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-11.ttl b/source/libs/lilv/sord-0.10.4/tests/test-11.ttl new file mode 100644 index 000000000..3de1a43fa --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-11.ttl @@ -0,0 +1,10 @@ +# Tests for - and _ in names, qnames +@prefix ex1: . +@prefix ex-2: . +@prefix ex3_: . +@prefix ex4-: . + +ex1:foo-bar ex1:foo_bar "a" . +ex-2:foo-bar ex-2:foo_bar "b" . +ex3_:foo-bar ex3_:foo_bar "c" . +ex4-:foo-bar ex4-:foo_bar "d" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-12.out b/source/libs/lilv/sord-0.10.4/tests/test-12.out new file mode 100644 index 000000000..67404a59a --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-12.out @@ -0,0 +1,4 @@ + "1" . + "2" . + "def" . + "678" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-12.ttl b/source/libs/lilv/sord-0.10.4/tests/test-12.ttl new file mode 100644 index 000000000..1fed9f5e0 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-12.ttl @@ -0,0 +1,9 @@ +# Tests for rdf:_ and other qnames starting with _ +@prefix rdf: . +@prefix ex: . +@prefix : . + +ex:foo rdf:_1 "1" . +ex:foo rdf:_2 "2" . +ex:foo :_abc "def" . +ex:foo :_345 "678" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-13.out b/source/libs/lilv/sord-0.10.4/tests/test-13.out new file mode 100644 index 000000000..9feb5ad00 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-13.out @@ -0,0 +1,2 @@ +_:genid1 _:genid2 . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-13.ttl b/source/libs/lilv/sord-0.10.4/tests/test-13.ttl new file mode 100644 index 000000000..a8be95beb --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-13.ttl @@ -0,0 +1,7 @@ +# Test for : allowed +@prefix : . + +[] : [] . + +: : : . + diff --git a/source/libs/lilv/sord-0.10.4/tests/test-14.out b/source/libs/lilv/sord-0.10.4/tests/test-14.out new file mode 100644 index 000000000..791b3a7ac --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-14.out @@ -0,0 +1,10000 @@ + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-14.ttl b/source/libs/lilv/sord-0.10.4/tests/test-14.ttl new file mode 100644 index 000000000..ad9dbde88 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-14.ttl @@ -0,0 +1,10002 @@ +# 10000 triples, more than the default Bison stack size +@prefix : . +:a1 :a1 :a1. +:a2 :a2 :a2. +:a3 :a3 :a3. +:a4 :a4 :a4. +:a5 :a5 :a5. +:a6 :a6 :a6. +:a7 :a7 :a7. +:a8 :a8 :a8. +:a9 :a9 :a9. +:a10 :a10 :a10. +:a11 :a11 :a11. +:a12 :a12 :a12. +:a13 :a13 :a13. +:a14 :a14 :a14. +:a15 :a15 :a15. +:a16 :a16 :a16. +:a17 :a17 :a17. +:a18 :a18 :a18. +:a19 :a19 :a19. +:a20 :a20 :a20. +:a21 :a21 :a21. +:a22 :a22 :a22. +:a23 :a23 :a23. +:a24 :a24 :a24. +:a25 :a25 :a25. +:a26 :a26 :a26. +:a27 :a27 :a27. +:a28 :a28 :a28. +:a29 :a29 :a29. +:a30 :a30 :a30. +:a31 :a31 :a31. +:a32 :a32 :a32. +:a33 :a33 :a33. +:a34 :a34 :a34. +:a35 :a35 :a35. +:a36 :a36 :a36. +:a37 :a37 :a37. +:a38 :a38 :a38. +:a39 :a39 :a39. +:a40 :a40 :a40. +:a41 :a41 :a41. +:a42 :a42 :a42. +:a43 :a43 :a43. +:a44 :a44 :a44. +:a45 :a45 :a45. +:a46 :a46 :a46. +:a47 :a47 :a47. +:a48 :a48 :a48. +:a49 :a49 :a49. +:a50 :a50 :a50. +:a51 :a51 :a51. +:a52 :a52 :a52. +:a53 :a53 :a53. +:a54 :a54 :a54. +:a55 :a55 :a55. +:a56 :a56 :a56. +:a57 :a57 :a57. +:a58 :a58 :a58. +:a59 :a59 :a59. +:a60 :a60 :a60. +:a61 :a61 :a61. +:a62 :a62 :a62. +:a63 :a63 :a63. +:a64 :a64 :a64. +:a65 :a65 :a65. +:a66 :a66 :a66. +:a67 :a67 :a67. +:a68 :a68 :a68. +:a69 :a69 :a69. +:a70 :a70 :a70. +:a71 :a71 :a71. +:a72 :a72 :a72. +:a73 :a73 :a73. +:a74 :a74 :a74. +:a75 :a75 :a75. +:a76 :a76 :a76. +:a77 :a77 :a77. +:a78 :a78 :a78. +:a79 :a79 :a79. +:a80 :a80 :a80. +:a81 :a81 :a81. +:a82 :a82 :a82. +:a83 :a83 :a83. +:a84 :a84 :a84. +:a85 :a85 :a85. +:a86 :a86 :a86. +:a87 :a87 :a87. +:a88 :a88 :a88. +:a89 :a89 :a89. +:a90 :a90 :a90. +:a91 :a91 :a91. +:a92 :a92 :a92. +:a93 :a93 :a93. +:a94 :a94 :a94. +:a95 :a95 :a95. +:a96 :a96 :a96. +:a97 :a97 :a97. +:a98 :a98 :a98. +:a99 :a99 :a99. +:a100 :a100 :a100. +:a101 :a101 :a101. +:a102 :a102 :a102. +:a103 :a103 :a103. +:a104 :a104 :a104. +:a105 :a105 :a105. +:a106 :a106 :a106. +:a107 :a107 :a107. +:a108 :a108 :a108. +:a109 :a109 :a109. +:a110 :a110 :a110. +:a111 :a111 :a111. +:a112 :a112 :a112. +:a113 :a113 :a113. +:a114 :a114 :a114. +:a115 :a115 :a115. +:a116 :a116 :a116. +:a117 :a117 :a117. +:a118 :a118 :a118. +:a119 :a119 :a119. +:a120 :a120 :a120. +:a121 :a121 :a121. +:a122 :a122 :a122. +:a123 :a123 :a123. +:a124 :a124 :a124. +:a125 :a125 :a125. +:a126 :a126 :a126. +:a127 :a127 :a127. +:a128 :a128 :a128. +:a129 :a129 :a129. +:a130 :a130 :a130. +:a131 :a131 :a131. +:a132 :a132 :a132. +:a133 :a133 :a133. +:a134 :a134 :a134. +:a135 :a135 :a135. +:a136 :a136 :a136. +:a137 :a137 :a137. +:a138 :a138 :a138. +:a139 :a139 :a139. +:a140 :a140 :a140. +:a141 :a141 :a141. +:a142 :a142 :a142. +:a143 :a143 :a143. +:a144 :a144 :a144. +:a145 :a145 :a145. +:a146 :a146 :a146. +:a147 :a147 :a147. +:a148 :a148 :a148. +:a149 :a149 :a149. +:a150 :a150 :a150. +:a151 :a151 :a151. +:a152 :a152 :a152. +:a153 :a153 :a153. +:a154 :a154 :a154. +:a155 :a155 :a155. +:a156 :a156 :a156. +:a157 :a157 :a157. +:a158 :a158 :a158. +:a159 :a159 :a159. +:a160 :a160 :a160. +:a161 :a161 :a161. +:a162 :a162 :a162. +:a163 :a163 :a163. +:a164 :a164 :a164. +:a165 :a165 :a165. +:a166 :a166 :a166. +:a167 :a167 :a167. +:a168 :a168 :a168. +:a169 :a169 :a169. +:a170 :a170 :a170. +:a171 :a171 :a171. +:a172 :a172 :a172. +:a173 :a173 :a173. +:a174 :a174 :a174. +:a175 :a175 :a175. +:a176 :a176 :a176. +:a177 :a177 :a177. +:a178 :a178 :a178. +:a179 :a179 :a179. +:a180 :a180 :a180. +:a181 :a181 :a181. +:a182 :a182 :a182. +:a183 :a183 :a183. +:a184 :a184 :a184. +:a185 :a185 :a185. +:a186 :a186 :a186. +:a187 :a187 :a187. +:a188 :a188 :a188. +:a189 :a189 :a189. +:a190 :a190 :a190. +:a191 :a191 :a191. +:a192 :a192 :a192. +:a193 :a193 :a193. +:a194 :a194 :a194. +:a195 :a195 :a195. +:a196 :a196 :a196. +:a197 :a197 :a197. +:a198 :a198 :a198. +:a199 :a199 :a199. +:a200 :a200 :a200. +:a201 :a201 :a201. +:a202 :a202 :a202. +:a203 :a203 :a203. +:a204 :a204 :a204. +:a205 :a205 :a205. +:a206 :a206 :a206. +:a207 :a207 :a207. +:a208 :a208 :a208. +:a209 :a209 :a209. +:a210 :a210 :a210. +:a211 :a211 :a211. +:a212 :a212 :a212. +:a213 :a213 :a213. +:a214 :a214 :a214. +:a215 :a215 :a215. +:a216 :a216 :a216. +:a217 :a217 :a217. +:a218 :a218 :a218. +:a219 :a219 :a219. +:a220 :a220 :a220. +:a221 :a221 :a221. +:a222 :a222 :a222. +:a223 :a223 :a223. +:a224 :a224 :a224. +:a225 :a225 :a225. +:a226 :a226 :a226. +:a227 :a227 :a227. +:a228 :a228 :a228. +:a229 :a229 :a229. +:a230 :a230 :a230. +:a231 :a231 :a231. +:a232 :a232 :a232. +:a233 :a233 :a233. +:a234 :a234 :a234. +:a235 :a235 :a235. +:a236 :a236 :a236. +:a237 :a237 :a237. +:a238 :a238 :a238. +:a239 :a239 :a239. +:a240 :a240 :a240. +:a241 :a241 :a241. +:a242 :a242 :a242. +:a243 :a243 :a243. +:a244 :a244 :a244. +:a245 :a245 :a245. +:a246 :a246 :a246. +:a247 :a247 :a247. +:a248 :a248 :a248. +:a249 :a249 :a249. +:a250 :a250 :a250. +:a251 :a251 :a251. +:a252 :a252 :a252. +:a253 :a253 :a253. +:a254 :a254 :a254. +:a255 :a255 :a255. +:a256 :a256 :a256. +:a257 :a257 :a257. +:a258 :a258 :a258. +:a259 :a259 :a259. +:a260 :a260 :a260. +:a261 :a261 :a261. +:a262 :a262 :a262. +:a263 :a263 :a263. +:a264 :a264 :a264. +:a265 :a265 :a265. +:a266 :a266 :a266. +:a267 :a267 :a267. +:a268 :a268 :a268. +:a269 :a269 :a269. +:a270 :a270 :a270. +:a271 :a271 :a271. +:a272 :a272 :a272. +:a273 :a273 :a273. +:a274 :a274 :a274. +:a275 :a275 :a275. +:a276 :a276 :a276. +:a277 :a277 :a277. +:a278 :a278 :a278. +:a279 :a279 :a279. +:a280 :a280 :a280. +:a281 :a281 :a281. +:a282 :a282 :a282. +:a283 :a283 :a283. +:a284 :a284 :a284. +:a285 :a285 :a285. +:a286 :a286 :a286. +:a287 :a287 :a287. +:a288 :a288 :a288. +:a289 :a289 :a289. +:a290 :a290 :a290. +:a291 :a291 :a291. +:a292 :a292 :a292. +:a293 :a293 :a293. +:a294 :a294 :a294. +:a295 :a295 :a295. +:a296 :a296 :a296. +:a297 :a297 :a297. +:a298 :a298 :a298. +:a299 :a299 :a299. +:a300 :a300 :a300. +:a301 :a301 :a301. +:a302 :a302 :a302. +:a303 :a303 :a303. +:a304 :a304 :a304. +:a305 :a305 :a305. +:a306 :a306 :a306. +:a307 :a307 :a307. +:a308 :a308 :a308. +:a309 :a309 :a309. +:a310 :a310 :a310. +:a311 :a311 :a311. +:a312 :a312 :a312. +:a313 :a313 :a313. +:a314 :a314 :a314. +:a315 :a315 :a315. +:a316 :a316 :a316. +:a317 :a317 :a317. +:a318 :a318 :a318. +:a319 :a319 :a319. +:a320 :a320 :a320. +:a321 :a321 :a321. +:a322 :a322 :a322. +:a323 :a323 :a323. +:a324 :a324 :a324. +:a325 :a325 :a325. +:a326 :a326 :a326. +:a327 :a327 :a327. +:a328 :a328 :a328. +:a329 :a329 :a329. +:a330 :a330 :a330. +:a331 :a331 :a331. +:a332 :a332 :a332. +:a333 :a333 :a333. +:a334 :a334 :a334. +:a335 :a335 :a335. +:a336 :a336 :a336. +:a337 :a337 :a337. +:a338 :a338 :a338. +:a339 :a339 :a339. +:a340 :a340 :a340. +:a341 :a341 :a341. +:a342 :a342 :a342. +:a343 :a343 :a343. +:a344 :a344 :a344. +:a345 :a345 :a345. +:a346 :a346 :a346. +:a347 :a347 :a347. +:a348 :a348 :a348. +:a349 :a349 :a349. +:a350 :a350 :a350. +:a351 :a351 :a351. +:a352 :a352 :a352. +:a353 :a353 :a353. +:a354 :a354 :a354. +:a355 :a355 :a355. +:a356 :a356 :a356. +:a357 :a357 :a357. +:a358 :a358 :a358. +:a359 :a359 :a359. +:a360 :a360 :a360. +:a361 :a361 :a361. +:a362 :a362 :a362. +:a363 :a363 :a363. +:a364 :a364 :a364. +:a365 :a365 :a365. +:a366 :a366 :a366. +:a367 :a367 :a367. +:a368 :a368 :a368. +:a369 :a369 :a369. +:a370 :a370 :a370. +:a371 :a371 :a371. +:a372 :a372 :a372. +:a373 :a373 :a373. +:a374 :a374 :a374. +:a375 :a375 :a375. +:a376 :a376 :a376. +:a377 :a377 :a377. +:a378 :a378 :a378. +:a379 :a379 :a379. +:a380 :a380 :a380. +:a381 :a381 :a381. +:a382 :a382 :a382. +:a383 :a383 :a383. +:a384 :a384 :a384. +:a385 :a385 :a385. +:a386 :a386 :a386. +:a387 :a387 :a387. +:a388 :a388 :a388. +:a389 :a389 :a389. +:a390 :a390 :a390. +:a391 :a391 :a391. +:a392 :a392 :a392. +:a393 :a393 :a393. +:a394 :a394 :a394. +:a395 :a395 :a395. +:a396 :a396 :a396. +:a397 :a397 :a397. +:a398 :a398 :a398. +:a399 :a399 :a399. +:a400 :a400 :a400. +:a401 :a401 :a401. +:a402 :a402 :a402. +:a403 :a403 :a403. +:a404 :a404 :a404. +:a405 :a405 :a405. +:a406 :a406 :a406. +:a407 :a407 :a407. +:a408 :a408 :a408. +:a409 :a409 :a409. +:a410 :a410 :a410. +:a411 :a411 :a411. +:a412 :a412 :a412. +:a413 :a413 :a413. +:a414 :a414 :a414. +:a415 :a415 :a415. +:a416 :a416 :a416. +:a417 :a417 :a417. +:a418 :a418 :a418. +:a419 :a419 :a419. +:a420 :a420 :a420. +:a421 :a421 :a421. +:a422 :a422 :a422. +:a423 :a423 :a423. +:a424 :a424 :a424. +:a425 :a425 :a425. +:a426 :a426 :a426. +:a427 :a427 :a427. +:a428 :a428 :a428. +:a429 :a429 :a429. +:a430 :a430 :a430. +:a431 :a431 :a431. +:a432 :a432 :a432. +:a433 :a433 :a433. +:a434 :a434 :a434. +:a435 :a435 :a435. +:a436 :a436 :a436. +:a437 :a437 :a437. +:a438 :a438 :a438. +:a439 :a439 :a439. +:a440 :a440 :a440. +:a441 :a441 :a441. +:a442 :a442 :a442. +:a443 :a443 :a443. +:a444 :a444 :a444. +:a445 :a445 :a445. +:a446 :a446 :a446. +:a447 :a447 :a447. +:a448 :a448 :a448. +:a449 :a449 :a449. +:a450 :a450 :a450. +:a451 :a451 :a451. +:a452 :a452 :a452. +:a453 :a453 :a453. +:a454 :a454 :a454. +:a455 :a455 :a455. +:a456 :a456 :a456. +:a457 :a457 :a457. +:a458 :a458 :a458. +:a459 :a459 :a459. +:a460 :a460 :a460. +:a461 :a461 :a461. +:a462 :a462 :a462. +:a463 :a463 :a463. +:a464 :a464 :a464. +:a465 :a465 :a465. +:a466 :a466 :a466. +:a467 :a467 :a467. +:a468 :a468 :a468. +:a469 :a469 :a469. +:a470 :a470 :a470. +:a471 :a471 :a471. +:a472 :a472 :a472. +:a473 :a473 :a473. +:a474 :a474 :a474. +:a475 :a475 :a475. +:a476 :a476 :a476. +:a477 :a477 :a477. +:a478 :a478 :a478. +:a479 :a479 :a479. +:a480 :a480 :a480. +:a481 :a481 :a481. +:a482 :a482 :a482. +:a483 :a483 :a483. +:a484 :a484 :a484. +:a485 :a485 :a485. +:a486 :a486 :a486. +:a487 :a487 :a487. +:a488 :a488 :a488. +:a489 :a489 :a489. +:a490 :a490 :a490. +:a491 :a491 :a491. +:a492 :a492 :a492. +:a493 :a493 :a493. +:a494 :a494 :a494. +:a495 :a495 :a495. +:a496 :a496 :a496. +:a497 :a497 :a497. +:a498 :a498 :a498. +:a499 :a499 :a499. +:a500 :a500 :a500. +:a501 :a501 :a501. +:a502 :a502 :a502. +:a503 :a503 :a503. +:a504 :a504 :a504. +:a505 :a505 :a505. +:a506 :a506 :a506. +:a507 :a507 :a507. +:a508 :a508 :a508. +:a509 :a509 :a509. +:a510 :a510 :a510. +:a511 :a511 :a511. +:a512 :a512 :a512. +:a513 :a513 :a513. +:a514 :a514 :a514. +:a515 :a515 :a515. +:a516 :a516 :a516. +:a517 :a517 :a517. +:a518 :a518 :a518. +:a519 :a519 :a519. +:a520 :a520 :a520. +:a521 :a521 :a521. +:a522 :a522 :a522. +:a523 :a523 :a523. +:a524 :a524 :a524. +:a525 :a525 :a525. +:a526 :a526 :a526. +:a527 :a527 :a527. +:a528 :a528 :a528. +:a529 :a529 :a529. +:a530 :a530 :a530. +:a531 :a531 :a531. +:a532 :a532 :a532. +:a533 :a533 :a533. +:a534 :a534 :a534. +:a535 :a535 :a535. +:a536 :a536 :a536. +:a537 :a537 :a537. +:a538 :a538 :a538. +:a539 :a539 :a539. +:a540 :a540 :a540. +:a541 :a541 :a541. +:a542 :a542 :a542. +:a543 :a543 :a543. +:a544 :a544 :a544. +:a545 :a545 :a545. +:a546 :a546 :a546. +:a547 :a547 :a547. +:a548 :a548 :a548. +:a549 :a549 :a549. +:a550 :a550 :a550. +:a551 :a551 :a551. +:a552 :a552 :a552. +:a553 :a553 :a553. +:a554 :a554 :a554. +:a555 :a555 :a555. +:a556 :a556 :a556. +:a557 :a557 :a557. +:a558 :a558 :a558. +:a559 :a559 :a559. +:a560 :a560 :a560. +:a561 :a561 :a561. +:a562 :a562 :a562. +:a563 :a563 :a563. +:a564 :a564 :a564. +:a565 :a565 :a565. +:a566 :a566 :a566. +:a567 :a567 :a567. +:a568 :a568 :a568. +:a569 :a569 :a569. +:a570 :a570 :a570. +:a571 :a571 :a571. +:a572 :a572 :a572. +:a573 :a573 :a573. +:a574 :a574 :a574. +:a575 :a575 :a575. +:a576 :a576 :a576. +:a577 :a577 :a577. +:a578 :a578 :a578. +:a579 :a579 :a579. +:a580 :a580 :a580. +:a581 :a581 :a581. +:a582 :a582 :a582. +:a583 :a583 :a583. +:a584 :a584 :a584. +:a585 :a585 :a585. +:a586 :a586 :a586. +:a587 :a587 :a587. +:a588 :a588 :a588. +:a589 :a589 :a589. +:a590 :a590 :a590. +:a591 :a591 :a591. +:a592 :a592 :a592. +:a593 :a593 :a593. +:a594 :a594 :a594. +:a595 :a595 :a595. +:a596 :a596 :a596. +:a597 :a597 :a597. +:a598 :a598 :a598. +:a599 :a599 :a599. +:a600 :a600 :a600. +:a601 :a601 :a601. +:a602 :a602 :a602. +:a603 :a603 :a603. +:a604 :a604 :a604. +:a605 :a605 :a605. +:a606 :a606 :a606. +:a607 :a607 :a607. +:a608 :a608 :a608. +:a609 :a609 :a609. +:a610 :a610 :a610. +:a611 :a611 :a611. +:a612 :a612 :a612. +:a613 :a613 :a613. +:a614 :a614 :a614. +:a615 :a615 :a615. +:a616 :a616 :a616. +:a617 :a617 :a617. +:a618 :a618 :a618. +:a619 :a619 :a619. +:a620 :a620 :a620. +:a621 :a621 :a621. +:a622 :a622 :a622. +:a623 :a623 :a623. +:a624 :a624 :a624. +:a625 :a625 :a625. +:a626 :a626 :a626. +:a627 :a627 :a627. +:a628 :a628 :a628. +:a629 :a629 :a629. +:a630 :a630 :a630. +:a631 :a631 :a631. +:a632 :a632 :a632. +:a633 :a633 :a633. +:a634 :a634 :a634. +:a635 :a635 :a635. +:a636 :a636 :a636. +:a637 :a637 :a637. +:a638 :a638 :a638. +:a639 :a639 :a639. +:a640 :a640 :a640. +:a641 :a641 :a641. +:a642 :a642 :a642. +:a643 :a643 :a643. +:a644 :a644 :a644. +:a645 :a645 :a645. +:a646 :a646 :a646. +:a647 :a647 :a647. +:a648 :a648 :a648. +:a649 :a649 :a649. +:a650 :a650 :a650. +:a651 :a651 :a651. +:a652 :a652 :a652. +:a653 :a653 :a653. +:a654 :a654 :a654. +:a655 :a655 :a655. +:a656 :a656 :a656. +:a657 :a657 :a657. +:a658 :a658 :a658. +:a659 :a659 :a659. +:a660 :a660 :a660. +:a661 :a661 :a661. +:a662 :a662 :a662. +:a663 :a663 :a663. +:a664 :a664 :a664. +:a665 :a665 :a665. +:a666 :a666 :a666. +:a667 :a667 :a667. +:a668 :a668 :a668. +:a669 :a669 :a669. +:a670 :a670 :a670. +:a671 :a671 :a671. +:a672 :a672 :a672. +:a673 :a673 :a673. +:a674 :a674 :a674. +:a675 :a675 :a675. +:a676 :a676 :a676. +:a677 :a677 :a677. +:a678 :a678 :a678. +:a679 :a679 :a679. +:a680 :a680 :a680. +:a681 :a681 :a681. +:a682 :a682 :a682. +:a683 :a683 :a683. +:a684 :a684 :a684. +:a685 :a685 :a685. +:a686 :a686 :a686. +:a687 :a687 :a687. +:a688 :a688 :a688. +:a689 :a689 :a689. +:a690 :a690 :a690. +:a691 :a691 :a691. +:a692 :a692 :a692. +:a693 :a693 :a693. +:a694 :a694 :a694. +:a695 :a695 :a695. +:a696 :a696 :a696. +:a697 :a697 :a697. +:a698 :a698 :a698. +:a699 :a699 :a699. +:a700 :a700 :a700. +:a701 :a701 :a701. +:a702 :a702 :a702. +:a703 :a703 :a703. +:a704 :a704 :a704. +:a705 :a705 :a705. +:a706 :a706 :a706. +:a707 :a707 :a707. +:a708 :a708 :a708. +:a709 :a709 :a709. +:a710 :a710 :a710. +:a711 :a711 :a711. +:a712 :a712 :a712. +:a713 :a713 :a713. +:a714 :a714 :a714. +:a715 :a715 :a715. +:a716 :a716 :a716. +:a717 :a717 :a717. +:a718 :a718 :a718. +:a719 :a719 :a719. +:a720 :a720 :a720. +:a721 :a721 :a721. +:a722 :a722 :a722. +:a723 :a723 :a723. +:a724 :a724 :a724. +:a725 :a725 :a725. +:a726 :a726 :a726. +:a727 :a727 :a727. +:a728 :a728 :a728. +:a729 :a729 :a729. +:a730 :a730 :a730. +:a731 :a731 :a731. +:a732 :a732 :a732. +:a733 :a733 :a733. +:a734 :a734 :a734. +:a735 :a735 :a735. +:a736 :a736 :a736. +:a737 :a737 :a737. +:a738 :a738 :a738. +:a739 :a739 :a739. +:a740 :a740 :a740. +:a741 :a741 :a741. +:a742 :a742 :a742. +:a743 :a743 :a743. +:a744 :a744 :a744. +:a745 :a745 :a745. +:a746 :a746 :a746. +:a747 :a747 :a747. +:a748 :a748 :a748. +:a749 :a749 :a749. +:a750 :a750 :a750. +:a751 :a751 :a751. +:a752 :a752 :a752. +:a753 :a753 :a753. +:a754 :a754 :a754. +:a755 :a755 :a755. +:a756 :a756 :a756. +:a757 :a757 :a757. +:a758 :a758 :a758. +:a759 :a759 :a759. +:a760 :a760 :a760. +:a761 :a761 :a761. +:a762 :a762 :a762. +:a763 :a763 :a763. +:a764 :a764 :a764. +:a765 :a765 :a765. +:a766 :a766 :a766. +:a767 :a767 :a767. +:a768 :a768 :a768. +:a769 :a769 :a769. +:a770 :a770 :a770. +:a771 :a771 :a771. +:a772 :a772 :a772. +:a773 :a773 :a773. +:a774 :a774 :a774. +:a775 :a775 :a775. +:a776 :a776 :a776. +:a777 :a777 :a777. +:a778 :a778 :a778. +:a779 :a779 :a779. +:a780 :a780 :a780. +:a781 :a781 :a781. +:a782 :a782 :a782. +:a783 :a783 :a783. +:a784 :a784 :a784. +:a785 :a785 :a785. +:a786 :a786 :a786. +:a787 :a787 :a787. +:a788 :a788 :a788. +:a789 :a789 :a789. +:a790 :a790 :a790. +:a791 :a791 :a791. +:a792 :a792 :a792. +:a793 :a793 :a793. +:a794 :a794 :a794. +:a795 :a795 :a795. +:a796 :a796 :a796. +:a797 :a797 :a797. +:a798 :a798 :a798. +:a799 :a799 :a799. +:a800 :a800 :a800. +:a801 :a801 :a801. +:a802 :a802 :a802. +:a803 :a803 :a803. +:a804 :a804 :a804. +:a805 :a805 :a805. +:a806 :a806 :a806. +:a807 :a807 :a807. +:a808 :a808 :a808. +:a809 :a809 :a809. +:a810 :a810 :a810. +:a811 :a811 :a811. +:a812 :a812 :a812. +:a813 :a813 :a813. +:a814 :a814 :a814. +:a815 :a815 :a815. +:a816 :a816 :a816. +:a817 :a817 :a817. +:a818 :a818 :a818. +:a819 :a819 :a819. +:a820 :a820 :a820. +:a821 :a821 :a821. +:a822 :a822 :a822. +:a823 :a823 :a823. +:a824 :a824 :a824. +:a825 :a825 :a825. +:a826 :a826 :a826. +:a827 :a827 :a827. +:a828 :a828 :a828. +:a829 :a829 :a829. +:a830 :a830 :a830. +:a831 :a831 :a831. +:a832 :a832 :a832. +:a833 :a833 :a833. +:a834 :a834 :a834. +:a835 :a835 :a835. +:a836 :a836 :a836. +:a837 :a837 :a837. +:a838 :a838 :a838. +:a839 :a839 :a839. +:a840 :a840 :a840. +:a841 :a841 :a841. +:a842 :a842 :a842. +:a843 :a843 :a843. +:a844 :a844 :a844. +:a845 :a845 :a845. +:a846 :a846 :a846. +:a847 :a847 :a847. +:a848 :a848 :a848. +:a849 :a849 :a849. +:a850 :a850 :a850. +:a851 :a851 :a851. +:a852 :a852 :a852. +:a853 :a853 :a853. +:a854 :a854 :a854. +:a855 :a855 :a855. +:a856 :a856 :a856. +:a857 :a857 :a857. +:a858 :a858 :a858. +:a859 :a859 :a859. +:a860 :a860 :a860. +:a861 :a861 :a861. +:a862 :a862 :a862. +:a863 :a863 :a863. +:a864 :a864 :a864. +:a865 :a865 :a865. +:a866 :a866 :a866. +:a867 :a867 :a867. +:a868 :a868 :a868. +:a869 :a869 :a869. +:a870 :a870 :a870. +:a871 :a871 :a871. +:a872 :a872 :a872. +:a873 :a873 :a873. +:a874 :a874 :a874. +:a875 :a875 :a875. +:a876 :a876 :a876. +:a877 :a877 :a877. +:a878 :a878 :a878. +:a879 :a879 :a879. +:a880 :a880 :a880. +:a881 :a881 :a881. +:a882 :a882 :a882. +:a883 :a883 :a883. +:a884 :a884 :a884. +:a885 :a885 :a885. +:a886 :a886 :a886. +:a887 :a887 :a887. +:a888 :a888 :a888. +:a889 :a889 :a889. +:a890 :a890 :a890. +:a891 :a891 :a891. +:a892 :a892 :a892. +:a893 :a893 :a893. +:a894 :a894 :a894. +:a895 :a895 :a895. +:a896 :a896 :a896. +:a897 :a897 :a897. +:a898 :a898 :a898. +:a899 :a899 :a899. +:a900 :a900 :a900. +:a901 :a901 :a901. +:a902 :a902 :a902. +:a903 :a903 :a903. +:a904 :a904 :a904. +:a905 :a905 :a905. +:a906 :a906 :a906. +:a907 :a907 :a907. +:a908 :a908 :a908. +:a909 :a909 :a909. +:a910 :a910 :a910. +:a911 :a911 :a911. +:a912 :a912 :a912. +:a913 :a913 :a913. +:a914 :a914 :a914. +:a915 :a915 :a915. +:a916 :a916 :a916. +:a917 :a917 :a917. +:a918 :a918 :a918. +:a919 :a919 :a919. +:a920 :a920 :a920. +:a921 :a921 :a921. +:a922 :a922 :a922. +:a923 :a923 :a923. +:a924 :a924 :a924. +:a925 :a925 :a925. +:a926 :a926 :a926. +:a927 :a927 :a927. +:a928 :a928 :a928. +:a929 :a929 :a929. +:a930 :a930 :a930. +:a931 :a931 :a931. +:a932 :a932 :a932. +:a933 :a933 :a933. +:a934 :a934 :a934. +:a935 :a935 :a935. +:a936 :a936 :a936. +:a937 :a937 :a937. +:a938 :a938 :a938. +:a939 :a939 :a939. +:a940 :a940 :a940. +:a941 :a941 :a941. +:a942 :a942 :a942. +:a943 :a943 :a943. +:a944 :a944 :a944. +:a945 :a945 :a945. +:a946 :a946 :a946. +:a947 :a947 :a947. +:a948 :a948 :a948. +:a949 :a949 :a949. +:a950 :a950 :a950. +:a951 :a951 :a951. +:a952 :a952 :a952. +:a953 :a953 :a953. +:a954 :a954 :a954. +:a955 :a955 :a955. +:a956 :a956 :a956. +:a957 :a957 :a957. +:a958 :a958 :a958. +:a959 :a959 :a959. +:a960 :a960 :a960. +:a961 :a961 :a961. +:a962 :a962 :a962. +:a963 :a963 :a963. +:a964 :a964 :a964. +:a965 :a965 :a965. +:a966 :a966 :a966. +:a967 :a967 :a967. +:a968 :a968 :a968. +:a969 :a969 :a969. +:a970 :a970 :a970. +:a971 :a971 :a971. +:a972 :a972 :a972. +:a973 :a973 :a973. +:a974 :a974 :a974. +:a975 :a975 :a975. +:a976 :a976 :a976. +:a977 :a977 :a977. +:a978 :a978 :a978. +:a979 :a979 :a979. +:a980 :a980 :a980. +:a981 :a981 :a981. +:a982 :a982 :a982. +:a983 :a983 :a983. +:a984 :a984 :a984. +:a985 :a985 :a985. +:a986 :a986 :a986. +:a987 :a987 :a987. +:a988 :a988 :a988. +:a989 :a989 :a989. +:a990 :a990 :a990. +:a991 :a991 :a991. +:a992 :a992 :a992. +:a993 :a993 :a993. +:a994 :a994 :a994. +:a995 :a995 :a995. +:a996 :a996 :a996. +:a997 :a997 :a997. +:a998 :a998 :a998. +:a999 :a999 :a999. +:a1000 :a1000 :a1000. +:a1001 :a1001 :a1001. +:a1002 :a1002 :a1002. +:a1003 :a1003 :a1003. +:a1004 :a1004 :a1004. +:a1005 :a1005 :a1005. +:a1006 :a1006 :a1006. +:a1007 :a1007 :a1007. +:a1008 :a1008 :a1008. +:a1009 :a1009 :a1009. +:a1010 :a1010 :a1010. +:a1011 :a1011 :a1011. +:a1012 :a1012 :a1012. +:a1013 :a1013 :a1013. +:a1014 :a1014 :a1014. +:a1015 :a1015 :a1015. +:a1016 :a1016 :a1016. +:a1017 :a1017 :a1017. +:a1018 :a1018 :a1018. +:a1019 :a1019 :a1019. +:a1020 :a1020 :a1020. +:a1021 :a1021 :a1021. +:a1022 :a1022 :a1022. +:a1023 :a1023 :a1023. +:a1024 :a1024 :a1024. +:a1025 :a1025 :a1025. +:a1026 :a1026 :a1026. +:a1027 :a1027 :a1027. +:a1028 :a1028 :a1028. +:a1029 :a1029 :a1029. +:a1030 :a1030 :a1030. +:a1031 :a1031 :a1031. +:a1032 :a1032 :a1032. +:a1033 :a1033 :a1033. +:a1034 :a1034 :a1034. +:a1035 :a1035 :a1035. +:a1036 :a1036 :a1036. +:a1037 :a1037 :a1037. +:a1038 :a1038 :a1038. +:a1039 :a1039 :a1039. +:a1040 :a1040 :a1040. +:a1041 :a1041 :a1041. +:a1042 :a1042 :a1042. +:a1043 :a1043 :a1043. +:a1044 :a1044 :a1044. +:a1045 :a1045 :a1045. +:a1046 :a1046 :a1046. +:a1047 :a1047 :a1047. +:a1048 :a1048 :a1048. +:a1049 :a1049 :a1049. +:a1050 :a1050 :a1050. +:a1051 :a1051 :a1051. +:a1052 :a1052 :a1052. +:a1053 :a1053 :a1053. +:a1054 :a1054 :a1054. +:a1055 :a1055 :a1055. +:a1056 :a1056 :a1056. +:a1057 :a1057 :a1057. +:a1058 :a1058 :a1058. +:a1059 :a1059 :a1059. +:a1060 :a1060 :a1060. +:a1061 :a1061 :a1061. +:a1062 :a1062 :a1062. +:a1063 :a1063 :a1063. +:a1064 :a1064 :a1064. +:a1065 :a1065 :a1065. +:a1066 :a1066 :a1066. +:a1067 :a1067 :a1067. +:a1068 :a1068 :a1068. +:a1069 :a1069 :a1069. +:a1070 :a1070 :a1070. +:a1071 :a1071 :a1071. +:a1072 :a1072 :a1072. +:a1073 :a1073 :a1073. +:a1074 :a1074 :a1074. +:a1075 :a1075 :a1075. +:a1076 :a1076 :a1076. +:a1077 :a1077 :a1077. +:a1078 :a1078 :a1078. +:a1079 :a1079 :a1079. +:a1080 :a1080 :a1080. +:a1081 :a1081 :a1081. +:a1082 :a1082 :a1082. +:a1083 :a1083 :a1083. +:a1084 :a1084 :a1084. +:a1085 :a1085 :a1085. +:a1086 :a1086 :a1086. +:a1087 :a1087 :a1087. +:a1088 :a1088 :a1088. +:a1089 :a1089 :a1089. +:a1090 :a1090 :a1090. +:a1091 :a1091 :a1091. +:a1092 :a1092 :a1092. +:a1093 :a1093 :a1093. +:a1094 :a1094 :a1094. +:a1095 :a1095 :a1095. +:a1096 :a1096 :a1096. +:a1097 :a1097 :a1097. +:a1098 :a1098 :a1098. +:a1099 :a1099 :a1099. +:a1100 :a1100 :a1100. +:a1101 :a1101 :a1101. +:a1102 :a1102 :a1102. +:a1103 :a1103 :a1103. +:a1104 :a1104 :a1104. +:a1105 :a1105 :a1105. +:a1106 :a1106 :a1106. +:a1107 :a1107 :a1107. +:a1108 :a1108 :a1108. +:a1109 :a1109 :a1109. +:a1110 :a1110 :a1110. +:a1111 :a1111 :a1111. +:a1112 :a1112 :a1112. +:a1113 :a1113 :a1113. +:a1114 :a1114 :a1114. +:a1115 :a1115 :a1115. +:a1116 :a1116 :a1116. +:a1117 :a1117 :a1117. +:a1118 :a1118 :a1118. +:a1119 :a1119 :a1119. +:a1120 :a1120 :a1120. +:a1121 :a1121 :a1121. +:a1122 :a1122 :a1122. +:a1123 :a1123 :a1123. +:a1124 :a1124 :a1124. +:a1125 :a1125 :a1125. +:a1126 :a1126 :a1126. +:a1127 :a1127 :a1127. +:a1128 :a1128 :a1128. +:a1129 :a1129 :a1129. +:a1130 :a1130 :a1130. +:a1131 :a1131 :a1131. +:a1132 :a1132 :a1132. +:a1133 :a1133 :a1133. +:a1134 :a1134 :a1134. +:a1135 :a1135 :a1135. +:a1136 :a1136 :a1136. +:a1137 :a1137 :a1137. +:a1138 :a1138 :a1138. +:a1139 :a1139 :a1139. +:a1140 :a1140 :a1140. +:a1141 :a1141 :a1141. +:a1142 :a1142 :a1142. +:a1143 :a1143 :a1143. +:a1144 :a1144 :a1144. +:a1145 :a1145 :a1145. +:a1146 :a1146 :a1146. +:a1147 :a1147 :a1147. +:a1148 :a1148 :a1148. +:a1149 :a1149 :a1149. +:a1150 :a1150 :a1150. +:a1151 :a1151 :a1151. +:a1152 :a1152 :a1152. +:a1153 :a1153 :a1153. +:a1154 :a1154 :a1154. +:a1155 :a1155 :a1155. +:a1156 :a1156 :a1156. +:a1157 :a1157 :a1157. +:a1158 :a1158 :a1158. +:a1159 :a1159 :a1159. +:a1160 :a1160 :a1160. +:a1161 :a1161 :a1161. +:a1162 :a1162 :a1162. +:a1163 :a1163 :a1163. +:a1164 :a1164 :a1164. +:a1165 :a1165 :a1165. +:a1166 :a1166 :a1166. +:a1167 :a1167 :a1167. +:a1168 :a1168 :a1168. +:a1169 :a1169 :a1169. +:a1170 :a1170 :a1170. +:a1171 :a1171 :a1171. +:a1172 :a1172 :a1172. +:a1173 :a1173 :a1173. +:a1174 :a1174 :a1174. +:a1175 :a1175 :a1175. +:a1176 :a1176 :a1176. +:a1177 :a1177 :a1177. +:a1178 :a1178 :a1178. +:a1179 :a1179 :a1179. +:a1180 :a1180 :a1180. +:a1181 :a1181 :a1181. +:a1182 :a1182 :a1182. +:a1183 :a1183 :a1183. +:a1184 :a1184 :a1184. +:a1185 :a1185 :a1185. +:a1186 :a1186 :a1186. +:a1187 :a1187 :a1187. +:a1188 :a1188 :a1188. +:a1189 :a1189 :a1189. +:a1190 :a1190 :a1190. +:a1191 :a1191 :a1191. +:a1192 :a1192 :a1192. +:a1193 :a1193 :a1193. +:a1194 :a1194 :a1194. +:a1195 :a1195 :a1195. +:a1196 :a1196 :a1196. +:a1197 :a1197 :a1197. +:a1198 :a1198 :a1198. +:a1199 :a1199 :a1199. +:a1200 :a1200 :a1200. +:a1201 :a1201 :a1201. +:a1202 :a1202 :a1202. +:a1203 :a1203 :a1203. +:a1204 :a1204 :a1204. +:a1205 :a1205 :a1205. +:a1206 :a1206 :a1206. +:a1207 :a1207 :a1207. +:a1208 :a1208 :a1208. +:a1209 :a1209 :a1209. +:a1210 :a1210 :a1210. +:a1211 :a1211 :a1211. +:a1212 :a1212 :a1212. +:a1213 :a1213 :a1213. +:a1214 :a1214 :a1214. +:a1215 :a1215 :a1215. +:a1216 :a1216 :a1216. +:a1217 :a1217 :a1217. +:a1218 :a1218 :a1218. +:a1219 :a1219 :a1219. +:a1220 :a1220 :a1220. +:a1221 :a1221 :a1221. +:a1222 :a1222 :a1222. +:a1223 :a1223 :a1223. +:a1224 :a1224 :a1224. +:a1225 :a1225 :a1225. +:a1226 :a1226 :a1226. +:a1227 :a1227 :a1227. +:a1228 :a1228 :a1228. +:a1229 :a1229 :a1229. +:a1230 :a1230 :a1230. +:a1231 :a1231 :a1231. +:a1232 :a1232 :a1232. +:a1233 :a1233 :a1233. +:a1234 :a1234 :a1234. +:a1235 :a1235 :a1235. +:a1236 :a1236 :a1236. +:a1237 :a1237 :a1237. +:a1238 :a1238 :a1238. +:a1239 :a1239 :a1239. +:a1240 :a1240 :a1240. +:a1241 :a1241 :a1241. +:a1242 :a1242 :a1242. +:a1243 :a1243 :a1243. +:a1244 :a1244 :a1244. +:a1245 :a1245 :a1245. +:a1246 :a1246 :a1246. +:a1247 :a1247 :a1247. +:a1248 :a1248 :a1248. +:a1249 :a1249 :a1249. +:a1250 :a1250 :a1250. +:a1251 :a1251 :a1251. +:a1252 :a1252 :a1252. +:a1253 :a1253 :a1253. +:a1254 :a1254 :a1254. +:a1255 :a1255 :a1255. +:a1256 :a1256 :a1256. +:a1257 :a1257 :a1257. +:a1258 :a1258 :a1258. +:a1259 :a1259 :a1259. +:a1260 :a1260 :a1260. +:a1261 :a1261 :a1261. +:a1262 :a1262 :a1262. +:a1263 :a1263 :a1263. +:a1264 :a1264 :a1264. +:a1265 :a1265 :a1265. +:a1266 :a1266 :a1266. +:a1267 :a1267 :a1267. +:a1268 :a1268 :a1268. +:a1269 :a1269 :a1269. +:a1270 :a1270 :a1270. +:a1271 :a1271 :a1271. +:a1272 :a1272 :a1272. +:a1273 :a1273 :a1273. +:a1274 :a1274 :a1274. +:a1275 :a1275 :a1275. +:a1276 :a1276 :a1276. +:a1277 :a1277 :a1277. +:a1278 :a1278 :a1278. +:a1279 :a1279 :a1279. +:a1280 :a1280 :a1280. +:a1281 :a1281 :a1281. +:a1282 :a1282 :a1282. +:a1283 :a1283 :a1283. +:a1284 :a1284 :a1284. +:a1285 :a1285 :a1285. +:a1286 :a1286 :a1286. +:a1287 :a1287 :a1287. +:a1288 :a1288 :a1288. +:a1289 :a1289 :a1289. +:a1290 :a1290 :a1290. +:a1291 :a1291 :a1291. +:a1292 :a1292 :a1292. +:a1293 :a1293 :a1293. +:a1294 :a1294 :a1294. +:a1295 :a1295 :a1295. +:a1296 :a1296 :a1296. +:a1297 :a1297 :a1297. +:a1298 :a1298 :a1298. +:a1299 :a1299 :a1299. +:a1300 :a1300 :a1300. +:a1301 :a1301 :a1301. +:a1302 :a1302 :a1302. +:a1303 :a1303 :a1303. +:a1304 :a1304 :a1304. +:a1305 :a1305 :a1305. +:a1306 :a1306 :a1306. +:a1307 :a1307 :a1307. +:a1308 :a1308 :a1308. +:a1309 :a1309 :a1309. +:a1310 :a1310 :a1310. +:a1311 :a1311 :a1311. +:a1312 :a1312 :a1312. +:a1313 :a1313 :a1313. +:a1314 :a1314 :a1314. +:a1315 :a1315 :a1315. +:a1316 :a1316 :a1316. +:a1317 :a1317 :a1317. +:a1318 :a1318 :a1318. +:a1319 :a1319 :a1319. +:a1320 :a1320 :a1320. +:a1321 :a1321 :a1321. +:a1322 :a1322 :a1322. +:a1323 :a1323 :a1323. +:a1324 :a1324 :a1324. +:a1325 :a1325 :a1325. +:a1326 :a1326 :a1326. +:a1327 :a1327 :a1327. +:a1328 :a1328 :a1328. +:a1329 :a1329 :a1329. +:a1330 :a1330 :a1330. +:a1331 :a1331 :a1331. +:a1332 :a1332 :a1332. +:a1333 :a1333 :a1333. +:a1334 :a1334 :a1334. +:a1335 :a1335 :a1335. +:a1336 :a1336 :a1336. +:a1337 :a1337 :a1337. +:a1338 :a1338 :a1338. +:a1339 :a1339 :a1339. +:a1340 :a1340 :a1340. +:a1341 :a1341 :a1341. +:a1342 :a1342 :a1342. +:a1343 :a1343 :a1343. +:a1344 :a1344 :a1344. +:a1345 :a1345 :a1345. +:a1346 :a1346 :a1346. +:a1347 :a1347 :a1347. +:a1348 :a1348 :a1348. +:a1349 :a1349 :a1349. +:a1350 :a1350 :a1350. +:a1351 :a1351 :a1351. +:a1352 :a1352 :a1352. +:a1353 :a1353 :a1353. +:a1354 :a1354 :a1354. +:a1355 :a1355 :a1355. +:a1356 :a1356 :a1356. +:a1357 :a1357 :a1357. +:a1358 :a1358 :a1358. +:a1359 :a1359 :a1359. +:a1360 :a1360 :a1360. +:a1361 :a1361 :a1361. +:a1362 :a1362 :a1362. +:a1363 :a1363 :a1363. +:a1364 :a1364 :a1364. +:a1365 :a1365 :a1365. +:a1366 :a1366 :a1366. +:a1367 :a1367 :a1367. +:a1368 :a1368 :a1368. +:a1369 :a1369 :a1369. +:a1370 :a1370 :a1370. +:a1371 :a1371 :a1371. +:a1372 :a1372 :a1372. +:a1373 :a1373 :a1373. +:a1374 :a1374 :a1374. +:a1375 :a1375 :a1375. +:a1376 :a1376 :a1376. +:a1377 :a1377 :a1377. +:a1378 :a1378 :a1378. +:a1379 :a1379 :a1379. +:a1380 :a1380 :a1380. +:a1381 :a1381 :a1381. +:a1382 :a1382 :a1382. +:a1383 :a1383 :a1383. +:a1384 :a1384 :a1384. +:a1385 :a1385 :a1385. +:a1386 :a1386 :a1386. +:a1387 :a1387 :a1387. +:a1388 :a1388 :a1388. +:a1389 :a1389 :a1389. +:a1390 :a1390 :a1390. +:a1391 :a1391 :a1391. +:a1392 :a1392 :a1392. +:a1393 :a1393 :a1393. +:a1394 :a1394 :a1394. +:a1395 :a1395 :a1395. +:a1396 :a1396 :a1396. +:a1397 :a1397 :a1397. +:a1398 :a1398 :a1398. +:a1399 :a1399 :a1399. +:a1400 :a1400 :a1400. +:a1401 :a1401 :a1401. +:a1402 :a1402 :a1402. +:a1403 :a1403 :a1403. +:a1404 :a1404 :a1404. +:a1405 :a1405 :a1405. +:a1406 :a1406 :a1406. +:a1407 :a1407 :a1407. +:a1408 :a1408 :a1408. +:a1409 :a1409 :a1409. +:a1410 :a1410 :a1410. +:a1411 :a1411 :a1411. +:a1412 :a1412 :a1412. +:a1413 :a1413 :a1413. +:a1414 :a1414 :a1414. +:a1415 :a1415 :a1415. +:a1416 :a1416 :a1416. +:a1417 :a1417 :a1417. +:a1418 :a1418 :a1418. +:a1419 :a1419 :a1419. +:a1420 :a1420 :a1420. +:a1421 :a1421 :a1421. +:a1422 :a1422 :a1422. +:a1423 :a1423 :a1423. +:a1424 :a1424 :a1424. +:a1425 :a1425 :a1425. +:a1426 :a1426 :a1426. +:a1427 :a1427 :a1427. +:a1428 :a1428 :a1428. +:a1429 :a1429 :a1429. +:a1430 :a1430 :a1430. +:a1431 :a1431 :a1431. +:a1432 :a1432 :a1432. +:a1433 :a1433 :a1433. +:a1434 :a1434 :a1434. +:a1435 :a1435 :a1435. +:a1436 :a1436 :a1436. +:a1437 :a1437 :a1437. +:a1438 :a1438 :a1438. +:a1439 :a1439 :a1439. +:a1440 :a1440 :a1440. +:a1441 :a1441 :a1441. +:a1442 :a1442 :a1442. +:a1443 :a1443 :a1443. +:a1444 :a1444 :a1444. +:a1445 :a1445 :a1445. +:a1446 :a1446 :a1446. +:a1447 :a1447 :a1447. +:a1448 :a1448 :a1448. +:a1449 :a1449 :a1449. +:a1450 :a1450 :a1450. +:a1451 :a1451 :a1451. +:a1452 :a1452 :a1452. +:a1453 :a1453 :a1453. +:a1454 :a1454 :a1454. +:a1455 :a1455 :a1455. +:a1456 :a1456 :a1456. +:a1457 :a1457 :a1457. +:a1458 :a1458 :a1458. +:a1459 :a1459 :a1459. +:a1460 :a1460 :a1460. +:a1461 :a1461 :a1461. +:a1462 :a1462 :a1462. +:a1463 :a1463 :a1463. +:a1464 :a1464 :a1464. +:a1465 :a1465 :a1465. +:a1466 :a1466 :a1466. +:a1467 :a1467 :a1467. +:a1468 :a1468 :a1468. +:a1469 :a1469 :a1469. +:a1470 :a1470 :a1470. +:a1471 :a1471 :a1471. +:a1472 :a1472 :a1472. +:a1473 :a1473 :a1473. +:a1474 :a1474 :a1474. +:a1475 :a1475 :a1475. +:a1476 :a1476 :a1476. +:a1477 :a1477 :a1477. +:a1478 :a1478 :a1478. +:a1479 :a1479 :a1479. +:a1480 :a1480 :a1480. +:a1481 :a1481 :a1481. +:a1482 :a1482 :a1482. +:a1483 :a1483 :a1483. +:a1484 :a1484 :a1484. +:a1485 :a1485 :a1485. +:a1486 :a1486 :a1486. +:a1487 :a1487 :a1487. +:a1488 :a1488 :a1488. +:a1489 :a1489 :a1489. +:a1490 :a1490 :a1490. +:a1491 :a1491 :a1491. +:a1492 :a1492 :a1492. +:a1493 :a1493 :a1493. +:a1494 :a1494 :a1494. +:a1495 :a1495 :a1495. +:a1496 :a1496 :a1496. +:a1497 :a1497 :a1497. +:a1498 :a1498 :a1498. +:a1499 :a1499 :a1499. +:a1500 :a1500 :a1500. +:a1501 :a1501 :a1501. +:a1502 :a1502 :a1502. +:a1503 :a1503 :a1503. +:a1504 :a1504 :a1504. +:a1505 :a1505 :a1505. +:a1506 :a1506 :a1506. +:a1507 :a1507 :a1507. +:a1508 :a1508 :a1508. +:a1509 :a1509 :a1509. +:a1510 :a1510 :a1510. +:a1511 :a1511 :a1511. +:a1512 :a1512 :a1512. +:a1513 :a1513 :a1513. +:a1514 :a1514 :a1514. +:a1515 :a1515 :a1515. +:a1516 :a1516 :a1516. +:a1517 :a1517 :a1517. +:a1518 :a1518 :a1518. +:a1519 :a1519 :a1519. +:a1520 :a1520 :a1520. +:a1521 :a1521 :a1521. +:a1522 :a1522 :a1522. +:a1523 :a1523 :a1523. +:a1524 :a1524 :a1524. +:a1525 :a1525 :a1525. +:a1526 :a1526 :a1526. +:a1527 :a1527 :a1527. +:a1528 :a1528 :a1528. +:a1529 :a1529 :a1529. +:a1530 :a1530 :a1530. +:a1531 :a1531 :a1531. +:a1532 :a1532 :a1532. +:a1533 :a1533 :a1533. +:a1534 :a1534 :a1534. +:a1535 :a1535 :a1535. +:a1536 :a1536 :a1536. +:a1537 :a1537 :a1537. +:a1538 :a1538 :a1538. +:a1539 :a1539 :a1539. +:a1540 :a1540 :a1540. +:a1541 :a1541 :a1541. +:a1542 :a1542 :a1542. +:a1543 :a1543 :a1543. +:a1544 :a1544 :a1544. +:a1545 :a1545 :a1545. +:a1546 :a1546 :a1546. +:a1547 :a1547 :a1547. +:a1548 :a1548 :a1548. +:a1549 :a1549 :a1549. +:a1550 :a1550 :a1550. +:a1551 :a1551 :a1551. +:a1552 :a1552 :a1552. +:a1553 :a1553 :a1553. +:a1554 :a1554 :a1554. +:a1555 :a1555 :a1555. +:a1556 :a1556 :a1556. +:a1557 :a1557 :a1557. +:a1558 :a1558 :a1558. +:a1559 :a1559 :a1559. +:a1560 :a1560 :a1560. +:a1561 :a1561 :a1561. +:a1562 :a1562 :a1562. +:a1563 :a1563 :a1563. +:a1564 :a1564 :a1564. +:a1565 :a1565 :a1565. +:a1566 :a1566 :a1566. +:a1567 :a1567 :a1567. +:a1568 :a1568 :a1568. +:a1569 :a1569 :a1569. +:a1570 :a1570 :a1570. +:a1571 :a1571 :a1571. +:a1572 :a1572 :a1572. +:a1573 :a1573 :a1573. +:a1574 :a1574 :a1574. +:a1575 :a1575 :a1575. +:a1576 :a1576 :a1576. +:a1577 :a1577 :a1577. +:a1578 :a1578 :a1578. +:a1579 :a1579 :a1579. +:a1580 :a1580 :a1580. +:a1581 :a1581 :a1581. +:a1582 :a1582 :a1582. +:a1583 :a1583 :a1583. +:a1584 :a1584 :a1584. +:a1585 :a1585 :a1585. +:a1586 :a1586 :a1586. +:a1587 :a1587 :a1587. +:a1588 :a1588 :a1588. +:a1589 :a1589 :a1589. +:a1590 :a1590 :a1590. +:a1591 :a1591 :a1591. +:a1592 :a1592 :a1592. +:a1593 :a1593 :a1593. +:a1594 :a1594 :a1594. +:a1595 :a1595 :a1595. +:a1596 :a1596 :a1596. +:a1597 :a1597 :a1597. +:a1598 :a1598 :a1598. +:a1599 :a1599 :a1599. +:a1600 :a1600 :a1600. +:a1601 :a1601 :a1601. +:a1602 :a1602 :a1602. +:a1603 :a1603 :a1603. +:a1604 :a1604 :a1604. +:a1605 :a1605 :a1605. +:a1606 :a1606 :a1606. +:a1607 :a1607 :a1607. +:a1608 :a1608 :a1608. +:a1609 :a1609 :a1609. +:a1610 :a1610 :a1610. +:a1611 :a1611 :a1611. +:a1612 :a1612 :a1612. +:a1613 :a1613 :a1613. +:a1614 :a1614 :a1614. +:a1615 :a1615 :a1615. +:a1616 :a1616 :a1616. +:a1617 :a1617 :a1617. +:a1618 :a1618 :a1618. +:a1619 :a1619 :a1619. +:a1620 :a1620 :a1620. +:a1621 :a1621 :a1621. +:a1622 :a1622 :a1622. +:a1623 :a1623 :a1623. +:a1624 :a1624 :a1624. +:a1625 :a1625 :a1625. +:a1626 :a1626 :a1626. +:a1627 :a1627 :a1627. +:a1628 :a1628 :a1628. +:a1629 :a1629 :a1629. +:a1630 :a1630 :a1630. +:a1631 :a1631 :a1631. +:a1632 :a1632 :a1632. +:a1633 :a1633 :a1633. +:a1634 :a1634 :a1634. +:a1635 :a1635 :a1635. +:a1636 :a1636 :a1636. +:a1637 :a1637 :a1637. +:a1638 :a1638 :a1638. +:a1639 :a1639 :a1639. +:a1640 :a1640 :a1640. +:a1641 :a1641 :a1641. +:a1642 :a1642 :a1642. +:a1643 :a1643 :a1643. +:a1644 :a1644 :a1644. +:a1645 :a1645 :a1645. +:a1646 :a1646 :a1646. +:a1647 :a1647 :a1647. +:a1648 :a1648 :a1648. +:a1649 :a1649 :a1649. +:a1650 :a1650 :a1650. +:a1651 :a1651 :a1651. +:a1652 :a1652 :a1652. +:a1653 :a1653 :a1653. +:a1654 :a1654 :a1654. +:a1655 :a1655 :a1655. +:a1656 :a1656 :a1656. +:a1657 :a1657 :a1657. +:a1658 :a1658 :a1658. +:a1659 :a1659 :a1659. +:a1660 :a1660 :a1660. +:a1661 :a1661 :a1661. +:a1662 :a1662 :a1662. +:a1663 :a1663 :a1663. +:a1664 :a1664 :a1664. +:a1665 :a1665 :a1665. +:a1666 :a1666 :a1666. +:a1667 :a1667 :a1667. +:a1668 :a1668 :a1668. +:a1669 :a1669 :a1669. +:a1670 :a1670 :a1670. +:a1671 :a1671 :a1671. +:a1672 :a1672 :a1672. +:a1673 :a1673 :a1673. +:a1674 :a1674 :a1674. +:a1675 :a1675 :a1675. +:a1676 :a1676 :a1676. +:a1677 :a1677 :a1677. +:a1678 :a1678 :a1678. +:a1679 :a1679 :a1679. +:a1680 :a1680 :a1680. +:a1681 :a1681 :a1681. +:a1682 :a1682 :a1682. +:a1683 :a1683 :a1683. +:a1684 :a1684 :a1684. +:a1685 :a1685 :a1685. +:a1686 :a1686 :a1686. +:a1687 :a1687 :a1687. +:a1688 :a1688 :a1688. +:a1689 :a1689 :a1689. +:a1690 :a1690 :a1690. +:a1691 :a1691 :a1691. +:a1692 :a1692 :a1692. +:a1693 :a1693 :a1693. +:a1694 :a1694 :a1694. +:a1695 :a1695 :a1695. +:a1696 :a1696 :a1696. +:a1697 :a1697 :a1697. +:a1698 :a1698 :a1698. +:a1699 :a1699 :a1699. +:a1700 :a1700 :a1700. +:a1701 :a1701 :a1701. +:a1702 :a1702 :a1702. +:a1703 :a1703 :a1703. +:a1704 :a1704 :a1704. +:a1705 :a1705 :a1705. +:a1706 :a1706 :a1706. +:a1707 :a1707 :a1707. +:a1708 :a1708 :a1708. +:a1709 :a1709 :a1709. +:a1710 :a1710 :a1710. +:a1711 :a1711 :a1711. +:a1712 :a1712 :a1712. +:a1713 :a1713 :a1713. +:a1714 :a1714 :a1714. +:a1715 :a1715 :a1715. +:a1716 :a1716 :a1716. +:a1717 :a1717 :a1717. +:a1718 :a1718 :a1718. +:a1719 :a1719 :a1719. +:a1720 :a1720 :a1720. +:a1721 :a1721 :a1721. +:a1722 :a1722 :a1722. +:a1723 :a1723 :a1723. +:a1724 :a1724 :a1724. +:a1725 :a1725 :a1725. +:a1726 :a1726 :a1726. +:a1727 :a1727 :a1727. +:a1728 :a1728 :a1728. +:a1729 :a1729 :a1729. +:a1730 :a1730 :a1730. +:a1731 :a1731 :a1731. +:a1732 :a1732 :a1732. +:a1733 :a1733 :a1733. +:a1734 :a1734 :a1734. +:a1735 :a1735 :a1735. +:a1736 :a1736 :a1736. +:a1737 :a1737 :a1737. +:a1738 :a1738 :a1738. +:a1739 :a1739 :a1739. +:a1740 :a1740 :a1740. +:a1741 :a1741 :a1741. +:a1742 :a1742 :a1742. +:a1743 :a1743 :a1743. +:a1744 :a1744 :a1744. +:a1745 :a1745 :a1745. +:a1746 :a1746 :a1746. +:a1747 :a1747 :a1747. +:a1748 :a1748 :a1748. +:a1749 :a1749 :a1749. +:a1750 :a1750 :a1750. +:a1751 :a1751 :a1751. +:a1752 :a1752 :a1752. +:a1753 :a1753 :a1753. +:a1754 :a1754 :a1754. +:a1755 :a1755 :a1755. +:a1756 :a1756 :a1756. +:a1757 :a1757 :a1757. +:a1758 :a1758 :a1758. +:a1759 :a1759 :a1759. +:a1760 :a1760 :a1760. +:a1761 :a1761 :a1761. +:a1762 :a1762 :a1762. +:a1763 :a1763 :a1763. +:a1764 :a1764 :a1764. +:a1765 :a1765 :a1765. +:a1766 :a1766 :a1766. +:a1767 :a1767 :a1767. +:a1768 :a1768 :a1768. +:a1769 :a1769 :a1769. +:a1770 :a1770 :a1770. +:a1771 :a1771 :a1771. +:a1772 :a1772 :a1772. +:a1773 :a1773 :a1773. +:a1774 :a1774 :a1774. +:a1775 :a1775 :a1775. +:a1776 :a1776 :a1776. +:a1777 :a1777 :a1777. +:a1778 :a1778 :a1778. +:a1779 :a1779 :a1779. +:a1780 :a1780 :a1780. +:a1781 :a1781 :a1781. +:a1782 :a1782 :a1782. +:a1783 :a1783 :a1783. +:a1784 :a1784 :a1784. +:a1785 :a1785 :a1785. +:a1786 :a1786 :a1786. +:a1787 :a1787 :a1787. +:a1788 :a1788 :a1788. +:a1789 :a1789 :a1789. +:a1790 :a1790 :a1790. +:a1791 :a1791 :a1791. +:a1792 :a1792 :a1792. +:a1793 :a1793 :a1793. +:a1794 :a1794 :a1794. +:a1795 :a1795 :a1795. +:a1796 :a1796 :a1796. +:a1797 :a1797 :a1797. +:a1798 :a1798 :a1798. +:a1799 :a1799 :a1799. +:a1800 :a1800 :a1800. +:a1801 :a1801 :a1801. +:a1802 :a1802 :a1802. +:a1803 :a1803 :a1803. +:a1804 :a1804 :a1804. +:a1805 :a1805 :a1805. +:a1806 :a1806 :a1806. +:a1807 :a1807 :a1807. +:a1808 :a1808 :a1808. +:a1809 :a1809 :a1809. +:a1810 :a1810 :a1810. +:a1811 :a1811 :a1811. +:a1812 :a1812 :a1812. +:a1813 :a1813 :a1813. +:a1814 :a1814 :a1814. +:a1815 :a1815 :a1815. +:a1816 :a1816 :a1816. +:a1817 :a1817 :a1817. +:a1818 :a1818 :a1818. +:a1819 :a1819 :a1819. +:a1820 :a1820 :a1820. +:a1821 :a1821 :a1821. +:a1822 :a1822 :a1822. +:a1823 :a1823 :a1823. +:a1824 :a1824 :a1824. +:a1825 :a1825 :a1825. +:a1826 :a1826 :a1826. +:a1827 :a1827 :a1827. +:a1828 :a1828 :a1828. +:a1829 :a1829 :a1829. +:a1830 :a1830 :a1830. +:a1831 :a1831 :a1831. +:a1832 :a1832 :a1832. +:a1833 :a1833 :a1833. +:a1834 :a1834 :a1834. +:a1835 :a1835 :a1835. +:a1836 :a1836 :a1836. +:a1837 :a1837 :a1837. +:a1838 :a1838 :a1838. +:a1839 :a1839 :a1839. +:a1840 :a1840 :a1840. +:a1841 :a1841 :a1841. +:a1842 :a1842 :a1842. +:a1843 :a1843 :a1843. +:a1844 :a1844 :a1844. +:a1845 :a1845 :a1845. +:a1846 :a1846 :a1846. +:a1847 :a1847 :a1847. +:a1848 :a1848 :a1848. +:a1849 :a1849 :a1849. +:a1850 :a1850 :a1850. +:a1851 :a1851 :a1851. +:a1852 :a1852 :a1852. +:a1853 :a1853 :a1853. +:a1854 :a1854 :a1854. +:a1855 :a1855 :a1855. +:a1856 :a1856 :a1856. +:a1857 :a1857 :a1857. +:a1858 :a1858 :a1858. +:a1859 :a1859 :a1859. +:a1860 :a1860 :a1860. +:a1861 :a1861 :a1861. +:a1862 :a1862 :a1862. +:a1863 :a1863 :a1863. +:a1864 :a1864 :a1864. +:a1865 :a1865 :a1865. +:a1866 :a1866 :a1866. +:a1867 :a1867 :a1867. +:a1868 :a1868 :a1868. +:a1869 :a1869 :a1869. +:a1870 :a1870 :a1870. +:a1871 :a1871 :a1871. +:a1872 :a1872 :a1872. +:a1873 :a1873 :a1873. +:a1874 :a1874 :a1874. +:a1875 :a1875 :a1875. +:a1876 :a1876 :a1876. +:a1877 :a1877 :a1877. +:a1878 :a1878 :a1878. +:a1879 :a1879 :a1879. +:a1880 :a1880 :a1880. +:a1881 :a1881 :a1881. +:a1882 :a1882 :a1882. +:a1883 :a1883 :a1883. +:a1884 :a1884 :a1884. +:a1885 :a1885 :a1885. +:a1886 :a1886 :a1886. +:a1887 :a1887 :a1887. +:a1888 :a1888 :a1888. +:a1889 :a1889 :a1889. +:a1890 :a1890 :a1890. +:a1891 :a1891 :a1891. +:a1892 :a1892 :a1892. +:a1893 :a1893 :a1893. +:a1894 :a1894 :a1894. +:a1895 :a1895 :a1895. +:a1896 :a1896 :a1896. +:a1897 :a1897 :a1897. +:a1898 :a1898 :a1898. +:a1899 :a1899 :a1899. +:a1900 :a1900 :a1900. +:a1901 :a1901 :a1901. +:a1902 :a1902 :a1902. +:a1903 :a1903 :a1903. +:a1904 :a1904 :a1904. +:a1905 :a1905 :a1905. +:a1906 :a1906 :a1906. +:a1907 :a1907 :a1907. +:a1908 :a1908 :a1908. +:a1909 :a1909 :a1909. +:a1910 :a1910 :a1910. +:a1911 :a1911 :a1911. +:a1912 :a1912 :a1912. +:a1913 :a1913 :a1913. +:a1914 :a1914 :a1914. +:a1915 :a1915 :a1915. +:a1916 :a1916 :a1916. +:a1917 :a1917 :a1917. +:a1918 :a1918 :a1918. +:a1919 :a1919 :a1919. +:a1920 :a1920 :a1920. +:a1921 :a1921 :a1921. +:a1922 :a1922 :a1922. +:a1923 :a1923 :a1923. +:a1924 :a1924 :a1924. +:a1925 :a1925 :a1925. +:a1926 :a1926 :a1926. +:a1927 :a1927 :a1927. +:a1928 :a1928 :a1928. +:a1929 :a1929 :a1929. +:a1930 :a1930 :a1930. +:a1931 :a1931 :a1931. +:a1932 :a1932 :a1932. +:a1933 :a1933 :a1933. +:a1934 :a1934 :a1934. +:a1935 :a1935 :a1935. +:a1936 :a1936 :a1936. +:a1937 :a1937 :a1937. +:a1938 :a1938 :a1938. +:a1939 :a1939 :a1939. +:a1940 :a1940 :a1940. +:a1941 :a1941 :a1941. +:a1942 :a1942 :a1942. +:a1943 :a1943 :a1943. +:a1944 :a1944 :a1944. +:a1945 :a1945 :a1945. +:a1946 :a1946 :a1946. +:a1947 :a1947 :a1947. +:a1948 :a1948 :a1948. +:a1949 :a1949 :a1949. +:a1950 :a1950 :a1950. +:a1951 :a1951 :a1951. +:a1952 :a1952 :a1952. +:a1953 :a1953 :a1953. +:a1954 :a1954 :a1954. +:a1955 :a1955 :a1955. +:a1956 :a1956 :a1956. +:a1957 :a1957 :a1957. +:a1958 :a1958 :a1958. +:a1959 :a1959 :a1959. +:a1960 :a1960 :a1960. +:a1961 :a1961 :a1961. +:a1962 :a1962 :a1962. +:a1963 :a1963 :a1963. +:a1964 :a1964 :a1964. +:a1965 :a1965 :a1965. +:a1966 :a1966 :a1966. +:a1967 :a1967 :a1967. +:a1968 :a1968 :a1968. +:a1969 :a1969 :a1969. +:a1970 :a1970 :a1970. +:a1971 :a1971 :a1971. +:a1972 :a1972 :a1972. +:a1973 :a1973 :a1973. +:a1974 :a1974 :a1974. +:a1975 :a1975 :a1975. +:a1976 :a1976 :a1976. +:a1977 :a1977 :a1977. +:a1978 :a1978 :a1978. +:a1979 :a1979 :a1979. +:a1980 :a1980 :a1980. +:a1981 :a1981 :a1981. +:a1982 :a1982 :a1982. +:a1983 :a1983 :a1983. +:a1984 :a1984 :a1984. +:a1985 :a1985 :a1985. +:a1986 :a1986 :a1986. +:a1987 :a1987 :a1987. +:a1988 :a1988 :a1988. +:a1989 :a1989 :a1989. +:a1990 :a1990 :a1990. +:a1991 :a1991 :a1991. +:a1992 :a1992 :a1992. +:a1993 :a1993 :a1993. +:a1994 :a1994 :a1994. +:a1995 :a1995 :a1995. +:a1996 :a1996 :a1996. +:a1997 :a1997 :a1997. +:a1998 :a1998 :a1998. +:a1999 :a1999 :a1999. +:a2000 :a2000 :a2000. +:a2001 :a2001 :a2001. +:a2002 :a2002 :a2002. +:a2003 :a2003 :a2003. +:a2004 :a2004 :a2004. +:a2005 :a2005 :a2005. +:a2006 :a2006 :a2006. +:a2007 :a2007 :a2007. +:a2008 :a2008 :a2008. +:a2009 :a2009 :a2009. +:a2010 :a2010 :a2010. +:a2011 :a2011 :a2011. +:a2012 :a2012 :a2012. +:a2013 :a2013 :a2013. +:a2014 :a2014 :a2014. +:a2015 :a2015 :a2015. +:a2016 :a2016 :a2016. +:a2017 :a2017 :a2017. +:a2018 :a2018 :a2018. +:a2019 :a2019 :a2019. +:a2020 :a2020 :a2020. +:a2021 :a2021 :a2021. +:a2022 :a2022 :a2022. +:a2023 :a2023 :a2023. +:a2024 :a2024 :a2024. +:a2025 :a2025 :a2025. +:a2026 :a2026 :a2026. +:a2027 :a2027 :a2027. +:a2028 :a2028 :a2028. +:a2029 :a2029 :a2029. +:a2030 :a2030 :a2030. +:a2031 :a2031 :a2031. +:a2032 :a2032 :a2032. +:a2033 :a2033 :a2033. +:a2034 :a2034 :a2034. +:a2035 :a2035 :a2035. +:a2036 :a2036 :a2036. +:a2037 :a2037 :a2037. +:a2038 :a2038 :a2038. +:a2039 :a2039 :a2039. +:a2040 :a2040 :a2040. +:a2041 :a2041 :a2041. +:a2042 :a2042 :a2042. +:a2043 :a2043 :a2043. +:a2044 :a2044 :a2044. +:a2045 :a2045 :a2045. +:a2046 :a2046 :a2046. +:a2047 :a2047 :a2047. +:a2048 :a2048 :a2048. +:a2049 :a2049 :a2049. +:a2050 :a2050 :a2050. +:a2051 :a2051 :a2051. +:a2052 :a2052 :a2052. +:a2053 :a2053 :a2053. +:a2054 :a2054 :a2054. +:a2055 :a2055 :a2055. +:a2056 :a2056 :a2056. +:a2057 :a2057 :a2057. +:a2058 :a2058 :a2058. +:a2059 :a2059 :a2059. +:a2060 :a2060 :a2060. +:a2061 :a2061 :a2061. +:a2062 :a2062 :a2062. +:a2063 :a2063 :a2063. +:a2064 :a2064 :a2064. +:a2065 :a2065 :a2065. +:a2066 :a2066 :a2066. +:a2067 :a2067 :a2067. +:a2068 :a2068 :a2068. +:a2069 :a2069 :a2069. +:a2070 :a2070 :a2070. +:a2071 :a2071 :a2071. +:a2072 :a2072 :a2072. +:a2073 :a2073 :a2073. +:a2074 :a2074 :a2074. +:a2075 :a2075 :a2075. +:a2076 :a2076 :a2076. +:a2077 :a2077 :a2077. +:a2078 :a2078 :a2078. +:a2079 :a2079 :a2079. +:a2080 :a2080 :a2080. +:a2081 :a2081 :a2081. +:a2082 :a2082 :a2082. +:a2083 :a2083 :a2083. +:a2084 :a2084 :a2084. +:a2085 :a2085 :a2085. +:a2086 :a2086 :a2086. +:a2087 :a2087 :a2087. +:a2088 :a2088 :a2088. +:a2089 :a2089 :a2089. +:a2090 :a2090 :a2090. +:a2091 :a2091 :a2091. +:a2092 :a2092 :a2092. +:a2093 :a2093 :a2093. +:a2094 :a2094 :a2094. +:a2095 :a2095 :a2095. +:a2096 :a2096 :a2096. +:a2097 :a2097 :a2097. +:a2098 :a2098 :a2098. +:a2099 :a2099 :a2099. +:a2100 :a2100 :a2100. +:a2101 :a2101 :a2101. +:a2102 :a2102 :a2102. +:a2103 :a2103 :a2103. +:a2104 :a2104 :a2104. +:a2105 :a2105 :a2105. +:a2106 :a2106 :a2106. +:a2107 :a2107 :a2107. +:a2108 :a2108 :a2108. +:a2109 :a2109 :a2109. +:a2110 :a2110 :a2110. +:a2111 :a2111 :a2111. +:a2112 :a2112 :a2112. +:a2113 :a2113 :a2113. +:a2114 :a2114 :a2114. +:a2115 :a2115 :a2115. +:a2116 :a2116 :a2116. +:a2117 :a2117 :a2117. +:a2118 :a2118 :a2118. +:a2119 :a2119 :a2119. +:a2120 :a2120 :a2120. +:a2121 :a2121 :a2121. +:a2122 :a2122 :a2122. +:a2123 :a2123 :a2123. +:a2124 :a2124 :a2124. +:a2125 :a2125 :a2125. +:a2126 :a2126 :a2126. +:a2127 :a2127 :a2127. +:a2128 :a2128 :a2128. +:a2129 :a2129 :a2129. +:a2130 :a2130 :a2130. +:a2131 :a2131 :a2131. +:a2132 :a2132 :a2132. +:a2133 :a2133 :a2133. +:a2134 :a2134 :a2134. +:a2135 :a2135 :a2135. +:a2136 :a2136 :a2136. +:a2137 :a2137 :a2137. +:a2138 :a2138 :a2138. +:a2139 :a2139 :a2139. +:a2140 :a2140 :a2140. +:a2141 :a2141 :a2141. +:a2142 :a2142 :a2142. +:a2143 :a2143 :a2143. +:a2144 :a2144 :a2144. +:a2145 :a2145 :a2145. +:a2146 :a2146 :a2146. +:a2147 :a2147 :a2147. +:a2148 :a2148 :a2148. +:a2149 :a2149 :a2149. +:a2150 :a2150 :a2150. +:a2151 :a2151 :a2151. +:a2152 :a2152 :a2152. +:a2153 :a2153 :a2153. +:a2154 :a2154 :a2154. +:a2155 :a2155 :a2155. +:a2156 :a2156 :a2156. +:a2157 :a2157 :a2157. +:a2158 :a2158 :a2158. +:a2159 :a2159 :a2159. +:a2160 :a2160 :a2160. +:a2161 :a2161 :a2161. +:a2162 :a2162 :a2162. +:a2163 :a2163 :a2163. +:a2164 :a2164 :a2164. +:a2165 :a2165 :a2165. +:a2166 :a2166 :a2166. +:a2167 :a2167 :a2167. +:a2168 :a2168 :a2168. +:a2169 :a2169 :a2169. +:a2170 :a2170 :a2170. +:a2171 :a2171 :a2171. +:a2172 :a2172 :a2172. +:a2173 :a2173 :a2173. +:a2174 :a2174 :a2174. +:a2175 :a2175 :a2175. +:a2176 :a2176 :a2176. +:a2177 :a2177 :a2177. +:a2178 :a2178 :a2178. +:a2179 :a2179 :a2179. +:a2180 :a2180 :a2180. +:a2181 :a2181 :a2181. +:a2182 :a2182 :a2182. +:a2183 :a2183 :a2183. +:a2184 :a2184 :a2184. +:a2185 :a2185 :a2185. +:a2186 :a2186 :a2186. +:a2187 :a2187 :a2187. +:a2188 :a2188 :a2188. +:a2189 :a2189 :a2189. +:a2190 :a2190 :a2190. +:a2191 :a2191 :a2191. +:a2192 :a2192 :a2192. +:a2193 :a2193 :a2193. +:a2194 :a2194 :a2194. +:a2195 :a2195 :a2195. +:a2196 :a2196 :a2196. +:a2197 :a2197 :a2197. +:a2198 :a2198 :a2198. +:a2199 :a2199 :a2199. +:a2200 :a2200 :a2200. +:a2201 :a2201 :a2201. +:a2202 :a2202 :a2202. +:a2203 :a2203 :a2203. +:a2204 :a2204 :a2204. +:a2205 :a2205 :a2205. +:a2206 :a2206 :a2206. +:a2207 :a2207 :a2207. +:a2208 :a2208 :a2208. +:a2209 :a2209 :a2209. +:a2210 :a2210 :a2210. +:a2211 :a2211 :a2211. +:a2212 :a2212 :a2212. +:a2213 :a2213 :a2213. +:a2214 :a2214 :a2214. +:a2215 :a2215 :a2215. +:a2216 :a2216 :a2216. +:a2217 :a2217 :a2217. +:a2218 :a2218 :a2218. +:a2219 :a2219 :a2219. +:a2220 :a2220 :a2220. +:a2221 :a2221 :a2221. +:a2222 :a2222 :a2222. +:a2223 :a2223 :a2223. +:a2224 :a2224 :a2224. +:a2225 :a2225 :a2225. +:a2226 :a2226 :a2226. +:a2227 :a2227 :a2227. +:a2228 :a2228 :a2228. +:a2229 :a2229 :a2229. +:a2230 :a2230 :a2230. +:a2231 :a2231 :a2231. +:a2232 :a2232 :a2232. +:a2233 :a2233 :a2233. +:a2234 :a2234 :a2234. +:a2235 :a2235 :a2235. +:a2236 :a2236 :a2236. +:a2237 :a2237 :a2237. +:a2238 :a2238 :a2238. +:a2239 :a2239 :a2239. +:a2240 :a2240 :a2240. +:a2241 :a2241 :a2241. +:a2242 :a2242 :a2242. +:a2243 :a2243 :a2243. +:a2244 :a2244 :a2244. +:a2245 :a2245 :a2245. +:a2246 :a2246 :a2246. +:a2247 :a2247 :a2247. +:a2248 :a2248 :a2248. +:a2249 :a2249 :a2249. +:a2250 :a2250 :a2250. +:a2251 :a2251 :a2251. +:a2252 :a2252 :a2252. +:a2253 :a2253 :a2253. +:a2254 :a2254 :a2254. +:a2255 :a2255 :a2255. +:a2256 :a2256 :a2256. +:a2257 :a2257 :a2257. +:a2258 :a2258 :a2258. +:a2259 :a2259 :a2259. +:a2260 :a2260 :a2260. +:a2261 :a2261 :a2261. +:a2262 :a2262 :a2262. +:a2263 :a2263 :a2263. +:a2264 :a2264 :a2264. +:a2265 :a2265 :a2265. +:a2266 :a2266 :a2266. +:a2267 :a2267 :a2267. +:a2268 :a2268 :a2268. +:a2269 :a2269 :a2269. +:a2270 :a2270 :a2270. +:a2271 :a2271 :a2271. +:a2272 :a2272 :a2272. +:a2273 :a2273 :a2273. +:a2274 :a2274 :a2274. +:a2275 :a2275 :a2275. +:a2276 :a2276 :a2276. +:a2277 :a2277 :a2277. +:a2278 :a2278 :a2278. +:a2279 :a2279 :a2279. +:a2280 :a2280 :a2280. +:a2281 :a2281 :a2281. +:a2282 :a2282 :a2282. +:a2283 :a2283 :a2283. +:a2284 :a2284 :a2284. +:a2285 :a2285 :a2285. +:a2286 :a2286 :a2286. +:a2287 :a2287 :a2287. +:a2288 :a2288 :a2288. +:a2289 :a2289 :a2289. +:a2290 :a2290 :a2290. +:a2291 :a2291 :a2291. +:a2292 :a2292 :a2292. +:a2293 :a2293 :a2293. +:a2294 :a2294 :a2294. +:a2295 :a2295 :a2295. +:a2296 :a2296 :a2296. +:a2297 :a2297 :a2297. +:a2298 :a2298 :a2298. +:a2299 :a2299 :a2299. +:a2300 :a2300 :a2300. +:a2301 :a2301 :a2301. +:a2302 :a2302 :a2302. +:a2303 :a2303 :a2303. +:a2304 :a2304 :a2304. +:a2305 :a2305 :a2305. +:a2306 :a2306 :a2306. +:a2307 :a2307 :a2307. +:a2308 :a2308 :a2308. +:a2309 :a2309 :a2309. +:a2310 :a2310 :a2310. +:a2311 :a2311 :a2311. +:a2312 :a2312 :a2312. +:a2313 :a2313 :a2313. +:a2314 :a2314 :a2314. +:a2315 :a2315 :a2315. +:a2316 :a2316 :a2316. +:a2317 :a2317 :a2317. +:a2318 :a2318 :a2318. +:a2319 :a2319 :a2319. +:a2320 :a2320 :a2320. +:a2321 :a2321 :a2321. +:a2322 :a2322 :a2322. +:a2323 :a2323 :a2323. +:a2324 :a2324 :a2324. +:a2325 :a2325 :a2325. +:a2326 :a2326 :a2326. +:a2327 :a2327 :a2327. +:a2328 :a2328 :a2328. +:a2329 :a2329 :a2329. +:a2330 :a2330 :a2330. +:a2331 :a2331 :a2331. +:a2332 :a2332 :a2332. +:a2333 :a2333 :a2333. +:a2334 :a2334 :a2334. +:a2335 :a2335 :a2335. +:a2336 :a2336 :a2336. +:a2337 :a2337 :a2337. +:a2338 :a2338 :a2338. +:a2339 :a2339 :a2339. +:a2340 :a2340 :a2340. +:a2341 :a2341 :a2341. +:a2342 :a2342 :a2342. +:a2343 :a2343 :a2343. +:a2344 :a2344 :a2344. +:a2345 :a2345 :a2345. +:a2346 :a2346 :a2346. +:a2347 :a2347 :a2347. +:a2348 :a2348 :a2348. +:a2349 :a2349 :a2349. +:a2350 :a2350 :a2350. +:a2351 :a2351 :a2351. +:a2352 :a2352 :a2352. +:a2353 :a2353 :a2353. +:a2354 :a2354 :a2354. +:a2355 :a2355 :a2355. +:a2356 :a2356 :a2356. +:a2357 :a2357 :a2357. +:a2358 :a2358 :a2358. +:a2359 :a2359 :a2359. +:a2360 :a2360 :a2360. +:a2361 :a2361 :a2361. +:a2362 :a2362 :a2362. +:a2363 :a2363 :a2363. +:a2364 :a2364 :a2364. +:a2365 :a2365 :a2365. +:a2366 :a2366 :a2366. +:a2367 :a2367 :a2367. +:a2368 :a2368 :a2368. +:a2369 :a2369 :a2369. +:a2370 :a2370 :a2370. +:a2371 :a2371 :a2371. +:a2372 :a2372 :a2372. +:a2373 :a2373 :a2373. +:a2374 :a2374 :a2374. +:a2375 :a2375 :a2375. +:a2376 :a2376 :a2376. +:a2377 :a2377 :a2377. +:a2378 :a2378 :a2378. +:a2379 :a2379 :a2379. +:a2380 :a2380 :a2380. +:a2381 :a2381 :a2381. +:a2382 :a2382 :a2382. +:a2383 :a2383 :a2383. +:a2384 :a2384 :a2384. +:a2385 :a2385 :a2385. +:a2386 :a2386 :a2386. +:a2387 :a2387 :a2387. +:a2388 :a2388 :a2388. +:a2389 :a2389 :a2389. +:a2390 :a2390 :a2390. +:a2391 :a2391 :a2391. +:a2392 :a2392 :a2392. +:a2393 :a2393 :a2393. +:a2394 :a2394 :a2394. +:a2395 :a2395 :a2395. +:a2396 :a2396 :a2396. +:a2397 :a2397 :a2397. +:a2398 :a2398 :a2398. +:a2399 :a2399 :a2399. +:a2400 :a2400 :a2400. +:a2401 :a2401 :a2401. +:a2402 :a2402 :a2402. +:a2403 :a2403 :a2403. +:a2404 :a2404 :a2404. +:a2405 :a2405 :a2405. +:a2406 :a2406 :a2406. +:a2407 :a2407 :a2407. +:a2408 :a2408 :a2408. +:a2409 :a2409 :a2409. +:a2410 :a2410 :a2410. +:a2411 :a2411 :a2411. +:a2412 :a2412 :a2412. +:a2413 :a2413 :a2413. +:a2414 :a2414 :a2414. +:a2415 :a2415 :a2415. +:a2416 :a2416 :a2416. +:a2417 :a2417 :a2417. +:a2418 :a2418 :a2418. +:a2419 :a2419 :a2419. +:a2420 :a2420 :a2420. +:a2421 :a2421 :a2421. +:a2422 :a2422 :a2422. +:a2423 :a2423 :a2423. +:a2424 :a2424 :a2424. +:a2425 :a2425 :a2425. +:a2426 :a2426 :a2426. +:a2427 :a2427 :a2427. +:a2428 :a2428 :a2428. +:a2429 :a2429 :a2429. +:a2430 :a2430 :a2430. +:a2431 :a2431 :a2431. +:a2432 :a2432 :a2432. +:a2433 :a2433 :a2433. +:a2434 :a2434 :a2434. +:a2435 :a2435 :a2435. +:a2436 :a2436 :a2436. +:a2437 :a2437 :a2437. +:a2438 :a2438 :a2438. +:a2439 :a2439 :a2439. +:a2440 :a2440 :a2440. +:a2441 :a2441 :a2441. +:a2442 :a2442 :a2442. +:a2443 :a2443 :a2443. +:a2444 :a2444 :a2444. +:a2445 :a2445 :a2445. +:a2446 :a2446 :a2446. +:a2447 :a2447 :a2447. +:a2448 :a2448 :a2448. +:a2449 :a2449 :a2449. +:a2450 :a2450 :a2450. +:a2451 :a2451 :a2451. +:a2452 :a2452 :a2452. +:a2453 :a2453 :a2453. +:a2454 :a2454 :a2454. +:a2455 :a2455 :a2455. +:a2456 :a2456 :a2456. +:a2457 :a2457 :a2457. +:a2458 :a2458 :a2458. +:a2459 :a2459 :a2459. +:a2460 :a2460 :a2460. +:a2461 :a2461 :a2461. +:a2462 :a2462 :a2462. +:a2463 :a2463 :a2463. +:a2464 :a2464 :a2464. +:a2465 :a2465 :a2465. +:a2466 :a2466 :a2466. +:a2467 :a2467 :a2467. +:a2468 :a2468 :a2468. +:a2469 :a2469 :a2469. +:a2470 :a2470 :a2470. +:a2471 :a2471 :a2471. +:a2472 :a2472 :a2472. +:a2473 :a2473 :a2473. +:a2474 :a2474 :a2474. +:a2475 :a2475 :a2475. +:a2476 :a2476 :a2476. +:a2477 :a2477 :a2477. +:a2478 :a2478 :a2478. +:a2479 :a2479 :a2479. +:a2480 :a2480 :a2480. +:a2481 :a2481 :a2481. +:a2482 :a2482 :a2482. +:a2483 :a2483 :a2483. +:a2484 :a2484 :a2484. +:a2485 :a2485 :a2485. +:a2486 :a2486 :a2486. +:a2487 :a2487 :a2487. +:a2488 :a2488 :a2488. +:a2489 :a2489 :a2489. +:a2490 :a2490 :a2490. +:a2491 :a2491 :a2491. +:a2492 :a2492 :a2492. +:a2493 :a2493 :a2493. +:a2494 :a2494 :a2494. +:a2495 :a2495 :a2495. +:a2496 :a2496 :a2496. +:a2497 :a2497 :a2497. +:a2498 :a2498 :a2498. +:a2499 :a2499 :a2499. +:a2500 :a2500 :a2500. +:a2501 :a2501 :a2501. +:a2502 :a2502 :a2502. +:a2503 :a2503 :a2503. +:a2504 :a2504 :a2504. +:a2505 :a2505 :a2505. +:a2506 :a2506 :a2506. +:a2507 :a2507 :a2507. +:a2508 :a2508 :a2508. +:a2509 :a2509 :a2509. +:a2510 :a2510 :a2510. +:a2511 :a2511 :a2511. +:a2512 :a2512 :a2512. +:a2513 :a2513 :a2513. +:a2514 :a2514 :a2514. +:a2515 :a2515 :a2515. +:a2516 :a2516 :a2516. +:a2517 :a2517 :a2517. +:a2518 :a2518 :a2518. +:a2519 :a2519 :a2519. +:a2520 :a2520 :a2520. +:a2521 :a2521 :a2521. +:a2522 :a2522 :a2522. +:a2523 :a2523 :a2523. +:a2524 :a2524 :a2524. +:a2525 :a2525 :a2525. +:a2526 :a2526 :a2526. +:a2527 :a2527 :a2527. +:a2528 :a2528 :a2528. +:a2529 :a2529 :a2529. +:a2530 :a2530 :a2530. +:a2531 :a2531 :a2531. +:a2532 :a2532 :a2532. +:a2533 :a2533 :a2533. +:a2534 :a2534 :a2534. +:a2535 :a2535 :a2535. +:a2536 :a2536 :a2536. +:a2537 :a2537 :a2537. +:a2538 :a2538 :a2538. +:a2539 :a2539 :a2539. +:a2540 :a2540 :a2540. +:a2541 :a2541 :a2541. +:a2542 :a2542 :a2542. +:a2543 :a2543 :a2543. +:a2544 :a2544 :a2544. +:a2545 :a2545 :a2545. +:a2546 :a2546 :a2546. +:a2547 :a2547 :a2547. +:a2548 :a2548 :a2548. +:a2549 :a2549 :a2549. +:a2550 :a2550 :a2550. +:a2551 :a2551 :a2551. +:a2552 :a2552 :a2552. +:a2553 :a2553 :a2553. +:a2554 :a2554 :a2554. +:a2555 :a2555 :a2555. +:a2556 :a2556 :a2556. +:a2557 :a2557 :a2557. +:a2558 :a2558 :a2558. +:a2559 :a2559 :a2559. +:a2560 :a2560 :a2560. +:a2561 :a2561 :a2561. +:a2562 :a2562 :a2562. +:a2563 :a2563 :a2563. +:a2564 :a2564 :a2564. +:a2565 :a2565 :a2565. +:a2566 :a2566 :a2566. +:a2567 :a2567 :a2567. +:a2568 :a2568 :a2568. +:a2569 :a2569 :a2569. +:a2570 :a2570 :a2570. +:a2571 :a2571 :a2571. +:a2572 :a2572 :a2572. +:a2573 :a2573 :a2573. +:a2574 :a2574 :a2574. +:a2575 :a2575 :a2575. +:a2576 :a2576 :a2576. +:a2577 :a2577 :a2577. +:a2578 :a2578 :a2578. +:a2579 :a2579 :a2579. +:a2580 :a2580 :a2580. +:a2581 :a2581 :a2581. +:a2582 :a2582 :a2582. +:a2583 :a2583 :a2583. +:a2584 :a2584 :a2584. +:a2585 :a2585 :a2585. +:a2586 :a2586 :a2586. +:a2587 :a2587 :a2587. +:a2588 :a2588 :a2588. +:a2589 :a2589 :a2589. +:a2590 :a2590 :a2590. +:a2591 :a2591 :a2591. +:a2592 :a2592 :a2592. +:a2593 :a2593 :a2593. +:a2594 :a2594 :a2594. +:a2595 :a2595 :a2595. +:a2596 :a2596 :a2596. +:a2597 :a2597 :a2597. +:a2598 :a2598 :a2598. +:a2599 :a2599 :a2599. +:a2600 :a2600 :a2600. +:a2601 :a2601 :a2601. +:a2602 :a2602 :a2602. +:a2603 :a2603 :a2603. +:a2604 :a2604 :a2604. +:a2605 :a2605 :a2605. +:a2606 :a2606 :a2606. +:a2607 :a2607 :a2607. +:a2608 :a2608 :a2608. +:a2609 :a2609 :a2609. +:a2610 :a2610 :a2610. +:a2611 :a2611 :a2611. +:a2612 :a2612 :a2612. +:a2613 :a2613 :a2613. +:a2614 :a2614 :a2614. +:a2615 :a2615 :a2615. +:a2616 :a2616 :a2616. +:a2617 :a2617 :a2617. +:a2618 :a2618 :a2618. +:a2619 :a2619 :a2619. +:a2620 :a2620 :a2620. +:a2621 :a2621 :a2621. +:a2622 :a2622 :a2622. +:a2623 :a2623 :a2623. +:a2624 :a2624 :a2624. +:a2625 :a2625 :a2625. +:a2626 :a2626 :a2626. +:a2627 :a2627 :a2627. +:a2628 :a2628 :a2628. +:a2629 :a2629 :a2629. +:a2630 :a2630 :a2630. +:a2631 :a2631 :a2631. +:a2632 :a2632 :a2632. +:a2633 :a2633 :a2633. +:a2634 :a2634 :a2634. +:a2635 :a2635 :a2635. +:a2636 :a2636 :a2636. +:a2637 :a2637 :a2637. +:a2638 :a2638 :a2638. +:a2639 :a2639 :a2639. +:a2640 :a2640 :a2640. +:a2641 :a2641 :a2641. +:a2642 :a2642 :a2642. +:a2643 :a2643 :a2643. +:a2644 :a2644 :a2644. +:a2645 :a2645 :a2645. +:a2646 :a2646 :a2646. +:a2647 :a2647 :a2647. +:a2648 :a2648 :a2648. +:a2649 :a2649 :a2649. +:a2650 :a2650 :a2650. +:a2651 :a2651 :a2651. +:a2652 :a2652 :a2652. +:a2653 :a2653 :a2653. +:a2654 :a2654 :a2654. +:a2655 :a2655 :a2655. +:a2656 :a2656 :a2656. +:a2657 :a2657 :a2657. +:a2658 :a2658 :a2658. +:a2659 :a2659 :a2659. +:a2660 :a2660 :a2660. +:a2661 :a2661 :a2661. +:a2662 :a2662 :a2662. +:a2663 :a2663 :a2663. +:a2664 :a2664 :a2664. +:a2665 :a2665 :a2665. +:a2666 :a2666 :a2666. +:a2667 :a2667 :a2667. +:a2668 :a2668 :a2668. +:a2669 :a2669 :a2669. +:a2670 :a2670 :a2670. +:a2671 :a2671 :a2671. +:a2672 :a2672 :a2672. +:a2673 :a2673 :a2673. +:a2674 :a2674 :a2674. +:a2675 :a2675 :a2675. +:a2676 :a2676 :a2676. +:a2677 :a2677 :a2677. +:a2678 :a2678 :a2678. +:a2679 :a2679 :a2679. +:a2680 :a2680 :a2680. +:a2681 :a2681 :a2681. +:a2682 :a2682 :a2682. +:a2683 :a2683 :a2683. +:a2684 :a2684 :a2684. +:a2685 :a2685 :a2685. +:a2686 :a2686 :a2686. +:a2687 :a2687 :a2687. +:a2688 :a2688 :a2688. +:a2689 :a2689 :a2689. +:a2690 :a2690 :a2690. +:a2691 :a2691 :a2691. +:a2692 :a2692 :a2692. +:a2693 :a2693 :a2693. +:a2694 :a2694 :a2694. +:a2695 :a2695 :a2695. +:a2696 :a2696 :a2696. +:a2697 :a2697 :a2697. +:a2698 :a2698 :a2698. +:a2699 :a2699 :a2699. +:a2700 :a2700 :a2700. +:a2701 :a2701 :a2701. +:a2702 :a2702 :a2702. +:a2703 :a2703 :a2703. +:a2704 :a2704 :a2704. +:a2705 :a2705 :a2705. +:a2706 :a2706 :a2706. +:a2707 :a2707 :a2707. +:a2708 :a2708 :a2708. +:a2709 :a2709 :a2709. +:a2710 :a2710 :a2710. +:a2711 :a2711 :a2711. +:a2712 :a2712 :a2712. +:a2713 :a2713 :a2713. +:a2714 :a2714 :a2714. +:a2715 :a2715 :a2715. +:a2716 :a2716 :a2716. +:a2717 :a2717 :a2717. +:a2718 :a2718 :a2718. +:a2719 :a2719 :a2719. +:a2720 :a2720 :a2720. +:a2721 :a2721 :a2721. +:a2722 :a2722 :a2722. +:a2723 :a2723 :a2723. +:a2724 :a2724 :a2724. +:a2725 :a2725 :a2725. +:a2726 :a2726 :a2726. +:a2727 :a2727 :a2727. +:a2728 :a2728 :a2728. +:a2729 :a2729 :a2729. +:a2730 :a2730 :a2730. +:a2731 :a2731 :a2731. +:a2732 :a2732 :a2732. +:a2733 :a2733 :a2733. +:a2734 :a2734 :a2734. +:a2735 :a2735 :a2735. +:a2736 :a2736 :a2736. +:a2737 :a2737 :a2737. +:a2738 :a2738 :a2738. +:a2739 :a2739 :a2739. +:a2740 :a2740 :a2740. +:a2741 :a2741 :a2741. +:a2742 :a2742 :a2742. +:a2743 :a2743 :a2743. +:a2744 :a2744 :a2744. +:a2745 :a2745 :a2745. +:a2746 :a2746 :a2746. +:a2747 :a2747 :a2747. +:a2748 :a2748 :a2748. +:a2749 :a2749 :a2749. +:a2750 :a2750 :a2750. +:a2751 :a2751 :a2751. +:a2752 :a2752 :a2752. +:a2753 :a2753 :a2753. +:a2754 :a2754 :a2754. +:a2755 :a2755 :a2755. +:a2756 :a2756 :a2756. +:a2757 :a2757 :a2757. +:a2758 :a2758 :a2758. +:a2759 :a2759 :a2759. +:a2760 :a2760 :a2760. +:a2761 :a2761 :a2761. +:a2762 :a2762 :a2762. +:a2763 :a2763 :a2763. +:a2764 :a2764 :a2764. +:a2765 :a2765 :a2765. +:a2766 :a2766 :a2766. +:a2767 :a2767 :a2767. +:a2768 :a2768 :a2768. +:a2769 :a2769 :a2769. +:a2770 :a2770 :a2770. +:a2771 :a2771 :a2771. +:a2772 :a2772 :a2772. +:a2773 :a2773 :a2773. +:a2774 :a2774 :a2774. +:a2775 :a2775 :a2775. +:a2776 :a2776 :a2776. +:a2777 :a2777 :a2777. +:a2778 :a2778 :a2778. +:a2779 :a2779 :a2779. +:a2780 :a2780 :a2780. +:a2781 :a2781 :a2781. +:a2782 :a2782 :a2782. +:a2783 :a2783 :a2783. +:a2784 :a2784 :a2784. +:a2785 :a2785 :a2785. +:a2786 :a2786 :a2786. +:a2787 :a2787 :a2787. +:a2788 :a2788 :a2788. +:a2789 :a2789 :a2789. +:a2790 :a2790 :a2790. +:a2791 :a2791 :a2791. +:a2792 :a2792 :a2792. +:a2793 :a2793 :a2793. +:a2794 :a2794 :a2794. +:a2795 :a2795 :a2795. +:a2796 :a2796 :a2796. +:a2797 :a2797 :a2797. +:a2798 :a2798 :a2798. +:a2799 :a2799 :a2799. +:a2800 :a2800 :a2800. +:a2801 :a2801 :a2801. +:a2802 :a2802 :a2802. +:a2803 :a2803 :a2803. +:a2804 :a2804 :a2804. +:a2805 :a2805 :a2805. +:a2806 :a2806 :a2806. +:a2807 :a2807 :a2807. +:a2808 :a2808 :a2808. +:a2809 :a2809 :a2809. +:a2810 :a2810 :a2810. +:a2811 :a2811 :a2811. +:a2812 :a2812 :a2812. +:a2813 :a2813 :a2813. +:a2814 :a2814 :a2814. +:a2815 :a2815 :a2815. +:a2816 :a2816 :a2816. +:a2817 :a2817 :a2817. +:a2818 :a2818 :a2818. +:a2819 :a2819 :a2819. +:a2820 :a2820 :a2820. +:a2821 :a2821 :a2821. +:a2822 :a2822 :a2822. +:a2823 :a2823 :a2823. +:a2824 :a2824 :a2824. +:a2825 :a2825 :a2825. +:a2826 :a2826 :a2826. +:a2827 :a2827 :a2827. +:a2828 :a2828 :a2828. +:a2829 :a2829 :a2829. +:a2830 :a2830 :a2830. +:a2831 :a2831 :a2831. +:a2832 :a2832 :a2832. +:a2833 :a2833 :a2833. +:a2834 :a2834 :a2834. +:a2835 :a2835 :a2835. +:a2836 :a2836 :a2836. +:a2837 :a2837 :a2837. +:a2838 :a2838 :a2838. +:a2839 :a2839 :a2839. +:a2840 :a2840 :a2840. +:a2841 :a2841 :a2841. +:a2842 :a2842 :a2842. +:a2843 :a2843 :a2843. +:a2844 :a2844 :a2844. +:a2845 :a2845 :a2845. +:a2846 :a2846 :a2846. +:a2847 :a2847 :a2847. +:a2848 :a2848 :a2848. +:a2849 :a2849 :a2849. +:a2850 :a2850 :a2850. +:a2851 :a2851 :a2851. +:a2852 :a2852 :a2852. +:a2853 :a2853 :a2853. +:a2854 :a2854 :a2854. +:a2855 :a2855 :a2855. +:a2856 :a2856 :a2856. +:a2857 :a2857 :a2857. +:a2858 :a2858 :a2858. +:a2859 :a2859 :a2859. +:a2860 :a2860 :a2860. +:a2861 :a2861 :a2861. +:a2862 :a2862 :a2862. +:a2863 :a2863 :a2863. +:a2864 :a2864 :a2864. +:a2865 :a2865 :a2865. +:a2866 :a2866 :a2866. +:a2867 :a2867 :a2867. +:a2868 :a2868 :a2868. +:a2869 :a2869 :a2869. +:a2870 :a2870 :a2870. +:a2871 :a2871 :a2871. +:a2872 :a2872 :a2872. +:a2873 :a2873 :a2873. +:a2874 :a2874 :a2874. +:a2875 :a2875 :a2875. +:a2876 :a2876 :a2876. +:a2877 :a2877 :a2877. +:a2878 :a2878 :a2878. +:a2879 :a2879 :a2879. +:a2880 :a2880 :a2880. +:a2881 :a2881 :a2881. +:a2882 :a2882 :a2882. +:a2883 :a2883 :a2883. +:a2884 :a2884 :a2884. +:a2885 :a2885 :a2885. +:a2886 :a2886 :a2886. +:a2887 :a2887 :a2887. +:a2888 :a2888 :a2888. +:a2889 :a2889 :a2889. +:a2890 :a2890 :a2890. +:a2891 :a2891 :a2891. +:a2892 :a2892 :a2892. +:a2893 :a2893 :a2893. +:a2894 :a2894 :a2894. +:a2895 :a2895 :a2895. +:a2896 :a2896 :a2896. +:a2897 :a2897 :a2897. +:a2898 :a2898 :a2898. +:a2899 :a2899 :a2899. +:a2900 :a2900 :a2900. +:a2901 :a2901 :a2901. +:a2902 :a2902 :a2902. +:a2903 :a2903 :a2903. +:a2904 :a2904 :a2904. +:a2905 :a2905 :a2905. +:a2906 :a2906 :a2906. +:a2907 :a2907 :a2907. +:a2908 :a2908 :a2908. +:a2909 :a2909 :a2909. +:a2910 :a2910 :a2910. +:a2911 :a2911 :a2911. +:a2912 :a2912 :a2912. +:a2913 :a2913 :a2913. +:a2914 :a2914 :a2914. +:a2915 :a2915 :a2915. +:a2916 :a2916 :a2916. +:a2917 :a2917 :a2917. +:a2918 :a2918 :a2918. +:a2919 :a2919 :a2919. +:a2920 :a2920 :a2920. +:a2921 :a2921 :a2921. +:a2922 :a2922 :a2922. +:a2923 :a2923 :a2923. +:a2924 :a2924 :a2924. +:a2925 :a2925 :a2925. +:a2926 :a2926 :a2926. +:a2927 :a2927 :a2927. +:a2928 :a2928 :a2928. +:a2929 :a2929 :a2929. +:a2930 :a2930 :a2930. +:a2931 :a2931 :a2931. +:a2932 :a2932 :a2932. +:a2933 :a2933 :a2933. +:a2934 :a2934 :a2934. +:a2935 :a2935 :a2935. +:a2936 :a2936 :a2936. +:a2937 :a2937 :a2937. +:a2938 :a2938 :a2938. +:a2939 :a2939 :a2939. +:a2940 :a2940 :a2940. +:a2941 :a2941 :a2941. +:a2942 :a2942 :a2942. +:a2943 :a2943 :a2943. +:a2944 :a2944 :a2944. +:a2945 :a2945 :a2945. +:a2946 :a2946 :a2946. +:a2947 :a2947 :a2947. +:a2948 :a2948 :a2948. +:a2949 :a2949 :a2949. +:a2950 :a2950 :a2950. +:a2951 :a2951 :a2951. +:a2952 :a2952 :a2952. +:a2953 :a2953 :a2953. +:a2954 :a2954 :a2954. +:a2955 :a2955 :a2955. +:a2956 :a2956 :a2956. +:a2957 :a2957 :a2957. +:a2958 :a2958 :a2958. +:a2959 :a2959 :a2959. +:a2960 :a2960 :a2960. +:a2961 :a2961 :a2961. +:a2962 :a2962 :a2962. +:a2963 :a2963 :a2963. +:a2964 :a2964 :a2964. +:a2965 :a2965 :a2965. +:a2966 :a2966 :a2966. +:a2967 :a2967 :a2967. +:a2968 :a2968 :a2968. +:a2969 :a2969 :a2969. +:a2970 :a2970 :a2970. +:a2971 :a2971 :a2971. +:a2972 :a2972 :a2972. +:a2973 :a2973 :a2973. +:a2974 :a2974 :a2974. +:a2975 :a2975 :a2975. +:a2976 :a2976 :a2976. +:a2977 :a2977 :a2977. +:a2978 :a2978 :a2978. +:a2979 :a2979 :a2979. +:a2980 :a2980 :a2980. +:a2981 :a2981 :a2981. +:a2982 :a2982 :a2982. +:a2983 :a2983 :a2983. +:a2984 :a2984 :a2984. +:a2985 :a2985 :a2985. +:a2986 :a2986 :a2986. +:a2987 :a2987 :a2987. +:a2988 :a2988 :a2988. +:a2989 :a2989 :a2989. +:a2990 :a2990 :a2990. +:a2991 :a2991 :a2991. +:a2992 :a2992 :a2992. +:a2993 :a2993 :a2993. +:a2994 :a2994 :a2994. +:a2995 :a2995 :a2995. +:a2996 :a2996 :a2996. +:a2997 :a2997 :a2997. +:a2998 :a2998 :a2998. +:a2999 :a2999 :a2999. +:a3000 :a3000 :a3000. +:a3001 :a3001 :a3001. +:a3002 :a3002 :a3002. +:a3003 :a3003 :a3003. +:a3004 :a3004 :a3004. +:a3005 :a3005 :a3005. +:a3006 :a3006 :a3006. +:a3007 :a3007 :a3007. +:a3008 :a3008 :a3008. +:a3009 :a3009 :a3009. +:a3010 :a3010 :a3010. +:a3011 :a3011 :a3011. +:a3012 :a3012 :a3012. +:a3013 :a3013 :a3013. +:a3014 :a3014 :a3014. +:a3015 :a3015 :a3015. +:a3016 :a3016 :a3016. +:a3017 :a3017 :a3017. +:a3018 :a3018 :a3018. +:a3019 :a3019 :a3019. +:a3020 :a3020 :a3020. +:a3021 :a3021 :a3021. +:a3022 :a3022 :a3022. +:a3023 :a3023 :a3023. +:a3024 :a3024 :a3024. +:a3025 :a3025 :a3025. +:a3026 :a3026 :a3026. +:a3027 :a3027 :a3027. +:a3028 :a3028 :a3028. +:a3029 :a3029 :a3029. +:a3030 :a3030 :a3030. +:a3031 :a3031 :a3031. +:a3032 :a3032 :a3032. +:a3033 :a3033 :a3033. +:a3034 :a3034 :a3034. +:a3035 :a3035 :a3035. +:a3036 :a3036 :a3036. +:a3037 :a3037 :a3037. +:a3038 :a3038 :a3038. +:a3039 :a3039 :a3039. +:a3040 :a3040 :a3040. +:a3041 :a3041 :a3041. +:a3042 :a3042 :a3042. +:a3043 :a3043 :a3043. +:a3044 :a3044 :a3044. +:a3045 :a3045 :a3045. +:a3046 :a3046 :a3046. +:a3047 :a3047 :a3047. +:a3048 :a3048 :a3048. +:a3049 :a3049 :a3049. +:a3050 :a3050 :a3050. +:a3051 :a3051 :a3051. +:a3052 :a3052 :a3052. +:a3053 :a3053 :a3053. +:a3054 :a3054 :a3054. +:a3055 :a3055 :a3055. +:a3056 :a3056 :a3056. +:a3057 :a3057 :a3057. +:a3058 :a3058 :a3058. +:a3059 :a3059 :a3059. +:a3060 :a3060 :a3060. +:a3061 :a3061 :a3061. +:a3062 :a3062 :a3062. +:a3063 :a3063 :a3063. +:a3064 :a3064 :a3064. +:a3065 :a3065 :a3065. +:a3066 :a3066 :a3066. +:a3067 :a3067 :a3067. +:a3068 :a3068 :a3068. +:a3069 :a3069 :a3069. +:a3070 :a3070 :a3070. +:a3071 :a3071 :a3071. +:a3072 :a3072 :a3072. +:a3073 :a3073 :a3073. +:a3074 :a3074 :a3074. +:a3075 :a3075 :a3075. +:a3076 :a3076 :a3076. +:a3077 :a3077 :a3077. +:a3078 :a3078 :a3078. +:a3079 :a3079 :a3079. +:a3080 :a3080 :a3080. +:a3081 :a3081 :a3081. +:a3082 :a3082 :a3082. +:a3083 :a3083 :a3083. +:a3084 :a3084 :a3084. +:a3085 :a3085 :a3085. +:a3086 :a3086 :a3086. +:a3087 :a3087 :a3087. +:a3088 :a3088 :a3088. +:a3089 :a3089 :a3089. +:a3090 :a3090 :a3090. +:a3091 :a3091 :a3091. +:a3092 :a3092 :a3092. +:a3093 :a3093 :a3093. +:a3094 :a3094 :a3094. +:a3095 :a3095 :a3095. +:a3096 :a3096 :a3096. +:a3097 :a3097 :a3097. +:a3098 :a3098 :a3098. +:a3099 :a3099 :a3099. +:a3100 :a3100 :a3100. +:a3101 :a3101 :a3101. +:a3102 :a3102 :a3102. +:a3103 :a3103 :a3103. +:a3104 :a3104 :a3104. +:a3105 :a3105 :a3105. +:a3106 :a3106 :a3106. +:a3107 :a3107 :a3107. +:a3108 :a3108 :a3108. +:a3109 :a3109 :a3109. +:a3110 :a3110 :a3110. +:a3111 :a3111 :a3111. +:a3112 :a3112 :a3112. +:a3113 :a3113 :a3113. +:a3114 :a3114 :a3114. +:a3115 :a3115 :a3115. +:a3116 :a3116 :a3116. +:a3117 :a3117 :a3117. +:a3118 :a3118 :a3118. +:a3119 :a3119 :a3119. +:a3120 :a3120 :a3120. +:a3121 :a3121 :a3121. +:a3122 :a3122 :a3122. +:a3123 :a3123 :a3123. +:a3124 :a3124 :a3124. +:a3125 :a3125 :a3125. +:a3126 :a3126 :a3126. +:a3127 :a3127 :a3127. +:a3128 :a3128 :a3128. +:a3129 :a3129 :a3129. +:a3130 :a3130 :a3130. +:a3131 :a3131 :a3131. +:a3132 :a3132 :a3132. +:a3133 :a3133 :a3133. +:a3134 :a3134 :a3134. +:a3135 :a3135 :a3135. +:a3136 :a3136 :a3136. +:a3137 :a3137 :a3137. +:a3138 :a3138 :a3138. +:a3139 :a3139 :a3139. +:a3140 :a3140 :a3140. +:a3141 :a3141 :a3141. +:a3142 :a3142 :a3142. +:a3143 :a3143 :a3143. +:a3144 :a3144 :a3144. +:a3145 :a3145 :a3145. +:a3146 :a3146 :a3146. +:a3147 :a3147 :a3147. +:a3148 :a3148 :a3148. +:a3149 :a3149 :a3149. +:a3150 :a3150 :a3150. +:a3151 :a3151 :a3151. +:a3152 :a3152 :a3152. +:a3153 :a3153 :a3153. +:a3154 :a3154 :a3154. +:a3155 :a3155 :a3155. +:a3156 :a3156 :a3156. +:a3157 :a3157 :a3157. +:a3158 :a3158 :a3158. +:a3159 :a3159 :a3159. +:a3160 :a3160 :a3160. +:a3161 :a3161 :a3161. +:a3162 :a3162 :a3162. +:a3163 :a3163 :a3163. +:a3164 :a3164 :a3164. +:a3165 :a3165 :a3165. +:a3166 :a3166 :a3166. +:a3167 :a3167 :a3167. +:a3168 :a3168 :a3168. +:a3169 :a3169 :a3169. +:a3170 :a3170 :a3170. +:a3171 :a3171 :a3171. +:a3172 :a3172 :a3172. +:a3173 :a3173 :a3173. +:a3174 :a3174 :a3174. +:a3175 :a3175 :a3175. +:a3176 :a3176 :a3176. +:a3177 :a3177 :a3177. +:a3178 :a3178 :a3178. +:a3179 :a3179 :a3179. +:a3180 :a3180 :a3180. +:a3181 :a3181 :a3181. +:a3182 :a3182 :a3182. +:a3183 :a3183 :a3183. +:a3184 :a3184 :a3184. +:a3185 :a3185 :a3185. +:a3186 :a3186 :a3186. +:a3187 :a3187 :a3187. +:a3188 :a3188 :a3188. +:a3189 :a3189 :a3189. +:a3190 :a3190 :a3190. +:a3191 :a3191 :a3191. +:a3192 :a3192 :a3192. +:a3193 :a3193 :a3193. +:a3194 :a3194 :a3194. +:a3195 :a3195 :a3195. +:a3196 :a3196 :a3196. +:a3197 :a3197 :a3197. +:a3198 :a3198 :a3198. +:a3199 :a3199 :a3199. +:a3200 :a3200 :a3200. +:a3201 :a3201 :a3201. +:a3202 :a3202 :a3202. +:a3203 :a3203 :a3203. +:a3204 :a3204 :a3204. +:a3205 :a3205 :a3205. +:a3206 :a3206 :a3206. +:a3207 :a3207 :a3207. +:a3208 :a3208 :a3208. +:a3209 :a3209 :a3209. +:a3210 :a3210 :a3210. +:a3211 :a3211 :a3211. +:a3212 :a3212 :a3212. +:a3213 :a3213 :a3213. +:a3214 :a3214 :a3214. +:a3215 :a3215 :a3215. +:a3216 :a3216 :a3216. +:a3217 :a3217 :a3217. +:a3218 :a3218 :a3218. +:a3219 :a3219 :a3219. +:a3220 :a3220 :a3220. +:a3221 :a3221 :a3221. +:a3222 :a3222 :a3222. +:a3223 :a3223 :a3223. +:a3224 :a3224 :a3224. +:a3225 :a3225 :a3225. +:a3226 :a3226 :a3226. +:a3227 :a3227 :a3227. +:a3228 :a3228 :a3228. +:a3229 :a3229 :a3229. +:a3230 :a3230 :a3230. +:a3231 :a3231 :a3231. +:a3232 :a3232 :a3232. +:a3233 :a3233 :a3233. +:a3234 :a3234 :a3234. +:a3235 :a3235 :a3235. +:a3236 :a3236 :a3236. +:a3237 :a3237 :a3237. +:a3238 :a3238 :a3238. +:a3239 :a3239 :a3239. +:a3240 :a3240 :a3240. +:a3241 :a3241 :a3241. +:a3242 :a3242 :a3242. +:a3243 :a3243 :a3243. +:a3244 :a3244 :a3244. +:a3245 :a3245 :a3245. +:a3246 :a3246 :a3246. +:a3247 :a3247 :a3247. +:a3248 :a3248 :a3248. +:a3249 :a3249 :a3249. +:a3250 :a3250 :a3250. +:a3251 :a3251 :a3251. +:a3252 :a3252 :a3252. +:a3253 :a3253 :a3253. +:a3254 :a3254 :a3254. +:a3255 :a3255 :a3255. +:a3256 :a3256 :a3256. +:a3257 :a3257 :a3257. +:a3258 :a3258 :a3258. +:a3259 :a3259 :a3259. +:a3260 :a3260 :a3260. +:a3261 :a3261 :a3261. +:a3262 :a3262 :a3262. +:a3263 :a3263 :a3263. +:a3264 :a3264 :a3264. +:a3265 :a3265 :a3265. +:a3266 :a3266 :a3266. +:a3267 :a3267 :a3267. +:a3268 :a3268 :a3268. +:a3269 :a3269 :a3269. +:a3270 :a3270 :a3270. +:a3271 :a3271 :a3271. +:a3272 :a3272 :a3272. +:a3273 :a3273 :a3273. +:a3274 :a3274 :a3274. +:a3275 :a3275 :a3275. +:a3276 :a3276 :a3276. +:a3277 :a3277 :a3277. +:a3278 :a3278 :a3278. +:a3279 :a3279 :a3279. +:a3280 :a3280 :a3280. +:a3281 :a3281 :a3281. +:a3282 :a3282 :a3282. +:a3283 :a3283 :a3283. +:a3284 :a3284 :a3284. +:a3285 :a3285 :a3285. +:a3286 :a3286 :a3286. +:a3287 :a3287 :a3287. +:a3288 :a3288 :a3288. +:a3289 :a3289 :a3289. +:a3290 :a3290 :a3290. +:a3291 :a3291 :a3291. +:a3292 :a3292 :a3292. +:a3293 :a3293 :a3293. +:a3294 :a3294 :a3294. +:a3295 :a3295 :a3295. +:a3296 :a3296 :a3296. +:a3297 :a3297 :a3297. +:a3298 :a3298 :a3298. +:a3299 :a3299 :a3299. +:a3300 :a3300 :a3300. +:a3301 :a3301 :a3301. +:a3302 :a3302 :a3302. +:a3303 :a3303 :a3303. +:a3304 :a3304 :a3304. +:a3305 :a3305 :a3305. +:a3306 :a3306 :a3306. +:a3307 :a3307 :a3307. +:a3308 :a3308 :a3308. +:a3309 :a3309 :a3309. +:a3310 :a3310 :a3310. +:a3311 :a3311 :a3311. +:a3312 :a3312 :a3312. +:a3313 :a3313 :a3313. +:a3314 :a3314 :a3314. +:a3315 :a3315 :a3315. +:a3316 :a3316 :a3316. +:a3317 :a3317 :a3317. +:a3318 :a3318 :a3318. +:a3319 :a3319 :a3319. +:a3320 :a3320 :a3320. +:a3321 :a3321 :a3321. +:a3322 :a3322 :a3322. +:a3323 :a3323 :a3323. +:a3324 :a3324 :a3324. +:a3325 :a3325 :a3325. +:a3326 :a3326 :a3326. +:a3327 :a3327 :a3327. +:a3328 :a3328 :a3328. +:a3329 :a3329 :a3329. +:a3330 :a3330 :a3330. +:a3331 :a3331 :a3331. +:a3332 :a3332 :a3332. +:a3333 :a3333 :a3333. +:a3334 :a3334 :a3334. +:a3335 :a3335 :a3335. +:a3336 :a3336 :a3336. +:a3337 :a3337 :a3337. +:a3338 :a3338 :a3338. +:a3339 :a3339 :a3339. +:a3340 :a3340 :a3340. +:a3341 :a3341 :a3341. +:a3342 :a3342 :a3342. +:a3343 :a3343 :a3343. +:a3344 :a3344 :a3344. +:a3345 :a3345 :a3345. +:a3346 :a3346 :a3346. +:a3347 :a3347 :a3347. +:a3348 :a3348 :a3348. +:a3349 :a3349 :a3349. +:a3350 :a3350 :a3350. +:a3351 :a3351 :a3351. +:a3352 :a3352 :a3352. +:a3353 :a3353 :a3353. +:a3354 :a3354 :a3354. +:a3355 :a3355 :a3355. +:a3356 :a3356 :a3356. +:a3357 :a3357 :a3357. +:a3358 :a3358 :a3358. +:a3359 :a3359 :a3359. +:a3360 :a3360 :a3360. +:a3361 :a3361 :a3361. +:a3362 :a3362 :a3362. +:a3363 :a3363 :a3363. +:a3364 :a3364 :a3364. +:a3365 :a3365 :a3365. +:a3366 :a3366 :a3366. +:a3367 :a3367 :a3367. +:a3368 :a3368 :a3368. +:a3369 :a3369 :a3369. +:a3370 :a3370 :a3370. +:a3371 :a3371 :a3371. +:a3372 :a3372 :a3372. +:a3373 :a3373 :a3373. +:a3374 :a3374 :a3374. +:a3375 :a3375 :a3375. +:a3376 :a3376 :a3376. +:a3377 :a3377 :a3377. +:a3378 :a3378 :a3378. +:a3379 :a3379 :a3379. +:a3380 :a3380 :a3380. +:a3381 :a3381 :a3381. +:a3382 :a3382 :a3382. +:a3383 :a3383 :a3383. +:a3384 :a3384 :a3384. +:a3385 :a3385 :a3385. +:a3386 :a3386 :a3386. +:a3387 :a3387 :a3387. +:a3388 :a3388 :a3388. +:a3389 :a3389 :a3389. +:a3390 :a3390 :a3390. +:a3391 :a3391 :a3391. +:a3392 :a3392 :a3392. +:a3393 :a3393 :a3393. +:a3394 :a3394 :a3394. +:a3395 :a3395 :a3395. +:a3396 :a3396 :a3396. +:a3397 :a3397 :a3397. +:a3398 :a3398 :a3398. +:a3399 :a3399 :a3399. +:a3400 :a3400 :a3400. +:a3401 :a3401 :a3401. +:a3402 :a3402 :a3402. +:a3403 :a3403 :a3403. +:a3404 :a3404 :a3404. +:a3405 :a3405 :a3405. +:a3406 :a3406 :a3406. +:a3407 :a3407 :a3407. +:a3408 :a3408 :a3408. +:a3409 :a3409 :a3409. +:a3410 :a3410 :a3410. +:a3411 :a3411 :a3411. +:a3412 :a3412 :a3412. +:a3413 :a3413 :a3413. +:a3414 :a3414 :a3414. +:a3415 :a3415 :a3415. +:a3416 :a3416 :a3416. +:a3417 :a3417 :a3417. +:a3418 :a3418 :a3418. +:a3419 :a3419 :a3419. +:a3420 :a3420 :a3420. +:a3421 :a3421 :a3421. +:a3422 :a3422 :a3422. +:a3423 :a3423 :a3423. +:a3424 :a3424 :a3424. +:a3425 :a3425 :a3425. +:a3426 :a3426 :a3426. +:a3427 :a3427 :a3427. +:a3428 :a3428 :a3428. +:a3429 :a3429 :a3429. +:a3430 :a3430 :a3430. +:a3431 :a3431 :a3431. +:a3432 :a3432 :a3432. +:a3433 :a3433 :a3433. +:a3434 :a3434 :a3434. +:a3435 :a3435 :a3435. +:a3436 :a3436 :a3436. +:a3437 :a3437 :a3437. +:a3438 :a3438 :a3438. +:a3439 :a3439 :a3439. +:a3440 :a3440 :a3440. +:a3441 :a3441 :a3441. +:a3442 :a3442 :a3442. +:a3443 :a3443 :a3443. +:a3444 :a3444 :a3444. +:a3445 :a3445 :a3445. +:a3446 :a3446 :a3446. +:a3447 :a3447 :a3447. +:a3448 :a3448 :a3448. +:a3449 :a3449 :a3449. +:a3450 :a3450 :a3450. +:a3451 :a3451 :a3451. +:a3452 :a3452 :a3452. +:a3453 :a3453 :a3453. +:a3454 :a3454 :a3454. +:a3455 :a3455 :a3455. +:a3456 :a3456 :a3456. +:a3457 :a3457 :a3457. +:a3458 :a3458 :a3458. +:a3459 :a3459 :a3459. +:a3460 :a3460 :a3460. +:a3461 :a3461 :a3461. +:a3462 :a3462 :a3462. +:a3463 :a3463 :a3463. +:a3464 :a3464 :a3464. +:a3465 :a3465 :a3465. +:a3466 :a3466 :a3466. +:a3467 :a3467 :a3467. +:a3468 :a3468 :a3468. +:a3469 :a3469 :a3469. +:a3470 :a3470 :a3470. +:a3471 :a3471 :a3471. +:a3472 :a3472 :a3472. +:a3473 :a3473 :a3473. +:a3474 :a3474 :a3474. +:a3475 :a3475 :a3475. +:a3476 :a3476 :a3476. +:a3477 :a3477 :a3477. +:a3478 :a3478 :a3478. +:a3479 :a3479 :a3479. +:a3480 :a3480 :a3480. +:a3481 :a3481 :a3481. +:a3482 :a3482 :a3482. +:a3483 :a3483 :a3483. +:a3484 :a3484 :a3484. +:a3485 :a3485 :a3485. +:a3486 :a3486 :a3486. +:a3487 :a3487 :a3487. +:a3488 :a3488 :a3488. +:a3489 :a3489 :a3489. +:a3490 :a3490 :a3490. +:a3491 :a3491 :a3491. +:a3492 :a3492 :a3492. +:a3493 :a3493 :a3493. +:a3494 :a3494 :a3494. +:a3495 :a3495 :a3495. +:a3496 :a3496 :a3496. +:a3497 :a3497 :a3497. +:a3498 :a3498 :a3498. +:a3499 :a3499 :a3499. +:a3500 :a3500 :a3500. +:a3501 :a3501 :a3501. +:a3502 :a3502 :a3502. +:a3503 :a3503 :a3503. +:a3504 :a3504 :a3504. +:a3505 :a3505 :a3505. +:a3506 :a3506 :a3506. +:a3507 :a3507 :a3507. +:a3508 :a3508 :a3508. +:a3509 :a3509 :a3509. +:a3510 :a3510 :a3510. +:a3511 :a3511 :a3511. +:a3512 :a3512 :a3512. +:a3513 :a3513 :a3513. +:a3514 :a3514 :a3514. +:a3515 :a3515 :a3515. +:a3516 :a3516 :a3516. +:a3517 :a3517 :a3517. +:a3518 :a3518 :a3518. +:a3519 :a3519 :a3519. +:a3520 :a3520 :a3520. +:a3521 :a3521 :a3521. +:a3522 :a3522 :a3522. +:a3523 :a3523 :a3523. +:a3524 :a3524 :a3524. +:a3525 :a3525 :a3525. +:a3526 :a3526 :a3526. +:a3527 :a3527 :a3527. +:a3528 :a3528 :a3528. +:a3529 :a3529 :a3529. +:a3530 :a3530 :a3530. +:a3531 :a3531 :a3531. +:a3532 :a3532 :a3532. +:a3533 :a3533 :a3533. +:a3534 :a3534 :a3534. +:a3535 :a3535 :a3535. +:a3536 :a3536 :a3536. +:a3537 :a3537 :a3537. +:a3538 :a3538 :a3538. +:a3539 :a3539 :a3539. +:a3540 :a3540 :a3540. +:a3541 :a3541 :a3541. +:a3542 :a3542 :a3542. +:a3543 :a3543 :a3543. +:a3544 :a3544 :a3544. +:a3545 :a3545 :a3545. +:a3546 :a3546 :a3546. +:a3547 :a3547 :a3547. +:a3548 :a3548 :a3548. +:a3549 :a3549 :a3549. +:a3550 :a3550 :a3550. +:a3551 :a3551 :a3551. +:a3552 :a3552 :a3552. +:a3553 :a3553 :a3553. +:a3554 :a3554 :a3554. +:a3555 :a3555 :a3555. +:a3556 :a3556 :a3556. +:a3557 :a3557 :a3557. +:a3558 :a3558 :a3558. +:a3559 :a3559 :a3559. +:a3560 :a3560 :a3560. +:a3561 :a3561 :a3561. +:a3562 :a3562 :a3562. +:a3563 :a3563 :a3563. +:a3564 :a3564 :a3564. +:a3565 :a3565 :a3565. +:a3566 :a3566 :a3566. +:a3567 :a3567 :a3567. +:a3568 :a3568 :a3568. +:a3569 :a3569 :a3569. +:a3570 :a3570 :a3570. +:a3571 :a3571 :a3571. +:a3572 :a3572 :a3572. +:a3573 :a3573 :a3573. +:a3574 :a3574 :a3574. +:a3575 :a3575 :a3575. +:a3576 :a3576 :a3576. +:a3577 :a3577 :a3577. +:a3578 :a3578 :a3578. +:a3579 :a3579 :a3579. +:a3580 :a3580 :a3580. +:a3581 :a3581 :a3581. +:a3582 :a3582 :a3582. +:a3583 :a3583 :a3583. +:a3584 :a3584 :a3584. +:a3585 :a3585 :a3585. +:a3586 :a3586 :a3586. +:a3587 :a3587 :a3587. +:a3588 :a3588 :a3588. +:a3589 :a3589 :a3589. +:a3590 :a3590 :a3590. +:a3591 :a3591 :a3591. +:a3592 :a3592 :a3592. +:a3593 :a3593 :a3593. +:a3594 :a3594 :a3594. +:a3595 :a3595 :a3595. +:a3596 :a3596 :a3596. +:a3597 :a3597 :a3597. +:a3598 :a3598 :a3598. +:a3599 :a3599 :a3599. +:a3600 :a3600 :a3600. +:a3601 :a3601 :a3601. +:a3602 :a3602 :a3602. +:a3603 :a3603 :a3603. +:a3604 :a3604 :a3604. +:a3605 :a3605 :a3605. +:a3606 :a3606 :a3606. +:a3607 :a3607 :a3607. +:a3608 :a3608 :a3608. +:a3609 :a3609 :a3609. +:a3610 :a3610 :a3610. +:a3611 :a3611 :a3611. +:a3612 :a3612 :a3612. +:a3613 :a3613 :a3613. +:a3614 :a3614 :a3614. +:a3615 :a3615 :a3615. +:a3616 :a3616 :a3616. +:a3617 :a3617 :a3617. +:a3618 :a3618 :a3618. +:a3619 :a3619 :a3619. +:a3620 :a3620 :a3620. +:a3621 :a3621 :a3621. +:a3622 :a3622 :a3622. +:a3623 :a3623 :a3623. +:a3624 :a3624 :a3624. +:a3625 :a3625 :a3625. +:a3626 :a3626 :a3626. +:a3627 :a3627 :a3627. +:a3628 :a3628 :a3628. +:a3629 :a3629 :a3629. +:a3630 :a3630 :a3630. +:a3631 :a3631 :a3631. +:a3632 :a3632 :a3632. +:a3633 :a3633 :a3633. +:a3634 :a3634 :a3634. +:a3635 :a3635 :a3635. +:a3636 :a3636 :a3636. +:a3637 :a3637 :a3637. +:a3638 :a3638 :a3638. +:a3639 :a3639 :a3639. +:a3640 :a3640 :a3640. +:a3641 :a3641 :a3641. +:a3642 :a3642 :a3642. +:a3643 :a3643 :a3643. +:a3644 :a3644 :a3644. +:a3645 :a3645 :a3645. +:a3646 :a3646 :a3646. +:a3647 :a3647 :a3647. +:a3648 :a3648 :a3648. +:a3649 :a3649 :a3649. +:a3650 :a3650 :a3650. +:a3651 :a3651 :a3651. +:a3652 :a3652 :a3652. +:a3653 :a3653 :a3653. +:a3654 :a3654 :a3654. +:a3655 :a3655 :a3655. +:a3656 :a3656 :a3656. +:a3657 :a3657 :a3657. +:a3658 :a3658 :a3658. +:a3659 :a3659 :a3659. +:a3660 :a3660 :a3660. +:a3661 :a3661 :a3661. +:a3662 :a3662 :a3662. +:a3663 :a3663 :a3663. +:a3664 :a3664 :a3664. +:a3665 :a3665 :a3665. +:a3666 :a3666 :a3666. +:a3667 :a3667 :a3667. +:a3668 :a3668 :a3668. +:a3669 :a3669 :a3669. +:a3670 :a3670 :a3670. +:a3671 :a3671 :a3671. +:a3672 :a3672 :a3672. +:a3673 :a3673 :a3673. +:a3674 :a3674 :a3674. +:a3675 :a3675 :a3675. +:a3676 :a3676 :a3676. +:a3677 :a3677 :a3677. +:a3678 :a3678 :a3678. +:a3679 :a3679 :a3679. +:a3680 :a3680 :a3680. +:a3681 :a3681 :a3681. +:a3682 :a3682 :a3682. +:a3683 :a3683 :a3683. +:a3684 :a3684 :a3684. +:a3685 :a3685 :a3685. +:a3686 :a3686 :a3686. +:a3687 :a3687 :a3687. +:a3688 :a3688 :a3688. +:a3689 :a3689 :a3689. +:a3690 :a3690 :a3690. +:a3691 :a3691 :a3691. +:a3692 :a3692 :a3692. +:a3693 :a3693 :a3693. +:a3694 :a3694 :a3694. +:a3695 :a3695 :a3695. +:a3696 :a3696 :a3696. +:a3697 :a3697 :a3697. +:a3698 :a3698 :a3698. +:a3699 :a3699 :a3699. +:a3700 :a3700 :a3700. +:a3701 :a3701 :a3701. +:a3702 :a3702 :a3702. +:a3703 :a3703 :a3703. +:a3704 :a3704 :a3704. +:a3705 :a3705 :a3705. +:a3706 :a3706 :a3706. +:a3707 :a3707 :a3707. +:a3708 :a3708 :a3708. +:a3709 :a3709 :a3709. +:a3710 :a3710 :a3710. +:a3711 :a3711 :a3711. +:a3712 :a3712 :a3712. +:a3713 :a3713 :a3713. +:a3714 :a3714 :a3714. +:a3715 :a3715 :a3715. +:a3716 :a3716 :a3716. +:a3717 :a3717 :a3717. +:a3718 :a3718 :a3718. +:a3719 :a3719 :a3719. +:a3720 :a3720 :a3720. +:a3721 :a3721 :a3721. +:a3722 :a3722 :a3722. +:a3723 :a3723 :a3723. +:a3724 :a3724 :a3724. +:a3725 :a3725 :a3725. +:a3726 :a3726 :a3726. +:a3727 :a3727 :a3727. +:a3728 :a3728 :a3728. +:a3729 :a3729 :a3729. +:a3730 :a3730 :a3730. +:a3731 :a3731 :a3731. +:a3732 :a3732 :a3732. +:a3733 :a3733 :a3733. +:a3734 :a3734 :a3734. +:a3735 :a3735 :a3735. +:a3736 :a3736 :a3736. +:a3737 :a3737 :a3737. +:a3738 :a3738 :a3738. +:a3739 :a3739 :a3739. +:a3740 :a3740 :a3740. +:a3741 :a3741 :a3741. +:a3742 :a3742 :a3742. +:a3743 :a3743 :a3743. +:a3744 :a3744 :a3744. +:a3745 :a3745 :a3745. +:a3746 :a3746 :a3746. +:a3747 :a3747 :a3747. +:a3748 :a3748 :a3748. +:a3749 :a3749 :a3749. +:a3750 :a3750 :a3750. +:a3751 :a3751 :a3751. +:a3752 :a3752 :a3752. +:a3753 :a3753 :a3753. +:a3754 :a3754 :a3754. +:a3755 :a3755 :a3755. +:a3756 :a3756 :a3756. +:a3757 :a3757 :a3757. +:a3758 :a3758 :a3758. +:a3759 :a3759 :a3759. +:a3760 :a3760 :a3760. +:a3761 :a3761 :a3761. +:a3762 :a3762 :a3762. +:a3763 :a3763 :a3763. +:a3764 :a3764 :a3764. +:a3765 :a3765 :a3765. +:a3766 :a3766 :a3766. +:a3767 :a3767 :a3767. +:a3768 :a3768 :a3768. +:a3769 :a3769 :a3769. +:a3770 :a3770 :a3770. +:a3771 :a3771 :a3771. +:a3772 :a3772 :a3772. +:a3773 :a3773 :a3773. +:a3774 :a3774 :a3774. +:a3775 :a3775 :a3775. +:a3776 :a3776 :a3776. +:a3777 :a3777 :a3777. +:a3778 :a3778 :a3778. +:a3779 :a3779 :a3779. +:a3780 :a3780 :a3780. +:a3781 :a3781 :a3781. +:a3782 :a3782 :a3782. +:a3783 :a3783 :a3783. +:a3784 :a3784 :a3784. +:a3785 :a3785 :a3785. +:a3786 :a3786 :a3786. +:a3787 :a3787 :a3787. +:a3788 :a3788 :a3788. +:a3789 :a3789 :a3789. +:a3790 :a3790 :a3790. +:a3791 :a3791 :a3791. +:a3792 :a3792 :a3792. +:a3793 :a3793 :a3793. +:a3794 :a3794 :a3794. +:a3795 :a3795 :a3795. +:a3796 :a3796 :a3796. +:a3797 :a3797 :a3797. +:a3798 :a3798 :a3798. +:a3799 :a3799 :a3799. +:a3800 :a3800 :a3800. +:a3801 :a3801 :a3801. +:a3802 :a3802 :a3802. +:a3803 :a3803 :a3803. +:a3804 :a3804 :a3804. +:a3805 :a3805 :a3805. +:a3806 :a3806 :a3806. +:a3807 :a3807 :a3807. +:a3808 :a3808 :a3808. +:a3809 :a3809 :a3809. +:a3810 :a3810 :a3810. +:a3811 :a3811 :a3811. +:a3812 :a3812 :a3812. +:a3813 :a3813 :a3813. +:a3814 :a3814 :a3814. +:a3815 :a3815 :a3815. +:a3816 :a3816 :a3816. +:a3817 :a3817 :a3817. +:a3818 :a3818 :a3818. +:a3819 :a3819 :a3819. +:a3820 :a3820 :a3820. +:a3821 :a3821 :a3821. +:a3822 :a3822 :a3822. +:a3823 :a3823 :a3823. +:a3824 :a3824 :a3824. +:a3825 :a3825 :a3825. +:a3826 :a3826 :a3826. +:a3827 :a3827 :a3827. +:a3828 :a3828 :a3828. +:a3829 :a3829 :a3829. +:a3830 :a3830 :a3830. +:a3831 :a3831 :a3831. +:a3832 :a3832 :a3832. +:a3833 :a3833 :a3833. +:a3834 :a3834 :a3834. +:a3835 :a3835 :a3835. +:a3836 :a3836 :a3836. +:a3837 :a3837 :a3837. +:a3838 :a3838 :a3838. +:a3839 :a3839 :a3839. +:a3840 :a3840 :a3840. +:a3841 :a3841 :a3841. +:a3842 :a3842 :a3842. +:a3843 :a3843 :a3843. +:a3844 :a3844 :a3844. +:a3845 :a3845 :a3845. +:a3846 :a3846 :a3846. +:a3847 :a3847 :a3847. +:a3848 :a3848 :a3848. +:a3849 :a3849 :a3849. +:a3850 :a3850 :a3850. +:a3851 :a3851 :a3851. +:a3852 :a3852 :a3852. +:a3853 :a3853 :a3853. +:a3854 :a3854 :a3854. +:a3855 :a3855 :a3855. +:a3856 :a3856 :a3856. +:a3857 :a3857 :a3857. +:a3858 :a3858 :a3858. +:a3859 :a3859 :a3859. +:a3860 :a3860 :a3860. +:a3861 :a3861 :a3861. +:a3862 :a3862 :a3862. +:a3863 :a3863 :a3863. +:a3864 :a3864 :a3864. +:a3865 :a3865 :a3865. +:a3866 :a3866 :a3866. +:a3867 :a3867 :a3867. +:a3868 :a3868 :a3868. +:a3869 :a3869 :a3869. +:a3870 :a3870 :a3870. +:a3871 :a3871 :a3871. +:a3872 :a3872 :a3872. +:a3873 :a3873 :a3873. +:a3874 :a3874 :a3874. +:a3875 :a3875 :a3875. +:a3876 :a3876 :a3876. +:a3877 :a3877 :a3877. +:a3878 :a3878 :a3878. +:a3879 :a3879 :a3879. +:a3880 :a3880 :a3880. +:a3881 :a3881 :a3881. +:a3882 :a3882 :a3882. +:a3883 :a3883 :a3883. +:a3884 :a3884 :a3884. +:a3885 :a3885 :a3885. +:a3886 :a3886 :a3886. +:a3887 :a3887 :a3887. +:a3888 :a3888 :a3888. +:a3889 :a3889 :a3889. +:a3890 :a3890 :a3890. +:a3891 :a3891 :a3891. +:a3892 :a3892 :a3892. +:a3893 :a3893 :a3893. +:a3894 :a3894 :a3894. +:a3895 :a3895 :a3895. +:a3896 :a3896 :a3896. +:a3897 :a3897 :a3897. +:a3898 :a3898 :a3898. +:a3899 :a3899 :a3899. +:a3900 :a3900 :a3900. +:a3901 :a3901 :a3901. +:a3902 :a3902 :a3902. +:a3903 :a3903 :a3903. +:a3904 :a3904 :a3904. +:a3905 :a3905 :a3905. +:a3906 :a3906 :a3906. +:a3907 :a3907 :a3907. +:a3908 :a3908 :a3908. +:a3909 :a3909 :a3909. +:a3910 :a3910 :a3910. +:a3911 :a3911 :a3911. +:a3912 :a3912 :a3912. +:a3913 :a3913 :a3913. +:a3914 :a3914 :a3914. +:a3915 :a3915 :a3915. +:a3916 :a3916 :a3916. +:a3917 :a3917 :a3917. +:a3918 :a3918 :a3918. +:a3919 :a3919 :a3919. +:a3920 :a3920 :a3920. +:a3921 :a3921 :a3921. +:a3922 :a3922 :a3922. +:a3923 :a3923 :a3923. +:a3924 :a3924 :a3924. +:a3925 :a3925 :a3925. +:a3926 :a3926 :a3926. +:a3927 :a3927 :a3927. +:a3928 :a3928 :a3928. +:a3929 :a3929 :a3929. +:a3930 :a3930 :a3930. +:a3931 :a3931 :a3931. +:a3932 :a3932 :a3932. +:a3933 :a3933 :a3933. +:a3934 :a3934 :a3934. +:a3935 :a3935 :a3935. +:a3936 :a3936 :a3936. +:a3937 :a3937 :a3937. +:a3938 :a3938 :a3938. +:a3939 :a3939 :a3939. +:a3940 :a3940 :a3940. +:a3941 :a3941 :a3941. +:a3942 :a3942 :a3942. +:a3943 :a3943 :a3943. +:a3944 :a3944 :a3944. +:a3945 :a3945 :a3945. +:a3946 :a3946 :a3946. +:a3947 :a3947 :a3947. +:a3948 :a3948 :a3948. +:a3949 :a3949 :a3949. +:a3950 :a3950 :a3950. +:a3951 :a3951 :a3951. +:a3952 :a3952 :a3952. +:a3953 :a3953 :a3953. +:a3954 :a3954 :a3954. +:a3955 :a3955 :a3955. +:a3956 :a3956 :a3956. +:a3957 :a3957 :a3957. +:a3958 :a3958 :a3958. +:a3959 :a3959 :a3959. +:a3960 :a3960 :a3960. +:a3961 :a3961 :a3961. +:a3962 :a3962 :a3962. +:a3963 :a3963 :a3963. +:a3964 :a3964 :a3964. +:a3965 :a3965 :a3965. +:a3966 :a3966 :a3966. +:a3967 :a3967 :a3967. +:a3968 :a3968 :a3968. +:a3969 :a3969 :a3969. +:a3970 :a3970 :a3970. +:a3971 :a3971 :a3971. +:a3972 :a3972 :a3972. +:a3973 :a3973 :a3973. +:a3974 :a3974 :a3974. +:a3975 :a3975 :a3975. +:a3976 :a3976 :a3976. +:a3977 :a3977 :a3977. +:a3978 :a3978 :a3978. +:a3979 :a3979 :a3979. +:a3980 :a3980 :a3980. +:a3981 :a3981 :a3981. +:a3982 :a3982 :a3982. +:a3983 :a3983 :a3983. +:a3984 :a3984 :a3984. +:a3985 :a3985 :a3985. +:a3986 :a3986 :a3986. +:a3987 :a3987 :a3987. +:a3988 :a3988 :a3988. +:a3989 :a3989 :a3989. +:a3990 :a3990 :a3990. +:a3991 :a3991 :a3991. +:a3992 :a3992 :a3992. +:a3993 :a3993 :a3993. +:a3994 :a3994 :a3994. +:a3995 :a3995 :a3995. +:a3996 :a3996 :a3996. +:a3997 :a3997 :a3997. +:a3998 :a3998 :a3998. +:a3999 :a3999 :a3999. +:a4000 :a4000 :a4000. +:a4001 :a4001 :a4001. +:a4002 :a4002 :a4002. +:a4003 :a4003 :a4003. +:a4004 :a4004 :a4004. +:a4005 :a4005 :a4005. +:a4006 :a4006 :a4006. +:a4007 :a4007 :a4007. +:a4008 :a4008 :a4008. +:a4009 :a4009 :a4009. +:a4010 :a4010 :a4010. +:a4011 :a4011 :a4011. +:a4012 :a4012 :a4012. +:a4013 :a4013 :a4013. +:a4014 :a4014 :a4014. +:a4015 :a4015 :a4015. +:a4016 :a4016 :a4016. +:a4017 :a4017 :a4017. +:a4018 :a4018 :a4018. +:a4019 :a4019 :a4019. +:a4020 :a4020 :a4020. +:a4021 :a4021 :a4021. +:a4022 :a4022 :a4022. +:a4023 :a4023 :a4023. +:a4024 :a4024 :a4024. +:a4025 :a4025 :a4025. +:a4026 :a4026 :a4026. +:a4027 :a4027 :a4027. +:a4028 :a4028 :a4028. +:a4029 :a4029 :a4029. +:a4030 :a4030 :a4030. +:a4031 :a4031 :a4031. +:a4032 :a4032 :a4032. +:a4033 :a4033 :a4033. +:a4034 :a4034 :a4034. +:a4035 :a4035 :a4035. +:a4036 :a4036 :a4036. +:a4037 :a4037 :a4037. +:a4038 :a4038 :a4038. +:a4039 :a4039 :a4039. +:a4040 :a4040 :a4040. +:a4041 :a4041 :a4041. +:a4042 :a4042 :a4042. +:a4043 :a4043 :a4043. +:a4044 :a4044 :a4044. +:a4045 :a4045 :a4045. +:a4046 :a4046 :a4046. +:a4047 :a4047 :a4047. +:a4048 :a4048 :a4048. +:a4049 :a4049 :a4049. +:a4050 :a4050 :a4050. +:a4051 :a4051 :a4051. +:a4052 :a4052 :a4052. +:a4053 :a4053 :a4053. +:a4054 :a4054 :a4054. +:a4055 :a4055 :a4055. +:a4056 :a4056 :a4056. +:a4057 :a4057 :a4057. +:a4058 :a4058 :a4058. +:a4059 :a4059 :a4059. +:a4060 :a4060 :a4060. +:a4061 :a4061 :a4061. +:a4062 :a4062 :a4062. +:a4063 :a4063 :a4063. +:a4064 :a4064 :a4064. +:a4065 :a4065 :a4065. +:a4066 :a4066 :a4066. +:a4067 :a4067 :a4067. +:a4068 :a4068 :a4068. +:a4069 :a4069 :a4069. +:a4070 :a4070 :a4070. +:a4071 :a4071 :a4071. +:a4072 :a4072 :a4072. +:a4073 :a4073 :a4073. +:a4074 :a4074 :a4074. +:a4075 :a4075 :a4075. +:a4076 :a4076 :a4076. +:a4077 :a4077 :a4077. +:a4078 :a4078 :a4078. +:a4079 :a4079 :a4079. +:a4080 :a4080 :a4080. +:a4081 :a4081 :a4081. +:a4082 :a4082 :a4082. +:a4083 :a4083 :a4083. +:a4084 :a4084 :a4084. +:a4085 :a4085 :a4085. +:a4086 :a4086 :a4086. +:a4087 :a4087 :a4087. +:a4088 :a4088 :a4088. +:a4089 :a4089 :a4089. +:a4090 :a4090 :a4090. +:a4091 :a4091 :a4091. +:a4092 :a4092 :a4092. +:a4093 :a4093 :a4093. +:a4094 :a4094 :a4094. +:a4095 :a4095 :a4095. +:a4096 :a4096 :a4096. +:a4097 :a4097 :a4097. +:a4098 :a4098 :a4098. +:a4099 :a4099 :a4099. +:a4100 :a4100 :a4100. +:a4101 :a4101 :a4101. +:a4102 :a4102 :a4102. +:a4103 :a4103 :a4103. +:a4104 :a4104 :a4104. +:a4105 :a4105 :a4105. +:a4106 :a4106 :a4106. +:a4107 :a4107 :a4107. +:a4108 :a4108 :a4108. +:a4109 :a4109 :a4109. +:a4110 :a4110 :a4110. +:a4111 :a4111 :a4111. +:a4112 :a4112 :a4112. +:a4113 :a4113 :a4113. +:a4114 :a4114 :a4114. +:a4115 :a4115 :a4115. +:a4116 :a4116 :a4116. +:a4117 :a4117 :a4117. +:a4118 :a4118 :a4118. +:a4119 :a4119 :a4119. +:a4120 :a4120 :a4120. +:a4121 :a4121 :a4121. +:a4122 :a4122 :a4122. +:a4123 :a4123 :a4123. +:a4124 :a4124 :a4124. +:a4125 :a4125 :a4125. +:a4126 :a4126 :a4126. +:a4127 :a4127 :a4127. +:a4128 :a4128 :a4128. +:a4129 :a4129 :a4129. +:a4130 :a4130 :a4130. +:a4131 :a4131 :a4131. +:a4132 :a4132 :a4132. +:a4133 :a4133 :a4133. +:a4134 :a4134 :a4134. +:a4135 :a4135 :a4135. +:a4136 :a4136 :a4136. +:a4137 :a4137 :a4137. +:a4138 :a4138 :a4138. +:a4139 :a4139 :a4139. +:a4140 :a4140 :a4140. +:a4141 :a4141 :a4141. +:a4142 :a4142 :a4142. +:a4143 :a4143 :a4143. +:a4144 :a4144 :a4144. +:a4145 :a4145 :a4145. +:a4146 :a4146 :a4146. +:a4147 :a4147 :a4147. +:a4148 :a4148 :a4148. +:a4149 :a4149 :a4149. +:a4150 :a4150 :a4150. +:a4151 :a4151 :a4151. +:a4152 :a4152 :a4152. +:a4153 :a4153 :a4153. +:a4154 :a4154 :a4154. +:a4155 :a4155 :a4155. +:a4156 :a4156 :a4156. +:a4157 :a4157 :a4157. +:a4158 :a4158 :a4158. +:a4159 :a4159 :a4159. +:a4160 :a4160 :a4160. +:a4161 :a4161 :a4161. +:a4162 :a4162 :a4162. +:a4163 :a4163 :a4163. +:a4164 :a4164 :a4164. +:a4165 :a4165 :a4165. +:a4166 :a4166 :a4166. +:a4167 :a4167 :a4167. +:a4168 :a4168 :a4168. +:a4169 :a4169 :a4169. +:a4170 :a4170 :a4170. +:a4171 :a4171 :a4171. +:a4172 :a4172 :a4172. +:a4173 :a4173 :a4173. +:a4174 :a4174 :a4174. +:a4175 :a4175 :a4175. +:a4176 :a4176 :a4176. +:a4177 :a4177 :a4177. +:a4178 :a4178 :a4178. +:a4179 :a4179 :a4179. +:a4180 :a4180 :a4180. +:a4181 :a4181 :a4181. +:a4182 :a4182 :a4182. +:a4183 :a4183 :a4183. +:a4184 :a4184 :a4184. +:a4185 :a4185 :a4185. +:a4186 :a4186 :a4186. +:a4187 :a4187 :a4187. +:a4188 :a4188 :a4188. +:a4189 :a4189 :a4189. +:a4190 :a4190 :a4190. +:a4191 :a4191 :a4191. +:a4192 :a4192 :a4192. +:a4193 :a4193 :a4193. +:a4194 :a4194 :a4194. +:a4195 :a4195 :a4195. +:a4196 :a4196 :a4196. +:a4197 :a4197 :a4197. +:a4198 :a4198 :a4198. +:a4199 :a4199 :a4199. +:a4200 :a4200 :a4200. +:a4201 :a4201 :a4201. +:a4202 :a4202 :a4202. +:a4203 :a4203 :a4203. +:a4204 :a4204 :a4204. +:a4205 :a4205 :a4205. +:a4206 :a4206 :a4206. +:a4207 :a4207 :a4207. +:a4208 :a4208 :a4208. +:a4209 :a4209 :a4209. +:a4210 :a4210 :a4210. +:a4211 :a4211 :a4211. +:a4212 :a4212 :a4212. +:a4213 :a4213 :a4213. +:a4214 :a4214 :a4214. +:a4215 :a4215 :a4215. +:a4216 :a4216 :a4216. +:a4217 :a4217 :a4217. +:a4218 :a4218 :a4218. +:a4219 :a4219 :a4219. +:a4220 :a4220 :a4220. +:a4221 :a4221 :a4221. +:a4222 :a4222 :a4222. +:a4223 :a4223 :a4223. +:a4224 :a4224 :a4224. +:a4225 :a4225 :a4225. +:a4226 :a4226 :a4226. +:a4227 :a4227 :a4227. +:a4228 :a4228 :a4228. +:a4229 :a4229 :a4229. +:a4230 :a4230 :a4230. +:a4231 :a4231 :a4231. +:a4232 :a4232 :a4232. +:a4233 :a4233 :a4233. +:a4234 :a4234 :a4234. +:a4235 :a4235 :a4235. +:a4236 :a4236 :a4236. +:a4237 :a4237 :a4237. +:a4238 :a4238 :a4238. +:a4239 :a4239 :a4239. +:a4240 :a4240 :a4240. +:a4241 :a4241 :a4241. +:a4242 :a4242 :a4242. +:a4243 :a4243 :a4243. +:a4244 :a4244 :a4244. +:a4245 :a4245 :a4245. +:a4246 :a4246 :a4246. +:a4247 :a4247 :a4247. +:a4248 :a4248 :a4248. +:a4249 :a4249 :a4249. +:a4250 :a4250 :a4250. +:a4251 :a4251 :a4251. +:a4252 :a4252 :a4252. +:a4253 :a4253 :a4253. +:a4254 :a4254 :a4254. +:a4255 :a4255 :a4255. +:a4256 :a4256 :a4256. +:a4257 :a4257 :a4257. +:a4258 :a4258 :a4258. +:a4259 :a4259 :a4259. +:a4260 :a4260 :a4260. +:a4261 :a4261 :a4261. +:a4262 :a4262 :a4262. +:a4263 :a4263 :a4263. +:a4264 :a4264 :a4264. +:a4265 :a4265 :a4265. +:a4266 :a4266 :a4266. +:a4267 :a4267 :a4267. +:a4268 :a4268 :a4268. +:a4269 :a4269 :a4269. +:a4270 :a4270 :a4270. +:a4271 :a4271 :a4271. +:a4272 :a4272 :a4272. +:a4273 :a4273 :a4273. +:a4274 :a4274 :a4274. +:a4275 :a4275 :a4275. +:a4276 :a4276 :a4276. +:a4277 :a4277 :a4277. +:a4278 :a4278 :a4278. +:a4279 :a4279 :a4279. +:a4280 :a4280 :a4280. +:a4281 :a4281 :a4281. +:a4282 :a4282 :a4282. +:a4283 :a4283 :a4283. +:a4284 :a4284 :a4284. +:a4285 :a4285 :a4285. +:a4286 :a4286 :a4286. +:a4287 :a4287 :a4287. +:a4288 :a4288 :a4288. +:a4289 :a4289 :a4289. +:a4290 :a4290 :a4290. +:a4291 :a4291 :a4291. +:a4292 :a4292 :a4292. +:a4293 :a4293 :a4293. +:a4294 :a4294 :a4294. +:a4295 :a4295 :a4295. +:a4296 :a4296 :a4296. +:a4297 :a4297 :a4297. +:a4298 :a4298 :a4298. +:a4299 :a4299 :a4299. +:a4300 :a4300 :a4300. +:a4301 :a4301 :a4301. +:a4302 :a4302 :a4302. +:a4303 :a4303 :a4303. +:a4304 :a4304 :a4304. +:a4305 :a4305 :a4305. +:a4306 :a4306 :a4306. +:a4307 :a4307 :a4307. +:a4308 :a4308 :a4308. +:a4309 :a4309 :a4309. +:a4310 :a4310 :a4310. +:a4311 :a4311 :a4311. +:a4312 :a4312 :a4312. +:a4313 :a4313 :a4313. +:a4314 :a4314 :a4314. +:a4315 :a4315 :a4315. +:a4316 :a4316 :a4316. +:a4317 :a4317 :a4317. +:a4318 :a4318 :a4318. +:a4319 :a4319 :a4319. +:a4320 :a4320 :a4320. +:a4321 :a4321 :a4321. +:a4322 :a4322 :a4322. +:a4323 :a4323 :a4323. +:a4324 :a4324 :a4324. +:a4325 :a4325 :a4325. +:a4326 :a4326 :a4326. +:a4327 :a4327 :a4327. +:a4328 :a4328 :a4328. +:a4329 :a4329 :a4329. +:a4330 :a4330 :a4330. +:a4331 :a4331 :a4331. +:a4332 :a4332 :a4332. +:a4333 :a4333 :a4333. +:a4334 :a4334 :a4334. +:a4335 :a4335 :a4335. +:a4336 :a4336 :a4336. +:a4337 :a4337 :a4337. +:a4338 :a4338 :a4338. +:a4339 :a4339 :a4339. +:a4340 :a4340 :a4340. +:a4341 :a4341 :a4341. +:a4342 :a4342 :a4342. +:a4343 :a4343 :a4343. +:a4344 :a4344 :a4344. +:a4345 :a4345 :a4345. +:a4346 :a4346 :a4346. +:a4347 :a4347 :a4347. +:a4348 :a4348 :a4348. +:a4349 :a4349 :a4349. +:a4350 :a4350 :a4350. +:a4351 :a4351 :a4351. +:a4352 :a4352 :a4352. +:a4353 :a4353 :a4353. +:a4354 :a4354 :a4354. +:a4355 :a4355 :a4355. +:a4356 :a4356 :a4356. +:a4357 :a4357 :a4357. +:a4358 :a4358 :a4358. +:a4359 :a4359 :a4359. +:a4360 :a4360 :a4360. +:a4361 :a4361 :a4361. +:a4362 :a4362 :a4362. +:a4363 :a4363 :a4363. +:a4364 :a4364 :a4364. +:a4365 :a4365 :a4365. +:a4366 :a4366 :a4366. +:a4367 :a4367 :a4367. +:a4368 :a4368 :a4368. +:a4369 :a4369 :a4369. +:a4370 :a4370 :a4370. +:a4371 :a4371 :a4371. +:a4372 :a4372 :a4372. +:a4373 :a4373 :a4373. +:a4374 :a4374 :a4374. +:a4375 :a4375 :a4375. +:a4376 :a4376 :a4376. +:a4377 :a4377 :a4377. +:a4378 :a4378 :a4378. +:a4379 :a4379 :a4379. +:a4380 :a4380 :a4380. +:a4381 :a4381 :a4381. +:a4382 :a4382 :a4382. +:a4383 :a4383 :a4383. +:a4384 :a4384 :a4384. +:a4385 :a4385 :a4385. +:a4386 :a4386 :a4386. +:a4387 :a4387 :a4387. +:a4388 :a4388 :a4388. +:a4389 :a4389 :a4389. +:a4390 :a4390 :a4390. +:a4391 :a4391 :a4391. +:a4392 :a4392 :a4392. +:a4393 :a4393 :a4393. +:a4394 :a4394 :a4394. +:a4395 :a4395 :a4395. +:a4396 :a4396 :a4396. +:a4397 :a4397 :a4397. +:a4398 :a4398 :a4398. +:a4399 :a4399 :a4399. +:a4400 :a4400 :a4400. +:a4401 :a4401 :a4401. +:a4402 :a4402 :a4402. +:a4403 :a4403 :a4403. +:a4404 :a4404 :a4404. +:a4405 :a4405 :a4405. +:a4406 :a4406 :a4406. +:a4407 :a4407 :a4407. +:a4408 :a4408 :a4408. +:a4409 :a4409 :a4409. +:a4410 :a4410 :a4410. +:a4411 :a4411 :a4411. +:a4412 :a4412 :a4412. +:a4413 :a4413 :a4413. +:a4414 :a4414 :a4414. +:a4415 :a4415 :a4415. +:a4416 :a4416 :a4416. +:a4417 :a4417 :a4417. +:a4418 :a4418 :a4418. +:a4419 :a4419 :a4419. +:a4420 :a4420 :a4420. +:a4421 :a4421 :a4421. +:a4422 :a4422 :a4422. +:a4423 :a4423 :a4423. +:a4424 :a4424 :a4424. +:a4425 :a4425 :a4425. +:a4426 :a4426 :a4426. +:a4427 :a4427 :a4427. +:a4428 :a4428 :a4428. +:a4429 :a4429 :a4429. +:a4430 :a4430 :a4430. +:a4431 :a4431 :a4431. +:a4432 :a4432 :a4432. +:a4433 :a4433 :a4433. +:a4434 :a4434 :a4434. +:a4435 :a4435 :a4435. +:a4436 :a4436 :a4436. +:a4437 :a4437 :a4437. +:a4438 :a4438 :a4438. +:a4439 :a4439 :a4439. +:a4440 :a4440 :a4440. +:a4441 :a4441 :a4441. +:a4442 :a4442 :a4442. +:a4443 :a4443 :a4443. +:a4444 :a4444 :a4444. +:a4445 :a4445 :a4445. +:a4446 :a4446 :a4446. +:a4447 :a4447 :a4447. +:a4448 :a4448 :a4448. +:a4449 :a4449 :a4449. +:a4450 :a4450 :a4450. +:a4451 :a4451 :a4451. +:a4452 :a4452 :a4452. +:a4453 :a4453 :a4453. +:a4454 :a4454 :a4454. +:a4455 :a4455 :a4455. +:a4456 :a4456 :a4456. +:a4457 :a4457 :a4457. +:a4458 :a4458 :a4458. +:a4459 :a4459 :a4459. +:a4460 :a4460 :a4460. +:a4461 :a4461 :a4461. +:a4462 :a4462 :a4462. +:a4463 :a4463 :a4463. +:a4464 :a4464 :a4464. +:a4465 :a4465 :a4465. +:a4466 :a4466 :a4466. +:a4467 :a4467 :a4467. +:a4468 :a4468 :a4468. +:a4469 :a4469 :a4469. +:a4470 :a4470 :a4470. +:a4471 :a4471 :a4471. +:a4472 :a4472 :a4472. +:a4473 :a4473 :a4473. +:a4474 :a4474 :a4474. +:a4475 :a4475 :a4475. +:a4476 :a4476 :a4476. +:a4477 :a4477 :a4477. +:a4478 :a4478 :a4478. +:a4479 :a4479 :a4479. +:a4480 :a4480 :a4480. +:a4481 :a4481 :a4481. +:a4482 :a4482 :a4482. +:a4483 :a4483 :a4483. +:a4484 :a4484 :a4484. +:a4485 :a4485 :a4485. +:a4486 :a4486 :a4486. +:a4487 :a4487 :a4487. +:a4488 :a4488 :a4488. +:a4489 :a4489 :a4489. +:a4490 :a4490 :a4490. +:a4491 :a4491 :a4491. +:a4492 :a4492 :a4492. +:a4493 :a4493 :a4493. +:a4494 :a4494 :a4494. +:a4495 :a4495 :a4495. +:a4496 :a4496 :a4496. +:a4497 :a4497 :a4497. +:a4498 :a4498 :a4498. +:a4499 :a4499 :a4499. +:a4500 :a4500 :a4500. +:a4501 :a4501 :a4501. +:a4502 :a4502 :a4502. +:a4503 :a4503 :a4503. +:a4504 :a4504 :a4504. +:a4505 :a4505 :a4505. +:a4506 :a4506 :a4506. +:a4507 :a4507 :a4507. +:a4508 :a4508 :a4508. +:a4509 :a4509 :a4509. +:a4510 :a4510 :a4510. +:a4511 :a4511 :a4511. +:a4512 :a4512 :a4512. +:a4513 :a4513 :a4513. +:a4514 :a4514 :a4514. +:a4515 :a4515 :a4515. +:a4516 :a4516 :a4516. +:a4517 :a4517 :a4517. +:a4518 :a4518 :a4518. +:a4519 :a4519 :a4519. +:a4520 :a4520 :a4520. +:a4521 :a4521 :a4521. +:a4522 :a4522 :a4522. +:a4523 :a4523 :a4523. +:a4524 :a4524 :a4524. +:a4525 :a4525 :a4525. +:a4526 :a4526 :a4526. +:a4527 :a4527 :a4527. +:a4528 :a4528 :a4528. +:a4529 :a4529 :a4529. +:a4530 :a4530 :a4530. +:a4531 :a4531 :a4531. +:a4532 :a4532 :a4532. +:a4533 :a4533 :a4533. +:a4534 :a4534 :a4534. +:a4535 :a4535 :a4535. +:a4536 :a4536 :a4536. +:a4537 :a4537 :a4537. +:a4538 :a4538 :a4538. +:a4539 :a4539 :a4539. +:a4540 :a4540 :a4540. +:a4541 :a4541 :a4541. +:a4542 :a4542 :a4542. +:a4543 :a4543 :a4543. +:a4544 :a4544 :a4544. +:a4545 :a4545 :a4545. +:a4546 :a4546 :a4546. +:a4547 :a4547 :a4547. +:a4548 :a4548 :a4548. +:a4549 :a4549 :a4549. +:a4550 :a4550 :a4550. +:a4551 :a4551 :a4551. +:a4552 :a4552 :a4552. +:a4553 :a4553 :a4553. +:a4554 :a4554 :a4554. +:a4555 :a4555 :a4555. +:a4556 :a4556 :a4556. +:a4557 :a4557 :a4557. +:a4558 :a4558 :a4558. +:a4559 :a4559 :a4559. +:a4560 :a4560 :a4560. +:a4561 :a4561 :a4561. +:a4562 :a4562 :a4562. +:a4563 :a4563 :a4563. +:a4564 :a4564 :a4564. +:a4565 :a4565 :a4565. +:a4566 :a4566 :a4566. +:a4567 :a4567 :a4567. +:a4568 :a4568 :a4568. +:a4569 :a4569 :a4569. +:a4570 :a4570 :a4570. +:a4571 :a4571 :a4571. +:a4572 :a4572 :a4572. +:a4573 :a4573 :a4573. +:a4574 :a4574 :a4574. +:a4575 :a4575 :a4575. +:a4576 :a4576 :a4576. +:a4577 :a4577 :a4577. +:a4578 :a4578 :a4578. +:a4579 :a4579 :a4579. +:a4580 :a4580 :a4580. +:a4581 :a4581 :a4581. +:a4582 :a4582 :a4582. +:a4583 :a4583 :a4583. +:a4584 :a4584 :a4584. +:a4585 :a4585 :a4585. +:a4586 :a4586 :a4586. +:a4587 :a4587 :a4587. +:a4588 :a4588 :a4588. +:a4589 :a4589 :a4589. +:a4590 :a4590 :a4590. +:a4591 :a4591 :a4591. +:a4592 :a4592 :a4592. +:a4593 :a4593 :a4593. +:a4594 :a4594 :a4594. +:a4595 :a4595 :a4595. +:a4596 :a4596 :a4596. +:a4597 :a4597 :a4597. +:a4598 :a4598 :a4598. +:a4599 :a4599 :a4599. +:a4600 :a4600 :a4600. +:a4601 :a4601 :a4601. +:a4602 :a4602 :a4602. +:a4603 :a4603 :a4603. +:a4604 :a4604 :a4604. +:a4605 :a4605 :a4605. +:a4606 :a4606 :a4606. +:a4607 :a4607 :a4607. +:a4608 :a4608 :a4608. +:a4609 :a4609 :a4609. +:a4610 :a4610 :a4610. +:a4611 :a4611 :a4611. +:a4612 :a4612 :a4612. +:a4613 :a4613 :a4613. +:a4614 :a4614 :a4614. +:a4615 :a4615 :a4615. +:a4616 :a4616 :a4616. +:a4617 :a4617 :a4617. +:a4618 :a4618 :a4618. +:a4619 :a4619 :a4619. +:a4620 :a4620 :a4620. +:a4621 :a4621 :a4621. +:a4622 :a4622 :a4622. +:a4623 :a4623 :a4623. +:a4624 :a4624 :a4624. +:a4625 :a4625 :a4625. +:a4626 :a4626 :a4626. +:a4627 :a4627 :a4627. +:a4628 :a4628 :a4628. +:a4629 :a4629 :a4629. +:a4630 :a4630 :a4630. +:a4631 :a4631 :a4631. +:a4632 :a4632 :a4632. +:a4633 :a4633 :a4633. +:a4634 :a4634 :a4634. +:a4635 :a4635 :a4635. +:a4636 :a4636 :a4636. +:a4637 :a4637 :a4637. +:a4638 :a4638 :a4638. +:a4639 :a4639 :a4639. +:a4640 :a4640 :a4640. +:a4641 :a4641 :a4641. +:a4642 :a4642 :a4642. +:a4643 :a4643 :a4643. +:a4644 :a4644 :a4644. +:a4645 :a4645 :a4645. +:a4646 :a4646 :a4646. +:a4647 :a4647 :a4647. +:a4648 :a4648 :a4648. +:a4649 :a4649 :a4649. +:a4650 :a4650 :a4650. +:a4651 :a4651 :a4651. +:a4652 :a4652 :a4652. +:a4653 :a4653 :a4653. +:a4654 :a4654 :a4654. +:a4655 :a4655 :a4655. +:a4656 :a4656 :a4656. +:a4657 :a4657 :a4657. +:a4658 :a4658 :a4658. +:a4659 :a4659 :a4659. +:a4660 :a4660 :a4660. +:a4661 :a4661 :a4661. +:a4662 :a4662 :a4662. +:a4663 :a4663 :a4663. +:a4664 :a4664 :a4664. +:a4665 :a4665 :a4665. +:a4666 :a4666 :a4666. +:a4667 :a4667 :a4667. +:a4668 :a4668 :a4668. +:a4669 :a4669 :a4669. +:a4670 :a4670 :a4670. +:a4671 :a4671 :a4671. +:a4672 :a4672 :a4672. +:a4673 :a4673 :a4673. +:a4674 :a4674 :a4674. +:a4675 :a4675 :a4675. +:a4676 :a4676 :a4676. +:a4677 :a4677 :a4677. +:a4678 :a4678 :a4678. +:a4679 :a4679 :a4679. +:a4680 :a4680 :a4680. +:a4681 :a4681 :a4681. +:a4682 :a4682 :a4682. +:a4683 :a4683 :a4683. +:a4684 :a4684 :a4684. +:a4685 :a4685 :a4685. +:a4686 :a4686 :a4686. +:a4687 :a4687 :a4687. +:a4688 :a4688 :a4688. +:a4689 :a4689 :a4689. +:a4690 :a4690 :a4690. +:a4691 :a4691 :a4691. +:a4692 :a4692 :a4692. +:a4693 :a4693 :a4693. +:a4694 :a4694 :a4694. +:a4695 :a4695 :a4695. +:a4696 :a4696 :a4696. +:a4697 :a4697 :a4697. +:a4698 :a4698 :a4698. +:a4699 :a4699 :a4699. +:a4700 :a4700 :a4700. +:a4701 :a4701 :a4701. +:a4702 :a4702 :a4702. +:a4703 :a4703 :a4703. +:a4704 :a4704 :a4704. +:a4705 :a4705 :a4705. +:a4706 :a4706 :a4706. +:a4707 :a4707 :a4707. +:a4708 :a4708 :a4708. +:a4709 :a4709 :a4709. +:a4710 :a4710 :a4710. +:a4711 :a4711 :a4711. +:a4712 :a4712 :a4712. +:a4713 :a4713 :a4713. +:a4714 :a4714 :a4714. +:a4715 :a4715 :a4715. +:a4716 :a4716 :a4716. +:a4717 :a4717 :a4717. +:a4718 :a4718 :a4718. +:a4719 :a4719 :a4719. +:a4720 :a4720 :a4720. +:a4721 :a4721 :a4721. +:a4722 :a4722 :a4722. +:a4723 :a4723 :a4723. +:a4724 :a4724 :a4724. +:a4725 :a4725 :a4725. +:a4726 :a4726 :a4726. +:a4727 :a4727 :a4727. +:a4728 :a4728 :a4728. +:a4729 :a4729 :a4729. +:a4730 :a4730 :a4730. +:a4731 :a4731 :a4731. +:a4732 :a4732 :a4732. +:a4733 :a4733 :a4733. +:a4734 :a4734 :a4734. +:a4735 :a4735 :a4735. +:a4736 :a4736 :a4736. +:a4737 :a4737 :a4737. +:a4738 :a4738 :a4738. +:a4739 :a4739 :a4739. +:a4740 :a4740 :a4740. +:a4741 :a4741 :a4741. +:a4742 :a4742 :a4742. +:a4743 :a4743 :a4743. +:a4744 :a4744 :a4744. +:a4745 :a4745 :a4745. +:a4746 :a4746 :a4746. +:a4747 :a4747 :a4747. +:a4748 :a4748 :a4748. +:a4749 :a4749 :a4749. +:a4750 :a4750 :a4750. +:a4751 :a4751 :a4751. +:a4752 :a4752 :a4752. +:a4753 :a4753 :a4753. +:a4754 :a4754 :a4754. +:a4755 :a4755 :a4755. +:a4756 :a4756 :a4756. +:a4757 :a4757 :a4757. +:a4758 :a4758 :a4758. +:a4759 :a4759 :a4759. +:a4760 :a4760 :a4760. +:a4761 :a4761 :a4761. +:a4762 :a4762 :a4762. +:a4763 :a4763 :a4763. +:a4764 :a4764 :a4764. +:a4765 :a4765 :a4765. +:a4766 :a4766 :a4766. +:a4767 :a4767 :a4767. +:a4768 :a4768 :a4768. +:a4769 :a4769 :a4769. +:a4770 :a4770 :a4770. +:a4771 :a4771 :a4771. +:a4772 :a4772 :a4772. +:a4773 :a4773 :a4773. +:a4774 :a4774 :a4774. +:a4775 :a4775 :a4775. +:a4776 :a4776 :a4776. +:a4777 :a4777 :a4777. +:a4778 :a4778 :a4778. +:a4779 :a4779 :a4779. +:a4780 :a4780 :a4780. +:a4781 :a4781 :a4781. +:a4782 :a4782 :a4782. +:a4783 :a4783 :a4783. +:a4784 :a4784 :a4784. +:a4785 :a4785 :a4785. +:a4786 :a4786 :a4786. +:a4787 :a4787 :a4787. +:a4788 :a4788 :a4788. +:a4789 :a4789 :a4789. +:a4790 :a4790 :a4790. +:a4791 :a4791 :a4791. +:a4792 :a4792 :a4792. +:a4793 :a4793 :a4793. +:a4794 :a4794 :a4794. +:a4795 :a4795 :a4795. +:a4796 :a4796 :a4796. +:a4797 :a4797 :a4797. +:a4798 :a4798 :a4798. +:a4799 :a4799 :a4799. +:a4800 :a4800 :a4800. +:a4801 :a4801 :a4801. +:a4802 :a4802 :a4802. +:a4803 :a4803 :a4803. +:a4804 :a4804 :a4804. +:a4805 :a4805 :a4805. +:a4806 :a4806 :a4806. +:a4807 :a4807 :a4807. +:a4808 :a4808 :a4808. +:a4809 :a4809 :a4809. +:a4810 :a4810 :a4810. +:a4811 :a4811 :a4811. +:a4812 :a4812 :a4812. +:a4813 :a4813 :a4813. +:a4814 :a4814 :a4814. +:a4815 :a4815 :a4815. +:a4816 :a4816 :a4816. +:a4817 :a4817 :a4817. +:a4818 :a4818 :a4818. +:a4819 :a4819 :a4819. +:a4820 :a4820 :a4820. +:a4821 :a4821 :a4821. +:a4822 :a4822 :a4822. +:a4823 :a4823 :a4823. +:a4824 :a4824 :a4824. +:a4825 :a4825 :a4825. +:a4826 :a4826 :a4826. +:a4827 :a4827 :a4827. +:a4828 :a4828 :a4828. +:a4829 :a4829 :a4829. +:a4830 :a4830 :a4830. +:a4831 :a4831 :a4831. +:a4832 :a4832 :a4832. +:a4833 :a4833 :a4833. +:a4834 :a4834 :a4834. +:a4835 :a4835 :a4835. +:a4836 :a4836 :a4836. +:a4837 :a4837 :a4837. +:a4838 :a4838 :a4838. +:a4839 :a4839 :a4839. +:a4840 :a4840 :a4840. +:a4841 :a4841 :a4841. +:a4842 :a4842 :a4842. +:a4843 :a4843 :a4843. +:a4844 :a4844 :a4844. +:a4845 :a4845 :a4845. +:a4846 :a4846 :a4846. +:a4847 :a4847 :a4847. +:a4848 :a4848 :a4848. +:a4849 :a4849 :a4849. +:a4850 :a4850 :a4850. +:a4851 :a4851 :a4851. +:a4852 :a4852 :a4852. +:a4853 :a4853 :a4853. +:a4854 :a4854 :a4854. +:a4855 :a4855 :a4855. +:a4856 :a4856 :a4856. +:a4857 :a4857 :a4857. +:a4858 :a4858 :a4858. +:a4859 :a4859 :a4859. +:a4860 :a4860 :a4860. +:a4861 :a4861 :a4861. +:a4862 :a4862 :a4862. +:a4863 :a4863 :a4863. +:a4864 :a4864 :a4864. +:a4865 :a4865 :a4865. +:a4866 :a4866 :a4866. +:a4867 :a4867 :a4867. +:a4868 :a4868 :a4868. +:a4869 :a4869 :a4869. +:a4870 :a4870 :a4870. +:a4871 :a4871 :a4871. +:a4872 :a4872 :a4872. +:a4873 :a4873 :a4873. +:a4874 :a4874 :a4874. +:a4875 :a4875 :a4875. +:a4876 :a4876 :a4876. +:a4877 :a4877 :a4877. +:a4878 :a4878 :a4878. +:a4879 :a4879 :a4879. +:a4880 :a4880 :a4880. +:a4881 :a4881 :a4881. +:a4882 :a4882 :a4882. +:a4883 :a4883 :a4883. +:a4884 :a4884 :a4884. +:a4885 :a4885 :a4885. +:a4886 :a4886 :a4886. +:a4887 :a4887 :a4887. +:a4888 :a4888 :a4888. +:a4889 :a4889 :a4889. +:a4890 :a4890 :a4890. +:a4891 :a4891 :a4891. +:a4892 :a4892 :a4892. +:a4893 :a4893 :a4893. +:a4894 :a4894 :a4894. +:a4895 :a4895 :a4895. +:a4896 :a4896 :a4896. +:a4897 :a4897 :a4897. +:a4898 :a4898 :a4898. +:a4899 :a4899 :a4899. +:a4900 :a4900 :a4900. +:a4901 :a4901 :a4901. +:a4902 :a4902 :a4902. +:a4903 :a4903 :a4903. +:a4904 :a4904 :a4904. +:a4905 :a4905 :a4905. +:a4906 :a4906 :a4906. +:a4907 :a4907 :a4907. +:a4908 :a4908 :a4908. +:a4909 :a4909 :a4909. +:a4910 :a4910 :a4910. +:a4911 :a4911 :a4911. +:a4912 :a4912 :a4912. +:a4913 :a4913 :a4913. +:a4914 :a4914 :a4914. +:a4915 :a4915 :a4915. +:a4916 :a4916 :a4916. +:a4917 :a4917 :a4917. +:a4918 :a4918 :a4918. +:a4919 :a4919 :a4919. +:a4920 :a4920 :a4920. +:a4921 :a4921 :a4921. +:a4922 :a4922 :a4922. +:a4923 :a4923 :a4923. +:a4924 :a4924 :a4924. +:a4925 :a4925 :a4925. +:a4926 :a4926 :a4926. +:a4927 :a4927 :a4927. +:a4928 :a4928 :a4928. +:a4929 :a4929 :a4929. +:a4930 :a4930 :a4930. +:a4931 :a4931 :a4931. +:a4932 :a4932 :a4932. +:a4933 :a4933 :a4933. +:a4934 :a4934 :a4934. +:a4935 :a4935 :a4935. +:a4936 :a4936 :a4936. +:a4937 :a4937 :a4937. +:a4938 :a4938 :a4938. +:a4939 :a4939 :a4939. +:a4940 :a4940 :a4940. +:a4941 :a4941 :a4941. +:a4942 :a4942 :a4942. +:a4943 :a4943 :a4943. +:a4944 :a4944 :a4944. +:a4945 :a4945 :a4945. +:a4946 :a4946 :a4946. +:a4947 :a4947 :a4947. +:a4948 :a4948 :a4948. +:a4949 :a4949 :a4949. +:a4950 :a4950 :a4950. +:a4951 :a4951 :a4951. +:a4952 :a4952 :a4952. +:a4953 :a4953 :a4953. +:a4954 :a4954 :a4954. +:a4955 :a4955 :a4955. +:a4956 :a4956 :a4956. +:a4957 :a4957 :a4957. +:a4958 :a4958 :a4958. +:a4959 :a4959 :a4959. +:a4960 :a4960 :a4960. +:a4961 :a4961 :a4961. +:a4962 :a4962 :a4962. +:a4963 :a4963 :a4963. +:a4964 :a4964 :a4964. +:a4965 :a4965 :a4965. +:a4966 :a4966 :a4966. +:a4967 :a4967 :a4967. +:a4968 :a4968 :a4968. +:a4969 :a4969 :a4969. +:a4970 :a4970 :a4970. +:a4971 :a4971 :a4971. +:a4972 :a4972 :a4972. +:a4973 :a4973 :a4973. +:a4974 :a4974 :a4974. +:a4975 :a4975 :a4975. +:a4976 :a4976 :a4976. +:a4977 :a4977 :a4977. +:a4978 :a4978 :a4978. +:a4979 :a4979 :a4979. +:a4980 :a4980 :a4980. +:a4981 :a4981 :a4981. +:a4982 :a4982 :a4982. +:a4983 :a4983 :a4983. +:a4984 :a4984 :a4984. +:a4985 :a4985 :a4985. +:a4986 :a4986 :a4986. +:a4987 :a4987 :a4987. +:a4988 :a4988 :a4988. +:a4989 :a4989 :a4989. +:a4990 :a4990 :a4990. +:a4991 :a4991 :a4991. +:a4992 :a4992 :a4992. +:a4993 :a4993 :a4993. +:a4994 :a4994 :a4994. +:a4995 :a4995 :a4995. +:a4996 :a4996 :a4996. +:a4997 :a4997 :a4997. +:a4998 :a4998 :a4998. +:a4999 :a4999 :a4999. +:a5000 :a5000 :a5000. +:a5001 :a5001 :a5001. +:a5002 :a5002 :a5002. +:a5003 :a5003 :a5003. +:a5004 :a5004 :a5004. +:a5005 :a5005 :a5005. +:a5006 :a5006 :a5006. +:a5007 :a5007 :a5007. +:a5008 :a5008 :a5008. +:a5009 :a5009 :a5009. +:a5010 :a5010 :a5010. +:a5011 :a5011 :a5011. +:a5012 :a5012 :a5012. +:a5013 :a5013 :a5013. +:a5014 :a5014 :a5014. +:a5015 :a5015 :a5015. +:a5016 :a5016 :a5016. +:a5017 :a5017 :a5017. +:a5018 :a5018 :a5018. +:a5019 :a5019 :a5019. +:a5020 :a5020 :a5020. +:a5021 :a5021 :a5021. +:a5022 :a5022 :a5022. +:a5023 :a5023 :a5023. +:a5024 :a5024 :a5024. +:a5025 :a5025 :a5025. +:a5026 :a5026 :a5026. +:a5027 :a5027 :a5027. +:a5028 :a5028 :a5028. +:a5029 :a5029 :a5029. +:a5030 :a5030 :a5030. +:a5031 :a5031 :a5031. +:a5032 :a5032 :a5032. +:a5033 :a5033 :a5033. +:a5034 :a5034 :a5034. +:a5035 :a5035 :a5035. +:a5036 :a5036 :a5036. +:a5037 :a5037 :a5037. +:a5038 :a5038 :a5038. +:a5039 :a5039 :a5039. +:a5040 :a5040 :a5040. +:a5041 :a5041 :a5041. +:a5042 :a5042 :a5042. +:a5043 :a5043 :a5043. +:a5044 :a5044 :a5044. +:a5045 :a5045 :a5045. +:a5046 :a5046 :a5046. +:a5047 :a5047 :a5047. +:a5048 :a5048 :a5048. +:a5049 :a5049 :a5049. +:a5050 :a5050 :a5050. +:a5051 :a5051 :a5051. +:a5052 :a5052 :a5052. +:a5053 :a5053 :a5053. +:a5054 :a5054 :a5054. +:a5055 :a5055 :a5055. +:a5056 :a5056 :a5056. +:a5057 :a5057 :a5057. +:a5058 :a5058 :a5058. +:a5059 :a5059 :a5059. +:a5060 :a5060 :a5060. +:a5061 :a5061 :a5061. +:a5062 :a5062 :a5062. +:a5063 :a5063 :a5063. +:a5064 :a5064 :a5064. +:a5065 :a5065 :a5065. +:a5066 :a5066 :a5066. +:a5067 :a5067 :a5067. +:a5068 :a5068 :a5068. +:a5069 :a5069 :a5069. +:a5070 :a5070 :a5070. +:a5071 :a5071 :a5071. +:a5072 :a5072 :a5072. +:a5073 :a5073 :a5073. +:a5074 :a5074 :a5074. +:a5075 :a5075 :a5075. +:a5076 :a5076 :a5076. +:a5077 :a5077 :a5077. +:a5078 :a5078 :a5078. +:a5079 :a5079 :a5079. +:a5080 :a5080 :a5080. +:a5081 :a5081 :a5081. +:a5082 :a5082 :a5082. +:a5083 :a5083 :a5083. +:a5084 :a5084 :a5084. +:a5085 :a5085 :a5085. +:a5086 :a5086 :a5086. +:a5087 :a5087 :a5087. +:a5088 :a5088 :a5088. +:a5089 :a5089 :a5089. +:a5090 :a5090 :a5090. +:a5091 :a5091 :a5091. +:a5092 :a5092 :a5092. +:a5093 :a5093 :a5093. +:a5094 :a5094 :a5094. +:a5095 :a5095 :a5095. +:a5096 :a5096 :a5096. +:a5097 :a5097 :a5097. +:a5098 :a5098 :a5098. +:a5099 :a5099 :a5099. +:a5100 :a5100 :a5100. +:a5101 :a5101 :a5101. +:a5102 :a5102 :a5102. +:a5103 :a5103 :a5103. +:a5104 :a5104 :a5104. +:a5105 :a5105 :a5105. +:a5106 :a5106 :a5106. +:a5107 :a5107 :a5107. +:a5108 :a5108 :a5108. +:a5109 :a5109 :a5109. +:a5110 :a5110 :a5110. +:a5111 :a5111 :a5111. +:a5112 :a5112 :a5112. +:a5113 :a5113 :a5113. +:a5114 :a5114 :a5114. +:a5115 :a5115 :a5115. +:a5116 :a5116 :a5116. +:a5117 :a5117 :a5117. +:a5118 :a5118 :a5118. +:a5119 :a5119 :a5119. +:a5120 :a5120 :a5120. +:a5121 :a5121 :a5121. +:a5122 :a5122 :a5122. +:a5123 :a5123 :a5123. +:a5124 :a5124 :a5124. +:a5125 :a5125 :a5125. +:a5126 :a5126 :a5126. +:a5127 :a5127 :a5127. +:a5128 :a5128 :a5128. +:a5129 :a5129 :a5129. +:a5130 :a5130 :a5130. +:a5131 :a5131 :a5131. +:a5132 :a5132 :a5132. +:a5133 :a5133 :a5133. +:a5134 :a5134 :a5134. +:a5135 :a5135 :a5135. +:a5136 :a5136 :a5136. +:a5137 :a5137 :a5137. +:a5138 :a5138 :a5138. +:a5139 :a5139 :a5139. +:a5140 :a5140 :a5140. +:a5141 :a5141 :a5141. +:a5142 :a5142 :a5142. +:a5143 :a5143 :a5143. +:a5144 :a5144 :a5144. +:a5145 :a5145 :a5145. +:a5146 :a5146 :a5146. +:a5147 :a5147 :a5147. +:a5148 :a5148 :a5148. +:a5149 :a5149 :a5149. +:a5150 :a5150 :a5150. +:a5151 :a5151 :a5151. +:a5152 :a5152 :a5152. +:a5153 :a5153 :a5153. +:a5154 :a5154 :a5154. +:a5155 :a5155 :a5155. +:a5156 :a5156 :a5156. +:a5157 :a5157 :a5157. +:a5158 :a5158 :a5158. +:a5159 :a5159 :a5159. +:a5160 :a5160 :a5160. +:a5161 :a5161 :a5161. +:a5162 :a5162 :a5162. +:a5163 :a5163 :a5163. +:a5164 :a5164 :a5164. +:a5165 :a5165 :a5165. +:a5166 :a5166 :a5166. +:a5167 :a5167 :a5167. +:a5168 :a5168 :a5168. +:a5169 :a5169 :a5169. +:a5170 :a5170 :a5170. +:a5171 :a5171 :a5171. +:a5172 :a5172 :a5172. +:a5173 :a5173 :a5173. +:a5174 :a5174 :a5174. +:a5175 :a5175 :a5175. +:a5176 :a5176 :a5176. +:a5177 :a5177 :a5177. +:a5178 :a5178 :a5178. +:a5179 :a5179 :a5179. +:a5180 :a5180 :a5180. +:a5181 :a5181 :a5181. +:a5182 :a5182 :a5182. +:a5183 :a5183 :a5183. +:a5184 :a5184 :a5184. +:a5185 :a5185 :a5185. +:a5186 :a5186 :a5186. +:a5187 :a5187 :a5187. +:a5188 :a5188 :a5188. +:a5189 :a5189 :a5189. +:a5190 :a5190 :a5190. +:a5191 :a5191 :a5191. +:a5192 :a5192 :a5192. +:a5193 :a5193 :a5193. +:a5194 :a5194 :a5194. +:a5195 :a5195 :a5195. +:a5196 :a5196 :a5196. +:a5197 :a5197 :a5197. +:a5198 :a5198 :a5198. +:a5199 :a5199 :a5199. +:a5200 :a5200 :a5200. +:a5201 :a5201 :a5201. +:a5202 :a5202 :a5202. +:a5203 :a5203 :a5203. +:a5204 :a5204 :a5204. +:a5205 :a5205 :a5205. +:a5206 :a5206 :a5206. +:a5207 :a5207 :a5207. +:a5208 :a5208 :a5208. +:a5209 :a5209 :a5209. +:a5210 :a5210 :a5210. +:a5211 :a5211 :a5211. +:a5212 :a5212 :a5212. +:a5213 :a5213 :a5213. +:a5214 :a5214 :a5214. +:a5215 :a5215 :a5215. +:a5216 :a5216 :a5216. +:a5217 :a5217 :a5217. +:a5218 :a5218 :a5218. +:a5219 :a5219 :a5219. +:a5220 :a5220 :a5220. +:a5221 :a5221 :a5221. +:a5222 :a5222 :a5222. +:a5223 :a5223 :a5223. +:a5224 :a5224 :a5224. +:a5225 :a5225 :a5225. +:a5226 :a5226 :a5226. +:a5227 :a5227 :a5227. +:a5228 :a5228 :a5228. +:a5229 :a5229 :a5229. +:a5230 :a5230 :a5230. +:a5231 :a5231 :a5231. +:a5232 :a5232 :a5232. +:a5233 :a5233 :a5233. +:a5234 :a5234 :a5234. +:a5235 :a5235 :a5235. +:a5236 :a5236 :a5236. +:a5237 :a5237 :a5237. +:a5238 :a5238 :a5238. +:a5239 :a5239 :a5239. +:a5240 :a5240 :a5240. +:a5241 :a5241 :a5241. +:a5242 :a5242 :a5242. +:a5243 :a5243 :a5243. +:a5244 :a5244 :a5244. +:a5245 :a5245 :a5245. +:a5246 :a5246 :a5246. +:a5247 :a5247 :a5247. +:a5248 :a5248 :a5248. +:a5249 :a5249 :a5249. +:a5250 :a5250 :a5250. +:a5251 :a5251 :a5251. +:a5252 :a5252 :a5252. +:a5253 :a5253 :a5253. +:a5254 :a5254 :a5254. +:a5255 :a5255 :a5255. +:a5256 :a5256 :a5256. +:a5257 :a5257 :a5257. +:a5258 :a5258 :a5258. +:a5259 :a5259 :a5259. +:a5260 :a5260 :a5260. +:a5261 :a5261 :a5261. +:a5262 :a5262 :a5262. +:a5263 :a5263 :a5263. +:a5264 :a5264 :a5264. +:a5265 :a5265 :a5265. +:a5266 :a5266 :a5266. +:a5267 :a5267 :a5267. +:a5268 :a5268 :a5268. +:a5269 :a5269 :a5269. +:a5270 :a5270 :a5270. +:a5271 :a5271 :a5271. +:a5272 :a5272 :a5272. +:a5273 :a5273 :a5273. +:a5274 :a5274 :a5274. +:a5275 :a5275 :a5275. +:a5276 :a5276 :a5276. +:a5277 :a5277 :a5277. +:a5278 :a5278 :a5278. +:a5279 :a5279 :a5279. +:a5280 :a5280 :a5280. +:a5281 :a5281 :a5281. +:a5282 :a5282 :a5282. +:a5283 :a5283 :a5283. +:a5284 :a5284 :a5284. +:a5285 :a5285 :a5285. +:a5286 :a5286 :a5286. +:a5287 :a5287 :a5287. +:a5288 :a5288 :a5288. +:a5289 :a5289 :a5289. +:a5290 :a5290 :a5290. +:a5291 :a5291 :a5291. +:a5292 :a5292 :a5292. +:a5293 :a5293 :a5293. +:a5294 :a5294 :a5294. +:a5295 :a5295 :a5295. +:a5296 :a5296 :a5296. +:a5297 :a5297 :a5297. +:a5298 :a5298 :a5298. +:a5299 :a5299 :a5299. +:a5300 :a5300 :a5300. +:a5301 :a5301 :a5301. +:a5302 :a5302 :a5302. +:a5303 :a5303 :a5303. +:a5304 :a5304 :a5304. +:a5305 :a5305 :a5305. +:a5306 :a5306 :a5306. +:a5307 :a5307 :a5307. +:a5308 :a5308 :a5308. +:a5309 :a5309 :a5309. +:a5310 :a5310 :a5310. +:a5311 :a5311 :a5311. +:a5312 :a5312 :a5312. +:a5313 :a5313 :a5313. +:a5314 :a5314 :a5314. +:a5315 :a5315 :a5315. +:a5316 :a5316 :a5316. +:a5317 :a5317 :a5317. +:a5318 :a5318 :a5318. +:a5319 :a5319 :a5319. +:a5320 :a5320 :a5320. +:a5321 :a5321 :a5321. +:a5322 :a5322 :a5322. +:a5323 :a5323 :a5323. +:a5324 :a5324 :a5324. +:a5325 :a5325 :a5325. +:a5326 :a5326 :a5326. +:a5327 :a5327 :a5327. +:a5328 :a5328 :a5328. +:a5329 :a5329 :a5329. +:a5330 :a5330 :a5330. +:a5331 :a5331 :a5331. +:a5332 :a5332 :a5332. +:a5333 :a5333 :a5333. +:a5334 :a5334 :a5334. +:a5335 :a5335 :a5335. +:a5336 :a5336 :a5336. +:a5337 :a5337 :a5337. +:a5338 :a5338 :a5338. +:a5339 :a5339 :a5339. +:a5340 :a5340 :a5340. +:a5341 :a5341 :a5341. +:a5342 :a5342 :a5342. +:a5343 :a5343 :a5343. +:a5344 :a5344 :a5344. +:a5345 :a5345 :a5345. +:a5346 :a5346 :a5346. +:a5347 :a5347 :a5347. +:a5348 :a5348 :a5348. +:a5349 :a5349 :a5349. +:a5350 :a5350 :a5350. +:a5351 :a5351 :a5351. +:a5352 :a5352 :a5352. +:a5353 :a5353 :a5353. +:a5354 :a5354 :a5354. +:a5355 :a5355 :a5355. +:a5356 :a5356 :a5356. +:a5357 :a5357 :a5357. +:a5358 :a5358 :a5358. +:a5359 :a5359 :a5359. +:a5360 :a5360 :a5360. +:a5361 :a5361 :a5361. +:a5362 :a5362 :a5362. +:a5363 :a5363 :a5363. +:a5364 :a5364 :a5364. +:a5365 :a5365 :a5365. +:a5366 :a5366 :a5366. +:a5367 :a5367 :a5367. +:a5368 :a5368 :a5368. +:a5369 :a5369 :a5369. +:a5370 :a5370 :a5370. +:a5371 :a5371 :a5371. +:a5372 :a5372 :a5372. +:a5373 :a5373 :a5373. +:a5374 :a5374 :a5374. +:a5375 :a5375 :a5375. +:a5376 :a5376 :a5376. +:a5377 :a5377 :a5377. +:a5378 :a5378 :a5378. +:a5379 :a5379 :a5379. +:a5380 :a5380 :a5380. +:a5381 :a5381 :a5381. +:a5382 :a5382 :a5382. +:a5383 :a5383 :a5383. +:a5384 :a5384 :a5384. +:a5385 :a5385 :a5385. +:a5386 :a5386 :a5386. +:a5387 :a5387 :a5387. +:a5388 :a5388 :a5388. +:a5389 :a5389 :a5389. +:a5390 :a5390 :a5390. +:a5391 :a5391 :a5391. +:a5392 :a5392 :a5392. +:a5393 :a5393 :a5393. +:a5394 :a5394 :a5394. +:a5395 :a5395 :a5395. +:a5396 :a5396 :a5396. +:a5397 :a5397 :a5397. +:a5398 :a5398 :a5398. +:a5399 :a5399 :a5399. +:a5400 :a5400 :a5400. +:a5401 :a5401 :a5401. +:a5402 :a5402 :a5402. +:a5403 :a5403 :a5403. +:a5404 :a5404 :a5404. +:a5405 :a5405 :a5405. +:a5406 :a5406 :a5406. +:a5407 :a5407 :a5407. +:a5408 :a5408 :a5408. +:a5409 :a5409 :a5409. +:a5410 :a5410 :a5410. +:a5411 :a5411 :a5411. +:a5412 :a5412 :a5412. +:a5413 :a5413 :a5413. +:a5414 :a5414 :a5414. +:a5415 :a5415 :a5415. +:a5416 :a5416 :a5416. +:a5417 :a5417 :a5417. +:a5418 :a5418 :a5418. +:a5419 :a5419 :a5419. +:a5420 :a5420 :a5420. +:a5421 :a5421 :a5421. +:a5422 :a5422 :a5422. +:a5423 :a5423 :a5423. +:a5424 :a5424 :a5424. +:a5425 :a5425 :a5425. +:a5426 :a5426 :a5426. +:a5427 :a5427 :a5427. +:a5428 :a5428 :a5428. +:a5429 :a5429 :a5429. +:a5430 :a5430 :a5430. +:a5431 :a5431 :a5431. +:a5432 :a5432 :a5432. +:a5433 :a5433 :a5433. +:a5434 :a5434 :a5434. +:a5435 :a5435 :a5435. +:a5436 :a5436 :a5436. +:a5437 :a5437 :a5437. +:a5438 :a5438 :a5438. +:a5439 :a5439 :a5439. +:a5440 :a5440 :a5440. +:a5441 :a5441 :a5441. +:a5442 :a5442 :a5442. +:a5443 :a5443 :a5443. +:a5444 :a5444 :a5444. +:a5445 :a5445 :a5445. +:a5446 :a5446 :a5446. +:a5447 :a5447 :a5447. +:a5448 :a5448 :a5448. +:a5449 :a5449 :a5449. +:a5450 :a5450 :a5450. +:a5451 :a5451 :a5451. +:a5452 :a5452 :a5452. +:a5453 :a5453 :a5453. +:a5454 :a5454 :a5454. +:a5455 :a5455 :a5455. +:a5456 :a5456 :a5456. +:a5457 :a5457 :a5457. +:a5458 :a5458 :a5458. +:a5459 :a5459 :a5459. +:a5460 :a5460 :a5460. +:a5461 :a5461 :a5461. +:a5462 :a5462 :a5462. +:a5463 :a5463 :a5463. +:a5464 :a5464 :a5464. +:a5465 :a5465 :a5465. +:a5466 :a5466 :a5466. +:a5467 :a5467 :a5467. +:a5468 :a5468 :a5468. +:a5469 :a5469 :a5469. +:a5470 :a5470 :a5470. +:a5471 :a5471 :a5471. +:a5472 :a5472 :a5472. +:a5473 :a5473 :a5473. +:a5474 :a5474 :a5474. +:a5475 :a5475 :a5475. +:a5476 :a5476 :a5476. +:a5477 :a5477 :a5477. +:a5478 :a5478 :a5478. +:a5479 :a5479 :a5479. +:a5480 :a5480 :a5480. +:a5481 :a5481 :a5481. +:a5482 :a5482 :a5482. +:a5483 :a5483 :a5483. +:a5484 :a5484 :a5484. +:a5485 :a5485 :a5485. +:a5486 :a5486 :a5486. +:a5487 :a5487 :a5487. +:a5488 :a5488 :a5488. +:a5489 :a5489 :a5489. +:a5490 :a5490 :a5490. +:a5491 :a5491 :a5491. +:a5492 :a5492 :a5492. +:a5493 :a5493 :a5493. +:a5494 :a5494 :a5494. +:a5495 :a5495 :a5495. +:a5496 :a5496 :a5496. +:a5497 :a5497 :a5497. +:a5498 :a5498 :a5498. +:a5499 :a5499 :a5499. +:a5500 :a5500 :a5500. +:a5501 :a5501 :a5501. +:a5502 :a5502 :a5502. +:a5503 :a5503 :a5503. +:a5504 :a5504 :a5504. +:a5505 :a5505 :a5505. +:a5506 :a5506 :a5506. +:a5507 :a5507 :a5507. +:a5508 :a5508 :a5508. +:a5509 :a5509 :a5509. +:a5510 :a5510 :a5510. +:a5511 :a5511 :a5511. +:a5512 :a5512 :a5512. +:a5513 :a5513 :a5513. +:a5514 :a5514 :a5514. +:a5515 :a5515 :a5515. +:a5516 :a5516 :a5516. +:a5517 :a5517 :a5517. +:a5518 :a5518 :a5518. +:a5519 :a5519 :a5519. +:a5520 :a5520 :a5520. +:a5521 :a5521 :a5521. +:a5522 :a5522 :a5522. +:a5523 :a5523 :a5523. +:a5524 :a5524 :a5524. +:a5525 :a5525 :a5525. +:a5526 :a5526 :a5526. +:a5527 :a5527 :a5527. +:a5528 :a5528 :a5528. +:a5529 :a5529 :a5529. +:a5530 :a5530 :a5530. +:a5531 :a5531 :a5531. +:a5532 :a5532 :a5532. +:a5533 :a5533 :a5533. +:a5534 :a5534 :a5534. +:a5535 :a5535 :a5535. +:a5536 :a5536 :a5536. +:a5537 :a5537 :a5537. +:a5538 :a5538 :a5538. +:a5539 :a5539 :a5539. +:a5540 :a5540 :a5540. +:a5541 :a5541 :a5541. +:a5542 :a5542 :a5542. +:a5543 :a5543 :a5543. +:a5544 :a5544 :a5544. +:a5545 :a5545 :a5545. +:a5546 :a5546 :a5546. +:a5547 :a5547 :a5547. +:a5548 :a5548 :a5548. +:a5549 :a5549 :a5549. +:a5550 :a5550 :a5550. +:a5551 :a5551 :a5551. +:a5552 :a5552 :a5552. +:a5553 :a5553 :a5553. +:a5554 :a5554 :a5554. +:a5555 :a5555 :a5555. +:a5556 :a5556 :a5556. +:a5557 :a5557 :a5557. +:a5558 :a5558 :a5558. +:a5559 :a5559 :a5559. +:a5560 :a5560 :a5560. +:a5561 :a5561 :a5561. +:a5562 :a5562 :a5562. +:a5563 :a5563 :a5563. +:a5564 :a5564 :a5564. +:a5565 :a5565 :a5565. +:a5566 :a5566 :a5566. +:a5567 :a5567 :a5567. +:a5568 :a5568 :a5568. +:a5569 :a5569 :a5569. +:a5570 :a5570 :a5570. +:a5571 :a5571 :a5571. +:a5572 :a5572 :a5572. +:a5573 :a5573 :a5573. +:a5574 :a5574 :a5574. +:a5575 :a5575 :a5575. +:a5576 :a5576 :a5576. +:a5577 :a5577 :a5577. +:a5578 :a5578 :a5578. +:a5579 :a5579 :a5579. +:a5580 :a5580 :a5580. +:a5581 :a5581 :a5581. +:a5582 :a5582 :a5582. +:a5583 :a5583 :a5583. +:a5584 :a5584 :a5584. +:a5585 :a5585 :a5585. +:a5586 :a5586 :a5586. +:a5587 :a5587 :a5587. +:a5588 :a5588 :a5588. +:a5589 :a5589 :a5589. +:a5590 :a5590 :a5590. +:a5591 :a5591 :a5591. +:a5592 :a5592 :a5592. +:a5593 :a5593 :a5593. +:a5594 :a5594 :a5594. +:a5595 :a5595 :a5595. +:a5596 :a5596 :a5596. +:a5597 :a5597 :a5597. +:a5598 :a5598 :a5598. +:a5599 :a5599 :a5599. +:a5600 :a5600 :a5600. +:a5601 :a5601 :a5601. +:a5602 :a5602 :a5602. +:a5603 :a5603 :a5603. +:a5604 :a5604 :a5604. +:a5605 :a5605 :a5605. +:a5606 :a5606 :a5606. +:a5607 :a5607 :a5607. +:a5608 :a5608 :a5608. +:a5609 :a5609 :a5609. +:a5610 :a5610 :a5610. +:a5611 :a5611 :a5611. +:a5612 :a5612 :a5612. +:a5613 :a5613 :a5613. +:a5614 :a5614 :a5614. +:a5615 :a5615 :a5615. +:a5616 :a5616 :a5616. +:a5617 :a5617 :a5617. +:a5618 :a5618 :a5618. +:a5619 :a5619 :a5619. +:a5620 :a5620 :a5620. +:a5621 :a5621 :a5621. +:a5622 :a5622 :a5622. +:a5623 :a5623 :a5623. +:a5624 :a5624 :a5624. +:a5625 :a5625 :a5625. +:a5626 :a5626 :a5626. +:a5627 :a5627 :a5627. +:a5628 :a5628 :a5628. +:a5629 :a5629 :a5629. +:a5630 :a5630 :a5630. +:a5631 :a5631 :a5631. +:a5632 :a5632 :a5632. +:a5633 :a5633 :a5633. +:a5634 :a5634 :a5634. +:a5635 :a5635 :a5635. +:a5636 :a5636 :a5636. +:a5637 :a5637 :a5637. +:a5638 :a5638 :a5638. +:a5639 :a5639 :a5639. +:a5640 :a5640 :a5640. +:a5641 :a5641 :a5641. +:a5642 :a5642 :a5642. +:a5643 :a5643 :a5643. +:a5644 :a5644 :a5644. +:a5645 :a5645 :a5645. +:a5646 :a5646 :a5646. +:a5647 :a5647 :a5647. +:a5648 :a5648 :a5648. +:a5649 :a5649 :a5649. +:a5650 :a5650 :a5650. +:a5651 :a5651 :a5651. +:a5652 :a5652 :a5652. +:a5653 :a5653 :a5653. +:a5654 :a5654 :a5654. +:a5655 :a5655 :a5655. +:a5656 :a5656 :a5656. +:a5657 :a5657 :a5657. +:a5658 :a5658 :a5658. +:a5659 :a5659 :a5659. +:a5660 :a5660 :a5660. +:a5661 :a5661 :a5661. +:a5662 :a5662 :a5662. +:a5663 :a5663 :a5663. +:a5664 :a5664 :a5664. +:a5665 :a5665 :a5665. +:a5666 :a5666 :a5666. +:a5667 :a5667 :a5667. +:a5668 :a5668 :a5668. +:a5669 :a5669 :a5669. +:a5670 :a5670 :a5670. +:a5671 :a5671 :a5671. +:a5672 :a5672 :a5672. +:a5673 :a5673 :a5673. +:a5674 :a5674 :a5674. +:a5675 :a5675 :a5675. +:a5676 :a5676 :a5676. +:a5677 :a5677 :a5677. +:a5678 :a5678 :a5678. +:a5679 :a5679 :a5679. +:a5680 :a5680 :a5680. +:a5681 :a5681 :a5681. +:a5682 :a5682 :a5682. +:a5683 :a5683 :a5683. +:a5684 :a5684 :a5684. +:a5685 :a5685 :a5685. +:a5686 :a5686 :a5686. +:a5687 :a5687 :a5687. +:a5688 :a5688 :a5688. +:a5689 :a5689 :a5689. +:a5690 :a5690 :a5690. +:a5691 :a5691 :a5691. +:a5692 :a5692 :a5692. +:a5693 :a5693 :a5693. +:a5694 :a5694 :a5694. +:a5695 :a5695 :a5695. +:a5696 :a5696 :a5696. +:a5697 :a5697 :a5697. +:a5698 :a5698 :a5698. +:a5699 :a5699 :a5699. +:a5700 :a5700 :a5700. +:a5701 :a5701 :a5701. +:a5702 :a5702 :a5702. +:a5703 :a5703 :a5703. +:a5704 :a5704 :a5704. +:a5705 :a5705 :a5705. +:a5706 :a5706 :a5706. +:a5707 :a5707 :a5707. +:a5708 :a5708 :a5708. +:a5709 :a5709 :a5709. +:a5710 :a5710 :a5710. +:a5711 :a5711 :a5711. +:a5712 :a5712 :a5712. +:a5713 :a5713 :a5713. +:a5714 :a5714 :a5714. +:a5715 :a5715 :a5715. +:a5716 :a5716 :a5716. +:a5717 :a5717 :a5717. +:a5718 :a5718 :a5718. +:a5719 :a5719 :a5719. +:a5720 :a5720 :a5720. +:a5721 :a5721 :a5721. +:a5722 :a5722 :a5722. +:a5723 :a5723 :a5723. +:a5724 :a5724 :a5724. +:a5725 :a5725 :a5725. +:a5726 :a5726 :a5726. +:a5727 :a5727 :a5727. +:a5728 :a5728 :a5728. +:a5729 :a5729 :a5729. +:a5730 :a5730 :a5730. +:a5731 :a5731 :a5731. +:a5732 :a5732 :a5732. +:a5733 :a5733 :a5733. +:a5734 :a5734 :a5734. +:a5735 :a5735 :a5735. +:a5736 :a5736 :a5736. +:a5737 :a5737 :a5737. +:a5738 :a5738 :a5738. +:a5739 :a5739 :a5739. +:a5740 :a5740 :a5740. +:a5741 :a5741 :a5741. +:a5742 :a5742 :a5742. +:a5743 :a5743 :a5743. +:a5744 :a5744 :a5744. +:a5745 :a5745 :a5745. +:a5746 :a5746 :a5746. +:a5747 :a5747 :a5747. +:a5748 :a5748 :a5748. +:a5749 :a5749 :a5749. +:a5750 :a5750 :a5750. +:a5751 :a5751 :a5751. +:a5752 :a5752 :a5752. +:a5753 :a5753 :a5753. +:a5754 :a5754 :a5754. +:a5755 :a5755 :a5755. +:a5756 :a5756 :a5756. +:a5757 :a5757 :a5757. +:a5758 :a5758 :a5758. +:a5759 :a5759 :a5759. +:a5760 :a5760 :a5760. +:a5761 :a5761 :a5761. +:a5762 :a5762 :a5762. +:a5763 :a5763 :a5763. +:a5764 :a5764 :a5764. +:a5765 :a5765 :a5765. +:a5766 :a5766 :a5766. +:a5767 :a5767 :a5767. +:a5768 :a5768 :a5768. +:a5769 :a5769 :a5769. +:a5770 :a5770 :a5770. +:a5771 :a5771 :a5771. +:a5772 :a5772 :a5772. +:a5773 :a5773 :a5773. +:a5774 :a5774 :a5774. +:a5775 :a5775 :a5775. +:a5776 :a5776 :a5776. +:a5777 :a5777 :a5777. +:a5778 :a5778 :a5778. +:a5779 :a5779 :a5779. +:a5780 :a5780 :a5780. +:a5781 :a5781 :a5781. +:a5782 :a5782 :a5782. +:a5783 :a5783 :a5783. +:a5784 :a5784 :a5784. +:a5785 :a5785 :a5785. +:a5786 :a5786 :a5786. +:a5787 :a5787 :a5787. +:a5788 :a5788 :a5788. +:a5789 :a5789 :a5789. +:a5790 :a5790 :a5790. +:a5791 :a5791 :a5791. +:a5792 :a5792 :a5792. +:a5793 :a5793 :a5793. +:a5794 :a5794 :a5794. +:a5795 :a5795 :a5795. +:a5796 :a5796 :a5796. +:a5797 :a5797 :a5797. +:a5798 :a5798 :a5798. +:a5799 :a5799 :a5799. +:a5800 :a5800 :a5800. +:a5801 :a5801 :a5801. +:a5802 :a5802 :a5802. +:a5803 :a5803 :a5803. +:a5804 :a5804 :a5804. +:a5805 :a5805 :a5805. +:a5806 :a5806 :a5806. +:a5807 :a5807 :a5807. +:a5808 :a5808 :a5808. +:a5809 :a5809 :a5809. +:a5810 :a5810 :a5810. +:a5811 :a5811 :a5811. +:a5812 :a5812 :a5812. +:a5813 :a5813 :a5813. +:a5814 :a5814 :a5814. +:a5815 :a5815 :a5815. +:a5816 :a5816 :a5816. +:a5817 :a5817 :a5817. +:a5818 :a5818 :a5818. +:a5819 :a5819 :a5819. +:a5820 :a5820 :a5820. +:a5821 :a5821 :a5821. +:a5822 :a5822 :a5822. +:a5823 :a5823 :a5823. +:a5824 :a5824 :a5824. +:a5825 :a5825 :a5825. +:a5826 :a5826 :a5826. +:a5827 :a5827 :a5827. +:a5828 :a5828 :a5828. +:a5829 :a5829 :a5829. +:a5830 :a5830 :a5830. +:a5831 :a5831 :a5831. +:a5832 :a5832 :a5832. +:a5833 :a5833 :a5833. +:a5834 :a5834 :a5834. +:a5835 :a5835 :a5835. +:a5836 :a5836 :a5836. +:a5837 :a5837 :a5837. +:a5838 :a5838 :a5838. +:a5839 :a5839 :a5839. +:a5840 :a5840 :a5840. +:a5841 :a5841 :a5841. +:a5842 :a5842 :a5842. +:a5843 :a5843 :a5843. +:a5844 :a5844 :a5844. +:a5845 :a5845 :a5845. +:a5846 :a5846 :a5846. +:a5847 :a5847 :a5847. +:a5848 :a5848 :a5848. +:a5849 :a5849 :a5849. +:a5850 :a5850 :a5850. +:a5851 :a5851 :a5851. +:a5852 :a5852 :a5852. +:a5853 :a5853 :a5853. +:a5854 :a5854 :a5854. +:a5855 :a5855 :a5855. +:a5856 :a5856 :a5856. +:a5857 :a5857 :a5857. +:a5858 :a5858 :a5858. +:a5859 :a5859 :a5859. +:a5860 :a5860 :a5860. +:a5861 :a5861 :a5861. +:a5862 :a5862 :a5862. +:a5863 :a5863 :a5863. +:a5864 :a5864 :a5864. +:a5865 :a5865 :a5865. +:a5866 :a5866 :a5866. +:a5867 :a5867 :a5867. +:a5868 :a5868 :a5868. +:a5869 :a5869 :a5869. +:a5870 :a5870 :a5870. +:a5871 :a5871 :a5871. +:a5872 :a5872 :a5872. +:a5873 :a5873 :a5873. +:a5874 :a5874 :a5874. +:a5875 :a5875 :a5875. +:a5876 :a5876 :a5876. +:a5877 :a5877 :a5877. +:a5878 :a5878 :a5878. +:a5879 :a5879 :a5879. +:a5880 :a5880 :a5880. +:a5881 :a5881 :a5881. +:a5882 :a5882 :a5882. +:a5883 :a5883 :a5883. +:a5884 :a5884 :a5884. +:a5885 :a5885 :a5885. +:a5886 :a5886 :a5886. +:a5887 :a5887 :a5887. +:a5888 :a5888 :a5888. +:a5889 :a5889 :a5889. +:a5890 :a5890 :a5890. +:a5891 :a5891 :a5891. +:a5892 :a5892 :a5892. +:a5893 :a5893 :a5893. +:a5894 :a5894 :a5894. +:a5895 :a5895 :a5895. +:a5896 :a5896 :a5896. +:a5897 :a5897 :a5897. +:a5898 :a5898 :a5898. +:a5899 :a5899 :a5899. +:a5900 :a5900 :a5900. +:a5901 :a5901 :a5901. +:a5902 :a5902 :a5902. +:a5903 :a5903 :a5903. +:a5904 :a5904 :a5904. +:a5905 :a5905 :a5905. +:a5906 :a5906 :a5906. +:a5907 :a5907 :a5907. +:a5908 :a5908 :a5908. +:a5909 :a5909 :a5909. +:a5910 :a5910 :a5910. +:a5911 :a5911 :a5911. +:a5912 :a5912 :a5912. +:a5913 :a5913 :a5913. +:a5914 :a5914 :a5914. +:a5915 :a5915 :a5915. +:a5916 :a5916 :a5916. +:a5917 :a5917 :a5917. +:a5918 :a5918 :a5918. +:a5919 :a5919 :a5919. +:a5920 :a5920 :a5920. +:a5921 :a5921 :a5921. +:a5922 :a5922 :a5922. +:a5923 :a5923 :a5923. +:a5924 :a5924 :a5924. +:a5925 :a5925 :a5925. +:a5926 :a5926 :a5926. +:a5927 :a5927 :a5927. +:a5928 :a5928 :a5928. +:a5929 :a5929 :a5929. +:a5930 :a5930 :a5930. +:a5931 :a5931 :a5931. +:a5932 :a5932 :a5932. +:a5933 :a5933 :a5933. +:a5934 :a5934 :a5934. +:a5935 :a5935 :a5935. +:a5936 :a5936 :a5936. +:a5937 :a5937 :a5937. +:a5938 :a5938 :a5938. +:a5939 :a5939 :a5939. +:a5940 :a5940 :a5940. +:a5941 :a5941 :a5941. +:a5942 :a5942 :a5942. +:a5943 :a5943 :a5943. +:a5944 :a5944 :a5944. +:a5945 :a5945 :a5945. +:a5946 :a5946 :a5946. +:a5947 :a5947 :a5947. +:a5948 :a5948 :a5948. +:a5949 :a5949 :a5949. +:a5950 :a5950 :a5950. +:a5951 :a5951 :a5951. +:a5952 :a5952 :a5952. +:a5953 :a5953 :a5953. +:a5954 :a5954 :a5954. +:a5955 :a5955 :a5955. +:a5956 :a5956 :a5956. +:a5957 :a5957 :a5957. +:a5958 :a5958 :a5958. +:a5959 :a5959 :a5959. +:a5960 :a5960 :a5960. +:a5961 :a5961 :a5961. +:a5962 :a5962 :a5962. +:a5963 :a5963 :a5963. +:a5964 :a5964 :a5964. +:a5965 :a5965 :a5965. +:a5966 :a5966 :a5966. +:a5967 :a5967 :a5967. +:a5968 :a5968 :a5968. +:a5969 :a5969 :a5969. +:a5970 :a5970 :a5970. +:a5971 :a5971 :a5971. +:a5972 :a5972 :a5972. +:a5973 :a5973 :a5973. +:a5974 :a5974 :a5974. +:a5975 :a5975 :a5975. +:a5976 :a5976 :a5976. +:a5977 :a5977 :a5977. +:a5978 :a5978 :a5978. +:a5979 :a5979 :a5979. +:a5980 :a5980 :a5980. +:a5981 :a5981 :a5981. +:a5982 :a5982 :a5982. +:a5983 :a5983 :a5983. +:a5984 :a5984 :a5984. +:a5985 :a5985 :a5985. +:a5986 :a5986 :a5986. +:a5987 :a5987 :a5987. +:a5988 :a5988 :a5988. +:a5989 :a5989 :a5989. +:a5990 :a5990 :a5990. +:a5991 :a5991 :a5991. +:a5992 :a5992 :a5992. +:a5993 :a5993 :a5993. +:a5994 :a5994 :a5994. +:a5995 :a5995 :a5995. +:a5996 :a5996 :a5996. +:a5997 :a5997 :a5997. +:a5998 :a5998 :a5998. +:a5999 :a5999 :a5999. +:a6000 :a6000 :a6000. +:a6001 :a6001 :a6001. +:a6002 :a6002 :a6002. +:a6003 :a6003 :a6003. +:a6004 :a6004 :a6004. +:a6005 :a6005 :a6005. +:a6006 :a6006 :a6006. +:a6007 :a6007 :a6007. +:a6008 :a6008 :a6008. +:a6009 :a6009 :a6009. +:a6010 :a6010 :a6010. +:a6011 :a6011 :a6011. +:a6012 :a6012 :a6012. +:a6013 :a6013 :a6013. +:a6014 :a6014 :a6014. +:a6015 :a6015 :a6015. +:a6016 :a6016 :a6016. +:a6017 :a6017 :a6017. +:a6018 :a6018 :a6018. +:a6019 :a6019 :a6019. +:a6020 :a6020 :a6020. +:a6021 :a6021 :a6021. +:a6022 :a6022 :a6022. +:a6023 :a6023 :a6023. +:a6024 :a6024 :a6024. +:a6025 :a6025 :a6025. +:a6026 :a6026 :a6026. +:a6027 :a6027 :a6027. +:a6028 :a6028 :a6028. +:a6029 :a6029 :a6029. +:a6030 :a6030 :a6030. +:a6031 :a6031 :a6031. +:a6032 :a6032 :a6032. +:a6033 :a6033 :a6033. +:a6034 :a6034 :a6034. +:a6035 :a6035 :a6035. +:a6036 :a6036 :a6036. +:a6037 :a6037 :a6037. +:a6038 :a6038 :a6038. +:a6039 :a6039 :a6039. +:a6040 :a6040 :a6040. +:a6041 :a6041 :a6041. +:a6042 :a6042 :a6042. +:a6043 :a6043 :a6043. +:a6044 :a6044 :a6044. +:a6045 :a6045 :a6045. +:a6046 :a6046 :a6046. +:a6047 :a6047 :a6047. +:a6048 :a6048 :a6048. +:a6049 :a6049 :a6049. +:a6050 :a6050 :a6050. +:a6051 :a6051 :a6051. +:a6052 :a6052 :a6052. +:a6053 :a6053 :a6053. +:a6054 :a6054 :a6054. +:a6055 :a6055 :a6055. +:a6056 :a6056 :a6056. +:a6057 :a6057 :a6057. +:a6058 :a6058 :a6058. +:a6059 :a6059 :a6059. +:a6060 :a6060 :a6060. +:a6061 :a6061 :a6061. +:a6062 :a6062 :a6062. +:a6063 :a6063 :a6063. +:a6064 :a6064 :a6064. +:a6065 :a6065 :a6065. +:a6066 :a6066 :a6066. +:a6067 :a6067 :a6067. +:a6068 :a6068 :a6068. +:a6069 :a6069 :a6069. +:a6070 :a6070 :a6070. +:a6071 :a6071 :a6071. +:a6072 :a6072 :a6072. +:a6073 :a6073 :a6073. +:a6074 :a6074 :a6074. +:a6075 :a6075 :a6075. +:a6076 :a6076 :a6076. +:a6077 :a6077 :a6077. +:a6078 :a6078 :a6078. +:a6079 :a6079 :a6079. +:a6080 :a6080 :a6080. +:a6081 :a6081 :a6081. +:a6082 :a6082 :a6082. +:a6083 :a6083 :a6083. +:a6084 :a6084 :a6084. +:a6085 :a6085 :a6085. +:a6086 :a6086 :a6086. +:a6087 :a6087 :a6087. +:a6088 :a6088 :a6088. +:a6089 :a6089 :a6089. +:a6090 :a6090 :a6090. +:a6091 :a6091 :a6091. +:a6092 :a6092 :a6092. +:a6093 :a6093 :a6093. +:a6094 :a6094 :a6094. +:a6095 :a6095 :a6095. +:a6096 :a6096 :a6096. +:a6097 :a6097 :a6097. +:a6098 :a6098 :a6098. +:a6099 :a6099 :a6099. +:a6100 :a6100 :a6100. +:a6101 :a6101 :a6101. +:a6102 :a6102 :a6102. +:a6103 :a6103 :a6103. +:a6104 :a6104 :a6104. +:a6105 :a6105 :a6105. +:a6106 :a6106 :a6106. +:a6107 :a6107 :a6107. +:a6108 :a6108 :a6108. +:a6109 :a6109 :a6109. +:a6110 :a6110 :a6110. +:a6111 :a6111 :a6111. +:a6112 :a6112 :a6112. +:a6113 :a6113 :a6113. +:a6114 :a6114 :a6114. +:a6115 :a6115 :a6115. +:a6116 :a6116 :a6116. +:a6117 :a6117 :a6117. +:a6118 :a6118 :a6118. +:a6119 :a6119 :a6119. +:a6120 :a6120 :a6120. +:a6121 :a6121 :a6121. +:a6122 :a6122 :a6122. +:a6123 :a6123 :a6123. +:a6124 :a6124 :a6124. +:a6125 :a6125 :a6125. +:a6126 :a6126 :a6126. +:a6127 :a6127 :a6127. +:a6128 :a6128 :a6128. +:a6129 :a6129 :a6129. +:a6130 :a6130 :a6130. +:a6131 :a6131 :a6131. +:a6132 :a6132 :a6132. +:a6133 :a6133 :a6133. +:a6134 :a6134 :a6134. +:a6135 :a6135 :a6135. +:a6136 :a6136 :a6136. +:a6137 :a6137 :a6137. +:a6138 :a6138 :a6138. +:a6139 :a6139 :a6139. +:a6140 :a6140 :a6140. +:a6141 :a6141 :a6141. +:a6142 :a6142 :a6142. +:a6143 :a6143 :a6143. +:a6144 :a6144 :a6144. +:a6145 :a6145 :a6145. +:a6146 :a6146 :a6146. +:a6147 :a6147 :a6147. +:a6148 :a6148 :a6148. +:a6149 :a6149 :a6149. +:a6150 :a6150 :a6150. +:a6151 :a6151 :a6151. +:a6152 :a6152 :a6152. +:a6153 :a6153 :a6153. +:a6154 :a6154 :a6154. +:a6155 :a6155 :a6155. +:a6156 :a6156 :a6156. +:a6157 :a6157 :a6157. +:a6158 :a6158 :a6158. +:a6159 :a6159 :a6159. +:a6160 :a6160 :a6160. +:a6161 :a6161 :a6161. +:a6162 :a6162 :a6162. +:a6163 :a6163 :a6163. +:a6164 :a6164 :a6164. +:a6165 :a6165 :a6165. +:a6166 :a6166 :a6166. +:a6167 :a6167 :a6167. +:a6168 :a6168 :a6168. +:a6169 :a6169 :a6169. +:a6170 :a6170 :a6170. +:a6171 :a6171 :a6171. +:a6172 :a6172 :a6172. +:a6173 :a6173 :a6173. +:a6174 :a6174 :a6174. +:a6175 :a6175 :a6175. +:a6176 :a6176 :a6176. +:a6177 :a6177 :a6177. +:a6178 :a6178 :a6178. +:a6179 :a6179 :a6179. +:a6180 :a6180 :a6180. +:a6181 :a6181 :a6181. +:a6182 :a6182 :a6182. +:a6183 :a6183 :a6183. +:a6184 :a6184 :a6184. +:a6185 :a6185 :a6185. +:a6186 :a6186 :a6186. +:a6187 :a6187 :a6187. +:a6188 :a6188 :a6188. +:a6189 :a6189 :a6189. +:a6190 :a6190 :a6190. +:a6191 :a6191 :a6191. +:a6192 :a6192 :a6192. +:a6193 :a6193 :a6193. +:a6194 :a6194 :a6194. +:a6195 :a6195 :a6195. +:a6196 :a6196 :a6196. +:a6197 :a6197 :a6197. +:a6198 :a6198 :a6198. +:a6199 :a6199 :a6199. +:a6200 :a6200 :a6200. +:a6201 :a6201 :a6201. +:a6202 :a6202 :a6202. +:a6203 :a6203 :a6203. +:a6204 :a6204 :a6204. +:a6205 :a6205 :a6205. +:a6206 :a6206 :a6206. +:a6207 :a6207 :a6207. +:a6208 :a6208 :a6208. +:a6209 :a6209 :a6209. +:a6210 :a6210 :a6210. +:a6211 :a6211 :a6211. +:a6212 :a6212 :a6212. +:a6213 :a6213 :a6213. +:a6214 :a6214 :a6214. +:a6215 :a6215 :a6215. +:a6216 :a6216 :a6216. +:a6217 :a6217 :a6217. +:a6218 :a6218 :a6218. +:a6219 :a6219 :a6219. +:a6220 :a6220 :a6220. +:a6221 :a6221 :a6221. +:a6222 :a6222 :a6222. +:a6223 :a6223 :a6223. +:a6224 :a6224 :a6224. +:a6225 :a6225 :a6225. +:a6226 :a6226 :a6226. +:a6227 :a6227 :a6227. +:a6228 :a6228 :a6228. +:a6229 :a6229 :a6229. +:a6230 :a6230 :a6230. +:a6231 :a6231 :a6231. +:a6232 :a6232 :a6232. +:a6233 :a6233 :a6233. +:a6234 :a6234 :a6234. +:a6235 :a6235 :a6235. +:a6236 :a6236 :a6236. +:a6237 :a6237 :a6237. +:a6238 :a6238 :a6238. +:a6239 :a6239 :a6239. +:a6240 :a6240 :a6240. +:a6241 :a6241 :a6241. +:a6242 :a6242 :a6242. +:a6243 :a6243 :a6243. +:a6244 :a6244 :a6244. +:a6245 :a6245 :a6245. +:a6246 :a6246 :a6246. +:a6247 :a6247 :a6247. +:a6248 :a6248 :a6248. +:a6249 :a6249 :a6249. +:a6250 :a6250 :a6250. +:a6251 :a6251 :a6251. +:a6252 :a6252 :a6252. +:a6253 :a6253 :a6253. +:a6254 :a6254 :a6254. +:a6255 :a6255 :a6255. +:a6256 :a6256 :a6256. +:a6257 :a6257 :a6257. +:a6258 :a6258 :a6258. +:a6259 :a6259 :a6259. +:a6260 :a6260 :a6260. +:a6261 :a6261 :a6261. +:a6262 :a6262 :a6262. +:a6263 :a6263 :a6263. +:a6264 :a6264 :a6264. +:a6265 :a6265 :a6265. +:a6266 :a6266 :a6266. +:a6267 :a6267 :a6267. +:a6268 :a6268 :a6268. +:a6269 :a6269 :a6269. +:a6270 :a6270 :a6270. +:a6271 :a6271 :a6271. +:a6272 :a6272 :a6272. +:a6273 :a6273 :a6273. +:a6274 :a6274 :a6274. +:a6275 :a6275 :a6275. +:a6276 :a6276 :a6276. +:a6277 :a6277 :a6277. +:a6278 :a6278 :a6278. +:a6279 :a6279 :a6279. +:a6280 :a6280 :a6280. +:a6281 :a6281 :a6281. +:a6282 :a6282 :a6282. +:a6283 :a6283 :a6283. +:a6284 :a6284 :a6284. +:a6285 :a6285 :a6285. +:a6286 :a6286 :a6286. +:a6287 :a6287 :a6287. +:a6288 :a6288 :a6288. +:a6289 :a6289 :a6289. +:a6290 :a6290 :a6290. +:a6291 :a6291 :a6291. +:a6292 :a6292 :a6292. +:a6293 :a6293 :a6293. +:a6294 :a6294 :a6294. +:a6295 :a6295 :a6295. +:a6296 :a6296 :a6296. +:a6297 :a6297 :a6297. +:a6298 :a6298 :a6298. +:a6299 :a6299 :a6299. +:a6300 :a6300 :a6300. +:a6301 :a6301 :a6301. +:a6302 :a6302 :a6302. +:a6303 :a6303 :a6303. +:a6304 :a6304 :a6304. +:a6305 :a6305 :a6305. +:a6306 :a6306 :a6306. +:a6307 :a6307 :a6307. +:a6308 :a6308 :a6308. +:a6309 :a6309 :a6309. +:a6310 :a6310 :a6310. +:a6311 :a6311 :a6311. +:a6312 :a6312 :a6312. +:a6313 :a6313 :a6313. +:a6314 :a6314 :a6314. +:a6315 :a6315 :a6315. +:a6316 :a6316 :a6316. +:a6317 :a6317 :a6317. +:a6318 :a6318 :a6318. +:a6319 :a6319 :a6319. +:a6320 :a6320 :a6320. +:a6321 :a6321 :a6321. +:a6322 :a6322 :a6322. +:a6323 :a6323 :a6323. +:a6324 :a6324 :a6324. +:a6325 :a6325 :a6325. +:a6326 :a6326 :a6326. +:a6327 :a6327 :a6327. +:a6328 :a6328 :a6328. +:a6329 :a6329 :a6329. +:a6330 :a6330 :a6330. +:a6331 :a6331 :a6331. +:a6332 :a6332 :a6332. +:a6333 :a6333 :a6333. +:a6334 :a6334 :a6334. +:a6335 :a6335 :a6335. +:a6336 :a6336 :a6336. +:a6337 :a6337 :a6337. +:a6338 :a6338 :a6338. +:a6339 :a6339 :a6339. +:a6340 :a6340 :a6340. +:a6341 :a6341 :a6341. +:a6342 :a6342 :a6342. +:a6343 :a6343 :a6343. +:a6344 :a6344 :a6344. +:a6345 :a6345 :a6345. +:a6346 :a6346 :a6346. +:a6347 :a6347 :a6347. +:a6348 :a6348 :a6348. +:a6349 :a6349 :a6349. +:a6350 :a6350 :a6350. +:a6351 :a6351 :a6351. +:a6352 :a6352 :a6352. +:a6353 :a6353 :a6353. +:a6354 :a6354 :a6354. +:a6355 :a6355 :a6355. +:a6356 :a6356 :a6356. +:a6357 :a6357 :a6357. +:a6358 :a6358 :a6358. +:a6359 :a6359 :a6359. +:a6360 :a6360 :a6360. +:a6361 :a6361 :a6361. +:a6362 :a6362 :a6362. +:a6363 :a6363 :a6363. +:a6364 :a6364 :a6364. +:a6365 :a6365 :a6365. +:a6366 :a6366 :a6366. +:a6367 :a6367 :a6367. +:a6368 :a6368 :a6368. +:a6369 :a6369 :a6369. +:a6370 :a6370 :a6370. +:a6371 :a6371 :a6371. +:a6372 :a6372 :a6372. +:a6373 :a6373 :a6373. +:a6374 :a6374 :a6374. +:a6375 :a6375 :a6375. +:a6376 :a6376 :a6376. +:a6377 :a6377 :a6377. +:a6378 :a6378 :a6378. +:a6379 :a6379 :a6379. +:a6380 :a6380 :a6380. +:a6381 :a6381 :a6381. +:a6382 :a6382 :a6382. +:a6383 :a6383 :a6383. +:a6384 :a6384 :a6384. +:a6385 :a6385 :a6385. +:a6386 :a6386 :a6386. +:a6387 :a6387 :a6387. +:a6388 :a6388 :a6388. +:a6389 :a6389 :a6389. +:a6390 :a6390 :a6390. +:a6391 :a6391 :a6391. +:a6392 :a6392 :a6392. +:a6393 :a6393 :a6393. +:a6394 :a6394 :a6394. +:a6395 :a6395 :a6395. +:a6396 :a6396 :a6396. +:a6397 :a6397 :a6397. +:a6398 :a6398 :a6398. +:a6399 :a6399 :a6399. +:a6400 :a6400 :a6400. +:a6401 :a6401 :a6401. +:a6402 :a6402 :a6402. +:a6403 :a6403 :a6403. +:a6404 :a6404 :a6404. +:a6405 :a6405 :a6405. +:a6406 :a6406 :a6406. +:a6407 :a6407 :a6407. +:a6408 :a6408 :a6408. +:a6409 :a6409 :a6409. +:a6410 :a6410 :a6410. +:a6411 :a6411 :a6411. +:a6412 :a6412 :a6412. +:a6413 :a6413 :a6413. +:a6414 :a6414 :a6414. +:a6415 :a6415 :a6415. +:a6416 :a6416 :a6416. +:a6417 :a6417 :a6417. +:a6418 :a6418 :a6418. +:a6419 :a6419 :a6419. +:a6420 :a6420 :a6420. +:a6421 :a6421 :a6421. +:a6422 :a6422 :a6422. +:a6423 :a6423 :a6423. +:a6424 :a6424 :a6424. +:a6425 :a6425 :a6425. +:a6426 :a6426 :a6426. +:a6427 :a6427 :a6427. +:a6428 :a6428 :a6428. +:a6429 :a6429 :a6429. +:a6430 :a6430 :a6430. +:a6431 :a6431 :a6431. +:a6432 :a6432 :a6432. +:a6433 :a6433 :a6433. +:a6434 :a6434 :a6434. +:a6435 :a6435 :a6435. +:a6436 :a6436 :a6436. +:a6437 :a6437 :a6437. +:a6438 :a6438 :a6438. +:a6439 :a6439 :a6439. +:a6440 :a6440 :a6440. +:a6441 :a6441 :a6441. +:a6442 :a6442 :a6442. +:a6443 :a6443 :a6443. +:a6444 :a6444 :a6444. +:a6445 :a6445 :a6445. +:a6446 :a6446 :a6446. +:a6447 :a6447 :a6447. +:a6448 :a6448 :a6448. +:a6449 :a6449 :a6449. +:a6450 :a6450 :a6450. +:a6451 :a6451 :a6451. +:a6452 :a6452 :a6452. +:a6453 :a6453 :a6453. +:a6454 :a6454 :a6454. +:a6455 :a6455 :a6455. +:a6456 :a6456 :a6456. +:a6457 :a6457 :a6457. +:a6458 :a6458 :a6458. +:a6459 :a6459 :a6459. +:a6460 :a6460 :a6460. +:a6461 :a6461 :a6461. +:a6462 :a6462 :a6462. +:a6463 :a6463 :a6463. +:a6464 :a6464 :a6464. +:a6465 :a6465 :a6465. +:a6466 :a6466 :a6466. +:a6467 :a6467 :a6467. +:a6468 :a6468 :a6468. +:a6469 :a6469 :a6469. +:a6470 :a6470 :a6470. +:a6471 :a6471 :a6471. +:a6472 :a6472 :a6472. +:a6473 :a6473 :a6473. +:a6474 :a6474 :a6474. +:a6475 :a6475 :a6475. +:a6476 :a6476 :a6476. +:a6477 :a6477 :a6477. +:a6478 :a6478 :a6478. +:a6479 :a6479 :a6479. +:a6480 :a6480 :a6480. +:a6481 :a6481 :a6481. +:a6482 :a6482 :a6482. +:a6483 :a6483 :a6483. +:a6484 :a6484 :a6484. +:a6485 :a6485 :a6485. +:a6486 :a6486 :a6486. +:a6487 :a6487 :a6487. +:a6488 :a6488 :a6488. +:a6489 :a6489 :a6489. +:a6490 :a6490 :a6490. +:a6491 :a6491 :a6491. +:a6492 :a6492 :a6492. +:a6493 :a6493 :a6493. +:a6494 :a6494 :a6494. +:a6495 :a6495 :a6495. +:a6496 :a6496 :a6496. +:a6497 :a6497 :a6497. +:a6498 :a6498 :a6498. +:a6499 :a6499 :a6499. +:a6500 :a6500 :a6500. +:a6501 :a6501 :a6501. +:a6502 :a6502 :a6502. +:a6503 :a6503 :a6503. +:a6504 :a6504 :a6504. +:a6505 :a6505 :a6505. +:a6506 :a6506 :a6506. +:a6507 :a6507 :a6507. +:a6508 :a6508 :a6508. +:a6509 :a6509 :a6509. +:a6510 :a6510 :a6510. +:a6511 :a6511 :a6511. +:a6512 :a6512 :a6512. +:a6513 :a6513 :a6513. +:a6514 :a6514 :a6514. +:a6515 :a6515 :a6515. +:a6516 :a6516 :a6516. +:a6517 :a6517 :a6517. +:a6518 :a6518 :a6518. +:a6519 :a6519 :a6519. +:a6520 :a6520 :a6520. +:a6521 :a6521 :a6521. +:a6522 :a6522 :a6522. +:a6523 :a6523 :a6523. +:a6524 :a6524 :a6524. +:a6525 :a6525 :a6525. +:a6526 :a6526 :a6526. +:a6527 :a6527 :a6527. +:a6528 :a6528 :a6528. +:a6529 :a6529 :a6529. +:a6530 :a6530 :a6530. +:a6531 :a6531 :a6531. +:a6532 :a6532 :a6532. +:a6533 :a6533 :a6533. +:a6534 :a6534 :a6534. +:a6535 :a6535 :a6535. +:a6536 :a6536 :a6536. +:a6537 :a6537 :a6537. +:a6538 :a6538 :a6538. +:a6539 :a6539 :a6539. +:a6540 :a6540 :a6540. +:a6541 :a6541 :a6541. +:a6542 :a6542 :a6542. +:a6543 :a6543 :a6543. +:a6544 :a6544 :a6544. +:a6545 :a6545 :a6545. +:a6546 :a6546 :a6546. +:a6547 :a6547 :a6547. +:a6548 :a6548 :a6548. +:a6549 :a6549 :a6549. +:a6550 :a6550 :a6550. +:a6551 :a6551 :a6551. +:a6552 :a6552 :a6552. +:a6553 :a6553 :a6553. +:a6554 :a6554 :a6554. +:a6555 :a6555 :a6555. +:a6556 :a6556 :a6556. +:a6557 :a6557 :a6557. +:a6558 :a6558 :a6558. +:a6559 :a6559 :a6559. +:a6560 :a6560 :a6560. +:a6561 :a6561 :a6561. +:a6562 :a6562 :a6562. +:a6563 :a6563 :a6563. +:a6564 :a6564 :a6564. +:a6565 :a6565 :a6565. +:a6566 :a6566 :a6566. +:a6567 :a6567 :a6567. +:a6568 :a6568 :a6568. +:a6569 :a6569 :a6569. +:a6570 :a6570 :a6570. +:a6571 :a6571 :a6571. +:a6572 :a6572 :a6572. +:a6573 :a6573 :a6573. +:a6574 :a6574 :a6574. +:a6575 :a6575 :a6575. +:a6576 :a6576 :a6576. +:a6577 :a6577 :a6577. +:a6578 :a6578 :a6578. +:a6579 :a6579 :a6579. +:a6580 :a6580 :a6580. +:a6581 :a6581 :a6581. +:a6582 :a6582 :a6582. +:a6583 :a6583 :a6583. +:a6584 :a6584 :a6584. +:a6585 :a6585 :a6585. +:a6586 :a6586 :a6586. +:a6587 :a6587 :a6587. +:a6588 :a6588 :a6588. +:a6589 :a6589 :a6589. +:a6590 :a6590 :a6590. +:a6591 :a6591 :a6591. +:a6592 :a6592 :a6592. +:a6593 :a6593 :a6593. +:a6594 :a6594 :a6594. +:a6595 :a6595 :a6595. +:a6596 :a6596 :a6596. +:a6597 :a6597 :a6597. +:a6598 :a6598 :a6598. +:a6599 :a6599 :a6599. +:a6600 :a6600 :a6600. +:a6601 :a6601 :a6601. +:a6602 :a6602 :a6602. +:a6603 :a6603 :a6603. +:a6604 :a6604 :a6604. +:a6605 :a6605 :a6605. +:a6606 :a6606 :a6606. +:a6607 :a6607 :a6607. +:a6608 :a6608 :a6608. +:a6609 :a6609 :a6609. +:a6610 :a6610 :a6610. +:a6611 :a6611 :a6611. +:a6612 :a6612 :a6612. +:a6613 :a6613 :a6613. +:a6614 :a6614 :a6614. +:a6615 :a6615 :a6615. +:a6616 :a6616 :a6616. +:a6617 :a6617 :a6617. +:a6618 :a6618 :a6618. +:a6619 :a6619 :a6619. +:a6620 :a6620 :a6620. +:a6621 :a6621 :a6621. +:a6622 :a6622 :a6622. +:a6623 :a6623 :a6623. +:a6624 :a6624 :a6624. +:a6625 :a6625 :a6625. +:a6626 :a6626 :a6626. +:a6627 :a6627 :a6627. +:a6628 :a6628 :a6628. +:a6629 :a6629 :a6629. +:a6630 :a6630 :a6630. +:a6631 :a6631 :a6631. +:a6632 :a6632 :a6632. +:a6633 :a6633 :a6633. +:a6634 :a6634 :a6634. +:a6635 :a6635 :a6635. +:a6636 :a6636 :a6636. +:a6637 :a6637 :a6637. +:a6638 :a6638 :a6638. +:a6639 :a6639 :a6639. +:a6640 :a6640 :a6640. +:a6641 :a6641 :a6641. +:a6642 :a6642 :a6642. +:a6643 :a6643 :a6643. +:a6644 :a6644 :a6644. +:a6645 :a6645 :a6645. +:a6646 :a6646 :a6646. +:a6647 :a6647 :a6647. +:a6648 :a6648 :a6648. +:a6649 :a6649 :a6649. +:a6650 :a6650 :a6650. +:a6651 :a6651 :a6651. +:a6652 :a6652 :a6652. +:a6653 :a6653 :a6653. +:a6654 :a6654 :a6654. +:a6655 :a6655 :a6655. +:a6656 :a6656 :a6656. +:a6657 :a6657 :a6657. +:a6658 :a6658 :a6658. +:a6659 :a6659 :a6659. +:a6660 :a6660 :a6660. +:a6661 :a6661 :a6661. +:a6662 :a6662 :a6662. +:a6663 :a6663 :a6663. +:a6664 :a6664 :a6664. +:a6665 :a6665 :a6665. +:a6666 :a6666 :a6666. +:a6667 :a6667 :a6667. +:a6668 :a6668 :a6668. +:a6669 :a6669 :a6669. +:a6670 :a6670 :a6670. +:a6671 :a6671 :a6671. +:a6672 :a6672 :a6672. +:a6673 :a6673 :a6673. +:a6674 :a6674 :a6674. +:a6675 :a6675 :a6675. +:a6676 :a6676 :a6676. +:a6677 :a6677 :a6677. +:a6678 :a6678 :a6678. +:a6679 :a6679 :a6679. +:a6680 :a6680 :a6680. +:a6681 :a6681 :a6681. +:a6682 :a6682 :a6682. +:a6683 :a6683 :a6683. +:a6684 :a6684 :a6684. +:a6685 :a6685 :a6685. +:a6686 :a6686 :a6686. +:a6687 :a6687 :a6687. +:a6688 :a6688 :a6688. +:a6689 :a6689 :a6689. +:a6690 :a6690 :a6690. +:a6691 :a6691 :a6691. +:a6692 :a6692 :a6692. +:a6693 :a6693 :a6693. +:a6694 :a6694 :a6694. +:a6695 :a6695 :a6695. +:a6696 :a6696 :a6696. +:a6697 :a6697 :a6697. +:a6698 :a6698 :a6698. +:a6699 :a6699 :a6699. +:a6700 :a6700 :a6700. +:a6701 :a6701 :a6701. +:a6702 :a6702 :a6702. +:a6703 :a6703 :a6703. +:a6704 :a6704 :a6704. +:a6705 :a6705 :a6705. +:a6706 :a6706 :a6706. +:a6707 :a6707 :a6707. +:a6708 :a6708 :a6708. +:a6709 :a6709 :a6709. +:a6710 :a6710 :a6710. +:a6711 :a6711 :a6711. +:a6712 :a6712 :a6712. +:a6713 :a6713 :a6713. +:a6714 :a6714 :a6714. +:a6715 :a6715 :a6715. +:a6716 :a6716 :a6716. +:a6717 :a6717 :a6717. +:a6718 :a6718 :a6718. +:a6719 :a6719 :a6719. +:a6720 :a6720 :a6720. +:a6721 :a6721 :a6721. +:a6722 :a6722 :a6722. +:a6723 :a6723 :a6723. +:a6724 :a6724 :a6724. +:a6725 :a6725 :a6725. +:a6726 :a6726 :a6726. +:a6727 :a6727 :a6727. +:a6728 :a6728 :a6728. +:a6729 :a6729 :a6729. +:a6730 :a6730 :a6730. +:a6731 :a6731 :a6731. +:a6732 :a6732 :a6732. +:a6733 :a6733 :a6733. +:a6734 :a6734 :a6734. +:a6735 :a6735 :a6735. +:a6736 :a6736 :a6736. +:a6737 :a6737 :a6737. +:a6738 :a6738 :a6738. +:a6739 :a6739 :a6739. +:a6740 :a6740 :a6740. +:a6741 :a6741 :a6741. +:a6742 :a6742 :a6742. +:a6743 :a6743 :a6743. +:a6744 :a6744 :a6744. +:a6745 :a6745 :a6745. +:a6746 :a6746 :a6746. +:a6747 :a6747 :a6747. +:a6748 :a6748 :a6748. +:a6749 :a6749 :a6749. +:a6750 :a6750 :a6750. +:a6751 :a6751 :a6751. +:a6752 :a6752 :a6752. +:a6753 :a6753 :a6753. +:a6754 :a6754 :a6754. +:a6755 :a6755 :a6755. +:a6756 :a6756 :a6756. +:a6757 :a6757 :a6757. +:a6758 :a6758 :a6758. +:a6759 :a6759 :a6759. +:a6760 :a6760 :a6760. +:a6761 :a6761 :a6761. +:a6762 :a6762 :a6762. +:a6763 :a6763 :a6763. +:a6764 :a6764 :a6764. +:a6765 :a6765 :a6765. +:a6766 :a6766 :a6766. +:a6767 :a6767 :a6767. +:a6768 :a6768 :a6768. +:a6769 :a6769 :a6769. +:a6770 :a6770 :a6770. +:a6771 :a6771 :a6771. +:a6772 :a6772 :a6772. +:a6773 :a6773 :a6773. +:a6774 :a6774 :a6774. +:a6775 :a6775 :a6775. +:a6776 :a6776 :a6776. +:a6777 :a6777 :a6777. +:a6778 :a6778 :a6778. +:a6779 :a6779 :a6779. +:a6780 :a6780 :a6780. +:a6781 :a6781 :a6781. +:a6782 :a6782 :a6782. +:a6783 :a6783 :a6783. +:a6784 :a6784 :a6784. +:a6785 :a6785 :a6785. +:a6786 :a6786 :a6786. +:a6787 :a6787 :a6787. +:a6788 :a6788 :a6788. +:a6789 :a6789 :a6789. +:a6790 :a6790 :a6790. +:a6791 :a6791 :a6791. +:a6792 :a6792 :a6792. +:a6793 :a6793 :a6793. +:a6794 :a6794 :a6794. +:a6795 :a6795 :a6795. +:a6796 :a6796 :a6796. +:a6797 :a6797 :a6797. +:a6798 :a6798 :a6798. +:a6799 :a6799 :a6799. +:a6800 :a6800 :a6800. +:a6801 :a6801 :a6801. +:a6802 :a6802 :a6802. +:a6803 :a6803 :a6803. +:a6804 :a6804 :a6804. +:a6805 :a6805 :a6805. +:a6806 :a6806 :a6806. +:a6807 :a6807 :a6807. +:a6808 :a6808 :a6808. +:a6809 :a6809 :a6809. +:a6810 :a6810 :a6810. +:a6811 :a6811 :a6811. +:a6812 :a6812 :a6812. +:a6813 :a6813 :a6813. +:a6814 :a6814 :a6814. +:a6815 :a6815 :a6815. +:a6816 :a6816 :a6816. +:a6817 :a6817 :a6817. +:a6818 :a6818 :a6818. +:a6819 :a6819 :a6819. +:a6820 :a6820 :a6820. +:a6821 :a6821 :a6821. +:a6822 :a6822 :a6822. +:a6823 :a6823 :a6823. +:a6824 :a6824 :a6824. +:a6825 :a6825 :a6825. +:a6826 :a6826 :a6826. +:a6827 :a6827 :a6827. +:a6828 :a6828 :a6828. +:a6829 :a6829 :a6829. +:a6830 :a6830 :a6830. +:a6831 :a6831 :a6831. +:a6832 :a6832 :a6832. +:a6833 :a6833 :a6833. +:a6834 :a6834 :a6834. +:a6835 :a6835 :a6835. +:a6836 :a6836 :a6836. +:a6837 :a6837 :a6837. +:a6838 :a6838 :a6838. +:a6839 :a6839 :a6839. +:a6840 :a6840 :a6840. +:a6841 :a6841 :a6841. +:a6842 :a6842 :a6842. +:a6843 :a6843 :a6843. +:a6844 :a6844 :a6844. +:a6845 :a6845 :a6845. +:a6846 :a6846 :a6846. +:a6847 :a6847 :a6847. +:a6848 :a6848 :a6848. +:a6849 :a6849 :a6849. +:a6850 :a6850 :a6850. +:a6851 :a6851 :a6851. +:a6852 :a6852 :a6852. +:a6853 :a6853 :a6853. +:a6854 :a6854 :a6854. +:a6855 :a6855 :a6855. +:a6856 :a6856 :a6856. +:a6857 :a6857 :a6857. +:a6858 :a6858 :a6858. +:a6859 :a6859 :a6859. +:a6860 :a6860 :a6860. +:a6861 :a6861 :a6861. +:a6862 :a6862 :a6862. +:a6863 :a6863 :a6863. +:a6864 :a6864 :a6864. +:a6865 :a6865 :a6865. +:a6866 :a6866 :a6866. +:a6867 :a6867 :a6867. +:a6868 :a6868 :a6868. +:a6869 :a6869 :a6869. +:a6870 :a6870 :a6870. +:a6871 :a6871 :a6871. +:a6872 :a6872 :a6872. +:a6873 :a6873 :a6873. +:a6874 :a6874 :a6874. +:a6875 :a6875 :a6875. +:a6876 :a6876 :a6876. +:a6877 :a6877 :a6877. +:a6878 :a6878 :a6878. +:a6879 :a6879 :a6879. +:a6880 :a6880 :a6880. +:a6881 :a6881 :a6881. +:a6882 :a6882 :a6882. +:a6883 :a6883 :a6883. +:a6884 :a6884 :a6884. +:a6885 :a6885 :a6885. +:a6886 :a6886 :a6886. +:a6887 :a6887 :a6887. +:a6888 :a6888 :a6888. +:a6889 :a6889 :a6889. +:a6890 :a6890 :a6890. +:a6891 :a6891 :a6891. +:a6892 :a6892 :a6892. +:a6893 :a6893 :a6893. +:a6894 :a6894 :a6894. +:a6895 :a6895 :a6895. +:a6896 :a6896 :a6896. +:a6897 :a6897 :a6897. +:a6898 :a6898 :a6898. +:a6899 :a6899 :a6899. +:a6900 :a6900 :a6900. +:a6901 :a6901 :a6901. +:a6902 :a6902 :a6902. +:a6903 :a6903 :a6903. +:a6904 :a6904 :a6904. +:a6905 :a6905 :a6905. +:a6906 :a6906 :a6906. +:a6907 :a6907 :a6907. +:a6908 :a6908 :a6908. +:a6909 :a6909 :a6909. +:a6910 :a6910 :a6910. +:a6911 :a6911 :a6911. +:a6912 :a6912 :a6912. +:a6913 :a6913 :a6913. +:a6914 :a6914 :a6914. +:a6915 :a6915 :a6915. +:a6916 :a6916 :a6916. +:a6917 :a6917 :a6917. +:a6918 :a6918 :a6918. +:a6919 :a6919 :a6919. +:a6920 :a6920 :a6920. +:a6921 :a6921 :a6921. +:a6922 :a6922 :a6922. +:a6923 :a6923 :a6923. +:a6924 :a6924 :a6924. +:a6925 :a6925 :a6925. +:a6926 :a6926 :a6926. +:a6927 :a6927 :a6927. +:a6928 :a6928 :a6928. +:a6929 :a6929 :a6929. +:a6930 :a6930 :a6930. +:a6931 :a6931 :a6931. +:a6932 :a6932 :a6932. +:a6933 :a6933 :a6933. +:a6934 :a6934 :a6934. +:a6935 :a6935 :a6935. +:a6936 :a6936 :a6936. +:a6937 :a6937 :a6937. +:a6938 :a6938 :a6938. +:a6939 :a6939 :a6939. +:a6940 :a6940 :a6940. +:a6941 :a6941 :a6941. +:a6942 :a6942 :a6942. +:a6943 :a6943 :a6943. +:a6944 :a6944 :a6944. +:a6945 :a6945 :a6945. +:a6946 :a6946 :a6946. +:a6947 :a6947 :a6947. +:a6948 :a6948 :a6948. +:a6949 :a6949 :a6949. +:a6950 :a6950 :a6950. +:a6951 :a6951 :a6951. +:a6952 :a6952 :a6952. +:a6953 :a6953 :a6953. +:a6954 :a6954 :a6954. +:a6955 :a6955 :a6955. +:a6956 :a6956 :a6956. +:a6957 :a6957 :a6957. +:a6958 :a6958 :a6958. +:a6959 :a6959 :a6959. +:a6960 :a6960 :a6960. +:a6961 :a6961 :a6961. +:a6962 :a6962 :a6962. +:a6963 :a6963 :a6963. +:a6964 :a6964 :a6964. +:a6965 :a6965 :a6965. +:a6966 :a6966 :a6966. +:a6967 :a6967 :a6967. +:a6968 :a6968 :a6968. +:a6969 :a6969 :a6969. +:a6970 :a6970 :a6970. +:a6971 :a6971 :a6971. +:a6972 :a6972 :a6972. +:a6973 :a6973 :a6973. +:a6974 :a6974 :a6974. +:a6975 :a6975 :a6975. +:a6976 :a6976 :a6976. +:a6977 :a6977 :a6977. +:a6978 :a6978 :a6978. +:a6979 :a6979 :a6979. +:a6980 :a6980 :a6980. +:a6981 :a6981 :a6981. +:a6982 :a6982 :a6982. +:a6983 :a6983 :a6983. +:a6984 :a6984 :a6984. +:a6985 :a6985 :a6985. +:a6986 :a6986 :a6986. +:a6987 :a6987 :a6987. +:a6988 :a6988 :a6988. +:a6989 :a6989 :a6989. +:a6990 :a6990 :a6990. +:a6991 :a6991 :a6991. +:a6992 :a6992 :a6992. +:a6993 :a6993 :a6993. +:a6994 :a6994 :a6994. +:a6995 :a6995 :a6995. +:a6996 :a6996 :a6996. +:a6997 :a6997 :a6997. +:a6998 :a6998 :a6998. +:a6999 :a6999 :a6999. +:a7000 :a7000 :a7000. +:a7001 :a7001 :a7001. +:a7002 :a7002 :a7002. +:a7003 :a7003 :a7003. +:a7004 :a7004 :a7004. +:a7005 :a7005 :a7005. +:a7006 :a7006 :a7006. +:a7007 :a7007 :a7007. +:a7008 :a7008 :a7008. +:a7009 :a7009 :a7009. +:a7010 :a7010 :a7010. +:a7011 :a7011 :a7011. +:a7012 :a7012 :a7012. +:a7013 :a7013 :a7013. +:a7014 :a7014 :a7014. +:a7015 :a7015 :a7015. +:a7016 :a7016 :a7016. +:a7017 :a7017 :a7017. +:a7018 :a7018 :a7018. +:a7019 :a7019 :a7019. +:a7020 :a7020 :a7020. +:a7021 :a7021 :a7021. +:a7022 :a7022 :a7022. +:a7023 :a7023 :a7023. +:a7024 :a7024 :a7024. +:a7025 :a7025 :a7025. +:a7026 :a7026 :a7026. +:a7027 :a7027 :a7027. +:a7028 :a7028 :a7028. +:a7029 :a7029 :a7029. +:a7030 :a7030 :a7030. +:a7031 :a7031 :a7031. +:a7032 :a7032 :a7032. +:a7033 :a7033 :a7033. +:a7034 :a7034 :a7034. +:a7035 :a7035 :a7035. +:a7036 :a7036 :a7036. +:a7037 :a7037 :a7037. +:a7038 :a7038 :a7038. +:a7039 :a7039 :a7039. +:a7040 :a7040 :a7040. +:a7041 :a7041 :a7041. +:a7042 :a7042 :a7042. +:a7043 :a7043 :a7043. +:a7044 :a7044 :a7044. +:a7045 :a7045 :a7045. +:a7046 :a7046 :a7046. +:a7047 :a7047 :a7047. +:a7048 :a7048 :a7048. +:a7049 :a7049 :a7049. +:a7050 :a7050 :a7050. +:a7051 :a7051 :a7051. +:a7052 :a7052 :a7052. +:a7053 :a7053 :a7053. +:a7054 :a7054 :a7054. +:a7055 :a7055 :a7055. +:a7056 :a7056 :a7056. +:a7057 :a7057 :a7057. +:a7058 :a7058 :a7058. +:a7059 :a7059 :a7059. +:a7060 :a7060 :a7060. +:a7061 :a7061 :a7061. +:a7062 :a7062 :a7062. +:a7063 :a7063 :a7063. +:a7064 :a7064 :a7064. +:a7065 :a7065 :a7065. +:a7066 :a7066 :a7066. +:a7067 :a7067 :a7067. +:a7068 :a7068 :a7068. +:a7069 :a7069 :a7069. +:a7070 :a7070 :a7070. +:a7071 :a7071 :a7071. +:a7072 :a7072 :a7072. +:a7073 :a7073 :a7073. +:a7074 :a7074 :a7074. +:a7075 :a7075 :a7075. +:a7076 :a7076 :a7076. +:a7077 :a7077 :a7077. +:a7078 :a7078 :a7078. +:a7079 :a7079 :a7079. +:a7080 :a7080 :a7080. +:a7081 :a7081 :a7081. +:a7082 :a7082 :a7082. +:a7083 :a7083 :a7083. +:a7084 :a7084 :a7084. +:a7085 :a7085 :a7085. +:a7086 :a7086 :a7086. +:a7087 :a7087 :a7087. +:a7088 :a7088 :a7088. +:a7089 :a7089 :a7089. +:a7090 :a7090 :a7090. +:a7091 :a7091 :a7091. +:a7092 :a7092 :a7092. +:a7093 :a7093 :a7093. +:a7094 :a7094 :a7094. +:a7095 :a7095 :a7095. +:a7096 :a7096 :a7096. +:a7097 :a7097 :a7097. +:a7098 :a7098 :a7098. +:a7099 :a7099 :a7099. +:a7100 :a7100 :a7100. +:a7101 :a7101 :a7101. +:a7102 :a7102 :a7102. +:a7103 :a7103 :a7103. +:a7104 :a7104 :a7104. +:a7105 :a7105 :a7105. +:a7106 :a7106 :a7106. +:a7107 :a7107 :a7107. +:a7108 :a7108 :a7108. +:a7109 :a7109 :a7109. +:a7110 :a7110 :a7110. +:a7111 :a7111 :a7111. +:a7112 :a7112 :a7112. +:a7113 :a7113 :a7113. +:a7114 :a7114 :a7114. +:a7115 :a7115 :a7115. +:a7116 :a7116 :a7116. +:a7117 :a7117 :a7117. +:a7118 :a7118 :a7118. +:a7119 :a7119 :a7119. +:a7120 :a7120 :a7120. +:a7121 :a7121 :a7121. +:a7122 :a7122 :a7122. +:a7123 :a7123 :a7123. +:a7124 :a7124 :a7124. +:a7125 :a7125 :a7125. +:a7126 :a7126 :a7126. +:a7127 :a7127 :a7127. +:a7128 :a7128 :a7128. +:a7129 :a7129 :a7129. +:a7130 :a7130 :a7130. +:a7131 :a7131 :a7131. +:a7132 :a7132 :a7132. +:a7133 :a7133 :a7133. +:a7134 :a7134 :a7134. +:a7135 :a7135 :a7135. +:a7136 :a7136 :a7136. +:a7137 :a7137 :a7137. +:a7138 :a7138 :a7138. +:a7139 :a7139 :a7139. +:a7140 :a7140 :a7140. +:a7141 :a7141 :a7141. +:a7142 :a7142 :a7142. +:a7143 :a7143 :a7143. +:a7144 :a7144 :a7144. +:a7145 :a7145 :a7145. +:a7146 :a7146 :a7146. +:a7147 :a7147 :a7147. +:a7148 :a7148 :a7148. +:a7149 :a7149 :a7149. +:a7150 :a7150 :a7150. +:a7151 :a7151 :a7151. +:a7152 :a7152 :a7152. +:a7153 :a7153 :a7153. +:a7154 :a7154 :a7154. +:a7155 :a7155 :a7155. +:a7156 :a7156 :a7156. +:a7157 :a7157 :a7157. +:a7158 :a7158 :a7158. +:a7159 :a7159 :a7159. +:a7160 :a7160 :a7160. +:a7161 :a7161 :a7161. +:a7162 :a7162 :a7162. +:a7163 :a7163 :a7163. +:a7164 :a7164 :a7164. +:a7165 :a7165 :a7165. +:a7166 :a7166 :a7166. +:a7167 :a7167 :a7167. +:a7168 :a7168 :a7168. +:a7169 :a7169 :a7169. +:a7170 :a7170 :a7170. +:a7171 :a7171 :a7171. +:a7172 :a7172 :a7172. +:a7173 :a7173 :a7173. +:a7174 :a7174 :a7174. +:a7175 :a7175 :a7175. +:a7176 :a7176 :a7176. +:a7177 :a7177 :a7177. +:a7178 :a7178 :a7178. +:a7179 :a7179 :a7179. +:a7180 :a7180 :a7180. +:a7181 :a7181 :a7181. +:a7182 :a7182 :a7182. +:a7183 :a7183 :a7183. +:a7184 :a7184 :a7184. +:a7185 :a7185 :a7185. +:a7186 :a7186 :a7186. +:a7187 :a7187 :a7187. +:a7188 :a7188 :a7188. +:a7189 :a7189 :a7189. +:a7190 :a7190 :a7190. +:a7191 :a7191 :a7191. +:a7192 :a7192 :a7192. +:a7193 :a7193 :a7193. +:a7194 :a7194 :a7194. +:a7195 :a7195 :a7195. +:a7196 :a7196 :a7196. +:a7197 :a7197 :a7197. +:a7198 :a7198 :a7198. +:a7199 :a7199 :a7199. +:a7200 :a7200 :a7200. +:a7201 :a7201 :a7201. +:a7202 :a7202 :a7202. +:a7203 :a7203 :a7203. +:a7204 :a7204 :a7204. +:a7205 :a7205 :a7205. +:a7206 :a7206 :a7206. +:a7207 :a7207 :a7207. +:a7208 :a7208 :a7208. +:a7209 :a7209 :a7209. +:a7210 :a7210 :a7210. +:a7211 :a7211 :a7211. +:a7212 :a7212 :a7212. +:a7213 :a7213 :a7213. +:a7214 :a7214 :a7214. +:a7215 :a7215 :a7215. +:a7216 :a7216 :a7216. +:a7217 :a7217 :a7217. +:a7218 :a7218 :a7218. +:a7219 :a7219 :a7219. +:a7220 :a7220 :a7220. +:a7221 :a7221 :a7221. +:a7222 :a7222 :a7222. +:a7223 :a7223 :a7223. +:a7224 :a7224 :a7224. +:a7225 :a7225 :a7225. +:a7226 :a7226 :a7226. +:a7227 :a7227 :a7227. +:a7228 :a7228 :a7228. +:a7229 :a7229 :a7229. +:a7230 :a7230 :a7230. +:a7231 :a7231 :a7231. +:a7232 :a7232 :a7232. +:a7233 :a7233 :a7233. +:a7234 :a7234 :a7234. +:a7235 :a7235 :a7235. +:a7236 :a7236 :a7236. +:a7237 :a7237 :a7237. +:a7238 :a7238 :a7238. +:a7239 :a7239 :a7239. +:a7240 :a7240 :a7240. +:a7241 :a7241 :a7241. +:a7242 :a7242 :a7242. +:a7243 :a7243 :a7243. +:a7244 :a7244 :a7244. +:a7245 :a7245 :a7245. +:a7246 :a7246 :a7246. +:a7247 :a7247 :a7247. +:a7248 :a7248 :a7248. +:a7249 :a7249 :a7249. +:a7250 :a7250 :a7250. +:a7251 :a7251 :a7251. +:a7252 :a7252 :a7252. +:a7253 :a7253 :a7253. +:a7254 :a7254 :a7254. +:a7255 :a7255 :a7255. +:a7256 :a7256 :a7256. +:a7257 :a7257 :a7257. +:a7258 :a7258 :a7258. +:a7259 :a7259 :a7259. +:a7260 :a7260 :a7260. +:a7261 :a7261 :a7261. +:a7262 :a7262 :a7262. +:a7263 :a7263 :a7263. +:a7264 :a7264 :a7264. +:a7265 :a7265 :a7265. +:a7266 :a7266 :a7266. +:a7267 :a7267 :a7267. +:a7268 :a7268 :a7268. +:a7269 :a7269 :a7269. +:a7270 :a7270 :a7270. +:a7271 :a7271 :a7271. +:a7272 :a7272 :a7272. +:a7273 :a7273 :a7273. +:a7274 :a7274 :a7274. +:a7275 :a7275 :a7275. +:a7276 :a7276 :a7276. +:a7277 :a7277 :a7277. +:a7278 :a7278 :a7278. +:a7279 :a7279 :a7279. +:a7280 :a7280 :a7280. +:a7281 :a7281 :a7281. +:a7282 :a7282 :a7282. +:a7283 :a7283 :a7283. +:a7284 :a7284 :a7284. +:a7285 :a7285 :a7285. +:a7286 :a7286 :a7286. +:a7287 :a7287 :a7287. +:a7288 :a7288 :a7288. +:a7289 :a7289 :a7289. +:a7290 :a7290 :a7290. +:a7291 :a7291 :a7291. +:a7292 :a7292 :a7292. +:a7293 :a7293 :a7293. +:a7294 :a7294 :a7294. +:a7295 :a7295 :a7295. +:a7296 :a7296 :a7296. +:a7297 :a7297 :a7297. +:a7298 :a7298 :a7298. +:a7299 :a7299 :a7299. +:a7300 :a7300 :a7300. +:a7301 :a7301 :a7301. +:a7302 :a7302 :a7302. +:a7303 :a7303 :a7303. +:a7304 :a7304 :a7304. +:a7305 :a7305 :a7305. +:a7306 :a7306 :a7306. +:a7307 :a7307 :a7307. +:a7308 :a7308 :a7308. +:a7309 :a7309 :a7309. +:a7310 :a7310 :a7310. +:a7311 :a7311 :a7311. +:a7312 :a7312 :a7312. +:a7313 :a7313 :a7313. +:a7314 :a7314 :a7314. +:a7315 :a7315 :a7315. +:a7316 :a7316 :a7316. +:a7317 :a7317 :a7317. +:a7318 :a7318 :a7318. +:a7319 :a7319 :a7319. +:a7320 :a7320 :a7320. +:a7321 :a7321 :a7321. +:a7322 :a7322 :a7322. +:a7323 :a7323 :a7323. +:a7324 :a7324 :a7324. +:a7325 :a7325 :a7325. +:a7326 :a7326 :a7326. +:a7327 :a7327 :a7327. +:a7328 :a7328 :a7328. +:a7329 :a7329 :a7329. +:a7330 :a7330 :a7330. +:a7331 :a7331 :a7331. +:a7332 :a7332 :a7332. +:a7333 :a7333 :a7333. +:a7334 :a7334 :a7334. +:a7335 :a7335 :a7335. +:a7336 :a7336 :a7336. +:a7337 :a7337 :a7337. +:a7338 :a7338 :a7338. +:a7339 :a7339 :a7339. +:a7340 :a7340 :a7340. +:a7341 :a7341 :a7341. +:a7342 :a7342 :a7342. +:a7343 :a7343 :a7343. +:a7344 :a7344 :a7344. +:a7345 :a7345 :a7345. +:a7346 :a7346 :a7346. +:a7347 :a7347 :a7347. +:a7348 :a7348 :a7348. +:a7349 :a7349 :a7349. +:a7350 :a7350 :a7350. +:a7351 :a7351 :a7351. +:a7352 :a7352 :a7352. +:a7353 :a7353 :a7353. +:a7354 :a7354 :a7354. +:a7355 :a7355 :a7355. +:a7356 :a7356 :a7356. +:a7357 :a7357 :a7357. +:a7358 :a7358 :a7358. +:a7359 :a7359 :a7359. +:a7360 :a7360 :a7360. +:a7361 :a7361 :a7361. +:a7362 :a7362 :a7362. +:a7363 :a7363 :a7363. +:a7364 :a7364 :a7364. +:a7365 :a7365 :a7365. +:a7366 :a7366 :a7366. +:a7367 :a7367 :a7367. +:a7368 :a7368 :a7368. +:a7369 :a7369 :a7369. +:a7370 :a7370 :a7370. +:a7371 :a7371 :a7371. +:a7372 :a7372 :a7372. +:a7373 :a7373 :a7373. +:a7374 :a7374 :a7374. +:a7375 :a7375 :a7375. +:a7376 :a7376 :a7376. +:a7377 :a7377 :a7377. +:a7378 :a7378 :a7378. +:a7379 :a7379 :a7379. +:a7380 :a7380 :a7380. +:a7381 :a7381 :a7381. +:a7382 :a7382 :a7382. +:a7383 :a7383 :a7383. +:a7384 :a7384 :a7384. +:a7385 :a7385 :a7385. +:a7386 :a7386 :a7386. +:a7387 :a7387 :a7387. +:a7388 :a7388 :a7388. +:a7389 :a7389 :a7389. +:a7390 :a7390 :a7390. +:a7391 :a7391 :a7391. +:a7392 :a7392 :a7392. +:a7393 :a7393 :a7393. +:a7394 :a7394 :a7394. +:a7395 :a7395 :a7395. +:a7396 :a7396 :a7396. +:a7397 :a7397 :a7397. +:a7398 :a7398 :a7398. +:a7399 :a7399 :a7399. +:a7400 :a7400 :a7400. +:a7401 :a7401 :a7401. +:a7402 :a7402 :a7402. +:a7403 :a7403 :a7403. +:a7404 :a7404 :a7404. +:a7405 :a7405 :a7405. +:a7406 :a7406 :a7406. +:a7407 :a7407 :a7407. +:a7408 :a7408 :a7408. +:a7409 :a7409 :a7409. +:a7410 :a7410 :a7410. +:a7411 :a7411 :a7411. +:a7412 :a7412 :a7412. +:a7413 :a7413 :a7413. +:a7414 :a7414 :a7414. +:a7415 :a7415 :a7415. +:a7416 :a7416 :a7416. +:a7417 :a7417 :a7417. +:a7418 :a7418 :a7418. +:a7419 :a7419 :a7419. +:a7420 :a7420 :a7420. +:a7421 :a7421 :a7421. +:a7422 :a7422 :a7422. +:a7423 :a7423 :a7423. +:a7424 :a7424 :a7424. +:a7425 :a7425 :a7425. +:a7426 :a7426 :a7426. +:a7427 :a7427 :a7427. +:a7428 :a7428 :a7428. +:a7429 :a7429 :a7429. +:a7430 :a7430 :a7430. +:a7431 :a7431 :a7431. +:a7432 :a7432 :a7432. +:a7433 :a7433 :a7433. +:a7434 :a7434 :a7434. +:a7435 :a7435 :a7435. +:a7436 :a7436 :a7436. +:a7437 :a7437 :a7437. +:a7438 :a7438 :a7438. +:a7439 :a7439 :a7439. +:a7440 :a7440 :a7440. +:a7441 :a7441 :a7441. +:a7442 :a7442 :a7442. +:a7443 :a7443 :a7443. +:a7444 :a7444 :a7444. +:a7445 :a7445 :a7445. +:a7446 :a7446 :a7446. +:a7447 :a7447 :a7447. +:a7448 :a7448 :a7448. +:a7449 :a7449 :a7449. +:a7450 :a7450 :a7450. +:a7451 :a7451 :a7451. +:a7452 :a7452 :a7452. +:a7453 :a7453 :a7453. +:a7454 :a7454 :a7454. +:a7455 :a7455 :a7455. +:a7456 :a7456 :a7456. +:a7457 :a7457 :a7457. +:a7458 :a7458 :a7458. +:a7459 :a7459 :a7459. +:a7460 :a7460 :a7460. +:a7461 :a7461 :a7461. +:a7462 :a7462 :a7462. +:a7463 :a7463 :a7463. +:a7464 :a7464 :a7464. +:a7465 :a7465 :a7465. +:a7466 :a7466 :a7466. +:a7467 :a7467 :a7467. +:a7468 :a7468 :a7468. +:a7469 :a7469 :a7469. +:a7470 :a7470 :a7470. +:a7471 :a7471 :a7471. +:a7472 :a7472 :a7472. +:a7473 :a7473 :a7473. +:a7474 :a7474 :a7474. +:a7475 :a7475 :a7475. +:a7476 :a7476 :a7476. +:a7477 :a7477 :a7477. +:a7478 :a7478 :a7478. +:a7479 :a7479 :a7479. +:a7480 :a7480 :a7480. +:a7481 :a7481 :a7481. +:a7482 :a7482 :a7482. +:a7483 :a7483 :a7483. +:a7484 :a7484 :a7484. +:a7485 :a7485 :a7485. +:a7486 :a7486 :a7486. +:a7487 :a7487 :a7487. +:a7488 :a7488 :a7488. +:a7489 :a7489 :a7489. +:a7490 :a7490 :a7490. +:a7491 :a7491 :a7491. +:a7492 :a7492 :a7492. +:a7493 :a7493 :a7493. +:a7494 :a7494 :a7494. +:a7495 :a7495 :a7495. +:a7496 :a7496 :a7496. +:a7497 :a7497 :a7497. +:a7498 :a7498 :a7498. +:a7499 :a7499 :a7499. +:a7500 :a7500 :a7500. +:a7501 :a7501 :a7501. +:a7502 :a7502 :a7502. +:a7503 :a7503 :a7503. +:a7504 :a7504 :a7504. +:a7505 :a7505 :a7505. +:a7506 :a7506 :a7506. +:a7507 :a7507 :a7507. +:a7508 :a7508 :a7508. +:a7509 :a7509 :a7509. +:a7510 :a7510 :a7510. +:a7511 :a7511 :a7511. +:a7512 :a7512 :a7512. +:a7513 :a7513 :a7513. +:a7514 :a7514 :a7514. +:a7515 :a7515 :a7515. +:a7516 :a7516 :a7516. +:a7517 :a7517 :a7517. +:a7518 :a7518 :a7518. +:a7519 :a7519 :a7519. +:a7520 :a7520 :a7520. +:a7521 :a7521 :a7521. +:a7522 :a7522 :a7522. +:a7523 :a7523 :a7523. +:a7524 :a7524 :a7524. +:a7525 :a7525 :a7525. +:a7526 :a7526 :a7526. +:a7527 :a7527 :a7527. +:a7528 :a7528 :a7528. +:a7529 :a7529 :a7529. +:a7530 :a7530 :a7530. +:a7531 :a7531 :a7531. +:a7532 :a7532 :a7532. +:a7533 :a7533 :a7533. +:a7534 :a7534 :a7534. +:a7535 :a7535 :a7535. +:a7536 :a7536 :a7536. +:a7537 :a7537 :a7537. +:a7538 :a7538 :a7538. +:a7539 :a7539 :a7539. +:a7540 :a7540 :a7540. +:a7541 :a7541 :a7541. +:a7542 :a7542 :a7542. +:a7543 :a7543 :a7543. +:a7544 :a7544 :a7544. +:a7545 :a7545 :a7545. +:a7546 :a7546 :a7546. +:a7547 :a7547 :a7547. +:a7548 :a7548 :a7548. +:a7549 :a7549 :a7549. +:a7550 :a7550 :a7550. +:a7551 :a7551 :a7551. +:a7552 :a7552 :a7552. +:a7553 :a7553 :a7553. +:a7554 :a7554 :a7554. +:a7555 :a7555 :a7555. +:a7556 :a7556 :a7556. +:a7557 :a7557 :a7557. +:a7558 :a7558 :a7558. +:a7559 :a7559 :a7559. +:a7560 :a7560 :a7560. +:a7561 :a7561 :a7561. +:a7562 :a7562 :a7562. +:a7563 :a7563 :a7563. +:a7564 :a7564 :a7564. +:a7565 :a7565 :a7565. +:a7566 :a7566 :a7566. +:a7567 :a7567 :a7567. +:a7568 :a7568 :a7568. +:a7569 :a7569 :a7569. +:a7570 :a7570 :a7570. +:a7571 :a7571 :a7571. +:a7572 :a7572 :a7572. +:a7573 :a7573 :a7573. +:a7574 :a7574 :a7574. +:a7575 :a7575 :a7575. +:a7576 :a7576 :a7576. +:a7577 :a7577 :a7577. +:a7578 :a7578 :a7578. +:a7579 :a7579 :a7579. +:a7580 :a7580 :a7580. +:a7581 :a7581 :a7581. +:a7582 :a7582 :a7582. +:a7583 :a7583 :a7583. +:a7584 :a7584 :a7584. +:a7585 :a7585 :a7585. +:a7586 :a7586 :a7586. +:a7587 :a7587 :a7587. +:a7588 :a7588 :a7588. +:a7589 :a7589 :a7589. +:a7590 :a7590 :a7590. +:a7591 :a7591 :a7591. +:a7592 :a7592 :a7592. +:a7593 :a7593 :a7593. +:a7594 :a7594 :a7594. +:a7595 :a7595 :a7595. +:a7596 :a7596 :a7596. +:a7597 :a7597 :a7597. +:a7598 :a7598 :a7598. +:a7599 :a7599 :a7599. +:a7600 :a7600 :a7600. +:a7601 :a7601 :a7601. +:a7602 :a7602 :a7602. +:a7603 :a7603 :a7603. +:a7604 :a7604 :a7604. +:a7605 :a7605 :a7605. +:a7606 :a7606 :a7606. +:a7607 :a7607 :a7607. +:a7608 :a7608 :a7608. +:a7609 :a7609 :a7609. +:a7610 :a7610 :a7610. +:a7611 :a7611 :a7611. +:a7612 :a7612 :a7612. +:a7613 :a7613 :a7613. +:a7614 :a7614 :a7614. +:a7615 :a7615 :a7615. +:a7616 :a7616 :a7616. +:a7617 :a7617 :a7617. +:a7618 :a7618 :a7618. +:a7619 :a7619 :a7619. +:a7620 :a7620 :a7620. +:a7621 :a7621 :a7621. +:a7622 :a7622 :a7622. +:a7623 :a7623 :a7623. +:a7624 :a7624 :a7624. +:a7625 :a7625 :a7625. +:a7626 :a7626 :a7626. +:a7627 :a7627 :a7627. +:a7628 :a7628 :a7628. +:a7629 :a7629 :a7629. +:a7630 :a7630 :a7630. +:a7631 :a7631 :a7631. +:a7632 :a7632 :a7632. +:a7633 :a7633 :a7633. +:a7634 :a7634 :a7634. +:a7635 :a7635 :a7635. +:a7636 :a7636 :a7636. +:a7637 :a7637 :a7637. +:a7638 :a7638 :a7638. +:a7639 :a7639 :a7639. +:a7640 :a7640 :a7640. +:a7641 :a7641 :a7641. +:a7642 :a7642 :a7642. +:a7643 :a7643 :a7643. +:a7644 :a7644 :a7644. +:a7645 :a7645 :a7645. +:a7646 :a7646 :a7646. +:a7647 :a7647 :a7647. +:a7648 :a7648 :a7648. +:a7649 :a7649 :a7649. +:a7650 :a7650 :a7650. +:a7651 :a7651 :a7651. +:a7652 :a7652 :a7652. +:a7653 :a7653 :a7653. +:a7654 :a7654 :a7654. +:a7655 :a7655 :a7655. +:a7656 :a7656 :a7656. +:a7657 :a7657 :a7657. +:a7658 :a7658 :a7658. +:a7659 :a7659 :a7659. +:a7660 :a7660 :a7660. +:a7661 :a7661 :a7661. +:a7662 :a7662 :a7662. +:a7663 :a7663 :a7663. +:a7664 :a7664 :a7664. +:a7665 :a7665 :a7665. +:a7666 :a7666 :a7666. +:a7667 :a7667 :a7667. +:a7668 :a7668 :a7668. +:a7669 :a7669 :a7669. +:a7670 :a7670 :a7670. +:a7671 :a7671 :a7671. +:a7672 :a7672 :a7672. +:a7673 :a7673 :a7673. +:a7674 :a7674 :a7674. +:a7675 :a7675 :a7675. +:a7676 :a7676 :a7676. +:a7677 :a7677 :a7677. +:a7678 :a7678 :a7678. +:a7679 :a7679 :a7679. +:a7680 :a7680 :a7680. +:a7681 :a7681 :a7681. +:a7682 :a7682 :a7682. +:a7683 :a7683 :a7683. +:a7684 :a7684 :a7684. +:a7685 :a7685 :a7685. +:a7686 :a7686 :a7686. +:a7687 :a7687 :a7687. +:a7688 :a7688 :a7688. +:a7689 :a7689 :a7689. +:a7690 :a7690 :a7690. +:a7691 :a7691 :a7691. +:a7692 :a7692 :a7692. +:a7693 :a7693 :a7693. +:a7694 :a7694 :a7694. +:a7695 :a7695 :a7695. +:a7696 :a7696 :a7696. +:a7697 :a7697 :a7697. +:a7698 :a7698 :a7698. +:a7699 :a7699 :a7699. +:a7700 :a7700 :a7700. +:a7701 :a7701 :a7701. +:a7702 :a7702 :a7702. +:a7703 :a7703 :a7703. +:a7704 :a7704 :a7704. +:a7705 :a7705 :a7705. +:a7706 :a7706 :a7706. +:a7707 :a7707 :a7707. +:a7708 :a7708 :a7708. +:a7709 :a7709 :a7709. +:a7710 :a7710 :a7710. +:a7711 :a7711 :a7711. +:a7712 :a7712 :a7712. +:a7713 :a7713 :a7713. +:a7714 :a7714 :a7714. +:a7715 :a7715 :a7715. +:a7716 :a7716 :a7716. +:a7717 :a7717 :a7717. +:a7718 :a7718 :a7718. +:a7719 :a7719 :a7719. +:a7720 :a7720 :a7720. +:a7721 :a7721 :a7721. +:a7722 :a7722 :a7722. +:a7723 :a7723 :a7723. +:a7724 :a7724 :a7724. +:a7725 :a7725 :a7725. +:a7726 :a7726 :a7726. +:a7727 :a7727 :a7727. +:a7728 :a7728 :a7728. +:a7729 :a7729 :a7729. +:a7730 :a7730 :a7730. +:a7731 :a7731 :a7731. +:a7732 :a7732 :a7732. +:a7733 :a7733 :a7733. +:a7734 :a7734 :a7734. +:a7735 :a7735 :a7735. +:a7736 :a7736 :a7736. +:a7737 :a7737 :a7737. +:a7738 :a7738 :a7738. +:a7739 :a7739 :a7739. +:a7740 :a7740 :a7740. +:a7741 :a7741 :a7741. +:a7742 :a7742 :a7742. +:a7743 :a7743 :a7743. +:a7744 :a7744 :a7744. +:a7745 :a7745 :a7745. +:a7746 :a7746 :a7746. +:a7747 :a7747 :a7747. +:a7748 :a7748 :a7748. +:a7749 :a7749 :a7749. +:a7750 :a7750 :a7750. +:a7751 :a7751 :a7751. +:a7752 :a7752 :a7752. +:a7753 :a7753 :a7753. +:a7754 :a7754 :a7754. +:a7755 :a7755 :a7755. +:a7756 :a7756 :a7756. +:a7757 :a7757 :a7757. +:a7758 :a7758 :a7758. +:a7759 :a7759 :a7759. +:a7760 :a7760 :a7760. +:a7761 :a7761 :a7761. +:a7762 :a7762 :a7762. +:a7763 :a7763 :a7763. +:a7764 :a7764 :a7764. +:a7765 :a7765 :a7765. +:a7766 :a7766 :a7766. +:a7767 :a7767 :a7767. +:a7768 :a7768 :a7768. +:a7769 :a7769 :a7769. +:a7770 :a7770 :a7770. +:a7771 :a7771 :a7771. +:a7772 :a7772 :a7772. +:a7773 :a7773 :a7773. +:a7774 :a7774 :a7774. +:a7775 :a7775 :a7775. +:a7776 :a7776 :a7776. +:a7777 :a7777 :a7777. +:a7778 :a7778 :a7778. +:a7779 :a7779 :a7779. +:a7780 :a7780 :a7780. +:a7781 :a7781 :a7781. +:a7782 :a7782 :a7782. +:a7783 :a7783 :a7783. +:a7784 :a7784 :a7784. +:a7785 :a7785 :a7785. +:a7786 :a7786 :a7786. +:a7787 :a7787 :a7787. +:a7788 :a7788 :a7788. +:a7789 :a7789 :a7789. +:a7790 :a7790 :a7790. +:a7791 :a7791 :a7791. +:a7792 :a7792 :a7792. +:a7793 :a7793 :a7793. +:a7794 :a7794 :a7794. +:a7795 :a7795 :a7795. +:a7796 :a7796 :a7796. +:a7797 :a7797 :a7797. +:a7798 :a7798 :a7798. +:a7799 :a7799 :a7799. +:a7800 :a7800 :a7800. +:a7801 :a7801 :a7801. +:a7802 :a7802 :a7802. +:a7803 :a7803 :a7803. +:a7804 :a7804 :a7804. +:a7805 :a7805 :a7805. +:a7806 :a7806 :a7806. +:a7807 :a7807 :a7807. +:a7808 :a7808 :a7808. +:a7809 :a7809 :a7809. +:a7810 :a7810 :a7810. +:a7811 :a7811 :a7811. +:a7812 :a7812 :a7812. +:a7813 :a7813 :a7813. +:a7814 :a7814 :a7814. +:a7815 :a7815 :a7815. +:a7816 :a7816 :a7816. +:a7817 :a7817 :a7817. +:a7818 :a7818 :a7818. +:a7819 :a7819 :a7819. +:a7820 :a7820 :a7820. +:a7821 :a7821 :a7821. +:a7822 :a7822 :a7822. +:a7823 :a7823 :a7823. +:a7824 :a7824 :a7824. +:a7825 :a7825 :a7825. +:a7826 :a7826 :a7826. +:a7827 :a7827 :a7827. +:a7828 :a7828 :a7828. +:a7829 :a7829 :a7829. +:a7830 :a7830 :a7830. +:a7831 :a7831 :a7831. +:a7832 :a7832 :a7832. +:a7833 :a7833 :a7833. +:a7834 :a7834 :a7834. +:a7835 :a7835 :a7835. +:a7836 :a7836 :a7836. +:a7837 :a7837 :a7837. +:a7838 :a7838 :a7838. +:a7839 :a7839 :a7839. +:a7840 :a7840 :a7840. +:a7841 :a7841 :a7841. +:a7842 :a7842 :a7842. +:a7843 :a7843 :a7843. +:a7844 :a7844 :a7844. +:a7845 :a7845 :a7845. +:a7846 :a7846 :a7846. +:a7847 :a7847 :a7847. +:a7848 :a7848 :a7848. +:a7849 :a7849 :a7849. +:a7850 :a7850 :a7850. +:a7851 :a7851 :a7851. +:a7852 :a7852 :a7852. +:a7853 :a7853 :a7853. +:a7854 :a7854 :a7854. +:a7855 :a7855 :a7855. +:a7856 :a7856 :a7856. +:a7857 :a7857 :a7857. +:a7858 :a7858 :a7858. +:a7859 :a7859 :a7859. +:a7860 :a7860 :a7860. +:a7861 :a7861 :a7861. +:a7862 :a7862 :a7862. +:a7863 :a7863 :a7863. +:a7864 :a7864 :a7864. +:a7865 :a7865 :a7865. +:a7866 :a7866 :a7866. +:a7867 :a7867 :a7867. +:a7868 :a7868 :a7868. +:a7869 :a7869 :a7869. +:a7870 :a7870 :a7870. +:a7871 :a7871 :a7871. +:a7872 :a7872 :a7872. +:a7873 :a7873 :a7873. +:a7874 :a7874 :a7874. +:a7875 :a7875 :a7875. +:a7876 :a7876 :a7876. +:a7877 :a7877 :a7877. +:a7878 :a7878 :a7878. +:a7879 :a7879 :a7879. +:a7880 :a7880 :a7880. +:a7881 :a7881 :a7881. +:a7882 :a7882 :a7882. +:a7883 :a7883 :a7883. +:a7884 :a7884 :a7884. +:a7885 :a7885 :a7885. +:a7886 :a7886 :a7886. +:a7887 :a7887 :a7887. +:a7888 :a7888 :a7888. +:a7889 :a7889 :a7889. +:a7890 :a7890 :a7890. +:a7891 :a7891 :a7891. +:a7892 :a7892 :a7892. +:a7893 :a7893 :a7893. +:a7894 :a7894 :a7894. +:a7895 :a7895 :a7895. +:a7896 :a7896 :a7896. +:a7897 :a7897 :a7897. +:a7898 :a7898 :a7898. +:a7899 :a7899 :a7899. +:a7900 :a7900 :a7900. +:a7901 :a7901 :a7901. +:a7902 :a7902 :a7902. +:a7903 :a7903 :a7903. +:a7904 :a7904 :a7904. +:a7905 :a7905 :a7905. +:a7906 :a7906 :a7906. +:a7907 :a7907 :a7907. +:a7908 :a7908 :a7908. +:a7909 :a7909 :a7909. +:a7910 :a7910 :a7910. +:a7911 :a7911 :a7911. +:a7912 :a7912 :a7912. +:a7913 :a7913 :a7913. +:a7914 :a7914 :a7914. +:a7915 :a7915 :a7915. +:a7916 :a7916 :a7916. +:a7917 :a7917 :a7917. +:a7918 :a7918 :a7918. +:a7919 :a7919 :a7919. +:a7920 :a7920 :a7920. +:a7921 :a7921 :a7921. +:a7922 :a7922 :a7922. +:a7923 :a7923 :a7923. +:a7924 :a7924 :a7924. +:a7925 :a7925 :a7925. +:a7926 :a7926 :a7926. +:a7927 :a7927 :a7927. +:a7928 :a7928 :a7928. +:a7929 :a7929 :a7929. +:a7930 :a7930 :a7930. +:a7931 :a7931 :a7931. +:a7932 :a7932 :a7932. +:a7933 :a7933 :a7933. +:a7934 :a7934 :a7934. +:a7935 :a7935 :a7935. +:a7936 :a7936 :a7936. +:a7937 :a7937 :a7937. +:a7938 :a7938 :a7938. +:a7939 :a7939 :a7939. +:a7940 :a7940 :a7940. +:a7941 :a7941 :a7941. +:a7942 :a7942 :a7942. +:a7943 :a7943 :a7943. +:a7944 :a7944 :a7944. +:a7945 :a7945 :a7945. +:a7946 :a7946 :a7946. +:a7947 :a7947 :a7947. +:a7948 :a7948 :a7948. +:a7949 :a7949 :a7949. +:a7950 :a7950 :a7950. +:a7951 :a7951 :a7951. +:a7952 :a7952 :a7952. +:a7953 :a7953 :a7953. +:a7954 :a7954 :a7954. +:a7955 :a7955 :a7955. +:a7956 :a7956 :a7956. +:a7957 :a7957 :a7957. +:a7958 :a7958 :a7958. +:a7959 :a7959 :a7959. +:a7960 :a7960 :a7960. +:a7961 :a7961 :a7961. +:a7962 :a7962 :a7962. +:a7963 :a7963 :a7963. +:a7964 :a7964 :a7964. +:a7965 :a7965 :a7965. +:a7966 :a7966 :a7966. +:a7967 :a7967 :a7967. +:a7968 :a7968 :a7968. +:a7969 :a7969 :a7969. +:a7970 :a7970 :a7970. +:a7971 :a7971 :a7971. +:a7972 :a7972 :a7972. +:a7973 :a7973 :a7973. +:a7974 :a7974 :a7974. +:a7975 :a7975 :a7975. +:a7976 :a7976 :a7976. +:a7977 :a7977 :a7977. +:a7978 :a7978 :a7978. +:a7979 :a7979 :a7979. +:a7980 :a7980 :a7980. +:a7981 :a7981 :a7981. +:a7982 :a7982 :a7982. +:a7983 :a7983 :a7983. +:a7984 :a7984 :a7984. +:a7985 :a7985 :a7985. +:a7986 :a7986 :a7986. +:a7987 :a7987 :a7987. +:a7988 :a7988 :a7988. +:a7989 :a7989 :a7989. +:a7990 :a7990 :a7990. +:a7991 :a7991 :a7991. +:a7992 :a7992 :a7992. +:a7993 :a7993 :a7993. +:a7994 :a7994 :a7994. +:a7995 :a7995 :a7995. +:a7996 :a7996 :a7996. +:a7997 :a7997 :a7997. +:a7998 :a7998 :a7998. +:a7999 :a7999 :a7999. +:a8000 :a8000 :a8000. +:a8001 :a8001 :a8001. +:a8002 :a8002 :a8002. +:a8003 :a8003 :a8003. +:a8004 :a8004 :a8004. +:a8005 :a8005 :a8005. +:a8006 :a8006 :a8006. +:a8007 :a8007 :a8007. +:a8008 :a8008 :a8008. +:a8009 :a8009 :a8009. +:a8010 :a8010 :a8010. +:a8011 :a8011 :a8011. +:a8012 :a8012 :a8012. +:a8013 :a8013 :a8013. +:a8014 :a8014 :a8014. +:a8015 :a8015 :a8015. +:a8016 :a8016 :a8016. +:a8017 :a8017 :a8017. +:a8018 :a8018 :a8018. +:a8019 :a8019 :a8019. +:a8020 :a8020 :a8020. +:a8021 :a8021 :a8021. +:a8022 :a8022 :a8022. +:a8023 :a8023 :a8023. +:a8024 :a8024 :a8024. +:a8025 :a8025 :a8025. +:a8026 :a8026 :a8026. +:a8027 :a8027 :a8027. +:a8028 :a8028 :a8028. +:a8029 :a8029 :a8029. +:a8030 :a8030 :a8030. +:a8031 :a8031 :a8031. +:a8032 :a8032 :a8032. +:a8033 :a8033 :a8033. +:a8034 :a8034 :a8034. +:a8035 :a8035 :a8035. +:a8036 :a8036 :a8036. +:a8037 :a8037 :a8037. +:a8038 :a8038 :a8038. +:a8039 :a8039 :a8039. +:a8040 :a8040 :a8040. +:a8041 :a8041 :a8041. +:a8042 :a8042 :a8042. +:a8043 :a8043 :a8043. +:a8044 :a8044 :a8044. +:a8045 :a8045 :a8045. +:a8046 :a8046 :a8046. +:a8047 :a8047 :a8047. +:a8048 :a8048 :a8048. +:a8049 :a8049 :a8049. +:a8050 :a8050 :a8050. +:a8051 :a8051 :a8051. +:a8052 :a8052 :a8052. +:a8053 :a8053 :a8053. +:a8054 :a8054 :a8054. +:a8055 :a8055 :a8055. +:a8056 :a8056 :a8056. +:a8057 :a8057 :a8057. +:a8058 :a8058 :a8058. +:a8059 :a8059 :a8059. +:a8060 :a8060 :a8060. +:a8061 :a8061 :a8061. +:a8062 :a8062 :a8062. +:a8063 :a8063 :a8063. +:a8064 :a8064 :a8064. +:a8065 :a8065 :a8065. +:a8066 :a8066 :a8066. +:a8067 :a8067 :a8067. +:a8068 :a8068 :a8068. +:a8069 :a8069 :a8069. +:a8070 :a8070 :a8070. +:a8071 :a8071 :a8071. +:a8072 :a8072 :a8072. +:a8073 :a8073 :a8073. +:a8074 :a8074 :a8074. +:a8075 :a8075 :a8075. +:a8076 :a8076 :a8076. +:a8077 :a8077 :a8077. +:a8078 :a8078 :a8078. +:a8079 :a8079 :a8079. +:a8080 :a8080 :a8080. +:a8081 :a8081 :a8081. +:a8082 :a8082 :a8082. +:a8083 :a8083 :a8083. +:a8084 :a8084 :a8084. +:a8085 :a8085 :a8085. +:a8086 :a8086 :a8086. +:a8087 :a8087 :a8087. +:a8088 :a8088 :a8088. +:a8089 :a8089 :a8089. +:a8090 :a8090 :a8090. +:a8091 :a8091 :a8091. +:a8092 :a8092 :a8092. +:a8093 :a8093 :a8093. +:a8094 :a8094 :a8094. +:a8095 :a8095 :a8095. +:a8096 :a8096 :a8096. +:a8097 :a8097 :a8097. +:a8098 :a8098 :a8098. +:a8099 :a8099 :a8099. +:a8100 :a8100 :a8100. +:a8101 :a8101 :a8101. +:a8102 :a8102 :a8102. +:a8103 :a8103 :a8103. +:a8104 :a8104 :a8104. +:a8105 :a8105 :a8105. +:a8106 :a8106 :a8106. +:a8107 :a8107 :a8107. +:a8108 :a8108 :a8108. +:a8109 :a8109 :a8109. +:a8110 :a8110 :a8110. +:a8111 :a8111 :a8111. +:a8112 :a8112 :a8112. +:a8113 :a8113 :a8113. +:a8114 :a8114 :a8114. +:a8115 :a8115 :a8115. +:a8116 :a8116 :a8116. +:a8117 :a8117 :a8117. +:a8118 :a8118 :a8118. +:a8119 :a8119 :a8119. +:a8120 :a8120 :a8120. +:a8121 :a8121 :a8121. +:a8122 :a8122 :a8122. +:a8123 :a8123 :a8123. +:a8124 :a8124 :a8124. +:a8125 :a8125 :a8125. +:a8126 :a8126 :a8126. +:a8127 :a8127 :a8127. +:a8128 :a8128 :a8128. +:a8129 :a8129 :a8129. +:a8130 :a8130 :a8130. +:a8131 :a8131 :a8131. +:a8132 :a8132 :a8132. +:a8133 :a8133 :a8133. +:a8134 :a8134 :a8134. +:a8135 :a8135 :a8135. +:a8136 :a8136 :a8136. +:a8137 :a8137 :a8137. +:a8138 :a8138 :a8138. +:a8139 :a8139 :a8139. +:a8140 :a8140 :a8140. +:a8141 :a8141 :a8141. +:a8142 :a8142 :a8142. +:a8143 :a8143 :a8143. +:a8144 :a8144 :a8144. +:a8145 :a8145 :a8145. +:a8146 :a8146 :a8146. +:a8147 :a8147 :a8147. +:a8148 :a8148 :a8148. +:a8149 :a8149 :a8149. +:a8150 :a8150 :a8150. +:a8151 :a8151 :a8151. +:a8152 :a8152 :a8152. +:a8153 :a8153 :a8153. +:a8154 :a8154 :a8154. +:a8155 :a8155 :a8155. +:a8156 :a8156 :a8156. +:a8157 :a8157 :a8157. +:a8158 :a8158 :a8158. +:a8159 :a8159 :a8159. +:a8160 :a8160 :a8160. +:a8161 :a8161 :a8161. +:a8162 :a8162 :a8162. +:a8163 :a8163 :a8163. +:a8164 :a8164 :a8164. +:a8165 :a8165 :a8165. +:a8166 :a8166 :a8166. +:a8167 :a8167 :a8167. +:a8168 :a8168 :a8168. +:a8169 :a8169 :a8169. +:a8170 :a8170 :a8170. +:a8171 :a8171 :a8171. +:a8172 :a8172 :a8172. +:a8173 :a8173 :a8173. +:a8174 :a8174 :a8174. +:a8175 :a8175 :a8175. +:a8176 :a8176 :a8176. +:a8177 :a8177 :a8177. +:a8178 :a8178 :a8178. +:a8179 :a8179 :a8179. +:a8180 :a8180 :a8180. +:a8181 :a8181 :a8181. +:a8182 :a8182 :a8182. +:a8183 :a8183 :a8183. +:a8184 :a8184 :a8184. +:a8185 :a8185 :a8185. +:a8186 :a8186 :a8186. +:a8187 :a8187 :a8187. +:a8188 :a8188 :a8188. +:a8189 :a8189 :a8189. +:a8190 :a8190 :a8190. +:a8191 :a8191 :a8191. +:a8192 :a8192 :a8192. +:a8193 :a8193 :a8193. +:a8194 :a8194 :a8194. +:a8195 :a8195 :a8195. +:a8196 :a8196 :a8196. +:a8197 :a8197 :a8197. +:a8198 :a8198 :a8198. +:a8199 :a8199 :a8199. +:a8200 :a8200 :a8200. +:a8201 :a8201 :a8201. +:a8202 :a8202 :a8202. +:a8203 :a8203 :a8203. +:a8204 :a8204 :a8204. +:a8205 :a8205 :a8205. +:a8206 :a8206 :a8206. +:a8207 :a8207 :a8207. +:a8208 :a8208 :a8208. +:a8209 :a8209 :a8209. +:a8210 :a8210 :a8210. +:a8211 :a8211 :a8211. +:a8212 :a8212 :a8212. +:a8213 :a8213 :a8213. +:a8214 :a8214 :a8214. +:a8215 :a8215 :a8215. +:a8216 :a8216 :a8216. +:a8217 :a8217 :a8217. +:a8218 :a8218 :a8218. +:a8219 :a8219 :a8219. +:a8220 :a8220 :a8220. +:a8221 :a8221 :a8221. +:a8222 :a8222 :a8222. +:a8223 :a8223 :a8223. +:a8224 :a8224 :a8224. +:a8225 :a8225 :a8225. +:a8226 :a8226 :a8226. +:a8227 :a8227 :a8227. +:a8228 :a8228 :a8228. +:a8229 :a8229 :a8229. +:a8230 :a8230 :a8230. +:a8231 :a8231 :a8231. +:a8232 :a8232 :a8232. +:a8233 :a8233 :a8233. +:a8234 :a8234 :a8234. +:a8235 :a8235 :a8235. +:a8236 :a8236 :a8236. +:a8237 :a8237 :a8237. +:a8238 :a8238 :a8238. +:a8239 :a8239 :a8239. +:a8240 :a8240 :a8240. +:a8241 :a8241 :a8241. +:a8242 :a8242 :a8242. +:a8243 :a8243 :a8243. +:a8244 :a8244 :a8244. +:a8245 :a8245 :a8245. +:a8246 :a8246 :a8246. +:a8247 :a8247 :a8247. +:a8248 :a8248 :a8248. +:a8249 :a8249 :a8249. +:a8250 :a8250 :a8250. +:a8251 :a8251 :a8251. +:a8252 :a8252 :a8252. +:a8253 :a8253 :a8253. +:a8254 :a8254 :a8254. +:a8255 :a8255 :a8255. +:a8256 :a8256 :a8256. +:a8257 :a8257 :a8257. +:a8258 :a8258 :a8258. +:a8259 :a8259 :a8259. +:a8260 :a8260 :a8260. +:a8261 :a8261 :a8261. +:a8262 :a8262 :a8262. +:a8263 :a8263 :a8263. +:a8264 :a8264 :a8264. +:a8265 :a8265 :a8265. +:a8266 :a8266 :a8266. +:a8267 :a8267 :a8267. +:a8268 :a8268 :a8268. +:a8269 :a8269 :a8269. +:a8270 :a8270 :a8270. +:a8271 :a8271 :a8271. +:a8272 :a8272 :a8272. +:a8273 :a8273 :a8273. +:a8274 :a8274 :a8274. +:a8275 :a8275 :a8275. +:a8276 :a8276 :a8276. +:a8277 :a8277 :a8277. +:a8278 :a8278 :a8278. +:a8279 :a8279 :a8279. +:a8280 :a8280 :a8280. +:a8281 :a8281 :a8281. +:a8282 :a8282 :a8282. +:a8283 :a8283 :a8283. +:a8284 :a8284 :a8284. +:a8285 :a8285 :a8285. +:a8286 :a8286 :a8286. +:a8287 :a8287 :a8287. +:a8288 :a8288 :a8288. +:a8289 :a8289 :a8289. +:a8290 :a8290 :a8290. +:a8291 :a8291 :a8291. +:a8292 :a8292 :a8292. +:a8293 :a8293 :a8293. +:a8294 :a8294 :a8294. +:a8295 :a8295 :a8295. +:a8296 :a8296 :a8296. +:a8297 :a8297 :a8297. +:a8298 :a8298 :a8298. +:a8299 :a8299 :a8299. +:a8300 :a8300 :a8300. +:a8301 :a8301 :a8301. +:a8302 :a8302 :a8302. +:a8303 :a8303 :a8303. +:a8304 :a8304 :a8304. +:a8305 :a8305 :a8305. +:a8306 :a8306 :a8306. +:a8307 :a8307 :a8307. +:a8308 :a8308 :a8308. +:a8309 :a8309 :a8309. +:a8310 :a8310 :a8310. +:a8311 :a8311 :a8311. +:a8312 :a8312 :a8312. +:a8313 :a8313 :a8313. +:a8314 :a8314 :a8314. +:a8315 :a8315 :a8315. +:a8316 :a8316 :a8316. +:a8317 :a8317 :a8317. +:a8318 :a8318 :a8318. +:a8319 :a8319 :a8319. +:a8320 :a8320 :a8320. +:a8321 :a8321 :a8321. +:a8322 :a8322 :a8322. +:a8323 :a8323 :a8323. +:a8324 :a8324 :a8324. +:a8325 :a8325 :a8325. +:a8326 :a8326 :a8326. +:a8327 :a8327 :a8327. +:a8328 :a8328 :a8328. +:a8329 :a8329 :a8329. +:a8330 :a8330 :a8330. +:a8331 :a8331 :a8331. +:a8332 :a8332 :a8332. +:a8333 :a8333 :a8333. +:a8334 :a8334 :a8334. +:a8335 :a8335 :a8335. +:a8336 :a8336 :a8336. +:a8337 :a8337 :a8337. +:a8338 :a8338 :a8338. +:a8339 :a8339 :a8339. +:a8340 :a8340 :a8340. +:a8341 :a8341 :a8341. +:a8342 :a8342 :a8342. +:a8343 :a8343 :a8343. +:a8344 :a8344 :a8344. +:a8345 :a8345 :a8345. +:a8346 :a8346 :a8346. +:a8347 :a8347 :a8347. +:a8348 :a8348 :a8348. +:a8349 :a8349 :a8349. +:a8350 :a8350 :a8350. +:a8351 :a8351 :a8351. +:a8352 :a8352 :a8352. +:a8353 :a8353 :a8353. +:a8354 :a8354 :a8354. +:a8355 :a8355 :a8355. +:a8356 :a8356 :a8356. +:a8357 :a8357 :a8357. +:a8358 :a8358 :a8358. +:a8359 :a8359 :a8359. +:a8360 :a8360 :a8360. +:a8361 :a8361 :a8361. +:a8362 :a8362 :a8362. +:a8363 :a8363 :a8363. +:a8364 :a8364 :a8364. +:a8365 :a8365 :a8365. +:a8366 :a8366 :a8366. +:a8367 :a8367 :a8367. +:a8368 :a8368 :a8368. +:a8369 :a8369 :a8369. +:a8370 :a8370 :a8370. +:a8371 :a8371 :a8371. +:a8372 :a8372 :a8372. +:a8373 :a8373 :a8373. +:a8374 :a8374 :a8374. +:a8375 :a8375 :a8375. +:a8376 :a8376 :a8376. +:a8377 :a8377 :a8377. +:a8378 :a8378 :a8378. +:a8379 :a8379 :a8379. +:a8380 :a8380 :a8380. +:a8381 :a8381 :a8381. +:a8382 :a8382 :a8382. +:a8383 :a8383 :a8383. +:a8384 :a8384 :a8384. +:a8385 :a8385 :a8385. +:a8386 :a8386 :a8386. +:a8387 :a8387 :a8387. +:a8388 :a8388 :a8388. +:a8389 :a8389 :a8389. +:a8390 :a8390 :a8390. +:a8391 :a8391 :a8391. +:a8392 :a8392 :a8392. +:a8393 :a8393 :a8393. +:a8394 :a8394 :a8394. +:a8395 :a8395 :a8395. +:a8396 :a8396 :a8396. +:a8397 :a8397 :a8397. +:a8398 :a8398 :a8398. +:a8399 :a8399 :a8399. +:a8400 :a8400 :a8400. +:a8401 :a8401 :a8401. +:a8402 :a8402 :a8402. +:a8403 :a8403 :a8403. +:a8404 :a8404 :a8404. +:a8405 :a8405 :a8405. +:a8406 :a8406 :a8406. +:a8407 :a8407 :a8407. +:a8408 :a8408 :a8408. +:a8409 :a8409 :a8409. +:a8410 :a8410 :a8410. +:a8411 :a8411 :a8411. +:a8412 :a8412 :a8412. +:a8413 :a8413 :a8413. +:a8414 :a8414 :a8414. +:a8415 :a8415 :a8415. +:a8416 :a8416 :a8416. +:a8417 :a8417 :a8417. +:a8418 :a8418 :a8418. +:a8419 :a8419 :a8419. +:a8420 :a8420 :a8420. +:a8421 :a8421 :a8421. +:a8422 :a8422 :a8422. +:a8423 :a8423 :a8423. +:a8424 :a8424 :a8424. +:a8425 :a8425 :a8425. +:a8426 :a8426 :a8426. +:a8427 :a8427 :a8427. +:a8428 :a8428 :a8428. +:a8429 :a8429 :a8429. +:a8430 :a8430 :a8430. +:a8431 :a8431 :a8431. +:a8432 :a8432 :a8432. +:a8433 :a8433 :a8433. +:a8434 :a8434 :a8434. +:a8435 :a8435 :a8435. +:a8436 :a8436 :a8436. +:a8437 :a8437 :a8437. +:a8438 :a8438 :a8438. +:a8439 :a8439 :a8439. +:a8440 :a8440 :a8440. +:a8441 :a8441 :a8441. +:a8442 :a8442 :a8442. +:a8443 :a8443 :a8443. +:a8444 :a8444 :a8444. +:a8445 :a8445 :a8445. +:a8446 :a8446 :a8446. +:a8447 :a8447 :a8447. +:a8448 :a8448 :a8448. +:a8449 :a8449 :a8449. +:a8450 :a8450 :a8450. +:a8451 :a8451 :a8451. +:a8452 :a8452 :a8452. +:a8453 :a8453 :a8453. +:a8454 :a8454 :a8454. +:a8455 :a8455 :a8455. +:a8456 :a8456 :a8456. +:a8457 :a8457 :a8457. +:a8458 :a8458 :a8458. +:a8459 :a8459 :a8459. +:a8460 :a8460 :a8460. +:a8461 :a8461 :a8461. +:a8462 :a8462 :a8462. +:a8463 :a8463 :a8463. +:a8464 :a8464 :a8464. +:a8465 :a8465 :a8465. +:a8466 :a8466 :a8466. +:a8467 :a8467 :a8467. +:a8468 :a8468 :a8468. +:a8469 :a8469 :a8469. +:a8470 :a8470 :a8470. +:a8471 :a8471 :a8471. +:a8472 :a8472 :a8472. +:a8473 :a8473 :a8473. +:a8474 :a8474 :a8474. +:a8475 :a8475 :a8475. +:a8476 :a8476 :a8476. +:a8477 :a8477 :a8477. +:a8478 :a8478 :a8478. +:a8479 :a8479 :a8479. +:a8480 :a8480 :a8480. +:a8481 :a8481 :a8481. +:a8482 :a8482 :a8482. +:a8483 :a8483 :a8483. +:a8484 :a8484 :a8484. +:a8485 :a8485 :a8485. +:a8486 :a8486 :a8486. +:a8487 :a8487 :a8487. +:a8488 :a8488 :a8488. +:a8489 :a8489 :a8489. +:a8490 :a8490 :a8490. +:a8491 :a8491 :a8491. +:a8492 :a8492 :a8492. +:a8493 :a8493 :a8493. +:a8494 :a8494 :a8494. +:a8495 :a8495 :a8495. +:a8496 :a8496 :a8496. +:a8497 :a8497 :a8497. +:a8498 :a8498 :a8498. +:a8499 :a8499 :a8499. +:a8500 :a8500 :a8500. +:a8501 :a8501 :a8501. +:a8502 :a8502 :a8502. +:a8503 :a8503 :a8503. +:a8504 :a8504 :a8504. +:a8505 :a8505 :a8505. +:a8506 :a8506 :a8506. +:a8507 :a8507 :a8507. +:a8508 :a8508 :a8508. +:a8509 :a8509 :a8509. +:a8510 :a8510 :a8510. +:a8511 :a8511 :a8511. +:a8512 :a8512 :a8512. +:a8513 :a8513 :a8513. +:a8514 :a8514 :a8514. +:a8515 :a8515 :a8515. +:a8516 :a8516 :a8516. +:a8517 :a8517 :a8517. +:a8518 :a8518 :a8518. +:a8519 :a8519 :a8519. +:a8520 :a8520 :a8520. +:a8521 :a8521 :a8521. +:a8522 :a8522 :a8522. +:a8523 :a8523 :a8523. +:a8524 :a8524 :a8524. +:a8525 :a8525 :a8525. +:a8526 :a8526 :a8526. +:a8527 :a8527 :a8527. +:a8528 :a8528 :a8528. +:a8529 :a8529 :a8529. +:a8530 :a8530 :a8530. +:a8531 :a8531 :a8531. +:a8532 :a8532 :a8532. +:a8533 :a8533 :a8533. +:a8534 :a8534 :a8534. +:a8535 :a8535 :a8535. +:a8536 :a8536 :a8536. +:a8537 :a8537 :a8537. +:a8538 :a8538 :a8538. +:a8539 :a8539 :a8539. +:a8540 :a8540 :a8540. +:a8541 :a8541 :a8541. +:a8542 :a8542 :a8542. +:a8543 :a8543 :a8543. +:a8544 :a8544 :a8544. +:a8545 :a8545 :a8545. +:a8546 :a8546 :a8546. +:a8547 :a8547 :a8547. +:a8548 :a8548 :a8548. +:a8549 :a8549 :a8549. +:a8550 :a8550 :a8550. +:a8551 :a8551 :a8551. +:a8552 :a8552 :a8552. +:a8553 :a8553 :a8553. +:a8554 :a8554 :a8554. +:a8555 :a8555 :a8555. +:a8556 :a8556 :a8556. +:a8557 :a8557 :a8557. +:a8558 :a8558 :a8558. +:a8559 :a8559 :a8559. +:a8560 :a8560 :a8560. +:a8561 :a8561 :a8561. +:a8562 :a8562 :a8562. +:a8563 :a8563 :a8563. +:a8564 :a8564 :a8564. +:a8565 :a8565 :a8565. +:a8566 :a8566 :a8566. +:a8567 :a8567 :a8567. +:a8568 :a8568 :a8568. +:a8569 :a8569 :a8569. +:a8570 :a8570 :a8570. +:a8571 :a8571 :a8571. +:a8572 :a8572 :a8572. +:a8573 :a8573 :a8573. +:a8574 :a8574 :a8574. +:a8575 :a8575 :a8575. +:a8576 :a8576 :a8576. +:a8577 :a8577 :a8577. +:a8578 :a8578 :a8578. +:a8579 :a8579 :a8579. +:a8580 :a8580 :a8580. +:a8581 :a8581 :a8581. +:a8582 :a8582 :a8582. +:a8583 :a8583 :a8583. +:a8584 :a8584 :a8584. +:a8585 :a8585 :a8585. +:a8586 :a8586 :a8586. +:a8587 :a8587 :a8587. +:a8588 :a8588 :a8588. +:a8589 :a8589 :a8589. +:a8590 :a8590 :a8590. +:a8591 :a8591 :a8591. +:a8592 :a8592 :a8592. +:a8593 :a8593 :a8593. +:a8594 :a8594 :a8594. +:a8595 :a8595 :a8595. +:a8596 :a8596 :a8596. +:a8597 :a8597 :a8597. +:a8598 :a8598 :a8598. +:a8599 :a8599 :a8599. +:a8600 :a8600 :a8600. +:a8601 :a8601 :a8601. +:a8602 :a8602 :a8602. +:a8603 :a8603 :a8603. +:a8604 :a8604 :a8604. +:a8605 :a8605 :a8605. +:a8606 :a8606 :a8606. +:a8607 :a8607 :a8607. +:a8608 :a8608 :a8608. +:a8609 :a8609 :a8609. +:a8610 :a8610 :a8610. +:a8611 :a8611 :a8611. +:a8612 :a8612 :a8612. +:a8613 :a8613 :a8613. +:a8614 :a8614 :a8614. +:a8615 :a8615 :a8615. +:a8616 :a8616 :a8616. +:a8617 :a8617 :a8617. +:a8618 :a8618 :a8618. +:a8619 :a8619 :a8619. +:a8620 :a8620 :a8620. +:a8621 :a8621 :a8621. +:a8622 :a8622 :a8622. +:a8623 :a8623 :a8623. +:a8624 :a8624 :a8624. +:a8625 :a8625 :a8625. +:a8626 :a8626 :a8626. +:a8627 :a8627 :a8627. +:a8628 :a8628 :a8628. +:a8629 :a8629 :a8629. +:a8630 :a8630 :a8630. +:a8631 :a8631 :a8631. +:a8632 :a8632 :a8632. +:a8633 :a8633 :a8633. +:a8634 :a8634 :a8634. +:a8635 :a8635 :a8635. +:a8636 :a8636 :a8636. +:a8637 :a8637 :a8637. +:a8638 :a8638 :a8638. +:a8639 :a8639 :a8639. +:a8640 :a8640 :a8640. +:a8641 :a8641 :a8641. +:a8642 :a8642 :a8642. +:a8643 :a8643 :a8643. +:a8644 :a8644 :a8644. +:a8645 :a8645 :a8645. +:a8646 :a8646 :a8646. +:a8647 :a8647 :a8647. +:a8648 :a8648 :a8648. +:a8649 :a8649 :a8649. +:a8650 :a8650 :a8650. +:a8651 :a8651 :a8651. +:a8652 :a8652 :a8652. +:a8653 :a8653 :a8653. +:a8654 :a8654 :a8654. +:a8655 :a8655 :a8655. +:a8656 :a8656 :a8656. +:a8657 :a8657 :a8657. +:a8658 :a8658 :a8658. +:a8659 :a8659 :a8659. +:a8660 :a8660 :a8660. +:a8661 :a8661 :a8661. +:a8662 :a8662 :a8662. +:a8663 :a8663 :a8663. +:a8664 :a8664 :a8664. +:a8665 :a8665 :a8665. +:a8666 :a8666 :a8666. +:a8667 :a8667 :a8667. +:a8668 :a8668 :a8668. +:a8669 :a8669 :a8669. +:a8670 :a8670 :a8670. +:a8671 :a8671 :a8671. +:a8672 :a8672 :a8672. +:a8673 :a8673 :a8673. +:a8674 :a8674 :a8674. +:a8675 :a8675 :a8675. +:a8676 :a8676 :a8676. +:a8677 :a8677 :a8677. +:a8678 :a8678 :a8678. +:a8679 :a8679 :a8679. +:a8680 :a8680 :a8680. +:a8681 :a8681 :a8681. +:a8682 :a8682 :a8682. +:a8683 :a8683 :a8683. +:a8684 :a8684 :a8684. +:a8685 :a8685 :a8685. +:a8686 :a8686 :a8686. +:a8687 :a8687 :a8687. +:a8688 :a8688 :a8688. +:a8689 :a8689 :a8689. +:a8690 :a8690 :a8690. +:a8691 :a8691 :a8691. +:a8692 :a8692 :a8692. +:a8693 :a8693 :a8693. +:a8694 :a8694 :a8694. +:a8695 :a8695 :a8695. +:a8696 :a8696 :a8696. +:a8697 :a8697 :a8697. +:a8698 :a8698 :a8698. +:a8699 :a8699 :a8699. +:a8700 :a8700 :a8700. +:a8701 :a8701 :a8701. +:a8702 :a8702 :a8702. +:a8703 :a8703 :a8703. +:a8704 :a8704 :a8704. +:a8705 :a8705 :a8705. +:a8706 :a8706 :a8706. +:a8707 :a8707 :a8707. +:a8708 :a8708 :a8708. +:a8709 :a8709 :a8709. +:a8710 :a8710 :a8710. +:a8711 :a8711 :a8711. +:a8712 :a8712 :a8712. +:a8713 :a8713 :a8713. +:a8714 :a8714 :a8714. +:a8715 :a8715 :a8715. +:a8716 :a8716 :a8716. +:a8717 :a8717 :a8717. +:a8718 :a8718 :a8718. +:a8719 :a8719 :a8719. +:a8720 :a8720 :a8720. +:a8721 :a8721 :a8721. +:a8722 :a8722 :a8722. +:a8723 :a8723 :a8723. +:a8724 :a8724 :a8724. +:a8725 :a8725 :a8725. +:a8726 :a8726 :a8726. +:a8727 :a8727 :a8727. +:a8728 :a8728 :a8728. +:a8729 :a8729 :a8729. +:a8730 :a8730 :a8730. +:a8731 :a8731 :a8731. +:a8732 :a8732 :a8732. +:a8733 :a8733 :a8733. +:a8734 :a8734 :a8734. +:a8735 :a8735 :a8735. +:a8736 :a8736 :a8736. +:a8737 :a8737 :a8737. +:a8738 :a8738 :a8738. +:a8739 :a8739 :a8739. +:a8740 :a8740 :a8740. +:a8741 :a8741 :a8741. +:a8742 :a8742 :a8742. +:a8743 :a8743 :a8743. +:a8744 :a8744 :a8744. +:a8745 :a8745 :a8745. +:a8746 :a8746 :a8746. +:a8747 :a8747 :a8747. +:a8748 :a8748 :a8748. +:a8749 :a8749 :a8749. +:a8750 :a8750 :a8750. +:a8751 :a8751 :a8751. +:a8752 :a8752 :a8752. +:a8753 :a8753 :a8753. +:a8754 :a8754 :a8754. +:a8755 :a8755 :a8755. +:a8756 :a8756 :a8756. +:a8757 :a8757 :a8757. +:a8758 :a8758 :a8758. +:a8759 :a8759 :a8759. +:a8760 :a8760 :a8760. +:a8761 :a8761 :a8761. +:a8762 :a8762 :a8762. +:a8763 :a8763 :a8763. +:a8764 :a8764 :a8764. +:a8765 :a8765 :a8765. +:a8766 :a8766 :a8766. +:a8767 :a8767 :a8767. +:a8768 :a8768 :a8768. +:a8769 :a8769 :a8769. +:a8770 :a8770 :a8770. +:a8771 :a8771 :a8771. +:a8772 :a8772 :a8772. +:a8773 :a8773 :a8773. +:a8774 :a8774 :a8774. +:a8775 :a8775 :a8775. +:a8776 :a8776 :a8776. +:a8777 :a8777 :a8777. +:a8778 :a8778 :a8778. +:a8779 :a8779 :a8779. +:a8780 :a8780 :a8780. +:a8781 :a8781 :a8781. +:a8782 :a8782 :a8782. +:a8783 :a8783 :a8783. +:a8784 :a8784 :a8784. +:a8785 :a8785 :a8785. +:a8786 :a8786 :a8786. +:a8787 :a8787 :a8787. +:a8788 :a8788 :a8788. +:a8789 :a8789 :a8789. +:a8790 :a8790 :a8790. +:a8791 :a8791 :a8791. +:a8792 :a8792 :a8792. +:a8793 :a8793 :a8793. +:a8794 :a8794 :a8794. +:a8795 :a8795 :a8795. +:a8796 :a8796 :a8796. +:a8797 :a8797 :a8797. +:a8798 :a8798 :a8798. +:a8799 :a8799 :a8799. +:a8800 :a8800 :a8800. +:a8801 :a8801 :a8801. +:a8802 :a8802 :a8802. +:a8803 :a8803 :a8803. +:a8804 :a8804 :a8804. +:a8805 :a8805 :a8805. +:a8806 :a8806 :a8806. +:a8807 :a8807 :a8807. +:a8808 :a8808 :a8808. +:a8809 :a8809 :a8809. +:a8810 :a8810 :a8810. +:a8811 :a8811 :a8811. +:a8812 :a8812 :a8812. +:a8813 :a8813 :a8813. +:a8814 :a8814 :a8814. +:a8815 :a8815 :a8815. +:a8816 :a8816 :a8816. +:a8817 :a8817 :a8817. +:a8818 :a8818 :a8818. +:a8819 :a8819 :a8819. +:a8820 :a8820 :a8820. +:a8821 :a8821 :a8821. +:a8822 :a8822 :a8822. +:a8823 :a8823 :a8823. +:a8824 :a8824 :a8824. +:a8825 :a8825 :a8825. +:a8826 :a8826 :a8826. +:a8827 :a8827 :a8827. +:a8828 :a8828 :a8828. +:a8829 :a8829 :a8829. +:a8830 :a8830 :a8830. +:a8831 :a8831 :a8831. +:a8832 :a8832 :a8832. +:a8833 :a8833 :a8833. +:a8834 :a8834 :a8834. +:a8835 :a8835 :a8835. +:a8836 :a8836 :a8836. +:a8837 :a8837 :a8837. +:a8838 :a8838 :a8838. +:a8839 :a8839 :a8839. +:a8840 :a8840 :a8840. +:a8841 :a8841 :a8841. +:a8842 :a8842 :a8842. +:a8843 :a8843 :a8843. +:a8844 :a8844 :a8844. +:a8845 :a8845 :a8845. +:a8846 :a8846 :a8846. +:a8847 :a8847 :a8847. +:a8848 :a8848 :a8848. +:a8849 :a8849 :a8849. +:a8850 :a8850 :a8850. +:a8851 :a8851 :a8851. +:a8852 :a8852 :a8852. +:a8853 :a8853 :a8853. +:a8854 :a8854 :a8854. +:a8855 :a8855 :a8855. +:a8856 :a8856 :a8856. +:a8857 :a8857 :a8857. +:a8858 :a8858 :a8858. +:a8859 :a8859 :a8859. +:a8860 :a8860 :a8860. +:a8861 :a8861 :a8861. +:a8862 :a8862 :a8862. +:a8863 :a8863 :a8863. +:a8864 :a8864 :a8864. +:a8865 :a8865 :a8865. +:a8866 :a8866 :a8866. +:a8867 :a8867 :a8867. +:a8868 :a8868 :a8868. +:a8869 :a8869 :a8869. +:a8870 :a8870 :a8870. +:a8871 :a8871 :a8871. +:a8872 :a8872 :a8872. +:a8873 :a8873 :a8873. +:a8874 :a8874 :a8874. +:a8875 :a8875 :a8875. +:a8876 :a8876 :a8876. +:a8877 :a8877 :a8877. +:a8878 :a8878 :a8878. +:a8879 :a8879 :a8879. +:a8880 :a8880 :a8880. +:a8881 :a8881 :a8881. +:a8882 :a8882 :a8882. +:a8883 :a8883 :a8883. +:a8884 :a8884 :a8884. +:a8885 :a8885 :a8885. +:a8886 :a8886 :a8886. +:a8887 :a8887 :a8887. +:a8888 :a8888 :a8888. +:a8889 :a8889 :a8889. +:a8890 :a8890 :a8890. +:a8891 :a8891 :a8891. +:a8892 :a8892 :a8892. +:a8893 :a8893 :a8893. +:a8894 :a8894 :a8894. +:a8895 :a8895 :a8895. +:a8896 :a8896 :a8896. +:a8897 :a8897 :a8897. +:a8898 :a8898 :a8898. +:a8899 :a8899 :a8899. +:a8900 :a8900 :a8900. +:a8901 :a8901 :a8901. +:a8902 :a8902 :a8902. +:a8903 :a8903 :a8903. +:a8904 :a8904 :a8904. +:a8905 :a8905 :a8905. +:a8906 :a8906 :a8906. +:a8907 :a8907 :a8907. +:a8908 :a8908 :a8908. +:a8909 :a8909 :a8909. +:a8910 :a8910 :a8910. +:a8911 :a8911 :a8911. +:a8912 :a8912 :a8912. +:a8913 :a8913 :a8913. +:a8914 :a8914 :a8914. +:a8915 :a8915 :a8915. +:a8916 :a8916 :a8916. +:a8917 :a8917 :a8917. +:a8918 :a8918 :a8918. +:a8919 :a8919 :a8919. +:a8920 :a8920 :a8920. +:a8921 :a8921 :a8921. +:a8922 :a8922 :a8922. +:a8923 :a8923 :a8923. +:a8924 :a8924 :a8924. +:a8925 :a8925 :a8925. +:a8926 :a8926 :a8926. +:a8927 :a8927 :a8927. +:a8928 :a8928 :a8928. +:a8929 :a8929 :a8929. +:a8930 :a8930 :a8930. +:a8931 :a8931 :a8931. +:a8932 :a8932 :a8932. +:a8933 :a8933 :a8933. +:a8934 :a8934 :a8934. +:a8935 :a8935 :a8935. +:a8936 :a8936 :a8936. +:a8937 :a8937 :a8937. +:a8938 :a8938 :a8938. +:a8939 :a8939 :a8939. +:a8940 :a8940 :a8940. +:a8941 :a8941 :a8941. +:a8942 :a8942 :a8942. +:a8943 :a8943 :a8943. +:a8944 :a8944 :a8944. +:a8945 :a8945 :a8945. +:a8946 :a8946 :a8946. +:a8947 :a8947 :a8947. +:a8948 :a8948 :a8948. +:a8949 :a8949 :a8949. +:a8950 :a8950 :a8950. +:a8951 :a8951 :a8951. +:a8952 :a8952 :a8952. +:a8953 :a8953 :a8953. +:a8954 :a8954 :a8954. +:a8955 :a8955 :a8955. +:a8956 :a8956 :a8956. +:a8957 :a8957 :a8957. +:a8958 :a8958 :a8958. +:a8959 :a8959 :a8959. +:a8960 :a8960 :a8960. +:a8961 :a8961 :a8961. +:a8962 :a8962 :a8962. +:a8963 :a8963 :a8963. +:a8964 :a8964 :a8964. +:a8965 :a8965 :a8965. +:a8966 :a8966 :a8966. +:a8967 :a8967 :a8967. +:a8968 :a8968 :a8968. +:a8969 :a8969 :a8969. +:a8970 :a8970 :a8970. +:a8971 :a8971 :a8971. +:a8972 :a8972 :a8972. +:a8973 :a8973 :a8973. +:a8974 :a8974 :a8974. +:a8975 :a8975 :a8975. +:a8976 :a8976 :a8976. +:a8977 :a8977 :a8977. +:a8978 :a8978 :a8978. +:a8979 :a8979 :a8979. +:a8980 :a8980 :a8980. +:a8981 :a8981 :a8981. +:a8982 :a8982 :a8982. +:a8983 :a8983 :a8983. +:a8984 :a8984 :a8984. +:a8985 :a8985 :a8985. +:a8986 :a8986 :a8986. +:a8987 :a8987 :a8987. +:a8988 :a8988 :a8988. +:a8989 :a8989 :a8989. +:a8990 :a8990 :a8990. +:a8991 :a8991 :a8991. +:a8992 :a8992 :a8992. +:a8993 :a8993 :a8993. +:a8994 :a8994 :a8994. +:a8995 :a8995 :a8995. +:a8996 :a8996 :a8996. +:a8997 :a8997 :a8997. +:a8998 :a8998 :a8998. +:a8999 :a8999 :a8999. +:a9000 :a9000 :a9000. +:a9001 :a9001 :a9001. +:a9002 :a9002 :a9002. +:a9003 :a9003 :a9003. +:a9004 :a9004 :a9004. +:a9005 :a9005 :a9005. +:a9006 :a9006 :a9006. +:a9007 :a9007 :a9007. +:a9008 :a9008 :a9008. +:a9009 :a9009 :a9009. +:a9010 :a9010 :a9010. +:a9011 :a9011 :a9011. +:a9012 :a9012 :a9012. +:a9013 :a9013 :a9013. +:a9014 :a9014 :a9014. +:a9015 :a9015 :a9015. +:a9016 :a9016 :a9016. +:a9017 :a9017 :a9017. +:a9018 :a9018 :a9018. +:a9019 :a9019 :a9019. +:a9020 :a9020 :a9020. +:a9021 :a9021 :a9021. +:a9022 :a9022 :a9022. +:a9023 :a9023 :a9023. +:a9024 :a9024 :a9024. +:a9025 :a9025 :a9025. +:a9026 :a9026 :a9026. +:a9027 :a9027 :a9027. +:a9028 :a9028 :a9028. +:a9029 :a9029 :a9029. +:a9030 :a9030 :a9030. +:a9031 :a9031 :a9031. +:a9032 :a9032 :a9032. +:a9033 :a9033 :a9033. +:a9034 :a9034 :a9034. +:a9035 :a9035 :a9035. +:a9036 :a9036 :a9036. +:a9037 :a9037 :a9037. +:a9038 :a9038 :a9038. +:a9039 :a9039 :a9039. +:a9040 :a9040 :a9040. +:a9041 :a9041 :a9041. +:a9042 :a9042 :a9042. +:a9043 :a9043 :a9043. +:a9044 :a9044 :a9044. +:a9045 :a9045 :a9045. +:a9046 :a9046 :a9046. +:a9047 :a9047 :a9047. +:a9048 :a9048 :a9048. +:a9049 :a9049 :a9049. +:a9050 :a9050 :a9050. +:a9051 :a9051 :a9051. +:a9052 :a9052 :a9052. +:a9053 :a9053 :a9053. +:a9054 :a9054 :a9054. +:a9055 :a9055 :a9055. +:a9056 :a9056 :a9056. +:a9057 :a9057 :a9057. +:a9058 :a9058 :a9058. +:a9059 :a9059 :a9059. +:a9060 :a9060 :a9060. +:a9061 :a9061 :a9061. +:a9062 :a9062 :a9062. +:a9063 :a9063 :a9063. +:a9064 :a9064 :a9064. +:a9065 :a9065 :a9065. +:a9066 :a9066 :a9066. +:a9067 :a9067 :a9067. +:a9068 :a9068 :a9068. +:a9069 :a9069 :a9069. +:a9070 :a9070 :a9070. +:a9071 :a9071 :a9071. +:a9072 :a9072 :a9072. +:a9073 :a9073 :a9073. +:a9074 :a9074 :a9074. +:a9075 :a9075 :a9075. +:a9076 :a9076 :a9076. +:a9077 :a9077 :a9077. +:a9078 :a9078 :a9078. +:a9079 :a9079 :a9079. +:a9080 :a9080 :a9080. +:a9081 :a9081 :a9081. +:a9082 :a9082 :a9082. +:a9083 :a9083 :a9083. +:a9084 :a9084 :a9084. +:a9085 :a9085 :a9085. +:a9086 :a9086 :a9086. +:a9087 :a9087 :a9087. +:a9088 :a9088 :a9088. +:a9089 :a9089 :a9089. +:a9090 :a9090 :a9090. +:a9091 :a9091 :a9091. +:a9092 :a9092 :a9092. +:a9093 :a9093 :a9093. +:a9094 :a9094 :a9094. +:a9095 :a9095 :a9095. +:a9096 :a9096 :a9096. +:a9097 :a9097 :a9097. +:a9098 :a9098 :a9098. +:a9099 :a9099 :a9099. +:a9100 :a9100 :a9100. +:a9101 :a9101 :a9101. +:a9102 :a9102 :a9102. +:a9103 :a9103 :a9103. +:a9104 :a9104 :a9104. +:a9105 :a9105 :a9105. +:a9106 :a9106 :a9106. +:a9107 :a9107 :a9107. +:a9108 :a9108 :a9108. +:a9109 :a9109 :a9109. +:a9110 :a9110 :a9110. +:a9111 :a9111 :a9111. +:a9112 :a9112 :a9112. +:a9113 :a9113 :a9113. +:a9114 :a9114 :a9114. +:a9115 :a9115 :a9115. +:a9116 :a9116 :a9116. +:a9117 :a9117 :a9117. +:a9118 :a9118 :a9118. +:a9119 :a9119 :a9119. +:a9120 :a9120 :a9120. +:a9121 :a9121 :a9121. +:a9122 :a9122 :a9122. +:a9123 :a9123 :a9123. +:a9124 :a9124 :a9124. +:a9125 :a9125 :a9125. +:a9126 :a9126 :a9126. +:a9127 :a9127 :a9127. +:a9128 :a9128 :a9128. +:a9129 :a9129 :a9129. +:a9130 :a9130 :a9130. +:a9131 :a9131 :a9131. +:a9132 :a9132 :a9132. +:a9133 :a9133 :a9133. +:a9134 :a9134 :a9134. +:a9135 :a9135 :a9135. +:a9136 :a9136 :a9136. +:a9137 :a9137 :a9137. +:a9138 :a9138 :a9138. +:a9139 :a9139 :a9139. +:a9140 :a9140 :a9140. +:a9141 :a9141 :a9141. +:a9142 :a9142 :a9142. +:a9143 :a9143 :a9143. +:a9144 :a9144 :a9144. +:a9145 :a9145 :a9145. +:a9146 :a9146 :a9146. +:a9147 :a9147 :a9147. +:a9148 :a9148 :a9148. +:a9149 :a9149 :a9149. +:a9150 :a9150 :a9150. +:a9151 :a9151 :a9151. +:a9152 :a9152 :a9152. +:a9153 :a9153 :a9153. +:a9154 :a9154 :a9154. +:a9155 :a9155 :a9155. +:a9156 :a9156 :a9156. +:a9157 :a9157 :a9157. +:a9158 :a9158 :a9158. +:a9159 :a9159 :a9159. +:a9160 :a9160 :a9160. +:a9161 :a9161 :a9161. +:a9162 :a9162 :a9162. +:a9163 :a9163 :a9163. +:a9164 :a9164 :a9164. +:a9165 :a9165 :a9165. +:a9166 :a9166 :a9166. +:a9167 :a9167 :a9167. +:a9168 :a9168 :a9168. +:a9169 :a9169 :a9169. +:a9170 :a9170 :a9170. +:a9171 :a9171 :a9171. +:a9172 :a9172 :a9172. +:a9173 :a9173 :a9173. +:a9174 :a9174 :a9174. +:a9175 :a9175 :a9175. +:a9176 :a9176 :a9176. +:a9177 :a9177 :a9177. +:a9178 :a9178 :a9178. +:a9179 :a9179 :a9179. +:a9180 :a9180 :a9180. +:a9181 :a9181 :a9181. +:a9182 :a9182 :a9182. +:a9183 :a9183 :a9183. +:a9184 :a9184 :a9184. +:a9185 :a9185 :a9185. +:a9186 :a9186 :a9186. +:a9187 :a9187 :a9187. +:a9188 :a9188 :a9188. +:a9189 :a9189 :a9189. +:a9190 :a9190 :a9190. +:a9191 :a9191 :a9191. +:a9192 :a9192 :a9192. +:a9193 :a9193 :a9193. +:a9194 :a9194 :a9194. +:a9195 :a9195 :a9195. +:a9196 :a9196 :a9196. +:a9197 :a9197 :a9197. +:a9198 :a9198 :a9198. +:a9199 :a9199 :a9199. +:a9200 :a9200 :a9200. +:a9201 :a9201 :a9201. +:a9202 :a9202 :a9202. +:a9203 :a9203 :a9203. +:a9204 :a9204 :a9204. +:a9205 :a9205 :a9205. +:a9206 :a9206 :a9206. +:a9207 :a9207 :a9207. +:a9208 :a9208 :a9208. +:a9209 :a9209 :a9209. +:a9210 :a9210 :a9210. +:a9211 :a9211 :a9211. +:a9212 :a9212 :a9212. +:a9213 :a9213 :a9213. +:a9214 :a9214 :a9214. +:a9215 :a9215 :a9215. +:a9216 :a9216 :a9216. +:a9217 :a9217 :a9217. +:a9218 :a9218 :a9218. +:a9219 :a9219 :a9219. +:a9220 :a9220 :a9220. +:a9221 :a9221 :a9221. +:a9222 :a9222 :a9222. +:a9223 :a9223 :a9223. +:a9224 :a9224 :a9224. +:a9225 :a9225 :a9225. +:a9226 :a9226 :a9226. +:a9227 :a9227 :a9227. +:a9228 :a9228 :a9228. +:a9229 :a9229 :a9229. +:a9230 :a9230 :a9230. +:a9231 :a9231 :a9231. +:a9232 :a9232 :a9232. +:a9233 :a9233 :a9233. +:a9234 :a9234 :a9234. +:a9235 :a9235 :a9235. +:a9236 :a9236 :a9236. +:a9237 :a9237 :a9237. +:a9238 :a9238 :a9238. +:a9239 :a9239 :a9239. +:a9240 :a9240 :a9240. +:a9241 :a9241 :a9241. +:a9242 :a9242 :a9242. +:a9243 :a9243 :a9243. +:a9244 :a9244 :a9244. +:a9245 :a9245 :a9245. +:a9246 :a9246 :a9246. +:a9247 :a9247 :a9247. +:a9248 :a9248 :a9248. +:a9249 :a9249 :a9249. +:a9250 :a9250 :a9250. +:a9251 :a9251 :a9251. +:a9252 :a9252 :a9252. +:a9253 :a9253 :a9253. +:a9254 :a9254 :a9254. +:a9255 :a9255 :a9255. +:a9256 :a9256 :a9256. +:a9257 :a9257 :a9257. +:a9258 :a9258 :a9258. +:a9259 :a9259 :a9259. +:a9260 :a9260 :a9260. +:a9261 :a9261 :a9261. +:a9262 :a9262 :a9262. +:a9263 :a9263 :a9263. +:a9264 :a9264 :a9264. +:a9265 :a9265 :a9265. +:a9266 :a9266 :a9266. +:a9267 :a9267 :a9267. +:a9268 :a9268 :a9268. +:a9269 :a9269 :a9269. +:a9270 :a9270 :a9270. +:a9271 :a9271 :a9271. +:a9272 :a9272 :a9272. +:a9273 :a9273 :a9273. +:a9274 :a9274 :a9274. +:a9275 :a9275 :a9275. +:a9276 :a9276 :a9276. +:a9277 :a9277 :a9277. +:a9278 :a9278 :a9278. +:a9279 :a9279 :a9279. +:a9280 :a9280 :a9280. +:a9281 :a9281 :a9281. +:a9282 :a9282 :a9282. +:a9283 :a9283 :a9283. +:a9284 :a9284 :a9284. +:a9285 :a9285 :a9285. +:a9286 :a9286 :a9286. +:a9287 :a9287 :a9287. +:a9288 :a9288 :a9288. +:a9289 :a9289 :a9289. +:a9290 :a9290 :a9290. +:a9291 :a9291 :a9291. +:a9292 :a9292 :a9292. +:a9293 :a9293 :a9293. +:a9294 :a9294 :a9294. +:a9295 :a9295 :a9295. +:a9296 :a9296 :a9296. +:a9297 :a9297 :a9297. +:a9298 :a9298 :a9298. +:a9299 :a9299 :a9299. +:a9300 :a9300 :a9300. +:a9301 :a9301 :a9301. +:a9302 :a9302 :a9302. +:a9303 :a9303 :a9303. +:a9304 :a9304 :a9304. +:a9305 :a9305 :a9305. +:a9306 :a9306 :a9306. +:a9307 :a9307 :a9307. +:a9308 :a9308 :a9308. +:a9309 :a9309 :a9309. +:a9310 :a9310 :a9310. +:a9311 :a9311 :a9311. +:a9312 :a9312 :a9312. +:a9313 :a9313 :a9313. +:a9314 :a9314 :a9314. +:a9315 :a9315 :a9315. +:a9316 :a9316 :a9316. +:a9317 :a9317 :a9317. +:a9318 :a9318 :a9318. +:a9319 :a9319 :a9319. +:a9320 :a9320 :a9320. +:a9321 :a9321 :a9321. +:a9322 :a9322 :a9322. +:a9323 :a9323 :a9323. +:a9324 :a9324 :a9324. +:a9325 :a9325 :a9325. +:a9326 :a9326 :a9326. +:a9327 :a9327 :a9327. +:a9328 :a9328 :a9328. +:a9329 :a9329 :a9329. +:a9330 :a9330 :a9330. +:a9331 :a9331 :a9331. +:a9332 :a9332 :a9332. +:a9333 :a9333 :a9333. +:a9334 :a9334 :a9334. +:a9335 :a9335 :a9335. +:a9336 :a9336 :a9336. +:a9337 :a9337 :a9337. +:a9338 :a9338 :a9338. +:a9339 :a9339 :a9339. +:a9340 :a9340 :a9340. +:a9341 :a9341 :a9341. +:a9342 :a9342 :a9342. +:a9343 :a9343 :a9343. +:a9344 :a9344 :a9344. +:a9345 :a9345 :a9345. +:a9346 :a9346 :a9346. +:a9347 :a9347 :a9347. +:a9348 :a9348 :a9348. +:a9349 :a9349 :a9349. +:a9350 :a9350 :a9350. +:a9351 :a9351 :a9351. +:a9352 :a9352 :a9352. +:a9353 :a9353 :a9353. +:a9354 :a9354 :a9354. +:a9355 :a9355 :a9355. +:a9356 :a9356 :a9356. +:a9357 :a9357 :a9357. +:a9358 :a9358 :a9358. +:a9359 :a9359 :a9359. +:a9360 :a9360 :a9360. +:a9361 :a9361 :a9361. +:a9362 :a9362 :a9362. +:a9363 :a9363 :a9363. +:a9364 :a9364 :a9364. +:a9365 :a9365 :a9365. +:a9366 :a9366 :a9366. +:a9367 :a9367 :a9367. +:a9368 :a9368 :a9368. +:a9369 :a9369 :a9369. +:a9370 :a9370 :a9370. +:a9371 :a9371 :a9371. +:a9372 :a9372 :a9372. +:a9373 :a9373 :a9373. +:a9374 :a9374 :a9374. +:a9375 :a9375 :a9375. +:a9376 :a9376 :a9376. +:a9377 :a9377 :a9377. +:a9378 :a9378 :a9378. +:a9379 :a9379 :a9379. +:a9380 :a9380 :a9380. +:a9381 :a9381 :a9381. +:a9382 :a9382 :a9382. +:a9383 :a9383 :a9383. +:a9384 :a9384 :a9384. +:a9385 :a9385 :a9385. +:a9386 :a9386 :a9386. +:a9387 :a9387 :a9387. +:a9388 :a9388 :a9388. +:a9389 :a9389 :a9389. +:a9390 :a9390 :a9390. +:a9391 :a9391 :a9391. +:a9392 :a9392 :a9392. +:a9393 :a9393 :a9393. +:a9394 :a9394 :a9394. +:a9395 :a9395 :a9395. +:a9396 :a9396 :a9396. +:a9397 :a9397 :a9397. +:a9398 :a9398 :a9398. +:a9399 :a9399 :a9399. +:a9400 :a9400 :a9400. +:a9401 :a9401 :a9401. +:a9402 :a9402 :a9402. +:a9403 :a9403 :a9403. +:a9404 :a9404 :a9404. +:a9405 :a9405 :a9405. +:a9406 :a9406 :a9406. +:a9407 :a9407 :a9407. +:a9408 :a9408 :a9408. +:a9409 :a9409 :a9409. +:a9410 :a9410 :a9410. +:a9411 :a9411 :a9411. +:a9412 :a9412 :a9412. +:a9413 :a9413 :a9413. +:a9414 :a9414 :a9414. +:a9415 :a9415 :a9415. +:a9416 :a9416 :a9416. +:a9417 :a9417 :a9417. +:a9418 :a9418 :a9418. +:a9419 :a9419 :a9419. +:a9420 :a9420 :a9420. +:a9421 :a9421 :a9421. +:a9422 :a9422 :a9422. +:a9423 :a9423 :a9423. +:a9424 :a9424 :a9424. +:a9425 :a9425 :a9425. +:a9426 :a9426 :a9426. +:a9427 :a9427 :a9427. +:a9428 :a9428 :a9428. +:a9429 :a9429 :a9429. +:a9430 :a9430 :a9430. +:a9431 :a9431 :a9431. +:a9432 :a9432 :a9432. +:a9433 :a9433 :a9433. +:a9434 :a9434 :a9434. +:a9435 :a9435 :a9435. +:a9436 :a9436 :a9436. +:a9437 :a9437 :a9437. +:a9438 :a9438 :a9438. +:a9439 :a9439 :a9439. +:a9440 :a9440 :a9440. +:a9441 :a9441 :a9441. +:a9442 :a9442 :a9442. +:a9443 :a9443 :a9443. +:a9444 :a9444 :a9444. +:a9445 :a9445 :a9445. +:a9446 :a9446 :a9446. +:a9447 :a9447 :a9447. +:a9448 :a9448 :a9448. +:a9449 :a9449 :a9449. +:a9450 :a9450 :a9450. +:a9451 :a9451 :a9451. +:a9452 :a9452 :a9452. +:a9453 :a9453 :a9453. +:a9454 :a9454 :a9454. +:a9455 :a9455 :a9455. +:a9456 :a9456 :a9456. +:a9457 :a9457 :a9457. +:a9458 :a9458 :a9458. +:a9459 :a9459 :a9459. +:a9460 :a9460 :a9460. +:a9461 :a9461 :a9461. +:a9462 :a9462 :a9462. +:a9463 :a9463 :a9463. +:a9464 :a9464 :a9464. +:a9465 :a9465 :a9465. +:a9466 :a9466 :a9466. +:a9467 :a9467 :a9467. +:a9468 :a9468 :a9468. +:a9469 :a9469 :a9469. +:a9470 :a9470 :a9470. +:a9471 :a9471 :a9471. +:a9472 :a9472 :a9472. +:a9473 :a9473 :a9473. +:a9474 :a9474 :a9474. +:a9475 :a9475 :a9475. +:a9476 :a9476 :a9476. +:a9477 :a9477 :a9477. +:a9478 :a9478 :a9478. +:a9479 :a9479 :a9479. +:a9480 :a9480 :a9480. +:a9481 :a9481 :a9481. +:a9482 :a9482 :a9482. +:a9483 :a9483 :a9483. +:a9484 :a9484 :a9484. +:a9485 :a9485 :a9485. +:a9486 :a9486 :a9486. +:a9487 :a9487 :a9487. +:a9488 :a9488 :a9488. +:a9489 :a9489 :a9489. +:a9490 :a9490 :a9490. +:a9491 :a9491 :a9491. +:a9492 :a9492 :a9492. +:a9493 :a9493 :a9493. +:a9494 :a9494 :a9494. +:a9495 :a9495 :a9495. +:a9496 :a9496 :a9496. +:a9497 :a9497 :a9497. +:a9498 :a9498 :a9498. +:a9499 :a9499 :a9499. +:a9500 :a9500 :a9500. +:a9501 :a9501 :a9501. +:a9502 :a9502 :a9502. +:a9503 :a9503 :a9503. +:a9504 :a9504 :a9504. +:a9505 :a9505 :a9505. +:a9506 :a9506 :a9506. +:a9507 :a9507 :a9507. +:a9508 :a9508 :a9508. +:a9509 :a9509 :a9509. +:a9510 :a9510 :a9510. +:a9511 :a9511 :a9511. +:a9512 :a9512 :a9512. +:a9513 :a9513 :a9513. +:a9514 :a9514 :a9514. +:a9515 :a9515 :a9515. +:a9516 :a9516 :a9516. +:a9517 :a9517 :a9517. +:a9518 :a9518 :a9518. +:a9519 :a9519 :a9519. +:a9520 :a9520 :a9520. +:a9521 :a9521 :a9521. +:a9522 :a9522 :a9522. +:a9523 :a9523 :a9523. +:a9524 :a9524 :a9524. +:a9525 :a9525 :a9525. +:a9526 :a9526 :a9526. +:a9527 :a9527 :a9527. +:a9528 :a9528 :a9528. +:a9529 :a9529 :a9529. +:a9530 :a9530 :a9530. +:a9531 :a9531 :a9531. +:a9532 :a9532 :a9532. +:a9533 :a9533 :a9533. +:a9534 :a9534 :a9534. +:a9535 :a9535 :a9535. +:a9536 :a9536 :a9536. +:a9537 :a9537 :a9537. +:a9538 :a9538 :a9538. +:a9539 :a9539 :a9539. +:a9540 :a9540 :a9540. +:a9541 :a9541 :a9541. +:a9542 :a9542 :a9542. +:a9543 :a9543 :a9543. +:a9544 :a9544 :a9544. +:a9545 :a9545 :a9545. +:a9546 :a9546 :a9546. +:a9547 :a9547 :a9547. +:a9548 :a9548 :a9548. +:a9549 :a9549 :a9549. +:a9550 :a9550 :a9550. +:a9551 :a9551 :a9551. +:a9552 :a9552 :a9552. +:a9553 :a9553 :a9553. +:a9554 :a9554 :a9554. +:a9555 :a9555 :a9555. +:a9556 :a9556 :a9556. +:a9557 :a9557 :a9557. +:a9558 :a9558 :a9558. +:a9559 :a9559 :a9559. +:a9560 :a9560 :a9560. +:a9561 :a9561 :a9561. +:a9562 :a9562 :a9562. +:a9563 :a9563 :a9563. +:a9564 :a9564 :a9564. +:a9565 :a9565 :a9565. +:a9566 :a9566 :a9566. +:a9567 :a9567 :a9567. +:a9568 :a9568 :a9568. +:a9569 :a9569 :a9569. +:a9570 :a9570 :a9570. +:a9571 :a9571 :a9571. +:a9572 :a9572 :a9572. +:a9573 :a9573 :a9573. +:a9574 :a9574 :a9574. +:a9575 :a9575 :a9575. +:a9576 :a9576 :a9576. +:a9577 :a9577 :a9577. +:a9578 :a9578 :a9578. +:a9579 :a9579 :a9579. +:a9580 :a9580 :a9580. +:a9581 :a9581 :a9581. +:a9582 :a9582 :a9582. +:a9583 :a9583 :a9583. +:a9584 :a9584 :a9584. +:a9585 :a9585 :a9585. +:a9586 :a9586 :a9586. +:a9587 :a9587 :a9587. +:a9588 :a9588 :a9588. +:a9589 :a9589 :a9589. +:a9590 :a9590 :a9590. +:a9591 :a9591 :a9591. +:a9592 :a9592 :a9592. +:a9593 :a9593 :a9593. +:a9594 :a9594 :a9594. +:a9595 :a9595 :a9595. +:a9596 :a9596 :a9596. +:a9597 :a9597 :a9597. +:a9598 :a9598 :a9598. +:a9599 :a9599 :a9599. +:a9600 :a9600 :a9600. +:a9601 :a9601 :a9601. +:a9602 :a9602 :a9602. +:a9603 :a9603 :a9603. +:a9604 :a9604 :a9604. +:a9605 :a9605 :a9605. +:a9606 :a9606 :a9606. +:a9607 :a9607 :a9607. +:a9608 :a9608 :a9608. +:a9609 :a9609 :a9609. +:a9610 :a9610 :a9610. +:a9611 :a9611 :a9611. +:a9612 :a9612 :a9612. +:a9613 :a9613 :a9613. +:a9614 :a9614 :a9614. +:a9615 :a9615 :a9615. +:a9616 :a9616 :a9616. +:a9617 :a9617 :a9617. +:a9618 :a9618 :a9618. +:a9619 :a9619 :a9619. +:a9620 :a9620 :a9620. +:a9621 :a9621 :a9621. +:a9622 :a9622 :a9622. +:a9623 :a9623 :a9623. +:a9624 :a9624 :a9624. +:a9625 :a9625 :a9625. +:a9626 :a9626 :a9626. +:a9627 :a9627 :a9627. +:a9628 :a9628 :a9628. +:a9629 :a9629 :a9629. +:a9630 :a9630 :a9630. +:a9631 :a9631 :a9631. +:a9632 :a9632 :a9632. +:a9633 :a9633 :a9633. +:a9634 :a9634 :a9634. +:a9635 :a9635 :a9635. +:a9636 :a9636 :a9636. +:a9637 :a9637 :a9637. +:a9638 :a9638 :a9638. +:a9639 :a9639 :a9639. +:a9640 :a9640 :a9640. +:a9641 :a9641 :a9641. +:a9642 :a9642 :a9642. +:a9643 :a9643 :a9643. +:a9644 :a9644 :a9644. +:a9645 :a9645 :a9645. +:a9646 :a9646 :a9646. +:a9647 :a9647 :a9647. +:a9648 :a9648 :a9648. +:a9649 :a9649 :a9649. +:a9650 :a9650 :a9650. +:a9651 :a9651 :a9651. +:a9652 :a9652 :a9652. +:a9653 :a9653 :a9653. +:a9654 :a9654 :a9654. +:a9655 :a9655 :a9655. +:a9656 :a9656 :a9656. +:a9657 :a9657 :a9657. +:a9658 :a9658 :a9658. +:a9659 :a9659 :a9659. +:a9660 :a9660 :a9660. +:a9661 :a9661 :a9661. +:a9662 :a9662 :a9662. +:a9663 :a9663 :a9663. +:a9664 :a9664 :a9664. +:a9665 :a9665 :a9665. +:a9666 :a9666 :a9666. +:a9667 :a9667 :a9667. +:a9668 :a9668 :a9668. +:a9669 :a9669 :a9669. +:a9670 :a9670 :a9670. +:a9671 :a9671 :a9671. +:a9672 :a9672 :a9672. +:a9673 :a9673 :a9673. +:a9674 :a9674 :a9674. +:a9675 :a9675 :a9675. +:a9676 :a9676 :a9676. +:a9677 :a9677 :a9677. +:a9678 :a9678 :a9678. +:a9679 :a9679 :a9679. +:a9680 :a9680 :a9680. +:a9681 :a9681 :a9681. +:a9682 :a9682 :a9682. +:a9683 :a9683 :a9683. +:a9684 :a9684 :a9684. +:a9685 :a9685 :a9685. +:a9686 :a9686 :a9686. +:a9687 :a9687 :a9687. +:a9688 :a9688 :a9688. +:a9689 :a9689 :a9689. +:a9690 :a9690 :a9690. +:a9691 :a9691 :a9691. +:a9692 :a9692 :a9692. +:a9693 :a9693 :a9693. +:a9694 :a9694 :a9694. +:a9695 :a9695 :a9695. +:a9696 :a9696 :a9696. +:a9697 :a9697 :a9697. +:a9698 :a9698 :a9698. +:a9699 :a9699 :a9699. +:a9700 :a9700 :a9700. +:a9701 :a9701 :a9701. +:a9702 :a9702 :a9702. +:a9703 :a9703 :a9703. +:a9704 :a9704 :a9704. +:a9705 :a9705 :a9705. +:a9706 :a9706 :a9706. +:a9707 :a9707 :a9707. +:a9708 :a9708 :a9708. +:a9709 :a9709 :a9709. +:a9710 :a9710 :a9710. +:a9711 :a9711 :a9711. +:a9712 :a9712 :a9712. +:a9713 :a9713 :a9713. +:a9714 :a9714 :a9714. +:a9715 :a9715 :a9715. +:a9716 :a9716 :a9716. +:a9717 :a9717 :a9717. +:a9718 :a9718 :a9718. +:a9719 :a9719 :a9719. +:a9720 :a9720 :a9720. +:a9721 :a9721 :a9721. +:a9722 :a9722 :a9722. +:a9723 :a9723 :a9723. +:a9724 :a9724 :a9724. +:a9725 :a9725 :a9725. +:a9726 :a9726 :a9726. +:a9727 :a9727 :a9727. +:a9728 :a9728 :a9728. +:a9729 :a9729 :a9729. +:a9730 :a9730 :a9730. +:a9731 :a9731 :a9731. +:a9732 :a9732 :a9732. +:a9733 :a9733 :a9733. +:a9734 :a9734 :a9734. +:a9735 :a9735 :a9735. +:a9736 :a9736 :a9736. +:a9737 :a9737 :a9737. +:a9738 :a9738 :a9738. +:a9739 :a9739 :a9739. +:a9740 :a9740 :a9740. +:a9741 :a9741 :a9741. +:a9742 :a9742 :a9742. +:a9743 :a9743 :a9743. +:a9744 :a9744 :a9744. +:a9745 :a9745 :a9745. +:a9746 :a9746 :a9746. +:a9747 :a9747 :a9747. +:a9748 :a9748 :a9748. +:a9749 :a9749 :a9749. +:a9750 :a9750 :a9750. +:a9751 :a9751 :a9751. +:a9752 :a9752 :a9752. +:a9753 :a9753 :a9753. +:a9754 :a9754 :a9754. +:a9755 :a9755 :a9755. +:a9756 :a9756 :a9756. +:a9757 :a9757 :a9757. +:a9758 :a9758 :a9758. +:a9759 :a9759 :a9759. +:a9760 :a9760 :a9760. +:a9761 :a9761 :a9761. +:a9762 :a9762 :a9762. +:a9763 :a9763 :a9763. +:a9764 :a9764 :a9764. +:a9765 :a9765 :a9765. +:a9766 :a9766 :a9766. +:a9767 :a9767 :a9767. +:a9768 :a9768 :a9768. +:a9769 :a9769 :a9769. +:a9770 :a9770 :a9770. +:a9771 :a9771 :a9771. +:a9772 :a9772 :a9772. +:a9773 :a9773 :a9773. +:a9774 :a9774 :a9774. +:a9775 :a9775 :a9775. +:a9776 :a9776 :a9776. +:a9777 :a9777 :a9777. +:a9778 :a9778 :a9778. +:a9779 :a9779 :a9779. +:a9780 :a9780 :a9780. +:a9781 :a9781 :a9781. +:a9782 :a9782 :a9782. +:a9783 :a9783 :a9783. +:a9784 :a9784 :a9784. +:a9785 :a9785 :a9785. +:a9786 :a9786 :a9786. +:a9787 :a9787 :a9787. +:a9788 :a9788 :a9788. +:a9789 :a9789 :a9789. +:a9790 :a9790 :a9790. +:a9791 :a9791 :a9791. +:a9792 :a9792 :a9792. +:a9793 :a9793 :a9793. +:a9794 :a9794 :a9794. +:a9795 :a9795 :a9795. +:a9796 :a9796 :a9796. +:a9797 :a9797 :a9797. +:a9798 :a9798 :a9798. +:a9799 :a9799 :a9799. +:a9800 :a9800 :a9800. +:a9801 :a9801 :a9801. +:a9802 :a9802 :a9802. +:a9803 :a9803 :a9803. +:a9804 :a9804 :a9804. +:a9805 :a9805 :a9805. +:a9806 :a9806 :a9806. +:a9807 :a9807 :a9807. +:a9808 :a9808 :a9808. +:a9809 :a9809 :a9809. +:a9810 :a9810 :a9810. +:a9811 :a9811 :a9811. +:a9812 :a9812 :a9812. +:a9813 :a9813 :a9813. +:a9814 :a9814 :a9814. +:a9815 :a9815 :a9815. +:a9816 :a9816 :a9816. +:a9817 :a9817 :a9817. +:a9818 :a9818 :a9818. +:a9819 :a9819 :a9819. +:a9820 :a9820 :a9820. +:a9821 :a9821 :a9821. +:a9822 :a9822 :a9822. +:a9823 :a9823 :a9823. +:a9824 :a9824 :a9824. +:a9825 :a9825 :a9825. +:a9826 :a9826 :a9826. +:a9827 :a9827 :a9827. +:a9828 :a9828 :a9828. +:a9829 :a9829 :a9829. +:a9830 :a9830 :a9830. +:a9831 :a9831 :a9831. +:a9832 :a9832 :a9832. +:a9833 :a9833 :a9833. +:a9834 :a9834 :a9834. +:a9835 :a9835 :a9835. +:a9836 :a9836 :a9836. +:a9837 :a9837 :a9837. +:a9838 :a9838 :a9838. +:a9839 :a9839 :a9839. +:a9840 :a9840 :a9840. +:a9841 :a9841 :a9841. +:a9842 :a9842 :a9842. +:a9843 :a9843 :a9843. +:a9844 :a9844 :a9844. +:a9845 :a9845 :a9845. +:a9846 :a9846 :a9846. +:a9847 :a9847 :a9847. +:a9848 :a9848 :a9848. +:a9849 :a9849 :a9849. +:a9850 :a9850 :a9850. +:a9851 :a9851 :a9851. +:a9852 :a9852 :a9852. +:a9853 :a9853 :a9853. +:a9854 :a9854 :a9854. +:a9855 :a9855 :a9855. +:a9856 :a9856 :a9856. +:a9857 :a9857 :a9857. +:a9858 :a9858 :a9858. +:a9859 :a9859 :a9859. +:a9860 :a9860 :a9860. +:a9861 :a9861 :a9861. +:a9862 :a9862 :a9862. +:a9863 :a9863 :a9863. +:a9864 :a9864 :a9864. +:a9865 :a9865 :a9865. +:a9866 :a9866 :a9866. +:a9867 :a9867 :a9867. +:a9868 :a9868 :a9868. +:a9869 :a9869 :a9869. +:a9870 :a9870 :a9870. +:a9871 :a9871 :a9871. +:a9872 :a9872 :a9872. +:a9873 :a9873 :a9873. +:a9874 :a9874 :a9874. +:a9875 :a9875 :a9875. +:a9876 :a9876 :a9876. +:a9877 :a9877 :a9877. +:a9878 :a9878 :a9878. +:a9879 :a9879 :a9879. +:a9880 :a9880 :a9880. +:a9881 :a9881 :a9881. +:a9882 :a9882 :a9882. +:a9883 :a9883 :a9883. +:a9884 :a9884 :a9884. +:a9885 :a9885 :a9885. +:a9886 :a9886 :a9886. +:a9887 :a9887 :a9887. +:a9888 :a9888 :a9888. +:a9889 :a9889 :a9889. +:a9890 :a9890 :a9890. +:a9891 :a9891 :a9891. +:a9892 :a9892 :a9892. +:a9893 :a9893 :a9893. +:a9894 :a9894 :a9894. +:a9895 :a9895 :a9895. +:a9896 :a9896 :a9896. +:a9897 :a9897 :a9897. +:a9898 :a9898 :a9898. +:a9899 :a9899 :a9899. +:a9900 :a9900 :a9900. +:a9901 :a9901 :a9901. +:a9902 :a9902 :a9902. +:a9903 :a9903 :a9903. +:a9904 :a9904 :a9904. +:a9905 :a9905 :a9905. +:a9906 :a9906 :a9906. +:a9907 :a9907 :a9907. +:a9908 :a9908 :a9908. +:a9909 :a9909 :a9909. +:a9910 :a9910 :a9910. +:a9911 :a9911 :a9911. +:a9912 :a9912 :a9912. +:a9913 :a9913 :a9913. +:a9914 :a9914 :a9914. +:a9915 :a9915 :a9915. +:a9916 :a9916 :a9916. +:a9917 :a9917 :a9917. +:a9918 :a9918 :a9918. +:a9919 :a9919 :a9919. +:a9920 :a9920 :a9920. +:a9921 :a9921 :a9921. +:a9922 :a9922 :a9922. +:a9923 :a9923 :a9923. +:a9924 :a9924 :a9924. +:a9925 :a9925 :a9925. +:a9926 :a9926 :a9926. +:a9927 :a9927 :a9927. +:a9928 :a9928 :a9928. +:a9929 :a9929 :a9929. +:a9930 :a9930 :a9930. +:a9931 :a9931 :a9931. +:a9932 :a9932 :a9932. +:a9933 :a9933 :a9933. +:a9934 :a9934 :a9934. +:a9935 :a9935 :a9935. +:a9936 :a9936 :a9936. +:a9937 :a9937 :a9937. +:a9938 :a9938 :a9938. +:a9939 :a9939 :a9939. +:a9940 :a9940 :a9940. +:a9941 :a9941 :a9941. +:a9942 :a9942 :a9942. +:a9943 :a9943 :a9943. +:a9944 :a9944 :a9944. +:a9945 :a9945 :a9945. +:a9946 :a9946 :a9946. +:a9947 :a9947 :a9947. +:a9948 :a9948 :a9948. +:a9949 :a9949 :a9949. +:a9950 :a9950 :a9950. +:a9951 :a9951 :a9951. +:a9952 :a9952 :a9952. +:a9953 :a9953 :a9953. +:a9954 :a9954 :a9954. +:a9955 :a9955 :a9955. +:a9956 :a9956 :a9956. +:a9957 :a9957 :a9957. +:a9958 :a9958 :a9958. +:a9959 :a9959 :a9959. +:a9960 :a9960 :a9960. +:a9961 :a9961 :a9961. +:a9962 :a9962 :a9962. +:a9963 :a9963 :a9963. +:a9964 :a9964 :a9964. +:a9965 :a9965 :a9965. +:a9966 :a9966 :a9966. +:a9967 :a9967 :a9967. +:a9968 :a9968 :a9968. +:a9969 :a9969 :a9969. +:a9970 :a9970 :a9970. +:a9971 :a9971 :a9971. +:a9972 :a9972 :a9972. +:a9973 :a9973 :a9973. +:a9974 :a9974 :a9974. +:a9975 :a9975 :a9975. +:a9976 :a9976 :a9976. +:a9977 :a9977 :a9977. +:a9978 :a9978 :a9978. +:a9979 :a9979 :a9979. +:a9980 :a9980 :a9980. +:a9981 :a9981 :a9981. +:a9982 :a9982 :a9982. +:a9983 :a9983 :a9983. +:a9984 :a9984 :a9984. +:a9985 :a9985 :a9985. +:a9986 :a9986 :a9986. +:a9987 :a9987 :a9987. +:a9988 :a9988 :a9988. +:a9989 :a9989 :a9989. +:a9990 :a9990 :a9990. +:a9991 :a9991 :a9991. +:a9992 :a9992 :a9992. +:a9993 :a9993 :a9993. +:a9994 :a9994 :a9994. +:a9995 :a9995 :a9995. +:a9996 :a9996 :a9996. +:a9997 :a9997 :a9997. +:a9998 :a9998 :a9998. +:a9999 :a9999 :a9999. +:a10000 :a10000 :a10000. diff --git a/source/libs/lilv/sord-0.10.4/tests/test-15.out b/source/libs/lilv/sord-0.10.4/tests/test-15.out new file mode 100644 index 000000000..c0604b3b6 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-15.out @@ -0,0 +1,10000 @@ + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-15.ttl b/source/libs/lilv/sord-0.10.4/tests/test-15.ttl new file mode 100644 index 000000000..10df17dfa --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-15.ttl @@ -0,0 +1,3 @@ +# 10000 triple objects (10000 triples) more than the default Bison stack size +@prefix : . +:a :b :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9, :c10, :c11, :c12, :c13, :c14, :c15, :c16, :c17, :c18, :c19, :c20, :c21, :c22, :c23, :c24, :c25, :c26, :c27, :c28, :c29, :c30, :c31, :c32, :c33, :c34, :c35, :c36, :c37, :c38, :c39, :c40, :c41, :c42, :c43, :c44, :c45, :c46, :c47, :c48, :c49, :c50, :c51, :c52, :c53, :c54, :c55, :c56, :c57, :c58, :c59, :c60, :c61, :c62, :c63, :c64, :c65, :c66, :c67, :c68, :c69, :c70, :c71, :c72, :c73, :c74, :c75, :c76, :c77, :c78, :c79, :c80, :c81, :c82, :c83, :c84, :c85, :c86, :c87, :c88, :c89, :c90, :c91, :c92, :c93, :c94, :c95, :c96, :c97, :c98, :c99, :c100, :c101, :c102, :c103, :c104, :c105, :c106, :c107, :c108, :c109, :c110, :c111, :c112, :c113, :c114, :c115, :c116, :c117, :c118, :c119, :c120, :c121, :c122, :c123, :c124, :c125, :c126, :c127, :c128, :c129, :c130, :c131, :c132, :c133, :c134, :c135, :c136, :c137, :c138, :c139, :c140, :c141, :c142, :c143, :c144, :c145, :c146, :c147, :c148, :c149, :c150, :c151, :c152, :c153, :c154, :c155, :c156, :c157, :c158, :c159, :c160, :c161, :c162, :c163, :c164, :c165, :c166, :c167, :c168, :c169, :c170, :c171, :c172, :c173, :c174, :c175, :c176, :c177, :c178, :c179, :c180, :c181, :c182, :c183, :c184, :c185, :c186, :c187, :c188, :c189, :c190, :c191, :c192, :c193, :c194, :c195, :c196, :c197, :c198, :c199, :c200, :c201, :c202, :c203, :c204, :c205, :c206, :c207, :c208, :c209, :c210, :c211, :c212, :c213, :c214, :c215, :c216, :c217, :c218, :c219, :c220, :c221, :c222, :c223, :c224, :c225, :c226, :c227, :c228, :c229, :c230, :c231, :c232, :c233, :c234, :c235, :c236, :c237, :c238, :c239, :c240, :c241, :c242, :c243, :c244, :c245, :c246, :c247, :c248, :c249, :c250, :c251, :c252, :c253, :c254, :c255, :c256, :c257, :c258, :c259, :c260, :c261, :c262, :c263, :c264, :c265, :c266, :c267, :c268, :c269, :c270, :c271, :c272, :c273, :c274, :c275, :c276, :c277, :c278, :c279, :c280, :c281, :c282, :c283, :c284, :c285, :c286, :c287, :c288, :c289, :c290, :c291, :c292, :c293, :c294, :c295, :c296, :c297, :c298, :c299, :c300, :c301, :c302, :c303, :c304, :c305, :c306, :c307, :c308, :c309, :c310, :c311, :c312, :c313, :c314, :c315, :c316, :c317, :c318, :c319, :c320, :c321, :c322, :c323, :c324, :c325, :c326, :c327, :c328, :c329, :c330, :c331, :c332, :c333, :c334, :c335, :c336, :c337, :c338, :c339, :c340, :c341, :c342, :c343, :c344, :c345, :c346, :c347, :c348, :c349, :c350, :c351, :c352, :c353, :c354, :c355, :c356, :c357, :c358, :c359, :c360, :c361, :c362, :c363, :c364, :c365, :c366, :c367, :c368, :c369, :c370, :c371, :c372, :c373, :c374, :c375, :c376, :c377, :c378, :c379, :c380, :c381, :c382, :c383, :c384, :c385, :c386, :c387, :c388, :c389, :c390, :c391, :c392, :c393, :c394, :c395, :c396, :c397, :c398, :c399, :c400, :c401, :c402, :c403, :c404, :c405, :c406, :c407, :c408, :c409, :c410, :c411, :c412, :c413, :c414, :c415, :c416, :c417, :c418, :c419, :c420, :c421, :c422, :c423, :c424, :c425, :c426, :c427, :c428, :c429, :c430, :c431, :c432, :c433, :c434, :c435, :c436, :c437, :c438, :c439, :c440, :c441, :c442, :c443, :c444, :c445, :c446, :c447, :c448, :c449, :c450, :c451, :c452, :c453, :c454, :c455, :c456, :c457, :c458, :c459, :c460, :c461, :c462, :c463, :c464, :c465, :c466, :c467, :c468, :c469, :c470, :c471, :c472, :c473, :c474, :c475, :c476, :c477, :c478, :c479, :c480, :c481, :c482, :c483, :c484, :c485, :c486, :c487, :c488, :c489, :c490, :c491, :c492, :c493, :c494, :c495, :c496, :c497, :c498, :c499, :c500, :c501, :c502, :c503, :c504, :c505, :c506, :c507, :c508, :c509, :c510, :c511, :c512, :c513, :c514, :c515, :c516, :c517, :c518, :c519, :c520, :c521, :c522, :c523, :c524, :c525, :c526, :c527, :c528, :c529, :c530, :c531, :c532, :c533, :c534, :c535, :c536, :c537, :c538, :c539, :c540, :c541, :c542, :c543, :c544, :c545, :c546, :c547, :c548, :c549, :c550, :c551, :c552, :c553, :c554, :c555, :c556, :c557, :c558, :c559, :c560, :c561, :c562, :c563, :c564, :c565, :c566, :c567, :c568, :c569, :c570, :c571, :c572, :c573, :c574, :c575, :c576, :c577, :c578, :c579, :c580, :c581, :c582, :c583, :c584, :c585, :c586, :c587, :c588, :c589, :c590, :c591, :c592, :c593, :c594, :c595, :c596, :c597, :c598, :c599, :c600, :c601, :c602, :c603, :c604, :c605, :c606, :c607, :c608, :c609, :c610, :c611, :c612, :c613, :c614, :c615, :c616, :c617, :c618, :c619, :c620, :c621, :c622, :c623, :c624, :c625, :c626, :c627, :c628, :c629, :c630, :c631, :c632, :c633, :c634, :c635, :c636, :c637, :c638, :c639, :c640, :c641, :c642, :c643, :c644, :c645, :c646, :c647, :c648, :c649, :c650, :c651, :c652, :c653, :c654, :c655, :c656, :c657, :c658, :c659, :c660, :c661, :c662, :c663, :c664, :c665, :c666, :c667, :c668, :c669, :c670, :c671, :c672, :c673, :c674, :c675, :c676, :c677, :c678, :c679, :c680, :c681, :c682, :c683, :c684, :c685, :c686, :c687, :c688, :c689, :c690, :c691, :c692, :c693, :c694, :c695, :c696, :c697, :c698, :c699, :c700, :c701, :c702, :c703, :c704, :c705, :c706, :c707, :c708, :c709, :c710, :c711, :c712, :c713, :c714, :c715, :c716, :c717, :c718, :c719, :c720, :c721, :c722, :c723, :c724, :c725, :c726, :c727, :c728, :c729, :c730, :c731, :c732, :c733, :c734, :c735, :c736, :c737, :c738, :c739, :c740, :c741, :c742, :c743, :c744, :c745, :c746, :c747, :c748, :c749, :c750, :c751, :c752, :c753, :c754, :c755, :c756, :c757, :c758, :c759, :c760, :c761, :c762, :c763, :c764, :c765, :c766, :c767, :c768, :c769, :c770, :c771, :c772, :c773, :c774, :c775, :c776, :c777, :c778, :c779, :c780, :c781, :c782, :c783, :c784, :c785, :c786, :c787, :c788, :c789, :c790, :c791, :c792, :c793, :c794, :c795, :c796, :c797, :c798, :c799, :c800, :c801, :c802, :c803, :c804, :c805, :c806, :c807, :c808, :c809, :c810, :c811, :c812, :c813, :c814, :c815, :c816, :c817, :c818, :c819, :c820, :c821, :c822, :c823, :c824, :c825, :c826, :c827, :c828, :c829, :c830, :c831, :c832, :c833, :c834, :c835, :c836, :c837, :c838, :c839, :c840, :c841, :c842, :c843, :c844, :c845, :c846, :c847, :c848, :c849, :c850, :c851, :c852, :c853, :c854, :c855, :c856, :c857, :c858, :c859, :c860, :c861, :c862, :c863, :c864, :c865, :c866, :c867, :c868, :c869, :c870, :c871, :c872, :c873, :c874, :c875, :c876, :c877, :c878, :c879, :c880, :c881, :c882, :c883, :c884, :c885, :c886, :c887, :c888, :c889, :c890, :c891, :c892, :c893, :c894, :c895, :c896, :c897, :c898, :c899, :c900, :c901, :c902, :c903, :c904, :c905, :c906, :c907, :c908, :c909, :c910, :c911, :c912, :c913, :c914, :c915, :c916, :c917, :c918, :c919, :c920, :c921, :c922, :c923, :c924, :c925, :c926, :c927, :c928, :c929, :c930, :c931, :c932, :c933, :c934, :c935, :c936, :c937, :c938, :c939, :c940, :c941, :c942, :c943, :c944, :c945, :c946, :c947, :c948, :c949, :c950, :c951, :c952, :c953, :c954, :c955, :c956, :c957, :c958, :c959, :c960, :c961, :c962, :c963, :c964, :c965, :c966, :c967, :c968, :c969, :c970, :c971, :c972, :c973, :c974, :c975, :c976, :c977, :c978, :c979, :c980, :c981, :c982, :c983, :c984, :c985, :c986, :c987, :c988, :c989, :c990, :c991, :c992, :c993, :c994, :c995, :c996, :c997, :c998, :c999, :c1000, :c1001, :c1002, :c1003, :c1004, :c1005, :c1006, :c1007, :c1008, :c1009, :c1010, :c1011, :c1012, :c1013, :c1014, :c1015, :c1016, :c1017, :c1018, :c1019, :c1020, :c1021, :c1022, :c1023, :c1024, :c1025, :c1026, :c1027, :c1028, :c1029, :c1030, :c1031, :c1032, :c1033, :c1034, :c1035, :c1036, :c1037, :c1038, :c1039, :c1040, :c1041, :c1042, :c1043, :c1044, :c1045, :c1046, :c1047, :c1048, :c1049, :c1050, :c1051, :c1052, :c1053, :c1054, :c1055, :c1056, :c1057, :c1058, :c1059, :c1060, :c1061, :c1062, :c1063, :c1064, :c1065, :c1066, :c1067, :c1068, :c1069, :c1070, :c1071, :c1072, :c1073, :c1074, :c1075, :c1076, :c1077, :c1078, :c1079, :c1080, :c1081, :c1082, :c1083, :c1084, :c1085, :c1086, :c1087, :c1088, :c1089, :c1090, :c1091, :c1092, :c1093, :c1094, :c1095, :c1096, :c1097, :c1098, :c1099, :c1100, :c1101, :c1102, :c1103, :c1104, :c1105, :c1106, :c1107, :c1108, :c1109, :c1110, :c1111, :c1112, :c1113, :c1114, :c1115, :c1116, :c1117, :c1118, :c1119, :c1120, :c1121, :c1122, :c1123, :c1124, :c1125, :c1126, :c1127, :c1128, :c1129, :c1130, :c1131, :c1132, :c1133, :c1134, :c1135, :c1136, :c1137, :c1138, :c1139, :c1140, :c1141, :c1142, :c1143, :c1144, :c1145, :c1146, :c1147, :c1148, :c1149, :c1150, :c1151, :c1152, :c1153, :c1154, :c1155, :c1156, :c1157, :c1158, :c1159, :c1160, :c1161, :c1162, :c1163, :c1164, :c1165, :c1166, :c1167, :c1168, :c1169, :c1170, :c1171, :c1172, :c1173, :c1174, :c1175, :c1176, :c1177, :c1178, :c1179, :c1180, :c1181, :c1182, :c1183, :c1184, :c1185, :c1186, :c1187, :c1188, :c1189, :c1190, :c1191, :c1192, :c1193, :c1194, :c1195, :c1196, :c1197, :c1198, :c1199, :c1200, :c1201, :c1202, :c1203, :c1204, :c1205, :c1206, :c1207, :c1208, :c1209, :c1210, :c1211, :c1212, :c1213, :c1214, :c1215, :c1216, :c1217, :c1218, :c1219, :c1220, :c1221, :c1222, :c1223, :c1224, :c1225, :c1226, :c1227, :c1228, :c1229, :c1230, :c1231, :c1232, :c1233, :c1234, :c1235, :c1236, :c1237, :c1238, :c1239, :c1240, :c1241, :c1242, :c1243, :c1244, :c1245, :c1246, :c1247, :c1248, :c1249, :c1250, :c1251, :c1252, :c1253, :c1254, :c1255, :c1256, :c1257, :c1258, :c1259, :c1260, :c1261, :c1262, :c1263, :c1264, :c1265, :c1266, :c1267, :c1268, :c1269, :c1270, :c1271, :c1272, :c1273, :c1274, :c1275, :c1276, :c1277, :c1278, :c1279, :c1280, :c1281, :c1282, :c1283, :c1284, :c1285, :c1286, :c1287, :c1288, :c1289, :c1290, :c1291, :c1292, :c1293, :c1294, :c1295, :c1296, :c1297, :c1298, :c1299, :c1300, :c1301, :c1302, :c1303, :c1304, :c1305, :c1306, :c1307, :c1308, :c1309, :c1310, :c1311, :c1312, :c1313, :c1314, :c1315, :c1316, :c1317, :c1318, :c1319, :c1320, :c1321, :c1322, :c1323, :c1324, :c1325, :c1326, :c1327, :c1328, :c1329, :c1330, :c1331, :c1332, :c1333, :c1334, :c1335, :c1336, :c1337, :c1338, :c1339, :c1340, :c1341, :c1342, :c1343, :c1344, :c1345, :c1346, :c1347, :c1348, :c1349, :c1350, :c1351, :c1352, :c1353, :c1354, :c1355, :c1356, :c1357, :c1358, :c1359, :c1360, :c1361, :c1362, :c1363, :c1364, :c1365, :c1366, :c1367, :c1368, :c1369, :c1370, :c1371, :c1372, :c1373, :c1374, :c1375, :c1376, :c1377, :c1378, :c1379, :c1380, :c1381, :c1382, :c1383, :c1384, :c1385, :c1386, :c1387, :c1388, :c1389, :c1390, :c1391, :c1392, :c1393, :c1394, :c1395, :c1396, :c1397, :c1398, :c1399, :c1400, :c1401, :c1402, :c1403, :c1404, :c1405, :c1406, :c1407, :c1408, :c1409, :c1410, :c1411, :c1412, :c1413, :c1414, :c1415, :c1416, :c1417, :c1418, :c1419, :c1420, :c1421, :c1422, :c1423, :c1424, :c1425, :c1426, :c1427, :c1428, :c1429, :c1430, :c1431, :c1432, :c1433, :c1434, :c1435, :c1436, :c1437, :c1438, :c1439, :c1440, :c1441, :c1442, :c1443, :c1444, :c1445, :c1446, :c1447, :c1448, :c1449, :c1450, :c1451, :c1452, :c1453, :c1454, :c1455, :c1456, :c1457, :c1458, :c1459, :c1460, :c1461, :c1462, :c1463, :c1464, :c1465, :c1466, :c1467, :c1468, :c1469, :c1470, :c1471, :c1472, :c1473, :c1474, :c1475, :c1476, :c1477, :c1478, :c1479, :c1480, :c1481, :c1482, :c1483, :c1484, :c1485, :c1486, :c1487, :c1488, :c1489, :c1490, :c1491, :c1492, :c1493, :c1494, :c1495, :c1496, :c1497, :c1498, :c1499, :c1500, :c1501, :c1502, :c1503, :c1504, :c1505, :c1506, :c1507, :c1508, :c1509, :c1510, :c1511, :c1512, :c1513, :c1514, :c1515, :c1516, :c1517, :c1518, :c1519, :c1520, :c1521, :c1522, :c1523, :c1524, :c1525, :c1526, :c1527, :c1528, :c1529, :c1530, :c1531, :c1532, :c1533, :c1534, :c1535, :c1536, :c1537, :c1538, :c1539, :c1540, :c1541, :c1542, :c1543, :c1544, :c1545, :c1546, :c1547, :c1548, :c1549, :c1550, :c1551, :c1552, :c1553, :c1554, :c1555, :c1556, :c1557, :c1558, :c1559, :c1560, :c1561, :c1562, :c1563, :c1564, :c1565, :c1566, :c1567, :c1568, :c1569, :c1570, :c1571, :c1572, :c1573, :c1574, :c1575, :c1576, :c1577, :c1578, :c1579, :c1580, :c1581, :c1582, :c1583, :c1584, :c1585, :c1586, :c1587, :c1588, :c1589, :c1590, :c1591, :c1592, :c1593, :c1594, :c1595, :c1596, :c1597, :c1598, :c1599, :c1600, :c1601, :c1602, :c1603, :c1604, :c1605, :c1606, :c1607, :c1608, :c1609, :c1610, :c1611, :c1612, :c1613, :c1614, :c1615, :c1616, :c1617, :c1618, :c1619, :c1620, :c1621, :c1622, :c1623, :c1624, :c1625, :c1626, :c1627, :c1628, :c1629, :c1630, :c1631, :c1632, :c1633, :c1634, :c1635, :c1636, :c1637, :c1638, :c1639, :c1640, :c1641, :c1642, :c1643, :c1644, :c1645, :c1646, :c1647, :c1648, :c1649, :c1650, :c1651, :c1652, :c1653, :c1654, :c1655, :c1656, :c1657, :c1658, :c1659, :c1660, :c1661, :c1662, :c1663, :c1664, :c1665, :c1666, :c1667, :c1668, :c1669, :c1670, :c1671, :c1672, :c1673, :c1674, :c1675, :c1676, :c1677, :c1678, :c1679, :c1680, :c1681, :c1682, :c1683, :c1684, :c1685, :c1686, :c1687, :c1688, :c1689, :c1690, :c1691, :c1692, :c1693, :c1694, :c1695, :c1696, :c1697, :c1698, :c1699, :c1700, :c1701, :c1702, :c1703, :c1704, :c1705, :c1706, :c1707, :c1708, :c1709, :c1710, :c1711, :c1712, :c1713, :c1714, :c1715, :c1716, :c1717, :c1718, :c1719, :c1720, :c1721, :c1722, :c1723, :c1724, :c1725, :c1726, :c1727, :c1728, :c1729, :c1730, :c1731, :c1732, :c1733, :c1734, :c1735, :c1736, :c1737, :c1738, :c1739, :c1740, :c1741, :c1742, :c1743, :c1744, :c1745, :c1746, :c1747, :c1748, :c1749, :c1750, :c1751, :c1752, :c1753, :c1754, :c1755, :c1756, :c1757, :c1758, :c1759, :c1760, :c1761, :c1762, :c1763, :c1764, :c1765, :c1766, :c1767, :c1768, :c1769, :c1770, :c1771, :c1772, :c1773, :c1774, :c1775, :c1776, :c1777, :c1778, :c1779, :c1780, :c1781, :c1782, :c1783, :c1784, :c1785, :c1786, :c1787, :c1788, :c1789, :c1790, :c1791, :c1792, :c1793, :c1794, :c1795, :c1796, :c1797, :c1798, :c1799, :c1800, :c1801, :c1802, :c1803, :c1804, :c1805, :c1806, :c1807, :c1808, :c1809, :c1810, :c1811, :c1812, :c1813, :c1814, :c1815, :c1816, :c1817, :c1818, :c1819, :c1820, :c1821, :c1822, :c1823, :c1824, :c1825, :c1826, :c1827, :c1828, :c1829, :c1830, :c1831, :c1832, :c1833, :c1834, :c1835, :c1836, :c1837, :c1838, :c1839, :c1840, :c1841, :c1842, :c1843, :c1844, :c1845, :c1846, :c1847, :c1848, :c1849, :c1850, :c1851, :c1852, :c1853, :c1854, :c1855, :c1856, :c1857, :c1858, :c1859, :c1860, :c1861, :c1862, :c1863, :c1864, :c1865, :c1866, :c1867, :c1868, :c1869, :c1870, :c1871, :c1872, :c1873, :c1874, :c1875, :c1876, :c1877, :c1878, :c1879, :c1880, :c1881, :c1882, :c1883, :c1884, :c1885, :c1886, :c1887, :c1888, :c1889, :c1890, :c1891, :c1892, :c1893, :c1894, :c1895, :c1896, :c1897, :c1898, :c1899, :c1900, :c1901, :c1902, :c1903, :c1904, :c1905, :c1906, :c1907, :c1908, :c1909, :c1910, :c1911, :c1912, :c1913, :c1914, :c1915, :c1916, :c1917, :c1918, :c1919, :c1920, :c1921, :c1922, :c1923, :c1924, :c1925, :c1926, :c1927, :c1928, :c1929, :c1930, :c1931, :c1932, :c1933, :c1934, :c1935, :c1936, :c1937, :c1938, :c1939, :c1940, :c1941, :c1942, :c1943, :c1944, :c1945, :c1946, :c1947, :c1948, :c1949, :c1950, :c1951, :c1952, :c1953, :c1954, :c1955, :c1956, :c1957, :c1958, :c1959, :c1960, :c1961, :c1962, :c1963, :c1964, :c1965, :c1966, :c1967, :c1968, :c1969, :c1970, :c1971, :c1972, :c1973, :c1974, :c1975, :c1976, :c1977, :c1978, :c1979, :c1980, :c1981, :c1982, :c1983, :c1984, :c1985, :c1986, :c1987, :c1988, :c1989, :c1990, :c1991, :c1992, :c1993, :c1994, :c1995, :c1996, :c1997, :c1998, :c1999, :c2000, :c2001, :c2002, :c2003, :c2004, :c2005, :c2006, :c2007, :c2008, :c2009, :c2010, :c2011, :c2012, :c2013, :c2014, :c2015, :c2016, :c2017, :c2018, :c2019, :c2020, :c2021, :c2022, :c2023, :c2024, :c2025, :c2026, :c2027, :c2028, :c2029, :c2030, :c2031, :c2032, :c2033, :c2034, :c2035, :c2036, :c2037, :c2038, :c2039, :c2040, :c2041, :c2042, :c2043, :c2044, :c2045, :c2046, :c2047, :c2048, :c2049, :c2050, :c2051, :c2052, :c2053, :c2054, :c2055, :c2056, :c2057, :c2058, :c2059, :c2060, :c2061, :c2062, :c2063, :c2064, :c2065, :c2066, :c2067, :c2068, :c2069, :c2070, :c2071, :c2072, :c2073, :c2074, :c2075, :c2076, :c2077, :c2078, :c2079, :c2080, :c2081, :c2082, :c2083, :c2084, :c2085, :c2086, :c2087, :c2088, :c2089, :c2090, :c2091, :c2092, :c2093, :c2094, :c2095, :c2096, :c2097, :c2098, :c2099, :c2100, :c2101, :c2102, :c2103, :c2104, :c2105, :c2106, :c2107, :c2108, :c2109, :c2110, :c2111, :c2112, :c2113, :c2114, :c2115, :c2116, :c2117, :c2118, :c2119, :c2120, :c2121, :c2122, :c2123, :c2124, :c2125, :c2126, :c2127, :c2128, :c2129, :c2130, :c2131, :c2132, :c2133, :c2134, :c2135, :c2136, :c2137, :c2138, :c2139, :c2140, :c2141, :c2142, :c2143, :c2144, :c2145, :c2146, :c2147, :c2148, :c2149, :c2150, :c2151, :c2152, :c2153, :c2154, :c2155, :c2156, :c2157, :c2158, :c2159, :c2160, :c2161, :c2162, :c2163, :c2164, :c2165, :c2166, :c2167, :c2168, :c2169, :c2170, :c2171, :c2172, :c2173, :c2174, :c2175, :c2176, :c2177, :c2178, :c2179, :c2180, :c2181, :c2182, :c2183, :c2184, :c2185, :c2186, :c2187, :c2188, :c2189, :c2190, :c2191, :c2192, :c2193, :c2194, :c2195, :c2196, :c2197, :c2198, :c2199, :c2200, :c2201, :c2202, :c2203, :c2204, :c2205, :c2206, :c2207, :c2208, :c2209, :c2210, :c2211, :c2212, :c2213, :c2214, :c2215, :c2216, :c2217, :c2218, :c2219, :c2220, :c2221, :c2222, :c2223, :c2224, :c2225, :c2226, :c2227, :c2228, :c2229, :c2230, :c2231, :c2232, :c2233, :c2234, :c2235, :c2236, :c2237, :c2238, :c2239, :c2240, :c2241, :c2242, :c2243, :c2244, :c2245, :c2246, :c2247, :c2248, :c2249, :c2250, :c2251, :c2252, :c2253, :c2254, :c2255, :c2256, :c2257, :c2258, :c2259, :c2260, :c2261, :c2262, :c2263, :c2264, :c2265, :c2266, :c2267, :c2268, :c2269, :c2270, :c2271, :c2272, :c2273, :c2274, :c2275, :c2276, :c2277, :c2278, :c2279, :c2280, :c2281, :c2282, :c2283, :c2284, :c2285, :c2286, :c2287, :c2288, :c2289, :c2290, :c2291, :c2292, :c2293, :c2294, :c2295, :c2296, :c2297, :c2298, :c2299, :c2300, :c2301, :c2302, :c2303, :c2304, :c2305, :c2306, :c2307, :c2308, :c2309, :c2310, :c2311, :c2312, :c2313, :c2314, :c2315, :c2316, :c2317, :c2318, :c2319, :c2320, :c2321, :c2322, :c2323, :c2324, :c2325, :c2326, :c2327, :c2328, :c2329, :c2330, :c2331, :c2332, :c2333, :c2334, :c2335, :c2336, :c2337, :c2338, :c2339, :c2340, :c2341, :c2342, :c2343, :c2344, :c2345, :c2346, :c2347, :c2348, :c2349, :c2350, :c2351, :c2352, :c2353, :c2354, :c2355, :c2356, :c2357, :c2358, :c2359, :c2360, :c2361, :c2362, :c2363, :c2364, :c2365, :c2366, :c2367, :c2368, :c2369, :c2370, :c2371, :c2372, :c2373, :c2374, :c2375, :c2376, :c2377, :c2378, :c2379, :c2380, :c2381, :c2382, :c2383, :c2384, :c2385, :c2386, :c2387, :c2388, :c2389, :c2390, :c2391, :c2392, :c2393, :c2394, :c2395, :c2396, :c2397, :c2398, :c2399, :c2400, :c2401, :c2402, :c2403, :c2404, :c2405, :c2406, :c2407, :c2408, :c2409, :c2410, :c2411, :c2412, :c2413, :c2414, :c2415, :c2416, :c2417, :c2418, :c2419, :c2420, :c2421, :c2422, :c2423, :c2424, :c2425, :c2426, :c2427, :c2428, :c2429, :c2430, :c2431, :c2432, :c2433, :c2434, :c2435, :c2436, :c2437, :c2438, :c2439, :c2440, :c2441, :c2442, :c2443, :c2444, :c2445, :c2446, :c2447, :c2448, :c2449, :c2450, :c2451, :c2452, :c2453, :c2454, :c2455, :c2456, :c2457, :c2458, :c2459, :c2460, :c2461, :c2462, :c2463, :c2464, :c2465, :c2466, :c2467, :c2468, :c2469, :c2470, :c2471, :c2472, :c2473, :c2474, :c2475, :c2476, :c2477, :c2478, :c2479, :c2480, :c2481, :c2482, :c2483, :c2484, :c2485, :c2486, :c2487, :c2488, :c2489, :c2490, :c2491, :c2492, :c2493, :c2494, :c2495, :c2496, :c2497, :c2498, :c2499, :c2500, :c2501, :c2502, :c2503, :c2504, :c2505, :c2506, :c2507, :c2508, :c2509, :c2510, :c2511, :c2512, :c2513, :c2514, :c2515, :c2516, :c2517, :c2518, :c2519, :c2520, :c2521, :c2522, :c2523, :c2524, :c2525, :c2526, :c2527, :c2528, :c2529, :c2530, :c2531, :c2532, :c2533, :c2534, :c2535, :c2536, :c2537, :c2538, :c2539, :c2540, :c2541, :c2542, :c2543, :c2544, :c2545, :c2546, :c2547, :c2548, :c2549, :c2550, :c2551, :c2552, :c2553, :c2554, :c2555, :c2556, :c2557, :c2558, :c2559, :c2560, :c2561, :c2562, :c2563, :c2564, :c2565, :c2566, :c2567, :c2568, :c2569, :c2570, :c2571, :c2572, :c2573, :c2574, :c2575, :c2576, :c2577, :c2578, :c2579, :c2580, :c2581, :c2582, :c2583, :c2584, :c2585, :c2586, :c2587, :c2588, :c2589, :c2590, :c2591, :c2592, :c2593, :c2594, :c2595, :c2596, :c2597, :c2598, :c2599, :c2600, :c2601, :c2602, :c2603, :c2604, :c2605, :c2606, :c2607, :c2608, :c2609, :c2610, :c2611, :c2612, :c2613, :c2614, :c2615, :c2616, :c2617, :c2618, :c2619, :c2620, :c2621, :c2622, :c2623, :c2624, :c2625, :c2626, :c2627, :c2628, :c2629, :c2630, :c2631, :c2632, :c2633, :c2634, :c2635, :c2636, :c2637, :c2638, :c2639, :c2640, :c2641, :c2642, :c2643, :c2644, :c2645, :c2646, :c2647, :c2648, :c2649, :c2650, :c2651, :c2652, :c2653, :c2654, :c2655, :c2656, :c2657, :c2658, :c2659, :c2660, :c2661, :c2662, :c2663, :c2664, :c2665, :c2666, :c2667, :c2668, :c2669, :c2670, :c2671, :c2672, :c2673, :c2674, :c2675, :c2676, :c2677, :c2678, :c2679, :c2680, :c2681, :c2682, :c2683, :c2684, :c2685, :c2686, :c2687, :c2688, :c2689, :c2690, :c2691, :c2692, :c2693, :c2694, :c2695, :c2696, :c2697, :c2698, :c2699, :c2700, :c2701, :c2702, :c2703, :c2704, :c2705, :c2706, :c2707, :c2708, :c2709, :c2710, :c2711, :c2712, :c2713, :c2714, :c2715, :c2716, :c2717, :c2718, :c2719, :c2720, :c2721, :c2722, :c2723, :c2724, :c2725, :c2726, :c2727, :c2728, :c2729, :c2730, :c2731, :c2732, :c2733, :c2734, :c2735, :c2736, :c2737, :c2738, :c2739, :c2740, :c2741, :c2742, :c2743, :c2744, :c2745, :c2746, :c2747, :c2748, :c2749, :c2750, :c2751, :c2752, :c2753, :c2754, :c2755, :c2756, :c2757, :c2758, :c2759, :c2760, :c2761, :c2762, :c2763, :c2764, :c2765, :c2766, :c2767, :c2768, :c2769, :c2770, :c2771, :c2772, :c2773, :c2774, :c2775, :c2776, :c2777, :c2778, :c2779, :c2780, :c2781, :c2782, :c2783, :c2784, :c2785, :c2786, :c2787, :c2788, :c2789, :c2790, :c2791, :c2792, :c2793, :c2794, :c2795, :c2796, :c2797, :c2798, :c2799, :c2800, :c2801, :c2802, :c2803, :c2804, :c2805, :c2806, :c2807, :c2808, :c2809, :c2810, :c2811, :c2812, :c2813, :c2814, :c2815, :c2816, :c2817, :c2818, :c2819, :c2820, :c2821, :c2822, :c2823, :c2824, :c2825, :c2826, :c2827, :c2828, :c2829, :c2830, :c2831, :c2832, :c2833, :c2834, :c2835, :c2836, :c2837, :c2838, :c2839, :c2840, :c2841, :c2842, :c2843, :c2844, :c2845, :c2846, :c2847, :c2848, :c2849, :c2850, :c2851, :c2852, :c2853, :c2854, :c2855, :c2856, :c2857, :c2858, :c2859, :c2860, :c2861, :c2862, :c2863, :c2864, :c2865, :c2866, :c2867, :c2868, :c2869, :c2870, :c2871, :c2872, :c2873, :c2874, :c2875, :c2876, :c2877, :c2878, :c2879, :c2880, :c2881, :c2882, :c2883, :c2884, :c2885, :c2886, :c2887, :c2888, :c2889, :c2890, :c2891, :c2892, :c2893, :c2894, :c2895, :c2896, :c2897, :c2898, :c2899, :c2900, :c2901, :c2902, :c2903, :c2904, :c2905, :c2906, :c2907, :c2908, :c2909, :c2910, :c2911, :c2912, :c2913, :c2914, :c2915, :c2916, :c2917, :c2918, :c2919, :c2920, :c2921, :c2922, :c2923, :c2924, :c2925, :c2926, :c2927, :c2928, :c2929, :c2930, :c2931, :c2932, :c2933, :c2934, :c2935, :c2936, :c2937, :c2938, :c2939, :c2940, :c2941, :c2942, :c2943, :c2944, :c2945, :c2946, :c2947, :c2948, :c2949, :c2950, :c2951, :c2952, :c2953, :c2954, :c2955, :c2956, :c2957, :c2958, :c2959, :c2960, :c2961, :c2962, :c2963, :c2964, :c2965, :c2966, :c2967, :c2968, :c2969, :c2970, :c2971, :c2972, :c2973, :c2974, :c2975, :c2976, :c2977, :c2978, :c2979, :c2980, :c2981, :c2982, :c2983, :c2984, :c2985, :c2986, :c2987, :c2988, :c2989, :c2990, :c2991, :c2992, :c2993, :c2994, :c2995, :c2996, :c2997, :c2998, :c2999, :c3000, :c3001, :c3002, :c3003, :c3004, :c3005, :c3006, :c3007, :c3008, :c3009, :c3010, :c3011, :c3012, :c3013, :c3014, :c3015, :c3016, :c3017, :c3018, :c3019, :c3020, :c3021, :c3022, :c3023, :c3024, :c3025, :c3026, :c3027, :c3028, :c3029, :c3030, :c3031, :c3032, :c3033, :c3034, :c3035, :c3036, :c3037, :c3038, :c3039, :c3040, :c3041, :c3042, :c3043, :c3044, :c3045, :c3046, :c3047, :c3048, :c3049, :c3050, :c3051, :c3052, :c3053, :c3054, :c3055, :c3056, :c3057, :c3058, :c3059, :c3060, :c3061, :c3062, :c3063, :c3064, :c3065, :c3066, :c3067, :c3068, :c3069, :c3070, :c3071, :c3072, :c3073, :c3074, :c3075, :c3076, :c3077, :c3078, :c3079, :c3080, :c3081, :c3082, :c3083, :c3084, :c3085, :c3086, :c3087, :c3088, :c3089, :c3090, :c3091, :c3092, :c3093, :c3094, :c3095, :c3096, :c3097, :c3098, :c3099, :c3100, :c3101, :c3102, :c3103, :c3104, :c3105, :c3106, :c3107, :c3108, :c3109, :c3110, :c3111, :c3112, :c3113, :c3114, :c3115, :c3116, :c3117, :c3118, :c3119, :c3120, :c3121, :c3122, :c3123, :c3124, :c3125, :c3126, :c3127, :c3128, :c3129, :c3130, :c3131, :c3132, :c3133, :c3134, :c3135, :c3136, :c3137, :c3138, :c3139, :c3140, :c3141, :c3142, :c3143, :c3144, :c3145, :c3146, :c3147, :c3148, :c3149, :c3150, :c3151, :c3152, :c3153, :c3154, :c3155, :c3156, :c3157, :c3158, :c3159, :c3160, :c3161, :c3162, :c3163, :c3164, :c3165, :c3166, :c3167, :c3168, :c3169, :c3170, :c3171, :c3172, :c3173, :c3174, :c3175, :c3176, :c3177, :c3178, :c3179, :c3180, :c3181, :c3182, :c3183, :c3184, :c3185, :c3186, :c3187, :c3188, :c3189, :c3190, :c3191, :c3192, :c3193, :c3194, :c3195, :c3196, :c3197, :c3198, :c3199, :c3200, :c3201, :c3202, :c3203, :c3204, :c3205, :c3206, :c3207, :c3208, :c3209, :c3210, :c3211, :c3212, :c3213, :c3214, :c3215, :c3216, :c3217, :c3218, :c3219, :c3220, :c3221, :c3222, :c3223, :c3224, :c3225, :c3226, :c3227, :c3228, :c3229, :c3230, :c3231, :c3232, :c3233, :c3234, :c3235, :c3236, :c3237, :c3238, :c3239, :c3240, :c3241, :c3242, :c3243, :c3244, :c3245, :c3246, :c3247, :c3248, :c3249, :c3250, :c3251, :c3252, :c3253, :c3254, :c3255, :c3256, :c3257, :c3258, :c3259, :c3260, :c3261, :c3262, :c3263, :c3264, :c3265, :c3266, :c3267, :c3268, :c3269, :c3270, :c3271, :c3272, :c3273, :c3274, :c3275, :c3276, :c3277, :c3278, :c3279, :c3280, :c3281, :c3282, :c3283, :c3284, :c3285, :c3286, :c3287, :c3288, :c3289, :c3290, :c3291, :c3292, :c3293, :c3294, :c3295, :c3296, :c3297, :c3298, :c3299, :c3300, :c3301, :c3302, :c3303, :c3304, :c3305, :c3306, :c3307, :c3308, :c3309, :c3310, :c3311, :c3312, :c3313, :c3314, :c3315, :c3316, :c3317, :c3318, :c3319, :c3320, :c3321, :c3322, :c3323, :c3324, :c3325, :c3326, :c3327, :c3328, :c3329, :c3330, :c3331, :c3332, :c3333, :c3334, :c3335, :c3336, :c3337, :c3338, :c3339, :c3340, :c3341, :c3342, :c3343, :c3344, :c3345, :c3346, :c3347, :c3348, :c3349, :c3350, :c3351, :c3352, :c3353, :c3354, :c3355, :c3356, :c3357, :c3358, :c3359, :c3360, :c3361, :c3362, :c3363, :c3364, :c3365, :c3366, :c3367, :c3368, :c3369, :c3370, :c3371, :c3372, :c3373, :c3374, :c3375, :c3376, :c3377, :c3378, :c3379, :c3380, :c3381, :c3382, :c3383, :c3384, :c3385, :c3386, :c3387, :c3388, :c3389, :c3390, :c3391, :c3392, :c3393, :c3394, :c3395, :c3396, :c3397, :c3398, :c3399, :c3400, :c3401, :c3402, :c3403, :c3404, :c3405, :c3406, :c3407, :c3408, :c3409, :c3410, :c3411, :c3412, :c3413, :c3414, :c3415, :c3416, :c3417, :c3418, :c3419, :c3420, :c3421, :c3422, :c3423, :c3424, :c3425, :c3426, :c3427, :c3428, :c3429, :c3430, :c3431, :c3432, :c3433, :c3434, :c3435, :c3436, :c3437, :c3438, :c3439, :c3440, :c3441, :c3442, :c3443, :c3444, :c3445, :c3446, :c3447, :c3448, :c3449, :c3450, :c3451, :c3452, :c3453, :c3454, :c3455, :c3456, :c3457, :c3458, :c3459, :c3460, :c3461, :c3462, :c3463, :c3464, :c3465, :c3466, :c3467, :c3468, :c3469, :c3470, :c3471, :c3472, :c3473, :c3474, :c3475, :c3476, :c3477, :c3478, :c3479, :c3480, :c3481, :c3482, :c3483, :c3484, :c3485, :c3486, :c3487, :c3488, :c3489, :c3490, :c3491, :c3492, :c3493, :c3494, :c3495, :c3496, :c3497, :c3498, :c3499, :c3500, :c3501, :c3502, :c3503, :c3504, :c3505, :c3506, :c3507, :c3508, :c3509, :c3510, :c3511, :c3512, :c3513, :c3514, :c3515, :c3516, :c3517, :c3518, :c3519, :c3520, :c3521, :c3522, :c3523, :c3524, :c3525, :c3526, :c3527, :c3528, :c3529, :c3530, :c3531, :c3532, :c3533, :c3534, :c3535, :c3536, :c3537, :c3538, :c3539, :c3540, :c3541, :c3542, :c3543, :c3544, :c3545, :c3546, :c3547, :c3548, :c3549, :c3550, :c3551, :c3552, :c3553, :c3554, :c3555, :c3556, :c3557, :c3558, :c3559, :c3560, :c3561, :c3562, :c3563, :c3564, :c3565, :c3566, :c3567, :c3568, :c3569, :c3570, :c3571, :c3572, :c3573, :c3574, :c3575, :c3576, :c3577, :c3578, :c3579, :c3580, :c3581, :c3582, :c3583, :c3584, :c3585, :c3586, :c3587, :c3588, :c3589, :c3590, :c3591, :c3592, :c3593, :c3594, :c3595, :c3596, :c3597, :c3598, :c3599, :c3600, :c3601, :c3602, :c3603, :c3604, :c3605, :c3606, :c3607, :c3608, :c3609, :c3610, :c3611, :c3612, :c3613, :c3614, :c3615, :c3616, :c3617, :c3618, :c3619, :c3620, :c3621, :c3622, :c3623, :c3624, :c3625, :c3626, :c3627, :c3628, :c3629, :c3630, :c3631, :c3632, :c3633, :c3634, :c3635, :c3636, :c3637, :c3638, :c3639, :c3640, :c3641, :c3642, :c3643, :c3644, :c3645, :c3646, :c3647, :c3648, :c3649, :c3650, :c3651, :c3652, :c3653, :c3654, :c3655, :c3656, :c3657, :c3658, :c3659, :c3660, :c3661, :c3662, :c3663, :c3664, :c3665, :c3666, :c3667, :c3668, :c3669, :c3670, :c3671, :c3672, :c3673, :c3674, :c3675, :c3676, :c3677, :c3678, :c3679, :c3680, :c3681, :c3682, :c3683, :c3684, :c3685, :c3686, :c3687, :c3688, :c3689, :c3690, :c3691, :c3692, :c3693, :c3694, :c3695, :c3696, :c3697, :c3698, :c3699, :c3700, :c3701, :c3702, :c3703, :c3704, :c3705, :c3706, :c3707, :c3708, :c3709, :c3710, :c3711, :c3712, :c3713, :c3714, :c3715, :c3716, :c3717, :c3718, :c3719, :c3720, :c3721, :c3722, :c3723, :c3724, :c3725, :c3726, :c3727, :c3728, :c3729, :c3730, :c3731, :c3732, :c3733, :c3734, :c3735, :c3736, :c3737, :c3738, :c3739, :c3740, :c3741, :c3742, :c3743, :c3744, :c3745, :c3746, :c3747, :c3748, :c3749, :c3750, :c3751, :c3752, :c3753, :c3754, :c3755, :c3756, :c3757, :c3758, :c3759, :c3760, :c3761, :c3762, :c3763, :c3764, :c3765, :c3766, :c3767, :c3768, :c3769, :c3770, :c3771, :c3772, :c3773, :c3774, :c3775, :c3776, :c3777, :c3778, :c3779, :c3780, :c3781, :c3782, :c3783, :c3784, :c3785, :c3786, :c3787, :c3788, :c3789, :c3790, :c3791, :c3792, :c3793, :c3794, :c3795, :c3796, :c3797, :c3798, :c3799, :c3800, :c3801, :c3802, :c3803, :c3804, :c3805, :c3806, :c3807, :c3808, :c3809, :c3810, :c3811, :c3812, :c3813, :c3814, :c3815, :c3816, :c3817, :c3818, :c3819, :c3820, :c3821, :c3822, :c3823, :c3824, :c3825, :c3826, :c3827, :c3828, :c3829, :c3830, :c3831, :c3832, :c3833, :c3834, :c3835, :c3836, :c3837, :c3838, :c3839, :c3840, :c3841, :c3842, :c3843, :c3844, :c3845, :c3846, :c3847, :c3848, :c3849, :c3850, :c3851, :c3852, :c3853, :c3854, :c3855, :c3856, :c3857, :c3858, :c3859, :c3860, :c3861, :c3862, :c3863, :c3864, :c3865, :c3866, :c3867, :c3868, :c3869, :c3870, :c3871, :c3872, :c3873, :c3874, :c3875, :c3876, :c3877, :c3878, :c3879, :c3880, :c3881, :c3882, :c3883, :c3884, :c3885, :c3886, :c3887, :c3888, :c3889, :c3890, :c3891, :c3892, :c3893, :c3894, :c3895, :c3896, :c3897, :c3898, :c3899, :c3900, :c3901, :c3902, :c3903, :c3904, :c3905, :c3906, :c3907, :c3908, :c3909, :c3910, :c3911, :c3912, :c3913, :c3914, :c3915, :c3916, :c3917, :c3918, :c3919, :c3920, :c3921, :c3922, :c3923, :c3924, :c3925, :c3926, :c3927, :c3928, :c3929, :c3930, :c3931, :c3932, :c3933, :c3934, :c3935, :c3936, :c3937, :c3938, :c3939, :c3940, :c3941, :c3942, :c3943, :c3944, :c3945, :c3946, :c3947, :c3948, :c3949, :c3950, :c3951, :c3952, :c3953, :c3954, :c3955, :c3956, :c3957, :c3958, :c3959, :c3960, :c3961, :c3962, :c3963, :c3964, :c3965, :c3966, :c3967, :c3968, :c3969, :c3970, :c3971, :c3972, :c3973, :c3974, :c3975, :c3976, :c3977, :c3978, :c3979, :c3980, :c3981, :c3982, :c3983, :c3984, :c3985, :c3986, :c3987, :c3988, :c3989, :c3990, :c3991, :c3992, :c3993, :c3994, :c3995, :c3996, :c3997, :c3998, :c3999, :c4000, :c4001, :c4002, :c4003, :c4004, :c4005, :c4006, :c4007, :c4008, :c4009, :c4010, :c4011, :c4012, :c4013, :c4014, :c4015, :c4016, :c4017, :c4018, :c4019, :c4020, :c4021, :c4022, :c4023, :c4024, :c4025, :c4026, :c4027, :c4028, :c4029, :c4030, :c4031, :c4032, :c4033, :c4034, :c4035, :c4036, :c4037, :c4038, :c4039, :c4040, :c4041, :c4042, :c4043, :c4044, :c4045, :c4046, :c4047, :c4048, :c4049, :c4050, :c4051, :c4052, :c4053, :c4054, :c4055, :c4056, :c4057, :c4058, :c4059, :c4060, :c4061, :c4062, :c4063, :c4064, :c4065, :c4066, :c4067, :c4068, :c4069, :c4070, :c4071, :c4072, :c4073, :c4074, :c4075, :c4076, :c4077, :c4078, :c4079, :c4080, :c4081, :c4082, :c4083, :c4084, :c4085, :c4086, :c4087, :c4088, :c4089, :c4090, :c4091, :c4092, :c4093, :c4094, :c4095, :c4096, :c4097, :c4098, :c4099, :c4100, :c4101, :c4102, :c4103, :c4104, :c4105, :c4106, :c4107, :c4108, :c4109, :c4110, :c4111, :c4112, :c4113, :c4114, :c4115, :c4116, :c4117, :c4118, :c4119, :c4120, :c4121, :c4122, :c4123, :c4124, :c4125, :c4126, :c4127, :c4128, :c4129, :c4130, :c4131, :c4132, :c4133, :c4134, :c4135, :c4136, :c4137, :c4138, :c4139, :c4140, :c4141, :c4142, :c4143, :c4144, :c4145, :c4146, :c4147, :c4148, :c4149, :c4150, :c4151, :c4152, :c4153, :c4154, :c4155, :c4156, :c4157, :c4158, :c4159, :c4160, :c4161, :c4162, :c4163, :c4164, :c4165, :c4166, :c4167, :c4168, :c4169, :c4170, :c4171, :c4172, :c4173, :c4174, :c4175, :c4176, :c4177, :c4178, :c4179, :c4180, :c4181, :c4182, :c4183, :c4184, :c4185, :c4186, :c4187, :c4188, :c4189, :c4190, :c4191, :c4192, :c4193, :c4194, :c4195, :c4196, :c4197, :c4198, :c4199, :c4200, :c4201, :c4202, :c4203, :c4204, :c4205, :c4206, :c4207, :c4208, :c4209, :c4210, :c4211, :c4212, :c4213, :c4214, :c4215, :c4216, :c4217, :c4218, :c4219, :c4220, :c4221, :c4222, :c4223, :c4224, :c4225, :c4226, :c4227, :c4228, :c4229, :c4230, :c4231, :c4232, :c4233, :c4234, :c4235, :c4236, :c4237, :c4238, :c4239, :c4240, :c4241, :c4242, :c4243, :c4244, :c4245, :c4246, :c4247, :c4248, :c4249, :c4250, :c4251, :c4252, :c4253, :c4254, :c4255, :c4256, :c4257, :c4258, :c4259, :c4260, :c4261, :c4262, :c4263, :c4264, :c4265, :c4266, :c4267, :c4268, :c4269, :c4270, :c4271, :c4272, :c4273, :c4274, :c4275, :c4276, :c4277, :c4278, :c4279, :c4280, :c4281, :c4282, :c4283, :c4284, :c4285, :c4286, :c4287, :c4288, :c4289, :c4290, :c4291, :c4292, :c4293, :c4294, :c4295, :c4296, :c4297, :c4298, :c4299, :c4300, :c4301, :c4302, :c4303, :c4304, :c4305, :c4306, :c4307, :c4308, :c4309, :c4310, :c4311, :c4312, :c4313, :c4314, :c4315, :c4316, :c4317, :c4318, :c4319, :c4320, :c4321, :c4322, :c4323, :c4324, :c4325, :c4326, :c4327, :c4328, :c4329, :c4330, :c4331, :c4332, :c4333, :c4334, :c4335, :c4336, :c4337, :c4338, :c4339, :c4340, :c4341, :c4342, :c4343, :c4344, :c4345, :c4346, :c4347, :c4348, :c4349, :c4350, :c4351, :c4352, :c4353, :c4354, :c4355, :c4356, :c4357, :c4358, :c4359, :c4360, :c4361, :c4362, :c4363, :c4364, :c4365, :c4366, :c4367, :c4368, :c4369, :c4370, :c4371, :c4372, :c4373, :c4374, :c4375, :c4376, :c4377, :c4378, :c4379, :c4380, :c4381, :c4382, :c4383, :c4384, :c4385, :c4386, :c4387, :c4388, :c4389, :c4390, :c4391, :c4392, :c4393, :c4394, :c4395, :c4396, :c4397, :c4398, :c4399, :c4400, :c4401, :c4402, :c4403, :c4404, :c4405, :c4406, :c4407, :c4408, :c4409, :c4410, :c4411, :c4412, :c4413, :c4414, :c4415, :c4416, :c4417, :c4418, :c4419, :c4420, :c4421, :c4422, :c4423, :c4424, :c4425, :c4426, :c4427, :c4428, :c4429, :c4430, :c4431, :c4432, :c4433, :c4434, :c4435, :c4436, :c4437, :c4438, :c4439, :c4440, :c4441, :c4442, :c4443, :c4444, :c4445, :c4446, :c4447, :c4448, :c4449, :c4450, :c4451, :c4452, :c4453, :c4454, :c4455, :c4456, :c4457, :c4458, :c4459, :c4460, :c4461, :c4462, :c4463, :c4464, :c4465, :c4466, :c4467, :c4468, :c4469, :c4470, :c4471, :c4472, :c4473, :c4474, :c4475, :c4476, :c4477, :c4478, :c4479, :c4480, :c4481, :c4482, :c4483, :c4484, :c4485, :c4486, :c4487, :c4488, :c4489, :c4490, :c4491, :c4492, :c4493, :c4494, :c4495, :c4496, :c4497, :c4498, :c4499, :c4500, :c4501, :c4502, :c4503, :c4504, :c4505, :c4506, :c4507, :c4508, :c4509, :c4510, :c4511, :c4512, :c4513, :c4514, :c4515, :c4516, :c4517, :c4518, :c4519, :c4520, :c4521, :c4522, :c4523, :c4524, :c4525, :c4526, :c4527, :c4528, :c4529, :c4530, :c4531, :c4532, :c4533, :c4534, :c4535, :c4536, :c4537, :c4538, :c4539, :c4540, :c4541, :c4542, :c4543, :c4544, :c4545, :c4546, :c4547, :c4548, :c4549, :c4550, :c4551, :c4552, :c4553, :c4554, :c4555, :c4556, :c4557, :c4558, :c4559, :c4560, :c4561, :c4562, :c4563, :c4564, :c4565, :c4566, :c4567, :c4568, :c4569, :c4570, :c4571, :c4572, :c4573, :c4574, :c4575, :c4576, :c4577, :c4578, :c4579, :c4580, :c4581, :c4582, :c4583, :c4584, :c4585, :c4586, :c4587, :c4588, :c4589, :c4590, :c4591, :c4592, :c4593, :c4594, :c4595, :c4596, :c4597, :c4598, :c4599, :c4600, :c4601, :c4602, :c4603, :c4604, :c4605, :c4606, :c4607, :c4608, :c4609, :c4610, :c4611, :c4612, :c4613, :c4614, :c4615, :c4616, :c4617, :c4618, :c4619, :c4620, :c4621, :c4622, :c4623, :c4624, :c4625, :c4626, :c4627, :c4628, :c4629, :c4630, :c4631, :c4632, :c4633, :c4634, :c4635, :c4636, :c4637, :c4638, :c4639, :c4640, :c4641, :c4642, :c4643, :c4644, :c4645, :c4646, :c4647, :c4648, :c4649, :c4650, :c4651, :c4652, :c4653, :c4654, :c4655, :c4656, :c4657, :c4658, :c4659, :c4660, :c4661, :c4662, :c4663, :c4664, :c4665, :c4666, :c4667, :c4668, :c4669, :c4670, :c4671, :c4672, :c4673, :c4674, :c4675, :c4676, :c4677, :c4678, :c4679, :c4680, :c4681, :c4682, :c4683, :c4684, :c4685, :c4686, :c4687, :c4688, :c4689, :c4690, :c4691, :c4692, :c4693, :c4694, :c4695, :c4696, :c4697, :c4698, :c4699, :c4700, :c4701, :c4702, :c4703, :c4704, :c4705, :c4706, :c4707, :c4708, :c4709, :c4710, :c4711, :c4712, :c4713, :c4714, :c4715, :c4716, :c4717, :c4718, :c4719, :c4720, :c4721, :c4722, :c4723, :c4724, :c4725, :c4726, :c4727, :c4728, :c4729, :c4730, :c4731, :c4732, :c4733, :c4734, :c4735, :c4736, :c4737, :c4738, :c4739, :c4740, :c4741, :c4742, :c4743, :c4744, :c4745, :c4746, :c4747, :c4748, :c4749, :c4750, :c4751, :c4752, :c4753, :c4754, :c4755, :c4756, :c4757, :c4758, :c4759, :c4760, :c4761, :c4762, :c4763, :c4764, :c4765, :c4766, :c4767, :c4768, :c4769, :c4770, :c4771, :c4772, :c4773, :c4774, :c4775, :c4776, :c4777, :c4778, :c4779, :c4780, :c4781, :c4782, :c4783, :c4784, :c4785, :c4786, :c4787, :c4788, :c4789, :c4790, :c4791, :c4792, :c4793, :c4794, :c4795, :c4796, :c4797, :c4798, :c4799, :c4800, :c4801, :c4802, :c4803, :c4804, :c4805, :c4806, :c4807, :c4808, :c4809, :c4810, :c4811, :c4812, :c4813, :c4814, :c4815, :c4816, :c4817, :c4818, :c4819, :c4820, :c4821, :c4822, :c4823, :c4824, :c4825, :c4826, :c4827, :c4828, :c4829, :c4830, :c4831, :c4832, :c4833, :c4834, :c4835, :c4836, :c4837, :c4838, :c4839, :c4840, :c4841, :c4842, :c4843, :c4844, :c4845, :c4846, :c4847, :c4848, :c4849, :c4850, :c4851, :c4852, :c4853, :c4854, :c4855, :c4856, :c4857, :c4858, :c4859, :c4860, :c4861, :c4862, :c4863, :c4864, :c4865, :c4866, :c4867, :c4868, :c4869, :c4870, :c4871, :c4872, :c4873, :c4874, :c4875, :c4876, :c4877, :c4878, :c4879, :c4880, :c4881, :c4882, :c4883, :c4884, :c4885, :c4886, :c4887, :c4888, :c4889, :c4890, :c4891, :c4892, :c4893, :c4894, :c4895, :c4896, :c4897, :c4898, :c4899, :c4900, :c4901, :c4902, :c4903, :c4904, :c4905, :c4906, :c4907, :c4908, :c4909, :c4910, :c4911, :c4912, :c4913, :c4914, :c4915, :c4916, :c4917, :c4918, :c4919, :c4920, :c4921, :c4922, :c4923, :c4924, :c4925, :c4926, :c4927, :c4928, :c4929, :c4930, :c4931, :c4932, :c4933, :c4934, :c4935, :c4936, :c4937, :c4938, :c4939, :c4940, :c4941, :c4942, :c4943, :c4944, :c4945, :c4946, :c4947, :c4948, :c4949, :c4950, :c4951, :c4952, :c4953, :c4954, :c4955, :c4956, :c4957, :c4958, :c4959, :c4960, :c4961, :c4962, :c4963, :c4964, :c4965, :c4966, :c4967, :c4968, :c4969, :c4970, :c4971, :c4972, :c4973, :c4974, :c4975, :c4976, :c4977, :c4978, :c4979, :c4980, :c4981, :c4982, :c4983, :c4984, :c4985, :c4986, :c4987, :c4988, :c4989, :c4990, :c4991, :c4992, :c4993, :c4994, :c4995, :c4996, :c4997, :c4998, :c4999, :c5000, :c5001, :c5002, :c5003, :c5004, :c5005, :c5006, :c5007, :c5008, :c5009, :c5010, :c5011, :c5012, :c5013, :c5014, :c5015, :c5016, :c5017, :c5018, :c5019, :c5020, :c5021, :c5022, :c5023, :c5024, :c5025, :c5026, :c5027, :c5028, :c5029, :c5030, :c5031, :c5032, :c5033, :c5034, :c5035, :c5036, :c5037, :c5038, :c5039, :c5040, :c5041, :c5042, :c5043, :c5044, :c5045, :c5046, :c5047, :c5048, :c5049, :c5050, :c5051, :c5052, :c5053, :c5054, :c5055, :c5056, :c5057, :c5058, :c5059, :c5060, :c5061, :c5062, :c5063, :c5064, :c5065, :c5066, :c5067, :c5068, :c5069, :c5070, :c5071, :c5072, :c5073, :c5074, :c5075, :c5076, :c5077, :c5078, :c5079, :c5080, :c5081, :c5082, :c5083, :c5084, :c5085, :c5086, :c5087, :c5088, :c5089, :c5090, :c5091, :c5092, :c5093, :c5094, :c5095, :c5096, :c5097, :c5098, :c5099, :c5100, :c5101, :c5102, :c5103, :c5104, :c5105, :c5106, :c5107, :c5108, :c5109, :c5110, :c5111, :c5112, :c5113, :c5114, :c5115, :c5116, :c5117, :c5118, :c5119, :c5120, :c5121, :c5122, :c5123, :c5124, :c5125, :c5126, :c5127, :c5128, :c5129, :c5130, :c5131, :c5132, :c5133, :c5134, :c5135, :c5136, :c5137, :c5138, :c5139, :c5140, :c5141, :c5142, :c5143, :c5144, :c5145, :c5146, :c5147, :c5148, :c5149, :c5150, :c5151, :c5152, :c5153, :c5154, :c5155, :c5156, :c5157, :c5158, :c5159, :c5160, :c5161, :c5162, :c5163, :c5164, :c5165, :c5166, :c5167, :c5168, :c5169, :c5170, :c5171, :c5172, :c5173, :c5174, :c5175, :c5176, :c5177, :c5178, :c5179, :c5180, :c5181, :c5182, :c5183, :c5184, :c5185, :c5186, :c5187, :c5188, :c5189, :c5190, :c5191, :c5192, :c5193, :c5194, :c5195, :c5196, :c5197, :c5198, :c5199, :c5200, :c5201, :c5202, :c5203, :c5204, :c5205, :c5206, :c5207, :c5208, :c5209, :c5210, :c5211, :c5212, :c5213, :c5214, :c5215, :c5216, :c5217, :c5218, :c5219, :c5220, :c5221, :c5222, :c5223, :c5224, :c5225, :c5226, :c5227, :c5228, :c5229, :c5230, :c5231, :c5232, :c5233, :c5234, :c5235, :c5236, :c5237, :c5238, :c5239, :c5240, :c5241, :c5242, :c5243, :c5244, :c5245, :c5246, :c5247, :c5248, :c5249, :c5250, :c5251, :c5252, :c5253, :c5254, :c5255, :c5256, :c5257, :c5258, :c5259, :c5260, :c5261, :c5262, :c5263, :c5264, :c5265, :c5266, :c5267, :c5268, :c5269, :c5270, :c5271, :c5272, :c5273, :c5274, :c5275, :c5276, :c5277, :c5278, :c5279, :c5280, :c5281, :c5282, :c5283, :c5284, :c5285, :c5286, :c5287, :c5288, :c5289, :c5290, :c5291, :c5292, :c5293, :c5294, :c5295, :c5296, :c5297, :c5298, :c5299, :c5300, :c5301, :c5302, :c5303, :c5304, :c5305, :c5306, :c5307, :c5308, :c5309, :c5310, :c5311, :c5312, :c5313, :c5314, :c5315, :c5316, :c5317, :c5318, :c5319, :c5320, :c5321, :c5322, :c5323, :c5324, :c5325, :c5326, :c5327, :c5328, :c5329, :c5330, :c5331, :c5332, :c5333, :c5334, :c5335, :c5336, :c5337, :c5338, :c5339, :c5340, :c5341, :c5342, :c5343, :c5344, :c5345, :c5346, :c5347, :c5348, :c5349, :c5350, :c5351, :c5352, :c5353, :c5354, :c5355, :c5356, :c5357, :c5358, :c5359, :c5360, :c5361, :c5362, :c5363, :c5364, :c5365, :c5366, :c5367, :c5368, :c5369, :c5370, :c5371, :c5372, :c5373, :c5374, :c5375, :c5376, :c5377, :c5378, :c5379, :c5380, :c5381, :c5382, :c5383, :c5384, :c5385, :c5386, :c5387, :c5388, :c5389, :c5390, :c5391, :c5392, :c5393, :c5394, :c5395, :c5396, :c5397, :c5398, :c5399, :c5400, :c5401, :c5402, :c5403, :c5404, :c5405, :c5406, :c5407, :c5408, :c5409, :c5410, :c5411, :c5412, :c5413, :c5414, :c5415, :c5416, :c5417, :c5418, :c5419, :c5420, :c5421, :c5422, :c5423, :c5424, :c5425, :c5426, :c5427, :c5428, :c5429, :c5430, :c5431, :c5432, :c5433, :c5434, :c5435, :c5436, :c5437, :c5438, :c5439, :c5440, :c5441, :c5442, :c5443, :c5444, :c5445, :c5446, :c5447, :c5448, :c5449, :c5450, :c5451, :c5452, :c5453, :c5454, :c5455, :c5456, :c5457, :c5458, :c5459, :c5460, :c5461, :c5462, :c5463, :c5464, :c5465, :c5466, :c5467, :c5468, :c5469, :c5470, :c5471, :c5472, :c5473, :c5474, :c5475, :c5476, :c5477, :c5478, :c5479, :c5480, :c5481, :c5482, :c5483, :c5484, :c5485, :c5486, :c5487, :c5488, :c5489, :c5490, :c5491, :c5492, :c5493, :c5494, :c5495, :c5496, :c5497, :c5498, :c5499, :c5500, :c5501, :c5502, :c5503, :c5504, :c5505, :c5506, :c5507, :c5508, :c5509, :c5510, :c5511, :c5512, :c5513, :c5514, :c5515, :c5516, :c5517, :c5518, :c5519, :c5520, :c5521, :c5522, :c5523, :c5524, :c5525, :c5526, :c5527, :c5528, :c5529, :c5530, :c5531, :c5532, :c5533, :c5534, :c5535, :c5536, :c5537, :c5538, :c5539, :c5540, :c5541, :c5542, :c5543, :c5544, :c5545, :c5546, :c5547, :c5548, :c5549, :c5550, :c5551, :c5552, :c5553, :c5554, :c5555, :c5556, :c5557, :c5558, :c5559, :c5560, :c5561, :c5562, :c5563, :c5564, :c5565, :c5566, :c5567, :c5568, :c5569, :c5570, :c5571, :c5572, :c5573, :c5574, :c5575, :c5576, :c5577, :c5578, :c5579, :c5580, :c5581, :c5582, :c5583, :c5584, :c5585, :c5586, :c5587, :c5588, :c5589, :c5590, :c5591, :c5592, :c5593, :c5594, :c5595, :c5596, :c5597, :c5598, :c5599, :c5600, :c5601, :c5602, :c5603, :c5604, :c5605, :c5606, :c5607, :c5608, :c5609, :c5610, :c5611, :c5612, :c5613, :c5614, :c5615, :c5616, :c5617, :c5618, :c5619, :c5620, :c5621, :c5622, :c5623, :c5624, :c5625, :c5626, :c5627, :c5628, :c5629, :c5630, :c5631, :c5632, :c5633, :c5634, :c5635, :c5636, :c5637, :c5638, :c5639, :c5640, :c5641, :c5642, :c5643, :c5644, :c5645, :c5646, :c5647, :c5648, :c5649, :c5650, :c5651, :c5652, :c5653, :c5654, :c5655, :c5656, :c5657, :c5658, :c5659, :c5660, :c5661, :c5662, :c5663, :c5664, :c5665, :c5666, :c5667, :c5668, :c5669, :c5670, :c5671, :c5672, :c5673, :c5674, :c5675, :c5676, :c5677, :c5678, :c5679, :c5680, :c5681, :c5682, :c5683, :c5684, :c5685, :c5686, :c5687, :c5688, :c5689, :c5690, :c5691, :c5692, :c5693, :c5694, :c5695, :c5696, :c5697, :c5698, :c5699, :c5700, :c5701, :c5702, :c5703, :c5704, :c5705, :c5706, :c5707, :c5708, :c5709, :c5710, :c5711, :c5712, :c5713, :c5714, :c5715, :c5716, :c5717, :c5718, :c5719, :c5720, :c5721, :c5722, :c5723, :c5724, :c5725, :c5726, :c5727, :c5728, :c5729, :c5730, :c5731, :c5732, :c5733, :c5734, :c5735, :c5736, :c5737, :c5738, :c5739, :c5740, :c5741, :c5742, :c5743, :c5744, :c5745, :c5746, :c5747, :c5748, :c5749, :c5750, :c5751, :c5752, :c5753, :c5754, :c5755, :c5756, :c5757, :c5758, :c5759, :c5760, :c5761, :c5762, :c5763, :c5764, :c5765, :c5766, :c5767, :c5768, :c5769, :c5770, :c5771, :c5772, :c5773, :c5774, :c5775, :c5776, :c5777, :c5778, :c5779, :c5780, :c5781, :c5782, :c5783, :c5784, :c5785, :c5786, :c5787, :c5788, :c5789, :c5790, :c5791, :c5792, :c5793, :c5794, :c5795, :c5796, :c5797, :c5798, :c5799, :c5800, :c5801, :c5802, :c5803, :c5804, :c5805, :c5806, :c5807, :c5808, :c5809, :c5810, :c5811, :c5812, :c5813, :c5814, :c5815, :c5816, :c5817, :c5818, :c5819, :c5820, :c5821, :c5822, :c5823, :c5824, :c5825, :c5826, :c5827, :c5828, :c5829, :c5830, :c5831, :c5832, :c5833, :c5834, :c5835, :c5836, :c5837, :c5838, :c5839, :c5840, :c5841, :c5842, :c5843, :c5844, :c5845, :c5846, :c5847, :c5848, :c5849, :c5850, :c5851, :c5852, :c5853, :c5854, :c5855, :c5856, :c5857, :c5858, :c5859, :c5860, :c5861, :c5862, :c5863, :c5864, :c5865, :c5866, :c5867, :c5868, :c5869, :c5870, :c5871, :c5872, :c5873, :c5874, :c5875, :c5876, :c5877, :c5878, :c5879, :c5880, :c5881, :c5882, :c5883, :c5884, :c5885, :c5886, :c5887, :c5888, :c5889, :c5890, :c5891, :c5892, :c5893, :c5894, :c5895, :c5896, :c5897, :c5898, :c5899, :c5900, :c5901, :c5902, :c5903, :c5904, :c5905, :c5906, :c5907, :c5908, :c5909, :c5910, :c5911, :c5912, :c5913, :c5914, :c5915, :c5916, :c5917, :c5918, :c5919, :c5920, :c5921, :c5922, :c5923, :c5924, :c5925, :c5926, :c5927, :c5928, :c5929, :c5930, :c5931, :c5932, :c5933, :c5934, :c5935, :c5936, :c5937, :c5938, :c5939, :c5940, :c5941, :c5942, :c5943, :c5944, :c5945, :c5946, :c5947, :c5948, :c5949, :c5950, :c5951, :c5952, :c5953, :c5954, :c5955, :c5956, :c5957, :c5958, :c5959, :c5960, :c5961, :c5962, :c5963, :c5964, :c5965, :c5966, :c5967, :c5968, :c5969, :c5970, :c5971, :c5972, :c5973, :c5974, :c5975, :c5976, :c5977, :c5978, :c5979, :c5980, :c5981, :c5982, :c5983, :c5984, :c5985, :c5986, :c5987, :c5988, :c5989, :c5990, :c5991, :c5992, :c5993, :c5994, :c5995, :c5996, :c5997, :c5998, :c5999, :c6000, :c6001, :c6002, :c6003, :c6004, :c6005, :c6006, :c6007, :c6008, :c6009, :c6010, :c6011, :c6012, :c6013, :c6014, :c6015, :c6016, :c6017, :c6018, :c6019, :c6020, :c6021, :c6022, :c6023, :c6024, :c6025, :c6026, :c6027, :c6028, :c6029, :c6030, :c6031, :c6032, :c6033, :c6034, :c6035, :c6036, :c6037, :c6038, :c6039, :c6040, :c6041, :c6042, :c6043, :c6044, :c6045, :c6046, :c6047, :c6048, :c6049, :c6050, :c6051, :c6052, :c6053, :c6054, :c6055, :c6056, :c6057, :c6058, :c6059, :c6060, :c6061, :c6062, :c6063, :c6064, :c6065, :c6066, :c6067, :c6068, :c6069, :c6070, :c6071, :c6072, :c6073, :c6074, :c6075, :c6076, :c6077, :c6078, :c6079, :c6080, :c6081, :c6082, :c6083, :c6084, :c6085, :c6086, :c6087, :c6088, :c6089, :c6090, :c6091, :c6092, :c6093, :c6094, :c6095, :c6096, :c6097, :c6098, :c6099, :c6100, :c6101, :c6102, :c6103, :c6104, :c6105, :c6106, :c6107, :c6108, :c6109, :c6110, :c6111, :c6112, :c6113, :c6114, :c6115, :c6116, :c6117, :c6118, :c6119, :c6120, :c6121, :c6122, :c6123, :c6124, :c6125, :c6126, :c6127, :c6128, :c6129, :c6130, :c6131, :c6132, :c6133, :c6134, :c6135, :c6136, :c6137, :c6138, :c6139, :c6140, :c6141, :c6142, :c6143, :c6144, :c6145, :c6146, :c6147, :c6148, :c6149, :c6150, :c6151, :c6152, :c6153, :c6154, :c6155, :c6156, :c6157, :c6158, :c6159, :c6160, :c6161, :c6162, :c6163, :c6164, :c6165, :c6166, :c6167, :c6168, :c6169, :c6170, :c6171, :c6172, :c6173, :c6174, :c6175, :c6176, :c6177, :c6178, :c6179, :c6180, :c6181, :c6182, :c6183, :c6184, :c6185, :c6186, :c6187, :c6188, :c6189, :c6190, :c6191, :c6192, :c6193, :c6194, :c6195, :c6196, :c6197, :c6198, :c6199, :c6200, :c6201, :c6202, :c6203, :c6204, :c6205, :c6206, :c6207, :c6208, :c6209, :c6210, :c6211, :c6212, :c6213, :c6214, :c6215, :c6216, :c6217, :c6218, :c6219, :c6220, :c6221, :c6222, :c6223, :c6224, :c6225, :c6226, :c6227, :c6228, :c6229, :c6230, :c6231, :c6232, :c6233, :c6234, :c6235, :c6236, :c6237, :c6238, :c6239, :c6240, :c6241, :c6242, :c6243, :c6244, :c6245, :c6246, :c6247, :c6248, :c6249, :c6250, :c6251, :c6252, :c6253, :c6254, :c6255, :c6256, :c6257, :c6258, :c6259, :c6260, :c6261, :c6262, :c6263, :c6264, :c6265, :c6266, :c6267, :c6268, :c6269, :c6270, :c6271, :c6272, :c6273, :c6274, :c6275, :c6276, :c6277, :c6278, :c6279, :c6280, :c6281, :c6282, :c6283, :c6284, :c6285, :c6286, :c6287, :c6288, :c6289, :c6290, :c6291, :c6292, :c6293, :c6294, :c6295, :c6296, :c6297, :c6298, :c6299, :c6300, :c6301, :c6302, :c6303, :c6304, :c6305, :c6306, :c6307, :c6308, :c6309, :c6310, :c6311, :c6312, :c6313, :c6314, :c6315, :c6316, :c6317, :c6318, :c6319, :c6320, :c6321, :c6322, :c6323, :c6324, :c6325, :c6326, :c6327, :c6328, :c6329, :c6330, :c6331, :c6332, :c6333, :c6334, :c6335, :c6336, :c6337, :c6338, :c6339, :c6340, :c6341, :c6342, :c6343, :c6344, :c6345, :c6346, :c6347, :c6348, :c6349, :c6350, :c6351, :c6352, :c6353, :c6354, :c6355, :c6356, :c6357, :c6358, :c6359, :c6360, :c6361, :c6362, :c6363, :c6364, :c6365, :c6366, :c6367, :c6368, :c6369, :c6370, :c6371, :c6372, :c6373, :c6374, :c6375, :c6376, :c6377, :c6378, :c6379, :c6380, :c6381, :c6382, :c6383, :c6384, :c6385, :c6386, :c6387, :c6388, :c6389, :c6390, :c6391, :c6392, :c6393, :c6394, :c6395, :c6396, :c6397, :c6398, :c6399, :c6400, :c6401, :c6402, :c6403, :c6404, :c6405, :c6406, :c6407, :c6408, :c6409, :c6410, :c6411, :c6412, :c6413, :c6414, :c6415, :c6416, :c6417, :c6418, :c6419, :c6420, :c6421, :c6422, :c6423, :c6424, :c6425, :c6426, :c6427, :c6428, :c6429, :c6430, :c6431, :c6432, :c6433, :c6434, :c6435, :c6436, :c6437, :c6438, :c6439, :c6440, :c6441, :c6442, :c6443, :c6444, :c6445, :c6446, :c6447, :c6448, :c6449, :c6450, :c6451, :c6452, :c6453, :c6454, :c6455, :c6456, :c6457, :c6458, :c6459, :c6460, :c6461, :c6462, :c6463, :c6464, :c6465, :c6466, :c6467, :c6468, :c6469, :c6470, :c6471, :c6472, :c6473, :c6474, :c6475, :c6476, :c6477, :c6478, :c6479, :c6480, :c6481, :c6482, :c6483, :c6484, :c6485, :c6486, :c6487, :c6488, :c6489, :c6490, :c6491, :c6492, :c6493, :c6494, :c6495, :c6496, :c6497, :c6498, :c6499, :c6500, :c6501, :c6502, :c6503, :c6504, :c6505, :c6506, :c6507, :c6508, :c6509, :c6510, :c6511, :c6512, :c6513, :c6514, :c6515, :c6516, :c6517, :c6518, :c6519, :c6520, :c6521, :c6522, :c6523, :c6524, :c6525, :c6526, :c6527, :c6528, :c6529, :c6530, :c6531, :c6532, :c6533, :c6534, :c6535, :c6536, :c6537, :c6538, :c6539, :c6540, :c6541, :c6542, :c6543, :c6544, :c6545, :c6546, :c6547, :c6548, :c6549, :c6550, :c6551, :c6552, :c6553, :c6554, :c6555, :c6556, :c6557, :c6558, :c6559, :c6560, :c6561, :c6562, :c6563, :c6564, :c6565, :c6566, :c6567, :c6568, :c6569, :c6570, :c6571, :c6572, :c6573, :c6574, :c6575, :c6576, :c6577, :c6578, :c6579, :c6580, :c6581, :c6582, :c6583, :c6584, :c6585, :c6586, :c6587, :c6588, :c6589, :c6590, :c6591, :c6592, :c6593, :c6594, :c6595, :c6596, :c6597, :c6598, :c6599, :c6600, :c6601, :c6602, :c6603, :c6604, :c6605, :c6606, :c6607, :c6608, :c6609, :c6610, :c6611, :c6612, :c6613, :c6614, :c6615, :c6616, :c6617, :c6618, :c6619, :c6620, :c6621, :c6622, :c6623, :c6624, :c6625, :c6626, :c6627, :c6628, :c6629, :c6630, :c6631, :c6632, :c6633, :c6634, :c6635, :c6636, :c6637, :c6638, :c6639, :c6640, :c6641, :c6642, :c6643, :c6644, :c6645, :c6646, :c6647, :c6648, :c6649, :c6650, :c6651, :c6652, :c6653, :c6654, :c6655, :c6656, :c6657, :c6658, :c6659, :c6660, :c6661, :c6662, :c6663, :c6664, :c6665, :c6666, :c6667, :c6668, :c6669, :c6670, :c6671, :c6672, :c6673, :c6674, :c6675, :c6676, :c6677, :c6678, :c6679, :c6680, :c6681, :c6682, :c6683, :c6684, :c6685, :c6686, :c6687, :c6688, :c6689, :c6690, :c6691, :c6692, :c6693, :c6694, :c6695, :c6696, :c6697, :c6698, :c6699, :c6700, :c6701, :c6702, :c6703, :c6704, :c6705, :c6706, :c6707, :c6708, :c6709, :c6710, :c6711, :c6712, :c6713, :c6714, :c6715, :c6716, :c6717, :c6718, :c6719, :c6720, :c6721, :c6722, :c6723, :c6724, :c6725, :c6726, :c6727, :c6728, :c6729, :c6730, :c6731, :c6732, :c6733, :c6734, :c6735, :c6736, :c6737, :c6738, :c6739, :c6740, :c6741, :c6742, :c6743, :c6744, :c6745, :c6746, :c6747, :c6748, :c6749, :c6750, :c6751, :c6752, :c6753, :c6754, :c6755, :c6756, :c6757, :c6758, :c6759, :c6760, :c6761, :c6762, :c6763, :c6764, :c6765, :c6766, :c6767, :c6768, :c6769, :c6770, :c6771, :c6772, :c6773, :c6774, :c6775, :c6776, :c6777, :c6778, :c6779, :c6780, :c6781, :c6782, :c6783, :c6784, :c6785, :c6786, :c6787, :c6788, :c6789, :c6790, :c6791, :c6792, :c6793, :c6794, :c6795, :c6796, :c6797, :c6798, :c6799, :c6800, :c6801, :c6802, :c6803, :c6804, :c6805, :c6806, :c6807, :c6808, :c6809, :c6810, :c6811, :c6812, :c6813, :c6814, :c6815, :c6816, :c6817, :c6818, :c6819, :c6820, :c6821, :c6822, :c6823, :c6824, :c6825, :c6826, :c6827, :c6828, :c6829, :c6830, :c6831, :c6832, :c6833, :c6834, :c6835, :c6836, :c6837, :c6838, :c6839, :c6840, :c6841, :c6842, :c6843, :c6844, :c6845, :c6846, :c6847, :c6848, :c6849, :c6850, :c6851, :c6852, :c6853, :c6854, :c6855, :c6856, :c6857, :c6858, :c6859, :c6860, :c6861, :c6862, :c6863, :c6864, :c6865, :c6866, :c6867, :c6868, :c6869, :c6870, :c6871, :c6872, :c6873, :c6874, :c6875, :c6876, :c6877, :c6878, :c6879, :c6880, :c6881, :c6882, :c6883, :c6884, :c6885, :c6886, :c6887, :c6888, :c6889, :c6890, :c6891, :c6892, :c6893, :c6894, :c6895, :c6896, :c6897, :c6898, :c6899, :c6900, :c6901, :c6902, :c6903, :c6904, :c6905, :c6906, :c6907, :c6908, :c6909, :c6910, :c6911, :c6912, :c6913, :c6914, :c6915, :c6916, :c6917, :c6918, :c6919, :c6920, :c6921, :c6922, :c6923, :c6924, :c6925, :c6926, :c6927, :c6928, :c6929, :c6930, :c6931, :c6932, :c6933, :c6934, :c6935, :c6936, :c6937, :c6938, :c6939, :c6940, :c6941, :c6942, :c6943, :c6944, :c6945, :c6946, :c6947, :c6948, :c6949, :c6950, :c6951, :c6952, :c6953, :c6954, :c6955, :c6956, :c6957, :c6958, :c6959, :c6960, :c6961, :c6962, :c6963, :c6964, :c6965, :c6966, :c6967, :c6968, :c6969, :c6970, :c6971, :c6972, :c6973, :c6974, :c6975, :c6976, :c6977, :c6978, :c6979, :c6980, :c6981, :c6982, :c6983, :c6984, :c6985, :c6986, :c6987, :c6988, :c6989, :c6990, :c6991, :c6992, :c6993, :c6994, :c6995, :c6996, :c6997, :c6998, :c6999, :c7000, :c7001, :c7002, :c7003, :c7004, :c7005, :c7006, :c7007, :c7008, :c7009, :c7010, :c7011, :c7012, :c7013, :c7014, :c7015, :c7016, :c7017, :c7018, :c7019, :c7020, :c7021, :c7022, :c7023, :c7024, :c7025, :c7026, :c7027, :c7028, :c7029, :c7030, :c7031, :c7032, :c7033, :c7034, :c7035, :c7036, :c7037, :c7038, :c7039, :c7040, :c7041, :c7042, :c7043, :c7044, :c7045, :c7046, :c7047, :c7048, :c7049, :c7050, :c7051, :c7052, :c7053, :c7054, :c7055, :c7056, :c7057, :c7058, :c7059, :c7060, :c7061, :c7062, :c7063, :c7064, :c7065, :c7066, :c7067, :c7068, :c7069, :c7070, :c7071, :c7072, :c7073, :c7074, :c7075, :c7076, :c7077, :c7078, :c7079, :c7080, :c7081, :c7082, :c7083, :c7084, :c7085, :c7086, :c7087, :c7088, :c7089, :c7090, :c7091, :c7092, :c7093, :c7094, :c7095, :c7096, :c7097, :c7098, :c7099, :c7100, :c7101, :c7102, :c7103, :c7104, :c7105, :c7106, :c7107, :c7108, :c7109, :c7110, :c7111, :c7112, :c7113, :c7114, :c7115, :c7116, :c7117, :c7118, :c7119, :c7120, :c7121, :c7122, :c7123, :c7124, :c7125, :c7126, :c7127, :c7128, :c7129, :c7130, :c7131, :c7132, :c7133, :c7134, :c7135, :c7136, :c7137, :c7138, :c7139, :c7140, :c7141, :c7142, :c7143, :c7144, :c7145, :c7146, :c7147, :c7148, :c7149, :c7150, :c7151, :c7152, :c7153, :c7154, :c7155, :c7156, :c7157, :c7158, :c7159, :c7160, :c7161, :c7162, :c7163, :c7164, :c7165, :c7166, :c7167, :c7168, :c7169, :c7170, :c7171, :c7172, :c7173, :c7174, :c7175, :c7176, :c7177, :c7178, :c7179, :c7180, :c7181, :c7182, :c7183, :c7184, :c7185, :c7186, :c7187, :c7188, :c7189, :c7190, :c7191, :c7192, :c7193, :c7194, :c7195, :c7196, :c7197, :c7198, :c7199, :c7200, :c7201, :c7202, :c7203, :c7204, :c7205, :c7206, :c7207, :c7208, :c7209, :c7210, :c7211, :c7212, :c7213, :c7214, :c7215, :c7216, :c7217, :c7218, :c7219, :c7220, :c7221, :c7222, :c7223, :c7224, :c7225, :c7226, :c7227, :c7228, :c7229, :c7230, :c7231, :c7232, :c7233, :c7234, :c7235, :c7236, :c7237, :c7238, :c7239, :c7240, :c7241, :c7242, :c7243, :c7244, :c7245, :c7246, :c7247, :c7248, :c7249, :c7250, :c7251, :c7252, :c7253, :c7254, :c7255, :c7256, :c7257, :c7258, :c7259, :c7260, :c7261, :c7262, :c7263, :c7264, :c7265, :c7266, :c7267, :c7268, :c7269, :c7270, :c7271, :c7272, :c7273, :c7274, :c7275, :c7276, :c7277, :c7278, :c7279, :c7280, :c7281, :c7282, :c7283, :c7284, :c7285, :c7286, :c7287, :c7288, :c7289, :c7290, :c7291, :c7292, :c7293, :c7294, :c7295, :c7296, :c7297, :c7298, :c7299, :c7300, :c7301, :c7302, :c7303, :c7304, :c7305, :c7306, :c7307, :c7308, :c7309, :c7310, :c7311, :c7312, :c7313, :c7314, :c7315, :c7316, :c7317, :c7318, :c7319, :c7320, :c7321, :c7322, :c7323, :c7324, :c7325, :c7326, :c7327, :c7328, :c7329, :c7330, :c7331, :c7332, :c7333, :c7334, :c7335, :c7336, :c7337, :c7338, :c7339, :c7340, :c7341, :c7342, :c7343, :c7344, :c7345, :c7346, :c7347, :c7348, :c7349, :c7350, :c7351, :c7352, :c7353, :c7354, :c7355, :c7356, :c7357, :c7358, :c7359, :c7360, :c7361, :c7362, :c7363, :c7364, :c7365, :c7366, :c7367, :c7368, :c7369, :c7370, :c7371, :c7372, :c7373, :c7374, :c7375, :c7376, :c7377, :c7378, :c7379, :c7380, :c7381, :c7382, :c7383, :c7384, :c7385, :c7386, :c7387, :c7388, :c7389, :c7390, :c7391, :c7392, :c7393, :c7394, :c7395, :c7396, :c7397, :c7398, :c7399, :c7400, :c7401, :c7402, :c7403, :c7404, :c7405, :c7406, :c7407, :c7408, :c7409, :c7410, :c7411, :c7412, :c7413, :c7414, :c7415, :c7416, :c7417, :c7418, :c7419, :c7420, :c7421, :c7422, :c7423, :c7424, :c7425, :c7426, :c7427, :c7428, :c7429, :c7430, :c7431, :c7432, :c7433, :c7434, :c7435, :c7436, :c7437, :c7438, :c7439, :c7440, :c7441, :c7442, :c7443, :c7444, :c7445, :c7446, :c7447, :c7448, :c7449, :c7450, :c7451, :c7452, :c7453, :c7454, :c7455, :c7456, :c7457, :c7458, :c7459, :c7460, :c7461, :c7462, :c7463, :c7464, :c7465, :c7466, :c7467, :c7468, :c7469, :c7470, :c7471, :c7472, :c7473, :c7474, :c7475, :c7476, :c7477, :c7478, :c7479, :c7480, :c7481, :c7482, :c7483, :c7484, :c7485, :c7486, :c7487, :c7488, :c7489, :c7490, :c7491, :c7492, :c7493, :c7494, :c7495, :c7496, :c7497, :c7498, :c7499, :c7500, :c7501, :c7502, :c7503, :c7504, :c7505, :c7506, :c7507, :c7508, :c7509, :c7510, :c7511, :c7512, :c7513, :c7514, :c7515, :c7516, :c7517, :c7518, :c7519, :c7520, :c7521, :c7522, :c7523, :c7524, :c7525, :c7526, :c7527, :c7528, :c7529, :c7530, :c7531, :c7532, :c7533, :c7534, :c7535, :c7536, :c7537, :c7538, :c7539, :c7540, :c7541, :c7542, :c7543, :c7544, :c7545, :c7546, :c7547, :c7548, :c7549, :c7550, :c7551, :c7552, :c7553, :c7554, :c7555, :c7556, :c7557, :c7558, :c7559, :c7560, :c7561, :c7562, :c7563, :c7564, :c7565, :c7566, :c7567, :c7568, :c7569, :c7570, :c7571, :c7572, :c7573, :c7574, :c7575, :c7576, :c7577, :c7578, :c7579, :c7580, :c7581, :c7582, :c7583, :c7584, :c7585, :c7586, :c7587, :c7588, :c7589, :c7590, :c7591, :c7592, :c7593, :c7594, :c7595, :c7596, :c7597, :c7598, :c7599, :c7600, :c7601, :c7602, :c7603, :c7604, :c7605, :c7606, :c7607, :c7608, :c7609, :c7610, :c7611, :c7612, :c7613, :c7614, :c7615, :c7616, :c7617, :c7618, :c7619, :c7620, :c7621, :c7622, :c7623, :c7624, :c7625, :c7626, :c7627, :c7628, :c7629, :c7630, :c7631, :c7632, :c7633, :c7634, :c7635, :c7636, :c7637, :c7638, :c7639, :c7640, :c7641, :c7642, :c7643, :c7644, :c7645, :c7646, :c7647, :c7648, :c7649, :c7650, :c7651, :c7652, :c7653, :c7654, :c7655, :c7656, :c7657, :c7658, :c7659, :c7660, :c7661, :c7662, :c7663, :c7664, :c7665, :c7666, :c7667, :c7668, :c7669, :c7670, :c7671, :c7672, :c7673, :c7674, :c7675, :c7676, :c7677, :c7678, :c7679, :c7680, :c7681, :c7682, :c7683, :c7684, :c7685, :c7686, :c7687, :c7688, :c7689, :c7690, :c7691, :c7692, :c7693, :c7694, :c7695, :c7696, :c7697, :c7698, :c7699, :c7700, :c7701, :c7702, :c7703, :c7704, :c7705, :c7706, :c7707, :c7708, :c7709, :c7710, :c7711, :c7712, :c7713, :c7714, :c7715, :c7716, :c7717, :c7718, :c7719, :c7720, :c7721, :c7722, :c7723, :c7724, :c7725, :c7726, :c7727, :c7728, :c7729, :c7730, :c7731, :c7732, :c7733, :c7734, :c7735, :c7736, :c7737, :c7738, :c7739, :c7740, :c7741, :c7742, :c7743, :c7744, :c7745, :c7746, :c7747, :c7748, :c7749, :c7750, :c7751, :c7752, :c7753, :c7754, :c7755, :c7756, :c7757, :c7758, :c7759, :c7760, :c7761, :c7762, :c7763, :c7764, :c7765, :c7766, :c7767, :c7768, :c7769, :c7770, :c7771, :c7772, :c7773, :c7774, :c7775, :c7776, :c7777, :c7778, :c7779, :c7780, :c7781, :c7782, :c7783, :c7784, :c7785, :c7786, :c7787, :c7788, :c7789, :c7790, :c7791, :c7792, :c7793, :c7794, :c7795, :c7796, :c7797, :c7798, :c7799, :c7800, :c7801, :c7802, :c7803, :c7804, :c7805, :c7806, :c7807, :c7808, :c7809, :c7810, :c7811, :c7812, :c7813, :c7814, :c7815, :c7816, :c7817, :c7818, :c7819, :c7820, :c7821, :c7822, :c7823, :c7824, :c7825, :c7826, :c7827, :c7828, :c7829, :c7830, :c7831, :c7832, :c7833, :c7834, :c7835, :c7836, :c7837, :c7838, :c7839, :c7840, :c7841, :c7842, :c7843, :c7844, :c7845, :c7846, :c7847, :c7848, :c7849, :c7850, :c7851, :c7852, :c7853, :c7854, :c7855, :c7856, :c7857, :c7858, :c7859, :c7860, :c7861, :c7862, :c7863, :c7864, :c7865, :c7866, :c7867, :c7868, :c7869, :c7870, :c7871, :c7872, :c7873, :c7874, :c7875, :c7876, :c7877, :c7878, :c7879, :c7880, :c7881, :c7882, :c7883, :c7884, :c7885, :c7886, :c7887, :c7888, :c7889, :c7890, :c7891, :c7892, :c7893, :c7894, :c7895, :c7896, :c7897, :c7898, :c7899, :c7900, :c7901, :c7902, :c7903, :c7904, :c7905, :c7906, :c7907, :c7908, :c7909, :c7910, :c7911, :c7912, :c7913, :c7914, :c7915, :c7916, :c7917, :c7918, :c7919, :c7920, :c7921, :c7922, :c7923, :c7924, :c7925, :c7926, :c7927, :c7928, :c7929, :c7930, :c7931, :c7932, :c7933, :c7934, :c7935, :c7936, :c7937, :c7938, :c7939, :c7940, :c7941, :c7942, :c7943, :c7944, :c7945, :c7946, :c7947, :c7948, :c7949, :c7950, :c7951, :c7952, :c7953, :c7954, :c7955, :c7956, :c7957, :c7958, :c7959, :c7960, :c7961, :c7962, :c7963, :c7964, :c7965, :c7966, :c7967, :c7968, :c7969, :c7970, :c7971, :c7972, :c7973, :c7974, :c7975, :c7976, :c7977, :c7978, :c7979, :c7980, :c7981, :c7982, :c7983, :c7984, :c7985, :c7986, :c7987, :c7988, :c7989, :c7990, :c7991, :c7992, :c7993, :c7994, :c7995, :c7996, :c7997, :c7998, :c7999, :c8000, :c8001, :c8002, :c8003, :c8004, :c8005, :c8006, :c8007, :c8008, :c8009, :c8010, :c8011, :c8012, :c8013, :c8014, :c8015, :c8016, :c8017, :c8018, :c8019, :c8020, :c8021, :c8022, :c8023, :c8024, :c8025, :c8026, :c8027, :c8028, :c8029, :c8030, :c8031, :c8032, :c8033, :c8034, :c8035, :c8036, :c8037, :c8038, :c8039, :c8040, :c8041, :c8042, :c8043, :c8044, :c8045, :c8046, :c8047, :c8048, :c8049, :c8050, :c8051, :c8052, :c8053, :c8054, :c8055, :c8056, :c8057, :c8058, :c8059, :c8060, :c8061, :c8062, :c8063, :c8064, :c8065, :c8066, :c8067, :c8068, :c8069, :c8070, :c8071, :c8072, :c8073, :c8074, :c8075, :c8076, :c8077, :c8078, :c8079, :c8080, :c8081, :c8082, :c8083, :c8084, :c8085, :c8086, :c8087, :c8088, :c8089, :c8090, :c8091, :c8092, :c8093, :c8094, :c8095, :c8096, :c8097, :c8098, :c8099, :c8100, :c8101, :c8102, :c8103, :c8104, :c8105, :c8106, :c8107, :c8108, :c8109, :c8110, :c8111, :c8112, :c8113, :c8114, :c8115, :c8116, :c8117, :c8118, :c8119, :c8120, :c8121, :c8122, :c8123, :c8124, :c8125, :c8126, :c8127, :c8128, :c8129, :c8130, :c8131, :c8132, :c8133, :c8134, :c8135, :c8136, :c8137, :c8138, :c8139, :c8140, :c8141, :c8142, :c8143, :c8144, :c8145, :c8146, :c8147, :c8148, :c8149, :c8150, :c8151, :c8152, :c8153, :c8154, :c8155, :c8156, :c8157, :c8158, :c8159, :c8160, :c8161, :c8162, :c8163, :c8164, :c8165, :c8166, :c8167, :c8168, :c8169, :c8170, :c8171, :c8172, :c8173, :c8174, :c8175, :c8176, :c8177, :c8178, :c8179, :c8180, :c8181, :c8182, :c8183, :c8184, :c8185, :c8186, :c8187, :c8188, :c8189, :c8190, :c8191, :c8192, :c8193, :c8194, :c8195, :c8196, :c8197, :c8198, :c8199, :c8200, :c8201, :c8202, :c8203, :c8204, :c8205, :c8206, :c8207, :c8208, :c8209, :c8210, :c8211, :c8212, :c8213, :c8214, :c8215, :c8216, :c8217, :c8218, :c8219, :c8220, :c8221, :c8222, :c8223, :c8224, :c8225, :c8226, :c8227, :c8228, :c8229, :c8230, :c8231, :c8232, :c8233, :c8234, :c8235, :c8236, :c8237, :c8238, :c8239, :c8240, :c8241, :c8242, :c8243, :c8244, :c8245, :c8246, :c8247, :c8248, :c8249, :c8250, :c8251, :c8252, :c8253, :c8254, :c8255, :c8256, :c8257, :c8258, :c8259, :c8260, :c8261, :c8262, :c8263, :c8264, :c8265, :c8266, :c8267, :c8268, :c8269, :c8270, :c8271, :c8272, :c8273, :c8274, :c8275, :c8276, :c8277, :c8278, :c8279, :c8280, :c8281, :c8282, :c8283, :c8284, :c8285, :c8286, :c8287, :c8288, :c8289, :c8290, :c8291, :c8292, :c8293, :c8294, :c8295, :c8296, :c8297, :c8298, :c8299, :c8300, :c8301, :c8302, :c8303, :c8304, :c8305, :c8306, :c8307, :c8308, :c8309, :c8310, :c8311, :c8312, :c8313, :c8314, :c8315, :c8316, :c8317, :c8318, :c8319, :c8320, :c8321, :c8322, :c8323, :c8324, :c8325, :c8326, :c8327, :c8328, :c8329, :c8330, :c8331, :c8332, :c8333, :c8334, :c8335, :c8336, :c8337, :c8338, :c8339, :c8340, :c8341, :c8342, :c8343, :c8344, :c8345, :c8346, :c8347, :c8348, :c8349, :c8350, :c8351, :c8352, :c8353, :c8354, :c8355, :c8356, :c8357, :c8358, :c8359, :c8360, :c8361, :c8362, :c8363, :c8364, :c8365, :c8366, :c8367, :c8368, :c8369, :c8370, :c8371, :c8372, :c8373, :c8374, :c8375, :c8376, :c8377, :c8378, :c8379, :c8380, :c8381, :c8382, :c8383, :c8384, :c8385, :c8386, :c8387, :c8388, :c8389, :c8390, :c8391, :c8392, :c8393, :c8394, :c8395, :c8396, :c8397, :c8398, :c8399, :c8400, :c8401, :c8402, :c8403, :c8404, :c8405, :c8406, :c8407, :c8408, :c8409, :c8410, :c8411, :c8412, :c8413, :c8414, :c8415, :c8416, :c8417, :c8418, :c8419, :c8420, :c8421, :c8422, :c8423, :c8424, :c8425, :c8426, :c8427, :c8428, :c8429, :c8430, :c8431, :c8432, :c8433, :c8434, :c8435, :c8436, :c8437, :c8438, :c8439, :c8440, :c8441, :c8442, :c8443, :c8444, :c8445, :c8446, :c8447, :c8448, :c8449, :c8450, :c8451, :c8452, :c8453, :c8454, :c8455, :c8456, :c8457, :c8458, :c8459, :c8460, :c8461, :c8462, :c8463, :c8464, :c8465, :c8466, :c8467, :c8468, :c8469, :c8470, :c8471, :c8472, :c8473, :c8474, :c8475, :c8476, :c8477, :c8478, :c8479, :c8480, :c8481, :c8482, :c8483, :c8484, :c8485, :c8486, :c8487, :c8488, :c8489, :c8490, :c8491, :c8492, :c8493, :c8494, :c8495, :c8496, :c8497, :c8498, :c8499, :c8500, :c8501, :c8502, :c8503, :c8504, :c8505, :c8506, :c8507, :c8508, :c8509, :c8510, :c8511, :c8512, :c8513, :c8514, :c8515, :c8516, :c8517, :c8518, :c8519, :c8520, :c8521, :c8522, :c8523, :c8524, :c8525, :c8526, :c8527, :c8528, :c8529, :c8530, :c8531, :c8532, :c8533, :c8534, :c8535, :c8536, :c8537, :c8538, :c8539, :c8540, :c8541, :c8542, :c8543, :c8544, :c8545, :c8546, :c8547, :c8548, :c8549, :c8550, :c8551, :c8552, :c8553, :c8554, :c8555, :c8556, :c8557, :c8558, :c8559, :c8560, :c8561, :c8562, :c8563, :c8564, :c8565, :c8566, :c8567, :c8568, :c8569, :c8570, :c8571, :c8572, :c8573, :c8574, :c8575, :c8576, :c8577, :c8578, :c8579, :c8580, :c8581, :c8582, :c8583, :c8584, :c8585, :c8586, :c8587, :c8588, :c8589, :c8590, :c8591, :c8592, :c8593, :c8594, :c8595, :c8596, :c8597, :c8598, :c8599, :c8600, :c8601, :c8602, :c8603, :c8604, :c8605, :c8606, :c8607, :c8608, :c8609, :c8610, :c8611, :c8612, :c8613, :c8614, :c8615, :c8616, :c8617, :c8618, :c8619, :c8620, :c8621, :c8622, :c8623, :c8624, :c8625, :c8626, :c8627, :c8628, :c8629, :c8630, :c8631, :c8632, :c8633, :c8634, :c8635, :c8636, :c8637, :c8638, :c8639, :c8640, :c8641, :c8642, :c8643, :c8644, :c8645, :c8646, :c8647, :c8648, :c8649, :c8650, :c8651, :c8652, :c8653, :c8654, :c8655, :c8656, :c8657, :c8658, :c8659, :c8660, :c8661, :c8662, :c8663, :c8664, :c8665, :c8666, :c8667, :c8668, :c8669, :c8670, :c8671, :c8672, :c8673, :c8674, :c8675, :c8676, :c8677, :c8678, :c8679, :c8680, :c8681, :c8682, :c8683, :c8684, :c8685, :c8686, :c8687, :c8688, :c8689, :c8690, :c8691, :c8692, :c8693, :c8694, :c8695, :c8696, :c8697, :c8698, :c8699, :c8700, :c8701, :c8702, :c8703, :c8704, :c8705, :c8706, :c8707, :c8708, :c8709, :c8710, :c8711, :c8712, :c8713, :c8714, :c8715, :c8716, :c8717, :c8718, :c8719, :c8720, :c8721, :c8722, :c8723, :c8724, :c8725, :c8726, :c8727, :c8728, :c8729, :c8730, :c8731, :c8732, :c8733, :c8734, :c8735, :c8736, :c8737, :c8738, :c8739, :c8740, :c8741, :c8742, :c8743, :c8744, :c8745, :c8746, :c8747, :c8748, :c8749, :c8750, :c8751, :c8752, :c8753, :c8754, :c8755, :c8756, :c8757, :c8758, :c8759, :c8760, :c8761, :c8762, :c8763, :c8764, :c8765, :c8766, :c8767, :c8768, :c8769, :c8770, :c8771, :c8772, :c8773, :c8774, :c8775, :c8776, :c8777, :c8778, :c8779, :c8780, :c8781, :c8782, :c8783, :c8784, :c8785, :c8786, :c8787, :c8788, :c8789, :c8790, :c8791, :c8792, :c8793, :c8794, :c8795, :c8796, :c8797, :c8798, :c8799, :c8800, :c8801, :c8802, :c8803, :c8804, :c8805, :c8806, :c8807, :c8808, :c8809, :c8810, :c8811, :c8812, :c8813, :c8814, :c8815, :c8816, :c8817, :c8818, :c8819, :c8820, :c8821, :c8822, :c8823, :c8824, :c8825, :c8826, :c8827, :c8828, :c8829, :c8830, :c8831, :c8832, :c8833, :c8834, :c8835, :c8836, :c8837, :c8838, :c8839, :c8840, :c8841, :c8842, :c8843, :c8844, :c8845, :c8846, :c8847, :c8848, :c8849, :c8850, :c8851, :c8852, :c8853, :c8854, :c8855, :c8856, :c8857, :c8858, :c8859, :c8860, :c8861, :c8862, :c8863, :c8864, :c8865, :c8866, :c8867, :c8868, :c8869, :c8870, :c8871, :c8872, :c8873, :c8874, :c8875, :c8876, :c8877, :c8878, :c8879, :c8880, :c8881, :c8882, :c8883, :c8884, :c8885, :c8886, :c8887, :c8888, :c8889, :c8890, :c8891, :c8892, :c8893, :c8894, :c8895, :c8896, :c8897, :c8898, :c8899, :c8900, :c8901, :c8902, :c8903, :c8904, :c8905, :c8906, :c8907, :c8908, :c8909, :c8910, :c8911, :c8912, :c8913, :c8914, :c8915, :c8916, :c8917, :c8918, :c8919, :c8920, :c8921, :c8922, :c8923, :c8924, :c8925, :c8926, :c8927, :c8928, :c8929, :c8930, :c8931, :c8932, :c8933, :c8934, :c8935, :c8936, :c8937, :c8938, :c8939, :c8940, :c8941, :c8942, :c8943, :c8944, :c8945, :c8946, :c8947, :c8948, :c8949, :c8950, :c8951, :c8952, :c8953, :c8954, :c8955, :c8956, :c8957, :c8958, :c8959, :c8960, :c8961, :c8962, :c8963, :c8964, :c8965, :c8966, :c8967, :c8968, :c8969, :c8970, :c8971, :c8972, :c8973, :c8974, :c8975, :c8976, :c8977, :c8978, :c8979, :c8980, :c8981, :c8982, :c8983, :c8984, :c8985, :c8986, :c8987, :c8988, :c8989, :c8990, :c8991, :c8992, :c8993, :c8994, :c8995, :c8996, :c8997, :c8998, :c8999, :c9000, :c9001, :c9002, :c9003, :c9004, :c9005, :c9006, :c9007, :c9008, :c9009, :c9010, :c9011, :c9012, :c9013, :c9014, :c9015, :c9016, :c9017, :c9018, :c9019, :c9020, :c9021, :c9022, :c9023, :c9024, :c9025, :c9026, :c9027, :c9028, :c9029, :c9030, :c9031, :c9032, :c9033, :c9034, :c9035, :c9036, :c9037, :c9038, :c9039, :c9040, :c9041, :c9042, :c9043, :c9044, :c9045, :c9046, :c9047, :c9048, :c9049, :c9050, :c9051, :c9052, :c9053, :c9054, :c9055, :c9056, :c9057, :c9058, :c9059, :c9060, :c9061, :c9062, :c9063, :c9064, :c9065, :c9066, :c9067, :c9068, :c9069, :c9070, :c9071, :c9072, :c9073, :c9074, :c9075, :c9076, :c9077, :c9078, :c9079, :c9080, :c9081, :c9082, :c9083, :c9084, :c9085, :c9086, :c9087, :c9088, :c9089, :c9090, :c9091, :c9092, :c9093, :c9094, :c9095, :c9096, :c9097, :c9098, :c9099, :c9100, :c9101, :c9102, :c9103, :c9104, :c9105, :c9106, :c9107, :c9108, :c9109, :c9110, :c9111, :c9112, :c9113, :c9114, :c9115, :c9116, :c9117, :c9118, :c9119, :c9120, :c9121, :c9122, :c9123, :c9124, :c9125, :c9126, :c9127, :c9128, :c9129, :c9130, :c9131, :c9132, :c9133, :c9134, :c9135, :c9136, :c9137, :c9138, :c9139, :c9140, :c9141, :c9142, :c9143, :c9144, :c9145, :c9146, :c9147, :c9148, :c9149, :c9150, :c9151, :c9152, :c9153, :c9154, :c9155, :c9156, :c9157, :c9158, :c9159, :c9160, :c9161, :c9162, :c9163, :c9164, :c9165, :c9166, :c9167, :c9168, :c9169, :c9170, :c9171, :c9172, :c9173, :c9174, :c9175, :c9176, :c9177, :c9178, :c9179, :c9180, :c9181, :c9182, :c9183, :c9184, :c9185, :c9186, :c9187, :c9188, :c9189, :c9190, :c9191, :c9192, :c9193, :c9194, :c9195, :c9196, :c9197, :c9198, :c9199, :c9200, :c9201, :c9202, :c9203, :c9204, :c9205, :c9206, :c9207, :c9208, :c9209, :c9210, :c9211, :c9212, :c9213, :c9214, :c9215, :c9216, :c9217, :c9218, :c9219, :c9220, :c9221, :c9222, :c9223, :c9224, :c9225, :c9226, :c9227, :c9228, :c9229, :c9230, :c9231, :c9232, :c9233, :c9234, :c9235, :c9236, :c9237, :c9238, :c9239, :c9240, :c9241, :c9242, :c9243, :c9244, :c9245, :c9246, :c9247, :c9248, :c9249, :c9250, :c9251, :c9252, :c9253, :c9254, :c9255, :c9256, :c9257, :c9258, :c9259, :c9260, :c9261, :c9262, :c9263, :c9264, :c9265, :c9266, :c9267, :c9268, :c9269, :c9270, :c9271, :c9272, :c9273, :c9274, :c9275, :c9276, :c9277, :c9278, :c9279, :c9280, :c9281, :c9282, :c9283, :c9284, :c9285, :c9286, :c9287, :c9288, :c9289, :c9290, :c9291, :c9292, :c9293, :c9294, :c9295, :c9296, :c9297, :c9298, :c9299, :c9300, :c9301, :c9302, :c9303, :c9304, :c9305, :c9306, :c9307, :c9308, :c9309, :c9310, :c9311, :c9312, :c9313, :c9314, :c9315, :c9316, :c9317, :c9318, :c9319, :c9320, :c9321, :c9322, :c9323, :c9324, :c9325, :c9326, :c9327, :c9328, :c9329, :c9330, :c9331, :c9332, :c9333, :c9334, :c9335, :c9336, :c9337, :c9338, :c9339, :c9340, :c9341, :c9342, :c9343, :c9344, :c9345, :c9346, :c9347, :c9348, :c9349, :c9350, :c9351, :c9352, :c9353, :c9354, :c9355, :c9356, :c9357, :c9358, :c9359, :c9360, :c9361, :c9362, :c9363, :c9364, :c9365, :c9366, :c9367, :c9368, :c9369, :c9370, :c9371, :c9372, :c9373, :c9374, :c9375, :c9376, :c9377, :c9378, :c9379, :c9380, :c9381, :c9382, :c9383, :c9384, :c9385, :c9386, :c9387, :c9388, :c9389, :c9390, :c9391, :c9392, :c9393, :c9394, :c9395, :c9396, :c9397, :c9398, :c9399, :c9400, :c9401, :c9402, :c9403, :c9404, :c9405, :c9406, :c9407, :c9408, :c9409, :c9410, :c9411, :c9412, :c9413, :c9414, :c9415, :c9416, :c9417, :c9418, :c9419, :c9420, :c9421, :c9422, :c9423, :c9424, :c9425, :c9426, :c9427, :c9428, :c9429, :c9430, :c9431, :c9432, :c9433, :c9434, :c9435, :c9436, :c9437, :c9438, :c9439, :c9440, :c9441, :c9442, :c9443, :c9444, :c9445, :c9446, :c9447, :c9448, :c9449, :c9450, :c9451, :c9452, :c9453, :c9454, :c9455, :c9456, :c9457, :c9458, :c9459, :c9460, :c9461, :c9462, :c9463, :c9464, :c9465, :c9466, :c9467, :c9468, :c9469, :c9470, :c9471, :c9472, :c9473, :c9474, :c9475, :c9476, :c9477, :c9478, :c9479, :c9480, :c9481, :c9482, :c9483, :c9484, :c9485, :c9486, :c9487, :c9488, :c9489, :c9490, :c9491, :c9492, :c9493, :c9494, :c9495, :c9496, :c9497, :c9498, :c9499, :c9500, :c9501, :c9502, :c9503, :c9504, :c9505, :c9506, :c9507, :c9508, :c9509, :c9510, :c9511, :c9512, :c9513, :c9514, :c9515, :c9516, :c9517, :c9518, :c9519, :c9520, :c9521, :c9522, :c9523, :c9524, :c9525, :c9526, :c9527, :c9528, :c9529, :c9530, :c9531, :c9532, :c9533, :c9534, :c9535, :c9536, :c9537, :c9538, :c9539, :c9540, :c9541, :c9542, :c9543, :c9544, :c9545, :c9546, :c9547, :c9548, :c9549, :c9550, :c9551, :c9552, :c9553, :c9554, :c9555, :c9556, :c9557, :c9558, :c9559, :c9560, :c9561, :c9562, :c9563, :c9564, :c9565, :c9566, :c9567, :c9568, :c9569, :c9570, :c9571, :c9572, :c9573, :c9574, :c9575, :c9576, :c9577, :c9578, :c9579, :c9580, :c9581, :c9582, :c9583, :c9584, :c9585, :c9586, :c9587, :c9588, :c9589, :c9590, :c9591, :c9592, :c9593, :c9594, :c9595, :c9596, :c9597, :c9598, :c9599, :c9600, :c9601, :c9602, :c9603, :c9604, :c9605, :c9606, :c9607, :c9608, :c9609, :c9610, :c9611, :c9612, :c9613, :c9614, :c9615, :c9616, :c9617, :c9618, :c9619, :c9620, :c9621, :c9622, :c9623, :c9624, :c9625, :c9626, :c9627, :c9628, :c9629, :c9630, :c9631, :c9632, :c9633, :c9634, :c9635, :c9636, :c9637, :c9638, :c9639, :c9640, :c9641, :c9642, :c9643, :c9644, :c9645, :c9646, :c9647, :c9648, :c9649, :c9650, :c9651, :c9652, :c9653, :c9654, :c9655, :c9656, :c9657, :c9658, :c9659, :c9660, :c9661, :c9662, :c9663, :c9664, :c9665, :c9666, :c9667, :c9668, :c9669, :c9670, :c9671, :c9672, :c9673, :c9674, :c9675, :c9676, :c9677, :c9678, :c9679, :c9680, :c9681, :c9682, :c9683, :c9684, :c9685, :c9686, :c9687, :c9688, :c9689, :c9690, :c9691, :c9692, :c9693, :c9694, :c9695, :c9696, :c9697, :c9698, :c9699, :c9700, :c9701, :c9702, :c9703, :c9704, :c9705, :c9706, :c9707, :c9708, :c9709, :c9710, :c9711, :c9712, :c9713, :c9714, :c9715, :c9716, :c9717, :c9718, :c9719, :c9720, :c9721, :c9722, :c9723, :c9724, :c9725, :c9726, :c9727, :c9728, :c9729, :c9730, :c9731, :c9732, :c9733, :c9734, :c9735, :c9736, :c9737, :c9738, :c9739, :c9740, :c9741, :c9742, :c9743, :c9744, :c9745, :c9746, :c9747, :c9748, :c9749, :c9750, :c9751, :c9752, :c9753, :c9754, :c9755, :c9756, :c9757, :c9758, :c9759, :c9760, :c9761, :c9762, :c9763, :c9764, :c9765, :c9766, :c9767, :c9768, :c9769, :c9770, :c9771, :c9772, :c9773, :c9774, :c9775, :c9776, :c9777, :c9778, :c9779, :c9780, :c9781, :c9782, :c9783, :c9784, :c9785, :c9786, :c9787, :c9788, :c9789, :c9790, :c9791, :c9792, :c9793, :c9794, :c9795, :c9796, :c9797, :c9798, :c9799, :c9800, :c9801, :c9802, :c9803, :c9804, :c9805, :c9806, :c9807, :c9808, :c9809, :c9810, :c9811, :c9812, :c9813, :c9814, :c9815, :c9816, :c9817, :c9818, :c9819, :c9820, :c9821, :c9822, :c9823, :c9824, :c9825, :c9826, :c9827, :c9828, :c9829, :c9830, :c9831, :c9832, :c9833, :c9834, :c9835, :c9836, :c9837, :c9838, :c9839, :c9840, :c9841, :c9842, :c9843, :c9844, :c9845, :c9846, :c9847, :c9848, :c9849, :c9850, :c9851, :c9852, :c9853, :c9854, :c9855, :c9856, :c9857, :c9858, :c9859, :c9860, :c9861, :c9862, :c9863, :c9864, :c9865, :c9866, :c9867, :c9868, :c9869, :c9870, :c9871, :c9872, :c9873, :c9874, :c9875, :c9876, :c9877, :c9878, :c9879, :c9880, :c9881, :c9882, :c9883, :c9884, :c9885, :c9886, :c9887, :c9888, :c9889, :c9890, :c9891, :c9892, :c9893, :c9894, :c9895, :c9896, :c9897, :c9898, :c9899, :c9900, :c9901, :c9902, :c9903, :c9904, :c9905, :c9906, :c9907, :c9908, :c9909, :c9910, :c9911, :c9912, :c9913, :c9914, :c9915, :c9916, :c9917, :c9918, :c9919, :c9920, :c9921, :c9922, :c9923, :c9924, :c9925, :c9926, :c9927, :c9928, :c9929, :c9930, :c9931, :c9932, :c9933, :c9934, :c9935, :c9936, :c9937, :c9938, :c9939, :c9940, :c9941, :c9942, :c9943, :c9944, :c9945, :c9946, :c9947, :c9948, :c9949, :c9950, :c9951, :c9952, :c9953, :c9954, :c9955, :c9956, :c9957, :c9958, :c9959, :c9960, :c9961, :c9962, :c9963, :c9964, :c9965, :c9966, :c9967, :c9968, :c9969, :c9970, :c9971, :c9972, :c9973, :c9974, :c9975, :c9976, :c9977, :c9978, :c9979, :c9980, :c9981, :c9982, :c9983, :c9984, :c9985, :c9986, :c9987, :c9988, :c9989, :c9990, :c9991, :c9992, :c9993, :c9994, :c9995, :c9996, :c9997, :c9998, :c9999, :c10000 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-16.out b/source/libs/lilv/sord-0.10.4/tests/test-16.out new file mode 100644 index 000000000..c0604b3b6 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-16.out @@ -0,0 +1,10000 @@ + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-16.ttl b/source/libs/lilv/sord-0.10.4/tests/test-16.ttl new file mode 100644 index 000000000..a9ac37fb3 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-16.ttl @@ -0,0 +1,10002 @@ +# 10000 items (10000 triples) more than the default Bison stack size +@prefix : . +:a :b :c1; + :b :c2; + :b :c3; + :b :c4; + :b :c5; + :b :c6; + :b :c7; + :b :c8; + :b :c9; + :b :c10; + :b :c11; + :b :c12; + :b :c13; + :b :c14; + :b :c15; + :b :c16; + :b :c17; + :b :c18; + :b :c19; + :b :c20; + :b :c21; + :b :c22; + :b :c23; + :b :c24; + :b :c25; + :b :c26; + :b :c27; + :b :c28; + :b :c29; + :b :c30; + :b :c31; + :b :c32; + :b :c33; + :b :c34; + :b :c35; + :b :c36; + :b :c37; + :b :c38; + :b :c39; + :b :c40; + :b :c41; + :b :c42; + :b :c43; + :b :c44; + :b :c45; + :b :c46; + :b :c47; + :b :c48; + :b :c49; + :b :c50; + :b :c51; + :b :c52; + :b :c53; + :b :c54; + :b :c55; + :b :c56; + :b :c57; + :b :c58; + :b :c59; + :b :c60; + :b :c61; + :b :c62; + :b :c63; + :b :c64; + :b :c65; + :b :c66; + :b :c67; + :b :c68; + :b :c69; + :b :c70; + :b :c71; + :b :c72; + :b :c73; + :b :c74; + :b :c75; + :b :c76; + :b :c77; + :b :c78; + :b :c79; + :b :c80; + :b :c81; + :b :c82; + :b :c83; + :b :c84; + :b :c85; + :b :c86; + :b :c87; + :b :c88; + :b :c89; + :b :c90; + :b :c91; + :b :c92; + :b :c93; + :b :c94; + :b :c95; + :b :c96; + :b :c97; + :b :c98; + :b :c99; + :b :c100; + :b :c101; + :b :c102; + :b :c103; + :b :c104; + :b :c105; + :b :c106; + :b :c107; + :b :c108; + :b :c109; + :b :c110; + :b :c111; + :b :c112; + :b :c113; + :b :c114; + :b :c115; + :b :c116; + :b :c117; + :b :c118; + :b :c119; + :b :c120; + :b :c121; + :b :c122; + :b :c123; + :b :c124; + :b :c125; + :b :c126; + :b :c127; + :b :c128; + :b :c129; + :b :c130; + :b :c131; + :b :c132; + :b :c133; + :b :c134; + :b :c135; + :b :c136; + :b :c137; + :b :c138; + :b :c139; + :b :c140; + :b :c141; + :b :c142; + :b :c143; + :b :c144; + :b :c145; + :b :c146; + :b :c147; + :b :c148; + :b :c149; + :b :c150; + :b :c151; + :b :c152; + :b :c153; + :b :c154; + :b :c155; + :b :c156; + :b :c157; + :b :c158; + :b :c159; + :b :c160; + :b :c161; + :b :c162; + :b :c163; + :b :c164; + :b :c165; + :b :c166; + :b :c167; + :b :c168; + :b :c169; + :b :c170; + :b :c171; + :b :c172; + :b :c173; + :b :c174; + :b :c175; + :b :c176; + :b :c177; + :b :c178; + :b :c179; + :b :c180; + :b :c181; + :b :c182; + :b :c183; + :b :c184; + :b :c185; + :b :c186; + :b :c187; + :b :c188; + :b :c189; + :b :c190; + :b :c191; + :b :c192; + :b :c193; + :b :c194; + :b :c195; + :b :c196; + :b :c197; + :b :c198; + :b :c199; + :b :c200; + :b :c201; + :b :c202; + :b :c203; + :b :c204; + :b :c205; + :b :c206; + :b :c207; + :b :c208; + :b :c209; + :b :c210; + :b :c211; + :b :c212; + :b :c213; + :b :c214; + :b :c215; + :b :c216; + :b :c217; + :b :c218; + :b :c219; + :b :c220; + :b :c221; + :b :c222; + :b :c223; + :b :c224; + :b :c225; + :b :c226; + :b :c227; + :b :c228; + :b :c229; + :b :c230; + :b :c231; + :b :c232; + :b :c233; + :b :c234; + :b :c235; + :b :c236; + :b :c237; + :b :c238; + :b :c239; + :b :c240; + :b :c241; + :b :c242; + :b :c243; + :b :c244; + :b :c245; + :b :c246; + :b :c247; + :b :c248; + :b :c249; + :b :c250; + :b :c251; + :b :c252; + :b :c253; + :b :c254; + :b :c255; + :b :c256; + :b :c257; + :b :c258; + :b :c259; + :b :c260; + :b :c261; + :b :c262; + :b :c263; + :b :c264; + :b :c265; + :b :c266; + :b :c267; + :b :c268; + :b :c269; + :b :c270; + :b :c271; + :b :c272; + :b :c273; + :b :c274; + :b :c275; + :b :c276; + :b :c277; + :b :c278; + :b :c279; + :b :c280; + :b :c281; + :b :c282; + :b :c283; + :b :c284; + :b :c285; + :b :c286; + :b :c287; + :b :c288; + :b :c289; + :b :c290; + :b :c291; + :b :c292; + :b :c293; + :b :c294; + :b :c295; + :b :c296; + :b :c297; + :b :c298; + :b :c299; + :b :c300; + :b :c301; + :b :c302; + :b :c303; + :b :c304; + :b :c305; + :b :c306; + :b :c307; + :b :c308; + :b :c309; + :b :c310; + :b :c311; + :b :c312; + :b :c313; + :b :c314; + :b :c315; + :b :c316; + :b :c317; + :b :c318; + :b :c319; + :b :c320; + :b :c321; + :b :c322; + :b :c323; + :b :c324; + :b :c325; + :b :c326; + :b :c327; + :b :c328; + :b :c329; + :b :c330; + :b :c331; + :b :c332; + :b :c333; + :b :c334; + :b :c335; + :b :c336; + :b :c337; + :b :c338; + :b :c339; + :b :c340; + :b :c341; + :b :c342; + :b :c343; + :b :c344; + :b :c345; + :b :c346; + :b :c347; + :b :c348; + :b :c349; + :b :c350; + :b :c351; + :b :c352; + :b :c353; + :b :c354; + :b :c355; + :b :c356; + :b :c357; + :b :c358; + :b :c359; + :b :c360; + :b :c361; + :b :c362; + :b :c363; + :b :c364; + :b :c365; + :b :c366; + :b :c367; + :b :c368; + :b :c369; + :b :c370; + :b :c371; + :b :c372; + :b :c373; + :b :c374; + :b :c375; + :b :c376; + :b :c377; + :b :c378; + :b :c379; + :b :c380; + :b :c381; + :b :c382; + :b :c383; + :b :c384; + :b :c385; + :b :c386; + :b :c387; + :b :c388; + :b :c389; + :b :c390; + :b :c391; + :b :c392; + :b :c393; + :b :c394; + :b :c395; + :b :c396; + :b :c397; + :b :c398; + :b :c399; + :b :c400; + :b :c401; + :b :c402; + :b :c403; + :b :c404; + :b :c405; + :b :c406; + :b :c407; + :b :c408; + :b :c409; + :b :c410; + :b :c411; + :b :c412; + :b :c413; + :b :c414; + :b :c415; + :b :c416; + :b :c417; + :b :c418; + :b :c419; + :b :c420; + :b :c421; + :b :c422; + :b :c423; + :b :c424; + :b :c425; + :b :c426; + :b :c427; + :b :c428; + :b :c429; + :b :c430; + :b :c431; + :b :c432; + :b :c433; + :b :c434; + :b :c435; + :b :c436; + :b :c437; + :b :c438; + :b :c439; + :b :c440; + :b :c441; + :b :c442; + :b :c443; + :b :c444; + :b :c445; + :b :c446; + :b :c447; + :b :c448; + :b :c449; + :b :c450; + :b :c451; + :b :c452; + :b :c453; + :b :c454; + :b :c455; + :b :c456; + :b :c457; + :b :c458; + :b :c459; + :b :c460; + :b :c461; + :b :c462; + :b :c463; + :b :c464; + :b :c465; + :b :c466; + :b :c467; + :b :c468; + :b :c469; + :b :c470; + :b :c471; + :b :c472; + :b :c473; + :b :c474; + :b :c475; + :b :c476; + :b :c477; + :b :c478; + :b :c479; + :b :c480; + :b :c481; + :b :c482; + :b :c483; + :b :c484; + :b :c485; + :b :c486; + :b :c487; + :b :c488; + :b :c489; + :b :c490; + :b :c491; + :b :c492; + :b :c493; + :b :c494; + :b :c495; + :b :c496; + :b :c497; + :b :c498; + :b :c499; + :b :c500; + :b :c501; + :b :c502; + :b :c503; + :b :c504; + :b :c505; + :b :c506; + :b :c507; + :b :c508; + :b :c509; + :b :c510; + :b :c511; + :b :c512; + :b :c513; + :b :c514; + :b :c515; + :b :c516; + :b :c517; + :b :c518; + :b :c519; + :b :c520; + :b :c521; + :b :c522; + :b :c523; + :b :c524; + :b :c525; + :b :c526; + :b :c527; + :b :c528; + :b :c529; + :b :c530; + :b :c531; + :b :c532; + :b :c533; + :b :c534; + :b :c535; + :b :c536; + :b :c537; + :b :c538; + :b :c539; + :b :c540; + :b :c541; + :b :c542; + :b :c543; + :b :c544; + :b :c545; + :b :c546; + :b :c547; + :b :c548; + :b :c549; + :b :c550; + :b :c551; + :b :c552; + :b :c553; + :b :c554; + :b :c555; + :b :c556; + :b :c557; + :b :c558; + :b :c559; + :b :c560; + :b :c561; + :b :c562; + :b :c563; + :b :c564; + :b :c565; + :b :c566; + :b :c567; + :b :c568; + :b :c569; + :b :c570; + :b :c571; + :b :c572; + :b :c573; + :b :c574; + :b :c575; + :b :c576; + :b :c577; + :b :c578; + :b :c579; + :b :c580; + :b :c581; + :b :c582; + :b :c583; + :b :c584; + :b :c585; + :b :c586; + :b :c587; + :b :c588; + :b :c589; + :b :c590; + :b :c591; + :b :c592; + :b :c593; + :b :c594; + :b :c595; + :b :c596; + :b :c597; + :b :c598; + :b :c599; + :b :c600; + :b :c601; + :b :c602; + :b :c603; + :b :c604; + :b :c605; + :b :c606; + :b :c607; + :b :c608; + :b :c609; + :b :c610; + :b :c611; + :b :c612; + :b :c613; + :b :c614; + :b :c615; + :b :c616; + :b :c617; + :b :c618; + :b :c619; + :b :c620; + :b :c621; + :b :c622; + :b :c623; + :b :c624; + :b :c625; + :b :c626; + :b :c627; + :b :c628; + :b :c629; + :b :c630; + :b :c631; + :b :c632; + :b :c633; + :b :c634; + :b :c635; + :b :c636; + :b :c637; + :b :c638; + :b :c639; + :b :c640; + :b :c641; + :b :c642; + :b :c643; + :b :c644; + :b :c645; + :b :c646; + :b :c647; + :b :c648; + :b :c649; + :b :c650; + :b :c651; + :b :c652; + :b :c653; + :b :c654; + :b :c655; + :b :c656; + :b :c657; + :b :c658; + :b :c659; + :b :c660; + :b :c661; + :b :c662; + :b :c663; + :b :c664; + :b :c665; + :b :c666; + :b :c667; + :b :c668; + :b :c669; + :b :c670; + :b :c671; + :b :c672; + :b :c673; + :b :c674; + :b :c675; + :b :c676; + :b :c677; + :b :c678; + :b :c679; + :b :c680; + :b :c681; + :b :c682; + :b :c683; + :b :c684; + :b :c685; + :b :c686; + :b :c687; + :b :c688; + :b :c689; + :b :c690; + :b :c691; + :b :c692; + :b :c693; + :b :c694; + :b :c695; + :b :c696; + :b :c697; + :b :c698; + :b :c699; + :b :c700; + :b :c701; + :b :c702; + :b :c703; + :b :c704; + :b :c705; + :b :c706; + :b :c707; + :b :c708; + :b :c709; + :b :c710; + :b :c711; + :b :c712; + :b :c713; + :b :c714; + :b :c715; + :b :c716; + :b :c717; + :b :c718; + :b :c719; + :b :c720; + :b :c721; + :b :c722; + :b :c723; + :b :c724; + :b :c725; + :b :c726; + :b :c727; + :b :c728; + :b :c729; + :b :c730; + :b :c731; + :b :c732; + :b :c733; + :b :c734; + :b :c735; + :b :c736; + :b :c737; + :b :c738; + :b :c739; + :b :c740; + :b :c741; + :b :c742; + :b :c743; + :b :c744; + :b :c745; + :b :c746; + :b :c747; + :b :c748; + :b :c749; + :b :c750; + :b :c751; + :b :c752; + :b :c753; + :b :c754; + :b :c755; + :b :c756; + :b :c757; + :b :c758; + :b :c759; + :b :c760; + :b :c761; + :b :c762; + :b :c763; + :b :c764; + :b :c765; + :b :c766; + :b :c767; + :b :c768; + :b :c769; + :b :c770; + :b :c771; + :b :c772; + :b :c773; + :b :c774; + :b :c775; + :b :c776; + :b :c777; + :b :c778; + :b :c779; + :b :c780; + :b :c781; + :b :c782; + :b :c783; + :b :c784; + :b :c785; + :b :c786; + :b :c787; + :b :c788; + :b :c789; + :b :c790; + :b :c791; + :b :c792; + :b :c793; + :b :c794; + :b :c795; + :b :c796; + :b :c797; + :b :c798; + :b :c799; + :b :c800; + :b :c801; + :b :c802; + :b :c803; + :b :c804; + :b :c805; + :b :c806; + :b :c807; + :b :c808; + :b :c809; + :b :c810; + :b :c811; + :b :c812; + :b :c813; + :b :c814; + :b :c815; + :b :c816; + :b :c817; + :b :c818; + :b :c819; + :b :c820; + :b :c821; + :b :c822; + :b :c823; + :b :c824; + :b :c825; + :b :c826; + :b :c827; + :b :c828; + :b :c829; + :b :c830; + :b :c831; + :b :c832; + :b :c833; + :b :c834; + :b :c835; + :b :c836; + :b :c837; + :b :c838; + :b :c839; + :b :c840; + :b :c841; + :b :c842; + :b :c843; + :b :c844; + :b :c845; + :b :c846; + :b :c847; + :b :c848; + :b :c849; + :b :c850; + :b :c851; + :b :c852; + :b :c853; + :b :c854; + :b :c855; + :b :c856; + :b :c857; + :b :c858; + :b :c859; + :b :c860; + :b :c861; + :b :c862; + :b :c863; + :b :c864; + :b :c865; + :b :c866; + :b :c867; + :b :c868; + :b :c869; + :b :c870; + :b :c871; + :b :c872; + :b :c873; + :b :c874; + :b :c875; + :b :c876; + :b :c877; + :b :c878; + :b :c879; + :b :c880; + :b :c881; + :b :c882; + :b :c883; + :b :c884; + :b :c885; + :b :c886; + :b :c887; + :b :c888; + :b :c889; + :b :c890; + :b :c891; + :b :c892; + :b :c893; + :b :c894; + :b :c895; + :b :c896; + :b :c897; + :b :c898; + :b :c899; + :b :c900; + :b :c901; + :b :c902; + :b :c903; + :b :c904; + :b :c905; + :b :c906; + :b :c907; + :b :c908; + :b :c909; + :b :c910; + :b :c911; + :b :c912; + :b :c913; + :b :c914; + :b :c915; + :b :c916; + :b :c917; + :b :c918; + :b :c919; + :b :c920; + :b :c921; + :b :c922; + :b :c923; + :b :c924; + :b :c925; + :b :c926; + :b :c927; + :b :c928; + :b :c929; + :b :c930; + :b :c931; + :b :c932; + :b :c933; + :b :c934; + :b :c935; + :b :c936; + :b :c937; + :b :c938; + :b :c939; + :b :c940; + :b :c941; + :b :c942; + :b :c943; + :b :c944; + :b :c945; + :b :c946; + :b :c947; + :b :c948; + :b :c949; + :b :c950; + :b :c951; + :b :c952; + :b :c953; + :b :c954; + :b :c955; + :b :c956; + :b :c957; + :b :c958; + :b :c959; + :b :c960; + :b :c961; + :b :c962; + :b :c963; + :b :c964; + :b :c965; + :b :c966; + :b :c967; + :b :c968; + :b :c969; + :b :c970; + :b :c971; + :b :c972; + :b :c973; + :b :c974; + :b :c975; + :b :c976; + :b :c977; + :b :c978; + :b :c979; + :b :c980; + :b :c981; + :b :c982; + :b :c983; + :b :c984; + :b :c985; + :b :c986; + :b :c987; + :b :c988; + :b :c989; + :b :c990; + :b :c991; + :b :c992; + :b :c993; + :b :c994; + :b :c995; + :b :c996; + :b :c997; + :b :c998; + :b :c999; + :b :c1000; + :b :c1001; + :b :c1002; + :b :c1003; + :b :c1004; + :b :c1005; + :b :c1006; + :b :c1007; + :b :c1008; + :b :c1009; + :b :c1010; + :b :c1011; + :b :c1012; + :b :c1013; + :b :c1014; + :b :c1015; + :b :c1016; + :b :c1017; + :b :c1018; + :b :c1019; + :b :c1020; + :b :c1021; + :b :c1022; + :b :c1023; + :b :c1024; + :b :c1025; + :b :c1026; + :b :c1027; + :b :c1028; + :b :c1029; + :b :c1030; + :b :c1031; + :b :c1032; + :b :c1033; + :b :c1034; + :b :c1035; + :b :c1036; + :b :c1037; + :b :c1038; + :b :c1039; + :b :c1040; + :b :c1041; + :b :c1042; + :b :c1043; + :b :c1044; + :b :c1045; + :b :c1046; + :b :c1047; + :b :c1048; + :b :c1049; + :b :c1050; + :b :c1051; + :b :c1052; + :b :c1053; + :b :c1054; + :b :c1055; + :b :c1056; + :b :c1057; + :b :c1058; + :b :c1059; + :b :c1060; + :b :c1061; + :b :c1062; + :b :c1063; + :b :c1064; + :b :c1065; + :b :c1066; + :b :c1067; + :b :c1068; + :b :c1069; + :b :c1070; + :b :c1071; + :b :c1072; + :b :c1073; + :b :c1074; + :b :c1075; + :b :c1076; + :b :c1077; + :b :c1078; + :b :c1079; + :b :c1080; + :b :c1081; + :b :c1082; + :b :c1083; + :b :c1084; + :b :c1085; + :b :c1086; + :b :c1087; + :b :c1088; + :b :c1089; + :b :c1090; + :b :c1091; + :b :c1092; + :b :c1093; + :b :c1094; + :b :c1095; + :b :c1096; + :b :c1097; + :b :c1098; + :b :c1099; + :b :c1100; + :b :c1101; + :b :c1102; + :b :c1103; + :b :c1104; + :b :c1105; + :b :c1106; + :b :c1107; + :b :c1108; + :b :c1109; + :b :c1110; + :b :c1111; + :b :c1112; + :b :c1113; + :b :c1114; + :b :c1115; + :b :c1116; + :b :c1117; + :b :c1118; + :b :c1119; + :b :c1120; + :b :c1121; + :b :c1122; + :b :c1123; + :b :c1124; + :b :c1125; + :b :c1126; + :b :c1127; + :b :c1128; + :b :c1129; + :b :c1130; + :b :c1131; + :b :c1132; + :b :c1133; + :b :c1134; + :b :c1135; + :b :c1136; + :b :c1137; + :b :c1138; + :b :c1139; + :b :c1140; + :b :c1141; + :b :c1142; + :b :c1143; + :b :c1144; + :b :c1145; + :b :c1146; + :b :c1147; + :b :c1148; + :b :c1149; + :b :c1150; + :b :c1151; + :b :c1152; + :b :c1153; + :b :c1154; + :b :c1155; + :b :c1156; + :b :c1157; + :b :c1158; + :b :c1159; + :b :c1160; + :b :c1161; + :b :c1162; + :b :c1163; + :b :c1164; + :b :c1165; + :b :c1166; + :b :c1167; + :b :c1168; + :b :c1169; + :b :c1170; + :b :c1171; + :b :c1172; + :b :c1173; + :b :c1174; + :b :c1175; + :b :c1176; + :b :c1177; + :b :c1178; + :b :c1179; + :b :c1180; + :b :c1181; + :b :c1182; + :b :c1183; + :b :c1184; + :b :c1185; + :b :c1186; + :b :c1187; + :b :c1188; + :b :c1189; + :b :c1190; + :b :c1191; + :b :c1192; + :b :c1193; + :b :c1194; + :b :c1195; + :b :c1196; + :b :c1197; + :b :c1198; + :b :c1199; + :b :c1200; + :b :c1201; + :b :c1202; + :b :c1203; + :b :c1204; + :b :c1205; + :b :c1206; + :b :c1207; + :b :c1208; + :b :c1209; + :b :c1210; + :b :c1211; + :b :c1212; + :b :c1213; + :b :c1214; + :b :c1215; + :b :c1216; + :b :c1217; + :b :c1218; + :b :c1219; + :b :c1220; + :b :c1221; + :b :c1222; + :b :c1223; + :b :c1224; + :b :c1225; + :b :c1226; + :b :c1227; + :b :c1228; + :b :c1229; + :b :c1230; + :b :c1231; + :b :c1232; + :b :c1233; + :b :c1234; + :b :c1235; + :b :c1236; + :b :c1237; + :b :c1238; + :b :c1239; + :b :c1240; + :b :c1241; + :b :c1242; + :b :c1243; + :b :c1244; + :b :c1245; + :b :c1246; + :b :c1247; + :b :c1248; + :b :c1249; + :b :c1250; + :b :c1251; + :b :c1252; + :b :c1253; + :b :c1254; + :b :c1255; + :b :c1256; + :b :c1257; + :b :c1258; + :b :c1259; + :b :c1260; + :b :c1261; + :b :c1262; + :b :c1263; + :b :c1264; + :b :c1265; + :b :c1266; + :b :c1267; + :b :c1268; + :b :c1269; + :b :c1270; + :b :c1271; + :b :c1272; + :b :c1273; + :b :c1274; + :b :c1275; + :b :c1276; + :b :c1277; + :b :c1278; + :b :c1279; + :b :c1280; + :b :c1281; + :b :c1282; + :b :c1283; + :b :c1284; + :b :c1285; + :b :c1286; + :b :c1287; + :b :c1288; + :b :c1289; + :b :c1290; + :b :c1291; + :b :c1292; + :b :c1293; + :b :c1294; + :b :c1295; + :b :c1296; + :b :c1297; + :b :c1298; + :b :c1299; + :b :c1300; + :b :c1301; + :b :c1302; + :b :c1303; + :b :c1304; + :b :c1305; + :b :c1306; + :b :c1307; + :b :c1308; + :b :c1309; + :b :c1310; + :b :c1311; + :b :c1312; + :b :c1313; + :b :c1314; + :b :c1315; + :b :c1316; + :b :c1317; + :b :c1318; + :b :c1319; + :b :c1320; + :b :c1321; + :b :c1322; + :b :c1323; + :b :c1324; + :b :c1325; + :b :c1326; + :b :c1327; + :b :c1328; + :b :c1329; + :b :c1330; + :b :c1331; + :b :c1332; + :b :c1333; + :b :c1334; + :b :c1335; + :b :c1336; + :b :c1337; + :b :c1338; + :b :c1339; + :b :c1340; + :b :c1341; + :b :c1342; + :b :c1343; + :b :c1344; + :b :c1345; + :b :c1346; + :b :c1347; + :b :c1348; + :b :c1349; + :b :c1350; + :b :c1351; + :b :c1352; + :b :c1353; + :b :c1354; + :b :c1355; + :b :c1356; + :b :c1357; + :b :c1358; + :b :c1359; + :b :c1360; + :b :c1361; + :b :c1362; + :b :c1363; + :b :c1364; + :b :c1365; + :b :c1366; + :b :c1367; + :b :c1368; + :b :c1369; + :b :c1370; + :b :c1371; + :b :c1372; + :b :c1373; + :b :c1374; + :b :c1375; + :b :c1376; + :b :c1377; + :b :c1378; + :b :c1379; + :b :c1380; + :b :c1381; + :b :c1382; + :b :c1383; + :b :c1384; + :b :c1385; + :b :c1386; + :b :c1387; + :b :c1388; + :b :c1389; + :b :c1390; + :b :c1391; + :b :c1392; + :b :c1393; + :b :c1394; + :b :c1395; + :b :c1396; + :b :c1397; + :b :c1398; + :b :c1399; + :b :c1400; + :b :c1401; + :b :c1402; + :b :c1403; + :b :c1404; + :b :c1405; + :b :c1406; + :b :c1407; + :b :c1408; + :b :c1409; + :b :c1410; + :b :c1411; + :b :c1412; + :b :c1413; + :b :c1414; + :b :c1415; + :b :c1416; + :b :c1417; + :b :c1418; + :b :c1419; + :b :c1420; + :b :c1421; + :b :c1422; + :b :c1423; + :b :c1424; + :b :c1425; + :b :c1426; + :b :c1427; + :b :c1428; + :b :c1429; + :b :c1430; + :b :c1431; + :b :c1432; + :b :c1433; + :b :c1434; + :b :c1435; + :b :c1436; + :b :c1437; + :b :c1438; + :b :c1439; + :b :c1440; + :b :c1441; + :b :c1442; + :b :c1443; + :b :c1444; + :b :c1445; + :b :c1446; + :b :c1447; + :b :c1448; + :b :c1449; + :b :c1450; + :b :c1451; + :b :c1452; + :b :c1453; + :b :c1454; + :b :c1455; + :b :c1456; + :b :c1457; + :b :c1458; + :b :c1459; + :b :c1460; + :b :c1461; + :b :c1462; + :b :c1463; + :b :c1464; + :b :c1465; + :b :c1466; + :b :c1467; + :b :c1468; + :b :c1469; + :b :c1470; + :b :c1471; + :b :c1472; + :b :c1473; + :b :c1474; + :b :c1475; + :b :c1476; + :b :c1477; + :b :c1478; + :b :c1479; + :b :c1480; + :b :c1481; + :b :c1482; + :b :c1483; + :b :c1484; + :b :c1485; + :b :c1486; + :b :c1487; + :b :c1488; + :b :c1489; + :b :c1490; + :b :c1491; + :b :c1492; + :b :c1493; + :b :c1494; + :b :c1495; + :b :c1496; + :b :c1497; + :b :c1498; + :b :c1499; + :b :c1500; + :b :c1501; + :b :c1502; + :b :c1503; + :b :c1504; + :b :c1505; + :b :c1506; + :b :c1507; + :b :c1508; + :b :c1509; + :b :c1510; + :b :c1511; + :b :c1512; + :b :c1513; + :b :c1514; + :b :c1515; + :b :c1516; + :b :c1517; + :b :c1518; + :b :c1519; + :b :c1520; + :b :c1521; + :b :c1522; + :b :c1523; + :b :c1524; + :b :c1525; + :b :c1526; + :b :c1527; + :b :c1528; + :b :c1529; + :b :c1530; + :b :c1531; + :b :c1532; + :b :c1533; + :b :c1534; + :b :c1535; + :b :c1536; + :b :c1537; + :b :c1538; + :b :c1539; + :b :c1540; + :b :c1541; + :b :c1542; + :b :c1543; + :b :c1544; + :b :c1545; + :b :c1546; + :b :c1547; + :b :c1548; + :b :c1549; + :b :c1550; + :b :c1551; + :b :c1552; + :b :c1553; + :b :c1554; + :b :c1555; + :b :c1556; + :b :c1557; + :b :c1558; + :b :c1559; + :b :c1560; + :b :c1561; + :b :c1562; + :b :c1563; + :b :c1564; + :b :c1565; + :b :c1566; + :b :c1567; + :b :c1568; + :b :c1569; + :b :c1570; + :b :c1571; + :b :c1572; + :b :c1573; + :b :c1574; + :b :c1575; + :b :c1576; + :b :c1577; + :b :c1578; + :b :c1579; + :b :c1580; + :b :c1581; + :b :c1582; + :b :c1583; + :b :c1584; + :b :c1585; + :b :c1586; + :b :c1587; + :b :c1588; + :b :c1589; + :b :c1590; + :b :c1591; + :b :c1592; + :b :c1593; + :b :c1594; + :b :c1595; + :b :c1596; + :b :c1597; + :b :c1598; + :b :c1599; + :b :c1600; + :b :c1601; + :b :c1602; + :b :c1603; + :b :c1604; + :b :c1605; + :b :c1606; + :b :c1607; + :b :c1608; + :b :c1609; + :b :c1610; + :b :c1611; + :b :c1612; + :b :c1613; + :b :c1614; + :b :c1615; + :b :c1616; + :b :c1617; + :b :c1618; + :b :c1619; + :b :c1620; + :b :c1621; + :b :c1622; + :b :c1623; + :b :c1624; + :b :c1625; + :b :c1626; + :b :c1627; + :b :c1628; + :b :c1629; + :b :c1630; + :b :c1631; + :b :c1632; + :b :c1633; + :b :c1634; + :b :c1635; + :b :c1636; + :b :c1637; + :b :c1638; + :b :c1639; + :b :c1640; + :b :c1641; + :b :c1642; + :b :c1643; + :b :c1644; + :b :c1645; + :b :c1646; + :b :c1647; + :b :c1648; + :b :c1649; + :b :c1650; + :b :c1651; + :b :c1652; + :b :c1653; + :b :c1654; + :b :c1655; + :b :c1656; + :b :c1657; + :b :c1658; + :b :c1659; + :b :c1660; + :b :c1661; + :b :c1662; + :b :c1663; + :b :c1664; + :b :c1665; + :b :c1666; + :b :c1667; + :b :c1668; + :b :c1669; + :b :c1670; + :b :c1671; + :b :c1672; + :b :c1673; + :b :c1674; + :b :c1675; + :b :c1676; + :b :c1677; + :b :c1678; + :b :c1679; + :b :c1680; + :b :c1681; + :b :c1682; + :b :c1683; + :b :c1684; + :b :c1685; + :b :c1686; + :b :c1687; + :b :c1688; + :b :c1689; + :b :c1690; + :b :c1691; + :b :c1692; + :b :c1693; + :b :c1694; + :b :c1695; + :b :c1696; + :b :c1697; + :b :c1698; + :b :c1699; + :b :c1700; + :b :c1701; + :b :c1702; + :b :c1703; + :b :c1704; + :b :c1705; + :b :c1706; + :b :c1707; + :b :c1708; + :b :c1709; + :b :c1710; + :b :c1711; + :b :c1712; + :b :c1713; + :b :c1714; + :b :c1715; + :b :c1716; + :b :c1717; + :b :c1718; + :b :c1719; + :b :c1720; + :b :c1721; + :b :c1722; + :b :c1723; + :b :c1724; + :b :c1725; + :b :c1726; + :b :c1727; + :b :c1728; + :b :c1729; + :b :c1730; + :b :c1731; + :b :c1732; + :b :c1733; + :b :c1734; + :b :c1735; + :b :c1736; + :b :c1737; + :b :c1738; + :b :c1739; + :b :c1740; + :b :c1741; + :b :c1742; + :b :c1743; + :b :c1744; + :b :c1745; + :b :c1746; + :b :c1747; + :b :c1748; + :b :c1749; + :b :c1750; + :b :c1751; + :b :c1752; + :b :c1753; + :b :c1754; + :b :c1755; + :b :c1756; + :b :c1757; + :b :c1758; + :b :c1759; + :b :c1760; + :b :c1761; + :b :c1762; + :b :c1763; + :b :c1764; + :b :c1765; + :b :c1766; + :b :c1767; + :b :c1768; + :b :c1769; + :b :c1770; + :b :c1771; + :b :c1772; + :b :c1773; + :b :c1774; + :b :c1775; + :b :c1776; + :b :c1777; + :b :c1778; + :b :c1779; + :b :c1780; + :b :c1781; + :b :c1782; + :b :c1783; + :b :c1784; + :b :c1785; + :b :c1786; + :b :c1787; + :b :c1788; + :b :c1789; + :b :c1790; + :b :c1791; + :b :c1792; + :b :c1793; + :b :c1794; + :b :c1795; + :b :c1796; + :b :c1797; + :b :c1798; + :b :c1799; + :b :c1800; + :b :c1801; + :b :c1802; + :b :c1803; + :b :c1804; + :b :c1805; + :b :c1806; + :b :c1807; + :b :c1808; + :b :c1809; + :b :c1810; + :b :c1811; + :b :c1812; + :b :c1813; + :b :c1814; + :b :c1815; + :b :c1816; + :b :c1817; + :b :c1818; + :b :c1819; + :b :c1820; + :b :c1821; + :b :c1822; + :b :c1823; + :b :c1824; + :b :c1825; + :b :c1826; + :b :c1827; + :b :c1828; + :b :c1829; + :b :c1830; + :b :c1831; + :b :c1832; + :b :c1833; + :b :c1834; + :b :c1835; + :b :c1836; + :b :c1837; + :b :c1838; + :b :c1839; + :b :c1840; + :b :c1841; + :b :c1842; + :b :c1843; + :b :c1844; + :b :c1845; + :b :c1846; + :b :c1847; + :b :c1848; + :b :c1849; + :b :c1850; + :b :c1851; + :b :c1852; + :b :c1853; + :b :c1854; + :b :c1855; + :b :c1856; + :b :c1857; + :b :c1858; + :b :c1859; + :b :c1860; + :b :c1861; + :b :c1862; + :b :c1863; + :b :c1864; + :b :c1865; + :b :c1866; + :b :c1867; + :b :c1868; + :b :c1869; + :b :c1870; + :b :c1871; + :b :c1872; + :b :c1873; + :b :c1874; + :b :c1875; + :b :c1876; + :b :c1877; + :b :c1878; + :b :c1879; + :b :c1880; + :b :c1881; + :b :c1882; + :b :c1883; + :b :c1884; + :b :c1885; + :b :c1886; + :b :c1887; + :b :c1888; + :b :c1889; + :b :c1890; + :b :c1891; + :b :c1892; + :b :c1893; + :b :c1894; + :b :c1895; + :b :c1896; + :b :c1897; + :b :c1898; + :b :c1899; + :b :c1900; + :b :c1901; + :b :c1902; + :b :c1903; + :b :c1904; + :b :c1905; + :b :c1906; + :b :c1907; + :b :c1908; + :b :c1909; + :b :c1910; + :b :c1911; + :b :c1912; + :b :c1913; + :b :c1914; + :b :c1915; + :b :c1916; + :b :c1917; + :b :c1918; + :b :c1919; + :b :c1920; + :b :c1921; + :b :c1922; + :b :c1923; + :b :c1924; + :b :c1925; + :b :c1926; + :b :c1927; + :b :c1928; + :b :c1929; + :b :c1930; + :b :c1931; + :b :c1932; + :b :c1933; + :b :c1934; + :b :c1935; + :b :c1936; + :b :c1937; + :b :c1938; + :b :c1939; + :b :c1940; + :b :c1941; + :b :c1942; + :b :c1943; + :b :c1944; + :b :c1945; + :b :c1946; + :b :c1947; + :b :c1948; + :b :c1949; + :b :c1950; + :b :c1951; + :b :c1952; + :b :c1953; + :b :c1954; + :b :c1955; + :b :c1956; + :b :c1957; + :b :c1958; + :b :c1959; + :b :c1960; + :b :c1961; + :b :c1962; + :b :c1963; + :b :c1964; + :b :c1965; + :b :c1966; + :b :c1967; + :b :c1968; + :b :c1969; + :b :c1970; + :b :c1971; + :b :c1972; + :b :c1973; + :b :c1974; + :b :c1975; + :b :c1976; + :b :c1977; + :b :c1978; + :b :c1979; + :b :c1980; + :b :c1981; + :b :c1982; + :b :c1983; + :b :c1984; + :b :c1985; + :b :c1986; + :b :c1987; + :b :c1988; + :b :c1989; + :b :c1990; + :b :c1991; + :b :c1992; + :b :c1993; + :b :c1994; + :b :c1995; + :b :c1996; + :b :c1997; + :b :c1998; + :b :c1999; + :b :c2000; + :b :c2001; + :b :c2002; + :b :c2003; + :b :c2004; + :b :c2005; + :b :c2006; + :b :c2007; + :b :c2008; + :b :c2009; + :b :c2010; + :b :c2011; + :b :c2012; + :b :c2013; + :b :c2014; + :b :c2015; + :b :c2016; + :b :c2017; + :b :c2018; + :b :c2019; + :b :c2020; + :b :c2021; + :b :c2022; + :b :c2023; + :b :c2024; + :b :c2025; + :b :c2026; + :b :c2027; + :b :c2028; + :b :c2029; + :b :c2030; + :b :c2031; + :b :c2032; + :b :c2033; + :b :c2034; + :b :c2035; + :b :c2036; + :b :c2037; + :b :c2038; + :b :c2039; + :b :c2040; + :b :c2041; + :b :c2042; + :b :c2043; + :b :c2044; + :b :c2045; + :b :c2046; + :b :c2047; + :b :c2048; + :b :c2049; + :b :c2050; + :b :c2051; + :b :c2052; + :b :c2053; + :b :c2054; + :b :c2055; + :b :c2056; + :b :c2057; + :b :c2058; + :b :c2059; + :b :c2060; + :b :c2061; + :b :c2062; + :b :c2063; + :b :c2064; + :b :c2065; + :b :c2066; + :b :c2067; + :b :c2068; + :b :c2069; + :b :c2070; + :b :c2071; + :b :c2072; + :b :c2073; + :b :c2074; + :b :c2075; + :b :c2076; + :b :c2077; + :b :c2078; + :b :c2079; + :b :c2080; + :b :c2081; + :b :c2082; + :b :c2083; + :b :c2084; + :b :c2085; + :b :c2086; + :b :c2087; + :b :c2088; + :b :c2089; + :b :c2090; + :b :c2091; + :b :c2092; + :b :c2093; + :b :c2094; + :b :c2095; + :b :c2096; + :b :c2097; + :b :c2098; + :b :c2099; + :b :c2100; + :b :c2101; + :b :c2102; + :b :c2103; + :b :c2104; + :b :c2105; + :b :c2106; + :b :c2107; + :b :c2108; + :b :c2109; + :b :c2110; + :b :c2111; + :b :c2112; + :b :c2113; + :b :c2114; + :b :c2115; + :b :c2116; + :b :c2117; + :b :c2118; + :b :c2119; + :b :c2120; + :b :c2121; + :b :c2122; + :b :c2123; + :b :c2124; + :b :c2125; + :b :c2126; + :b :c2127; + :b :c2128; + :b :c2129; + :b :c2130; + :b :c2131; + :b :c2132; + :b :c2133; + :b :c2134; + :b :c2135; + :b :c2136; + :b :c2137; + :b :c2138; + :b :c2139; + :b :c2140; + :b :c2141; + :b :c2142; + :b :c2143; + :b :c2144; + :b :c2145; + :b :c2146; + :b :c2147; + :b :c2148; + :b :c2149; + :b :c2150; + :b :c2151; + :b :c2152; + :b :c2153; + :b :c2154; + :b :c2155; + :b :c2156; + :b :c2157; + :b :c2158; + :b :c2159; + :b :c2160; + :b :c2161; + :b :c2162; + :b :c2163; + :b :c2164; + :b :c2165; + :b :c2166; + :b :c2167; + :b :c2168; + :b :c2169; + :b :c2170; + :b :c2171; + :b :c2172; + :b :c2173; + :b :c2174; + :b :c2175; + :b :c2176; + :b :c2177; + :b :c2178; + :b :c2179; + :b :c2180; + :b :c2181; + :b :c2182; + :b :c2183; + :b :c2184; + :b :c2185; + :b :c2186; + :b :c2187; + :b :c2188; + :b :c2189; + :b :c2190; + :b :c2191; + :b :c2192; + :b :c2193; + :b :c2194; + :b :c2195; + :b :c2196; + :b :c2197; + :b :c2198; + :b :c2199; + :b :c2200; + :b :c2201; + :b :c2202; + :b :c2203; + :b :c2204; + :b :c2205; + :b :c2206; + :b :c2207; + :b :c2208; + :b :c2209; + :b :c2210; + :b :c2211; + :b :c2212; + :b :c2213; + :b :c2214; + :b :c2215; + :b :c2216; + :b :c2217; + :b :c2218; + :b :c2219; + :b :c2220; + :b :c2221; + :b :c2222; + :b :c2223; + :b :c2224; + :b :c2225; + :b :c2226; + :b :c2227; + :b :c2228; + :b :c2229; + :b :c2230; + :b :c2231; + :b :c2232; + :b :c2233; + :b :c2234; + :b :c2235; + :b :c2236; + :b :c2237; + :b :c2238; + :b :c2239; + :b :c2240; + :b :c2241; + :b :c2242; + :b :c2243; + :b :c2244; + :b :c2245; + :b :c2246; + :b :c2247; + :b :c2248; + :b :c2249; + :b :c2250; + :b :c2251; + :b :c2252; + :b :c2253; + :b :c2254; + :b :c2255; + :b :c2256; + :b :c2257; + :b :c2258; + :b :c2259; + :b :c2260; + :b :c2261; + :b :c2262; + :b :c2263; + :b :c2264; + :b :c2265; + :b :c2266; + :b :c2267; + :b :c2268; + :b :c2269; + :b :c2270; + :b :c2271; + :b :c2272; + :b :c2273; + :b :c2274; + :b :c2275; + :b :c2276; + :b :c2277; + :b :c2278; + :b :c2279; + :b :c2280; + :b :c2281; + :b :c2282; + :b :c2283; + :b :c2284; + :b :c2285; + :b :c2286; + :b :c2287; + :b :c2288; + :b :c2289; + :b :c2290; + :b :c2291; + :b :c2292; + :b :c2293; + :b :c2294; + :b :c2295; + :b :c2296; + :b :c2297; + :b :c2298; + :b :c2299; + :b :c2300; + :b :c2301; + :b :c2302; + :b :c2303; + :b :c2304; + :b :c2305; + :b :c2306; + :b :c2307; + :b :c2308; + :b :c2309; + :b :c2310; + :b :c2311; + :b :c2312; + :b :c2313; + :b :c2314; + :b :c2315; + :b :c2316; + :b :c2317; + :b :c2318; + :b :c2319; + :b :c2320; + :b :c2321; + :b :c2322; + :b :c2323; + :b :c2324; + :b :c2325; + :b :c2326; + :b :c2327; + :b :c2328; + :b :c2329; + :b :c2330; + :b :c2331; + :b :c2332; + :b :c2333; + :b :c2334; + :b :c2335; + :b :c2336; + :b :c2337; + :b :c2338; + :b :c2339; + :b :c2340; + :b :c2341; + :b :c2342; + :b :c2343; + :b :c2344; + :b :c2345; + :b :c2346; + :b :c2347; + :b :c2348; + :b :c2349; + :b :c2350; + :b :c2351; + :b :c2352; + :b :c2353; + :b :c2354; + :b :c2355; + :b :c2356; + :b :c2357; + :b :c2358; + :b :c2359; + :b :c2360; + :b :c2361; + :b :c2362; + :b :c2363; + :b :c2364; + :b :c2365; + :b :c2366; + :b :c2367; + :b :c2368; + :b :c2369; + :b :c2370; + :b :c2371; + :b :c2372; + :b :c2373; + :b :c2374; + :b :c2375; + :b :c2376; + :b :c2377; + :b :c2378; + :b :c2379; + :b :c2380; + :b :c2381; + :b :c2382; + :b :c2383; + :b :c2384; + :b :c2385; + :b :c2386; + :b :c2387; + :b :c2388; + :b :c2389; + :b :c2390; + :b :c2391; + :b :c2392; + :b :c2393; + :b :c2394; + :b :c2395; + :b :c2396; + :b :c2397; + :b :c2398; + :b :c2399; + :b :c2400; + :b :c2401; + :b :c2402; + :b :c2403; + :b :c2404; + :b :c2405; + :b :c2406; + :b :c2407; + :b :c2408; + :b :c2409; + :b :c2410; + :b :c2411; + :b :c2412; + :b :c2413; + :b :c2414; + :b :c2415; + :b :c2416; + :b :c2417; + :b :c2418; + :b :c2419; + :b :c2420; + :b :c2421; + :b :c2422; + :b :c2423; + :b :c2424; + :b :c2425; + :b :c2426; + :b :c2427; + :b :c2428; + :b :c2429; + :b :c2430; + :b :c2431; + :b :c2432; + :b :c2433; + :b :c2434; + :b :c2435; + :b :c2436; + :b :c2437; + :b :c2438; + :b :c2439; + :b :c2440; + :b :c2441; + :b :c2442; + :b :c2443; + :b :c2444; + :b :c2445; + :b :c2446; + :b :c2447; + :b :c2448; + :b :c2449; + :b :c2450; + :b :c2451; + :b :c2452; + :b :c2453; + :b :c2454; + :b :c2455; + :b :c2456; + :b :c2457; + :b :c2458; + :b :c2459; + :b :c2460; + :b :c2461; + :b :c2462; + :b :c2463; + :b :c2464; + :b :c2465; + :b :c2466; + :b :c2467; + :b :c2468; + :b :c2469; + :b :c2470; + :b :c2471; + :b :c2472; + :b :c2473; + :b :c2474; + :b :c2475; + :b :c2476; + :b :c2477; + :b :c2478; + :b :c2479; + :b :c2480; + :b :c2481; + :b :c2482; + :b :c2483; + :b :c2484; + :b :c2485; + :b :c2486; + :b :c2487; + :b :c2488; + :b :c2489; + :b :c2490; + :b :c2491; + :b :c2492; + :b :c2493; + :b :c2494; + :b :c2495; + :b :c2496; + :b :c2497; + :b :c2498; + :b :c2499; + :b :c2500; + :b :c2501; + :b :c2502; + :b :c2503; + :b :c2504; + :b :c2505; + :b :c2506; + :b :c2507; + :b :c2508; + :b :c2509; + :b :c2510; + :b :c2511; + :b :c2512; + :b :c2513; + :b :c2514; + :b :c2515; + :b :c2516; + :b :c2517; + :b :c2518; + :b :c2519; + :b :c2520; + :b :c2521; + :b :c2522; + :b :c2523; + :b :c2524; + :b :c2525; + :b :c2526; + :b :c2527; + :b :c2528; + :b :c2529; + :b :c2530; + :b :c2531; + :b :c2532; + :b :c2533; + :b :c2534; + :b :c2535; + :b :c2536; + :b :c2537; + :b :c2538; + :b :c2539; + :b :c2540; + :b :c2541; + :b :c2542; + :b :c2543; + :b :c2544; + :b :c2545; + :b :c2546; + :b :c2547; + :b :c2548; + :b :c2549; + :b :c2550; + :b :c2551; + :b :c2552; + :b :c2553; + :b :c2554; + :b :c2555; + :b :c2556; + :b :c2557; + :b :c2558; + :b :c2559; + :b :c2560; + :b :c2561; + :b :c2562; + :b :c2563; + :b :c2564; + :b :c2565; + :b :c2566; + :b :c2567; + :b :c2568; + :b :c2569; + :b :c2570; + :b :c2571; + :b :c2572; + :b :c2573; + :b :c2574; + :b :c2575; + :b :c2576; + :b :c2577; + :b :c2578; + :b :c2579; + :b :c2580; + :b :c2581; + :b :c2582; + :b :c2583; + :b :c2584; + :b :c2585; + :b :c2586; + :b :c2587; + :b :c2588; + :b :c2589; + :b :c2590; + :b :c2591; + :b :c2592; + :b :c2593; + :b :c2594; + :b :c2595; + :b :c2596; + :b :c2597; + :b :c2598; + :b :c2599; + :b :c2600; + :b :c2601; + :b :c2602; + :b :c2603; + :b :c2604; + :b :c2605; + :b :c2606; + :b :c2607; + :b :c2608; + :b :c2609; + :b :c2610; + :b :c2611; + :b :c2612; + :b :c2613; + :b :c2614; + :b :c2615; + :b :c2616; + :b :c2617; + :b :c2618; + :b :c2619; + :b :c2620; + :b :c2621; + :b :c2622; + :b :c2623; + :b :c2624; + :b :c2625; + :b :c2626; + :b :c2627; + :b :c2628; + :b :c2629; + :b :c2630; + :b :c2631; + :b :c2632; + :b :c2633; + :b :c2634; + :b :c2635; + :b :c2636; + :b :c2637; + :b :c2638; + :b :c2639; + :b :c2640; + :b :c2641; + :b :c2642; + :b :c2643; + :b :c2644; + :b :c2645; + :b :c2646; + :b :c2647; + :b :c2648; + :b :c2649; + :b :c2650; + :b :c2651; + :b :c2652; + :b :c2653; + :b :c2654; + :b :c2655; + :b :c2656; + :b :c2657; + :b :c2658; + :b :c2659; + :b :c2660; + :b :c2661; + :b :c2662; + :b :c2663; + :b :c2664; + :b :c2665; + :b :c2666; + :b :c2667; + :b :c2668; + :b :c2669; + :b :c2670; + :b :c2671; + :b :c2672; + :b :c2673; + :b :c2674; + :b :c2675; + :b :c2676; + :b :c2677; + :b :c2678; + :b :c2679; + :b :c2680; + :b :c2681; + :b :c2682; + :b :c2683; + :b :c2684; + :b :c2685; + :b :c2686; + :b :c2687; + :b :c2688; + :b :c2689; + :b :c2690; + :b :c2691; + :b :c2692; + :b :c2693; + :b :c2694; + :b :c2695; + :b :c2696; + :b :c2697; + :b :c2698; + :b :c2699; + :b :c2700; + :b :c2701; + :b :c2702; + :b :c2703; + :b :c2704; + :b :c2705; + :b :c2706; + :b :c2707; + :b :c2708; + :b :c2709; + :b :c2710; + :b :c2711; + :b :c2712; + :b :c2713; + :b :c2714; + :b :c2715; + :b :c2716; + :b :c2717; + :b :c2718; + :b :c2719; + :b :c2720; + :b :c2721; + :b :c2722; + :b :c2723; + :b :c2724; + :b :c2725; + :b :c2726; + :b :c2727; + :b :c2728; + :b :c2729; + :b :c2730; + :b :c2731; + :b :c2732; + :b :c2733; + :b :c2734; + :b :c2735; + :b :c2736; + :b :c2737; + :b :c2738; + :b :c2739; + :b :c2740; + :b :c2741; + :b :c2742; + :b :c2743; + :b :c2744; + :b :c2745; + :b :c2746; + :b :c2747; + :b :c2748; + :b :c2749; + :b :c2750; + :b :c2751; + :b :c2752; + :b :c2753; + :b :c2754; + :b :c2755; + :b :c2756; + :b :c2757; + :b :c2758; + :b :c2759; + :b :c2760; + :b :c2761; + :b :c2762; + :b :c2763; + :b :c2764; + :b :c2765; + :b :c2766; + :b :c2767; + :b :c2768; + :b :c2769; + :b :c2770; + :b :c2771; + :b :c2772; + :b :c2773; + :b :c2774; + :b :c2775; + :b :c2776; + :b :c2777; + :b :c2778; + :b :c2779; + :b :c2780; + :b :c2781; + :b :c2782; + :b :c2783; + :b :c2784; + :b :c2785; + :b :c2786; + :b :c2787; + :b :c2788; + :b :c2789; + :b :c2790; + :b :c2791; + :b :c2792; + :b :c2793; + :b :c2794; + :b :c2795; + :b :c2796; + :b :c2797; + :b :c2798; + :b :c2799; + :b :c2800; + :b :c2801; + :b :c2802; + :b :c2803; + :b :c2804; + :b :c2805; + :b :c2806; + :b :c2807; + :b :c2808; + :b :c2809; + :b :c2810; + :b :c2811; + :b :c2812; + :b :c2813; + :b :c2814; + :b :c2815; + :b :c2816; + :b :c2817; + :b :c2818; + :b :c2819; + :b :c2820; + :b :c2821; + :b :c2822; + :b :c2823; + :b :c2824; + :b :c2825; + :b :c2826; + :b :c2827; + :b :c2828; + :b :c2829; + :b :c2830; + :b :c2831; + :b :c2832; + :b :c2833; + :b :c2834; + :b :c2835; + :b :c2836; + :b :c2837; + :b :c2838; + :b :c2839; + :b :c2840; + :b :c2841; + :b :c2842; + :b :c2843; + :b :c2844; + :b :c2845; + :b :c2846; + :b :c2847; + :b :c2848; + :b :c2849; + :b :c2850; + :b :c2851; + :b :c2852; + :b :c2853; + :b :c2854; + :b :c2855; + :b :c2856; + :b :c2857; + :b :c2858; + :b :c2859; + :b :c2860; + :b :c2861; + :b :c2862; + :b :c2863; + :b :c2864; + :b :c2865; + :b :c2866; + :b :c2867; + :b :c2868; + :b :c2869; + :b :c2870; + :b :c2871; + :b :c2872; + :b :c2873; + :b :c2874; + :b :c2875; + :b :c2876; + :b :c2877; + :b :c2878; + :b :c2879; + :b :c2880; + :b :c2881; + :b :c2882; + :b :c2883; + :b :c2884; + :b :c2885; + :b :c2886; + :b :c2887; + :b :c2888; + :b :c2889; + :b :c2890; + :b :c2891; + :b :c2892; + :b :c2893; + :b :c2894; + :b :c2895; + :b :c2896; + :b :c2897; + :b :c2898; + :b :c2899; + :b :c2900; + :b :c2901; + :b :c2902; + :b :c2903; + :b :c2904; + :b :c2905; + :b :c2906; + :b :c2907; + :b :c2908; + :b :c2909; + :b :c2910; + :b :c2911; + :b :c2912; + :b :c2913; + :b :c2914; + :b :c2915; + :b :c2916; + :b :c2917; + :b :c2918; + :b :c2919; + :b :c2920; + :b :c2921; + :b :c2922; + :b :c2923; + :b :c2924; + :b :c2925; + :b :c2926; + :b :c2927; + :b :c2928; + :b :c2929; + :b :c2930; + :b :c2931; + :b :c2932; + :b :c2933; + :b :c2934; + :b :c2935; + :b :c2936; + :b :c2937; + :b :c2938; + :b :c2939; + :b :c2940; + :b :c2941; + :b :c2942; + :b :c2943; + :b :c2944; + :b :c2945; + :b :c2946; + :b :c2947; + :b :c2948; + :b :c2949; + :b :c2950; + :b :c2951; + :b :c2952; + :b :c2953; + :b :c2954; + :b :c2955; + :b :c2956; + :b :c2957; + :b :c2958; + :b :c2959; + :b :c2960; + :b :c2961; + :b :c2962; + :b :c2963; + :b :c2964; + :b :c2965; + :b :c2966; + :b :c2967; + :b :c2968; + :b :c2969; + :b :c2970; + :b :c2971; + :b :c2972; + :b :c2973; + :b :c2974; + :b :c2975; + :b :c2976; + :b :c2977; + :b :c2978; + :b :c2979; + :b :c2980; + :b :c2981; + :b :c2982; + :b :c2983; + :b :c2984; + :b :c2985; + :b :c2986; + :b :c2987; + :b :c2988; + :b :c2989; + :b :c2990; + :b :c2991; + :b :c2992; + :b :c2993; + :b :c2994; + :b :c2995; + :b :c2996; + :b :c2997; + :b :c2998; + :b :c2999; + :b :c3000; + :b :c3001; + :b :c3002; + :b :c3003; + :b :c3004; + :b :c3005; + :b :c3006; + :b :c3007; + :b :c3008; + :b :c3009; + :b :c3010; + :b :c3011; + :b :c3012; + :b :c3013; + :b :c3014; + :b :c3015; + :b :c3016; + :b :c3017; + :b :c3018; + :b :c3019; + :b :c3020; + :b :c3021; + :b :c3022; + :b :c3023; + :b :c3024; + :b :c3025; + :b :c3026; + :b :c3027; + :b :c3028; + :b :c3029; + :b :c3030; + :b :c3031; + :b :c3032; + :b :c3033; + :b :c3034; + :b :c3035; + :b :c3036; + :b :c3037; + :b :c3038; + :b :c3039; + :b :c3040; + :b :c3041; + :b :c3042; + :b :c3043; + :b :c3044; + :b :c3045; + :b :c3046; + :b :c3047; + :b :c3048; + :b :c3049; + :b :c3050; + :b :c3051; + :b :c3052; + :b :c3053; + :b :c3054; + :b :c3055; + :b :c3056; + :b :c3057; + :b :c3058; + :b :c3059; + :b :c3060; + :b :c3061; + :b :c3062; + :b :c3063; + :b :c3064; + :b :c3065; + :b :c3066; + :b :c3067; + :b :c3068; + :b :c3069; + :b :c3070; + :b :c3071; + :b :c3072; + :b :c3073; + :b :c3074; + :b :c3075; + :b :c3076; + :b :c3077; + :b :c3078; + :b :c3079; + :b :c3080; + :b :c3081; + :b :c3082; + :b :c3083; + :b :c3084; + :b :c3085; + :b :c3086; + :b :c3087; + :b :c3088; + :b :c3089; + :b :c3090; + :b :c3091; + :b :c3092; + :b :c3093; + :b :c3094; + :b :c3095; + :b :c3096; + :b :c3097; + :b :c3098; + :b :c3099; + :b :c3100; + :b :c3101; + :b :c3102; + :b :c3103; + :b :c3104; + :b :c3105; + :b :c3106; + :b :c3107; + :b :c3108; + :b :c3109; + :b :c3110; + :b :c3111; + :b :c3112; + :b :c3113; + :b :c3114; + :b :c3115; + :b :c3116; + :b :c3117; + :b :c3118; + :b :c3119; + :b :c3120; + :b :c3121; + :b :c3122; + :b :c3123; + :b :c3124; + :b :c3125; + :b :c3126; + :b :c3127; + :b :c3128; + :b :c3129; + :b :c3130; + :b :c3131; + :b :c3132; + :b :c3133; + :b :c3134; + :b :c3135; + :b :c3136; + :b :c3137; + :b :c3138; + :b :c3139; + :b :c3140; + :b :c3141; + :b :c3142; + :b :c3143; + :b :c3144; + :b :c3145; + :b :c3146; + :b :c3147; + :b :c3148; + :b :c3149; + :b :c3150; + :b :c3151; + :b :c3152; + :b :c3153; + :b :c3154; + :b :c3155; + :b :c3156; + :b :c3157; + :b :c3158; + :b :c3159; + :b :c3160; + :b :c3161; + :b :c3162; + :b :c3163; + :b :c3164; + :b :c3165; + :b :c3166; + :b :c3167; + :b :c3168; + :b :c3169; + :b :c3170; + :b :c3171; + :b :c3172; + :b :c3173; + :b :c3174; + :b :c3175; + :b :c3176; + :b :c3177; + :b :c3178; + :b :c3179; + :b :c3180; + :b :c3181; + :b :c3182; + :b :c3183; + :b :c3184; + :b :c3185; + :b :c3186; + :b :c3187; + :b :c3188; + :b :c3189; + :b :c3190; + :b :c3191; + :b :c3192; + :b :c3193; + :b :c3194; + :b :c3195; + :b :c3196; + :b :c3197; + :b :c3198; + :b :c3199; + :b :c3200; + :b :c3201; + :b :c3202; + :b :c3203; + :b :c3204; + :b :c3205; + :b :c3206; + :b :c3207; + :b :c3208; + :b :c3209; + :b :c3210; + :b :c3211; + :b :c3212; + :b :c3213; + :b :c3214; + :b :c3215; + :b :c3216; + :b :c3217; + :b :c3218; + :b :c3219; + :b :c3220; + :b :c3221; + :b :c3222; + :b :c3223; + :b :c3224; + :b :c3225; + :b :c3226; + :b :c3227; + :b :c3228; + :b :c3229; + :b :c3230; + :b :c3231; + :b :c3232; + :b :c3233; + :b :c3234; + :b :c3235; + :b :c3236; + :b :c3237; + :b :c3238; + :b :c3239; + :b :c3240; + :b :c3241; + :b :c3242; + :b :c3243; + :b :c3244; + :b :c3245; + :b :c3246; + :b :c3247; + :b :c3248; + :b :c3249; + :b :c3250; + :b :c3251; + :b :c3252; + :b :c3253; + :b :c3254; + :b :c3255; + :b :c3256; + :b :c3257; + :b :c3258; + :b :c3259; + :b :c3260; + :b :c3261; + :b :c3262; + :b :c3263; + :b :c3264; + :b :c3265; + :b :c3266; + :b :c3267; + :b :c3268; + :b :c3269; + :b :c3270; + :b :c3271; + :b :c3272; + :b :c3273; + :b :c3274; + :b :c3275; + :b :c3276; + :b :c3277; + :b :c3278; + :b :c3279; + :b :c3280; + :b :c3281; + :b :c3282; + :b :c3283; + :b :c3284; + :b :c3285; + :b :c3286; + :b :c3287; + :b :c3288; + :b :c3289; + :b :c3290; + :b :c3291; + :b :c3292; + :b :c3293; + :b :c3294; + :b :c3295; + :b :c3296; + :b :c3297; + :b :c3298; + :b :c3299; + :b :c3300; + :b :c3301; + :b :c3302; + :b :c3303; + :b :c3304; + :b :c3305; + :b :c3306; + :b :c3307; + :b :c3308; + :b :c3309; + :b :c3310; + :b :c3311; + :b :c3312; + :b :c3313; + :b :c3314; + :b :c3315; + :b :c3316; + :b :c3317; + :b :c3318; + :b :c3319; + :b :c3320; + :b :c3321; + :b :c3322; + :b :c3323; + :b :c3324; + :b :c3325; + :b :c3326; + :b :c3327; + :b :c3328; + :b :c3329; + :b :c3330; + :b :c3331; + :b :c3332; + :b :c3333; + :b :c3334; + :b :c3335; + :b :c3336; + :b :c3337; + :b :c3338; + :b :c3339; + :b :c3340; + :b :c3341; + :b :c3342; + :b :c3343; + :b :c3344; + :b :c3345; + :b :c3346; + :b :c3347; + :b :c3348; + :b :c3349; + :b :c3350; + :b :c3351; + :b :c3352; + :b :c3353; + :b :c3354; + :b :c3355; + :b :c3356; + :b :c3357; + :b :c3358; + :b :c3359; + :b :c3360; + :b :c3361; + :b :c3362; + :b :c3363; + :b :c3364; + :b :c3365; + :b :c3366; + :b :c3367; + :b :c3368; + :b :c3369; + :b :c3370; + :b :c3371; + :b :c3372; + :b :c3373; + :b :c3374; + :b :c3375; + :b :c3376; + :b :c3377; + :b :c3378; + :b :c3379; + :b :c3380; + :b :c3381; + :b :c3382; + :b :c3383; + :b :c3384; + :b :c3385; + :b :c3386; + :b :c3387; + :b :c3388; + :b :c3389; + :b :c3390; + :b :c3391; + :b :c3392; + :b :c3393; + :b :c3394; + :b :c3395; + :b :c3396; + :b :c3397; + :b :c3398; + :b :c3399; + :b :c3400; + :b :c3401; + :b :c3402; + :b :c3403; + :b :c3404; + :b :c3405; + :b :c3406; + :b :c3407; + :b :c3408; + :b :c3409; + :b :c3410; + :b :c3411; + :b :c3412; + :b :c3413; + :b :c3414; + :b :c3415; + :b :c3416; + :b :c3417; + :b :c3418; + :b :c3419; + :b :c3420; + :b :c3421; + :b :c3422; + :b :c3423; + :b :c3424; + :b :c3425; + :b :c3426; + :b :c3427; + :b :c3428; + :b :c3429; + :b :c3430; + :b :c3431; + :b :c3432; + :b :c3433; + :b :c3434; + :b :c3435; + :b :c3436; + :b :c3437; + :b :c3438; + :b :c3439; + :b :c3440; + :b :c3441; + :b :c3442; + :b :c3443; + :b :c3444; + :b :c3445; + :b :c3446; + :b :c3447; + :b :c3448; + :b :c3449; + :b :c3450; + :b :c3451; + :b :c3452; + :b :c3453; + :b :c3454; + :b :c3455; + :b :c3456; + :b :c3457; + :b :c3458; + :b :c3459; + :b :c3460; + :b :c3461; + :b :c3462; + :b :c3463; + :b :c3464; + :b :c3465; + :b :c3466; + :b :c3467; + :b :c3468; + :b :c3469; + :b :c3470; + :b :c3471; + :b :c3472; + :b :c3473; + :b :c3474; + :b :c3475; + :b :c3476; + :b :c3477; + :b :c3478; + :b :c3479; + :b :c3480; + :b :c3481; + :b :c3482; + :b :c3483; + :b :c3484; + :b :c3485; + :b :c3486; + :b :c3487; + :b :c3488; + :b :c3489; + :b :c3490; + :b :c3491; + :b :c3492; + :b :c3493; + :b :c3494; + :b :c3495; + :b :c3496; + :b :c3497; + :b :c3498; + :b :c3499; + :b :c3500; + :b :c3501; + :b :c3502; + :b :c3503; + :b :c3504; + :b :c3505; + :b :c3506; + :b :c3507; + :b :c3508; + :b :c3509; + :b :c3510; + :b :c3511; + :b :c3512; + :b :c3513; + :b :c3514; + :b :c3515; + :b :c3516; + :b :c3517; + :b :c3518; + :b :c3519; + :b :c3520; + :b :c3521; + :b :c3522; + :b :c3523; + :b :c3524; + :b :c3525; + :b :c3526; + :b :c3527; + :b :c3528; + :b :c3529; + :b :c3530; + :b :c3531; + :b :c3532; + :b :c3533; + :b :c3534; + :b :c3535; + :b :c3536; + :b :c3537; + :b :c3538; + :b :c3539; + :b :c3540; + :b :c3541; + :b :c3542; + :b :c3543; + :b :c3544; + :b :c3545; + :b :c3546; + :b :c3547; + :b :c3548; + :b :c3549; + :b :c3550; + :b :c3551; + :b :c3552; + :b :c3553; + :b :c3554; + :b :c3555; + :b :c3556; + :b :c3557; + :b :c3558; + :b :c3559; + :b :c3560; + :b :c3561; + :b :c3562; + :b :c3563; + :b :c3564; + :b :c3565; + :b :c3566; + :b :c3567; + :b :c3568; + :b :c3569; + :b :c3570; + :b :c3571; + :b :c3572; + :b :c3573; + :b :c3574; + :b :c3575; + :b :c3576; + :b :c3577; + :b :c3578; + :b :c3579; + :b :c3580; + :b :c3581; + :b :c3582; + :b :c3583; + :b :c3584; + :b :c3585; + :b :c3586; + :b :c3587; + :b :c3588; + :b :c3589; + :b :c3590; + :b :c3591; + :b :c3592; + :b :c3593; + :b :c3594; + :b :c3595; + :b :c3596; + :b :c3597; + :b :c3598; + :b :c3599; + :b :c3600; + :b :c3601; + :b :c3602; + :b :c3603; + :b :c3604; + :b :c3605; + :b :c3606; + :b :c3607; + :b :c3608; + :b :c3609; + :b :c3610; + :b :c3611; + :b :c3612; + :b :c3613; + :b :c3614; + :b :c3615; + :b :c3616; + :b :c3617; + :b :c3618; + :b :c3619; + :b :c3620; + :b :c3621; + :b :c3622; + :b :c3623; + :b :c3624; + :b :c3625; + :b :c3626; + :b :c3627; + :b :c3628; + :b :c3629; + :b :c3630; + :b :c3631; + :b :c3632; + :b :c3633; + :b :c3634; + :b :c3635; + :b :c3636; + :b :c3637; + :b :c3638; + :b :c3639; + :b :c3640; + :b :c3641; + :b :c3642; + :b :c3643; + :b :c3644; + :b :c3645; + :b :c3646; + :b :c3647; + :b :c3648; + :b :c3649; + :b :c3650; + :b :c3651; + :b :c3652; + :b :c3653; + :b :c3654; + :b :c3655; + :b :c3656; + :b :c3657; + :b :c3658; + :b :c3659; + :b :c3660; + :b :c3661; + :b :c3662; + :b :c3663; + :b :c3664; + :b :c3665; + :b :c3666; + :b :c3667; + :b :c3668; + :b :c3669; + :b :c3670; + :b :c3671; + :b :c3672; + :b :c3673; + :b :c3674; + :b :c3675; + :b :c3676; + :b :c3677; + :b :c3678; + :b :c3679; + :b :c3680; + :b :c3681; + :b :c3682; + :b :c3683; + :b :c3684; + :b :c3685; + :b :c3686; + :b :c3687; + :b :c3688; + :b :c3689; + :b :c3690; + :b :c3691; + :b :c3692; + :b :c3693; + :b :c3694; + :b :c3695; + :b :c3696; + :b :c3697; + :b :c3698; + :b :c3699; + :b :c3700; + :b :c3701; + :b :c3702; + :b :c3703; + :b :c3704; + :b :c3705; + :b :c3706; + :b :c3707; + :b :c3708; + :b :c3709; + :b :c3710; + :b :c3711; + :b :c3712; + :b :c3713; + :b :c3714; + :b :c3715; + :b :c3716; + :b :c3717; + :b :c3718; + :b :c3719; + :b :c3720; + :b :c3721; + :b :c3722; + :b :c3723; + :b :c3724; + :b :c3725; + :b :c3726; + :b :c3727; + :b :c3728; + :b :c3729; + :b :c3730; + :b :c3731; + :b :c3732; + :b :c3733; + :b :c3734; + :b :c3735; + :b :c3736; + :b :c3737; + :b :c3738; + :b :c3739; + :b :c3740; + :b :c3741; + :b :c3742; + :b :c3743; + :b :c3744; + :b :c3745; + :b :c3746; + :b :c3747; + :b :c3748; + :b :c3749; + :b :c3750; + :b :c3751; + :b :c3752; + :b :c3753; + :b :c3754; + :b :c3755; + :b :c3756; + :b :c3757; + :b :c3758; + :b :c3759; + :b :c3760; + :b :c3761; + :b :c3762; + :b :c3763; + :b :c3764; + :b :c3765; + :b :c3766; + :b :c3767; + :b :c3768; + :b :c3769; + :b :c3770; + :b :c3771; + :b :c3772; + :b :c3773; + :b :c3774; + :b :c3775; + :b :c3776; + :b :c3777; + :b :c3778; + :b :c3779; + :b :c3780; + :b :c3781; + :b :c3782; + :b :c3783; + :b :c3784; + :b :c3785; + :b :c3786; + :b :c3787; + :b :c3788; + :b :c3789; + :b :c3790; + :b :c3791; + :b :c3792; + :b :c3793; + :b :c3794; + :b :c3795; + :b :c3796; + :b :c3797; + :b :c3798; + :b :c3799; + :b :c3800; + :b :c3801; + :b :c3802; + :b :c3803; + :b :c3804; + :b :c3805; + :b :c3806; + :b :c3807; + :b :c3808; + :b :c3809; + :b :c3810; + :b :c3811; + :b :c3812; + :b :c3813; + :b :c3814; + :b :c3815; + :b :c3816; + :b :c3817; + :b :c3818; + :b :c3819; + :b :c3820; + :b :c3821; + :b :c3822; + :b :c3823; + :b :c3824; + :b :c3825; + :b :c3826; + :b :c3827; + :b :c3828; + :b :c3829; + :b :c3830; + :b :c3831; + :b :c3832; + :b :c3833; + :b :c3834; + :b :c3835; + :b :c3836; + :b :c3837; + :b :c3838; + :b :c3839; + :b :c3840; + :b :c3841; + :b :c3842; + :b :c3843; + :b :c3844; + :b :c3845; + :b :c3846; + :b :c3847; + :b :c3848; + :b :c3849; + :b :c3850; + :b :c3851; + :b :c3852; + :b :c3853; + :b :c3854; + :b :c3855; + :b :c3856; + :b :c3857; + :b :c3858; + :b :c3859; + :b :c3860; + :b :c3861; + :b :c3862; + :b :c3863; + :b :c3864; + :b :c3865; + :b :c3866; + :b :c3867; + :b :c3868; + :b :c3869; + :b :c3870; + :b :c3871; + :b :c3872; + :b :c3873; + :b :c3874; + :b :c3875; + :b :c3876; + :b :c3877; + :b :c3878; + :b :c3879; + :b :c3880; + :b :c3881; + :b :c3882; + :b :c3883; + :b :c3884; + :b :c3885; + :b :c3886; + :b :c3887; + :b :c3888; + :b :c3889; + :b :c3890; + :b :c3891; + :b :c3892; + :b :c3893; + :b :c3894; + :b :c3895; + :b :c3896; + :b :c3897; + :b :c3898; + :b :c3899; + :b :c3900; + :b :c3901; + :b :c3902; + :b :c3903; + :b :c3904; + :b :c3905; + :b :c3906; + :b :c3907; + :b :c3908; + :b :c3909; + :b :c3910; + :b :c3911; + :b :c3912; + :b :c3913; + :b :c3914; + :b :c3915; + :b :c3916; + :b :c3917; + :b :c3918; + :b :c3919; + :b :c3920; + :b :c3921; + :b :c3922; + :b :c3923; + :b :c3924; + :b :c3925; + :b :c3926; + :b :c3927; + :b :c3928; + :b :c3929; + :b :c3930; + :b :c3931; + :b :c3932; + :b :c3933; + :b :c3934; + :b :c3935; + :b :c3936; + :b :c3937; + :b :c3938; + :b :c3939; + :b :c3940; + :b :c3941; + :b :c3942; + :b :c3943; + :b :c3944; + :b :c3945; + :b :c3946; + :b :c3947; + :b :c3948; + :b :c3949; + :b :c3950; + :b :c3951; + :b :c3952; + :b :c3953; + :b :c3954; + :b :c3955; + :b :c3956; + :b :c3957; + :b :c3958; + :b :c3959; + :b :c3960; + :b :c3961; + :b :c3962; + :b :c3963; + :b :c3964; + :b :c3965; + :b :c3966; + :b :c3967; + :b :c3968; + :b :c3969; + :b :c3970; + :b :c3971; + :b :c3972; + :b :c3973; + :b :c3974; + :b :c3975; + :b :c3976; + :b :c3977; + :b :c3978; + :b :c3979; + :b :c3980; + :b :c3981; + :b :c3982; + :b :c3983; + :b :c3984; + :b :c3985; + :b :c3986; + :b :c3987; + :b :c3988; + :b :c3989; + :b :c3990; + :b :c3991; + :b :c3992; + :b :c3993; + :b :c3994; + :b :c3995; + :b :c3996; + :b :c3997; + :b :c3998; + :b :c3999; + :b :c4000; + :b :c4001; + :b :c4002; + :b :c4003; + :b :c4004; + :b :c4005; + :b :c4006; + :b :c4007; + :b :c4008; + :b :c4009; + :b :c4010; + :b :c4011; + :b :c4012; + :b :c4013; + :b :c4014; + :b :c4015; + :b :c4016; + :b :c4017; + :b :c4018; + :b :c4019; + :b :c4020; + :b :c4021; + :b :c4022; + :b :c4023; + :b :c4024; + :b :c4025; + :b :c4026; + :b :c4027; + :b :c4028; + :b :c4029; + :b :c4030; + :b :c4031; + :b :c4032; + :b :c4033; + :b :c4034; + :b :c4035; + :b :c4036; + :b :c4037; + :b :c4038; + :b :c4039; + :b :c4040; + :b :c4041; + :b :c4042; + :b :c4043; + :b :c4044; + :b :c4045; + :b :c4046; + :b :c4047; + :b :c4048; + :b :c4049; + :b :c4050; + :b :c4051; + :b :c4052; + :b :c4053; + :b :c4054; + :b :c4055; + :b :c4056; + :b :c4057; + :b :c4058; + :b :c4059; + :b :c4060; + :b :c4061; + :b :c4062; + :b :c4063; + :b :c4064; + :b :c4065; + :b :c4066; + :b :c4067; + :b :c4068; + :b :c4069; + :b :c4070; + :b :c4071; + :b :c4072; + :b :c4073; + :b :c4074; + :b :c4075; + :b :c4076; + :b :c4077; + :b :c4078; + :b :c4079; + :b :c4080; + :b :c4081; + :b :c4082; + :b :c4083; + :b :c4084; + :b :c4085; + :b :c4086; + :b :c4087; + :b :c4088; + :b :c4089; + :b :c4090; + :b :c4091; + :b :c4092; + :b :c4093; + :b :c4094; + :b :c4095; + :b :c4096; + :b :c4097; + :b :c4098; + :b :c4099; + :b :c4100; + :b :c4101; + :b :c4102; + :b :c4103; + :b :c4104; + :b :c4105; + :b :c4106; + :b :c4107; + :b :c4108; + :b :c4109; + :b :c4110; + :b :c4111; + :b :c4112; + :b :c4113; + :b :c4114; + :b :c4115; + :b :c4116; + :b :c4117; + :b :c4118; + :b :c4119; + :b :c4120; + :b :c4121; + :b :c4122; + :b :c4123; + :b :c4124; + :b :c4125; + :b :c4126; + :b :c4127; + :b :c4128; + :b :c4129; + :b :c4130; + :b :c4131; + :b :c4132; + :b :c4133; + :b :c4134; + :b :c4135; + :b :c4136; + :b :c4137; + :b :c4138; + :b :c4139; + :b :c4140; + :b :c4141; + :b :c4142; + :b :c4143; + :b :c4144; + :b :c4145; + :b :c4146; + :b :c4147; + :b :c4148; + :b :c4149; + :b :c4150; + :b :c4151; + :b :c4152; + :b :c4153; + :b :c4154; + :b :c4155; + :b :c4156; + :b :c4157; + :b :c4158; + :b :c4159; + :b :c4160; + :b :c4161; + :b :c4162; + :b :c4163; + :b :c4164; + :b :c4165; + :b :c4166; + :b :c4167; + :b :c4168; + :b :c4169; + :b :c4170; + :b :c4171; + :b :c4172; + :b :c4173; + :b :c4174; + :b :c4175; + :b :c4176; + :b :c4177; + :b :c4178; + :b :c4179; + :b :c4180; + :b :c4181; + :b :c4182; + :b :c4183; + :b :c4184; + :b :c4185; + :b :c4186; + :b :c4187; + :b :c4188; + :b :c4189; + :b :c4190; + :b :c4191; + :b :c4192; + :b :c4193; + :b :c4194; + :b :c4195; + :b :c4196; + :b :c4197; + :b :c4198; + :b :c4199; + :b :c4200; + :b :c4201; + :b :c4202; + :b :c4203; + :b :c4204; + :b :c4205; + :b :c4206; + :b :c4207; + :b :c4208; + :b :c4209; + :b :c4210; + :b :c4211; + :b :c4212; + :b :c4213; + :b :c4214; + :b :c4215; + :b :c4216; + :b :c4217; + :b :c4218; + :b :c4219; + :b :c4220; + :b :c4221; + :b :c4222; + :b :c4223; + :b :c4224; + :b :c4225; + :b :c4226; + :b :c4227; + :b :c4228; + :b :c4229; + :b :c4230; + :b :c4231; + :b :c4232; + :b :c4233; + :b :c4234; + :b :c4235; + :b :c4236; + :b :c4237; + :b :c4238; + :b :c4239; + :b :c4240; + :b :c4241; + :b :c4242; + :b :c4243; + :b :c4244; + :b :c4245; + :b :c4246; + :b :c4247; + :b :c4248; + :b :c4249; + :b :c4250; + :b :c4251; + :b :c4252; + :b :c4253; + :b :c4254; + :b :c4255; + :b :c4256; + :b :c4257; + :b :c4258; + :b :c4259; + :b :c4260; + :b :c4261; + :b :c4262; + :b :c4263; + :b :c4264; + :b :c4265; + :b :c4266; + :b :c4267; + :b :c4268; + :b :c4269; + :b :c4270; + :b :c4271; + :b :c4272; + :b :c4273; + :b :c4274; + :b :c4275; + :b :c4276; + :b :c4277; + :b :c4278; + :b :c4279; + :b :c4280; + :b :c4281; + :b :c4282; + :b :c4283; + :b :c4284; + :b :c4285; + :b :c4286; + :b :c4287; + :b :c4288; + :b :c4289; + :b :c4290; + :b :c4291; + :b :c4292; + :b :c4293; + :b :c4294; + :b :c4295; + :b :c4296; + :b :c4297; + :b :c4298; + :b :c4299; + :b :c4300; + :b :c4301; + :b :c4302; + :b :c4303; + :b :c4304; + :b :c4305; + :b :c4306; + :b :c4307; + :b :c4308; + :b :c4309; + :b :c4310; + :b :c4311; + :b :c4312; + :b :c4313; + :b :c4314; + :b :c4315; + :b :c4316; + :b :c4317; + :b :c4318; + :b :c4319; + :b :c4320; + :b :c4321; + :b :c4322; + :b :c4323; + :b :c4324; + :b :c4325; + :b :c4326; + :b :c4327; + :b :c4328; + :b :c4329; + :b :c4330; + :b :c4331; + :b :c4332; + :b :c4333; + :b :c4334; + :b :c4335; + :b :c4336; + :b :c4337; + :b :c4338; + :b :c4339; + :b :c4340; + :b :c4341; + :b :c4342; + :b :c4343; + :b :c4344; + :b :c4345; + :b :c4346; + :b :c4347; + :b :c4348; + :b :c4349; + :b :c4350; + :b :c4351; + :b :c4352; + :b :c4353; + :b :c4354; + :b :c4355; + :b :c4356; + :b :c4357; + :b :c4358; + :b :c4359; + :b :c4360; + :b :c4361; + :b :c4362; + :b :c4363; + :b :c4364; + :b :c4365; + :b :c4366; + :b :c4367; + :b :c4368; + :b :c4369; + :b :c4370; + :b :c4371; + :b :c4372; + :b :c4373; + :b :c4374; + :b :c4375; + :b :c4376; + :b :c4377; + :b :c4378; + :b :c4379; + :b :c4380; + :b :c4381; + :b :c4382; + :b :c4383; + :b :c4384; + :b :c4385; + :b :c4386; + :b :c4387; + :b :c4388; + :b :c4389; + :b :c4390; + :b :c4391; + :b :c4392; + :b :c4393; + :b :c4394; + :b :c4395; + :b :c4396; + :b :c4397; + :b :c4398; + :b :c4399; + :b :c4400; + :b :c4401; + :b :c4402; + :b :c4403; + :b :c4404; + :b :c4405; + :b :c4406; + :b :c4407; + :b :c4408; + :b :c4409; + :b :c4410; + :b :c4411; + :b :c4412; + :b :c4413; + :b :c4414; + :b :c4415; + :b :c4416; + :b :c4417; + :b :c4418; + :b :c4419; + :b :c4420; + :b :c4421; + :b :c4422; + :b :c4423; + :b :c4424; + :b :c4425; + :b :c4426; + :b :c4427; + :b :c4428; + :b :c4429; + :b :c4430; + :b :c4431; + :b :c4432; + :b :c4433; + :b :c4434; + :b :c4435; + :b :c4436; + :b :c4437; + :b :c4438; + :b :c4439; + :b :c4440; + :b :c4441; + :b :c4442; + :b :c4443; + :b :c4444; + :b :c4445; + :b :c4446; + :b :c4447; + :b :c4448; + :b :c4449; + :b :c4450; + :b :c4451; + :b :c4452; + :b :c4453; + :b :c4454; + :b :c4455; + :b :c4456; + :b :c4457; + :b :c4458; + :b :c4459; + :b :c4460; + :b :c4461; + :b :c4462; + :b :c4463; + :b :c4464; + :b :c4465; + :b :c4466; + :b :c4467; + :b :c4468; + :b :c4469; + :b :c4470; + :b :c4471; + :b :c4472; + :b :c4473; + :b :c4474; + :b :c4475; + :b :c4476; + :b :c4477; + :b :c4478; + :b :c4479; + :b :c4480; + :b :c4481; + :b :c4482; + :b :c4483; + :b :c4484; + :b :c4485; + :b :c4486; + :b :c4487; + :b :c4488; + :b :c4489; + :b :c4490; + :b :c4491; + :b :c4492; + :b :c4493; + :b :c4494; + :b :c4495; + :b :c4496; + :b :c4497; + :b :c4498; + :b :c4499; + :b :c4500; + :b :c4501; + :b :c4502; + :b :c4503; + :b :c4504; + :b :c4505; + :b :c4506; + :b :c4507; + :b :c4508; + :b :c4509; + :b :c4510; + :b :c4511; + :b :c4512; + :b :c4513; + :b :c4514; + :b :c4515; + :b :c4516; + :b :c4517; + :b :c4518; + :b :c4519; + :b :c4520; + :b :c4521; + :b :c4522; + :b :c4523; + :b :c4524; + :b :c4525; + :b :c4526; + :b :c4527; + :b :c4528; + :b :c4529; + :b :c4530; + :b :c4531; + :b :c4532; + :b :c4533; + :b :c4534; + :b :c4535; + :b :c4536; + :b :c4537; + :b :c4538; + :b :c4539; + :b :c4540; + :b :c4541; + :b :c4542; + :b :c4543; + :b :c4544; + :b :c4545; + :b :c4546; + :b :c4547; + :b :c4548; + :b :c4549; + :b :c4550; + :b :c4551; + :b :c4552; + :b :c4553; + :b :c4554; + :b :c4555; + :b :c4556; + :b :c4557; + :b :c4558; + :b :c4559; + :b :c4560; + :b :c4561; + :b :c4562; + :b :c4563; + :b :c4564; + :b :c4565; + :b :c4566; + :b :c4567; + :b :c4568; + :b :c4569; + :b :c4570; + :b :c4571; + :b :c4572; + :b :c4573; + :b :c4574; + :b :c4575; + :b :c4576; + :b :c4577; + :b :c4578; + :b :c4579; + :b :c4580; + :b :c4581; + :b :c4582; + :b :c4583; + :b :c4584; + :b :c4585; + :b :c4586; + :b :c4587; + :b :c4588; + :b :c4589; + :b :c4590; + :b :c4591; + :b :c4592; + :b :c4593; + :b :c4594; + :b :c4595; + :b :c4596; + :b :c4597; + :b :c4598; + :b :c4599; + :b :c4600; + :b :c4601; + :b :c4602; + :b :c4603; + :b :c4604; + :b :c4605; + :b :c4606; + :b :c4607; + :b :c4608; + :b :c4609; + :b :c4610; + :b :c4611; + :b :c4612; + :b :c4613; + :b :c4614; + :b :c4615; + :b :c4616; + :b :c4617; + :b :c4618; + :b :c4619; + :b :c4620; + :b :c4621; + :b :c4622; + :b :c4623; + :b :c4624; + :b :c4625; + :b :c4626; + :b :c4627; + :b :c4628; + :b :c4629; + :b :c4630; + :b :c4631; + :b :c4632; + :b :c4633; + :b :c4634; + :b :c4635; + :b :c4636; + :b :c4637; + :b :c4638; + :b :c4639; + :b :c4640; + :b :c4641; + :b :c4642; + :b :c4643; + :b :c4644; + :b :c4645; + :b :c4646; + :b :c4647; + :b :c4648; + :b :c4649; + :b :c4650; + :b :c4651; + :b :c4652; + :b :c4653; + :b :c4654; + :b :c4655; + :b :c4656; + :b :c4657; + :b :c4658; + :b :c4659; + :b :c4660; + :b :c4661; + :b :c4662; + :b :c4663; + :b :c4664; + :b :c4665; + :b :c4666; + :b :c4667; + :b :c4668; + :b :c4669; + :b :c4670; + :b :c4671; + :b :c4672; + :b :c4673; + :b :c4674; + :b :c4675; + :b :c4676; + :b :c4677; + :b :c4678; + :b :c4679; + :b :c4680; + :b :c4681; + :b :c4682; + :b :c4683; + :b :c4684; + :b :c4685; + :b :c4686; + :b :c4687; + :b :c4688; + :b :c4689; + :b :c4690; + :b :c4691; + :b :c4692; + :b :c4693; + :b :c4694; + :b :c4695; + :b :c4696; + :b :c4697; + :b :c4698; + :b :c4699; + :b :c4700; + :b :c4701; + :b :c4702; + :b :c4703; + :b :c4704; + :b :c4705; + :b :c4706; + :b :c4707; + :b :c4708; + :b :c4709; + :b :c4710; + :b :c4711; + :b :c4712; + :b :c4713; + :b :c4714; + :b :c4715; + :b :c4716; + :b :c4717; + :b :c4718; + :b :c4719; + :b :c4720; + :b :c4721; + :b :c4722; + :b :c4723; + :b :c4724; + :b :c4725; + :b :c4726; + :b :c4727; + :b :c4728; + :b :c4729; + :b :c4730; + :b :c4731; + :b :c4732; + :b :c4733; + :b :c4734; + :b :c4735; + :b :c4736; + :b :c4737; + :b :c4738; + :b :c4739; + :b :c4740; + :b :c4741; + :b :c4742; + :b :c4743; + :b :c4744; + :b :c4745; + :b :c4746; + :b :c4747; + :b :c4748; + :b :c4749; + :b :c4750; + :b :c4751; + :b :c4752; + :b :c4753; + :b :c4754; + :b :c4755; + :b :c4756; + :b :c4757; + :b :c4758; + :b :c4759; + :b :c4760; + :b :c4761; + :b :c4762; + :b :c4763; + :b :c4764; + :b :c4765; + :b :c4766; + :b :c4767; + :b :c4768; + :b :c4769; + :b :c4770; + :b :c4771; + :b :c4772; + :b :c4773; + :b :c4774; + :b :c4775; + :b :c4776; + :b :c4777; + :b :c4778; + :b :c4779; + :b :c4780; + :b :c4781; + :b :c4782; + :b :c4783; + :b :c4784; + :b :c4785; + :b :c4786; + :b :c4787; + :b :c4788; + :b :c4789; + :b :c4790; + :b :c4791; + :b :c4792; + :b :c4793; + :b :c4794; + :b :c4795; + :b :c4796; + :b :c4797; + :b :c4798; + :b :c4799; + :b :c4800; + :b :c4801; + :b :c4802; + :b :c4803; + :b :c4804; + :b :c4805; + :b :c4806; + :b :c4807; + :b :c4808; + :b :c4809; + :b :c4810; + :b :c4811; + :b :c4812; + :b :c4813; + :b :c4814; + :b :c4815; + :b :c4816; + :b :c4817; + :b :c4818; + :b :c4819; + :b :c4820; + :b :c4821; + :b :c4822; + :b :c4823; + :b :c4824; + :b :c4825; + :b :c4826; + :b :c4827; + :b :c4828; + :b :c4829; + :b :c4830; + :b :c4831; + :b :c4832; + :b :c4833; + :b :c4834; + :b :c4835; + :b :c4836; + :b :c4837; + :b :c4838; + :b :c4839; + :b :c4840; + :b :c4841; + :b :c4842; + :b :c4843; + :b :c4844; + :b :c4845; + :b :c4846; + :b :c4847; + :b :c4848; + :b :c4849; + :b :c4850; + :b :c4851; + :b :c4852; + :b :c4853; + :b :c4854; + :b :c4855; + :b :c4856; + :b :c4857; + :b :c4858; + :b :c4859; + :b :c4860; + :b :c4861; + :b :c4862; + :b :c4863; + :b :c4864; + :b :c4865; + :b :c4866; + :b :c4867; + :b :c4868; + :b :c4869; + :b :c4870; + :b :c4871; + :b :c4872; + :b :c4873; + :b :c4874; + :b :c4875; + :b :c4876; + :b :c4877; + :b :c4878; + :b :c4879; + :b :c4880; + :b :c4881; + :b :c4882; + :b :c4883; + :b :c4884; + :b :c4885; + :b :c4886; + :b :c4887; + :b :c4888; + :b :c4889; + :b :c4890; + :b :c4891; + :b :c4892; + :b :c4893; + :b :c4894; + :b :c4895; + :b :c4896; + :b :c4897; + :b :c4898; + :b :c4899; + :b :c4900; + :b :c4901; + :b :c4902; + :b :c4903; + :b :c4904; + :b :c4905; + :b :c4906; + :b :c4907; + :b :c4908; + :b :c4909; + :b :c4910; + :b :c4911; + :b :c4912; + :b :c4913; + :b :c4914; + :b :c4915; + :b :c4916; + :b :c4917; + :b :c4918; + :b :c4919; + :b :c4920; + :b :c4921; + :b :c4922; + :b :c4923; + :b :c4924; + :b :c4925; + :b :c4926; + :b :c4927; + :b :c4928; + :b :c4929; + :b :c4930; + :b :c4931; + :b :c4932; + :b :c4933; + :b :c4934; + :b :c4935; + :b :c4936; + :b :c4937; + :b :c4938; + :b :c4939; + :b :c4940; + :b :c4941; + :b :c4942; + :b :c4943; + :b :c4944; + :b :c4945; + :b :c4946; + :b :c4947; + :b :c4948; + :b :c4949; + :b :c4950; + :b :c4951; + :b :c4952; + :b :c4953; + :b :c4954; + :b :c4955; + :b :c4956; + :b :c4957; + :b :c4958; + :b :c4959; + :b :c4960; + :b :c4961; + :b :c4962; + :b :c4963; + :b :c4964; + :b :c4965; + :b :c4966; + :b :c4967; + :b :c4968; + :b :c4969; + :b :c4970; + :b :c4971; + :b :c4972; + :b :c4973; + :b :c4974; + :b :c4975; + :b :c4976; + :b :c4977; + :b :c4978; + :b :c4979; + :b :c4980; + :b :c4981; + :b :c4982; + :b :c4983; + :b :c4984; + :b :c4985; + :b :c4986; + :b :c4987; + :b :c4988; + :b :c4989; + :b :c4990; + :b :c4991; + :b :c4992; + :b :c4993; + :b :c4994; + :b :c4995; + :b :c4996; + :b :c4997; + :b :c4998; + :b :c4999; + :b :c5000; + :b :c5001; + :b :c5002; + :b :c5003; + :b :c5004; + :b :c5005; + :b :c5006; + :b :c5007; + :b :c5008; + :b :c5009; + :b :c5010; + :b :c5011; + :b :c5012; + :b :c5013; + :b :c5014; + :b :c5015; + :b :c5016; + :b :c5017; + :b :c5018; + :b :c5019; + :b :c5020; + :b :c5021; + :b :c5022; + :b :c5023; + :b :c5024; + :b :c5025; + :b :c5026; + :b :c5027; + :b :c5028; + :b :c5029; + :b :c5030; + :b :c5031; + :b :c5032; + :b :c5033; + :b :c5034; + :b :c5035; + :b :c5036; + :b :c5037; + :b :c5038; + :b :c5039; + :b :c5040; + :b :c5041; + :b :c5042; + :b :c5043; + :b :c5044; + :b :c5045; + :b :c5046; + :b :c5047; + :b :c5048; + :b :c5049; + :b :c5050; + :b :c5051; + :b :c5052; + :b :c5053; + :b :c5054; + :b :c5055; + :b :c5056; + :b :c5057; + :b :c5058; + :b :c5059; + :b :c5060; + :b :c5061; + :b :c5062; + :b :c5063; + :b :c5064; + :b :c5065; + :b :c5066; + :b :c5067; + :b :c5068; + :b :c5069; + :b :c5070; + :b :c5071; + :b :c5072; + :b :c5073; + :b :c5074; + :b :c5075; + :b :c5076; + :b :c5077; + :b :c5078; + :b :c5079; + :b :c5080; + :b :c5081; + :b :c5082; + :b :c5083; + :b :c5084; + :b :c5085; + :b :c5086; + :b :c5087; + :b :c5088; + :b :c5089; + :b :c5090; + :b :c5091; + :b :c5092; + :b :c5093; + :b :c5094; + :b :c5095; + :b :c5096; + :b :c5097; + :b :c5098; + :b :c5099; + :b :c5100; + :b :c5101; + :b :c5102; + :b :c5103; + :b :c5104; + :b :c5105; + :b :c5106; + :b :c5107; + :b :c5108; + :b :c5109; + :b :c5110; + :b :c5111; + :b :c5112; + :b :c5113; + :b :c5114; + :b :c5115; + :b :c5116; + :b :c5117; + :b :c5118; + :b :c5119; + :b :c5120; + :b :c5121; + :b :c5122; + :b :c5123; + :b :c5124; + :b :c5125; + :b :c5126; + :b :c5127; + :b :c5128; + :b :c5129; + :b :c5130; + :b :c5131; + :b :c5132; + :b :c5133; + :b :c5134; + :b :c5135; + :b :c5136; + :b :c5137; + :b :c5138; + :b :c5139; + :b :c5140; + :b :c5141; + :b :c5142; + :b :c5143; + :b :c5144; + :b :c5145; + :b :c5146; + :b :c5147; + :b :c5148; + :b :c5149; + :b :c5150; + :b :c5151; + :b :c5152; + :b :c5153; + :b :c5154; + :b :c5155; + :b :c5156; + :b :c5157; + :b :c5158; + :b :c5159; + :b :c5160; + :b :c5161; + :b :c5162; + :b :c5163; + :b :c5164; + :b :c5165; + :b :c5166; + :b :c5167; + :b :c5168; + :b :c5169; + :b :c5170; + :b :c5171; + :b :c5172; + :b :c5173; + :b :c5174; + :b :c5175; + :b :c5176; + :b :c5177; + :b :c5178; + :b :c5179; + :b :c5180; + :b :c5181; + :b :c5182; + :b :c5183; + :b :c5184; + :b :c5185; + :b :c5186; + :b :c5187; + :b :c5188; + :b :c5189; + :b :c5190; + :b :c5191; + :b :c5192; + :b :c5193; + :b :c5194; + :b :c5195; + :b :c5196; + :b :c5197; + :b :c5198; + :b :c5199; + :b :c5200; + :b :c5201; + :b :c5202; + :b :c5203; + :b :c5204; + :b :c5205; + :b :c5206; + :b :c5207; + :b :c5208; + :b :c5209; + :b :c5210; + :b :c5211; + :b :c5212; + :b :c5213; + :b :c5214; + :b :c5215; + :b :c5216; + :b :c5217; + :b :c5218; + :b :c5219; + :b :c5220; + :b :c5221; + :b :c5222; + :b :c5223; + :b :c5224; + :b :c5225; + :b :c5226; + :b :c5227; + :b :c5228; + :b :c5229; + :b :c5230; + :b :c5231; + :b :c5232; + :b :c5233; + :b :c5234; + :b :c5235; + :b :c5236; + :b :c5237; + :b :c5238; + :b :c5239; + :b :c5240; + :b :c5241; + :b :c5242; + :b :c5243; + :b :c5244; + :b :c5245; + :b :c5246; + :b :c5247; + :b :c5248; + :b :c5249; + :b :c5250; + :b :c5251; + :b :c5252; + :b :c5253; + :b :c5254; + :b :c5255; + :b :c5256; + :b :c5257; + :b :c5258; + :b :c5259; + :b :c5260; + :b :c5261; + :b :c5262; + :b :c5263; + :b :c5264; + :b :c5265; + :b :c5266; + :b :c5267; + :b :c5268; + :b :c5269; + :b :c5270; + :b :c5271; + :b :c5272; + :b :c5273; + :b :c5274; + :b :c5275; + :b :c5276; + :b :c5277; + :b :c5278; + :b :c5279; + :b :c5280; + :b :c5281; + :b :c5282; + :b :c5283; + :b :c5284; + :b :c5285; + :b :c5286; + :b :c5287; + :b :c5288; + :b :c5289; + :b :c5290; + :b :c5291; + :b :c5292; + :b :c5293; + :b :c5294; + :b :c5295; + :b :c5296; + :b :c5297; + :b :c5298; + :b :c5299; + :b :c5300; + :b :c5301; + :b :c5302; + :b :c5303; + :b :c5304; + :b :c5305; + :b :c5306; + :b :c5307; + :b :c5308; + :b :c5309; + :b :c5310; + :b :c5311; + :b :c5312; + :b :c5313; + :b :c5314; + :b :c5315; + :b :c5316; + :b :c5317; + :b :c5318; + :b :c5319; + :b :c5320; + :b :c5321; + :b :c5322; + :b :c5323; + :b :c5324; + :b :c5325; + :b :c5326; + :b :c5327; + :b :c5328; + :b :c5329; + :b :c5330; + :b :c5331; + :b :c5332; + :b :c5333; + :b :c5334; + :b :c5335; + :b :c5336; + :b :c5337; + :b :c5338; + :b :c5339; + :b :c5340; + :b :c5341; + :b :c5342; + :b :c5343; + :b :c5344; + :b :c5345; + :b :c5346; + :b :c5347; + :b :c5348; + :b :c5349; + :b :c5350; + :b :c5351; + :b :c5352; + :b :c5353; + :b :c5354; + :b :c5355; + :b :c5356; + :b :c5357; + :b :c5358; + :b :c5359; + :b :c5360; + :b :c5361; + :b :c5362; + :b :c5363; + :b :c5364; + :b :c5365; + :b :c5366; + :b :c5367; + :b :c5368; + :b :c5369; + :b :c5370; + :b :c5371; + :b :c5372; + :b :c5373; + :b :c5374; + :b :c5375; + :b :c5376; + :b :c5377; + :b :c5378; + :b :c5379; + :b :c5380; + :b :c5381; + :b :c5382; + :b :c5383; + :b :c5384; + :b :c5385; + :b :c5386; + :b :c5387; + :b :c5388; + :b :c5389; + :b :c5390; + :b :c5391; + :b :c5392; + :b :c5393; + :b :c5394; + :b :c5395; + :b :c5396; + :b :c5397; + :b :c5398; + :b :c5399; + :b :c5400; + :b :c5401; + :b :c5402; + :b :c5403; + :b :c5404; + :b :c5405; + :b :c5406; + :b :c5407; + :b :c5408; + :b :c5409; + :b :c5410; + :b :c5411; + :b :c5412; + :b :c5413; + :b :c5414; + :b :c5415; + :b :c5416; + :b :c5417; + :b :c5418; + :b :c5419; + :b :c5420; + :b :c5421; + :b :c5422; + :b :c5423; + :b :c5424; + :b :c5425; + :b :c5426; + :b :c5427; + :b :c5428; + :b :c5429; + :b :c5430; + :b :c5431; + :b :c5432; + :b :c5433; + :b :c5434; + :b :c5435; + :b :c5436; + :b :c5437; + :b :c5438; + :b :c5439; + :b :c5440; + :b :c5441; + :b :c5442; + :b :c5443; + :b :c5444; + :b :c5445; + :b :c5446; + :b :c5447; + :b :c5448; + :b :c5449; + :b :c5450; + :b :c5451; + :b :c5452; + :b :c5453; + :b :c5454; + :b :c5455; + :b :c5456; + :b :c5457; + :b :c5458; + :b :c5459; + :b :c5460; + :b :c5461; + :b :c5462; + :b :c5463; + :b :c5464; + :b :c5465; + :b :c5466; + :b :c5467; + :b :c5468; + :b :c5469; + :b :c5470; + :b :c5471; + :b :c5472; + :b :c5473; + :b :c5474; + :b :c5475; + :b :c5476; + :b :c5477; + :b :c5478; + :b :c5479; + :b :c5480; + :b :c5481; + :b :c5482; + :b :c5483; + :b :c5484; + :b :c5485; + :b :c5486; + :b :c5487; + :b :c5488; + :b :c5489; + :b :c5490; + :b :c5491; + :b :c5492; + :b :c5493; + :b :c5494; + :b :c5495; + :b :c5496; + :b :c5497; + :b :c5498; + :b :c5499; + :b :c5500; + :b :c5501; + :b :c5502; + :b :c5503; + :b :c5504; + :b :c5505; + :b :c5506; + :b :c5507; + :b :c5508; + :b :c5509; + :b :c5510; + :b :c5511; + :b :c5512; + :b :c5513; + :b :c5514; + :b :c5515; + :b :c5516; + :b :c5517; + :b :c5518; + :b :c5519; + :b :c5520; + :b :c5521; + :b :c5522; + :b :c5523; + :b :c5524; + :b :c5525; + :b :c5526; + :b :c5527; + :b :c5528; + :b :c5529; + :b :c5530; + :b :c5531; + :b :c5532; + :b :c5533; + :b :c5534; + :b :c5535; + :b :c5536; + :b :c5537; + :b :c5538; + :b :c5539; + :b :c5540; + :b :c5541; + :b :c5542; + :b :c5543; + :b :c5544; + :b :c5545; + :b :c5546; + :b :c5547; + :b :c5548; + :b :c5549; + :b :c5550; + :b :c5551; + :b :c5552; + :b :c5553; + :b :c5554; + :b :c5555; + :b :c5556; + :b :c5557; + :b :c5558; + :b :c5559; + :b :c5560; + :b :c5561; + :b :c5562; + :b :c5563; + :b :c5564; + :b :c5565; + :b :c5566; + :b :c5567; + :b :c5568; + :b :c5569; + :b :c5570; + :b :c5571; + :b :c5572; + :b :c5573; + :b :c5574; + :b :c5575; + :b :c5576; + :b :c5577; + :b :c5578; + :b :c5579; + :b :c5580; + :b :c5581; + :b :c5582; + :b :c5583; + :b :c5584; + :b :c5585; + :b :c5586; + :b :c5587; + :b :c5588; + :b :c5589; + :b :c5590; + :b :c5591; + :b :c5592; + :b :c5593; + :b :c5594; + :b :c5595; + :b :c5596; + :b :c5597; + :b :c5598; + :b :c5599; + :b :c5600; + :b :c5601; + :b :c5602; + :b :c5603; + :b :c5604; + :b :c5605; + :b :c5606; + :b :c5607; + :b :c5608; + :b :c5609; + :b :c5610; + :b :c5611; + :b :c5612; + :b :c5613; + :b :c5614; + :b :c5615; + :b :c5616; + :b :c5617; + :b :c5618; + :b :c5619; + :b :c5620; + :b :c5621; + :b :c5622; + :b :c5623; + :b :c5624; + :b :c5625; + :b :c5626; + :b :c5627; + :b :c5628; + :b :c5629; + :b :c5630; + :b :c5631; + :b :c5632; + :b :c5633; + :b :c5634; + :b :c5635; + :b :c5636; + :b :c5637; + :b :c5638; + :b :c5639; + :b :c5640; + :b :c5641; + :b :c5642; + :b :c5643; + :b :c5644; + :b :c5645; + :b :c5646; + :b :c5647; + :b :c5648; + :b :c5649; + :b :c5650; + :b :c5651; + :b :c5652; + :b :c5653; + :b :c5654; + :b :c5655; + :b :c5656; + :b :c5657; + :b :c5658; + :b :c5659; + :b :c5660; + :b :c5661; + :b :c5662; + :b :c5663; + :b :c5664; + :b :c5665; + :b :c5666; + :b :c5667; + :b :c5668; + :b :c5669; + :b :c5670; + :b :c5671; + :b :c5672; + :b :c5673; + :b :c5674; + :b :c5675; + :b :c5676; + :b :c5677; + :b :c5678; + :b :c5679; + :b :c5680; + :b :c5681; + :b :c5682; + :b :c5683; + :b :c5684; + :b :c5685; + :b :c5686; + :b :c5687; + :b :c5688; + :b :c5689; + :b :c5690; + :b :c5691; + :b :c5692; + :b :c5693; + :b :c5694; + :b :c5695; + :b :c5696; + :b :c5697; + :b :c5698; + :b :c5699; + :b :c5700; + :b :c5701; + :b :c5702; + :b :c5703; + :b :c5704; + :b :c5705; + :b :c5706; + :b :c5707; + :b :c5708; + :b :c5709; + :b :c5710; + :b :c5711; + :b :c5712; + :b :c5713; + :b :c5714; + :b :c5715; + :b :c5716; + :b :c5717; + :b :c5718; + :b :c5719; + :b :c5720; + :b :c5721; + :b :c5722; + :b :c5723; + :b :c5724; + :b :c5725; + :b :c5726; + :b :c5727; + :b :c5728; + :b :c5729; + :b :c5730; + :b :c5731; + :b :c5732; + :b :c5733; + :b :c5734; + :b :c5735; + :b :c5736; + :b :c5737; + :b :c5738; + :b :c5739; + :b :c5740; + :b :c5741; + :b :c5742; + :b :c5743; + :b :c5744; + :b :c5745; + :b :c5746; + :b :c5747; + :b :c5748; + :b :c5749; + :b :c5750; + :b :c5751; + :b :c5752; + :b :c5753; + :b :c5754; + :b :c5755; + :b :c5756; + :b :c5757; + :b :c5758; + :b :c5759; + :b :c5760; + :b :c5761; + :b :c5762; + :b :c5763; + :b :c5764; + :b :c5765; + :b :c5766; + :b :c5767; + :b :c5768; + :b :c5769; + :b :c5770; + :b :c5771; + :b :c5772; + :b :c5773; + :b :c5774; + :b :c5775; + :b :c5776; + :b :c5777; + :b :c5778; + :b :c5779; + :b :c5780; + :b :c5781; + :b :c5782; + :b :c5783; + :b :c5784; + :b :c5785; + :b :c5786; + :b :c5787; + :b :c5788; + :b :c5789; + :b :c5790; + :b :c5791; + :b :c5792; + :b :c5793; + :b :c5794; + :b :c5795; + :b :c5796; + :b :c5797; + :b :c5798; + :b :c5799; + :b :c5800; + :b :c5801; + :b :c5802; + :b :c5803; + :b :c5804; + :b :c5805; + :b :c5806; + :b :c5807; + :b :c5808; + :b :c5809; + :b :c5810; + :b :c5811; + :b :c5812; + :b :c5813; + :b :c5814; + :b :c5815; + :b :c5816; + :b :c5817; + :b :c5818; + :b :c5819; + :b :c5820; + :b :c5821; + :b :c5822; + :b :c5823; + :b :c5824; + :b :c5825; + :b :c5826; + :b :c5827; + :b :c5828; + :b :c5829; + :b :c5830; + :b :c5831; + :b :c5832; + :b :c5833; + :b :c5834; + :b :c5835; + :b :c5836; + :b :c5837; + :b :c5838; + :b :c5839; + :b :c5840; + :b :c5841; + :b :c5842; + :b :c5843; + :b :c5844; + :b :c5845; + :b :c5846; + :b :c5847; + :b :c5848; + :b :c5849; + :b :c5850; + :b :c5851; + :b :c5852; + :b :c5853; + :b :c5854; + :b :c5855; + :b :c5856; + :b :c5857; + :b :c5858; + :b :c5859; + :b :c5860; + :b :c5861; + :b :c5862; + :b :c5863; + :b :c5864; + :b :c5865; + :b :c5866; + :b :c5867; + :b :c5868; + :b :c5869; + :b :c5870; + :b :c5871; + :b :c5872; + :b :c5873; + :b :c5874; + :b :c5875; + :b :c5876; + :b :c5877; + :b :c5878; + :b :c5879; + :b :c5880; + :b :c5881; + :b :c5882; + :b :c5883; + :b :c5884; + :b :c5885; + :b :c5886; + :b :c5887; + :b :c5888; + :b :c5889; + :b :c5890; + :b :c5891; + :b :c5892; + :b :c5893; + :b :c5894; + :b :c5895; + :b :c5896; + :b :c5897; + :b :c5898; + :b :c5899; + :b :c5900; + :b :c5901; + :b :c5902; + :b :c5903; + :b :c5904; + :b :c5905; + :b :c5906; + :b :c5907; + :b :c5908; + :b :c5909; + :b :c5910; + :b :c5911; + :b :c5912; + :b :c5913; + :b :c5914; + :b :c5915; + :b :c5916; + :b :c5917; + :b :c5918; + :b :c5919; + :b :c5920; + :b :c5921; + :b :c5922; + :b :c5923; + :b :c5924; + :b :c5925; + :b :c5926; + :b :c5927; + :b :c5928; + :b :c5929; + :b :c5930; + :b :c5931; + :b :c5932; + :b :c5933; + :b :c5934; + :b :c5935; + :b :c5936; + :b :c5937; + :b :c5938; + :b :c5939; + :b :c5940; + :b :c5941; + :b :c5942; + :b :c5943; + :b :c5944; + :b :c5945; + :b :c5946; + :b :c5947; + :b :c5948; + :b :c5949; + :b :c5950; + :b :c5951; + :b :c5952; + :b :c5953; + :b :c5954; + :b :c5955; + :b :c5956; + :b :c5957; + :b :c5958; + :b :c5959; + :b :c5960; + :b :c5961; + :b :c5962; + :b :c5963; + :b :c5964; + :b :c5965; + :b :c5966; + :b :c5967; + :b :c5968; + :b :c5969; + :b :c5970; + :b :c5971; + :b :c5972; + :b :c5973; + :b :c5974; + :b :c5975; + :b :c5976; + :b :c5977; + :b :c5978; + :b :c5979; + :b :c5980; + :b :c5981; + :b :c5982; + :b :c5983; + :b :c5984; + :b :c5985; + :b :c5986; + :b :c5987; + :b :c5988; + :b :c5989; + :b :c5990; + :b :c5991; + :b :c5992; + :b :c5993; + :b :c5994; + :b :c5995; + :b :c5996; + :b :c5997; + :b :c5998; + :b :c5999; + :b :c6000; + :b :c6001; + :b :c6002; + :b :c6003; + :b :c6004; + :b :c6005; + :b :c6006; + :b :c6007; + :b :c6008; + :b :c6009; + :b :c6010; + :b :c6011; + :b :c6012; + :b :c6013; + :b :c6014; + :b :c6015; + :b :c6016; + :b :c6017; + :b :c6018; + :b :c6019; + :b :c6020; + :b :c6021; + :b :c6022; + :b :c6023; + :b :c6024; + :b :c6025; + :b :c6026; + :b :c6027; + :b :c6028; + :b :c6029; + :b :c6030; + :b :c6031; + :b :c6032; + :b :c6033; + :b :c6034; + :b :c6035; + :b :c6036; + :b :c6037; + :b :c6038; + :b :c6039; + :b :c6040; + :b :c6041; + :b :c6042; + :b :c6043; + :b :c6044; + :b :c6045; + :b :c6046; + :b :c6047; + :b :c6048; + :b :c6049; + :b :c6050; + :b :c6051; + :b :c6052; + :b :c6053; + :b :c6054; + :b :c6055; + :b :c6056; + :b :c6057; + :b :c6058; + :b :c6059; + :b :c6060; + :b :c6061; + :b :c6062; + :b :c6063; + :b :c6064; + :b :c6065; + :b :c6066; + :b :c6067; + :b :c6068; + :b :c6069; + :b :c6070; + :b :c6071; + :b :c6072; + :b :c6073; + :b :c6074; + :b :c6075; + :b :c6076; + :b :c6077; + :b :c6078; + :b :c6079; + :b :c6080; + :b :c6081; + :b :c6082; + :b :c6083; + :b :c6084; + :b :c6085; + :b :c6086; + :b :c6087; + :b :c6088; + :b :c6089; + :b :c6090; + :b :c6091; + :b :c6092; + :b :c6093; + :b :c6094; + :b :c6095; + :b :c6096; + :b :c6097; + :b :c6098; + :b :c6099; + :b :c6100; + :b :c6101; + :b :c6102; + :b :c6103; + :b :c6104; + :b :c6105; + :b :c6106; + :b :c6107; + :b :c6108; + :b :c6109; + :b :c6110; + :b :c6111; + :b :c6112; + :b :c6113; + :b :c6114; + :b :c6115; + :b :c6116; + :b :c6117; + :b :c6118; + :b :c6119; + :b :c6120; + :b :c6121; + :b :c6122; + :b :c6123; + :b :c6124; + :b :c6125; + :b :c6126; + :b :c6127; + :b :c6128; + :b :c6129; + :b :c6130; + :b :c6131; + :b :c6132; + :b :c6133; + :b :c6134; + :b :c6135; + :b :c6136; + :b :c6137; + :b :c6138; + :b :c6139; + :b :c6140; + :b :c6141; + :b :c6142; + :b :c6143; + :b :c6144; + :b :c6145; + :b :c6146; + :b :c6147; + :b :c6148; + :b :c6149; + :b :c6150; + :b :c6151; + :b :c6152; + :b :c6153; + :b :c6154; + :b :c6155; + :b :c6156; + :b :c6157; + :b :c6158; + :b :c6159; + :b :c6160; + :b :c6161; + :b :c6162; + :b :c6163; + :b :c6164; + :b :c6165; + :b :c6166; + :b :c6167; + :b :c6168; + :b :c6169; + :b :c6170; + :b :c6171; + :b :c6172; + :b :c6173; + :b :c6174; + :b :c6175; + :b :c6176; + :b :c6177; + :b :c6178; + :b :c6179; + :b :c6180; + :b :c6181; + :b :c6182; + :b :c6183; + :b :c6184; + :b :c6185; + :b :c6186; + :b :c6187; + :b :c6188; + :b :c6189; + :b :c6190; + :b :c6191; + :b :c6192; + :b :c6193; + :b :c6194; + :b :c6195; + :b :c6196; + :b :c6197; + :b :c6198; + :b :c6199; + :b :c6200; + :b :c6201; + :b :c6202; + :b :c6203; + :b :c6204; + :b :c6205; + :b :c6206; + :b :c6207; + :b :c6208; + :b :c6209; + :b :c6210; + :b :c6211; + :b :c6212; + :b :c6213; + :b :c6214; + :b :c6215; + :b :c6216; + :b :c6217; + :b :c6218; + :b :c6219; + :b :c6220; + :b :c6221; + :b :c6222; + :b :c6223; + :b :c6224; + :b :c6225; + :b :c6226; + :b :c6227; + :b :c6228; + :b :c6229; + :b :c6230; + :b :c6231; + :b :c6232; + :b :c6233; + :b :c6234; + :b :c6235; + :b :c6236; + :b :c6237; + :b :c6238; + :b :c6239; + :b :c6240; + :b :c6241; + :b :c6242; + :b :c6243; + :b :c6244; + :b :c6245; + :b :c6246; + :b :c6247; + :b :c6248; + :b :c6249; + :b :c6250; + :b :c6251; + :b :c6252; + :b :c6253; + :b :c6254; + :b :c6255; + :b :c6256; + :b :c6257; + :b :c6258; + :b :c6259; + :b :c6260; + :b :c6261; + :b :c6262; + :b :c6263; + :b :c6264; + :b :c6265; + :b :c6266; + :b :c6267; + :b :c6268; + :b :c6269; + :b :c6270; + :b :c6271; + :b :c6272; + :b :c6273; + :b :c6274; + :b :c6275; + :b :c6276; + :b :c6277; + :b :c6278; + :b :c6279; + :b :c6280; + :b :c6281; + :b :c6282; + :b :c6283; + :b :c6284; + :b :c6285; + :b :c6286; + :b :c6287; + :b :c6288; + :b :c6289; + :b :c6290; + :b :c6291; + :b :c6292; + :b :c6293; + :b :c6294; + :b :c6295; + :b :c6296; + :b :c6297; + :b :c6298; + :b :c6299; + :b :c6300; + :b :c6301; + :b :c6302; + :b :c6303; + :b :c6304; + :b :c6305; + :b :c6306; + :b :c6307; + :b :c6308; + :b :c6309; + :b :c6310; + :b :c6311; + :b :c6312; + :b :c6313; + :b :c6314; + :b :c6315; + :b :c6316; + :b :c6317; + :b :c6318; + :b :c6319; + :b :c6320; + :b :c6321; + :b :c6322; + :b :c6323; + :b :c6324; + :b :c6325; + :b :c6326; + :b :c6327; + :b :c6328; + :b :c6329; + :b :c6330; + :b :c6331; + :b :c6332; + :b :c6333; + :b :c6334; + :b :c6335; + :b :c6336; + :b :c6337; + :b :c6338; + :b :c6339; + :b :c6340; + :b :c6341; + :b :c6342; + :b :c6343; + :b :c6344; + :b :c6345; + :b :c6346; + :b :c6347; + :b :c6348; + :b :c6349; + :b :c6350; + :b :c6351; + :b :c6352; + :b :c6353; + :b :c6354; + :b :c6355; + :b :c6356; + :b :c6357; + :b :c6358; + :b :c6359; + :b :c6360; + :b :c6361; + :b :c6362; + :b :c6363; + :b :c6364; + :b :c6365; + :b :c6366; + :b :c6367; + :b :c6368; + :b :c6369; + :b :c6370; + :b :c6371; + :b :c6372; + :b :c6373; + :b :c6374; + :b :c6375; + :b :c6376; + :b :c6377; + :b :c6378; + :b :c6379; + :b :c6380; + :b :c6381; + :b :c6382; + :b :c6383; + :b :c6384; + :b :c6385; + :b :c6386; + :b :c6387; + :b :c6388; + :b :c6389; + :b :c6390; + :b :c6391; + :b :c6392; + :b :c6393; + :b :c6394; + :b :c6395; + :b :c6396; + :b :c6397; + :b :c6398; + :b :c6399; + :b :c6400; + :b :c6401; + :b :c6402; + :b :c6403; + :b :c6404; + :b :c6405; + :b :c6406; + :b :c6407; + :b :c6408; + :b :c6409; + :b :c6410; + :b :c6411; + :b :c6412; + :b :c6413; + :b :c6414; + :b :c6415; + :b :c6416; + :b :c6417; + :b :c6418; + :b :c6419; + :b :c6420; + :b :c6421; + :b :c6422; + :b :c6423; + :b :c6424; + :b :c6425; + :b :c6426; + :b :c6427; + :b :c6428; + :b :c6429; + :b :c6430; + :b :c6431; + :b :c6432; + :b :c6433; + :b :c6434; + :b :c6435; + :b :c6436; + :b :c6437; + :b :c6438; + :b :c6439; + :b :c6440; + :b :c6441; + :b :c6442; + :b :c6443; + :b :c6444; + :b :c6445; + :b :c6446; + :b :c6447; + :b :c6448; + :b :c6449; + :b :c6450; + :b :c6451; + :b :c6452; + :b :c6453; + :b :c6454; + :b :c6455; + :b :c6456; + :b :c6457; + :b :c6458; + :b :c6459; + :b :c6460; + :b :c6461; + :b :c6462; + :b :c6463; + :b :c6464; + :b :c6465; + :b :c6466; + :b :c6467; + :b :c6468; + :b :c6469; + :b :c6470; + :b :c6471; + :b :c6472; + :b :c6473; + :b :c6474; + :b :c6475; + :b :c6476; + :b :c6477; + :b :c6478; + :b :c6479; + :b :c6480; + :b :c6481; + :b :c6482; + :b :c6483; + :b :c6484; + :b :c6485; + :b :c6486; + :b :c6487; + :b :c6488; + :b :c6489; + :b :c6490; + :b :c6491; + :b :c6492; + :b :c6493; + :b :c6494; + :b :c6495; + :b :c6496; + :b :c6497; + :b :c6498; + :b :c6499; + :b :c6500; + :b :c6501; + :b :c6502; + :b :c6503; + :b :c6504; + :b :c6505; + :b :c6506; + :b :c6507; + :b :c6508; + :b :c6509; + :b :c6510; + :b :c6511; + :b :c6512; + :b :c6513; + :b :c6514; + :b :c6515; + :b :c6516; + :b :c6517; + :b :c6518; + :b :c6519; + :b :c6520; + :b :c6521; + :b :c6522; + :b :c6523; + :b :c6524; + :b :c6525; + :b :c6526; + :b :c6527; + :b :c6528; + :b :c6529; + :b :c6530; + :b :c6531; + :b :c6532; + :b :c6533; + :b :c6534; + :b :c6535; + :b :c6536; + :b :c6537; + :b :c6538; + :b :c6539; + :b :c6540; + :b :c6541; + :b :c6542; + :b :c6543; + :b :c6544; + :b :c6545; + :b :c6546; + :b :c6547; + :b :c6548; + :b :c6549; + :b :c6550; + :b :c6551; + :b :c6552; + :b :c6553; + :b :c6554; + :b :c6555; + :b :c6556; + :b :c6557; + :b :c6558; + :b :c6559; + :b :c6560; + :b :c6561; + :b :c6562; + :b :c6563; + :b :c6564; + :b :c6565; + :b :c6566; + :b :c6567; + :b :c6568; + :b :c6569; + :b :c6570; + :b :c6571; + :b :c6572; + :b :c6573; + :b :c6574; + :b :c6575; + :b :c6576; + :b :c6577; + :b :c6578; + :b :c6579; + :b :c6580; + :b :c6581; + :b :c6582; + :b :c6583; + :b :c6584; + :b :c6585; + :b :c6586; + :b :c6587; + :b :c6588; + :b :c6589; + :b :c6590; + :b :c6591; + :b :c6592; + :b :c6593; + :b :c6594; + :b :c6595; + :b :c6596; + :b :c6597; + :b :c6598; + :b :c6599; + :b :c6600; + :b :c6601; + :b :c6602; + :b :c6603; + :b :c6604; + :b :c6605; + :b :c6606; + :b :c6607; + :b :c6608; + :b :c6609; + :b :c6610; + :b :c6611; + :b :c6612; + :b :c6613; + :b :c6614; + :b :c6615; + :b :c6616; + :b :c6617; + :b :c6618; + :b :c6619; + :b :c6620; + :b :c6621; + :b :c6622; + :b :c6623; + :b :c6624; + :b :c6625; + :b :c6626; + :b :c6627; + :b :c6628; + :b :c6629; + :b :c6630; + :b :c6631; + :b :c6632; + :b :c6633; + :b :c6634; + :b :c6635; + :b :c6636; + :b :c6637; + :b :c6638; + :b :c6639; + :b :c6640; + :b :c6641; + :b :c6642; + :b :c6643; + :b :c6644; + :b :c6645; + :b :c6646; + :b :c6647; + :b :c6648; + :b :c6649; + :b :c6650; + :b :c6651; + :b :c6652; + :b :c6653; + :b :c6654; + :b :c6655; + :b :c6656; + :b :c6657; + :b :c6658; + :b :c6659; + :b :c6660; + :b :c6661; + :b :c6662; + :b :c6663; + :b :c6664; + :b :c6665; + :b :c6666; + :b :c6667; + :b :c6668; + :b :c6669; + :b :c6670; + :b :c6671; + :b :c6672; + :b :c6673; + :b :c6674; + :b :c6675; + :b :c6676; + :b :c6677; + :b :c6678; + :b :c6679; + :b :c6680; + :b :c6681; + :b :c6682; + :b :c6683; + :b :c6684; + :b :c6685; + :b :c6686; + :b :c6687; + :b :c6688; + :b :c6689; + :b :c6690; + :b :c6691; + :b :c6692; + :b :c6693; + :b :c6694; + :b :c6695; + :b :c6696; + :b :c6697; + :b :c6698; + :b :c6699; + :b :c6700; + :b :c6701; + :b :c6702; + :b :c6703; + :b :c6704; + :b :c6705; + :b :c6706; + :b :c6707; + :b :c6708; + :b :c6709; + :b :c6710; + :b :c6711; + :b :c6712; + :b :c6713; + :b :c6714; + :b :c6715; + :b :c6716; + :b :c6717; + :b :c6718; + :b :c6719; + :b :c6720; + :b :c6721; + :b :c6722; + :b :c6723; + :b :c6724; + :b :c6725; + :b :c6726; + :b :c6727; + :b :c6728; + :b :c6729; + :b :c6730; + :b :c6731; + :b :c6732; + :b :c6733; + :b :c6734; + :b :c6735; + :b :c6736; + :b :c6737; + :b :c6738; + :b :c6739; + :b :c6740; + :b :c6741; + :b :c6742; + :b :c6743; + :b :c6744; + :b :c6745; + :b :c6746; + :b :c6747; + :b :c6748; + :b :c6749; + :b :c6750; + :b :c6751; + :b :c6752; + :b :c6753; + :b :c6754; + :b :c6755; + :b :c6756; + :b :c6757; + :b :c6758; + :b :c6759; + :b :c6760; + :b :c6761; + :b :c6762; + :b :c6763; + :b :c6764; + :b :c6765; + :b :c6766; + :b :c6767; + :b :c6768; + :b :c6769; + :b :c6770; + :b :c6771; + :b :c6772; + :b :c6773; + :b :c6774; + :b :c6775; + :b :c6776; + :b :c6777; + :b :c6778; + :b :c6779; + :b :c6780; + :b :c6781; + :b :c6782; + :b :c6783; + :b :c6784; + :b :c6785; + :b :c6786; + :b :c6787; + :b :c6788; + :b :c6789; + :b :c6790; + :b :c6791; + :b :c6792; + :b :c6793; + :b :c6794; + :b :c6795; + :b :c6796; + :b :c6797; + :b :c6798; + :b :c6799; + :b :c6800; + :b :c6801; + :b :c6802; + :b :c6803; + :b :c6804; + :b :c6805; + :b :c6806; + :b :c6807; + :b :c6808; + :b :c6809; + :b :c6810; + :b :c6811; + :b :c6812; + :b :c6813; + :b :c6814; + :b :c6815; + :b :c6816; + :b :c6817; + :b :c6818; + :b :c6819; + :b :c6820; + :b :c6821; + :b :c6822; + :b :c6823; + :b :c6824; + :b :c6825; + :b :c6826; + :b :c6827; + :b :c6828; + :b :c6829; + :b :c6830; + :b :c6831; + :b :c6832; + :b :c6833; + :b :c6834; + :b :c6835; + :b :c6836; + :b :c6837; + :b :c6838; + :b :c6839; + :b :c6840; + :b :c6841; + :b :c6842; + :b :c6843; + :b :c6844; + :b :c6845; + :b :c6846; + :b :c6847; + :b :c6848; + :b :c6849; + :b :c6850; + :b :c6851; + :b :c6852; + :b :c6853; + :b :c6854; + :b :c6855; + :b :c6856; + :b :c6857; + :b :c6858; + :b :c6859; + :b :c6860; + :b :c6861; + :b :c6862; + :b :c6863; + :b :c6864; + :b :c6865; + :b :c6866; + :b :c6867; + :b :c6868; + :b :c6869; + :b :c6870; + :b :c6871; + :b :c6872; + :b :c6873; + :b :c6874; + :b :c6875; + :b :c6876; + :b :c6877; + :b :c6878; + :b :c6879; + :b :c6880; + :b :c6881; + :b :c6882; + :b :c6883; + :b :c6884; + :b :c6885; + :b :c6886; + :b :c6887; + :b :c6888; + :b :c6889; + :b :c6890; + :b :c6891; + :b :c6892; + :b :c6893; + :b :c6894; + :b :c6895; + :b :c6896; + :b :c6897; + :b :c6898; + :b :c6899; + :b :c6900; + :b :c6901; + :b :c6902; + :b :c6903; + :b :c6904; + :b :c6905; + :b :c6906; + :b :c6907; + :b :c6908; + :b :c6909; + :b :c6910; + :b :c6911; + :b :c6912; + :b :c6913; + :b :c6914; + :b :c6915; + :b :c6916; + :b :c6917; + :b :c6918; + :b :c6919; + :b :c6920; + :b :c6921; + :b :c6922; + :b :c6923; + :b :c6924; + :b :c6925; + :b :c6926; + :b :c6927; + :b :c6928; + :b :c6929; + :b :c6930; + :b :c6931; + :b :c6932; + :b :c6933; + :b :c6934; + :b :c6935; + :b :c6936; + :b :c6937; + :b :c6938; + :b :c6939; + :b :c6940; + :b :c6941; + :b :c6942; + :b :c6943; + :b :c6944; + :b :c6945; + :b :c6946; + :b :c6947; + :b :c6948; + :b :c6949; + :b :c6950; + :b :c6951; + :b :c6952; + :b :c6953; + :b :c6954; + :b :c6955; + :b :c6956; + :b :c6957; + :b :c6958; + :b :c6959; + :b :c6960; + :b :c6961; + :b :c6962; + :b :c6963; + :b :c6964; + :b :c6965; + :b :c6966; + :b :c6967; + :b :c6968; + :b :c6969; + :b :c6970; + :b :c6971; + :b :c6972; + :b :c6973; + :b :c6974; + :b :c6975; + :b :c6976; + :b :c6977; + :b :c6978; + :b :c6979; + :b :c6980; + :b :c6981; + :b :c6982; + :b :c6983; + :b :c6984; + :b :c6985; + :b :c6986; + :b :c6987; + :b :c6988; + :b :c6989; + :b :c6990; + :b :c6991; + :b :c6992; + :b :c6993; + :b :c6994; + :b :c6995; + :b :c6996; + :b :c6997; + :b :c6998; + :b :c6999; + :b :c7000; + :b :c7001; + :b :c7002; + :b :c7003; + :b :c7004; + :b :c7005; + :b :c7006; + :b :c7007; + :b :c7008; + :b :c7009; + :b :c7010; + :b :c7011; + :b :c7012; + :b :c7013; + :b :c7014; + :b :c7015; + :b :c7016; + :b :c7017; + :b :c7018; + :b :c7019; + :b :c7020; + :b :c7021; + :b :c7022; + :b :c7023; + :b :c7024; + :b :c7025; + :b :c7026; + :b :c7027; + :b :c7028; + :b :c7029; + :b :c7030; + :b :c7031; + :b :c7032; + :b :c7033; + :b :c7034; + :b :c7035; + :b :c7036; + :b :c7037; + :b :c7038; + :b :c7039; + :b :c7040; + :b :c7041; + :b :c7042; + :b :c7043; + :b :c7044; + :b :c7045; + :b :c7046; + :b :c7047; + :b :c7048; + :b :c7049; + :b :c7050; + :b :c7051; + :b :c7052; + :b :c7053; + :b :c7054; + :b :c7055; + :b :c7056; + :b :c7057; + :b :c7058; + :b :c7059; + :b :c7060; + :b :c7061; + :b :c7062; + :b :c7063; + :b :c7064; + :b :c7065; + :b :c7066; + :b :c7067; + :b :c7068; + :b :c7069; + :b :c7070; + :b :c7071; + :b :c7072; + :b :c7073; + :b :c7074; + :b :c7075; + :b :c7076; + :b :c7077; + :b :c7078; + :b :c7079; + :b :c7080; + :b :c7081; + :b :c7082; + :b :c7083; + :b :c7084; + :b :c7085; + :b :c7086; + :b :c7087; + :b :c7088; + :b :c7089; + :b :c7090; + :b :c7091; + :b :c7092; + :b :c7093; + :b :c7094; + :b :c7095; + :b :c7096; + :b :c7097; + :b :c7098; + :b :c7099; + :b :c7100; + :b :c7101; + :b :c7102; + :b :c7103; + :b :c7104; + :b :c7105; + :b :c7106; + :b :c7107; + :b :c7108; + :b :c7109; + :b :c7110; + :b :c7111; + :b :c7112; + :b :c7113; + :b :c7114; + :b :c7115; + :b :c7116; + :b :c7117; + :b :c7118; + :b :c7119; + :b :c7120; + :b :c7121; + :b :c7122; + :b :c7123; + :b :c7124; + :b :c7125; + :b :c7126; + :b :c7127; + :b :c7128; + :b :c7129; + :b :c7130; + :b :c7131; + :b :c7132; + :b :c7133; + :b :c7134; + :b :c7135; + :b :c7136; + :b :c7137; + :b :c7138; + :b :c7139; + :b :c7140; + :b :c7141; + :b :c7142; + :b :c7143; + :b :c7144; + :b :c7145; + :b :c7146; + :b :c7147; + :b :c7148; + :b :c7149; + :b :c7150; + :b :c7151; + :b :c7152; + :b :c7153; + :b :c7154; + :b :c7155; + :b :c7156; + :b :c7157; + :b :c7158; + :b :c7159; + :b :c7160; + :b :c7161; + :b :c7162; + :b :c7163; + :b :c7164; + :b :c7165; + :b :c7166; + :b :c7167; + :b :c7168; + :b :c7169; + :b :c7170; + :b :c7171; + :b :c7172; + :b :c7173; + :b :c7174; + :b :c7175; + :b :c7176; + :b :c7177; + :b :c7178; + :b :c7179; + :b :c7180; + :b :c7181; + :b :c7182; + :b :c7183; + :b :c7184; + :b :c7185; + :b :c7186; + :b :c7187; + :b :c7188; + :b :c7189; + :b :c7190; + :b :c7191; + :b :c7192; + :b :c7193; + :b :c7194; + :b :c7195; + :b :c7196; + :b :c7197; + :b :c7198; + :b :c7199; + :b :c7200; + :b :c7201; + :b :c7202; + :b :c7203; + :b :c7204; + :b :c7205; + :b :c7206; + :b :c7207; + :b :c7208; + :b :c7209; + :b :c7210; + :b :c7211; + :b :c7212; + :b :c7213; + :b :c7214; + :b :c7215; + :b :c7216; + :b :c7217; + :b :c7218; + :b :c7219; + :b :c7220; + :b :c7221; + :b :c7222; + :b :c7223; + :b :c7224; + :b :c7225; + :b :c7226; + :b :c7227; + :b :c7228; + :b :c7229; + :b :c7230; + :b :c7231; + :b :c7232; + :b :c7233; + :b :c7234; + :b :c7235; + :b :c7236; + :b :c7237; + :b :c7238; + :b :c7239; + :b :c7240; + :b :c7241; + :b :c7242; + :b :c7243; + :b :c7244; + :b :c7245; + :b :c7246; + :b :c7247; + :b :c7248; + :b :c7249; + :b :c7250; + :b :c7251; + :b :c7252; + :b :c7253; + :b :c7254; + :b :c7255; + :b :c7256; + :b :c7257; + :b :c7258; + :b :c7259; + :b :c7260; + :b :c7261; + :b :c7262; + :b :c7263; + :b :c7264; + :b :c7265; + :b :c7266; + :b :c7267; + :b :c7268; + :b :c7269; + :b :c7270; + :b :c7271; + :b :c7272; + :b :c7273; + :b :c7274; + :b :c7275; + :b :c7276; + :b :c7277; + :b :c7278; + :b :c7279; + :b :c7280; + :b :c7281; + :b :c7282; + :b :c7283; + :b :c7284; + :b :c7285; + :b :c7286; + :b :c7287; + :b :c7288; + :b :c7289; + :b :c7290; + :b :c7291; + :b :c7292; + :b :c7293; + :b :c7294; + :b :c7295; + :b :c7296; + :b :c7297; + :b :c7298; + :b :c7299; + :b :c7300; + :b :c7301; + :b :c7302; + :b :c7303; + :b :c7304; + :b :c7305; + :b :c7306; + :b :c7307; + :b :c7308; + :b :c7309; + :b :c7310; + :b :c7311; + :b :c7312; + :b :c7313; + :b :c7314; + :b :c7315; + :b :c7316; + :b :c7317; + :b :c7318; + :b :c7319; + :b :c7320; + :b :c7321; + :b :c7322; + :b :c7323; + :b :c7324; + :b :c7325; + :b :c7326; + :b :c7327; + :b :c7328; + :b :c7329; + :b :c7330; + :b :c7331; + :b :c7332; + :b :c7333; + :b :c7334; + :b :c7335; + :b :c7336; + :b :c7337; + :b :c7338; + :b :c7339; + :b :c7340; + :b :c7341; + :b :c7342; + :b :c7343; + :b :c7344; + :b :c7345; + :b :c7346; + :b :c7347; + :b :c7348; + :b :c7349; + :b :c7350; + :b :c7351; + :b :c7352; + :b :c7353; + :b :c7354; + :b :c7355; + :b :c7356; + :b :c7357; + :b :c7358; + :b :c7359; + :b :c7360; + :b :c7361; + :b :c7362; + :b :c7363; + :b :c7364; + :b :c7365; + :b :c7366; + :b :c7367; + :b :c7368; + :b :c7369; + :b :c7370; + :b :c7371; + :b :c7372; + :b :c7373; + :b :c7374; + :b :c7375; + :b :c7376; + :b :c7377; + :b :c7378; + :b :c7379; + :b :c7380; + :b :c7381; + :b :c7382; + :b :c7383; + :b :c7384; + :b :c7385; + :b :c7386; + :b :c7387; + :b :c7388; + :b :c7389; + :b :c7390; + :b :c7391; + :b :c7392; + :b :c7393; + :b :c7394; + :b :c7395; + :b :c7396; + :b :c7397; + :b :c7398; + :b :c7399; + :b :c7400; + :b :c7401; + :b :c7402; + :b :c7403; + :b :c7404; + :b :c7405; + :b :c7406; + :b :c7407; + :b :c7408; + :b :c7409; + :b :c7410; + :b :c7411; + :b :c7412; + :b :c7413; + :b :c7414; + :b :c7415; + :b :c7416; + :b :c7417; + :b :c7418; + :b :c7419; + :b :c7420; + :b :c7421; + :b :c7422; + :b :c7423; + :b :c7424; + :b :c7425; + :b :c7426; + :b :c7427; + :b :c7428; + :b :c7429; + :b :c7430; + :b :c7431; + :b :c7432; + :b :c7433; + :b :c7434; + :b :c7435; + :b :c7436; + :b :c7437; + :b :c7438; + :b :c7439; + :b :c7440; + :b :c7441; + :b :c7442; + :b :c7443; + :b :c7444; + :b :c7445; + :b :c7446; + :b :c7447; + :b :c7448; + :b :c7449; + :b :c7450; + :b :c7451; + :b :c7452; + :b :c7453; + :b :c7454; + :b :c7455; + :b :c7456; + :b :c7457; + :b :c7458; + :b :c7459; + :b :c7460; + :b :c7461; + :b :c7462; + :b :c7463; + :b :c7464; + :b :c7465; + :b :c7466; + :b :c7467; + :b :c7468; + :b :c7469; + :b :c7470; + :b :c7471; + :b :c7472; + :b :c7473; + :b :c7474; + :b :c7475; + :b :c7476; + :b :c7477; + :b :c7478; + :b :c7479; + :b :c7480; + :b :c7481; + :b :c7482; + :b :c7483; + :b :c7484; + :b :c7485; + :b :c7486; + :b :c7487; + :b :c7488; + :b :c7489; + :b :c7490; + :b :c7491; + :b :c7492; + :b :c7493; + :b :c7494; + :b :c7495; + :b :c7496; + :b :c7497; + :b :c7498; + :b :c7499; + :b :c7500; + :b :c7501; + :b :c7502; + :b :c7503; + :b :c7504; + :b :c7505; + :b :c7506; + :b :c7507; + :b :c7508; + :b :c7509; + :b :c7510; + :b :c7511; + :b :c7512; + :b :c7513; + :b :c7514; + :b :c7515; + :b :c7516; + :b :c7517; + :b :c7518; + :b :c7519; + :b :c7520; + :b :c7521; + :b :c7522; + :b :c7523; + :b :c7524; + :b :c7525; + :b :c7526; + :b :c7527; + :b :c7528; + :b :c7529; + :b :c7530; + :b :c7531; + :b :c7532; + :b :c7533; + :b :c7534; + :b :c7535; + :b :c7536; + :b :c7537; + :b :c7538; + :b :c7539; + :b :c7540; + :b :c7541; + :b :c7542; + :b :c7543; + :b :c7544; + :b :c7545; + :b :c7546; + :b :c7547; + :b :c7548; + :b :c7549; + :b :c7550; + :b :c7551; + :b :c7552; + :b :c7553; + :b :c7554; + :b :c7555; + :b :c7556; + :b :c7557; + :b :c7558; + :b :c7559; + :b :c7560; + :b :c7561; + :b :c7562; + :b :c7563; + :b :c7564; + :b :c7565; + :b :c7566; + :b :c7567; + :b :c7568; + :b :c7569; + :b :c7570; + :b :c7571; + :b :c7572; + :b :c7573; + :b :c7574; + :b :c7575; + :b :c7576; + :b :c7577; + :b :c7578; + :b :c7579; + :b :c7580; + :b :c7581; + :b :c7582; + :b :c7583; + :b :c7584; + :b :c7585; + :b :c7586; + :b :c7587; + :b :c7588; + :b :c7589; + :b :c7590; + :b :c7591; + :b :c7592; + :b :c7593; + :b :c7594; + :b :c7595; + :b :c7596; + :b :c7597; + :b :c7598; + :b :c7599; + :b :c7600; + :b :c7601; + :b :c7602; + :b :c7603; + :b :c7604; + :b :c7605; + :b :c7606; + :b :c7607; + :b :c7608; + :b :c7609; + :b :c7610; + :b :c7611; + :b :c7612; + :b :c7613; + :b :c7614; + :b :c7615; + :b :c7616; + :b :c7617; + :b :c7618; + :b :c7619; + :b :c7620; + :b :c7621; + :b :c7622; + :b :c7623; + :b :c7624; + :b :c7625; + :b :c7626; + :b :c7627; + :b :c7628; + :b :c7629; + :b :c7630; + :b :c7631; + :b :c7632; + :b :c7633; + :b :c7634; + :b :c7635; + :b :c7636; + :b :c7637; + :b :c7638; + :b :c7639; + :b :c7640; + :b :c7641; + :b :c7642; + :b :c7643; + :b :c7644; + :b :c7645; + :b :c7646; + :b :c7647; + :b :c7648; + :b :c7649; + :b :c7650; + :b :c7651; + :b :c7652; + :b :c7653; + :b :c7654; + :b :c7655; + :b :c7656; + :b :c7657; + :b :c7658; + :b :c7659; + :b :c7660; + :b :c7661; + :b :c7662; + :b :c7663; + :b :c7664; + :b :c7665; + :b :c7666; + :b :c7667; + :b :c7668; + :b :c7669; + :b :c7670; + :b :c7671; + :b :c7672; + :b :c7673; + :b :c7674; + :b :c7675; + :b :c7676; + :b :c7677; + :b :c7678; + :b :c7679; + :b :c7680; + :b :c7681; + :b :c7682; + :b :c7683; + :b :c7684; + :b :c7685; + :b :c7686; + :b :c7687; + :b :c7688; + :b :c7689; + :b :c7690; + :b :c7691; + :b :c7692; + :b :c7693; + :b :c7694; + :b :c7695; + :b :c7696; + :b :c7697; + :b :c7698; + :b :c7699; + :b :c7700; + :b :c7701; + :b :c7702; + :b :c7703; + :b :c7704; + :b :c7705; + :b :c7706; + :b :c7707; + :b :c7708; + :b :c7709; + :b :c7710; + :b :c7711; + :b :c7712; + :b :c7713; + :b :c7714; + :b :c7715; + :b :c7716; + :b :c7717; + :b :c7718; + :b :c7719; + :b :c7720; + :b :c7721; + :b :c7722; + :b :c7723; + :b :c7724; + :b :c7725; + :b :c7726; + :b :c7727; + :b :c7728; + :b :c7729; + :b :c7730; + :b :c7731; + :b :c7732; + :b :c7733; + :b :c7734; + :b :c7735; + :b :c7736; + :b :c7737; + :b :c7738; + :b :c7739; + :b :c7740; + :b :c7741; + :b :c7742; + :b :c7743; + :b :c7744; + :b :c7745; + :b :c7746; + :b :c7747; + :b :c7748; + :b :c7749; + :b :c7750; + :b :c7751; + :b :c7752; + :b :c7753; + :b :c7754; + :b :c7755; + :b :c7756; + :b :c7757; + :b :c7758; + :b :c7759; + :b :c7760; + :b :c7761; + :b :c7762; + :b :c7763; + :b :c7764; + :b :c7765; + :b :c7766; + :b :c7767; + :b :c7768; + :b :c7769; + :b :c7770; + :b :c7771; + :b :c7772; + :b :c7773; + :b :c7774; + :b :c7775; + :b :c7776; + :b :c7777; + :b :c7778; + :b :c7779; + :b :c7780; + :b :c7781; + :b :c7782; + :b :c7783; + :b :c7784; + :b :c7785; + :b :c7786; + :b :c7787; + :b :c7788; + :b :c7789; + :b :c7790; + :b :c7791; + :b :c7792; + :b :c7793; + :b :c7794; + :b :c7795; + :b :c7796; + :b :c7797; + :b :c7798; + :b :c7799; + :b :c7800; + :b :c7801; + :b :c7802; + :b :c7803; + :b :c7804; + :b :c7805; + :b :c7806; + :b :c7807; + :b :c7808; + :b :c7809; + :b :c7810; + :b :c7811; + :b :c7812; + :b :c7813; + :b :c7814; + :b :c7815; + :b :c7816; + :b :c7817; + :b :c7818; + :b :c7819; + :b :c7820; + :b :c7821; + :b :c7822; + :b :c7823; + :b :c7824; + :b :c7825; + :b :c7826; + :b :c7827; + :b :c7828; + :b :c7829; + :b :c7830; + :b :c7831; + :b :c7832; + :b :c7833; + :b :c7834; + :b :c7835; + :b :c7836; + :b :c7837; + :b :c7838; + :b :c7839; + :b :c7840; + :b :c7841; + :b :c7842; + :b :c7843; + :b :c7844; + :b :c7845; + :b :c7846; + :b :c7847; + :b :c7848; + :b :c7849; + :b :c7850; + :b :c7851; + :b :c7852; + :b :c7853; + :b :c7854; + :b :c7855; + :b :c7856; + :b :c7857; + :b :c7858; + :b :c7859; + :b :c7860; + :b :c7861; + :b :c7862; + :b :c7863; + :b :c7864; + :b :c7865; + :b :c7866; + :b :c7867; + :b :c7868; + :b :c7869; + :b :c7870; + :b :c7871; + :b :c7872; + :b :c7873; + :b :c7874; + :b :c7875; + :b :c7876; + :b :c7877; + :b :c7878; + :b :c7879; + :b :c7880; + :b :c7881; + :b :c7882; + :b :c7883; + :b :c7884; + :b :c7885; + :b :c7886; + :b :c7887; + :b :c7888; + :b :c7889; + :b :c7890; + :b :c7891; + :b :c7892; + :b :c7893; + :b :c7894; + :b :c7895; + :b :c7896; + :b :c7897; + :b :c7898; + :b :c7899; + :b :c7900; + :b :c7901; + :b :c7902; + :b :c7903; + :b :c7904; + :b :c7905; + :b :c7906; + :b :c7907; + :b :c7908; + :b :c7909; + :b :c7910; + :b :c7911; + :b :c7912; + :b :c7913; + :b :c7914; + :b :c7915; + :b :c7916; + :b :c7917; + :b :c7918; + :b :c7919; + :b :c7920; + :b :c7921; + :b :c7922; + :b :c7923; + :b :c7924; + :b :c7925; + :b :c7926; + :b :c7927; + :b :c7928; + :b :c7929; + :b :c7930; + :b :c7931; + :b :c7932; + :b :c7933; + :b :c7934; + :b :c7935; + :b :c7936; + :b :c7937; + :b :c7938; + :b :c7939; + :b :c7940; + :b :c7941; + :b :c7942; + :b :c7943; + :b :c7944; + :b :c7945; + :b :c7946; + :b :c7947; + :b :c7948; + :b :c7949; + :b :c7950; + :b :c7951; + :b :c7952; + :b :c7953; + :b :c7954; + :b :c7955; + :b :c7956; + :b :c7957; + :b :c7958; + :b :c7959; + :b :c7960; + :b :c7961; + :b :c7962; + :b :c7963; + :b :c7964; + :b :c7965; + :b :c7966; + :b :c7967; + :b :c7968; + :b :c7969; + :b :c7970; + :b :c7971; + :b :c7972; + :b :c7973; + :b :c7974; + :b :c7975; + :b :c7976; + :b :c7977; + :b :c7978; + :b :c7979; + :b :c7980; + :b :c7981; + :b :c7982; + :b :c7983; + :b :c7984; + :b :c7985; + :b :c7986; + :b :c7987; + :b :c7988; + :b :c7989; + :b :c7990; + :b :c7991; + :b :c7992; + :b :c7993; + :b :c7994; + :b :c7995; + :b :c7996; + :b :c7997; + :b :c7998; + :b :c7999; + :b :c8000; + :b :c8001; + :b :c8002; + :b :c8003; + :b :c8004; + :b :c8005; + :b :c8006; + :b :c8007; + :b :c8008; + :b :c8009; + :b :c8010; + :b :c8011; + :b :c8012; + :b :c8013; + :b :c8014; + :b :c8015; + :b :c8016; + :b :c8017; + :b :c8018; + :b :c8019; + :b :c8020; + :b :c8021; + :b :c8022; + :b :c8023; + :b :c8024; + :b :c8025; + :b :c8026; + :b :c8027; + :b :c8028; + :b :c8029; + :b :c8030; + :b :c8031; + :b :c8032; + :b :c8033; + :b :c8034; + :b :c8035; + :b :c8036; + :b :c8037; + :b :c8038; + :b :c8039; + :b :c8040; + :b :c8041; + :b :c8042; + :b :c8043; + :b :c8044; + :b :c8045; + :b :c8046; + :b :c8047; + :b :c8048; + :b :c8049; + :b :c8050; + :b :c8051; + :b :c8052; + :b :c8053; + :b :c8054; + :b :c8055; + :b :c8056; + :b :c8057; + :b :c8058; + :b :c8059; + :b :c8060; + :b :c8061; + :b :c8062; + :b :c8063; + :b :c8064; + :b :c8065; + :b :c8066; + :b :c8067; + :b :c8068; + :b :c8069; + :b :c8070; + :b :c8071; + :b :c8072; + :b :c8073; + :b :c8074; + :b :c8075; + :b :c8076; + :b :c8077; + :b :c8078; + :b :c8079; + :b :c8080; + :b :c8081; + :b :c8082; + :b :c8083; + :b :c8084; + :b :c8085; + :b :c8086; + :b :c8087; + :b :c8088; + :b :c8089; + :b :c8090; + :b :c8091; + :b :c8092; + :b :c8093; + :b :c8094; + :b :c8095; + :b :c8096; + :b :c8097; + :b :c8098; + :b :c8099; + :b :c8100; + :b :c8101; + :b :c8102; + :b :c8103; + :b :c8104; + :b :c8105; + :b :c8106; + :b :c8107; + :b :c8108; + :b :c8109; + :b :c8110; + :b :c8111; + :b :c8112; + :b :c8113; + :b :c8114; + :b :c8115; + :b :c8116; + :b :c8117; + :b :c8118; + :b :c8119; + :b :c8120; + :b :c8121; + :b :c8122; + :b :c8123; + :b :c8124; + :b :c8125; + :b :c8126; + :b :c8127; + :b :c8128; + :b :c8129; + :b :c8130; + :b :c8131; + :b :c8132; + :b :c8133; + :b :c8134; + :b :c8135; + :b :c8136; + :b :c8137; + :b :c8138; + :b :c8139; + :b :c8140; + :b :c8141; + :b :c8142; + :b :c8143; + :b :c8144; + :b :c8145; + :b :c8146; + :b :c8147; + :b :c8148; + :b :c8149; + :b :c8150; + :b :c8151; + :b :c8152; + :b :c8153; + :b :c8154; + :b :c8155; + :b :c8156; + :b :c8157; + :b :c8158; + :b :c8159; + :b :c8160; + :b :c8161; + :b :c8162; + :b :c8163; + :b :c8164; + :b :c8165; + :b :c8166; + :b :c8167; + :b :c8168; + :b :c8169; + :b :c8170; + :b :c8171; + :b :c8172; + :b :c8173; + :b :c8174; + :b :c8175; + :b :c8176; + :b :c8177; + :b :c8178; + :b :c8179; + :b :c8180; + :b :c8181; + :b :c8182; + :b :c8183; + :b :c8184; + :b :c8185; + :b :c8186; + :b :c8187; + :b :c8188; + :b :c8189; + :b :c8190; + :b :c8191; + :b :c8192; + :b :c8193; + :b :c8194; + :b :c8195; + :b :c8196; + :b :c8197; + :b :c8198; + :b :c8199; + :b :c8200; + :b :c8201; + :b :c8202; + :b :c8203; + :b :c8204; + :b :c8205; + :b :c8206; + :b :c8207; + :b :c8208; + :b :c8209; + :b :c8210; + :b :c8211; + :b :c8212; + :b :c8213; + :b :c8214; + :b :c8215; + :b :c8216; + :b :c8217; + :b :c8218; + :b :c8219; + :b :c8220; + :b :c8221; + :b :c8222; + :b :c8223; + :b :c8224; + :b :c8225; + :b :c8226; + :b :c8227; + :b :c8228; + :b :c8229; + :b :c8230; + :b :c8231; + :b :c8232; + :b :c8233; + :b :c8234; + :b :c8235; + :b :c8236; + :b :c8237; + :b :c8238; + :b :c8239; + :b :c8240; + :b :c8241; + :b :c8242; + :b :c8243; + :b :c8244; + :b :c8245; + :b :c8246; + :b :c8247; + :b :c8248; + :b :c8249; + :b :c8250; + :b :c8251; + :b :c8252; + :b :c8253; + :b :c8254; + :b :c8255; + :b :c8256; + :b :c8257; + :b :c8258; + :b :c8259; + :b :c8260; + :b :c8261; + :b :c8262; + :b :c8263; + :b :c8264; + :b :c8265; + :b :c8266; + :b :c8267; + :b :c8268; + :b :c8269; + :b :c8270; + :b :c8271; + :b :c8272; + :b :c8273; + :b :c8274; + :b :c8275; + :b :c8276; + :b :c8277; + :b :c8278; + :b :c8279; + :b :c8280; + :b :c8281; + :b :c8282; + :b :c8283; + :b :c8284; + :b :c8285; + :b :c8286; + :b :c8287; + :b :c8288; + :b :c8289; + :b :c8290; + :b :c8291; + :b :c8292; + :b :c8293; + :b :c8294; + :b :c8295; + :b :c8296; + :b :c8297; + :b :c8298; + :b :c8299; + :b :c8300; + :b :c8301; + :b :c8302; + :b :c8303; + :b :c8304; + :b :c8305; + :b :c8306; + :b :c8307; + :b :c8308; + :b :c8309; + :b :c8310; + :b :c8311; + :b :c8312; + :b :c8313; + :b :c8314; + :b :c8315; + :b :c8316; + :b :c8317; + :b :c8318; + :b :c8319; + :b :c8320; + :b :c8321; + :b :c8322; + :b :c8323; + :b :c8324; + :b :c8325; + :b :c8326; + :b :c8327; + :b :c8328; + :b :c8329; + :b :c8330; + :b :c8331; + :b :c8332; + :b :c8333; + :b :c8334; + :b :c8335; + :b :c8336; + :b :c8337; + :b :c8338; + :b :c8339; + :b :c8340; + :b :c8341; + :b :c8342; + :b :c8343; + :b :c8344; + :b :c8345; + :b :c8346; + :b :c8347; + :b :c8348; + :b :c8349; + :b :c8350; + :b :c8351; + :b :c8352; + :b :c8353; + :b :c8354; + :b :c8355; + :b :c8356; + :b :c8357; + :b :c8358; + :b :c8359; + :b :c8360; + :b :c8361; + :b :c8362; + :b :c8363; + :b :c8364; + :b :c8365; + :b :c8366; + :b :c8367; + :b :c8368; + :b :c8369; + :b :c8370; + :b :c8371; + :b :c8372; + :b :c8373; + :b :c8374; + :b :c8375; + :b :c8376; + :b :c8377; + :b :c8378; + :b :c8379; + :b :c8380; + :b :c8381; + :b :c8382; + :b :c8383; + :b :c8384; + :b :c8385; + :b :c8386; + :b :c8387; + :b :c8388; + :b :c8389; + :b :c8390; + :b :c8391; + :b :c8392; + :b :c8393; + :b :c8394; + :b :c8395; + :b :c8396; + :b :c8397; + :b :c8398; + :b :c8399; + :b :c8400; + :b :c8401; + :b :c8402; + :b :c8403; + :b :c8404; + :b :c8405; + :b :c8406; + :b :c8407; + :b :c8408; + :b :c8409; + :b :c8410; + :b :c8411; + :b :c8412; + :b :c8413; + :b :c8414; + :b :c8415; + :b :c8416; + :b :c8417; + :b :c8418; + :b :c8419; + :b :c8420; + :b :c8421; + :b :c8422; + :b :c8423; + :b :c8424; + :b :c8425; + :b :c8426; + :b :c8427; + :b :c8428; + :b :c8429; + :b :c8430; + :b :c8431; + :b :c8432; + :b :c8433; + :b :c8434; + :b :c8435; + :b :c8436; + :b :c8437; + :b :c8438; + :b :c8439; + :b :c8440; + :b :c8441; + :b :c8442; + :b :c8443; + :b :c8444; + :b :c8445; + :b :c8446; + :b :c8447; + :b :c8448; + :b :c8449; + :b :c8450; + :b :c8451; + :b :c8452; + :b :c8453; + :b :c8454; + :b :c8455; + :b :c8456; + :b :c8457; + :b :c8458; + :b :c8459; + :b :c8460; + :b :c8461; + :b :c8462; + :b :c8463; + :b :c8464; + :b :c8465; + :b :c8466; + :b :c8467; + :b :c8468; + :b :c8469; + :b :c8470; + :b :c8471; + :b :c8472; + :b :c8473; + :b :c8474; + :b :c8475; + :b :c8476; + :b :c8477; + :b :c8478; + :b :c8479; + :b :c8480; + :b :c8481; + :b :c8482; + :b :c8483; + :b :c8484; + :b :c8485; + :b :c8486; + :b :c8487; + :b :c8488; + :b :c8489; + :b :c8490; + :b :c8491; + :b :c8492; + :b :c8493; + :b :c8494; + :b :c8495; + :b :c8496; + :b :c8497; + :b :c8498; + :b :c8499; + :b :c8500; + :b :c8501; + :b :c8502; + :b :c8503; + :b :c8504; + :b :c8505; + :b :c8506; + :b :c8507; + :b :c8508; + :b :c8509; + :b :c8510; + :b :c8511; + :b :c8512; + :b :c8513; + :b :c8514; + :b :c8515; + :b :c8516; + :b :c8517; + :b :c8518; + :b :c8519; + :b :c8520; + :b :c8521; + :b :c8522; + :b :c8523; + :b :c8524; + :b :c8525; + :b :c8526; + :b :c8527; + :b :c8528; + :b :c8529; + :b :c8530; + :b :c8531; + :b :c8532; + :b :c8533; + :b :c8534; + :b :c8535; + :b :c8536; + :b :c8537; + :b :c8538; + :b :c8539; + :b :c8540; + :b :c8541; + :b :c8542; + :b :c8543; + :b :c8544; + :b :c8545; + :b :c8546; + :b :c8547; + :b :c8548; + :b :c8549; + :b :c8550; + :b :c8551; + :b :c8552; + :b :c8553; + :b :c8554; + :b :c8555; + :b :c8556; + :b :c8557; + :b :c8558; + :b :c8559; + :b :c8560; + :b :c8561; + :b :c8562; + :b :c8563; + :b :c8564; + :b :c8565; + :b :c8566; + :b :c8567; + :b :c8568; + :b :c8569; + :b :c8570; + :b :c8571; + :b :c8572; + :b :c8573; + :b :c8574; + :b :c8575; + :b :c8576; + :b :c8577; + :b :c8578; + :b :c8579; + :b :c8580; + :b :c8581; + :b :c8582; + :b :c8583; + :b :c8584; + :b :c8585; + :b :c8586; + :b :c8587; + :b :c8588; + :b :c8589; + :b :c8590; + :b :c8591; + :b :c8592; + :b :c8593; + :b :c8594; + :b :c8595; + :b :c8596; + :b :c8597; + :b :c8598; + :b :c8599; + :b :c8600; + :b :c8601; + :b :c8602; + :b :c8603; + :b :c8604; + :b :c8605; + :b :c8606; + :b :c8607; + :b :c8608; + :b :c8609; + :b :c8610; + :b :c8611; + :b :c8612; + :b :c8613; + :b :c8614; + :b :c8615; + :b :c8616; + :b :c8617; + :b :c8618; + :b :c8619; + :b :c8620; + :b :c8621; + :b :c8622; + :b :c8623; + :b :c8624; + :b :c8625; + :b :c8626; + :b :c8627; + :b :c8628; + :b :c8629; + :b :c8630; + :b :c8631; + :b :c8632; + :b :c8633; + :b :c8634; + :b :c8635; + :b :c8636; + :b :c8637; + :b :c8638; + :b :c8639; + :b :c8640; + :b :c8641; + :b :c8642; + :b :c8643; + :b :c8644; + :b :c8645; + :b :c8646; + :b :c8647; + :b :c8648; + :b :c8649; + :b :c8650; + :b :c8651; + :b :c8652; + :b :c8653; + :b :c8654; + :b :c8655; + :b :c8656; + :b :c8657; + :b :c8658; + :b :c8659; + :b :c8660; + :b :c8661; + :b :c8662; + :b :c8663; + :b :c8664; + :b :c8665; + :b :c8666; + :b :c8667; + :b :c8668; + :b :c8669; + :b :c8670; + :b :c8671; + :b :c8672; + :b :c8673; + :b :c8674; + :b :c8675; + :b :c8676; + :b :c8677; + :b :c8678; + :b :c8679; + :b :c8680; + :b :c8681; + :b :c8682; + :b :c8683; + :b :c8684; + :b :c8685; + :b :c8686; + :b :c8687; + :b :c8688; + :b :c8689; + :b :c8690; + :b :c8691; + :b :c8692; + :b :c8693; + :b :c8694; + :b :c8695; + :b :c8696; + :b :c8697; + :b :c8698; + :b :c8699; + :b :c8700; + :b :c8701; + :b :c8702; + :b :c8703; + :b :c8704; + :b :c8705; + :b :c8706; + :b :c8707; + :b :c8708; + :b :c8709; + :b :c8710; + :b :c8711; + :b :c8712; + :b :c8713; + :b :c8714; + :b :c8715; + :b :c8716; + :b :c8717; + :b :c8718; + :b :c8719; + :b :c8720; + :b :c8721; + :b :c8722; + :b :c8723; + :b :c8724; + :b :c8725; + :b :c8726; + :b :c8727; + :b :c8728; + :b :c8729; + :b :c8730; + :b :c8731; + :b :c8732; + :b :c8733; + :b :c8734; + :b :c8735; + :b :c8736; + :b :c8737; + :b :c8738; + :b :c8739; + :b :c8740; + :b :c8741; + :b :c8742; + :b :c8743; + :b :c8744; + :b :c8745; + :b :c8746; + :b :c8747; + :b :c8748; + :b :c8749; + :b :c8750; + :b :c8751; + :b :c8752; + :b :c8753; + :b :c8754; + :b :c8755; + :b :c8756; + :b :c8757; + :b :c8758; + :b :c8759; + :b :c8760; + :b :c8761; + :b :c8762; + :b :c8763; + :b :c8764; + :b :c8765; + :b :c8766; + :b :c8767; + :b :c8768; + :b :c8769; + :b :c8770; + :b :c8771; + :b :c8772; + :b :c8773; + :b :c8774; + :b :c8775; + :b :c8776; + :b :c8777; + :b :c8778; + :b :c8779; + :b :c8780; + :b :c8781; + :b :c8782; + :b :c8783; + :b :c8784; + :b :c8785; + :b :c8786; + :b :c8787; + :b :c8788; + :b :c8789; + :b :c8790; + :b :c8791; + :b :c8792; + :b :c8793; + :b :c8794; + :b :c8795; + :b :c8796; + :b :c8797; + :b :c8798; + :b :c8799; + :b :c8800; + :b :c8801; + :b :c8802; + :b :c8803; + :b :c8804; + :b :c8805; + :b :c8806; + :b :c8807; + :b :c8808; + :b :c8809; + :b :c8810; + :b :c8811; + :b :c8812; + :b :c8813; + :b :c8814; + :b :c8815; + :b :c8816; + :b :c8817; + :b :c8818; + :b :c8819; + :b :c8820; + :b :c8821; + :b :c8822; + :b :c8823; + :b :c8824; + :b :c8825; + :b :c8826; + :b :c8827; + :b :c8828; + :b :c8829; + :b :c8830; + :b :c8831; + :b :c8832; + :b :c8833; + :b :c8834; + :b :c8835; + :b :c8836; + :b :c8837; + :b :c8838; + :b :c8839; + :b :c8840; + :b :c8841; + :b :c8842; + :b :c8843; + :b :c8844; + :b :c8845; + :b :c8846; + :b :c8847; + :b :c8848; + :b :c8849; + :b :c8850; + :b :c8851; + :b :c8852; + :b :c8853; + :b :c8854; + :b :c8855; + :b :c8856; + :b :c8857; + :b :c8858; + :b :c8859; + :b :c8860; + :b :c8861; + :b :c8862; + :b :c8863; + :b :c8864; + :b :c8865; + :b :c8866; + :b :c8867; + :b :c8868; + :b :c8869; + :b :c8870; + :b :c8871; + :b :c8872; + :b :c8873; + :b :c8874; + :b :c8875; + :b :c8876; + :b :c8877; + :b :c8878; + :b :c8879; + :b :c8880; + :b :c8881; + :b :c8882; + :b :c8883; + :b :c8884; + :b :c8885; + :b :c8886; + :b :c8887; + :b :c8888; + :b :c8889; + :b :c8890; + :b :c8891; + :b :c8892; + :b :c8893; + :b :c8894; + :b :c8895; + :b :c8896; + :b :c8897; + :b :c8898; + :b :c8899; + :b :c8900; + :b :c8901; + :b :c8902; + :b :c8903; + :b :c8904; + :b :c8905; + :b :c8906; + :b :c8907; + :b :c8908; + :b :c8909; + :b :c8910; + :b :c8911; + :b :c8912; + :b :c8913; + :b :c8914; + :b :c8915; + :b :c8916; + :b :c8917; + :b :c8918; + :b :c8919; + :b :c8920; + :b :c8921; + :b :c8922; + :b :c8923; + :b :c8924; + :b :c8925; + :b :c8926; + :b :c8927; + :b :c8928; + :b :c8929; + :b :c8930; + :b :c8931; + :b :c8932; + :b :c8933; + :b :c8934; + :b :c8935; + :b :c8936; + :b :c8937; + :b :c8938; + :b :c8939; + :b :c8940; + :b :c8941; + :b :c8942; + :b :c8943; + :b :c8944; + :b :c8945; + :b :c8946; + :b :c8947; + :b :c8948; + :b :c8949; + :b :c8950; + :b :c8951; + :b :c8952; + :b :c8953; + :b :c8954; + :b :c8955; + :b :c8956; + :b :c8957; + :b :c8958; + :b :c8959; + :b :c8960; + :b :c8961; + :b :c8962; + :b :c8963; + :b :c8964; + :b :c8965; + :b :c8966; + :b :c8967; + :b :c8968; + :b :c8969; + :b :c8970; + :b :c8971; + :b :c8972; + :b :c8973; + :b :c8974; + :b :c8975; + :b :c8976; + :b :c8977; + :b :c8978; + :b :c8979; + :b :c8980; + :b :c8981; + :b :c8982; + :b :c8983; + :b :c8984; + :b :c8985; + :b :c8986; + :b :c8987; + :b :c8988; + :b :c8989; + :b :c8990; + :b :c8991; + :b :c8992; + :b :c8993; + :b :c8994; + :b :c8995; + :b :c8996; + :b :c8997; + :b :c8998; + :b :c8999; + :b :c9000; + :b :c9001; + :b :c9002; + :b :c9003; + :b :c9004; + :b :c9005; + :b :c9006; + :b :c9007; + :b :c9008; + :b :c9009; + :b :c9010; + :b :c9011; + :b :c9012; + :b :c9013; + :b :c9014; + :b :c9015; + :b :c9016; + :b :c9017; + :b :c9018; + :b :c9019; + :b :c9020; + :b :c9021; + :b :c9022; + :b :c9023; + :b :c9024; + :b :c9025; + :b :c9026; + :b :c9027; + :b :c9028; + :b :c9029; + :b :c9030; + :b :c9031; + :b :c9032; + :b :c9033; + :b :c9034; + :b :c9035; + :b :c9036; + :b :c9037; + :b :c9038; + :b :c9039; + :b :c9040; + :b :c9041; + :b :c9042; + :b :c9043; + :b :c9044; + :b :c9045; + :b :c9046; + :b :c9047; + :b :c9048; + :b :c9049; + :b :c9050; + :b :c9051; + :b :c9052; + :b :c9053; + :b :c9054; + :b :c9055; + :b :c9056; + :b :c9057; + :b :c9058; + :b :c9059; + :b :c9060; + :b :c9061; + :b :c9062; + :b :c9063; + :b :c9064; + :b :c9065; + :b :c9066; + :b :c9067; + :b :c9068; + :b :c9069; + :b :c9070; + :b :c9071; + :b :c9072; + :b :c9073; + :b :c9074; + :b :c9075; + :b :c9076; + :b :c9077; + :b :c9078; + :b :c9079; + :b :c9080; + :b :c9081; + :b :c9082; + :b :c9083; + :b :c9084; + :b :c9085; + :b :c9086; + :b :c9087; + :b :c9088; + :b :c9089; + :b :c9090; + :b :c9091; + :b :c9092; + :b :c9093; + :b :c9094; + :b :c9095; + :b :c9096; + :b :c9097; + :b :c9098; + :b :c9099; + :b :c9100; + :b :c9101; + :b :c9102; + :b :c9103; + :b :c9104; + :b :c9105; + :b :c9106; + :b :c9107; + :b :c9108; + :b :c9109; + :b :c9110; + :b :c9111; + :b :c9112; + :b :c9113; + :b :c9114; + :b :c9115; + :b :c9116; + :b :c9117; + :b :c9118; + :b :c9119; + :b :c9120; + :b :c9121; + :b :c9122; + :b :c9123; + :b :c9124; + :b :c9125; + :b :c9126; + :b :c9127; + :b :c9128; + :b :c9129; + :b :c9130; + :b :c9131; + :b :c9132; + :b :c9133; + :b :c9134; + :b :c9135; + :b :c9136; + :b :c9137; + :b :c9138; + :b :c9139; + :b :c9140; + :b :c9141; + :b :c9142; + :b :c9143; + :b :c9144; + :b :c9145; + :b :c9146; + :b :c9147; + :b :c9148; + :b :c9149; + :b :c9150; + :b :c9151; + :b :c9152; + :b :c9153; + :b :c9154; + :b :c9155; + :b :c9156; + :b :c9157; + :b :c9158; + :b :c9159; + :b :c9160; + :b :c9161; + :b :c9162; + :b :c9163; + :b :c9164; + :b :c9165; + :b :c9166; + :b :c9167; + :b :c9168; + :b :c9169; + :b :c9170; + :b :c9171; + :b :c9172; + :b :c9173; + :b :c9174; + :b :c9175; + :b :c9176; + :b :c9177; + :b :c9178; + :b :c9179; + :b :c9180; + :b :c9181; + :b :c9182; + :b :c9183; + :b :c9184; + :b :c9185; + :b :c9186; + :b :c9187; + :b :c9188; + :b :c9189; + :b :c9190; + :b :c9191; + :b :c9192; + :b :c9193; + :b :c9194; + :b :c9195; + :b :c9196; + :b :c9197; + :b :c9198; + :b :c9199; + :b :c9200; + :b :c9201; + :b :c9202; + :b :c9203; + :b :c9204; + :b :c9205; + :b :c9206; + :b :c9207; + :b :c9208; + :b :c9209; + :b :c9210; + :b :c9211; + :b :c9212; + :b :c9213; + :b :c9214; + :b :c9215; + :b :c9216; + :b :c9217; + :b :c9218; + :b :c9219; + :b :c9220; + :b :c9221; + :b :c9222; + :b :c9223; + :b :c9224; + :b :c9225; + :b :c9226; + :b :c9227; + :b :c9228; + :b :c9229; + :b :c9230; + :b :c9231; + :b :c9232; + :b :c9233; + :b :c9234; + :b :c9235; + :b :c9236; + :b :c9237; + :b :c9238; + :b :c9239; + :b :c9240; + :b :c9241; + :b :c9242; + :b :c9243; + :b :c9244; + :b :c9245; + :b :c9246; + :b :c9247; + :b :c9248; + :b :c9249; + :b :c9250; + :b :c9251; + :b :c9252; + :b :c9253; + :b :c9254; + :b :c9255; + :b :c9256; + :b :c9257; + :b :c9258; + :b :c9259; + :b :c9260; + :b :c9261; + :b :c9262; + :b :c9263; + :b :c9264; + :b :c9265; + :b :c9266; + :b :c9267; + :b :c9268; + :b :c9269; + :b :c9270; + :b :c9271; + :b :c9272; + :b :c9273; + :b :c9274; + :b :c9275; + :b :c9276; + :b :c9277; + :b :c9278; + :b :c9279; + :b :c9280; + :b :c9281; + :b :c9282; + :b :c9283; + :b :c9284; + :b :c9285; + :b :c9286; + :b :c9287; + :b :c9288; + :b :c9289; + :b :c9290; + :b :c9291; + :b :c9292; + :b :c9293; + :b :c9294; + :b :c9295; + :b :c9296; + :b :c9297; + :b :c9298; + :b :c9299; + :b :c9300; + :b :c9301; + :b :c9302; + :b :c9303; + :b :c9304; + :b :c9305; + :b :c9306; + :b :c9307; + :b :c9308; + :b :c9309; + :b :c9310; + :b :c9311; + :b :c9312; + :b :c9313; + :b :c9314; + :b :c9315; + :b :c9316; + :b :c9317; + :b :c9318; + :b :c9319; + :b :c9320; + :b :c9321; + :b :c9322; + :b :c9323; + :b :c9324; + :b :c9325; + :b :c9326; + :b :c9327; + :b :c9328; + :b :c9329; + :b :c9330; + :b :c9331; + :b :c9332; + :b :c9333; + :b :c9334; + :b :c9335; + :b :c9336; + :b :c9337; + :b :c9338; + :b :c9339; + :b :c9340; + :b :c9341; + :b :c9342; + :b :c9343; + :b :c9344; + :b :c9345; + :b :c9346; + :b :c9347; + :b :c9348; + :b :c9349; + :b :c9350; + :b :c9351; + :b :c9352; + :b :c9353; + :b :c9354; + :b :c9355; + :b :c9356; + :b :c9357; + :b :c9358; + :b :c9359; + :b :c9360; + :b :c9361; + :b :c9362; + :b :c9363; + :b :c9364; + :b :c9365; + :b :c9366; + :b :c9367; + :b :c9368; + :b :c9369; + :b :c9370; + :b :c9371; + :b :c9372; + :b :c9373; + :b :c9374; + :b :c9375; + :b :c9376; + :b :c9377; + :b :c9378; + :b :c9379; + :b :c9380; + :b :c9381; + :b :c9382; + :b :c9383; + :b :c9384; + :b :c9385; + :b :c9386; + :b :c9387; + :b :c9388; + :b :c9389; + :b :c9390; + :b :c9391; + :b :c9392; + :b :c9393; + :b :c9394; + :b :c9395; + :b :c9396; + :b :c9397; + :b :c9398; + :b :c9399; + :b :c9400; + :b :c9401; + :b :c9402; + :b :c9403; + :b :c9404; + :b :c9405; + :b :c9406; + :b :c9407; + :b :c9408; + :b :c9409; + :b :c9410; + :b :c9411; + :b :c9412; + :b :c9413; + :b :c9414; + :b :c9415; + :b :c9416; + :b :c9417; + :b :c9418; + :b :c9419; + :b :c9420; + :b :c9421; + :b :c9422; + :b :c9423; + :b :c9424; + :b :c9425; + :b :c9426; + :b :c9427; + :b :c9428; + :b :c9429; + :b :c9430; + :b :c9431; + :b :c9432; + :b :c9433; + :b :c9434; + :b :c9435; + :b :c9436; + :b :c9437; + :b :c9438; + :b :c9439; + :b :c9440; + :b :c9441; + :b :c9442; + :b :c9443; + :b :c9444; + :b :c9445; + :b :c9446; + :b :c9447; + :b :c9448; + :b :c9449; + :b :c9450; + :b :c9451; + :b :c9452; + :b :c9453; + :b :c9454; + :b :c9455; + :b :c9456; + :b :c9457; + :b :c9458; + :b :c9459; + :b :c9460; + :b :c9461; + :b :c9462; + :b :c9463; + :b :c9464; + :b :c9465; + :b :c9466; + :b :c9467; + :b :c9468; + :b :c9469; + :b :c9470; + :b :c9471; + :b :c9472; + :b :c9473; + :b :c9474; + :b :c9475; + :b :c9476; + :b :c9477; + :b :c9478; + :b :c9479; + :b :c9480; + :b :c9481; + :b :c9482; + :b :c9483; + :b :c9484; + :b :c9485; + :b :c9486; + :b :c9487; + :b :c9488; + :b :c9489; + :b :c9490; + :b :c9491; + :b :c9492; + :b :c9493; + :b :c9494; + :b :c9495; + :b :c9496; + :b :c9497; + :b :c9498; + :b :c9499; + :b :c9500; + :b :c9501; + :b :c9502; + :b :c9503; + :b :c9504; + :b :c9505; + :b :c9506; + :b :c9507; + :b :c9508; + :b :c9509; + :b :c9510; + :b :c9511; + :b :c9512; + :b :c9513; + :b :c9514; + :b :c9515; + :b :c9516; + :b :c9517; + :b :c9518; + :b :c9519; + :b :c9520; + :b :c9521; + :b :c9522; + :b :c9523; + :b :c9524; + :b :c9525; + :b :c9526; + :b :c9527; + :b :c9528; + :b :c9529; + :b :c9530; + :b :c9531; + :b :c9532; + :b :c9533; + :b :c9534; + :b :c9535; + :b :c9536; + :b :c9537; + :b :c9538; + :b :c9539; + :b :c9540; + :b :c9541; + :b :c9542; + :b :c9543; + :b :c9544; + :b :c9545; + :b :c9546; + :b :c9547; + :b :c9548; + :b :c9549; + :b :c9550; + :b :c9551; + :b :c9552; + :b :c9553; + :b :c9554; + :b :c9555; + :b :c9556; + :b :c9557; + :b :c9558; + :b :c9559; + :b :c9560; + :b :c9561; + :b :c9562; + :b :c9563; + :b :c9564; + :b :c9565; + :b :c9566; + :b :c9567; + :b :c9568; + :b :c9569; + :b :c9570; + :b :c9571; + :b :c9572; + :b :c9573; + :b :c9574; + :b :c9575; + :b :c9576; + :b :c9577; + :b :c9578; + :b :c9579; + :b :c9580; + :b :c9581; + :b :c9582; + :b :c9583; + :b :c9584; + :b :c9585; + :b :c9586; + :b :c9587; + :b :c9588; + :b :c9589; + :b :c9590; + :b :c9591; + :b :c9592; + :b :c9593; + :b :c9594; + :b :c9595; + :b :c9596; + :b :c9597; + :b :c9598; + :b :c9599; + :b :c9600; + :b :c9601; + :b :c9602; + :b :c9603; + :b :c9604; + :b :c9605; + :b :c9606; + :b :c9607; + :b :c9608; + :b :c9609; + :b :c9610; + :b :c9611; + :b :c9612; + :b :c9613; + :b :c9614; + :b :c9615; + :b :c9616; + :b :c9617; + :b :c9618; + :b :c9619; + :b :c9620; + :b :c9621; + :b :c9622; + :b :c9623; + :b :c9624; + :b :c9625; + :b :c9626; + :b :c9627; + :b :c9628; + :b :c9629; + :b :c9630; + :b :c9631; + :b :c9632; + :b :c9633; + :b :c9634; + :b :c9635; + :b :c9636; + :b :c9637; + :b :c9638; + :b :c9639; + :b :c9640; + :b :c9641; + :b :c9642; + :b :c9643; + :b :c9644; + :b :c9645; + :b :c9646; + :b :c9647; + :b :c9648; + :b :c9649; + :b :c9650; + :b :c9651; + :b :c9652; + :b :c9653; + :b :c9654; + :b :c9655; + :b :c9656; + :b :c9657; + :b :c9658; + :b :c9659; + :b :c9660; + :b :c9661; + :b :c9662; + :b :c9663; + :b :c9664; + :b :c9665; + :b :c9666; + :b :c9667; + :b :c9668; + :b :c9669; + :b :c9670; + :b :c9671; + :b :c9672; + :b :c9673; + :b :c9674; + :b :c9675; + :b :c9676; + :b :c9677; + :b :c9678; + :b :c9679; + :b :c9680; + :b :c9681; + :b :c9682; + :b :c9683; + :b :c9684; + :b :c9685; + :b :c9686; + :b :c9687; + :b :c9688; + :b :c9689; + :b :c9690; + :b :c9691; + :b :c9692; + :b :c9693; + :b :c9694; + :b :c9695; + :b :c9696; + :b :c9697; + :b :c9698; + :b :c9699; + :b :c9700; + :b :c9701; + :b :c9702; + :b :c9703; + :b :c9704; + :b :c9705; + :b :c9706; + :b :c9707; + :b :c9708; + :b :c9709; + :b :c9710; + :b :c9711; + :b :c9712; + :b :c9713; + :b :c9714; + :b :c9715; + :b :c9716; + :b :c9717; + :b :c9718; + :b :c9719; + :b :c9720; + :b :c9721; + :b :c9722; + :b :c9723; + :b :c9724; + :b :c9725; + :b :c9726; + :b :c9727; + :b :c9728; + :b :c9729; + :b :c9730; + :b :c9731; + :b :c9732; + :b :c9733; + :b :c9734; + :b :c9735; + :b :c9736; + :b :c9737; + :b :c9738; + :b :c9739; + :b :c9740; + :b :c9741; + :b :c9742; + :b :c9743; + :b :c9744; + :b :c9745; + :b :c9746; + :b :c9747; + :b :c9748; + :b :c9749; + :b :c9750; + :b :c9751; + :b :c9752; + :b :c9753; + :b :c9754; + :b :c9755; + :b :c9756; + :b :c9757; + :b :c9758; + :b :c9759; + :b :c9760; + :b :c9761; + :b :c9762; + :b :c9763; + :b :c9764; + :b :c9765; + :b :c9766; + :b :c9767; + :b :c9768; + :b :c9769; + :b :c9770; + :b :c9771; + :b :c9772; + :b :c9773; + :b :c9774; + :b :c9775; + :b :c9776; + :b :c9777; + :b :c9778; + :b :c9779; + :b :c9780; + :b :c9781; + :b :c9782; + :b :c9783; + :b :c9784; + :b :c9785; + :b :c9786; + :b :c9787; + :b :c9788; + :b :c9789; + :b :c9790; + :b :c9791; + :b :c9792; + :b :c9793; + :b :c9794; + :b :c9795; + :b :c9796; + :b :c9797; + :b :c9798; + :b :c9799; + :b :c9800; + :b :c9801; + :b :c9802; + :b :c9803; + :b :c9804; + :b :c9805; + :b :c9806; + :b :c9807; + :b :c9808; + :b :c9809; + :b :c9810; + :b :c9811; + :b :c9812; + :b :c9813; + :b :c9814; + :b :c9815; + :b :c9816; + :b :c9817; + :b :c9818; + :b :c9819; + :b :c9820; + :b :c9821; + :b :c9822; + :b :c9823; + :b :c9824; + :b :c9825; + :b :c9826; + :b :c9827; + :b :c9828; + :b :c9829; + :b :c9830; + :b :c9831; + :b :c9832; + :b :c9833; + :b :c9834; + :b :c9835; + :b :c9836; + :b :c9837; + :b :c9838; + :b :c9839; + :b :c9840; + :b :c9841; + :b :c9842; + :b :c9843; + :b :c9844; + :b :c9845; + :b :c9846; + :b :c9847; + :b :c9848; + :b :c9849; + :b :c9850; + :b :c9851; + :b :c9852; + :b :c9853; + :b :c9854; + :b :c9855; + :b :c9856; + :b :c9857; + :b :c9858; + :b :c9859; + :b :c9860; + :b :c9861; + :b :c9862; + :b :c9863; + :b :c9864; + :b :c9865; + :b :c9866; + :b :c9867; + :b :c9868; + :b :c9869; + :b :c9870; + :b :c9871; + :b :c9872; + :b :c9873; + :b :c9874; + :b :c9875; + :b :c9876; + :b :c9877; + :b :c9878; + :b :c9879; + :b :c9880; + :b :c9881; + :b :c9882; + :b :c9883; + :b :c9884; + :b :c9885; + :b :c9886; + :b :c9887; + :b :c9888; + :b :c9889; + :b :c9890; + :b :c9891; + :b :c9892; + :b :c9893; + :b :c9894; + :b :c9895; + :b :c9896; + :b :c9897; + :b :c9898; + :b :c9899; + :b :c9900; + :b :c9901; + :b :c9902; + :b :c9903; + :b :c9904; + :b :c9905; + :b :c9906; + :b :c9907; + :b :c9908; + :b :c9909; + :b :c9910; + :b :c9911; + :b :c9912; + :b :c9913; + :b :c9914; + :b :c9915; + :b :c9916; + :b :c9917; + :b :c9918; + :b :c9919; + :b :c9920; + :b :c9921; + :b :c9922; + :b :c9923; + :b :c9924; + :b :c9925; + :b :c9926; + :b :c9927; + :b :c9928; + :b :c9929; + :b :c9930; + :b :c9931; + :b :c9932; + :b :c9933; + :b :c9934; + :b :c9935; + :b :c9936; + :b :c9937; + :b :c9938; + :b :c9939; + :b :c9940; + :b :c9941; + :b :c9942; + :b :c9943; + :b :c9944; + :b :c9945; + :b :c9946; + :b :c9947; + :b :c9948; + :b :c9949; + :b :c9950; + :b :c9951; + :b :c9952; + :b :c9953; + :b :c9954; + :b :c9955; + :b :c9956; + :b :c9957; + :b :c9958; + :b :c9959; + :b :c9960; + :b :c9961; + :b :c9962; + :b :c9963; + :b :c9964; + :b :c9965; + :b :c9966; + :b :c9967; + :b :c9968; + :b :c9969; + :b :c9970; + :b :c9971; + :b :c9972; + :b :c9973; + :b :c9974; + :b :c9975; + :b :c9976; + :b :c9977; + :b :c9978; + :b :c9979; + :b :c9980; + :b :c9981; + :b :c9982; + :b :c9983; + :b :c9984; + :b :c9985; + :b :c9986; + :b :c9987; + :b :c9988; + :b :c9989; + :b :c9990; + :b :c9991; + :b :c9992; + :b :c9993; + :b :c9994; + :b :c9995; + :b :c9996; + :b :c9997; + :b :c9998; + :b :c9999; + :b :c10000 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-17.out b/source/libs/lilv/sord-0.10.4/tests/test-17.out new file mode 100644 index 000000000..466edbb2d --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-17.out @@ -0,0 +1 @@ + "a long\n\tliteral\nwith\nnewlines" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-17.ttl b/source/libs/lilv/sord-0.10.4/tests/test-17.ttl new file mode 100644 index 000000000..86c453bd8 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-17.ttl @@ -0,0 +1,6 @@ +# Test long literal +@prefix : . +:a :b """a long + literal +with +newlines""" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-18.out b/source/libs/lilv/sord-0.10.4/tests/test-18.out new file mode 100644 index 000000000..4ff4b95b3 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-18.out @@ -0,0 +1,2 @@ + "\nthis \ris a \U00015678long\t\nliteral\uABCD\n" . + "\tThis \uABCDis\r \U00015678another\n\none\n" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-18.ttl b/source/libs/lilv/sord-0.10.4/tests/test-18.ttl new file mode 100644 index 000000000..1adfa4516 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-18.ttl @@ -0,0 +1,9 @@ +@prefix : . + +:a :b """\nthis \ris a \U00015678long\t +literal\uABCD +""" . + +:d :e """\tThis \uABCDis\r \U00015678another\n +one +""" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-19.out b/source/libs/lilv/sord-0.10.4/tests/test-19.out new file mode 100644 index 000000000..2e2dbe404 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-19.out @@ -0,0 +1 @@ + "1.0"^^ . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-19.ttl b/source/libs/lilv/sord-0.10.4/tests/test-19.ttl new file mode 100644 index 000000000..9de0c07b2 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-19.ttl @@ -0,0 +1,4 @@ +@prefix : . + +:a :b 1.0 . + diff --git a/source/libs/lilv/sord-0.10.4/tests/test-20.out b/source/libs/lilv/sord-0.10.4/tests/test-20.out new file mode 100644 index 000000000..fff2da56b --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-20.out @@ -0,0 +1,2 @@ + "" . + "" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-20.ttl b/source/libs/lilv/sord-0.10.4/tests/test-20.ttl new file mode 100644 index 000000000..37a9a4f33 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-20.ttl @@ -0,0 +1,6 @@ +@prefix : . + +:a :b "" . + +:c :d """""" . + diff --git a/source/libs/lilv/sord-0.10.4/tests/test-21.out b/source/libs/lilv/sord-0.10.4/tests/test-21.out new file mode 100644 index 000000000..d5dca6907 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-21.out @@ -0,0 +1,3 @@ + "1.0"^^ . + "1"^^ . + "1.0e0"^^ . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-21.ttl b/source/libs/lilv/sord-0.10.4/tests/test-21.ttl new file mode 100644 index 000000000..a8e8dc15a --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-21.ttl @@ -0,0 +1,4 @@ +@prefix : . +:a :b 1.0 . +:c :d 1 . +:e :f 1.0e0 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-22.out b/source/libs/lilv/sord-0.10.4/tests/test-22.out new file mode 100644 index 000000000..3d0f970e8 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-22.out @@ -0,0 +1,3 @@ + "-1.0"^^ . + "-1"^^ . + "-1.0e0"^^ . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-22.ttl b/source/libs/lilv/sord-0.10.4/tests/test-22.ttl new file mode 100644 index 000000000..9b1a725aa --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-22.ttl @@ -0,0 +1,4 @@ +@prefix : . +:a :b -1.0 . +:c :d -1 . +:e :f -1.0e0 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-23.out b/source/libs/lilv/sord-0.10.4/tests/test-23.out new file mode 100644 index 000000000..fde31312e --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-23.out @@ -0,0 +1 @@ + "John said: \"Hello World!\"" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-23.ttl b/source/libs/lilv/sord-0.10.4/tests/test-23.ttl new file mode 100644 index 000000000..9f5360af8 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-23.ttl @@ -0,0 +1,3 @@ +# Test long literal +@prefix : . +:a :b """John said: "Hello World!\"""" . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-24.out b/source/libs/lilv/sord-0.10.4/tests/test-24.out new file mode 100644 index 000000000..5a70bff19 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-24.out @@ -0,0 +1,2 @@ + "true"^^ . + "false"^^ . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-24.ttl b/source/libs/lilv/sord-0.10.4/tests/test-24.ttl new file mode 100644 index 000000000..25f3b7579 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-24.ttl @@ -0,0 +1,3 @@ +@prefix : . +:a :b true . +:c :d false . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-25.out b/source/libs/lilv/sord-0.10.4/tests/test-25.out new file mode 100644 index 000000000..1a38415fe --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-25.out @@ -0,0 +1,7 @@ + . + . + . + . + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-25.ttl b/source/libs/lilv/sord-0.10.4/tests/test-25.ttl new file mode 100644 index 000000000..310349da1 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-25.ttl @@ -0,0 +1,14 @@ +# comment test +@prefix : . +:a :b :c . # end of line comment +:d # ignore me + :e # and me + :f # and me + . +:g :h #ignore me + :i, # and me + :j . # and me + +:k :l :m ; #ignore me + :n :o ; # and me + :p :q . # and me diff --git a/source/libs/lilv/sord-0.10.4/tests/test-26.out b/source/libs/lilv/sord-0.10.4/tests/test-26.out new file mode 100644 index 000000000..ad105cf48 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-26.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-26.ttl b/source/libs/lilv/sord-0.10.4/tests/test-26.ttl new file mode 100644 index 000000000..0667c6b4a --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-26.ttl @@ -0,0 +1,4 @@ +# comment line with no final newline test +@prefix : . +:a :b :c . +#foo diff --git a/source/libs/lilv/sord-0.10.4/tests/test-27.out b/source/libs/lilv/sord-0.10.4/tests/test-27.out new file mode 100644 index 000000000..7da0635ba --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-27.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-27.ttl b/source/libs/lilv/sord-0.10.4/tests/test-27.ttl new file mode 100644 index 000000000..569023c8a --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-27.ttl @@ -0,0 +1,5 @@ +@prefix foo: . +@prefix foo: . + +foo:blah foo:blah foo:blah . + diff --git a/source/libs/lilv/sord-0.10.4/tests/test-29.out b/source/libs/lilv/sord-0.10.4/tests/test-29.out new file mode 100644 index 000000000..612052d3b --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-29.out @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-29.ttl b/source/libs/lilv/sord-0.10.4/tests/test-29.ttl new file mode 100644 index 000000000..612052d3b --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-29.ttl @@ -0,0 +1 @@ + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-30.out b/source/libs/lilv/sord-0.10.4/tests/test-30.out new file mode 100644 index 000000000..ce5c67d04 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-30.out @@ -0,0 +1,5 @@ + . + . + . + . + . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-30.ttl b/source/libs/lilv/sord-0.10.4/tests/test-30.ttl new file mode 100644 index 000000000..6721ec243 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-30.ttl @@ -0,0 +1,12 @@ +# In-scope base URI is http://www.w3.org/2001/sw/DataAccess/df1/tests/ at this point + . +@base . +# In-scope base URI is http://example.org/ns/ at this point + . +@base . +# In-scope base URI is http://example.org/ns/foo/ at this point + . +@prefix : . +:a4 :b4 :c4 . +@prefix : . +:a5 :b5 :c5 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-id.out b/source/libs/lilv/sord-0.10.4/tests/test-id.out new file mode 100644 index 000000000..722fc6d1f --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-id.out @@ -0,0 +1,2 @@ + _:genid1 . +_:docid1 . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-id.ttl b/source/libs/lilv/sord-0.10.4/tests/test-id.ttl new file mode 100644 index 000000000..6bc1c37d9 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-id.ttl @@ -0,0 +1,4 @@ +@prefix : . + +:c :d [] . +_:genid1 :a :b . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-lang.out b/source/libs/lilv/sord-0.10.4/tests/test-lang.out new file mode 100644 index 000000000..c36dda420 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-lang.out @@ -0,0 +1,4 @@ + "Hello"@en . + "Howdy"@en-us . + "Bonjour"@fr . + "Guten Tag"@de-latn-de . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-lang.ttl b/source/libs/lilv/sord-0.10.4/tests/test-lang.ttl new file mode 100644 index 000000000..f7c2727f9 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-lang.ttl @@ -0,0 +1,6 @@ +@prefix : . + +:thing :greeting "Hello"@en ; + :greeting "Howdy"@en-us ; + :greeting "Bonjour"@fr ; + :greeting "Guten Tag"@de-latn-de . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-num.out b/source/libs/lilv/sord-0.10.4/tests/test-num.out new file mode 100644 index 000000000..2502580b9 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-num.out @@ -0,0 +1,9 @@ + "0.1"^^ . + "+0.2"^^ . + "-0.3"^^ . + ".4"^^ . + "+.5"^^ . + "-.6"^^ . + "1.58490e-05"^^ . + "1.58490e+05"^^ . + "1.58490e05"^^ . diff --git a/source/libs/lilv/sord-0.10.4/tests/test-num.ttl b/source/libs/lilv/sord-0.10.4/tests/test-num.ttl new file mode 100644 index 000000000..54a425aca --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/tests/test-num.ttl @@ -0,0 +1,11 @@ +@prefix eg: . + +eg:thing eg:num 0.1 . +eg:thing eg:num +0.2 . +eg:thing eg:num -0.3 . +eg:thing eg:num .4 . +eg:thing eg:num +.5 . +eg:thing eg:num -.6 . +eg:thing eg:num 1.58490e-05 . +eg:thing eg:num 1.58490e+05 . +eg:thing eg:num 1.58490e05 . diff --git a/source/libs/lilv/sord-0.10.4/waf b/source/libs/lilv/sord-0.10.4/waf new file mode 100755 index 0000000000000000000000000000000000000000..b4446e89189ff2493fc57a12a801068cbd5a80b7 GIT binary patch literal 73024 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 LP=E>}JUu-M(>8-% literal 0 HcmV?d00001 diff --git a/source/libs/lilv/sord-0.10.4/wscript b/source/libs/lilv/sord-0.10.4/wscript new file mode 100644 index 000000000..e263bbde8 --- /dev/null +++ b/source/libs/lilv/sord-0.10.4/wscript @@ -0,0 +1,302 @@ +#!/usr/bin/env python +import glob +import os +import subprocess +import waflib.Logs as Logs +import waflib.Options as Options +import waflib.extras.autowaf as autowaf + +# Library and package version (UNIX style major, minor, micro) +# major increment <=> incompatible changes +# minor increment <=> compatible changes (additions) +# micro increment <=> no interface changes +SORD_VERSION = '0.10.4' +SORD_MAJOR_VERSION = '0' + +# Mandatory waf variables +APPNAME = 'sord' # Package name for waf dist +VERSION = SORD_VERSION # Package version for waf dist +top = '.' # Source directory +out = 'build' # Build directory + +def options(opt): + opt.load('compiler_c') + opt.load('compiler_cxx') + autowaf.set_options(opt) + opt.add_option('--no-utils', action='store_true', dest='no_utils', + help='Do not build command line utilities') + opt.add_option('--test', action='store_true', dest='build_tests', + help='Build unit tests') + opt.add_option('--static', action='store_true', dest='static', + help='Build static library') + opt.add_option('--no-shared', action='store_true', dest='no_shared', + help='Do not build shared library') + opt.add_option('--static-progs', action='store_true', dest='static_progs', + help='Build programs as static binaries') + opt.add_option('--dump', type='string', default='', dest='dump', + help='Dump debugging output (iter, search, write, all)') + +def configure(conf): + conf.load('compiler_c') + if Options.options.build_tests: + try: + conf.load('compiler_cxx') + except: + Logs.warn("No C++ compiler, sordmm.hpp compile test skipped") + pass + + autowaf.configure(conf) + autowaf.set_c99_mode(conf) + autowaf.display_header('Sord configuration') + + conf.env.BUILD_TESTS = Options.options.build_tests + conf.env.BUILD_UTILS = not Options.options.no_utils + conf.env.BUILD_SHARED = not Options.options.no_shared + conf.env.STATIC_PROGS = Options.options.static_progs + conf.env.BUILD_STATIC = (Options.options.static or + Options.options.static_progs) + + if conf.env.BUILD_TESTS: + conf.check(lib = 'gcov', + define_name = 'HAVE_GCOV', + mandatory = False) + + autowaf.check_pkg(conf, 'serd-0', uselib_store='SERD', + atleast_version='0.18.0', mandatory=True) + autowaf.check_pkg(conf, 'libpcre', uselib_store='PCRE', mandatory=False) + + # Parse dump options and define things accordingly + dump = Options.options.dump.split(',') + all = 'all' in dump + if all or 'iter' in dump: + autowaf.define(conf, 'SORD_DEBUG_ITER', 1) + if all or 'search' in dump: + autowaf.define(conf, 'SORD_DEBUG_SEARCH', 1) + if all or 'write' in dump: + autowaf.define(conf, 'SORD_DEBUG_WRITE', 1) + + autowaf.define(conf, 'SORD_VERSION', SORD_VERSION) + autowaf.set_lib_env(conf, 'sord', SORD_VERSION) + conf.write_config_header('sord_config.h', remove=False) + + autowaf.display_msg(conf, 'Utilities', bool(conf.env.BUILD_UTILS)) + autowaf.display_msg(conf, 'Unit tests', bool(conf.env.BUILD_TESTS)) + autowaf.display_msg(conf, 'Debug dumping', dump) + print('') + +def build(bld): + # C/C++ Headers + includedir = '${INCLUDEDIR}/sord-%s/sord' % SORD_MAJOR_VERSION + bld.install_files(includedir, bld.path.ant_glob('sord/*.h')) + bld.install_files(includedir, bld.path.ant_glob('sord/*.hpp')) + + # Pkgconfig file + autowaf.build_pc(bld, 'SORD', SORD_VERSION, SORD_MAJOR_VERSION, 'SERD', + {'SORD_MAJOR_VERSION' : SORD_MAJOR_VERSION}) + + source = 'src/sord.c src/syntax.c' + + libflags = ['-fvisibility=hidden'] + libs = ['m'] + defines = [] + if bld.env.MSVC_COMPILER: + libflags = [] + libs = [] + defines = ['snprintf=_snprintf'] + + # Shared Library + if bld.env.BUILD_SHARED: + obj = bld(features = 'c cshlib', + source = source, + includes = ['.', './src'], + export_includes = ['.'], + name = 'libsord', + target = 'sord-%s' % SORD_MAJOR_VERSION, + vnum = SORD_VERSION, + install_path = '${LIBDIR}', + libs = libs, + defines = defines + ['SORD_SHARED', 'SORD_INTERNAL'], + cflags = libflags) + autowaf.use_lib(bld, obj, 'SERD') + + # Static Library + if bld.env.BUILD_STATIC: + obj = bld(features = 'c cstlib', + source = source, + includes = ['.', './src'], + export_includes = ['.'], + name = 'libsord_static', + target = 'sord-%s' % SORD_MAJOR_VERSION, + vnum = SORD_VERSION, + install_path = '${LIBDIR}', + libs = libs, + defines = ['SORD_INTERNAL']) + autowaf.use_lib(bld, obj, 'SERD') + + if bld.env.BUILD_TESTS: + test_libs = libs + test_cflags = [''] + if bld.is_defined('HAVE_GCOV'): + test_libs += ['gcov'] + test_cflags += ['-fprofile-arcs', '-ftest-coverage'] + + # Profiled static library for test coverage + obj = bld(features = 'c cstlib', + source = source, + includes = ['.', './src'], + name = 'libsord_profiled', + target = 'sord_profiled', + install_path = '', + defines = defines, + cflags = test_cflags, + lib = test_libs) + autowaf.use_lib(bld, obj, 'SERD') + + # Unit test program + obj = bld(features = 'c cprogram', + source = 'src/sord_test.c', + includes = ['.', './src'], + use = 'libsord_profiled', + lib = test_libs, + target = 'sord_test', + install_path = '', + defines = defines, + cflags = test_cflags) + autowaf.use_lib(bld, obj, 'SERD') + + # Static profiled sordi for tests + obj = bld(features = 'c cprogram', + source = 'src/sordi.c', + includes = ['.', './src'], + use = 'libsord_profiled', + lib = test_libs, + target = 'sordi_static', + install_path = '', + defines = defines, + cflags = test_cflags) + autowaf.use_lib(bld, obj, 'SERD') + + # C++ build test + if bld.env.COMPILER_CXX: + obj = bld(features = 'cxx cxxprogram', + source = 'src/sordmm_test.cpp', + includes = ['.', './src'], + use = 'libsord_profiled', + lib = test_libs, + target = 'sordmm_test', + install_path = '', + defines = defines) + autowaf.use_lib(bld, obj, 'SERD') + + # Utilities + if bld.env.BUILD_UTILS: + for i in ['sordi', 'sord_validate']: + obj = bld(features = 'c cprogram', + source = 'src/%s.c' % i, + includes = ['.', './src'], + use = 'libsord', + lib = libs, + target = i, + install_path = '${BINDIR}', + defines = defines) + if not bld.env.BUILD_SHARED or bld.env.STATIC_PROGS: + obj.use = 'libsord_static' + if bld.env.STATIC_PROGS: + obj.env.SHLIB_MARKER = obj.env.STLIB_MARKER + obj.linkflags = ['-static', '-Wl,--start-group'] + autowaf.use_lib(bld, obj, 'SERD PCRE') + + # Documentation + autowaf.build_dox(bld, 'SORD', SORD_VERSION, top, out) + + # Man pages + bld.install_files('${MANDIR}/man1', bld.path.ant_glob('doc/*.1')) + + bld.add_post_fun(autowaf.run_ldconfig) + if bld.env.DOCS: + bld.add_post_fun(fix_docs) + +def lint(ctx): + subprocess.call('cpplint.py --filter=+whitespace/comments,-whitespace/tab,-whitespace/braces,-whitespace/labels,-build/header_guard,-readability/casting,-readability/todo,-build/include src/*.* sord/* src/zix/*.*', shell=True) + +def fix_docs(ctx): + if ctx.cmd == 'build': + autowaf.make_simple_dox(APPNAME) + +def upload_docs(ctx): + os.system('rsync -ravz --delete -e ssh build/doc/html/ drobilla@drobilla.net:~/drobilla.net/docs/sord/') + +def test(ctx): + blddir = autowaf.build_dir(APPNAME, 'tests') + try: + os.makedirs(blddir) + except: + pass + + for i in glob.glob(blddir + '/*.*'): + os.remove(i) + + srcdir = ctx.path.abspath() + orig_dir = os.path.abspath(os.curdir) + + os.chdir(srcdir) + + good_tests = glob.glob('tests/test-*.ttl') + good_tests.sort() + + os.chdir(orig_dir) + + autowaf.pre_test(ctx, APPNAME) + + os.environ['PATH'] = '.' + os.pathsep + os.getenv('PATH') + + nul = os.devnull + + autowaf.run_tests(ctx, APPNAME, [ + 'sordi_static file://%s/tests/manifest.ttl > %s' % (srcdir, nul), + 'sordi_static %s/tests/UTF-8.ttl > %s' % (srcdir, nul), + 'sordi_static -v > %s' % nul, + 'sordi_static -h > %s' % nul, + 'sordi_static -s " a <#Thingie> ." file:///test > %s' % nul, + 'sordi_static %s > %s' % (nul, nul)], + 0, name='sordi-cmd-good') + + autowaf.run_tests(ctx, APPNAME, [ + 'sordi_static > %s' % nul, + 'sordi_static ftp://example.org/unsupported.ttl > %s' % nul, + 'sordi_static -i > %s' % nul, + 'sordi_static -o > %s' % nul, + 'sordi_static -z > %s' % nul, + 'sordi_static -p > %s' % nul, + 'sordi_static -c > %s' % nul, + 'sordi_static -i illegal > %s' % nul, + 'sordi_static -o illegal > %s' % nul, + 'sordi_static -i turtle > %s' % nul, + 'sordi_static /no/such/file > %s' % nul], + 1, name='sordi-cmd-bad') + + autowaf.run_tests(ctx, APPNAME, ['sord_test']) + + commands = [] + for test in good_tests: + base_uri = 'http://www.w3.org/2001/sw/DataAccess/df1/' + test.replace('\\', '/') + commands += [ 'sordi_static "%s" "%s" > %s.out' % ( + os.path.join(srcdir, test), base_uri, test) ] + + autowaf.run_tests(ctx, APPNAME, commands, 0, name='good') + + Logs.pprint('BOLD', '\nVerifying turtle => ntriples') + for test in good_tests: + out_filename = test + '.out' + cmp_filename = srcdir + '/' + test.replace('.ttl', '.out') + if not os.access(out_filename, os.F_OK): + Logs.pprint('RED', 'FAIL: %s output is missing' % test) + else: + out_lines = sorted(open(out_filename).readlines()) + cmp_lines = sorted(open(cmp_filename).readlines()) + if out_lines != cmp_lines: + Logs.pprint('RED', 'FAIL: %s is incorrect' % out_filename) + else: + Logs.pprint('GREEN', 'Pass: %s' % test) + + autowaf.post_test(ctx, APPNAME) diff --git a/source/libs/lilv/sord.c b/source/libs/lilv/sord.c new file mode 100644 index 000000000..48536943d --- /dev/null +++ b/source/libs/lilv/sord.c @@ -0,0 +1,19 @@ +/* + * Carla static lilv code + * Copyright (C) 2012 Filipe Coelho + * + * 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 + * 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. + * + * For a full copy of the GNU General Public License see the COPYING file + */ + +#include "src/sord.c" +#include "src/syntax.c" diff --git a/source/libs/lilv/sratom-0.4.0/COPYING b/source/libs/lilv/sratom-0.4.0/COPYING new file mode 100644 index 000000000..f6a384335 --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/COPYING @@ -0,0 +1,13 @@ +Copyright 2012 David Robillard + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/source/libs/lilv/sratom-0.4.0/NEWS b/source/libs/lilv/sratom-0.4.0/NEWS new file mode 100644 index 000000000..59509da75 --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/NEWS @@ -0,0 +1,16 @@ +sratom (0.4.0) stable; + + * Correctly read objects with several rdf:type properties + * Support writing Object Atoms as top level descriptions if subject and + predicate are not given. + * Fix various hyper-strict warnings + * Upgrade to waf 1.7.2 + + -- David Robillard Thu, 23 Aug 2012 01:11:07 -0400 + +sratom (0.2.0) stable; + + * Initial release + + -- David Robillard Wed, 18 Apr 2012 15:14:11 -0400 + diff --git a/source/libs/lilv/sratom-0.4.0/README b/source/libs/lilv/sratom-0.4.0/README new file mode 100644 index 000000000..f9996650f --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/README @@ -0,0 +1,11 @@ +Sratom +------ + +Sratom is a library for serialising LV2 atoms to/from RDF, particularly the +Turtle syntax. + +More information about LV2 atoms can be found at + +More information about Sratom can be found at + + -- David Robillard diff --git a/source/libs/lilv/sratom-0.4.0/doc/reference.doxygen.in b/source/libs/lilv/sratom-0.4.0/doc/reference.doxygen.in new file mode 100644 index 000000000..ace4c90a9 --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/doc/reference.doxygen.in @@ -0,0 +1,1792 @@ +# Doxyfile 1.8.1.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = Sratom + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @SRATOM_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = @SRATOM_DOC_DIR@ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = NO + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = YES + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = YES + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = NO + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = NO + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = @SRATOM_SRCDIR@/doc/layout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @SRATOM_SRCDIR@/sratom/sratom.h + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = *.c + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = @SRATOM_SRCDIR@/doc/style.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 160 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = NO + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = NO + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/source/libs/lilv/sratom-0.4.0/doc/style.css b/source/libs/lilv/sratom-0.4.0/doc/style.css new file mode 100644 index 000000000..4c62b46a8 --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/doc/style.css @@ -0,0 +1,563 @@ +body { + font-size: medium; + font-family: sans-serif; +} + +#top { + background-color: #F3F3F3; + margin: 0; + padding: 0; + border-bottom: 1px solid #DDD; + margin-bottom: 1ex; + font-size: xx-large; + font-weight: bold; +} + +div.header { + display: none; +} + +.tabs { + display: none; +} + +h1 h2 h3 h4 h5 h6 { + font-weight: bold; +} + +h1 { + font-size: 164%; +} + +h2 { + font-size: 132%; +} + +h3 { + font-size: 124%; +} + +h4 { + font-size: 116%; +} + +h5 { + font-size: 108%; +} + +h6 { + font-size: 100%; +} + +p { + margin: 0 0 1ex 0; +} + +br { + display: none; +} + +dt { + font-weight: 700; +} + +div.multicol { +} + +p.startli,p.startdd,p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +caption { + font-weight: 700; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex,div.navtab { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex,div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ +a { + color: #3D8C57; + text-decoration: none; +} + +.contents a:visited { + color: #50755E; +} + +a:hover { + text-decoration: underline; +} + +a.qindexHL { + background-color: #9CAFD4; + color: #FFF; + border: 1px double #869DCA; +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4C4C4; + background-color: #F9F9F9; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: #000; + font-weight: 700; + color: #FFF; + margin-bottom: 3px; + margin-top: 3px; + padding: .2em; + border: thin solid #333; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: 700; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: #FFF; + color: #000; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: 700; + border: 1px solid #C4CFE5; + margin: 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0; + margin-bottom: 0; + padding: 0; +} + +div.center img { + border: 0; +} + +address.footer { + text-align: right; + padding: 0 0.25em 0.25em 0; +} + +img.footer { + border: 0; + vertical-align: middle; +} + +/* @group Code Colorization */ +span.keyword { + color: green; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #e08000; +} + +span.comment { + color: maroon; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: teal; +} + +span.vhdldigit { + color: #F0F; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: red; +} + +/* @end */ +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: 700; +} + +hr { + height: 0; + border: none; + border-top: 1px solid #DDD; + margin: 2em 0 1em; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ +table.memberdecls { + border-spacing: 0; + font-size: small; +} + +.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,.memTemplItemLeft,.memTemplItemRight,.memTemplParams { + background-color: #FBFBFB; + margin: 0; + padding: 0.25ex; +} + +.mdescLeft,.mdescRight { + color: #555; +} + +.memItemLeft,.memItemRight,.memTemplParams { + border-top: 1px solid #DDD; +} + +.memItemLeft,.memTemplItemLeft { + white-space: nowrap; + padding-left: 2em; +} + +.memTemplParams { + color: #464646; + white-space: nowrap; +} + +/* @end */ +/* @group Member Details */ +/* Styles for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: bold; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; + margin: 1ex 0 2ex 0; + border: 1px solid #CCC; +} + +.memname { + white-space: nowrap; + font-weight: bold; +} + +.memproto { + border-bottom: 1px solid #DDD; + padding: 0.5ex; + font-weight: bold; + background-color: #F3F3F3; +} + +.memdoc { + padding: 1ex; + background-color: #FBFBFB; + border-top-width: 0; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} + +.paramname em { + font-style: normal; +} + +/* @end */ +/* @group Directory (tree) */ +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin: 0; +} + +/* these are for tree view when used as main index */ +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse: collapse; + margin: 0.5ex; +} + +table.doxtable td,table.doxtable th { + border: 1px solid #DDD; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #F3F3F3; + color: #000; + padding-bottom: 4px; + padding-top: 5px; + text-align: left; + font-weight: bold; +} + +.tabsearch { + top: 0; + left: 10px; + height: 36px; + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul { + font-size: 11px; + height: 30px; + line-height: 30px; + color: #8AA0CC; + border: 1px solid #C2CDE4; + overflow: hidden; + margin: 0; + padding: 0; +} + +.navpath li { + list-style-type: none; + float: left; + padding-left: 10px; + padding-right: 15px; + color: #364D7C; +} + +.navpath a { + height: 32px; + display: block; + text-decoration: none; + outline: none; +} + +.navpath a:hover { + color: #6884BD; +} + +div.summary { + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a { + white-space: nowrap; +} + +div.header { + background-color: #F3F3F3; + margin: 0; + border-bottom: 1px solid #DDD; +} + +div.headertitle { + padding: 5px 5px 5px 10px; + font-size: 180%; + font-weight: bold; +} diff --git a/source/libs/lilv/sratom-0.4.0/sratom.pc.in b/source/libs/lilv/sratom-0.4.0/sratom.pc.in new file mode 100644 index 000000000..8f12445bc --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/sratom.pc.in @@ -0,0 +1,11 @@ +prefix=@PREFIX@ +exec_prefix=@EXEC_PREFIX@ +libdir=@LIBDIR@ +includedir=@INCLUDEDIR@ + +Name: Sratom +Version: @SRATOM_VERSION@ +Description: LV2 Atom RDF serialisation library +Requires: serd-0 sord-0 lv2 +Libs: -L${libdir} -lsratom-@SRATOM_MAJOR_VERSION@ +Cflags: -I${includedir}/sratom-@SRATOM_MAJOR_VERSION@ diff --git a/source/libs/lilv/sratom-0.4.0/sratom/sratom.h b/source/libs/lilv/sratom-0.4.0/sratom/sratom.h new file mode 100644 index 000000000..bf750dd8c --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/sratom/sratom.h @@ -0,0 +1,217 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file sratom.h API for Sratom, an LV2 Atom RDF serialisation library. +*/ + +#ifndef SRATOM_SRATOM_H +#define SRATOM_SRATOM_H + +#include + +#include "lv2/urid.h" +#include "lv2/atom.h" +#include "lv2/atom-forge.h" +#include "serd/serd.h" +#include "sord/sord.h" + +#ifdef SRATOM_SHARED +# ifdef _WIN32 +# define SRATOM_LIB_IMPORT __declspec(dllimport) +# define SRATOM_LIB_EXPORT __declspec(dllexport) +# else +# define SRATOM_LIB_IMPORT __attribute__((visibility("default"))) +# define SRATOM_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef SRATOM_INTERNAL +# define SRATOM_API SRATOM_LIB_EXPORT +# else +# define SRATOM_API SRATOM_LIB_IMPORT +# endif +#else +# define SRATOM_API +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + @defgroup sratom Sratom + An LV2 Atom RDF serialisation library. + @{ +*/ + +/** + Atom serialiser. +*/ +typedef struct SratomImpl Sratom; + +/** + Mode for reading resources to LV2 Objects. + + This affects how resources (which are either blank nodes or have URIs) are + read by sratom_read(), since they may be read as simple references (a URI or + blank node ID) or a complete description (an atom "Object"). + + Currently, blank nodes are always read as Objects, but support for reading + blank node IDs may be added in the future. +*/ +typedef enum { + /** + Read blank nodes as Objects, and named resources as URIs. + */ + SRATOM_OBJECT_MODE_BLANK, + + /** + Read blank nodes and the main subject as Objects, and any other named + resources as URIs. The "main subject" is the subject parameter passed + to sratom_read(); if this is a resource it will be read as an Object, + but all other named resources encountered will be read as URIs. + */ + SRATOM_OBJECT_MODE_BLANK_SUBJECT, +} SratomObjectMode; + +/** + Create a new Atom serialiser. +*/ +SRATOM_API +Sratom* +sratom_new(LV2_URID_Map* map); + +/** + Free an Atom serialisation. +*/ +SRATOM_API +void +sratom_free(Sratom* sratom); + +/** + Set the sink(s) where sratom will write its output. + + This must be called before calling sratom_write(). +*/ +SRATOM_API +void +sratom_set_sink(Sratom* sratom, + const char* base_uri, + SerdStatementSink sink, + SerdEndSink end_sink, + void* handle); + +/** + Write pretty numeric literals. + + If @p pretty_numbers is true, numbers will be written as pretty Turtle + literals, rather than string literals with precise types. The cost of this + is that the types might get fudged on a round-trip to RDF and back. +*/ +SRATOM_API +void +sratom_set_pretty_numbers(Sratom* sratom, + bool pretty_numbers); + +/** + Configure how resources will be read to form LV2 Objects. +*/ +SRATOM_API +void +sratom_set_object_mode(Sratom* sratom, + SratomObjectMode object_mode); + +/** + Write an Atom to RDF. + The serialised atom is written to the sink set by sratom_set_sink(). + @return 0 on success, or a non-zero error code otherwise. +*/ +SRATOM_API +int +sratom_write(Sratom* sratom, + LV2_URID_Unmap* unmap, + uint32_t flags, + const SerdNode* subject, + const SerdNode* predicate, + uint32_t type, + uint32_t size, + const void* body); + +/** + Read an Atom from RDF. + The resulting atom will be written to @p forge. +*/ +SRATOM_API +void +sratom_read(Sratom* sratom, + LV2_Atom_Forge* forge, + SordWorld* world, + SordModel* model, + const SordNode* subject); + +/** + Serialise an Atom to a Turtle string. + The returned string must be free()'d by the caller. +*/ +SRATOM_API +char* +sratom_to_turtle(Sratom* sratom, + LV2_URID_Unmap* unmap, + const char* base_uri, + const SerdNode* subject, + const SerdNode* predicate, + uint32_t type, + uint32_t size, + const void* body); + +/** + Read an Atom from a Turtle string. + The returned atom must be free()'d by the caller. +*/ +SRATOM_API +LV2_Atom* +sratom_from_turtle(Sratom* sratom, + const char* base_uri, + const SerdNode* subject, + const SerdNode* predicate, + const char* str); + +/** + A convenient resizing sink for LV2_Atom_Forge. + The handle must point to an initialized SerdChunk. +*/ +SRATOM_API +LV2_Atom_Forge_Ref +sratom_forge_sink(LV2_Atom_Forge_Sink_Handle handle, + const void* buf, + uint32_t size); + +/** + The corresponding deref function for sratom_forge_sink. +*/ +SRATOM_API +LV2_Atom* +sratom_forge_deref(LV2_Atom_Forge_Sink_Handle handle, + LV2_Atom_Forge_Ref ref); + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* SRATOM_SRATOM_H */ diff --git a/source/libs/lilv/sratom-0.4.0/src/sratom.c b/source/libs/lilv/sratom-0.4.0/src/sratom.c new file mode 100644 index 000000000..ca8de27e8 --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/src/sratom.c @@ -0,0 +1,790 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include +#include + +#include "lv2/atom-forge.h" +#include "lv2/atom-util.h" +#include "lv2/midi.h" + +#include "sratom/sratom.h" + +#define NS_RDF (const uint8_t*)"http://www.w3.org/1999/02/22-rdf-syntax-ns#" +#define NS_XSD (const uint8_t*)"http://www.w3.org/2001/XMLSchema#" + +#define USTR(str) ((const uint8_t*)(str)) + +typedef enum { + MODE_SUBJECT, + MODE_BODY, + MODE_SEQUENCE, +} ReadMode; + +struct SratomImpl { + LV2_URID_Map* map; + LV2_Atom_Forge forge; + LV2_URID atom_Event; + LV2_URID midi_MidiEvent; + unsigned next_id; + SerdNode base_uri; + SerdStatementSink write_statement; + SerdEndSink end_anon; + void* handle; + SratomObjectMode object_mode; + bool pretty_numbers; + struct { + SordNode* atom_childType; + SordNode* atom_frameTime; + SordNode* rdf_first; + SordNode* rdf_rest; + SordNode* rdf_type; + SordNode* rdf_value; + SordNode* xsd_base64Binary; + } nodes; +}; + +static void +read_node(Sratom* sratom, + LV2_Atom_Forge* forge, + SordWorld* world, + SordModel* model, + const SordNode* node, + ReadMode mode); + +SRATOM_API +Sratom* +sratom_new(LV2_URID_Map* map) +{ + Sratom* sratom = (Sratom*)malloc(sizeof(Sratom)); + sratom->map = map; + sratom->atom_Event = map->map(map->handle, LV2_ATOM__Event); + sratom->midi_MidiEvent = map->map(map->handle, LV2_MIDI__MidiEvent); + sratom->next_id = 0; + sratom->base_uri = SERD_NODE_NULL; + sratom->object_mode = SRATOM_OBJECT_MODE_BLANK; + sratom->pretty_numbers = false; + memset(&sratom->nodes, 0, sizeof(sratom->nodes)); + lv2_atom_forge_init(&sratom->forge, map); + return sratom; +} + +SRATOM_API +void +sratom_free(Sratom* sratom) +{ + free(sratom); +} + +SRATOM_API +void +sratom_set_sink(Sratom* sratom, + const char* base_uri, + SerdStatementSink write_statement, + SerdEndSink end_anon, + void* handle) +{ + if (base_uri) { + serd_node_free(&sratom->base_uri); + sratom->base_uri = serd_node_new_uri_from_string( + USTR(base_uri), NULL, NULL); + } + sratom->write_statement = write_statement; + sratom->end_anon = end_anon; + sratom->handle = handle; +} + +SRATOM_API +void +sratom_set_pretty_numbers(Sratom* sratom, + bool pretty_numbers) +{ + sratom->pretty_numbers = pretty_numbers; +} + +SRATOM_API +void +sratom_set_object_mode(Sratom* sratom, + SratomObjectMode object_mode) +{ + sratom->object_mode = object_mode; +} + +static void +gensym(SerdNode* out, char c, unsigned num) +{ + out->n_bytes = out->n_chars = snprintf( + (char*)out->buf, 10, "%c%u", c, num); +} + +static void +list_append(Sratom* sratom, + LV2_URID_Unmap* unmap, + unsigned* flags, + SerdNode* s, + SerdNode* p, + SerdNode* node, + uint32_t size, + uint32_t type, + const void* body) +{ + // Generate a list node + gensym(node, 'l', sratom->next_id); + sratom->write_statement(sratom->handle, *flags, NULL, + s, p, node, NULL, NULL); + + // _:node rdf:first value + *flags = SERD_LIST_CONT; + *p = serd_node_from_string(SERD_URI, NS_RDF "first"); + sratom_write(sratom, unmap, *flags, node, p, type, size, body); + + // Set subject to node and predicate to rdf:rest for next time + gensym(node, 'l', ++sratom->next_id); + *s = *node; + *p = serd_node_from_string(SERD_URI, NS_RDF "rest"); +} + +static void +list_end(SerdStatementSink sink, + void* handle, + unsigned* flags, + SerdNode* s, + SerdNode* p) +{ + // _:node rdf:rest rdf:nil + const SerdNode nil = serd_node_from_string(SERD_URI, NS_RDF "nil"); + sink(handle, *flags, NULL, s, p, &nil, NULL, NULL); +} + +static void +start_object(Sratom* sratom, + uint32_t* flags, + const SerdNode* subject, + const SerdNode* predicate, + const SerdNode* node, + const char* type) +{ + if (subject && predicate) { + sratom->write_statement(sratom->handle, *flags|SERD_ANON_O_BEGIN, NULL, + subject, predicate, node, NULL, NULL); + *flags |= SERD_ANON_CONT; + } + if (type) { + SerdNode p = serd_node_from_string(SERD_URI, NS_RDF "type"); + SerdNode o = serd_node_from_string(SERD_URI, USTR(type)); + sratom->write_statement(sratom->handle, *flags, NULL, + node, &p, &o, NULL, NULL); + } +} + +static bool +path_is_absolute(const char* path) +{ + return (path[0] == '/' + || (isalpha(path[0]) && path[1] == ':' + && (path[2] == '/' || path[2] == '\\'))); +} + +SRATOM_API +int +sratom_write(Sratom* sratom, + LV2_URID_Unmap* unmap, + uint32_t flags, + const SerdNode* subject, + const SerdNode* predicate, + uint32_t type_urid, + uint32_t size, + const void* body) +{ + const char* const type = unmap->unmap(unmap->handle, type_urid); + uint8_t idbuf[12] = "b0000000000"; + SerdNode id = serd_node_from_string(SERD_BLANK, idbuf); + uint8_t nodebuf[12] = "b0000000000"; + SerdNode node = serd_node_from_string(SERD_BLANK, nodebuf); + SerdNode object = SERD_NODE_NULL; + SerdNode datatype = SERD_NODE_NULL; + SerdNode language = SERD_NODE_NULL; + bool new_node = false; + if (type_urid == 0 && size == 0) { + object = serd_node_from_string(SERD_URI, USTR(NS_RDF "nil")); + } else if (type_urid == sratom->forge.String) { + object = serd_node_from_string(SERD_LITERAL, (const uint8_t*)body); + } else if (type_urid == sratom->forge.Chunk) { + datatype = serd_node_from_string(SERD_URI, NS_XSD "base64Binary"); + object = serd_node_new_blob(body, size, true); + } else if (type_urid == sratom->forge.Literal) { + const LV2_Atom_Literal_Body* lit = (const LV2_Atom_Literal_Body*)body; + const uint8_t* str = USTR(lit + 1); + object = serd_node_from_string(SERD_LITERAL, str); + if (lit->datatype) { + datatype = serd_node_from_string( + SERD_URI, USTR(unmap->unmap(unmap->handle, lit->datatype))); + } else if (lit->lang) { + const char* lang = unmap->unmap(unmap->handle, lit->lang); + const char* prefix = "http://lexvo.org/id/iso639-3/"; + const size_t prefix_len = strlen(prefix); + if (lang && !strncmp(lang, prefix, prefix_len)) { + language = serd_node_from_string( + SERD_LITERAL, USTR(lang + prefix_len)); + } else { + fprintf(stderr, "Unknown language URID %d\n", lit->lang); + } + } + } else if (type_urid == sratom->forge.URID) { + const uint32_t urid = *(const uint32_t*)body; + const uint8_t* str = USTR(unmap->unmap(unmap->handle, urid)); + object = serd_node_from_string(SERD_URI, str); + } else if (type_urid == sratom->forge.Path) { + const uint8_t* str = USTR(body); + if (path_is_absolute((const char*)str)) { + new_node = true; + object = serd_node_new_file_uri(str, NULL, NULL, false); + } else { + SerdURI base_uri = SERD_URI_NULL; + if (!sratom->base_uri.buf || + strncmp((const char*)sratom->base_uri.buf, "file://", 7)) { + fprintf(stderr, "warning: Relative path but base is not a file URI.\n"); + fprintf(stderr, "warning: Writing ambiguous atom:Path literal.\n"); + object = serd_node_from_string(SERD_LITERAL, str); + datatype = serd_node_from_string(SERD_URI, USTR(LV2_ATOM__Path)); + } else { + if (sratom->base_uri.buf) { + serd_uri_parse(sratom->base_uri.buf, &base_uri); + } + new_node = true; + SerdNode rel = serd_node_new_file_uri(str, NULL, NULL, false); + object = serd_node_new_uri_from_node(&rel, &base_uri, NULL); + serd_node_free(&rel); + } + } + } else if (type_urid == sratom->forge.URI) { + const uint8_t* str = USTR(body); + object = serd_node_from_string(SERD_URI, str); + } else if (type_urid == sratom->forge.Int) { + new_node = true; + object = serd_node_new_integer(*(const int32_t*)body); + datatype = serd_node_from_string(SERD_URI, (sratom->pretty_numbers) + ? NS_XSD "integer" : NS_XSD "int"); + } else if (type_urid == sratom->forge.Long) { + new_node = true; + object = serd_node_new_integer(*(const int64_t*)body); + datatype = serd_node_from_string(SERD_URI, (sratom->pretty_numbers) + ? NS_XSD "integer" : NS_XSD "long"); + } else if (type_urid == sratom->forge.Float) { + new_node = true; + object = serd_node_new_decimal(*(const float*)body, 8); + datatype = serd_node_from_string(SERD_URI, (sratom->pretty_numbers) + ? NS_XSD "decimal" : NS_XSD "float"); + } else if (type_urid == sratom->forge.Double) { + new_node = true; + object = serd_node_new_decimal(*(const double*)body, 16); + datatype = serd_node_from_string(SERD_URI, (sratom->pretty_numbers) + ? NS_XSD "decimal" : NS_XSD "double"); + } else if (type_urid == sratom->forge.Bool) { + const int32_t val = *(const int32_t*)body; + datatype = serd_node_from_string(SERD_URI, NS_XSD "boolean"); + object = serd_node_from_string(SERD_LITERAL, + USTR(val ? "true" : "false")); + } else if (type_urid == sratom->midi_MidiEvent) { + new_node = true; + datatype = serd_node_from_string(SERD_URI, USTR(LV2_MIDI__MidiEvent)); + uint8_t* str = (uint8_t*)calloc(size * 2 + 1, 1); + for (uint32_t i = 0; i < size; ++i) { + snprintf((char*)str + (2 * i), size * 2 + 1, "%02X", + (unsigned)(uint8_t)*((const uint8_t*)body + i)); + } + object = serd_node_from_string(SERD_LITERAL, USTR(str)); + } else if (type_urid == sratom->atom_Event) { + const LV2_Atom_Event* ev = (const LV2_Atom_Event*)body; + gensym(&id, 'e', sratom->next_id++); + start_object(sratom, &flags, subject, predicate, &id, NULL); + // TODO: beat time + SerdNode time = serd_node_new_integer(ev->time.frames); + SerdNode p = serd_node_from_string(SERD_URI, + USTR(LV2_ATOM__frameTime)); + datatype = serd_node_from_string(SERD_URI, NS_XSD "decimal"); + sratom->write_statement(sratom->handle, SERD_ANON_CONT, NULL, + &id, &p, &time, &datatype, &language); + serd_node_free(&time); + + p = serd_node_from_string(SERD_URI, NS_RDF "value"); + sratom_write(sratom, unmap, SERD_ANON_CONT, &id, &p, + ev->body.type, ev->body.size, LV2_ATOM_BODY(&ev->body)); + if (sratom->end_anon) { + sratom->end_anon(sratom->handle, &id); + } + } else if (type_urid == sratom->forge.Tuple) { + gensym(&id, 't', sratom->next_id++); + start_object(sratom, &flags, subject, predicate, &id, type); + SerdNode p = serd_node_from_string(SERD_URI, NS_RDF "value"); + flags |= SERD_LIST_O_BEGIN; + LV2_ATOM_TUPLE_BODY_FOREACH(body, size, i) { + list_append(sratom, unmap, &flags, &id, &p, &node, + i->size, i->type, LV2_ATOM_BODY(i)); + } + list_end(sratom->write_statement, sratom->handle, &flags, &id, &p); + if (sratom->end_anon) { + sratom->end_anon(sratom->handle, &id); + } + } else if (type_urid == sratom->forge.Vector) { + const LV2_Atom_Vector_Body* vec = (const LV2_Atom_Vector_Body*)body; + gensym(&id, 'v', sratom->next_id++); + start_object(sratom, &flags, subject, predicate, &id, type); + SerdNode p = serd_node_from_string(SERD_URI, (const uint8_t*)LV2_ATOM__childType); + SerdNode child_type = serd_node_from_string( + SERD_URI, (const uint8_t*)unmap->unmap(unmap->handle, vec->child_type)); + sratom->write_statement(sratom->handle, flags, NULL, &id, &p, &child_type, NULL, NULL); + p = serd_node_from_string(SERD_URI, NS_RDF "value"); + flags |= SERD_LIST_O_BEGIN; + for (const char* i = (const char*)(vec + 1); + i < (const char*)vec + size; + i += vec->child_size) { + list_append(sratom, unmap, &flags, &id, &p, &node, + vec->child_size, vec->child_type, i); + } + list_end(sratom->write_statement, sratom->handle, &flags, &id, &p); + if (sratom->end_anon) { + sratom->end_anon(sratom->handle, &id); + } + } else if (type_urid == sratom->forge.Blank || + type_urid == sratom->forge.Resource) { + const LV2_Atom_Object_Body* obj = (const LV2_Atom_Object_Body*)body; + const char* otype = unmap->unmap(unmap->handle, + obj->otype); + if (type_urid == sratom->forge.Blank) { + gensym(&id, 'b', sratom->next_id++); + start_object(sratom, &flags, subject, predicate, &id, otype); + } else { + id = serd_node_from_string( + SERD_URI, (const uint8_t*)unmap->unmap(unmap->handle, obj->id)); + flags = 0; + start_object(sratom, &flags, NULL, NULL, &id, otype); + } + LV2_ATOM_OBJECT_BODY_FOREACH(obj, size, prop) { + const char* const key = unmap->unmap(unmap->handle, prop->key); + SerdNode pred = serd_node_from_string(SERD_URI, USTR(key)); + sratom_write(sratom, unmap, flags, &id, &pred, + prop->value.type, prop->value.size, + LV2_ATOM_BODY(&prop->value)); + } + if (sratom->end_anon && (flags & SERD_ANON_CONT)) { + sratom->end_anon(sratom->handle, &id); + } + } else if (type_urid == sratom->forge.Sequence) { + const LV2_Atom_Sequence_Body* seq = (const LV2_Atom_Sequence_Body*)body; + gensym(&id, 'v', sratom->next_id++); + start_object(sratom, &flags, subject, predicate, &id, type); + SerdNode p = serd_node_from_string(SERD_URI, NS_RDF "value"); + flags |= SERD_LIST_O_BEGIN; + LV2_ATOM_SEQUENCE_BODY_FOREACH(seq, size, ev) { + list_append(sratom, unmap, &flags, &id, &p, &node, + sizeof(LV2_Atom_Event) + ev->body.size, + sratom->atom_Event, + ev); + } + list_end(sratom->write_statement, sratom->handle, &flags, &id, &p); + if (sratom->end_anon && subject && predicate) { + sratom->end_anon(sratom->handle, &id); + } + } else { + gensym(&id, 'b', sratom->next_id++); + start_object(sratom, &flags, subject, predicate, &id, type); + SerdNode p = serd_node_from_string(SERD_URI, NS_RDF "value"); + SerdNode o = serd_node_new_blob(body, size, true); + datatype = serd_node_from_string(SERD_URI, NS_XSD "base64Binary"); + sratom->write_statement(sratom->handle, flags, NULL, &id, &p, &o, &datatype, NULL); + if (sratom->end_anon && subject && predicate) { + sratom->end_anon(sratom->handle, &id); + } + serd_node_free(&o); + } + + if (object.buf) { + sratom->write_statement(sratom->handle, flags, NULL, + subject, predicate, &object, &datatype, &language); + } + + if (new_node) { + serd_node_free(&object); + } + + return 0; +} + +SRATOM_API +char* +sratom_to_turtle(Sratom* sratom, + LV2_URID_Unmap* unmap, + const char* base_uri, + const SerdNode* subject, + const SerdNode* predicate, + uint32_t type, + uint32_t size, + const void* body) +{ + SerdURI buri = SERD_URI_NULL; + SerdNode base = serd_node_new_uri_from_string(USTR(base_uri), NULL, &buri); + SerdEnv* env = serd_env_new(&base); + SerdChunk str = { NULL, 0 }; + + serd_env_set_prefix_from_strings(env, USTR("midi"), + USTR(LV2_MIDI_PREFIX)); + serd_env_set_prefix_from_strings(env, USTR("atom"), + USTR(LV2_ATOM_URI "#")); + serd_env_set_prefix_from_strings(env, USTR("rdf"), NS_RDF); + serd_env_set_prefix_from_strings(env, USTR("xsd"), NS_XSD); + serd_env_set_prefix_from_strings(env, USTR("eg"), + USTR("http://example.org/")); + + SerdWriter* writer = serd_writer_new( + SERD_TURTLE, + (SerdStyle)(SERD_STYLE_ABBREVIATED | + SERD_STYLE_RESOLVED | + SERD_STYLE_CURIED), + env, &buri, serd_chunk_sink, &str); + + // Write @prefix directives + serd_env_foreach(env, + (SerdPrefixSink)serd_writer_set_prefix, + writer); + + sratom_set_sink(sratom, base_uri, + (SerdStatementSink)serd_writer_write_statement, + (SerdEndSink)serd_writer_end_anon, + writer); + sratom_write(sratom, unmap, SERD_EMPTY_S, + subject, predicate, type, size, body); + serd_writer_finish(writer); + + serd_writer_free(writer); + serd_env_free(env); + return (char*)serd_chunk_sink_finish(&str); +} + +static const SordNode* +get_object(SordModel* model, + const SordNode* subject, + const SordNode* predicate) +{ + const SordNode* object = NULL; + SordQuad q = { subject, predicate, 0, 0 }; + SordIter* i = sord_find(model, q); + if (!sord_iter_end(i)) { + SordQuad quad; + sord_iter_get(i, quad); + object = quad[SORD_OBJECT]; + } + sord_iter_free(i); + return object; +} + +static void +read_list_value(Sratom* sratom, + LV2_Atom_Forge* forge, + SordWorld* world, + SordModel* model, + const SordNode* node, + ReadMode mode) +{ + const SordNode* first = get_object(model, node, sratom->nodes.rdf_first); + const SordNode* rest = get_object(model, node, sratom->nodes.rdf_rest); + if (first && rest) { + read_node(sratom, forge, world, model, first, mode); + read_list_value(sratom, forge, world, model, rest, mode); + } +} + +static void +read_resource(Sratom* sratom, + LV2_Atom_Forge* forge, + SordWorld* world, + SordModel* model, + const SordNode* node, + LV2_URID otype) +{ + LV2_URID_Map* map = sratom->map; + SordQuad q = { node, NULL, NULL, NULL }; + SordIter* i = sord_find(model, q); + SordQuad match; + for (; !sord_iter_end(i); sord_iter_next(i)) { + sord_iter_get(i, match); + const SordNode* p = match[SORD_PREDICATE]; + const SordNode* o = match[SORD_OBJECT]; + const char* p_uri = (const char*)sord_node_get_string(p); + uint32_t p_urid = map->map(map->handle, p_uri); + if (!(sord_node_equals(p, sratom->nodes.rdf_type) && + sord_node_get_type(o) == SORD_URI && + map->map(map->handle, (const char*)sord_node_get_string(o)) == otype)) { + lv2_atom_forge_property_head(forge, p_urid, 0); + read_node(sratom, forge, world, model, o, MODE_BODY); + } + } + sord_iter_free(i); +} + +static uint32_t +atom_size(Sratom* sratom, uint32_t type_urid) +{ + if (type_urid == sratom->forge.Int) { + return sizeof(int32_t); + } else if (type_urid == sratom->forge.Long) { + return sizeof(int64_t); + } else if (type_urid == sratom->forge.Float) { + return sizeof(float); + } else if (type_urid == sratom->forge.Double) { + return sizeof(double); + } else if (type_urid == sratom->forge.Bool) { + return sizeof(int32_t); + } else if (type_urid == sratom->forge.URID) { + return sizeof(uint32_t); + } else { + return 0; + } +} + +static void +read_node(Sratom* sratom, + LV2_Atom_Forge* forge, + SordWorld* world, + SordModel* model, + const SordNode* node, + ReadMode mode) +{ + LV2_URID_Map* map = sratom->map; + size_t len = 0; + const char* str = (const char*)sord_node_get_string_counted(node, &len); + if (sord_node_get_type(node) == SORD_LITERAL) { + char* endptr; + SordNode* datatype = sord_node_get_datatype(node); + const char* language = sord_node_get_language(node); + if (datatype) { + const char* type_uri = (const char*)sord_node_get_string(datatype); + if (!strcmp(type_uri, (const char*)NS_XSD "int") || + !strcmp(type_uri, (const char*)NS_XSD "integer")) { + lv2_atom_forge_int(forge, strtol(str, &endptr, 10)); + } else if (!strcmp(type_uri, (const char*)NS_XSD "long")) { + lv2_atom_forge_long(forge, strtol(str, &endptr, 10)); + } else if (!strcmp(type_uri, (const char*)NS_XSD "float") || + !strcmp(type_uri, (const char*)NS_XSD "decimal")) { + lv2_atom_forge_float(forge, serd_strtod(str, &endptr)); + } else if (!strcmp(type_uri, (const char*)NS_XSD "double")) { + lv2_atom_forge_double(forge, serd_strtod(str, &endptr)); + } else if (!strcmp(type_uri, (const char*)NS_XSD "boolean")) { + lv2_atom_forge_bool(forge, !strcmp(str, "true")); + } else if (!strcmp(type_uri, (const char*)NS_XSD "base64Binary")) { + size_t size = 0; + void* body = serd_base64_decode(USTR(str), len, &size); + lv2_atom_forge_atom(forge, size, forge->Chunk); + lv2_atom_forge_write(forge, body, size); + free(body); + } else if (!strcmp(type_uri, LV2_ATOM__Path)) { + lv2_atom_forge_path(forge, str, len); + } else if (!strcmp(type_uri, LV2_MIDI__MidiEvent)) { + lv2_atom_forge_atom(forge, len / 2, sratom->midi_MidiEvent); + for (const char* s = str; s < str + len; s += 2) { + unsigned num; + sscanf(s, "%2X", &num); + assert(num < UINT8_MAX); + const uint8_t c = num; + lv2_atom_forge_raw(forge, &c, 1); + } + lv2_atom_forge_pad(forge, len / 2); + } else { + lv2_atom_forge_literal( + forge, str, len, + sratom->map->map(sratom->map->handle, type_uri), + 0); + } + } else if (language) { + const char* prefix = "http://lexvo.org/id/iso639-3/"; + const size_t lang_len = strlen(prefix) + strlen(language); + char* lang_uri = (char*)calloc(lang_len + 1, 1); + snprintf(lang_uri, lang_len + 1, "%s%s", prefix, language); + lv2_atom_forge_literal( + forge, str, len, 0, + sratom->map->map(sratom->map->handle, lang_uri)); + free(lang_uri); + } else { + lv2_atom_forge_string(forge, str, len); + } + } else if (sord_node_get_type(node) == SORD_URI && + !(sratom->object_mode == SRATOM_OBJECT_MODE_BLANK_SUBJECT + && mode == MODE_SUBJECT)) { + if (!strcmp(str, (const char*)NS_RDF "nil")) { + lv2_atom_forge_atom(forge, 0, 0); + } else if (!strncmp(str, "file://", 7)) { + uint8_t* path = serd_file_uri_parse((const uint8_t*)str, NULL); + lv2_atom_forge_path(forge, (const char*)path, strlen((const char*)path)); + free(path); + } else { + lv2_atom_forge_urid(forge, map->map(map->handle, str)); + } + } else { + const SordNode* type = get_object(model, node, sratom->nodes.rdf_type); + const SordNode* value = get_object(model, node, sratom->nodes.rdf_value); + + const uint8_t* type_uri = NULL; + uint32_t type_urid = 0; + if (type) { + type_uri = sord_node_get_string(type); + type_urid = map->map(map->handle, (const char*)type_uri); + } + + LV2_Atom_Forge_Frame frame = { 0, 0 }; + if (mode == MODE_SEQUENCE) { + const SordNode* frame_time = get_object( + model, node, sratom->nodes.atom_frameTime); + const char* frame_time_str = frame_time + ? (const char*)sord_node_get_string(frame_time) + : ""; + lv2_atom_forge_frame_time(forge, serd_strtod(frame_time_str, NULL)); + read_node(sratom, forge, world, model, value, MODE_BODY); + } else if (type_urid == sratom->forge.Tuple) { + lv2_atom_forge_tuple(forge, &frame); + read_list_value(sratom, forge, world, model, value, MODE_BODY); + } else if (type_urid == sratom->forge.Sequence) { + lv2_atom_forge_sequence_head(forge, &frame, 0); + read_list_value(sratom, forge, world, model, value, MODE_SEQUENCE); + } else if (type_urid == sratom->forge.Vector) { + const SordNode* child_type_node = get_object( + model, node, sratom->nodes.atom_childType); + uint32_t child_type = map->map( + map->handle, (const char*)sord_node_get_string(child_type_node)); + uint32_t child_size = atom_size(sratom, child_type); + if (child_size > 0) { + lv2_atom_forge_vector_head(forge, &frame, child_size, child_type); + read_list_value(sratom, forge, world, model, value, MODE_BODY); + } + } else if (value && sord_node_equals(sord_node_get_datatype(value), + sratom->nodes.xsd_base64Binary)) { + size_t vlen = 0; + const uint8_t* vstr = sord_node_get_string_counted(value, &vlen); + size_t size = 0; + void* body = serd_base64_decode(vstr, vlen, &size); + lv2_atom_forge_atom(forge, size, type_urid); + lv2_atom_forge_write(forge, body, size); + free(body); + } else if (sord_node_get_type(node) == SORD_URI) { + lv2_atom_forge_resource( + forge, &frame, map->map(map->handle, str), type_urid); + read_resource(sratom, forge, world, model, node, type_urid); + } else { + lv2_atom_forge_blank(forge, &frame, sratom->next_id++, type_urid); + read_resource(sratom, forge, world, model, node, type_urid); + } + if (frame.ref) { + lv2_atom_forge_pop(forge, &frame); + } + } +} + +SRATOM_API +void +sratom_read(Sratom* sratom, + LV2_Atom_Forge* forge, + SordWorld* world, + SordModel* model, + const SordNode* node) +{ + sratom->nodes.atom_childType = sord_new_uri(world, USTR(LV2_ATOM__childType)); + sratom->nodes.atom_frameTime = sord_new_uri(world, USTR(LV2_ATOM__frameTime)); + sratom->nodes.rdf_first = sord_new_uri(world, NS_RDF "first"); + sratom->nodes.rdf_rest = sord_new_uri(world, NS_RDF "rest"); + sratom->nodes.rdf_type = sord_new_uri(world, NS_RDF "type"); + sratom->nodes.rdf_value = sord_new_uri(world, NS_RDF "value"); + sratom->nodes.xsd_base64Binary = sord_new_uri(world, NS_XSD "base64Binary"); + + sratom->next_id = 1; + read_node(sratom, forge, world, model, node, MODE_SUBJECT); + + sord_node_free(world, sratom->nodes.xsd_base64Binary); + sord_node_free(world, sratom->nodes.rdf_value); + sord_node_free(world, sratom->nodes.rdf_type); + sord_node_free(world, sratom->nodes.rdf_rest); + sord_node_free(world, sratom->nodes.rdf_first); + sord_node_free(world, sratom->nodes.atom_frameTime); + sord_node_free(world, sratom->nodes.atom_childType); + memset(&sratom->nodes, 0, sizeof(sratom->nodes)); +} + +SRATOM_API +LV2_Atom_Forge_Ref +sratom_forge_sink(LV2_Atom_Forge_Sink_Handle handle, + const void* buf, + uint32_t size) +{ + SerdChunk* chunk = (SerdChunk*)handle; + const LV2_Atom_Forge_Ref ref = chunk->len + 1; + serd_chunk_sink(buf, size, chunk); + return ref; +} + +SRATOM_API +LV2_Atom* +sratom_forge_deref(LV2_Atom_Forge_Sink_Handle handle, LV2_Atom_Forge_Ref ref) +{ + SerdChunk* chunk = (SerdChunk*)handle; + return (LV2_Atom*)(chunk->buf + ref - 1); +} + +SRATOM_API +LV2_Atom* +sratom_from_turtle(Sratom* sratom, + const char* base_uri, + const SerdNode* subject, + const SerdNode* predicate, + const char* str) +{ + SerdChunk out = { NULL, 0 }; + SerdNode base = serd_node_new_uri_from_string(USTR(base_uri), NULL, NULL); + SordWorld* world = sord_world_new(); + SordModel* model = sord_new(world, SORD_SPO, false); + SerdEnv* env = serd_env_new(&base); + SerdReader* reader = sord_new_reader(model, env, SERD_TURTLE, NULL); + + if (!serd_reader_read_string(reader, (const uint8_t*)str)) { + SordNode* s = sord_node_from_serd_node(world, env, subject, 0, 0); + lv2_atom_forge_set_sink( + &sratom->forge, sratom_forge_sink, sratom_forge_deref, &out); + if (subject && predicate) { + SordNode* p = sord_node_from_serd_node(world, env, predicate, 0, 0); + SordQuad q = { s, p, 0, 0 }; + SordIter* i = sord_find(model, q); + if (!sord_iter_end(i)) { + SordQuad result; + sord_iter_get(i, result); + sratom_read(sratom, &sratom->forge, world, model, result[SORD_OBJECT]); + } else { + fprintf(stderr, "Failed to find node\n"); + } + sord_iter_free(i); + } else { + sratom_read(sratom, &sratom->forge, world, model, s); + } + } else { + fprintf(stderr, "Failed to read Turtle\n"); + } + + serd_reader_free(reader); + serd_env_free(env); + sord_free(model); + sord_world_free(world); + + return (LV2_Atom*)out.buf; +} diff --git a/source/libs/lilv/sratom-0.4.0/tests/sratom_test.c b/source/libs/lilv/sratom-0.4.0/tests/sratom_test.c new file mode 100644 index 000000000..f76c24659 --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/tests/sratom_test.c @@ -0,0 +1,292 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include +#include +#include +#include + +#include "lv2/lv2plug.in/ns/ext/atom/forge.h" +#include "lv2/lv2plug.in/ns/ext/atom/util.h" +#include "lv2/lv2plug.in/ns/ext/midi/midi.h" +#include "sratom/sratom.h" + +#define NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + +#define USTR(s) ((const uint8_t*)(s)) + +static char** uris = NULL; +static size_t n_uris = 0; + +static char* +copy_string(const char* str) +{ + const size_t len = strlen(str); + char* dup = (char*)malloc(len + 1); + memcpy(dup, str, len + 1); + return dup; +} + +static LV2_URID +urid_map(LV2_URID_Map_Handle handle, const char* uri) +{ + for (size_t i = 0; i < n_uris; ++i) { + if (!strcmp(uris[i], uri)) { + return i + 1; + } + } + + uris = (char**)realloc(uris, ++n_uris * sizeof(char*)); + uris[n_uris - 1] = copy_string(uri); + return n_uris; +} + +static const char* +urid_unmap(LV2_URID_Unmap_Handle handle, + LV2_URID urid) +{ + if (urid > 0 && urid <= n_uris) { + return uris[urid - 1]; + } + return NULL; +} + +static int +test_fail(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stderr, "error: "); + vfprintf(stderr, fmt, args); + va_end(args); + return 1; +} + +static int +test(bool top_level) +{ + LV2_URID_Map map = { NULL, urid_map }; + LV2_URID_Unmap unmap = { NULL, urid_unmap }; + LV2_Atom_Forge forge; + lv2_atom_forge_init(&forge, &map); + + Sratom* sratom = sratom_new(&map); + sratom_set_object_mode( + sratom, + top_level ? SRATOM_OBJECT_MODE_BLANK_SUBJECT : SRATOM_OBJECT_MODE_BLANK); + + LV2_URID eg_Object = urid_map(NULL, "http://example.org/Object"); + LV2_URID eg_one = urid_map(NULL, "http://example.org/a-one"); + LV2_URID eg_two = urid_map(NULL, "http://example.org/b-two"); + LV2_URID eg_three = urid_map(NULL, "http://example.org/c-three"); + LV2_URID eg_four = urid_map(NULL, "http://example.org/d-four"); + LV2_URID eg_true = urid_map(NULL, "http://example.org/e-true"); + LV2_URID eg_false = urid_map(NULL, "http://example.org/f-false"); + LV2_URID eg_path = urid_map(NULL, "http://example.org/g-path"); + LV2_URID eg_urid = urid_map(NULL, "http://example.org/h-urid"); + LV2_URID eg_string = urid_map(NULL, "http://example.org/i-string"); + LV2_URID eg_langlit = urid_map(NULL, "http://example.org/j-langlit"); + LV2_URID eg_typelit = urid_map(NULL, "http://example.org/k-typelit"); + LV2_URID eg_null = urid_map(NULL, "http://example.org/l-null"); + LV2_URID eg_chunk = urid_map(NULL, "http://example.org/m-chunk"); + LV2_URID eg_blob = urid_map(NULL, "http://example.org/n-blob"); + LV2_URID eg_blank = urid_map(NULL, "http://example.org/o-blank"); + LV2_URID eg_tuple = urid_map(NULL, "http://example.org/p-tuple"); + LV2_URID eg_vector = urid_map(NULL, "http://example.org/q-vector"); + LV2_URID eg_seq = urid_map(NULL, "http://example.org/r-seq"); + + uint8_t buf[1024]; + lv2_atom_forge_set_buffer(&forge, buf, sizeof(buf)); + + const char* obj_uri = "http://example.org/obj"; + LV2_URID obj_id = urid_map(NULL, obj_uri); + LV2_Atom_Forge_Frame obj_frame; + if (top_level) { + lv2_atom_forge_resource(&forge, &obj_frame, obj_id, eg_Object); + } else { + lv2_atom_forge_blank(&forge, &obj_frame, 1, eg_Object); + } + LV2_Atom* obj = lv2_atom_forge_deref(&forge, obj_frame.ref); + + // eg_one = (Int32)1 + lv2_atom_forge_property_head(&forge, eg_one, 0); + lv2_atom_forge_int(&forge, 1); + + // eg_two = (Int64)2 + lv2_atom_forge_property_head(&forge, eg_two, 0); + lv2_atom_forge_long(&forge, 2); + + // eg_three = (Float)3.0 + lv2_atom_forge_property_head(&forge, eg_three, 0); + lv2_atom_forge_float(&forge, 3.0f); + + // eg_four = (Double)4.0 + lv2_atom_forge_property_head(&forge, eg_four, 0); + lv2_atom_forge_double(&forge, 4.0); + + // eg_true = (Bool)1 + lv2_atom_forge_property_head(&forge, eg_true, 0); + lv2_atom_forge_bool(&forge, true); + + // eg_false = (Bool)0 + lv2_atom_forge_property_head(&forge, eg_false, 0); + lv2_atom_forge_bool(&forge, false); + + // eg_path = (Path)"/absolute/path" + const char* pstr = "/absolute/path"; + const size_t pstr_len = strlen(pstr); + lv2_atom_forge_property_head(&forge, eg_path, 0); + lv2_atom_forge_path(&forge, pstr, pstr_len); + + // eg_urid = (URID)"http://example.org/value" + LV2_URID eg_value = urid_map(NULL, "http://example.org/value"); + lv2_atom_forge_property_head(&forge, eg_urid, 0); + lv2_atom_forge_urid(&forge, eg_value); + + // eg_string = (String)"hello" + lv2_atom_forge_property_head(&forge, eg_string, 0); + lv2_atom_forge_string(&forge, "hello", strlen("hello")); + + // eg_langlit = (Literal)"bonjour"@fr + lv2_atom_forge_property_head(&forge, eg_langlit, 0); + lv2_atom_forge_literal( + &forge, "bonjour", strlen("bonjour"), + 0, urid_map(NULL, "http://lexvo.org/id/iso639-3/fra")); + + // eg_typelit = (Literal)"bonjour"@fr + lv2_atom_forge_property_head(&forge, eg_typelit, 0); + lv2_atom_forge_literal( + &forge, "value", strlen("value"), + urid_map(NULL, "http://example.org/Type"), 0); + + // eg_null = null + lv2_atom_forge_property_head(&forge, eg_null, 0); + lv2_atom_forge_atom(&forge, 0, 0); + + // eg_chunk = 0xBEEFDEAD + uint8_t chunk_buf[] = { 0xBE, 0xEF, 0xDE, 0xAD }; + lv2_atom_forge_property_head(&forge, eg_chunk, 0); + lv2_atom_forge_atom(&forge, sizeof(chunk_buf), forge.Chunk); + lv2_atom_forge_write(&forge, chunk_buf, sizeof(chunk_buf)); + + // eg_blob = 0xDEADBEEF + uint32_t blob_type = map.map(map.handle, "http://example.org/Blob"); + uint8_t blob_buf[] = { 0xDE, 0xAD, 0xBE, 0xEF }; + lv2_atom_forge_property_head(&forge, eg_blob, 0); + lv2_atom_forge_atom(&forge, sizeof(blob_buf), blob_type); + lv2_atom_forge_write(&forge, blob_buf, sizeof(blob_buf)); + + // eg_blank = [ a ] + lv2_atom_forge_property_head(&forge, eg_blank, 0); + LV2_Atom_Forge_Frame blank_frame; + lv2_atom_forge_blank(&forge, &blank_frame, top_level ? 1 : 2, eg_Object); + lv2_atom_forge_pop(&forge, &blank_frame); + + // eg_tuple = "foo",true + lv2_atom_forge_property_head(&forge, eg_tuple, 0); + LV2_Atom_Forge_Frame tuple_frame; + lv2_atom_forge_tuple(&forge, &tuple_frame); + lv2_atom_forge_string(&forge, "foo", strlen("foo")); + lv2_atom_forge_bool(&forge, true); + lv2_atom_forge_pop(&forge, &tuple_frame); + + // eg_vector = (Vector)1,2,3,4 + lv2_atom_forge_property_head(&forge, eg_vector, 0); + int32_t elems[] = { 1, 2, 3, 4 }; + lv2_atom_forge_vector(&forge, 4, forge.Int, sizeof(int32_t), elems); + + // eg_seq = (Sequence)1, 2 + LV2_URID midi_midiEvent = map.map(map.handle, LV2_MIDI__MidiEvent); + lv2_atom_forge_property_head(&forge, eg_seq, 0); + LV2_Atom_Forge_Frame seq_frame; + lv2_atom_forge_sequence_head(&forge, &seq_frame, 0); + + const uint8_t ev1[3] = { 0x90, 0x1A, 0x1 }; + lv2_atom_forge_frame_time(&forge, 1); + lv2_atom_forge_atom(&forge, sizeof(ev1), midi_midiEvent); + lv2_atom_forge_raw(&forge, ev1, sizeof(ev1)); + lv2_atom_forge_pad(&forge, sizeof(ev1)); + + const uint8_t ev2[3] = { 0x90, 0x2B, 0x2 }; + lv2_atom_forge_frame_time(&forge, 3); + lv2_atom_forge_atom(&forge, sizeof(ev2), midi_midiEvent); + lv2_atom_forge_raw(&forge, ev2, sizeof(ev2)); + lv2_atom_forge_pad(&forge, sizeof(ev2)); + + lv2_atom_forge_pop(&forge, &seq_frame); + lv2_atom_forge_pop(&forge, &obj_frame); + + const char* base_uri = "file:///tmp/base/"; + + SerdNode s = serd_node_from_string(SERD_URI, USTR("http://example.org/obj")); + SerdNode p = serd_node_from_string(SERD_URI, USTR(NS_RDF "value")); + + SerdNode* subj = top_level ? NULL : &s; + SerdNode* pred = top_level ? NULL : &p; + + char* outstr = sratom_to_turtle( + sratom, &unmap, base_uri, subj, pred, + obj->type, obj->size, LV2_ATOM_BODY(obj)); + + printf("# Atom => Turtle\n\n%s", outstr); + + LV2_Atom* parsed = NULL; + if (top_level) { + SerdNode o= serd_node_from_string(SERD_URI, (const uint8_t*)obj_uri); + parsed = sratom_from_turtle(sratom, base_uri, &o, NULL, outstr); + } else { + parsed = sratom_from_turtle(sratom, base_uri, subj, pred, outstr); + } + if (!lv2_atom_equals(obj, parsed)) { + return test_fail("Parsed atom does not match original\n"); + } + + char* instr = sratom_to_turtle( + sratom, &unmap, base_uri, subj, pred, + parsed->type, parsed->size, LV2_ATOM_BODY(parsed)); + printf("# Turtle => Atom\n\n%s", instr); + + if (strcmp(outstr, instr)) { + return test_fail("Re-serialised string differs from original\n"); + } + + printf("All tests passed.\n"); + + free(parsed); + free(instr); + free(outstr); + sratom_free(sratom); + for (uint32_t i = 0; i < n_uris; ++i) { + free(uris[i]); + } + + free(uris); + uris = NULL; + n_uris = 0; + + return 0; +} + +int +main(void) +{ + if (test(false)) { + return 1; + } else if (test(true)) { + return 1; + } + return 0; +} diff --git a/source/libs/lilv/sratom-0.4.0/waf b/source/libs/lilv/sratom-0.4.0/waf new file mode 100755 index 0000000000000000000000000000000000000000..3088b02b08b876672d8dfb2aecec7139056451ff GIT binary patch literal 72589 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 literal 0 HcmV?d00001 diff --git a/source/libs/lilv/sratom-0.4.0/wscript b/source/libs/lilv/sratom-0.4.0/wscript new file mode 100644 index 000000000..8b55a3c90 --- /dev/null +++ b/source/libs/lilv/sratom-0.4.0/wscript @@ -0,0 +1,168 @@ +#!/usr/bin/env python +import os +import subprocess + +from waflib.extras import autowaf as autowaf +import waflib.Options as Options + +# Version of this package (even if built as a child) +SRATOM_VERSION = '0.4.0' +SRATOM_MAJOR_VERSION = '0' + +# Library version (UNIX style major, minor, micro) +# major increment <=> incompatible changes +# minor increment <=> compatible changes (additions) +# micro increment <=> no interface changes +# Sratom uses the same version number for both library and package +SRATOM_LIB_VERSION = SRATOM_VERSION + +# Variables for 'waf dist' +APPNAME = 'sratom' +VERSION = SRATOM_VERSION + +# Mandatory variables +top = '.' +out = 'build' + +def options(opt): + opt.load('compiler_c') + autowaf.set_options(opt) + opt.add_option('--test', action='store_true', dest='build_tests', + help="Build unit tests") + opt.add_option('--static', action='store_true', dest='static', + help="Build static library") + opt.add_option('--no-shared', action='store_true', dest='no_shared', + help='Do not build shared library') + +def configure(conf): + conf.load('compiler_c') + autowaf.configure(conf) + autowaf.set_c99_mode(conf) + autowaf.display_header('Sratom Configuration') + + conf.env.BUILD_TESTS = Options.options.build_tests + conf.env.BUILD_SHARED = not Options.options.no_shared + conf.env.BUILD_STATIC = Options.options.static + + if not conf.env.BUILD_SHARED and not conf.env.BUILD_STATIC: + conf.fatal('Neither a shared nor a static build requested') + + # Check for gcov library (for test coverage) + if conf.env.BUILD_TESTS: + conf.check_cc(lib='gcov', + define_name='HAVE_GCOV', + mandatory=False) + + autowaf.check_pkg(conf, 'lv2', atleast_version='1.0.0', uselib_store='LV2') + autowaf.check_pkg(conf, 'serd-0', uselib_store='SERD', + atleast_version='0.14.0', mandatory=True) + autowaf.check_pkg(conf, 'sord-0', uselib_store='SORD', + atleast_version='0.8.0', mandatory=True) + + autowaf.define(conf, 'SRATOM_VERSION', SRATOM_VERSION) + conf.write_config_header('sratom_config.h', remove=False) + + autowaf.display_msg(conf, "Unit tests", str(conf.env.BUILD_TESTS)) + print('') + +lib_source = [ 'src/sratom.c' ] + +def build(bld): + # C Headers + includedir = '${INCLUDEDIR}/sratom-%s/sratom' % SRATOM_MAJOR_VERSION + bld.install_files(includedir, bld.path.ant_glob('sratom/*.h')) + + # Pkgconfig file + autowaf.build_pc(bld, 'SRATOM', SRATOM_VERSION, SRATOM_MAJOR_VERSION, + ['SERD', 'SORD', 'LV2'], + {'SRATOM_MAJOR_VERSION' : SRATOM_MAJOR_VERSION}) + + libflags = ['-fvisibility=hidden'] + libs = ['m'] + defines = [] + if bld.env.MSVC_COMPILER: + libflags = [] + libs = [] + defines = ['snprintf=_snprintf'] + + # Shared Library + if bld.env.BUILD_SHARED: + obj = bld(features = 'c cshlib', + export_includes = ['.'], + source = lib_source, + includes = ['.', './src'], + lib = libs, + name = 'libsratom', + target = 'sratom-%s' % SRATOM_MAJOR_VERSION, + vnum = SRATOM_LIB_VERSION, + install_path = '${LIBDIR}', + defines = defines + ['SRATOM_SHARED', 'SRATOM_INTERNAL'], + cflags = libflags) + autowaf.use_lib(bld, obj, 'SERD SORD LV2') + + # Static library + if bld.env.BUILD_STATIC: + obj = bld(features = 'c cstlib', + export_includes = ['.'], + source = lib_source, + includes = ['.', './src'], + lib = libs, + name = 'libsratom_static', + target = 'sratom-%s' % SRATOM_MAJOR_VERSION, + vnum = SRATOM_LIB_VERSION, + install_path = '${LIBDIR}', + defines = defines + ['SRATOM_INTERNAL']) + autowaf.use_lib(bld, obj, 'SERD SORD LV2') + + if bld.env.BUILD_TESTS: + test_libs = libs + test_cflags = [''] + if bld.is_defined('HAVE_GCOV'): + test_libs += ['gcov'] + test_cflags += ['-fprofile-arcs', '-ftest-coverage'] + + # Static library (for unit test code coverage) + obj = bld(features = 'c cstlib', + source = lib_source, + includes = ['.', './src'], + lib = test_libs, + name = 'libsratom_profiled', + target = 'sratom_profiled', + install_path = '', + defines = defines + ['SRATOM_INTERNAL'], + cflags = test_cflags) + autowaf.use_lib(bld, obj, 'SERD SORD LV2') + + # Unit test program + obj = bld(features = 'c cprogram', + source = 'tests/sratom_test.c', + includes = ['.', './src'], + use = 'libsratom_profiled', + lib = test_libs, + target = 'sratom_test', + install_path = '', + defines = defines, + cflags = test_cflags) + + # Documentation + autowaf.build_dox(bld, 'SRATOM', SRATOM_VERSION, top, out) + + bld.add_post_fun(autowaf.run_ldconfig) + if bld.env.DOCS: + bld.add_post_fun(fix_docs) + +def test(ctx): + autowaf.pre_test(ctx, APPNAME) + os.environ['PATH'] = '.' + os.pathsep + os.getenv('PATH') + autowaf.run_tests(ctx, APPNAME, ['sratom_test'], dirs=['./src','./tests']) + autowaf.post_test(ctx, APPNAME) + +def lint(ctx): + subprocess.call('cpplint.py --filter=+whitespace/comments,-whitespace/tab,-whitespace/braces,-whitespace/labels,-build/header_guard,-readability/casting,-readability/todo,-build/include src/* sratom/*', shell=True) + +def fix_docs(ctx): + if ctx.cmd == 'build': + autowaf.make_simple_dox(APPNAME) + +def upload_docs(ctx): + os.system("rsync -ravz --delete -e ssh build/doc/html/ drobilla@drobilla.net:~/drobilla.net/docs/sratom/") diff --git a/source/libs/lilv/sratom.c b/source/libs/lilv/sratom.c new file mode 100644 index 000000000..d77b52a0e --- /dev/null +++ b/source/libs/lilv/sratom.c @@ -0,0 +1,18 @@ +/* + * Carla static lilv code + * Copyright (C) 2012 Filipe Coelho + * + * 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 + * 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. + * + * For a full copy of the GNU General Public License see the COPYING file + */ + +#include "src/sratom.c" diff --git a/source/libs/rtmempool/Makefile b/source/libs/rtmempool/Makefile new file mode 100644 index 000000000..15bfaea82 --- /dev/null +++ b/source/libs/rtmempool/Makefile @@ -0,0 +1,74 @@ +#!/usr/bin/make -f +# Makefile for rtmempool # +# ----------------------------------- # +# Created by falkTX +# + +include ../../Makefile.mk + +# -------------------------------------------------------------- + +BUILD_C_FLAGS += -fvisibility=hidden -fPIC +BUILD_C_FLAGS += -I. -I../../includes + +OBJS = rtmempool.o +OBJS_posix32 = rtmempool_posix32.o +OBJS_posix64 = rtmempool_posix64.o +OBJS_win32 = rtmempool_win32.o +OBJS_win64 = rtmempool_win64.o + +# -------------------------------------------------------------- + +all: ../rtmempool.a + +posix32: ../rtmempool_posix32.a +posix64: ../rtmempool_posix64.a +win32: ../rtmempool_win32.a +win64: ../rtmempool_win64.a + +# -------------------------------------------------------------- + +../rtmempool.a: $(OBJS) + $(AR) rs $@ $^ + +../rtmempool_posix32.a: $(OBJS_posix32) + $(AR) rs $@ $^ + +../rtmempool_posix64.a: $(OBJS_posix64) + $(AR) rs $@ $^ + +../rtmempool_win32.a: $(OBJS_win32) + $(AR) rs $@ $^ + +../rtmempool_win64.a: $(OBJS_win64) + $(AR) rs $@ $^ + +# -------------------------------------------------------------- + +rtmempool.o: rtmempool.c + $(CC) $< $(BUILD_C_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +rtmempool_posix32.o: rtmempool.c + $(CC) $< $(BUILD_C_FLAGS) $(32BIT_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +rtmempool_posix64.o: rtmempool.c + $(CC) $< $(BUILD_C_FLAGS) $(64BIT_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +rtmempool_win32.o: rtmempool.c + $(CC) $< $(BUILD_C_FLAGS) -DPTW32_STATIC_LIB $(32BIT_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +rtmempool_win64.o: rtmempool.c + $(CC) $< $(BUILD_C_FLAGS) -DPTW32_STATIC_LIB $(64BIT_FLAGS) -c -o $@ + +# -------------------------------------------------------------- + +clean: + rm -f *.o diff --git a/source/libs/rtmempool/list.h b/source/libs/rtmempool/list.h new file mode 100644 index 000000000..ccc551009 --- /dev/null +++ b/source/libs/rtmempool/list.h @@ -0,0 +1,872 @@ +/* -*- Mode: C ; c-basic-offset: 2 -*- */ +/***************************************************************************** + * + * Linux kernel header adapted for user-mode + * The 2.6.17-rt1 version was used. + * + * Original copyright holders of this code are unknown, they were not + * mentioned in the original file. + * + * 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; version 2 of the License + * + * 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 St, Fifth Floor, Boston, MA 02110-1301 USA. + * + *****************************************************************************/ + +#ifndef _LINUX_LIST_H +#define _LINUX_LIST_H + +#include + +#if !defined(offsetof) +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + +/** + * container_of - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#define container_of(ptr, type, member) (type *)((char *)(ptr) - offsetof(type,member)) + +#define prefetch(x) (x = x) + +/* + * These are non-NULL pointers that will result in page faults + * under normal circumstances, used to verify that nobody uses + * non-initialized list entries. + */ +#define LIST_POISON1 ((void *) 0x00100100) +#define LIST_POISON2 ((void *) 0x00200200) + +/* + * Simple doubly linked list implementation. + * + * Some of the internal functions ("__xxx") are useful when + * manipulating whole lists rather than single entries, as + * sometimes we already know the next/prev entries and we can + * generate better code by using them directly rather than + * using the generic single-entry routines. + */ + +struct list_head { + struct list_head *next, *prev; +}; + +#define LIST_HEAD_INIT(name) { &(name), &(name) } + +#define LIST_HEAD(name) \ + struct list_head name = LIST_HEAD_INIT(name) + +static inline void INIT_LIST_HEAD(struct list_head *list) +{ + list->next = list; + list->prev = list; +} + +/* + * Insert a new entry between two known consecutive entries. + * + * This is only for internal list manipulation where we know + * the prev/next entries already! + */ +static inline void __list_add(struct list_head *new, + struct list_head *prev, + struct list_head *next) +{ + next->prev = new; + new->next = next; + new->prev = prev; + prev->next = new; +} + +/** + * list_add - add a new entry + * @new: new entry to be added + * @head: list head to add it after + * + * Insert a new entry after the specified head. + * This is good for implementing stacks. + */ +static inline void list_add(struct list_head *new, struct list_head *head) +{ + __list_add(new, head, head->next); +} + +/** + * list_add_tail - add a new entry + * @new: new entry to be added + * @head: list head to add it before + * + * Insert a new entry before the specified head. + * This is useful for implementing queues. + */ +static inline void list_add_tail(struct list_head *new, struct list_head *head) +{ + __list_add(new, head->prev, head); +} + +/* + * Insert a new entry between two known consecutive entries. + * + * This is only for internal list manipulation where we know + * the prev/next entries already! + */ +static inline void __list_add_rcu(struct list_head * new, + struct list_head * prev, struct list_head * next) +{ + new->next = next; + new->prev = prev; +// smp_wmb(); + next->prev = new; + prev->next = new; +} + +/** + * list_add_rcu - add a new entry to rcu-protected list + * @new: new entry to be added + * @head: list head to add it after + * + * Insert a new entry after the specified head. + * This is good for implementing stacks. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as list_add_rcu() + * or list_del_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * list_for_each_entry_rcu(). + */ +static inline void list_add_rcu(struct list_head *new, struct list_head *head) +{ + __list_add_rcu(new, head, head->next); +} + +/** + * list_add_tail_rcu - add a new entry to rcu-protected list + * @new: new entry to be added + * @head: list head to add it before + * + * Insert a new entry before the specified head. + * This is useful for implementing queues. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as list_add_tail_rcu() + * or list_del_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * list_for_each_entry_rcu(). + */ +static inline void list_add_tail_rcu(struct list_head *new, + struct list_head *head) +{ + __list_add_rcu(new, head->prev, head); +} + +/* + * Delete a list entry by making the prev/next entries + * point to each other. + * + * This is only for internal list manipulation where we know + * the prev/next entries already! + */ +static inline void __list_del(struct list_head * prev, struct list_head * next) +{ + next->prev = prev; + prev->next = next; +} + +/** + * list_del - deletes entry from list. + * @entry: the element to delete from the list. + * Note: list_empty on entry does not return true after this, the entry is + * in an undefined state. + */ +static inline void list_del(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); + entry->next = LIST_POISON1; + entry->prev = LIST_POISON2; +} + +/** + * list_del_rcu - deletes entry from list without re-initialization + * @entry: the element to delete from the list. + * + * Note: list_empty on entry does not return true after this, + * the entry is in an undefined state. It is useful for RCU based + * lockfree traversal. + * + * In particular, it means that we can not poison the forward + * pointers that may still be used for walking the list. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as list_del_rcu() + * or list_add_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * list_for_each_entry_rcu(). + * + * Note that the caller is not permitted to immediately free + * the newly deleted entry. Instead, either synchronize_rcu() + * or call_rcu() must be used to defer freeing until an RCU + * grace period has elapsed. + */ +static inline void list_del_rcu(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); + entry->prev = LIST_POISON2; +} + +/* + * list_replace_rcu - replace old entry by new one + * @old : the element to be replaced + * @new : the new element to insert + * + * The old entry will be replaced with the new entry atomically. + */ +static inline void list_replace_rcu(struct list_head *old, + struct list_head *new) +{ + new->next = old->next; + new->prev = old->prev; +// smp_wmb(); + new->next->prev = new; + new->prev->next = new; + old->prev = LIST_POISON2; +} + +/** + * list_del_init - deletes entry from list and reinitialize it. + * @entry: the element to delete from the list. + */ +static inline void list_del_init(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); + INIT_LIST_HEAD(entry); +} + +/** + * list_move - delete from one list and add as another's head + * @list: the entry to move + * @head: the head that will precede our entry + */ +static inline void list_move(struct list_head *list, struct list_head *head) +{ + __list_del(list->prev, list->next); + list_add(list, head); +} + +/** + * list_move_tail - delete from one list and add as another's tail + * @list: the entry to move + * @head: the head that will follow our entry + */ +static inline void list_move_tail(struct list_head *list, + struct list_head *head) +{ + __list_del(list->prev, list->next); + list_add_tail(list, head); +} + +/** + * list_empty - tests whether a list is empty + * @head: the list to test. + */ +static inline int list_empty(const struct list_head *head) +{ + return head->next == head; +} + +/** + * list_empty_careful - tests whether a list is + * empty _and_ checks that no other CPU might be + * in the process of still modifying either member + * + * NOTE: using list_empty_careful() without synchronization + * can only be safe if the only activity that can happen + * to the list entry is list_del_init(). Eg. it cannot be used + * if another CPU could re-list_add() it. + * + * @head: the list to test. + */ +static inline int list_empty_careful(const struct list_head *head) +{ + struct list_head *next = head->next; + return (next == head) && (next == head->prev); +} + +static inline void __list_splice(struct list_head *list, + struct list_head *head) +{ + struct list_head *first = list->next; + struct list_head *last = list->prev; + struct list_head *at = head->next; + + first->prev = head; + head->next = first; + + last->next = at; + at->prev = last; +} + +/** + * list_splice - join two lists + * @list: the new list to add. + * @head: the place to add it in the first list. + */ +static inline void list_splice(struct list_head *list, struct list_head *head) +{ + if (!list_empty(list)) + __list_splice(list, head); +} + +/** + * list_splice_init - join two lists and reinitialise the emptied list. + * @list: the new list to add. + * @head: the place to add it in the first list. + * + * The list at @list is reinitialised + */ +static inline void list_splice_init(struct list_head *list, + struct list_head *head) +{ + if (!list_empty(list)) { + __list_splice(list, head); + INIT_LIST_HEAD(list); + } +} + +/** + * list_entry - get the struct for this entry + * @ptr: the &struct list_head pointer. + * @type: the type of the struct this is embedded in. + * @member: the name of the list_struct within the struct. + */ +#define list_entry(ptr, type, member) \ + container_of(ptr, type, member) + +/** + * list_for_each - iterate over a list + * @pos: the &struct list_head to use as a loop counter. + * @head: the head for your list. + */ +#define list_for_each(pos, head) \ + for (pos = (head)->next; prefetch(pos->next), pos != (head); \ + pos = pos->next) + +/** + * __list_for_each - iterate over a list + * @pos: the &struct list_head to use as a loop counter. + * @head: the head for your list. + * + * This variant differs from list_for_each() in that it's the + * simplest possible list iteration code, no prefetching is done. + * Use this for code that knows the list to be very short (empty + * or 1 entry) most of the time. + */ +#define __list_for_each(pos, head) \ + for (pos = (head)->next; pos != (head); pos = pos->next) + +/** + * list_for_each_prev - iterate over a list backwards + * @pos: the &struct list_head to use as a loop counter. + * @head: the head for your list. + */ +#define list_for_each_prev(pos, head) \ + for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \ + pos = pos->prev) + +/** + * list_for_each_safe - iterate over a list safe against removal of list entry + * @pos: the &struct list_head to use as a loop counter. + * @n: another &struct list_head to use as temporary storage + * @head: the head for your list. + */ +#define list_for_each_safe(pos, n, head) \ + for (pos = (head)->next, n = pos->next; pos != (head); \ + pos = n, n = pos->next) + +/** + * list_for_each_entry - iterate over list of given type + * @pos: the type * to use as a loop counter. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry(pos, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member); \ + prefetch(pos->member.next), &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + +/** + * list_for_each_entry_reverse - iterate backwards over list of given type. + * @pos: the type * to use as a loop counter. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_reverse(pos, head, member) \ + for (pos = list_entry((head)->prev, typeof(*pos), member); \ + prefetch(pos->member.prev), &pos->member != (head); \ + pos = list_entry(pos->member.prev, typeof(*pos), member)) + +/** + * list_prepare_entry - prepare a pos entry for use as a start point in + * list_for_each_entry_continue + * @pos: the type * to use as a start point + * @head: the head of the list + * @member: the name of the list_struct within the struct. + */ +#define list_prepare_entry(pos, head, member) \ + ((pos) ? : list_entry(head, typeof(*pos), member)) + +/** + * list_for_each_entry_continue - iterate over list of given type + * continuing after existing point + * @pos: the type * to use as a loop counter. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_continue(pos, head, member) \ + for (pos = list_entry(pos->member.next, typeof(*pos), member); \ + prefetch(pos->member.next), &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + +/** + * list_for_each_entry_from - iterate over list of given type + * continuing from existing point + * @pos: the type * to use as a loop counter. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_from(pos, head, member) \ + for (; prefetch(pos->member.next), &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + +/** + * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @pos: the type * to use as a loop counter. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_safe(pos, n, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member), \ + n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** + * list_for_each_entry_safe_continue - iterate over list of given type + * continuing after existing point safe against removal of list entry + * @pos: the type * to use as a loop counter. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_safe_continue(pos, n, head, member) \ + for (pos = list_entry(pos->member.next, typeof(*pos), member), \ + n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** + * list_for_each_entry_safe_from - iterate over list of given type + * from existing point safe against removal of list entry + * @pos: the type * to use as a loop counter. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_safe_from(pos, n, head, member) \ + for (n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** + * list_for_each_entry_safe_reverse - iterate backwards over list of given type safe against + * removal of list entry + * @pos: the type * to use as a loop counter. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_safe_reverse(pos, n, head, member) \ + for (pos = list_entry((head)->prev, typeof(*pos), member), \ + n = list_entry(pos->member.prev, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.prev, typeof(*n), member)) + +/** + * list_for_each_rcu - iterate over an rcu-protected list + * @pos: the &struct list_head to use as a loop counter. + * @head: the head for your list. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as list_add_rcu() + * as long as the traversal is guarded by rcu_read_lock(). + */ +#define list_for_each_rcu(pos, head) \ + for (pos = (head)->next; \ + prefetch(rcu_dereference(pos)->next), pos != (head); \ + pos = pos->next) + +#define __list_for_each_rcu(pos, head) \ + for (pos = (head)->next; \ + rcu_dereference(pos) != (head); \ + pos = pos->next) + +/** + * list_for_each_safe_rcu - iterate over an rcu-protected list safe + * against removal of list entry + * @pos: the &struct list_head to use as a loop counter. + * @n: another &struct list_head to use as temporary storage + * @head: the head for your list. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as list_add_rcu() + * as long as the traversal is guarded by rcu_read_lock(). + */ +#define list_for_each_safe_rcu(pos, n, head) \ + for (pos = (head)->next; \ + n = rcu_dereference(pos)->next, pos != (head); \ + pos = n) + +/** + * list_for_each_entry_rcu - iterate over rcu list of given type + * @pos: the type * to use as a loop counter. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as list_add_rcu() + * as long as the traversal is guarded by rcu_read_lock(). + */ +#define list_for_each_entry_rcu(pos, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member); \ + prefetch(rcu_dereference(pos)->member.next), \ + &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + + +/** + * list_for_each_continue_rcu - iterate over an rcu-protected list + * continuing after existing point. + * @pos: the &struct list_head to use as a loop counter. + * @head: the head for your list. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as list_add_rcu() + * as long as the traversal is guarded by rcu_read_lock(). + */ +#define list_for_each_continue_rcu(pos, head) \ + for ((pos) = (pos)->next; \ + prefetch(rcu_dereference((pos))->next), (pos) != (head); \ + (pos) = (pos)->next) + +/* + * Double linked lists with a single pointer list head. + * Mostly useful for hash tables where the two pointer list head is + * too wasteful. + * You lose the ability to access the tail in O(1). + */ + +struct hlist_head { + struct hlist_node *first; +}; + +struct hlist_node { + struct hlist_node *next, **pprev; +}; + +#define HLIST_HEAD_INIT { .first = NULL } +#define HLIST_HEAD(name) struct hlist_head name = { .first = NULL } +#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL) +static inline void INIT_HLIST_NODE(struct hlist_node *h) +{ + h->next = NULL; + h->pprev = NULL; +} + +static inline int hlist_unhashed(const struct hlist_node *h) +{ + return !h->pprev; +} + +static inline int hlist_empty(const struct hlist_head *h) +{ + return !h->first; +} + +static inline void __hlist_del(struct hlist_node *n) +{ + struct hlist_node *next = n->next; + struct hlist_node **pprev = n->pprev; + *pprev = next; + if (next) + next->pprev = pprev; +} + +static inline void hlist_del(struct hlist_node *n) +{ + __hlist_del(n); + n->next = LIST_POISON1; + n->pprev = LIST_POISON2; +} + +/** + * hlist_del_rcu - deletes entry from hash list without re-initialization + * @n: the element to delete from the hash list. + * + * Note: list_unhashed() on entry does not return true after this, + * the entry is in an undefined state. It is useful for RCU based + * lockfree traversal. + * + * In particular, it means that we can not poison the forward + * pointers that may still be used for walking the hash list. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as hlist_add_head_rcu() + * or hlist_del_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * hlist_for_each_entry(). + */ +static inline void hlist_del_rcu(struct hlist_node *n) +{ + __hlist_del(n); + n->pprev = LIST_POISON2; +} + +static inline void hlist_del_init(struct hlist_node *n) +{ + if (!hlist_unhashed(n)) { + __hlist_del(n); + INIT_HLIST_NODE(n); + } +} + +/* + * hlist_replace_rcu - replace old entry by new one + * @old : the element to be replaced + * @new : the new element to insert + * + * The old entry will be replaced with the new entry atomically. + */ +static inline void hlist_replace_rcu(struct hlist_node *old, + struct hlist_node *new) +{ + struct hlist_node *next = old->next; + + new->next = next; + new->pprev = old->pprev; +// smp_wmb(); + if (next) + new->next->pprev = &new->next; + *new->pprev = new; + old->pprev = LIST_POISON2; +} + +static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) +{ + struct hlist_node *first = h->first; + n->next = first; + if (first) + first->pprev = &n->next; + h->first = n; + n->pprev = &h->first; +} + + +/** + * hlist_add_head_rcu - adds the specified element to the specified hlist, + * while permitting racing traversals. + * @n: the element to add to the hash list. + * @h: the list to add to. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as hlist_add_head_rcu() + * or hlist_del_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * hlist_for_each_entry_rcu(), used to prevent memory-consistency + * problems on Alpha CPUs. Regardless of the type of CPU, the + * list-traversal primitive must be guarded by rcu_read_lock(). + */ +static inline void hlist_add_head_rcu(struct hlist_node *n, + struct hlist_head *h) +{ + struct hlist_node *first = h->first; + n->next = first; + n->pprev = &h->first; +// smp_wmb(); + if (first) + first->pprev = &n->next; + h->first = n; +} + +/* next must be != NULL */ +static inline void hlist_add_before(struct hlist_node *n, + struct hlist_node *next) +{ + n->pprev = next->pprev; + n->next = next; + next->pprev = &n->next; + *(n->pprev) = n; +} + +static inline void hlist_add_after(struct hlist_node *n, + struct hlist_node *next) +{ + next->next = n->next; + n->next = next; + next->pprev = &n->next; + + if(next->next) + next->next->pprev = &next->next; +} + +/** + * hlist_add_before_rcu - adds the specified element to the specified hlist + * before the specified node while permitting racing traversals. + * @n: the new element to add to the hash list. + * @next: the existing element to add the new element before. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as hlist_add_head_rcu() + * or hlist_del_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * hlist_for_each_entry_rcu(), used to prevent memory-consistency + * problems on Alpha CPUs. + */ +static inline void hlist_add_before_rcu(struct hlist_node *n, + struct hlist_node *next) +{ + n->pprev = next->pprev; + n->next = next; +// smp_wmb(); + next->pprev = &n->next; + *(n->pprev) = n; +} + +/** + * hlist_add_after_rcu - adds the specified element to the specified hlist + * after the specified node while permitting racing traversals. + * @prev: the existing element to add the new element after. + * @n: the new element to add to the hash list. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as hlist_add_head_rcu() + * or hlist_del_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * hlist_for_each_entry_rcu(), used to prevent memory-consistency + * problems on Alpha CPUs. + */ +static inline void hlist_add_after_rcu(struct hlist_node *prev, + struct hlist_node *n) +{ + n->next = prev->next; + n->pprev = &prev->next; +// smp_wmb(); + prev->next = n; + if (n->next) + n->next->pprev = &n->next; +} + +#define hlist_entry(ptr, type, member) container_of(ptr,type,member) + +#define hlist_for_each(pos, head) \ + for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \ + pos = pos->next) + +#define hlist_for_each_safe(pos, n, head) \ + for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \ + pos = n) + +/** + * hlist_for_each_entry - iterate over list of given type + * @tpos: the type * to use as a loop counter. + * @pos: the &struct hlist_node to use as a loop counter. + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry(tpos, pos, head, member) \ + for (pos = (head)->first; \ + pos && ({ prefetch(pos->next); 1;}) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = pos->next) + +/** + * hlist_for_each_entry_continue - iterate over a hlist continuing after existing point + * @tpos: the type * to use as a loop counter. + * @pos: the &struct hlist_node to use as a loop counter. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry_continue(tpos, pos, member) \ + for (pos = (pos)->next; \ + pos && ({ prefetch(pos->next); 1;}) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = pos->next) + +/** + * hlist_for_each_entry_from - iterate over a hlist continuing from existing point + * @tpos: the type * to use as a loop counter. + * @pos: the &struct hlist_node to use as a loop counter. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry_from(tpos, pos, member) \ + for (; pos && ({ prefetch(pos->next); 1;}) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = pos->next) + +/** + * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @tpos: the type * to use as a loop counter. + * @pos: the &struct hlist_node to use as a loop counter. + * @n: another &struct hlist_node to use as temporary storage + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry_safe(tpos, pos, n, head, member) \ + for (pos = (head)->first; \ + pos && ({ n = pos->next; 1; }) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = n) + +/** + * hlist_for_each_entry_rcu - iterate over rcu list of given type + * @tpos: the type * to use as a loop counter. + * @pos: the &struct hlist_node to use as a loop counter. + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as hlist_add_head_rcu() + * as long as the traversal is guarded by rcu_read_lock(). + */ +#define hlist_for_each_entry_rcu(tpos, pos, head, member) \ + for (pos = (head)->first; \ + rcu_dereference(pos) && ({ prefetch(pos->next); 1;}) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = pos->next) + +#endif diff --git a/source/libs/rtmempool/log.h b/source/libs/rtmempool/log.h new file mode 100644 index 000000000..07cba1d7b --- /dev/null +++ b/source/libs/rtmempool/log.h @@ -0,0 +1,4 @@ +/* simple file for rtmempool compatibility */ + +#define LOG_DEBUG(format, arg...) +#define LOG_WARNING(format, arg...) diff --git a/source/libs/rtmempool/rtmempool.c b/source/libs/rtmempool/rtmempool.c new file mode 100644 index 000000000..80e635aae --- /dev/null +++ b/source/libs/rtmempool/rtmempool.c @@ -0,0 +1,397 @@ +/* -*- Mode: C ; c-basic-offset: 2 -*- */ +/***************************************************************************** + * + * This file is part of zynjacku + * + * Copyright (C) 2006,2007,2008,2009 Nedko Arnaudov + * Copyright (C) 2012 Filipe Coelho + * + * 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; version 2 of the License + * + * 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 St, Fifth Floor, Boston, MA 02110-1301 USA. + * + *****************************************************************************/ + +#include +#include +#include +#include /* sprintf */ +#include +#include +#include + +#include "rtmempool.h" + +#include "list.h" +//#define LOG_LEVEL LOG_LEVEL_DEBUG +#include "log.h" + +struct rtsafe_memory_pool +{ + char name[LV2_RTSAFE_MEMORY_POOL_NAME_MAX]; + size_t data_size; + size_t min_preallocated; + size_t max_preallocated; + + unsigned int used_count; + struct list_head unused; + struct list_head used; + unsigned int unused_count; + + bool enforce_thread_safety; + /* next members are initialized/used only if enforce_thread_safety is true */ + pthread_mutex_t mutex; + unsigned int unused_count2; + struct list_head pending; + + size_t used_size; +}; + +static +void +rtsafe_memory_pool_sleepy( + LV2_RtMemPool_Handle pool_handle); + +static +bool +rtsafe_memory_pool_create( + LV2_RtMemPool_Handle * pool_handle_ptr, + const char * pool_name, + size_t data_size, + size_t min_preallocated, + size_t max_preallocated, + bool enforce_thread_safety) +{ + int ret; + struct rtsafe_memory_pool * pool_ptr; + + assert(min_preallocated <= max_preallocated); + + assert(pool_name == NULL || strlen(pool_name) < LV2_RTSAFE_MEMORY_POOL_NAME_MAX); + + LOG_DEBUG( + "creating pool \"%s\" (size %u, min = %u, max = %u, enforce = %s)", + pool_name, + (unsigned int)data_size, + (unsigned int)min_preallocated, + (unsigned int)max_preallocated, + enforce_thread_safety ? "true" : "false"); + + pool_ptr = malloc(sizeof(struct rtsafe_memory_pool)); + if (pool_ptr == NULL) + { + return false; + } + + if (pool_name != NULL) + { + strcpy(pool_ptr->name, pool_name); + } + else + { + sprintf(pool_ptr->name, "%p", pool_ptr); + } + + pool_ptr->data_size = data_size; + pool_ptr->min_preallocated = min_preallocated; + pool_ptr->max_preallocated = max_preallocated; + + INIT_LIST_HEAD(&pool_ptr->used); + pool_ptr->used_count = 0; + + INIT_LIST_HEAD(&pool_ptr->unused); + pool_ptr->unused_count = 0; + + pool_ptr->enforce_thread_safety = enforce_thread_safety; + if (enforce_thread_safety) + { + ret = pthread_mutex_init(&pool_ptr->mutex, NULL); + if (ret != 0) + { + free(pool_ptr); + return false; + } + + INIT_LIST_HEAD(&pool_ptr->pending); + pool_ptr->unused_count2 = 0; + } + + pool_ptr->used_size = 0; + + rtsafe_memory_pool_sleepy((LV2_RtMemPool_Handle)pool_ptr); + *pool_handle_ptr = (LV2_RtMemPool_Handle)pool_ptr; + + return true; +} + +#define pool_ptr ((struct rtsafe_memory_pool *)pool_handle) + +static +void +rtsafe_memory_pool_destroy( + LV2_RtMemPool_Handle pool_handle) +{ + int ret; + struct list_head * node_ptr; + + LOG_DEBUG("destroying pool \"%s\"", pool_ptr->name); + + /* caller should deallocate all chunks prior releasing pool itself */ + if (pool_ptr->used_count != 0) + { + LOG_WARNING("Deallocating non-empty pool \"%s\", leaking %u entries:", pool_ptr->name, pool_ptr->used_count); + + list_for_each(node_ptr, &pool_ptr->used) + { + LOG_WARNING(" %p", node_ptr + 1); + } + + assert(0); + } + + while (pool_ptr->unused_count != 0) + { + assert(!list_empty(&pool_ptr->unused)); + + node_ptr = pool_ptr->unused.next; + + list_del(node_ptr); + pool_ptr->unused_count--; + + free(node_ptr); + } + + assert(list_empty(&pool_ptr->unused)); + + if (pool_ptr->enforce_thread_safety) + { + while (!list_empty(&pool_ptr->pending)) + { + node_ptr = pool_ptr->pending.next; + + list_del(node_ptr); + + free(node_ptr); + } + + ret = pthread_mutex_destroy(&pool_ptr->mutex); + assert(ret == 0); + } + + free(pool_ptr); + + // unused variable + (void)ret; +} + +/* adjust unused list size */ +static +void +rtsafe_memory_pool_sleepy( + LV2_RtMemPool_Handle pool_handle) +{ + struct list_head * node_ptr; + unsigned int count; + + LOG_DEBUG("pool \"%s\", sleepy", pool_ptr->name); + + if (pool_ptr->enforce_thread_safety) + { + pthread_mutex_lock(&pool_ptr->mutex); + + count = pool_ptr->unused_count2; + + assert(pool_ptr->min_preallocated < pool_ptr->max_preallocated); + + while (count < pool_ptr->min_preallocated) + { + node_ptr = malloc(sizeof(struct list_head) + pool_ptr->data_size); + if (node_ptr == NULL) + { + LOG_DEBUG("malloc() failed (%u)", (unsigned int)pool_ptr->used_size); + break; + } + + list_add_tail(node_ptr, &pool_ptr->pending); + + count++; + + pool_ptr->used_size += pool_ptr->data_size; + } + + while (count > pool_ptr->max_preallocated && !list_empty(&pool_ptr->pending)) + { + node_ptr = pool_ptr->pending.next; + + list_del(node_ptr); + + free(node_ptr); + + count--; + + pool_ptr->used_size -= pool_ptr->data_size; + } + + pthread_mutex_unlock(&pool_ptr->mutex); + } + else + { + while (pool_ptr->unused_count < pool_ptr->min_preallocated) + { + node_ptr = malloc(sizeof(struct list_head) + pool_ptr->data_size); + if (node_ptr == NULL) + { + LOG_DEBUG("malloc() failed (%u)", (unsigned int)pool_ptr->used_size); + return; + } + + list_add_tail(node_ptr, &pool_ptr->unused); + pool_ptr->unused_count++; + pool_ptr->used_size += pool_ptr->data_size; + } + + while (pool_ptr->unused_count > pool_ptr->max_preallocated) + { + assert(!list_empty(&pool_ptr->unused)); + + node_ptr = pool_ptr->unused.next; + + list_del(node_ptr); + pool_ptr->unused_count--; + + free(node_ptr); + pool_ptr->used_size -= pool_ptr->data_size; + } + } +} + +/* find entry in unused list, fail if it is empty */ +static +void * +rtsafe_memory_pool_allocate_atomic( + LV2_RtMemPool_Handle pool_handle) +{ + struct list_head * node_ptr; + + LOG_DEBUG("pool \"%s\", allocate (%u, %u)", pool_ptr->name, pool_ptr->used_count, pool_ptr->unused_count); + + if (list_empty(&pool_ptr->unused)) + { + return NULL; + } + + node_ptr = pool_ptr->unused.next; + list_del(node_ptr); + pool_ptr->unused_count--; + pool_ptr->used_count++; + list_add_tail(node_ptr, &pool_ptr->used); + + if (pool_ptr->enforce_thread_safety && + pthread_mutex_trylock(&pool_ptr->mutex) == 0) + { + while (pool_ptr->unused_count < pool_ptr->min_preallocated && !list_empty(&pool_ptr->pending)) + { + node_ptr = pool_ptr->pending.next; + + list_del(node_ptr); + list_add_tail(node_ptr, &pool_ptr->unused); + pool_ptr->unused_count++; + } + + pool_ptr->unused_count2 = pool_ptr->unused_count; + + pthread_mutex_unlock(&pool_ptr->mutex); + } + + LOG_DEBUG("pool \"%s\", allocated %p (%u)", pool_ptr->name, node_ptr + 1, pool_ptr->used_count); + return (node_ptr + 1); +} + +/* move from used to unused list */ +static +void +rtsafe_memory_pool_deallocate( + LV2_RtMemPool_Handle pool_handle, + void * data) +{ + struct list_head * node_ptr; + + LOG_DEBUG("pool \"%s\", deallocate %p (%u)", pool_ptr->name, (struct list_head *)data - 1, pool_ptr->used_count); + + list_del((struct list_head *)data - 1); + list_add_tail((struct list_head *)data - 1, &pool_ptr->unused); + pool_ptr->used_count--; + pool_ptr->unused_count++; + + if (pool_ptr->enforce_thread_safety && + pthread_mutex_trylock(&pool_ptr->mutex) == 0) + { + while (pool_ptr->unused_count > pool_ptr->max_preallocated) + { + assert(!list_empty(&pool_ptr->unused)); + + node_ptr = pool_ptr->unused.next; + + list_del(node_ptr); + list_add_tail(node_ptr, &pool_ptr->pending); + pool_ptr->unused_count--; + } + + pool_ptr->unused_count2 = pool_ptr->unused_count; + + pthread_mutex_unlock(&pool_ptr->mutex); + } +} + +static +void * +rtsafe_memory_pool_allocate_sleepy( + LV2_RtMemPool_Handle pool_handle) +{ + void * data; + + LOG_DEBUG("pool \"%s\", allocate sleepy", pool_ptr->name); + + do + { + rtsafe_memory_pool_sleepy(pool_handle); + data = rtsafe_memory_pool_allocate_atomic(pool_handle); + } + while (data == NULL); + + return data; +} + +#undef pool_ptr + +static +bool +rtsafe_memory_pool_create2( + LV2_RtMemPool_Handle * pool_handle_ptr, + const char * pool_name, + size_t data_size, + size_t min_preallocated, + size_t max_preallocated) +{ + return rtsafe_memory_pool_create(pool_handle_ptr, pool_name, data_size, min_preallocated, max_preallocated, false); +} + +void +rtmempool_allocator_init( + struct _LV2_RtMemPool_Pool * allocator_ptr) +{ + allocator_ptr->create = rtsafe_memory_pool_create2; + allocator_ptr->destroy = rtsafe_memory_pool_destroy; + allocator_ptr->allocate_atomic = rtsafe_memory_pool_allocate_atomic; + allocator_ptr->allocate_sleepy = rtsafe_memory_pool_allocate_sleepy; + allocator_ptr->deallocate = rtsafe_memory_pool_deallocate; +} diff --git a/source/libs/rtmempool/rtmempool.h b/source/libs/rtmempool/rtmempool.h new file mode 100644 index 000000000..613d71a05 --- /dev/null +++ b/source/libs/rtmempool/rtmempool.h @@ -0,0 +1,41 @@ +/* -*- Mode: C ; c-basic-offset: 2 -*- */ +/***************************************************************************** + * + * This file is part of zynjacku + * + * Copyright (C) 2006,2007,2008,2009 Nedko Arnaudov + * Copyright (C) 2012 Filipe Coelho + * + * 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; version 2 of the License + * + * 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 St, Fifth Floor, Boston, MA 02110-1301 USA. + * + *****************************************************************************/ + +#ifndef RTMEMPOOL_H__1FA54215_11CF_4659_9CF3_C17A10A67A1F__INCLUDED +#define RTMEMPOOL_H__1FA54215_11CF_4659_9CF3_C17A10A67A1F__INCLUDED + +#include "lv2/lv2_rtmempool.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void +rtmempool_allocator_init( + struct _LV2_RtMemPool_Pool * allocator_ptr); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* #ifndef RTMEMPOOL_H__1FA54215_11CF_4659_9CF3_C17A10A67A1F__INCLUDED */