diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:37:38 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:37:38 +0000 |
commit | ae581a19fbe896a797450b9d9573fb66f2735227 (patch) | |
tree | 56c40be8518a29c9351364d13a9676aa83932dc0 /lib/iolog | |
parent | Initial commit. (diff) | |
download | sudo-ae581a19fbe896a797450b9d9573fb66f2735227.tar.xz sudo-ae581a19fbe896a797450b9d9573fb66f2735227.zip |
Adding upstream version 1.9.13p3.upstream/1.9.13p3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/iolog')
86 files changed, 25298 insertions, 0 deletions
diff --git a/lib/iolog/Makefile.in b/lib/iolog/Makefile.in new file mode 100644 index 0000000..61bc058 --- /dev/null +++ b/lib/iolog/Makefile.in @@ -0,0 +1,851 @@ +# +# SPDX-License-Identifier: ISC +# +# Copyright (c) 2011-2022 Todd C. Miller <Todd.Miller@sudo.ws> +# +# Permission to use, copy, modify, and 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. +# +# THE 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. +# +# @configure_input@ +# + +#### Start of system configuration section. #### + +srcdir = @srcdir@ +abs_srcdir = @abs_srcdir@ +top_srcdir = @top_srcdir@ +abs_top_srcdir = @abs_top_srcdir@ +top_builddir = @top_builddir@ +abs_top_builddir = @abs_top_builddir@ +devdir = @devdir@ +incdir = $(top_srcdir)/include +scriptdir = $(top_srcdir)/scripts +cross_compiling = @CROSS_COMPILING@ + +# Compiler & tools to use +CC = @CC@ +LIBTOOL = @LIBTOOL@ +SHA1SUM = @SHA1SUM@ +EGREP = @EGREP@ +SED = @SED@ + +# Libraries +LT_LIBS = $(top_builddir)/lib/util/libsudo_util.la +LIBS = @LIBS@ @ZLIB@ $(LT_LIBS) + +# C preprocessor flags +CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(srcdir) @CPPFLAGS@ + +# Usually -O and/or -g +CFLAGS = @CFLAGS@ + +# Flags to pass to the link stage +LDFLAGS = @LDFLAGS@ + +# Flags to pass to libtool +LTFLAGS = @LT_STATIC@ + +# Address sanitizer flags +ASAN_CFLAGS = @ASAN_CFLAGS@ +ASAN_LDFLAGS = @ASAN_LDFLAGS@ + +# PIE flags +PIE_CFLAGS = @PIE_CFLAGS@ +PIE_LDFLAGS = @PIE_LDFLAGS@ + +# Stack smashing protection flags +HARDENING_CFLAGS = @HARDENING_CFLAGS@ +HARDENING_LDFLAGS = @HARDENING_LDFLAGS@ + +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 + +# splint options, usually set in the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + +# PVS-studio options +PVS_CFG = $(top_srcdir)/PVS-Studio.cfg +PVS_IGNORE = 'V707,V011,V002,V536' +PVS_LOG_OPTS = -a 'GA:1,2' -e -t errorfile -d $(PVS_IGNORE) + +# Regression tests +TEST_PROGS = check_iolog_filter check_iolog_json check_iolog_mkpath \ + check_iolog_path check_iolog_timing host_port_test +TEST_LIBS = @LIBS@ +TEST_LDFLAGS = @LDFLAGS@ +TEST_VERBOSE = + +# Fuzzers +LIBFUZZSTUB = $(top_builddir)/lib/fuzzstub/libsudo_fuzzstub.la +LIB_FUZZING_ENGINE = @FUZZ_ENGINE@ +FUZZ_PROGS = fuzz_iolog_json fuzz_iolog_legacy fuzz_iolog_timing +FUZZ_SEED_CORPUS = ${FUZZ_PROGS:=_seed_corpus.zip} +FUZZ_LIBS = $(LIB_FUZZING_ENGINE) @LIBS@ \ + $(top_builddir)/lib/eventlog/libsudo_eventlog.la +FUZZ_LDFLAGS = @LDFLAGS@ +FUZZ_MAX_LEN = 4096 +FUZZ_RUNS = 8192 +FUZZ_VERBOSE = + +# Set to non-empty for development mode +DEVEL = @DEVEL@ + +#### End of system configuration section. #### + +SHELL = @SHELL@ + +LIBIOLOG_OBJS = host_port.lo hostcheck.lo iolog_clearerr.lo iolog_close.lo \ + iolog_conf.lo iolog_eof.lo iolog_filter.lo iolog_flush.lo \ + iolog_gets.lo iolog_json.lo iolog_legacy.lo iolog_loginfo.lo \ + iolog_mkdirs.lo iolog_mkdtemp.lo iolog_mkpath.lo \ + iolog_nextid.lo iolog_open.lo iolog_openat.lo iolog_path.lo \ + iolog_read.lo iolog_seek.lo iolog_swapids.lo iolog_timing.lo \ + iolog_util.lo iolog_write.lo + +IOBJS = $(LIBIOLOG_OBJS:.lo=.i) + +POBJS = $(IOBJS:.i=.plog) + +CHECK_IOLOG_MKPATH_OBJS = check_iolog_mkpath.lo + +CHECK_IOLOG_PATH_OBJS = check_iolog_path.lo + +CHECK_IOLOG_TIMING_OBJS = check_iolog_timing.lo + +CHECK_IOLOG_FILTER_OBJS = check_iolog_filter.lo + +CHECK_IOLOG_JSON_OBJS = check_iolog_json.lo + +HOST_PORT_TEST_OBJS = host_port_test.lo + +FUZZ_IOLOG_JSON_OBJS = fuzz_iolog_json.lo + +FUZZ_IOLOG_JSON_CORPUS = $(srcdir)/regress/corpus/seed/log_json/*.json + +FUZZ_IOLOG_LEGACY_OBJS = fuzz_iolog_legacy.lo + +FUZZ_IOLOG_LEGACY_CORPUS = $(srcdir)/regress/corpus/seed/log_legacy/*.log + +FUZZ_IOLOG_TIMING_OBJS = fuzz_iolog_timing.lo + +FUZZ_IOLOG_TIMING_CORPUS = $(srcdir)/regress/corpus/seed/timing/timing.* + +all: libsudo_iolog.la + +depend: + $(scriptdir)/mkdep.pl --srcdir=$(abs_top_srcdir) \ + --builddir=$(abs_top_builddir) lib/iolog/Makefile.in + cd $(top_builddir) && ./config.status --file lib/iolog/Makefile + +Makefile: $(srcdir)/Makefile.in + cd $(top_builddir) && ./config.status --file lib/iolog/Makefile + +.SUFFIXES: .c .h .i .lo .plog + +.c.lo: + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $< + +.c.i: + $(CC) -E -o $@ $(CPPFLAGS) $< + +.i.plog: + ifile=$<; rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $${ifile%i}c --i-file $< --output-file $@ + +libsudo_iolog.la: $(LIBIOLOG_OBJS) $(LT_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LIBIOLOG_OBJS) $(LT_LIBS) @ZLIB@ @NET_LIBS@ + +check_iolog_path: $(CHECK_IOLOG_PATH_OBJS) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_PATH_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +check_iolog_mkpath: $(CHECK_IOLOG_MKPATH_OBJS) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_MKPATH_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +check_iolog_timing: $(CHECK_IOLOG_TIMING_OBJS) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_TIMING_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +check_iolog_filter: $(CHECK_IOLOG_FILTER_OBJS) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_FILTER_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +check_iolog_json: $(CHECK_IOLOG_JSON_OBJS) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_JSON_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +host_port_test: $(HOST_PORT_TEST_OBJS) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(HOST_PORT_TEST_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +fuzz_iolog_json: $(FUZZ_IOLOG_JSON_OBJS) $(LIBFUZZSTUB) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link @FUZZ_LD@ -o $@ $(FUZZ_IOLOG_JSON_OBJS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS) libsudo_iolog.la + +fuzz_iolog_legacy: $(FUZZ_IOLOG_LEGACY_OBJS) $(LIBFUZZSTUB) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link @FUZZ_LD@ -o $@ $(FUZZ_IOLOG_LEGACY_OBJS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS) libsudo_iolog.la + +fuzz_iolog_timing: $(FUZZ_IOLOG_TIMING_OBJS) $(LIBFUZZSTUB) libsudo_iolog.la + $(LIBTOOL) $(LTFLAGS) --mode=link @FUZZ_LD@ -o $@ $(FUZZ_IOLOG_TIMING_OBJS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS) libsudo_iolog.la + +fuzz_iolog_json_seed_corpus.zip: + tdir=fuzz_iolog_json.$$$$; \ + mkdir $$tdir; \ + for f in $(FUZZ_IOLOG_JSON_CORPUS); do \ + cp $$f $$tdir/`$(SHA1SUM) $$f | $(SED) -e 's/^.*= *//' -e 's/ .*//'`; \ + done; \ + zip -j $@ $$tdir/*; \ + rm -rf $$tdir + +run-fuzz_iolog_json: fuzz_iolog_json + l=`locale -a 2>&1 | $(EGREP) -i '^C\.UTF-?8$$' | $(SED) 1q` || true; \ + test -n "$$l" || l="C"; \ + LC_ALL="$$l"; export LC_ALL; \ + unset LANG || LANG=; \ + unset LANGUAGE || LANGUAGE=; \ + MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \ + MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \ + umask 022; \ + corpus=regress/corpus/iolog_json; \ + mkdir -p $$corpus; \ + for f in $(FUZZ_IOLOG_JSON_CORPUS); do \ + cp $$f $$corpus; \ + done; \ + ./fuzz_iolog_json -dict=$(srcdir)/regress/fuzz/fuzz_iolog_json.dict -max_len=$(FUZZ_MAX_LEN) -runs=$(FUZZ_RUNS) $(FUZZ_VERBOSE) $$corpus + +fuzz_iolog_legacy_seed_corpus.zip: + tdir=fuzz_iolog_legacy.$$$$; \ + mkdir $$tdir; \ + for f in $(FUZZ_IOLOG_LEGACY_CORPUS); do \ + cp $$f $$tdir/`$(SHA1SUM) $$f | $(SED) -e 's/^.*= *//' -e 's/ .*//'`; \ + done; \ + zip -j $@ $$tdir/*; \ + rm -rf $$tdir + +run-fuzz_iolog_legacy: fuzz_iolog_legacy + l=`locale -a 2>&1 | $(EGREP) -i '^C\.UTF-?8$$' | $(SED) 1q` || true; \ + test -n "$$l" || l="C"; \ + LC_ALL="$$l"; export LC_ALL; \ + unset LANG || LANG=; \ + unset LANGUAGE || LANGUAGE=; \ + MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \ + MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \ + umask 022; \ + corpus=regress/corpus/iolog_legacy; \ + mkdir -p $$corpus; \ + for f in $(FUZZ_IOLOG_LEGACY_CORPUS); do \ + cp $$f $$corpus; \ + done; \ + ./fuzz_iolog_legacy -dict=$(srcdir)/regress/fuzz/fuzz_iolog_legacy.dict -max_len=$(FUZZ_MAX_LEN) -runs=$(FUZZ_RUNS) $(FUZZ_VERBOSE) $$corpus + +fuzz_iolog_timing_seed_corpus.zip: + tdir=fuzz_iolog_timing.$$$$; \ + mkdir $$tdir; \ + for f in $(FUZZ_IOLOG_TIMING_CORPUS); do \ + cp $$f $$tdir/`$(SHA1SUM) $$f | $(SED) -e 's/^.*= *//' -e 's/ .*//'`; \ + done; \ + zip -j $@ $$tdir/*; \ + rm -rf $$tdir + +run-fuzz_iolog_timing: fuzz_iolog_timing + l=`locale -a 2>&1 | $(EGREP) -i '^C\.UTF-?8$$' | $(SED) 1q` || true; \ + test -n "$$l" || l="C"; \ + LC_ALL="$$l"; export LC_ALL; \ + unset LANG || LANG=; \ + unset LANGUAGE || LANGUAGE=; \ + MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \ + MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \ + umask 022; \ + corpus=regress/corpus/iolog_timing; \ + mkdir -p $$corpus; \ + for f in $(FUZZ_IOLOG_TIMING_CORPUS); do \ + cp $$f $$corpus; \ + done; \ + ./fuzz_iolog_timing -dict=$(srcdir)/regress/fuzz/fuzz_iolog_timing.dict -max_len=$(FUZZ_MAX_LEN) -runs=$(FUZZ_RUNS) $(FUZZ_VERBOSE) $$corpus + +pre-install: + +install: + +install-binaries: + +install-includes: + +install-doc: + +install-plugin: + +install-fuzzer: $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS) + @if test X"$(FUZZ_DESTDIR)" = X""; then \ + echo "must set FUZZ_DESTDIR for install-fuzzer target"; \ + else \ + cp $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS) $(FUZZ_DESTDIR); \ + cp $(srcdir)/regress/fuzz/*.dict $(FUZZ_DESTDIR); \ + fi + +uninstall: + +splint: + splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) $(srcdir)/*.c + +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) $(srcdir)/*.c + +pvs-log-files: $(POBJS) + +pvs-studio: $(POBJS) + plog-converter $(PVS_LOG_OPTS) $(POBJS) + +fuzz: run-fuzz_iolog_json run-fuzz_iolog_legacy run-fuzz_iolog_timing + +check-fuzzer: $(FUZZ_PROGS) + @if test X"$(cross_compiling)" != X"yes"; then \ + l=`locale -a 2>&1 | $(EGREP) -i '^C\.UTF-?8$$' | $(SED) 1q` || true; \ + test -n "$$l" || l="C"; \ + LC_ALL="$$l"; export LC_ALL; \ + unset LANG || LANG=; \ + unset LANGUAGE || LANGUAGE=; \ + MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \ + MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \ + echo "fuzz_iolog_legacy: verifying corpus"; \ + ./fuzz_iolog_legacy $(FUZZ_VERBOSE) $(FUZZ_IOLOG_LEGACY_CORPUS); \ + echo "fuzz_iolog_json: verifying corpus"; \ + ./fuzz_iolog_json $(FUZZ_VERBOSE) $(FUZZ_IOLOG_JSON_CORPUS); \ + echo "fuzz_iolog_timing: verifying corpus"; \ + ./fuzz_iolog_timing $(FUZZ_VERBOSE) $(FUZZ_IOLOG_TIMING_CORPUS); \ + fi + +check: $(TEST_PROGS) check-fuzzer + @if test X"$(cross_compiling)" != X"yes"; then \ + l=`locale -a 2>&1 | $(EGREP) -i '^C\.UTF-?8$$' | $(SED) 1q` || true; \ + test -n "$$l" || l="C"; \ + LC_ALL="$$l"; export LC_ALL; \ + unset LANG || LANG=; \ + unset LANGUAGE || LANGUAGE=; \ + MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \ + MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \ + rval=0; \ + ./check_iolog_filter $(srcdir)/regress/iolog_filter/test[1-9]* || rval=`expr $$rval + $$?`; \ + ./check_iolog_json $(srcdir)/regress/iolog_json/*.in || rval=`expr $$rval + $$?`; \ + ./check_iolog_path $(srcdir)/regress/iolog_path/data || rval=`expr $$rval + $$?`; \ + ./check_iolog_mkpath || rval=`expr $$rval + $$?`; \ + ./check_iolog_timing || rval=`expr $$rval + $$?`; \ + ./host_port_test || rval=`expr $$rval + $$?`; \ + exit $$rval; \ + fi + +check-verbose: + exec $(MAKE) $(MFLAGS) TEST_VERBOSE=-v FUZZ_VERBOSE=-verbosity=1 check + +clean: + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f $(TEST_PROGS) $(FUZZ_PROGS) \ + *.lo *.o *.la + -rm -f *.i *.plog stamp-* core *.core core.* regress/*/*.out \ + regress/*/*.err regress/corpus/iolog_json \ + regress/corpus/iolog_legacy regress/corpus/iolog_timing + +mostlyclean: clean + +distclean: clean + -rm -rf Makefile .libs + +clobber: distclean + +realclean: distclean + rm -f TAGS tags + +cleandir: realclean + +.PHONY: clean mostlyclean distclean cleandir clobber realclean \ + $(FUZZ_SEED_CORPUS) run-fuzz_iolog_json run-fuzz_iolog_legacy \ + run-fuzz_iolog_timing + +# Autogenerated dependencies, do not modify +check_iolog_filter.lo: $(srcdir)/regress/iolog_filter/check_iolog_filter.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/iolog_filter/check_iolog_filter.c +check_iolog_filter.i: $(srcdir)/regress/iolog_filter/check_iolog_filter.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +check_iolog_filter.plog: check_iolog_filter.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_filter/check_iolog_filter.c --i-file $< --output-file $@ +check_iolog_json.lo: $(srcdir)/regress/iolog_json/check_iolog_json.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_json.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/iolog_json.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/iolog_json/check_iolog_json.c +check_iolog_json.i: $(srcdir)/regress/iolog_json/check_iolog_json.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_json.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/iolog_json.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +check_iolog_json.plog: check_iolog_json.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_json/check_iolog_json.c --i-file $< --output-file $@ +check_iolog_mkpath.lo: $(srcdir)/regress/iolog_mkpath/check_iolog_mkpath.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/iolog_mkpath/check_iolog_mkpath.c +check_iolog_mkpath.i: $(srcdir)/regress/iolog_mkpath/check_iolog_mkpath.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +check_iolog_mkpath.plog: check_iolog_mkpath.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_mkpath/check_iolog_mkpath.c --i-file $< --output-file $@ +check_iolog_path.lo: $(srcdir)/regress/iolog_path/check_iolog_path.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/iolog_path/check_iolog_path.c +check_iolog_path.i: $(srcdir)/regress/iolog_path/check_iolog_path.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +check_iolog_path.plog: check_iolog_path.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_path/check_iolog_path.c --i-file $< --output-file $@ +check_iolog_timing.lo: $(srcdir)/regress/iolog_timing/check_iolog_timing.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/iolog_timing/check_iolog_timing.c +check_iolog_timing.i: $(srcdir)/regress/iolog_timing/check_iolog_timing.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +check_iolog_timing.plog: check_iolog_timing.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_timing/check_iolog_timing.c --i-file $< --output-file $@ +fuzz_iolog_json.lo: $(srcdir)/regress/fuzz/fuzz_iolog_json.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_json.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/iolog_json.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/fuzz/fuzz_iolog_json.c +fuzz_iolog_json.i: $(srcdir)/regress/fuzz/fuzz_iolog_json.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_json.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/iolog_json.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +fuzz_iolog_json.plog: fuzz_iolog_json.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/fuzz/fuzz_iolog_json.c --i-file $< --output-file $@ +fuzz_iolog_legacy.lo: $(srcdir)/regress/fuzz/fuzz_iolog_legacy.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/fuzz/fuzz_iolog_legacy.c +fuzz_iolog_legacy.i: $(srcdir)/regress/fuzz/fuzz_iolog_legacy.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +fuzz_iolog_legacy.plog: fuzz_iolog_legacy.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/fuzz/fuzz_iolog_legacy.c --i-file $< --output-file $@ +fuzz_iolog_timing.lo: $(srcdir)/regress/fuzz/fuzz_iolog_timing.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/fuzz/fuzz_iolog_timing.c +fuzz_iolog_timing.i: $(srcdir)/regress/fuzz/fuzz_iolog_timing.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +fuzz_iolog_timing.plog: fuzz_iolog_timing.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/fuzz/fuzz_iolog_timing.c --i-file $< --output-file $@ +host_port.lo: $(srcdir)/host_port.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/host_port.c +host_port.i: $(srcdir)/host_port.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +host_port.plog: host_port.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/host_port.c --i-file $< --output-file $@ +host_port_test.lo: $(srcdir)/regress/host_port/host_port_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/host_port/host_port_test.c +host_port_test.i: $(srcdir)/regress/host_port/host_port_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +host_port_test.plog: host_port_test.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/host_port/host_port_test.c --i-file $< --output-file $@ +hostcheck.lo: $(srcdir)/hostcheck.c $(incdir)/compat/stdbool.h \ + $(incdir)/hostcheck.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/hostcheck.c +hostcheck.i: $(srcdir)/hostcheck.c $(incdir)/compat/stdbool.h \ + $(incdir)/hostcheck.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +hostcheck.plog: hostcheck.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/hostcheck.c --i-file $< --output-file $@ +iolog_clearerr.lo: $(srcdir)/iolog_clearerr.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_clearerr.c +iolog_clearerr.i: $(srcdir)/iolog_clearerr.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_clearerr.plog: iolog_clearerr.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_clearerr.c --i-file $< --output-file $@ +iolog_close.lo: $(srcdir)/iolog_close.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_close.c +iolog_close.i: $(srcdir)/iolog_close.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_close.plog: iolog_close.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_close.c --i-file $< --output-file $@ +iolog_conf.lo: $(srcdir)/iolog_conf.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_conf.c +iolog_conf.i: $(srcdir)/iolog_conf.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_conf.plog: iolog_conf.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_conf.c --i-file $< --output-file $@ +iolog_eof.lo: $(srcdir)/iolog_eof.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_eof.c +iolog_eof.i: $(srcdir)/iolog_eof.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_eof.plog: iolog_eof.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_eof.c --i-file $< --output-file $@ +iolog_filter.lo: $(srcdir)/iolog_filter.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_filter.c +iolog_filter.i: $(srcdir)/iolog_filter.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_filter.plog: iolog_filter.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_filter.c --i-file $< --output-file $@ +iolog_flush.lo: $(srcdir)/iolog_flush.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_flush.c +iolog_flush.i: $(srcdir)/iolog_flush.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_flush.plog: iolog_flush.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_flush.c --i-file $< --output-file $@ +iolog_gets.lo: $(srcdir)/iolog_gets.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_gets.c +iolog_gets.i: $(srcdir)/iolog_gets.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_gets.plog: iolog_gets.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_gets.c --i-file $< --output-file $@ +iolog_json.lo: $(srcdir)/iolog_json.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_json.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/iolog_json.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_json.c +iolog_json.i: $(srcdir)/iolog_json.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_json.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/iolog_json.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_json.plog: iolog_json.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_json.c --i-file $< --output-file $@ +iolog_legacy.lo: $(srcdir)/iolog_legacy.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_legacy.c +iolog_legacy.i: $(srcdir)/iolog_legacy.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_legacy.plog: iolog_legacy.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_legacy.c --i-file $< --output-file $@ +iolog_loginfo.lo: $(srcdir)/iolog_loginfo.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_json.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_loginfo.c +iolog_loginfo.i: $(srcdir)/iolog_loginfo.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_json.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_loginfo.plog: iolog_loginfo.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_loginfo.c --i-file $< --output-file $@ +iolog_mkdirs.lo: $(srcdir)/iolog_mkdirs.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_mkdirs.c +iolog_mkdirs.i: $(srcdir)/iolog_mkdirs.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_mkdirs.plog: iolog_mkdirs.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_mkdirs.c --i-file $< --output-file $@ +iolog_mkdtemp.lo: $(srcdir)/iolog_mkdtemp.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_mkdtemp.c +iolog_mkdtemp.i: $(srcdir)/iolog_mkdtemp.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_mkdtemp.plog: iolog_mkdtemp.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_mkdtemp.c --i-file $< --output-file $@ +iolog_mkpath.lo: $(srcdir)/iolog_mkpath.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_mkpath.c +iolog_mkpath.i: $(srcdir)/iolog_mkpath.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_mkpath.plog: iolog_mkpath.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_mkpath.c --i-file $< --output-file $@ +iolog_nextid.lo: $(srcdir)/iolog_nextid.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_nextid.c +iolog_nextid.i: $(srcdir)/iolog_nextid.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_nextid.plog: iolog_nextid.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_nextid.c --i-file $< --output-file $@ +iolog_open.lo: $(srcdir)/iolog_open.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_open.c +iolog_open.i: $(srcdir)/iolog_open.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_open.plog: iolog_open.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_open.c --i-file $< --output-file $@ +iolog_openat.lo: $(srcdir)/iolog_openat.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_openat.c +iolog_openat.i: $(srcdir)/iolog_openat.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_openat.plog: iolog_openat.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_openat.c --i-file $< --output-file $@ +iolog_path.lo: $(srcdir)/iolog_path.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_path.c +iolog_path.i: $(srcdir)/iolog_path.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_path.plog: iolog_path.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_path.c --i-file $< --output-file $@ +iolog_read.lo: $(srcdir)/iolog_read.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_read.c +iolog_read.i: $(srcdir)/iolog_read.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_read.plog: iolog_read.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_read.c --i-file $< --output-file $@ +iolog_seek.lo: $(srcdir)/iolog_seek.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_seek.c +iolog_seek.i: $(srcdir)/iolog_seek.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_seek.plog: iolog_seek.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_seek.c --i-file $< --output-file $@ +iolog_swapids.lo: $(srcdir)/iolog_swapids.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_swapids.c +iolog_swapids.i: $(srcdir)/iolog_swapids.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_swapids.plog: iolog_swapids.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_swapids.c --i-file $< --output-file $@ +iolog_timing.lo: $(srcdir)/iolog_timing.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_timing.c +iolog_timing.i: $(srcdir)/iolog_timing.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_timing.plog: iolog_timing.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_timing.c --i-file $< --output-file $@ +iolog_util.lo: $(srcdir)/iolog_util.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_util.c +iolog_util.i: $(srcdir)/iolog_util.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_util.plog: iolog_util.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_util.c --i-file $< --output-file $@ +iolog_write.lo: $(srcdir)/iolog_write.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/iolog_write.c +iolog_write.i: $(srcdir)/iolog_write.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +iolog_write.plog: iolog_write.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_write.c --i-file $< --output-file $@ diff --git a/lib/iolog/host_port.c b/lib/iolog/host_port.c new file mode 100644 index 0000000..7fcc0b0 --- /dev/null +++ b/lib/iolog/host_port.c @@ -0,0 +1,109 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2019-2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#include <stdio.h> +#include <string.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_gettext.h" +#include "sudo_util.h" +#include "sudo_iolog.h" + +/* + * Parse a string in the form host[:port] where host can also be + * an IPv4 address or an IPv6 address in square brackets. + * Fills in hostp and portp which may point within str, which is modified. + */ +bool +iolog_parse_host_port(char *str, char **hostp, char **portp, bool *tlsp, + const char *defport, const char *defport_tls) +{ + char *flags, *port, *host = str; + bool ret = false; + bool tls = false; + debug_decl(iolog_parse_host_port, SUDO_DEBUG_UTIL); + + /* Check for IPv6 address like [::0] followed by optional port */ + if (*host == '[') { + host++; + port = strchr(host, ']'); + if (port == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "invalid IPv6 address %s", str); + goto done; + } + *port++ = '\0'; + switch (*port) { + case ':': + port++; + break; + case '\0': + port = NULL; /* no port specified */ + break; + case '(': + /* flag, handled below */ + break; + default: + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "invalid IPv6 address %s", str); + goto done; + } + } else { + port = strrchr(host, ':'); + if (port != NULL) + *port++ = '\0'; + } + + /* Check for optional tls flag at the end. */ + flags = strchr(port ? port : host, '('); + if (flags != NULL) { + if (strcasecmp(flags, "(tls)") == 0) + tls = true; + *flags = '\0'; + if (port == flags) + port = NULL; + } + + if (port == NULL) + port = tls ? (char *)defport_tls : (char *)defport; + else if (*port == '\0') + goto done; + + *hostp = host; + *portp = port; + *tlsp = tls; + + ret = true; + +done: + debug_return_bool(ret); +} diff --git a/lib/iolog/hostcheck.c b/lib/iolog/hostcheck.c new file mode 100644 index 0000000..d23514e --- /dev/null +++ b/lib/iolog/hostcheck.c @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2020 Laszlo Orban <laszlo.orban@oneidentity.com> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#if defined(HAVE_OPENSSL) +# if defined(HAVE_WOLFSSL) +# include <wolfssl/options.h> +# endif +# include <sys/types.h> +# include <sys/socket.h> +# include <netinet/in.h> +# include <arpa/inet.h> +# include <stdlib.h> +# include <string.h> +# include <netdb.h> + +# define NEED_INET_NTOP /* to expose sudo_inet_ntop in sudo_compat.h */ + +# include "sudo_compat.h" +# include "sudo_debug.h" +# include "sudo_util.h" +# include "hostcheck.h" + +#ifndef INET_ADDRSTRLEN +# define INET_ADDRSTRLEN 16 +#endif +#ifndef INET6_ADDRSTRLEN +# define INET6_ADDRSTRLEN 46 +#endif + +/** + * @brief Checks if given hostname resolves to the given IP address. + * + * @param hostname hostname to be resolved + * @param ipaddr ip address to be checked + * + * @return 1 if hostname resolves to the given IP address + * 0 otherwise + */ +static int +forward_lookup_match(const char *hostname, const char *ipaddr) +{ + int rc, ret = 0; + struct addrinfo *res = NULL, *p; + void *addr; + struct sockaddr_in *ipv4; +#if defined(HAVE_STRUCT_IN6_ADDR) + struct sockaddr_in6 *ipv6; + char ipstr[INET6_ADDRSTRLEN]; +#else + char ipstr[INET_ADDRSTRLEN]; +#endif + debug_decl(forward_lookup_match, SUDO_DEBUG_UTIL); + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "verify %s resolves to %s", hostname, ipaddr); + + if ((rc = getaddrinfo(hostname, NULL, NULL, &res)) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to resolve %s: %s", hostname, gai_strerror(rc)); + goto exit; + } + + for (p = res; p != NULL; p = p->ai_next) { + if (p->ai_family == AF_INET) { + ipv4 = (struct sockaddr_in *)p->ai_addr; + addr = &(ipv4->sin_addr); +#if defined(HAVE_STRUCT_IN6_ADDR) + } else if (p->ai_family == AF_INET6) { + ipv6 = (struct sockaddr_in6 *)p->ai_addr; + addr = &(ipv6->sin6_addr); +#endif + } else { + goto exit; + } + + if (inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr)) != 0) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "comparing %s to %s", ipstr, ipaddr); + if (strcmp(ipaddr, ipstr) == 0) { + ret = 1; + break; + } + } + } + +exit: + if (res != NULL) { + freeaddrinfo(res); + } + debug_return_int(ret); +} + +/** + * @brief Compares the given hostname with a DNS entry in a certificate. + * + * The certificate DNS name can contain wildcards in the left-most label. + * A wildcard can match only one label. + * Accepted names: + * - foo.bar.example.com + * - *.example.com + * - *.bar.example.com + * + * @param hostname peer's name + * @param certname_asn1 hostname in the certificate + * + * @return MatchFound + * MatchNotFound + */ +static HostnameValidationResult +validate_name(const char *hostname, ASN1_STRING *certname_asn1) +{ + char *certname_s = (char *) ASN1_STRING_get0_data(certname_asn1); + int certname_len = ASN1_STRING_length(certname_asn1); + int hostname_len = strlen(hostname); + debug_decl(validate_name, SUDO_DEBUG_UTIL); + + /* remove last '.' from hostname if exists */ + if (hostname_len != 0 && hostname[hostname_len - 1] == '.') { + --hostname_len; + } + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "comparing %.*s to %.*s in cert", hostname_len, hostname, + certname_len, certname_s); + + /* skip the first label if wildcard */ + if (certname_len > 2 && certname_s[0] == '*' && certname_s[1] == '.') { + if (hostname_len != 0) { + do { + --hostname_len; + if (*hostname++ == '.') { + break; + } + } while (hostname_len != 0); + } + certname_s += 2; + certname_len -= 2; + } + /* Compare expected hostname with the DNS name */ + if (certname_len != hostname_len) { + debug_return_int(MatchNotFound); + } + if (strncasecmp(hostname, certname_s, hostname_len) != 0) { + debug_return_int(MatchNotFound); + } + + debug_return_int(MatchFound); +} + +/** + * @brief Matches a hostname with the cert's CN. + * + * @param hostname peer's name + * on client side: it is the name where the client is connected to + * on server side, it is in fact an IP address of the remote client + * @param ipaddr peer's IP address + * @param cert peer's X509 certificate + * @param resolve if the value is not 0, the function checks that the value of the CN + * resolves to the given ipaddr or not. + * + * @return MatchFound + * MatchNotFound + * MalformedCertificate + * Error + */ +static HostnameValidationResult +matches_common_name(const char *hostname, const char *ipaddr, const X509 *cert, int resolve) +{ + X509_NAME_ENTRY *common_name_entry = NULL; + ASN1_STRING *common_name_asn1 = NULL; + int common_name_loc; + debug_decl(matches_common_name, SUDO_DEBUG_UTIL); + + /* Find the position of the CN field in the Subject field of the certificate */ + common_name_loc = X509_NAME_get_index_by_NID(X509_get_subject_name((X509 *) cert), NID_commonName, -1); + if (common_name_loc < 0) { + debug_return_int(Error); + } + + /* Extract the CN field */ + common_name_entry = X509_NAME_get_entry(X509_get_subject_name((X509 *) cert), common_name_loc); + if (common_name_entry == NULL) { + debug_return_int(Error); + } + + /* Convert the CN field to a C string */ + common_name_asn1 = X509_NAME_ENTRY_get_data(common_name_entry); + if (common_name_asn1 == NULL) { + debug_return_int(Error); + } + const unsigned char *common_name_str = ASN1_STRING_get0_data(common_name_asn1); + + /* Make sure there isn't an embedded NUL character in the CN */ + if (memchr(common_name_str, '\0', ASN1_STRING_length(common_name_asn1)) != NULL) { + debug_return_int(MalformedCertificate); + } + + /* Compare expected hostname with the CN */ + if (validate_name(hostname, common_name_asn1) == MatchFound) { + debug_return_int(MatchFound); + } + + int common_name_length = ASN1_STRING_length(common_name_asn1); + char *nullterm_common_name = malloc(common_name_length + 1); + + if (nullterm_common_name == NULL) { + debug_return_int(Error); + } + + memcpy(nullterm_common_name, common_name_str, common_name_length); + nullterm_common_name[common_name_length] = '\0'; + + + /* check if hostname in the CN field resolves to the given ip address */ + if (resolve && forward_lookup_match(nullterm_common_name, ipaddr)) { + free(nullterm_common_name); + debug_return_int(MatchFound); + } + + free(nullterm_common_name); + debug_return_int(MatchNotFound); +} + +/** + * @brief Matches a hostname or ipaddr with the cert's corresponding SAN field. + * + * SAN can have different fields. For hostname matching, the GEN_DNS field is used, + * for IP address matching, the GEN_IPADD field is used. + * Since SAN is an X503 v3 extension, it can happen that the cert does + * not contain SAN at all. + * + * @param hostname remote peer's name + * on client side: it is the name where the client is connected to + * on server side, it is in fact an IP address of the remote client + * @param ipaddr remote peer's IP address + * @param cert peer's X509 certificate + * @param resolve if the value is not 0, the function checks that the value of the + * SAN GEN_DNS resolves to the given ipaddr or not. + * + * @return MatchFound + * MatchNotFound + * NoSANPresent + * MalformedCertificate + * Error + */ +static HostnameValidationResult +matches_subject_alternative_name(const char *hostname, const char *ipaddr, const X509 *cert, int resolve) +{ + HostnameValidationResult result = MatchNotFound; + int i; + int san_names_nb; + STACK_OF(GENERAL_NAME) *san_names = NULL; + debug_decl(matches_subject_alternative_name, SUDO_DEBUG_UTIL); + + /* Try to extract the names within the SAN extension from the certificate */ + san_names = X509_get_ext_d2i((X509 *) cert, NID_subject_alt_name, NULL, NULL); + if (san_names == NULL) { + debug_return_int(NoSANPresent); + } + san_names_nb = sk_GENERAL_NAME_num(san_names); + + /* Check each name within the extension */ + for (i=0; i<san_names_nb; i++) { + const GENERAL_NAME *current_name = sk_GENERAL_NAME_value(san_names, i); + + if (current_name->type == GEN_DNS) { + const unsigned char *dns_name = ASN1_STRING_get0_data(current_name->d.dNSName); + + /* Make sure there isn't an embedded NUL character in the DNS name */ + if (memchr(dns_name, '\0', ASN1_STRING_length(current_name->d.dNSName)) != NULL) { + result = MalformedCertificate; + break; + } else { + /* Compare expected hostname with the DNS name */ + if (validate_name(hostname, current_name->d.dNSName) == MatchFound) { + result = MatchFound; + break; + } + + int dns_name_length = ASN1_STRING_length(current_name->d.dNSName); + char *nullterm_dns_name = malloc(dns_name_length + 1); + + if (nullterm_dns_name == NULL) { + debug_return_int(Error); + } + + memcpy(nullterm_dns_name, dns_name, dns_name_length); + nullterm_dns_name[dns_name_length] = '\0'; + + if (resolve && forward_lookup_match(nullterm_dns_name, ipaddr)) { + free(nullterm_dns_name); + result = MatchFound; + break; + } + free(nullterm_dns_name); + } + } else if (current_name->type == GEN_IPADD) { + const unsigned char *san_ip = ASN1_STRING_get0_data(current_name->d.iPAddress); +#if defined(HAVE_STRUCT_IN6_ADDR) + char san_ip_str[INET6_ADDRSTRLEN]; +#else + char san_ip_str[INET_ADDRSTRLEN]; +#endif + + /* IPV4 address */ + if(current_name->d.iPAddress->length == 4) { + if (inet_ntop(AF_INET, san_ip, san_ip_str, INET_ADDRSTRLEN) == NULL) { + result = MalformedCertificate; + break; + } +#if defined(HAVE_STRUCT_IN6_ADDR) + /* IPV6 address */ + } else if (current_name->d.iPAddress->length == 16) { + if (inet_ntop(AF_INET6, san_ip, san_ip_str, INET6_ADDRSTRLEN) == NULL) { + result = MalformedCertificate; + break; + } +# endif + } else { + result = MalformedCertificate; + break; + } + + if (strcasecmp(ipaddr, san_ip_str) == 0) { + result = MatchFound; + break; + } + } + } + sk_GENERAL_NAME_pop_free(san_names, GENERAL_NAME_free); + + debug_return_int(result); +} + +/** + * @brief Do hostname/IP validation on the given X509 certificate. + * + * According to RFC 6125 section 6.4.4, first the certificate's SAN field + * has to be checked. If there is no SAN field, the certificate's CN field + * has to be checked. + * + * @param cert X509 certificate + * @param hostname remote peer's name + * on client side: it is the name where the client is connected to + * on server side, it is in fact an IP address of the remote client + * @param ipaddr remote peer's IP address + * @param resolve if the value is not 0, the function checks that the value of the + * SAN GEN_DNS or the value of CN resolves to the given ipaddr or not. + * + * @return MatchFound + * MatchNotFound + * MalformedCertificate + * Error + */ +HostnameValidationResult +validate_hostname(const X509 *cert, const char *hostname, const char *ipaddr, int resolve) +{ + HostnameValidationResult res = MatchFound; + debug_decl(validate_hostname, SUDO_DEBUG_UTIL); + + /* hostname can be also an ip address, if client connects + * to ip instead of FQDN + */ + if((ipaddr == NULL) || (cert == NULL)) { + debug_return_int(Error); + } + + /* check SAN first if exists */ + res = matches_subject_alternative_name(hostname, ipaddr, cert, resolve); + + /* According to RFC 6125 section 6.4.4, check CN only, + * if no SAN name was provided + */ + if (res == NoSANPresent) { + res = matches_common_name(hostname, ipaddr, cert, resolve); + } + + debug_return_int(res); +} +#endif /* HAVE_OPENSSL */ diff --git a/lib/iolog/iolog_clearerr.c b/lib/iolog/iolog_clearerr.c new file mode 100644 index 0000000..631e020 --- /dev/null +++ b/lib/iolog/iolog_clearerr.c @@ -0,0 +1,45 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +void +iolog_clearerr(struct iolog_file *iol) +{ + debug_decl(iolog_eof, SUDO_DEBUG_UTIL); + +#ifdef HAVE_ZLIB_H + if (iol->compressed) + gzclearerr(iol->fd.g); + else +#endif + clearerr(iol->fd.f); + debug_return; +} diff --git a/lib/iolog/iolog_close.c b/lib/iolog/iolog_close.c new file mode 100644 index 0000000..caa68c6 --- /dev/null +++ b/lib/iolog/iolog_close.c @@ -0,0 +1,80 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <string.h> +#include <errno.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * Close an I/O log. + */ +bool +iolog_close(struct iolog_file *iol, const char **errstr) +{ + bool ret = true; + debug_decl(iolog_close, SUDO_DEBUG_UTIL); + +#ifdef HAVE_ZLIB_H + if (iol->compressed) { + int errnum; + + /* Must check error indicator before closing. */ + if (iol->writable) { + if (gzflush(iol->fd.g, Z_SYNC_FLUSH) != Z_OK) { + ret = false; + if (errstr != NULL) { + *errstr = gzerror(iol->fd.g, &errnum); + if (errnum == Z_ERRNO) + *errstr = strerror(errno); + } + } + } + errnum = gzclose(iol->fd.g); + if (ret && errnum != Z_OK) { + ret = false; + if (errstr != NULL) + *errstr = errnum == Z_ERRNO ? strerror(errno) : "unknown error"; + } + } else +#endif + if (fclose(iol->fd.f) != 0) { + ret = false; + if (errstr != NULL) + *errstr = strerror(errno); + } + + debug_return_bool(ret); +} diff --git a/lib/iolog/iolog_conf.c b/lib/iolog/iolog_conf.c new file mode 100644 index 0000000..61a35a5 --- /dev/null +++ b/lib/iolog/iolog_conf.c @@ -0,0 +1,202 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif + +#include "pathnames.h" +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_util.h" +#include "sudo_iolog.h" + +static unsigned int sessid_max = SESSID_MAX; +static mode_t iolog_filemode = S_IRUSR|S_IWUSR; +static mode_t iolog_dirmode = S_IRWXU; +static uid_t iolog_uid = ROOT_UID; +static gid_t iolog_gid = ROOT_GID; +static bool iolog_gid_set; +static bool iolog_docompress; +static bool iolog_doflush; + +/* + * Reset I/O log settings to default values. + */ +void +iolog_set_defaults(void) +{ + sessid_max = SESSID_MAX; + iolog_filemode = S_IRUSR|S_IWUSR; + iolog_dirmode = S_IRWXU; + iolog_uid = ROOT_UID; + iolog_gid = ROOT_GID; + iolog_gid_set = false; + iolog_docompress = false; + iolog_doflush = false; +} + +/* + * Set max sequence number (aka session ID) + */ +void +iolog_set_maxseq(unsigned int newval) +{ + debug_decl(iolog_set_maxseq, SUDO_DEBUG_UTIL); + + /* Clamp to SESSID_MAX as documented. */ + if (newval > SESSID_MAX) + newval = SESSID_MAX; + sessid_max = newval; + + debug_return; +} + +/* + * Set iolog_uid (and iolog_gid if gid not explicitly set). + */ +void +iolog_set_owner(uid_t uid, gid_t gid) +{ + debug_decl(iolog_set_owner, SUDO_DEBUG_UTIL); + + iolog_uid = uid; + if (!iolog_gid_set) + iolog_gid = gid; + + debug_return; +} + +/* + * Set iolog_gid. + */ +void +iolog_set_gid(gid_t gid) +{ + debug_decl(iolog_set_gid, SUDO_DEBUG_UTIL); + + iolog_gid = gid; + iolog_gid_set = true; + + debug_return; +} + +/* + * Set iolog_filemode and iolog_dirmode. + */ +void +iolog_set_mode(mode_t mode) +{ + debug_decl(iolog_set_mode, SUDO_DEBUG_UTIL); + + /* I/O log files must be readable and writable by owner. */ + iolog_filemode = S_IRUSR|S_IWUSR; + + /* Add in group and other read/write if specified. */ + iolog_filemode |= mode & (S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); + + /* For directory mode, add execute bits as needed. */ + iolog_dirmode = iolog_filemode | S_IXUSR; + if (iolog_dirmode & (S_IRGRP|S_IWGRP)) + iolog_dirmode |= S_IXGRP; + if (iolog_dirmode & (S_IROTH|S_IWOTH)) + iolog_dirmode |= S_IXOTH; + + debug_return; +} + +/* + * Set iolog_docompress + */ +void +iolog_set_compress(bool newval) +{ + debug_decl(iolog_set_compress, SUDO_DEBUG_UTIL); + iolog_docompress = newval; + debug_return; +} + +/* + * Set iolog_doflush + */ +void +iolog_set_flush(bool newval) +{ + debug_decl(iolog_set_flush, SUDO_DEBUG_UTIL); + iolog_doflush = newval; + debug_return; +} + +/* + * Getters. + */ + +unsigned int +iolog_get_maxseq(void) +{ + return sessid_max; +} + +uid_t +iolog_get_uid(void) +{ + return iolog_uid; +} + +gid_t +iolog_get_gid(void) +{ + return iolog_gid; +} + +mode_t +iolog_get_file_mode(void) +{ + return iolog_filemode; +} + +mode_t +iolog_get_dir_mode(void) +{ + return iolog_dirmode; +} + +bool +iolog_get_compress(void) +{ + return iolog_docompress; +} + +bool +iolog_get_flush(void) +{ + return iolog_doflush; +} diff --git a/lib/iolog/iolog_eof.c b/lib/iolog/iolog_eof.c new file mode 100644 index 0000000..c1cece2 --- /dev/null +++ b/lib/iolog/iolog_eof.c @@ -0,0 +1,54 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * Returns true if at end of I/O log file, else false. + */ +bool +iolog_eof(struct iolog_file *iol) +{ + bool ret; + debug_decl(iolog_eof, SUDO_DEBUG_UTIL); + +#ifdef HAVE_ZLIB_H + if (iol->compressed) + ret = gzeof(iol->fd.g) != 0; + else +#endif + ret = feof(iol->fd.f) != 0; + debug_return_int(ret); +} diff --git a/lib/iolog/iolog_filter.c b/lib/iolog/iolog_filter.c new file mode 100644 index 0000000..ecccf18 --- /dev/null +++ b/lib/iolog/iolog_filter.c @@ -0,0 +1,248 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2022 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <regex.h> +#include <string.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_queue.h" +#include "sudo_util.h" + +struct pwfilt_regex { + TAILQ_ENTRY(pwfilt_regex) entries; + char *pattern; + regex_t regex; +}; +TAILQ_HEAD(pwfilt_regex_list, pwfilt_regex); + +struct pwfilt_handle { + struct pwfilt_regex_list filters; + bool is_filtered; +}; + +/* + * Allocate a new filter handle. + */ +void * +iolog_pwfilt_alloc(void) +{ + struct pwfilt_handle *handle; + debug_decl(iolog_pwfilt_alloc, SUDO_DEBUG_UTIL); + + handle = malloc(sizeof(*handle)); + if (handle != NULL) { + TAILQ_INIT(&handle->filters); + handle->is_filtered = false; + } + + debug_return_ptr(handle); +} + +/* + * Unlink filt from filters and free it. + */ +static void +iolog_pwfilt_free_filter(struct pwfilt_regex_list *filters, + struct pwfilt_regex *filt) +{ + debug_decl(iolog_pwfilt_free_filter, SUDO_DEBUG_UTIL); + + if (filt != NULL) { + TAILQ_REMOVE(filters, filt, entries); + regfree(&filt->regex); + free(filt->pattern); + free(filt); + } + + debug_return; +} + +/* + * Free the given password filter handle. + */ +void +iolog_pwfilt_free(void *vhandle) +{ + struct pwfilt_handle *handle = vhandle; + struct pwfilt_regex *filt; + debug_decl(iolog_pwfilt_free, SUDO_DEBUG_UTIL); + + if (handle != NULL) { + while ((filt = TAILQ_FIRST(&handle->filters)) != NULL) { + iolog_pwfilt_free_filter(&handle->filters, filt); + } + free(handle); + } + debug_return; +} + +/* + * Add a pattern to the password filter list. + */ +bool +iolog_pwfilt_add(void *vhandle, const char *pattern) +{ + struct pwfilt_handle *handle = vhandle; + struct pwfilt_regex *filt; + const char *errstr; + debug_decl(iolog_pwfilt_add, SUDO_DEBUG_UTIL); + + filt = malloc(sizeof(*filt)); + if (filt == NULL) + goto oom; + filt->pattern = strdup(pattern); + if (filt->pattern == NULL) + goto oom; + + if (!sudo_regex_compile(&filt->regex, filt->pattern, &errstr)) { + sudo_warnx(U_("invalid regular expression \"%s\": %s"), + pattern, U_(errstr)); + goto bad; + } + + TAILQ_INSERT_TAIL(&handle->filters, filt, entries); + debug_return_bool(true); + +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); +bad: + if (filt != NULL) { + free(filt->pattern); + free(filt); + } + debug_return_bool(false); +} + +/* + * Remove a pattern from the password filter list. + */ +bool +iolog_pwfilt_remove(void *vhandle, const char *pattern) +{ + struct pwfilt_handle *handle = vhandle; + struct pwfilt_regex *filt, *next; + bool ret = false; + debug_decl(iolog_pwfilt_remove, SUDO_DEBUG_UTIL); + + TAILQ_FOREACH_SAFE(filt, &handle->filters, entries, next) { + if (strcmp(filt->pattern, pattern) == 0) { + iolog_pwfilt_free_filter(&handle->filters, filt); + ret = true; + } + } + debug_return_bool(ret); +} + +/* + * If logging output and filtering is _not_ enabled, match buf against the + * password filter list patterns and, if there is a match, enable filtering. + * If logging output and filtering _is_ enabled, disable filtering. + * If logging input and filtering is enabled, replace all characters in + * buf with stars ('*') up to the next linefeed or carriage return. + */ +bool +iolog_pwfilt_run(void *vhandle, int event, const char *buf, + unsigned int len, char **newbuf) +{ + struct pwfilt_handle *handle = vhandle; + struct pwfilt_regex *filt; + char *copy; + debug_decl(iolog_pwfilt_run, SUDO_DEBUG_UTIL); + + /* + * We only filter ttyin/ttyout. It is only possible to disable + * echo when a tty is present. Filtering passwords in the input + * log when they appear in the output is pointless. This does + * assume that the password prompt is written to the tty as well. + */ + switch (event) { + case IO_EVENT_TTYOUT: + /* If filtering passwords and we receive output, disable it. */ + if (handle->is_filtered) + handle->is_filtered = false; + + /* Make a copy of buf that is NUL-terminated. */ + copy = malloc(len + 1); + if (copy == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + memcpy(copy, buf, len); + copy[len] = '\0'; + + /* Check output for a password prompt. */ + TAILQ_FOREACH(filt, &handle->filters, entries) { + if (regexec(&filt->regex, copy, 0, NULL, 0) == 0) { + handle->is_filtered = true; + break; + } + } + free(copy); + break; + case IO_EVENT_TTYIN: + if (handle->is_filtered) { + unsigned int i; + + for (i = 0; i < len; i++) { + /* We will stop filtering after reaching cr/nl. */ + if (buf[i] == '\r' || buf[i] == '\n') { + handle->is_filtered = false; + break; + } + } + if (i != 0) { + /* Filtered, replace buffer with '*' chars. */ + copy = malloc(len); + if (copy == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } + memset(copy, '*', i); + if (i != len) { + /* Done filtering, copy cr/nl and subsequent characters. */ + memcpy(copy + i, buf + i, len - i); + } + *newbuf = copy; + } + } + break; + } + + debug_return_bool(true); +} diff --git a/lib/iolog/iolog_flush.c b/lib/iolog/iolog_flush.c new file mode 100644 index 0000000..f7a0b08 --- /dev/null +++ b/lib/iolog/iolog_flush.c @@ -0,0 +1,66 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <string.h> +#include <time.h> +#include <errno.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * I/O log wrapper for fflush/gzflush. + */ +bool +iolog_flush(struct iolog_file *iol, const char **errstr) +{ + debug_decl(iolog_flush, SUDO_DEBUG_UTIL); + bool ret = true; + +#ifdef HAVE_ZLIB_H + if (iol->compressed) { + int errnum; + if (gzflush(iol->fd.g, Z_SYNC_FLUSH) != Z_OK) { + if (errstr != NULL) { + *errstr = gzerror(iol->fd.g, &errnum); + if (errnum == Z_ERRNO) + *errstr = strerror(errno); + } + ret = false; + } + } else +#endif + { + if (fflush(iol->fd.f) != 0) { + if (errstr != NULL) + *errstr = strerror(errno); + ret = false; + } + } + + debug_return_bool(ret); +} diff --git a/lib/iolog/iolog_gets.c b/lib/iolog/iolog_gets.c new file mode 100644 index 0000000..0ef5a23 --- /dev/null +++ b/lib/iolog/iolog_gets.c @@ -0,0 +1,78 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <string.h> +#include <errno.h> +#include <limits.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * Like gets() but for struct iolog_file. + */ +char * +iolog_gets(struct iolog_file *iol, char *buf, size_t nbytes, + const char **errstr) +{ + char *str; + debug_decl(iolog_gets, SUDO_DEBUG_UTIL); + + if (nbytes > UINT_MAX) { + errno = EINVAL; + if (errstr != NULL) + *errstr = strerror(errno); + debug_return_str(NULL); + } + +#ifdef HAVE_ZLIB_H + if (iol->compressed) { + if ((str = gzgets(iol->fd.g, buf, nbytes)) == NULL) { + if (errstr != NULL) { + int errnum; + *errstr = gzerror(iol->fd.g, &errnum); + if (errnum == Z_ERRNO) + *errstr = strerror(errno); + } + } + } else +#endif + { + if ((str = fgets(buf, nbytes, iol->fd.f)) == NULL) { + if (errstr != NULL) + *errstr = strerror(errno); + } + } + debug_return_str(str); +} diff --git a/lib/iolog/iolog_json.c b/lib/iolog/iolog_json.c new file mode 100644 index 0000000..6f384ea --- /dev/null +++ b/lib/iolog/iolog_json.c @@ -0,0 +1,938 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#include <string.h> +#include <unistd.h> +#include <ctype.h> +#include <limits.h> +#include <fcntl.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_eventlog.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +#include "iolog_json.h" + +struct json_stack { + unsigned int depth; + unsigned int maxdepth; + struct json_object *frames[64]; +}; +#define JSON_STACK_INTIALIZER(s) { 0, nitems((s).frames) }; + +static bool +json_store_columns(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_columns, SUDO_DEBUG_UTIL); + + if (item->u.number < 1 || item->u.number > INT_MAX) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "tty cols %lld: out of range", item->u.number); + evlog->columns = 0; + debug_return_bool(false); + } + + evlog->columns = item->u.number; + debug_return_bool(true); +} + +static bool +json_store_command(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_command, SUDO_DEBUG_UTIL); + + /* + * Note: struct eventlog must store command + args. + * We don't have argv yet so we append the args later. + */ + free(evlog->command); + evlog->command = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_dumped_core(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_dumped_core, SUDO_DEBUG_UTIL); + + evlog->dumped_core = item->u.boolean; + debug_return_bool(true); +} + +static bool +json_store_exit_value(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_exit_value, SUDO_DEBUG_UTIL); + + if (item->u.number < 0 || item->u.number > INT_MAX) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "exit value %lld: out of range", item->u.number); + evlog->exit_value = -1; + debug_return_bool(false); + } + + evlog->exit_value = item->u.number; + debug_return_bool(true); +} + +static bool +json_store_lines(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_lines, SUDO_DEBUG_UTIL); + + if (item->u.number < 1 || item->u.number > INT_MAX) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "tty lines %lld: out of range", item->u.number); + evlog->lines = 0; + debug_return_bool(false); + } + + evlog->lines = item->u.number; + debug_return_bool(true); +} + +char ** +json_array_to_strvec(struct json_object *array) +{ + struct json_item *item; + int len = 0; + char **ret; + debug_decl(json_array_to_strvec, SUDO_DEBUG_UTIL); + + TAILQ_FOREACH(item, &array->items, entries) { + /* Can only convert arrays of string. */ + if (item->type != JSON_STRING) { + sudo_warnx(U_("expected JSON_STRING, got %d"), item->type); + debug_return_ptr(NULL); + } + /* Prevent integer overflow. */ + if (++len == INT_MAX) { + sudo_warnx("%s", U_("JSON_ARRAY too large")); + debug_return_ptr(NULL); + } + } + if ((ret = reallocarray(NULL, len + 1, sizeof(char *))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_ptr(NULL); + } + len = 0; + TAILQ_FOREACH(item, &array->items, entries) { + ret[len++] = item->u.string; + item->u.string = NULL; + } + ret[len] = NULL; + + debug_return_ptr(ret); +} + +static bool +json_store_runargv(struct json_item *item, struct eventlog *evlog) +{ + int i; + debug_decl(json_store_runargv, SUDO_DEBUG_UTIL); + + if (evlog->argv != NULL) { + for (i = 0; evlog->argv[i] != NULL; i++) + free(evlog->argv[i]); + free(evlog->argv); + } + evlog->argv = json_array_to_strvec(&item->u.child); + + debug_return_bool(evlog->argv != NULL); +} + +static bool +json_store_runenv(struct json_item *item, struct eventlog *evlog) +{ + int i; + debug_decl(json_store_runenv, SUDO_DEBUG_UTIL); + + if (evlog->envp != NULL) { + for (i = 0; evlog->envp[i] != NULL; i++) + free(evlog->envp[i]); + free(evlog->envp); + } + evlog->envp = json_array_to_strvec(&item->u.child); + + debug_return_bool(evlog->envp != NULL); +} + +static bool +json_store_rungid(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_rungid, SUDO_DEBUG_UTIL); + + evlog->rungid = (gid_t)item->u.number; + debug_return_bool(true); +} + +static bool +json_store_rungroup(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_rungroup, SUDO_DEBUG_UTIL); + + free(evlog->rungroup); + evlog->rungroup = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_runuid(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_runuid, SUDO_DEBUG_UTIL); + + evlog->runuid = (uid_t)item->u.number; + debug_return_bool(true); +} + +static bool +json_store_runuser(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_runuser, SUDO_DEBUG_UTIL); + + free(evlog->runuser); + evlog->runuser = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_runchroot(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_runchroot, SUDO_DEBUG_UTIL); + + free(evlog->runchroot); + evlog->runchroot = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_runcwd(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_runcwd, SUDO_DEBUG_UTIL); + + free(evlog->runcwd); + evlog->runcwd = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_signal(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_signal, SUDO_DEBUG_UTIL); + + free(evlog->signal_name); + evlog->signal_name = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_submitcwd(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_submitcwd, SUDO_DEBUG_UTIL); + + free(evlog->cwd); + evlog->cwd = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_submithost(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_submithost, SUDO_DEBUG_UTIL); + + free(evlog->submithost); + evlog->submithost = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_submituser(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_submituser, SUDO_DEBUG_UTIL); + + free(evlog->submituser); + evlog->submituser = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_timespec(struct json_item *item, struct timespec *ts) +{ + struct json_object *object; + debug_decl(json_store_timespec, SUDO_DEBUG_UTIL); + + object = &item->u.child; + TAILQ_FOREACH(item, &object->items, entries) { + if (item->type != JSON_NUMBER) + continue; + if (strcmp(item->name, "seconds") == 0) { + ts->tv_sec = item->u.number; + continue; + } + if (strcmp(item->name, "nanoseconds") == 0) { + ts->tv_nsec = item->u.number; + continue; + } + } + debug_return_bool(true); +} + +static bool +json_store_run_time(struct json_item *item, struct eventlog *evlog) +{ + return json_store_timespec(item, &evlog->run_time); +} + +static bool +json_store_timestamp(struct json_item *item, struct eventlog *evlog) +{ + return json_store_timespec(item, &evlog->submit_time); +} + +static bool +json_store_ttyname(struct json_item *item, struct eventlog *evlog) +{ + debug_decl(json_store_ttyname, SUDO_DEBUG_UTIL); + + free(evlog->ttyname); + evlog->ttyname = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static struct iolog_json_key { + const char *name; + enum json_value_type type; + bool (*setter)(struct json_item *, struct eventlog *); +} iolog_json_keys[] = { + { "columns", JSON_NUMBER, json_store_columns }, + { "command", JSON_STRING, json_store_command }, + { "dumped_core", JSON_BOOL, json_store_dumped_core }, + { "exit_value", JSON_NUMBER, json_store_exit_value }, + { "lines", JSON_NUMBER, json_store_lines }, + { "run_time", JSON_OBJECT, json_store_run_time }, + { "runargv", JSON_ARRAY, json_store_runargv }, + { "runenv", JSON_ARRAY, json_store_runenv }, + { "rungid", JSON_ID, json_store_rungid }, + { "rungroup", JSON_STRING, json_store_rungroup }, + { "runuid", JSON_ID, json_store_runuid }, + { "runuser", JSON_STRING, json_store_runuser }, + { "runchroot", JSON_STRING, json_store_runchroot }, + { "runcwd", JSON_STRING, json_store_runcwd }, + { "signal", JSON_STRING, json_store_signal }, + { "submitcwd", JSON_STRING, json_store_submitcwd }, + { "submithost", JSON_STRING, json_store_submithost }, + { "submituser", JSON_STRING, json_store_submituser }, + { "timestamp", JSON_OBJECT, json_store_timestamp }, + { "ttyname", JSON_STRING, json_store_ttyname }, + { NULL } +}; + +static struct json_item * +new_json_item(enum json_value_type type, char *name, unsigned int lineno) +{ + struct json_item *item; + debug_decl(new_json_item, SUDO_DEBUG_UTIL); + + if ((item = malloc(sizeof(*item))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_ptr(NULL); + } + item->name = name; + item->type = type; + item->lineno = lineno; + + debug_return_ptr(item); +} + +static char * +json_parse_string(char **strp) +{ + char *dst, *end, *ret, *src = *strp + 1; + size_t len; + debug_decl(json_parse_string, SUDO_DEBUG_UTIL); + + for (end = src; *end != '"' && *end != '\0'; end++) { + if (end[0] == '\\' && end[1] == '"') + end++; + } + if (*end != '"') { + sudo_warnx("%s", U_("missing double quote in name")); + debug_return_str(NULL); + } + len = (size_t)(end - src); + + /* Copy string, flattening escaped chars. */ + dst = ret = malloc(len + 1); + if (dst == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_str(NULL); + } + while (src < end) { + char ch = *src++; + if (ch == '\\') { + switch (*src) { + case 'b': + ch = '\b'; + break; + case 'f': + ch = '\f'; + break; + case 'n': + ch = '\n'; + break; + case 'r': + ch = '\r'; + break; + case 't': + ch = '\t'; + break; + case 'u': + /* Only currently handles 8-bit ASCII. */ + if (src[1] == '0' && src[2] == '0') { + ch = sudo_hexchar(&src[3]); + if (ch != -1) { + src += 4; + break; + } + } + /* Not in \u00XX format. */ + FALLTHROUGH; + case '"': + case '\\': + default: + /* Note: a bare \ at the end of a string will be removed. */ + ch = *src; + break; + } + src++; + } + *dst++ = ch; + } + *dst = '\0'; + + /* Trim trailing whitespace. */ + do { + end++; + } while (isspace((unsigned char)*end)); + *strp = end; + + debug_return_str(ret); +} + +void +free_json_items(struct json_item_list *items) +{ + struct json_item *item; + debug_decl(free_json_items, SUDO_DEBUG_UTIL); + + while ((item = TAILQ_FIRST(items)) != NULL) { + TAILQ_REMOVE(items, item, entries); + switch (item->type) { + case JSON_STRING: + free(item->u.string); + break; + case JSON_ARRAY: + case JSON_OBJECT: + free_json_items(&item->u.child.items); + break; + case JSON_ID: + case JSON_NUMBER: + case JSON_BOOL: + case JSON_NULL: + /* Nothing to free. */ + break; + default: + sudo_warnx("%s: internal error, invalid JSON type %d", + __func__, item->type); + break; + } + free(item->name); + free(item); + } + + debug_return; +} + +static bool +iolog_parse_json_object(struct json_object *object, struct eventlog *evlog) +{ + struct json_item *item; + bool ret = false; + debug_decl(iolog_parse_json_object, SUDO_DEBUG_UTIL); + + /* First object holds all the actual data. */ + item = TAILQ_FIRST(&object->items); + if (item == NULL) { + sudo_warnx("%s", U_("missing JSON_OBJECT")); + goto done; + } + if (item->type != JSON_OBJECT) { + sudo_warnx(U_("expected JSON_OBJECT, got %d"), item->type); + goto done; + } + object = &item->u.child; + + TAILQ_FOREACH(item, &object->items, entries) { + struct iolog_json_key *key; + + /* expecting key:value pairs */ + if (item->name == NULL) { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, + "%s: missing object name", __func__); + goto done; + } + + /* lookup name */ + for (key = iolog_json_keys; key->name != NULL; key++) { + if (strcmp(item->name, key->name) == 0) + break; + } + if (key->name == NULL) { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, + "%s: unknown key %s", __func__, item->name); + } else if (key->type != item->type && + (key->type != JSON_ID || item->type != JSON_NUMBER)) { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, + "%s: key mismatch %s type %d, expected %d", __func__, + item->name, item->type, key->type); + goto done; + } else { + /* Matched name and type. */ + if (!key->setter(item, evlog)) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to store %s", key->name); + goto done; + } + } + } + + ret = true; + +done: + debug_return_bool(ret); +} + +static bool +json_insert_bool(struct json_item_list *items, char *name, bool value, + unsigned int lineno) +{ + struct json_item *item; + debug_decl(json_insert_bool, SUDO_DEBUG_UTIL); + + if ((item = new_json_item(JSON_BOOL, name, lineno)) == NULL) + debug_return_bool(false); + item->u.boolean = value; + TAILQ_INSERT_TAIL(items, item, entries); + + debug_return_bool(true); +} + +static bool +json_insert_null(struct json_item_list *items, char *name, unsigned int lineno) +{ + struct json_item *item; + debug_decl(json_insert_null, SUDO_DEBUG_UTIL); + + if ((item = new_json_item(JSON_NULL, name, lineno)) == NULL) + debug_return_bool(false); + TAILQ_INSERT_TAIL(items, item, entries); + + debug_return_bool(true); +} + +static bool +json_insert_num(struct json_item_list *items, char *name, long long value, + unsigned int lineno) +{ + struct json_item *item; + debug_decl(json_insert_num, SUDO_DEBUG_UTIL); + + if ((item = new_json_item(JSON_NUMBER, name, lineno)) == NULL) + debug_return_bool(false); + item->u.number = value; + TAILQ_INSERT_TAIL(items, item, entries); + + debug_return_bool(true); +} + +static bool +json_insert_str(struct json_item_list *items, char *name, char **strp, + unsigned int lineno) +{ + struct json_item *item; + debug_decl(json_insert_str, SUDO_DEBUG_UTIL); + + if ((item = new_json_item(JSON_STRING, name, lineno)) == NULL) + debug_return_bool(false); + item->u.string = json_parse_string(strp); + if (item->u.string == NULL) { + free(item); + debug_return_bool(false); + } + TAILQ_INSERT_TAIL(items, item, entries); + + debug_return_bool(true); +} + +static struct json_object * +json_stack_push(struct json_stack *stack, struct json_item_list *items, + struct json_object *frame, enum json_value_type type, char *name, + unsigned int lineno) +{ + struct json_item *item; + debug_decl(json_stack_push, SUDO_DEBUG_UTIL); + + /* We limit the stack size rather than expanding it. */ + if (stack->depth >= stack->maxdepth) { + sudo_warnx(U_("json stack exhausted (max %u frames)"), stack->maxdepth); + debug_return_ptr(NULL); + } + + /* Allocate a new item and insert it into the list. */ + if ((item = new_json_item(type, name, lineno)) == NULL) + debug_return_ptr(NULL); + TAILQ_INIT(&item->u.child.items); + item->u.child.parent = item; + TAILQ_INSERT_TAIL(items, item, entries); + + /* Push the current frame onto the stack (depth check performed above). */ + stack->frames[stack->depth++] = frame; + + /* Return the new frame */ + debug_return_ptr(&item->u.child); +} + +/* Only expect a value if a name is defined or we are in an array. */ +#define expect_value (name != NULL || (frame->parent != NULL && frame->parent->type == JSON_ARRAY)) + +bool +iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) +{ + struct json_object *frame = root; + struct json_stack stack = JSON_STACK_INTIALIZER(stack); + unsigned int lineno = 0; + char *name = NULL; + char *cp, *buf = NULL; + size_t bufsize = 0; + ssize_t len; + bool ret = false; + bool saw_comma = false; + long long num; + char ch; + debug_decl(iolog_parse_json, SUDO_DEBUG_UTIL); + + root->parent = NULL; + TAILQ_INIT(&root->items); + + while ((len = getdelim(&buf, &bufsize, '\n', fp)) != -1) { + char *ep = buf + len - 1; + cp = buf; + + lineno++; + + /* Trim trailing whitespace. */ + while (ep > cp && isspace((unsigned char)*ep)) + ep--; + ep[1] = '\0'; + + for (;;) { + const char *errstr; + + /* Trim leading whitespace, skip blank lines. */ + while (isspace((unsigned char)*cp)) + cp++; + + /* Check for comma separator and strip it out. */ + if (*cp == ',') { + saw_comma = true; + cp++; + while (isspace((unsigned char)*cp)) + cp++; + } + + /* End of line? */ + if (*cp == '\0') + break; + + switch (*cp) { + case '{': + if (name == NULL && frame->parent != NULL) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("objects must consist of name:value pairs")); + goto done; + } + if (!saw_comma && !TAILQ_EMPTY(&frame->items)) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing separator between values")); + goto done; + } + cp++; + saw_comma = false; + frame = json_stack_push(&stack, &frame->items, frame, + JSON_OBJECT, name, lineno); + if (frame == NULL) + goto done; + name = NULL; + break; + case '}': + if (stack.depth == 0 || frame->parent == NULL || + frame->parent->type != JSON_OBJECT) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unmatched close brace")); + goto done; + } + cp++; + frame = stack.frames[--stack.depth]; + saw_comma = false; + break; + case '[': + if (frame->parent == NULL) { + /* Must have an enclosing object. */ + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unexpected array")); + goto done; + } + if (!saw_comma && !TAILQ_EMPTY(&frame->items)) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing separator between values")); + goto done; + } + cp++; + saw_comma = false; + frame = json_stack_push(&stack, &frame->items, frame, + JSON_ARRAY, name, lineno); + if (frame == NULL) + goto done; + name = NULL; + break; + case ']': + if (stack.depth == 0 || frame->parent == NULL || + frame->parent->type != JSON_ARRAY) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unmatched close bracket")); + goto done; + } + cp++; + frame = stack.frames[--stack.depth]; + saw_comma = false; + break; + case '"': + if (frame->parent == NULL) { + /* Must have an enclosing object. */ + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unexpected string")); + goto done; + } + + if (!expect_value) { + /* Parse "name": */ + if ((name = json_parse_string(&cp)) == NULL) + goto done; + /* TODO: allow colon on next line? */ + if (*cp != ':') { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing colon after name")); + goto done; + } + cp++; + } else { + if (!saw_comma && !TAILQ_EMPTY(&frame->items)) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing separator between values")); + goto done; + } + saw_comma = false; + if (!json_insert_str(&frame->items, name, &cp, lineno)) + goto done; + name = NULL; + } + break; + case 't': + if (strncmp(cp, "true", sizeof("true") - 1) != 0) + goto parse_error; + if (!expect_value) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unexpected boolean")); + goto done; + } + cp += sizeof("true") - 1; + if (*cp != ',' && !isspace((unsigned char)*cp) && *cp != '\0') + goto parse_error; + if (!saw_comma && !TAILQ_EMPTY(&frame->items)) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing separator between values")); + goto done; + } + saw_comma = false; + + if (!json_insert_bool(&frame->items, name, true, lineno)) + goto done; + name = NULL; + break; + case 'f': + if (strncmp(cp, "false", sizeof("false") - 1) != 0) + goto parse_error; + if (!expect_value) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unexpected boolean")); + goto done; + } + cp += sizeof("false") - 1; + if (*cp != ',' && !isspace((unsigned char)*cp) && *cp != '\0') + goto parse_error; + if (!saw_comma && !TAILQ_EMPTY(&frame->items)) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing separator between values")); + goto done; + } + saw_comma = false; + + if (!json_insert_bool(&frame->items, name, false, lineno)) + goto done; + name = NULL; + break; + case 'n': + if (strncmp(cp, "null", sizeof("null") - 1) != 0) + goto parse_error; + if (!expect_value) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unexpected null")); + goto done; + } + cp += sizeof("null") - 1; + if (*cp != ',' && !isspace((unsigned char)*cp) && *cp != '\0') + goto parse_error; + if (!saw_comma && !TAILQ_EMPTY(&frame->items)) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing separator between values")); + goto done; + } + saw_comma = false; + + if (!json_insert_null(&frame->items, name, lineno)) + goto done; + name = NULL; + break; + case '+': case '-': case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': case '8': case '9': + if (!expect_value) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unexpected number")); + goto done; + } + /* XXX - strtonumx() would be simpler here. */ + len = strcspn(cp, " \f\n\r\t\v,"); + ch = cp[len]; + cp[len] = '\0'; + if (!saw_comma && !TAILQ_EMPTY(&frame->items)) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("missing separator between values")); + goto done; + } + saw_comma = false; + num = sudo_strtonum(cp, LLONG_MIN, LLONG_MAX, &errstr); + if (errstr != NULL) { + sudo_warnx("%s:%u:%td: %s: %s", filename, lineno, cp - buf, + cp, U_(errstr)); + goto done; + } + cp += len; + *cp = ch; + + if (!json_insert_num(&frame->items, name, num, lineno)) + goto done; + name = NULL; + break; + default: + goto parse_error; + } + } + } + if (stack.depth != 0) { + frame = stack.frames[stack.depth - 1]; + if (frame->parent == NULL || frame->parent->type == JSON_OBJECT) { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unmatched close brace")); + } else { + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, + U_("unmatched close bracket")); + } + goto done; + } + + ret = true; + goto done; + +parse_error: + sudo_warnx("%s:%u:%td: %s", filename, lineno, cp - buf, U_("parse error")); +done: + free(buf); + free(name); + if (!ret) + free_json_items(&root->items); + + debug_return_bool(ret); +} + +bool +iolog_parse_loginfo_json(FILE *fp, const char *iolog_dir, struct eventlog *evlog) +{ + struct json_object root; + bool ret = false; + debug_decl(iolog_parse_loginfo_json, SUDO_DEBUG_UTIL); + + if (iolog_parse_json(fp, iolog_dir, &root)) { + /* Walk the stack and parse entries. */ + ret = iolog_parse_json_object(&root, evlog); + + /* Cleanup. */ + free_json_items(&root.items); + } + + debug_return_bool(ret); +} diff --git a/lib/iolog/iolog_json.h b/lib/iolog/iolog_json.h new file mode 100644 index 0000000..bc28dfa --- /dev/null +++ b/lib/iolog/iolog_json.h @@ -0,0 +1,50 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 IOLOG_JSON_H +#define IOLOG_JSON_H + +#include "sudo_json.h" +#include "sudo_queue.h" + +TAILQ_HEAD(json_item_list, json_item); + +struct json_object { + struct json_item *parent; + struct json_item_list items; +}; + +struct json_item { + TAILQ_ENTRY(json_item) entries; + char *name; /* may be NULL for first brace */ + unsigned int lineno; + enum json_value_type type; + union { + struct json_object child; + char *string; + long long number; + id_t id; + bool boolean; + } u; +}; + +void free_json_items(struct json_item_list *items); +bool iolog_parse_json(FILE *fp, const char *filename, struct json_object *root); +char **json_array_to_strvec(struct json_object *array); + +#endif /* IOLOG_JSON_H */ diff --git a/lib/iolog/iolog_legacy.c b/lib/iolog/iolog_legacy.c new file mode 100644 index 0000000..5d987ae --- /dev/null +++ b/lib/iolog/iolog_legacy.c @@ -0,0 +1,168 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#include <string.h> +#include <signal.h> +#include <limits.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_eventlog.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +bool +iolog_parse_loginfo_legacy(FILE *fp, const char *iolog_dir, + struct eventlog *evlog) +{ + char *buf = NULL, *cp, *ep; + const char *errstr; + size_t bufsize = 0, cwdsize = 0, cmdsize = 0; + bool ret = false; + debug_decl(iolog_parse_loginfo_legacy, SUDO_DEBUG_UTIL); + + /* + * Info file has three lines: + * 1) a log info line + * 2) cwd + * 3) command with args + */ + if (getdelim(&buf, &bufsize, '\n', fp) == -1 || + getdelim(&evlog->cwd, &cwdsize, '\n', fp) == -1 || + getdelim(&evlog->command, &cmdsize, '\n', fp) == -1) { + sudo_warn(U_("%s: invalid log file"), iolog_dir); + goto done; + } + + /* Strip the newline from the cwd and command. */ + evlog->cwd[strcspn(evlog->cwd, "\n")] = '\0'; + evlog->command[strcspn(evlog->command, "\n")] = '\0'; + + /* + * Crack the log line (lines and cols not present in old versions). + * timestamp:user:runas_user:runas_group:tty:lines:cols + * XXX - probably better to use strtok and switch on the state. + */ + buf[strcspn(buf, "\n")] = '\0'; + cp = buf; + + /* timestamp */ + if ((ep = strchr(cp, ':')) == NULL) { + sudo_warn(U_("%s: time stamp field is missing"), iolog_dir); + goto done; + } + *ep = '\0'; + evlog->submit_time.tv_sec = sudo_strtonum(cp, 0, TIME_T_MAX, &errstr); + if (errstr != NULL) { + sudo_warn(U_("%s: time stamp %s: %s"), iolog_dir, cp, errstr); + goto done; + } + + /* submit user */ + cp = ep + 1; + if ((ep = strchr(cp, ':')) == NULL) { + sudo_warn(U_("%s: user field is missing"), iolog_dir); + goto done; + } + if ((evlog->submituser = strndup(cp, (size_t)(ep - cp))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + + /* runas user */ + cp = ep + 1; + if ((ep = strchr(cp, ':')) == NULL) { + sudo_warn(U_("%s: runas user field is missing"), iolog_dir); + goto done; + } + if ((evlog->runuser = strndup(cp, (size_t)(ep - cp))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + + /* runas group */ + cp = ep + 1; + if ((ep = strchr(cp, ':')) == NULL) { + sudo_warn(U_("%s: runas group field is missing"), iolog_dir); + goto done; + } + if (cp != ep) { + if ((evlog->rungroup = strndup(cp, (size_t)(ep - cp))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + } + + /* tty, followed by optional lines + cols */ + cp = ep + 1; + if ((ep = strchr(cp, ':')) == NULL) { + /* just the tty */ + if ((evlog->ttyname = strdup(cp)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + } else { + /* tty followed by lines + cols */ + if ((evlog->ttyname = strndup(cp, (size_t)(ep - cp))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + cp = ep + 1; + /* need to NULL out separator to use sudo_strtonum() */ + /* XXX - use sudo_strtonumx */ + if ((ep = strchr(cp, ':')) != NULL) { + *ep = '\0'; + } + evlog->lines = sudo_strtonum(cp, 1, INT_MAX, &errstr); + if (errstr != NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: tty lines %s: %s", iolog_dir, cp, errstr); + } + if (ep != NULL) { + cp = ep + 1; + evlog->columns = sudo_strtonum(cp, 1, INT_MAX, &errstr); + if (errstr != NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: tty cols %s: %s", iolog_dir, cp, errstr); + } + } + } + + ret = true; + +done: + free(buf); + debug_return_bool(ret); +} diff --git a/lib/iolog/iolog_loginfo.c b/lib/iolog/iolog_loginfo.c new file mode 100644 index 0000000..373a81e --- /dev/null +++ b/lib/iolog/iolog_loginfo.c @@ -0,0 +1,238 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#include <string.h> +#include <unistd.h> +#include <fcntl.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_eventlog.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_json.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +struct eventlog * +iolog_parse_loginfo(int dfd, const char *iolog_dir) +{ + struct eventlog *evlog = NULL; + FILE *fp = NULL; + int fd = -1; + int tmpfd = -1; + bool ok, legacy = false; + debug_decl(iolog_parse_loginfo, SUDO_DEBUG_UTIL); + + if (dfd == -1) { + if ((tmpfd = open(iolog_dir, O_RDONLY)) == -1) { + sudo_warn("%s", iolog_dir); + goto bad; + } + dfd = tmpfd; + } + if ((fd = openat(dfd, "log.json", O_RDONLY, 0)) == -1) { + fd = openat(dfd, "log", O_RDONLY, 0); + legacy = true; + } + if (tmpfd != -1) + close(tmpfd); + if (fd == -1 || (fp = fdopen(fd, "r")) == NULL) { + sudo_warn("%s/log", iolog_dir); + goto bad; + } + fd = -1; + + if ((evlog = calloc(1, sizeof(*evlog))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } + evlog->runuid = (uid_t)-1; + evlog->rungid = (gid_t)-1; + evlog->exit_value = -1; + + ok = legacy ? iolog_parse_loginfo_legacy(fp, iolog_dir, evlog) : + iolog_parse_loginfo_json(fp, iolog_dir, evlog); + if (ok) { + fclose(fp); + debug_return_ptr(evlog); + } + +bad: + if (fd != -1) + close(fd); + if (fp != NULL) + fclose(fp); + eventlog_free(evlog); + debug_return_ptr(NULL); +} + +/* + * Write the legacy I/O log file that contains the user and command info. + * This file is not compressed. + */ +static bool +iolog_write_info_file_legacy(int dfd, struct eventlog *evlog) +{ + char * const *av; + FILE *fp; + int error, fd; + debug_decl(iolog_info_write_log, SUDO_DEBUG_UTIL); + + fd = iolog_openat(dfd, "log", O_CREAT|O_TRUNC|O_WRONLY); + if (fd == -1 || (fp = fdopen(fd, "w")) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to %sopen %s/log", fd == -1 ? "" : "fd", evlog->iolog_path); + if (fd != -1) + close(fd); + debug_return_bool(false); + } + if (fchown(fd, iolog_get_uid(), iolog_get_gid()) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to fchown %d:%d %s/log", __func__, + (int)iolog_get_uid(), (int)iolog_get_gid(), evlog->iolog_path); + } + + fprintf(fp, "%lld:%s:%s:%s:%s:%d:%d\n%s\n", + (long long)evlog->submit_time.tv_sec, + evlog->submituser ? evlog->submituser : "unknown", + evlog->runuser ? evlog->runuser : RUNAS_DEFAULT, + evlog->rungroup ? evlog->rungroup : "", + evlog->ttyname ? evlog->ttyname : "unknown", + evlog->lines, evlog->columns, + evlog->cwd ? evlog->cwd : "unknown"); + fputs(evlog->command ? evlog->command : "unknown", fp); + for (av = evlog->argv + 1; *av != NULL; av++) { + fputc(' ', fp); + fputs(*av, fp); + } + fputc('\n', fp); + fflush(fp); + if ((error = ferror(fp))) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to write to I/O log file %s/log", evlog->iolog_path); + } + fclose(fp); + + debug_return_bool(!error); +} + +/* + * Write the "log.json" file that contains the user and command info. + * This file is not compressed. + */ +static bool +iolog_write_info_file_json(int dfd, struct eventlog *evlog) +{ + struct json_container jsonc; + struct json_value json_value; + bool ret = false; + FILE *fp = NULL; + int fd = -1; + debug_decl(iolog_write_info_file_json, SUDO_DEBUG_UTIL); + + if (!sudo_json_init(&jsonc, 4, false, false, false)) + debug_return_bool(false); + + /* Timestamp */ + if (!sudo_json_open_object(&jsonc, "timestamp")) + goto oom; + + json_value.type = JSON_NUMBER; + json_value.u.number = evlog->submit_time.tv_sec; + if (!sudo_json_add_value(&jsonc, "seconds", &json_value)) + goto oom; + + json_value.type = JSON_NUMBER; + json_value.u.number = evlog->submit_time.tv_nsec; + if (!sudo_json_add_value(&jsonc, "nanoseconds", &json_value)) + goto oom; + + if (!sudo_json_close_object(&jsonc)) + goto oom; + + if (!eventlog_store_json(&jsonc, evlog)) + goto done; + + fd = iolog_openat(dfd, "log.json", O_CREAT|O_TRUNC|O_WRONLY); + if (fd == -1 || (fp = fdopen(fd, "w")) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to %sopen %s/log.json", fd == -1 ? "" : "fd", + evlog->iolog_path); + goto done; + } + if (fchown(fd, iolog_get_uid(), iolog_get_gid()) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to fchown %d:%d %s/log.json", __func__, + (int)iolog_get_uid(), (int)iolog_get_gid(), evlog->iolog_path); + } + fd = -1; + + fprintf(fp, "{%s\n}\n", sudo_json_get_buf(&jsonc)); + fflush(fp); + if (ferror(fp)) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to write to I/O log file %s/log.json", evlog->iolog_path); + goto done; + } + + ret = true; + goto done; + +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); +done: + sudo_json_free(&jsonc); + if (fp != NULL) + fclose(fp); + if (fd != -1) + close(fd); + + debug_return_bool(ret); +} + +/* + * Write the I/O log and log.json files that contain user and command info. + * These files are not compressed. + */ +bool +iolog_write_info_file(int dfd, struct eventlog *evlog) +{ + debug_decl(iolog_write_info_file, SUDO_DEBUG_UTIL); + + if (!iolog_write_info_file_legacy(dfd, evlog)) + debug_return_bool(false); + if (!iolog_write_info_file_json(dfd, evlog)) + debug_return_bool(false); + + debug_return_bool(true); +} diff --git a/lib/iolog/iolog_mkdirs.c b/lib/iolog/iolog_mkdirs.c new file mode 100644 index 0000000..c9ab980 --- /dev/null +++ b/lib/iolog/iolog_mkdirs.c @@ -0,0 +1,143 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2022 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <unistd.h> +#include <errno.h> +#include <fcntl.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +/* + * Create directory and any parent directories as needed. + */ +bool +iolog_mkdirs(const char *path) +{ + const mode_t iolog_filemode = iolog_get_file_mode(); + const mode_t iolog_dirmode = iolog_get_dir_mode(); + const uid_t iolog_uid = iolog_get_uid(); + const gid_t iolog_gid = iolog_get_gid(); + bool ok = true, uid_changed = false; + struct stat sb; + mode_t omask; + int dfd; + debug_decl(iolog_mkdirs, SUDO_DEBUG_UTIL); + + dfd = open(path, O_RDONLY|O_NONBLOCK); + if (dfd == -1 && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + if (iolog_swapids(false)) { + dfd = open(path, O_RDONLY|O_NONBLOCK); + if (!iolog_swapids(true)) { + ok = false; + goto done; + } + } + } + if (dfd != -1 && fstat(dfd, &sb) != -1) { + if (S_ISDIR(sb.st_mode)) { + if (sb.st_uid != iolog_uid || sb.st_gid != iolog_gid) { + if (fchown(dfd, iolog_uid, iolog_gid) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to chown %d:%d %s", __func__, + (int)iolog_uid, (int)iolog_gid, path); + } + } + if ((sb.st_mode & ALLPERMS) != iolog_dirmode) { + if (fchmod(dfd, iolog_dirmode) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to chmod 0%o %s", __func__, + (int)iolog_dirmode, path); + } + } + } else { + sudo_warnx(U_("%s exists but is not a directory (0%o)"), + path, (unsigned int) sb.st_mode); + ok = false; + } + goto done; + } + + /* umask must not be more restrictive than the file modes. */ + omask = umask(ACCESSPERMS & ~(iolog_filemode|iolog_dirmode)); + + ok = false; + if (dfd != -1) + close(dfd); + dfd = sudo_open_parent_dir(path, iolog_uid, iolog_gid, iolog_dirmode, true); + if (dfd == -1 && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + uid_changed = iolog_swapids(false); + if (uid_changed) + dfd = sudo_open_parent_dir(path, -1, -1, iolog_dirmode, false); + } + if (dfd != -1) { + /* Create final path component. */ + const char *base = sudo_basename(path); + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "mkdir %s, mode 0%o", path, (unsigned int) iolog_dirmode); + ok = mkdirat(dfd, base, iolog_dirmode) == 0 || errno == EEXIST; + if (!ok) { + if (errno == EACCES && !uid_changed) { + /* Try again as the I/O log owner (for NFS). */ + uid_changed = iolog_swapids(false); + if (uid_changed) + ok = mkdirat(dfd, base, iolog_dirmode) == 0 || errno == EEXIST; + } + if (!ok) + sudo_warn(U_("unable to mkdir %s"), path); + } else { + if (fchownat(dfd, base, iolog_uid, iolog_gid, AT_SYMLINK_NOFOLLOW) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to chown %d:%d %s", __func__, + (int)iolog_uid, (int)iolog_gid, path); + } + } + } + if (uid_changed) { + if (!iolog_swapids(true)) + ok = false; + } + + umask(omask); + +done: + if (dfd != -1) + close(dfd); + debug_return_bool(ok); +} diff --git a/lib/iolog/iolog_mkdtemp.c b/lib/iolog/iolog_mkdtemp.c new file mode 100644 index 0000000..cf06a6c --- /dev/null +++ b/lib/iolog/iolog_mkdtemp.c @@ -0,0 +1,99 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <time.h> +#include <errno.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_util.h" +#include "sudo_iolog.h" + +/* + * Create temporary directory and any parent directories as needed. + */ +bool +iolog_mkdtemp(char *path) +{ + const mode_t iolog_filemode = iolog_get_file_mode(); + const mode_t iolog_dirmode = iolog_get_dir_mode(); + const uid_t iolog_uid = iolog_get_uid(); + const gid_t iolog_gid = iolog_get_gid(); + bool ok = false, uid_changed = false; + char *dir = sudo_basename(path); + mode_t omask; + int dfd; + debug_decl(iolog_mkdtemp, SUDO_DEBUG_UTIL); + + /* umask must not be more restrictive than the file modes. */ + omask = umask(ACCESSPERMS & ~(iolog_filemode|iolog_dirmode)); + + dfd = sudo_open_parent_dir(path, iolog_uid, iolog_gid, iolog_dirmode, true); + if (dfd == -1 && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + uid_changed = iolog_swapids(false); + if (uid_changed) + dfd = sudo_open_parent_dir(path, -1, -1, iolog_dirmode, false); + } + if (dfd != -1) { + /* Create final path component. */ + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "mkdtemp %s", path); + /* We cannot retry mkdtemp() so always open as iolog user */ + if (!uid_changed) + uid_changed = iolog_swapids(false); + if (mkdtempat(dfd, dir) == NULL) { + sudo_warn(U_("unable to mkdir %s"), path); + ok = false; + } else { + if (fchmodat(dfd, dir, iolog_dirmode, 0) != 0) { + /* Not a fatal error, pre-existing mode is 0700. */ + sudo_warn(U_("unable to change mode of %s to 0%o"), + path, (unsigned int)iolog_dirmode); + } + ok = true; + } + close(dfd); + } + + umask(omask); + + if (uid_changed) { + if (!iolog_swapids(true)) + ok = false; + } + debug_return_bool(ok); +} diff --git a/lib/iolog/iolog_mkpath.c b/lib/iolog/iolog_mkpath.c new file mode 100644 index 0000000..b4d177a --- /dev/null +++ b/lib/iolog/iolog_mkpath.c @@ -0,0 +1,65 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <string.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * Create path and any intermediate directories. + * If path ends in 'XXXXXX', use mkdtemp(). + */ +bool +iolog_mkpath(char *path) +{ + size_t len; + bool ret; + debug_decl(iolog_mkpath, SUDO_DEBUG_UTIL); + + /* + * Create path and intermediate subdirs as needed. + * If path ends in at least 6 Xs (ala POSIX mktemp), use mkdtemp(). + * Sets iolog_gid (if it is not already set) as a side effect. + */ + len = strlen(path); + if (len >= 6 && strcmp(&path[len - 6], "XXXXXX") == 0) + ret = iolog_mkdtemp(path); + else + ret = iolog_mkdirs(path); + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "iolog path %s", path); + + debug_return_bool(ret); +} diff --git a/lib/iolog/iolog_nextid.c b/lib/iolog/iolog_nextid.c new file mode 100644 index 0000000..8977a35 --- /dev/null +++ b/lib/iolog/iolog_nextid.c @@ -0,0 +1,151 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <string.h> +#include <unistd.h> +#include <errno.h> +#include <fcntl.h> +#include <limits.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +/* + * Read the on-disk sequence number, set sessid to the next + * number, and update the on-disk copy. + * Uses file locking to avoid sequence number collisions. + */ +bool +iolog_nextid(const char *iolog_dir, char sessid[7]) +{ + char buf[32], *ep; + int i, fd = -1; + unsigned long id = 0; + size_t len; + ssize_t nread; + bool ret = false; + char pathbuf[PATH_MAX]; + static const char b36char[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + const uid_t iolog_uid = iolog_get_uid(); + const gid_t iolog_gid = iolog_get_gid(); + debug_decl(iolog_nextid, SUDO_DEBUG_UTIL); + + /* + * Create I/O log directory if it doesn't already exist. + */ + len = strlcpy(pathbuf, iolog_dir, sizeof(pathbuf)); + if (len >= sizeof(pathbuf)) { + errno = ENAMETOOLONG; + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: %s", __func__, iolog_dir); + goto done; + } + if (!iolog_mkdirs(pathbuf)) + goto done; + + /* + * Open sequence file + */ + len = strlcat(pathbuf, "/seq", sizeof(pathbuf)); + if (len >= sizeof(pathbuf)) { + errno = ENAMETOOLONG; + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: %s/seq", __func__, iolog_dir); + goto done; + } + fd = iolog_openat(AT_FDCWD, pathbuf, O_RDWR|O_CREAT); + if (fd == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to open %s", __func__, pathbuf); + goto done; + } + if (!sudo_lock_file(fd, SUDO_LOCK)) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to lock %s", pathbuf); + goto done; + } + if (fchown(fd, iolog_uid, iolog_gid) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to fchown %d:%d %s", __func__, + (int)iolog_uid, (int)iolog_gid, pathbuf); + } + + /* Read current seq number (base 36). */ + nread = read(fd, buf, sizeof(buf) - 1); + if (nread != 0) { + if (nread == -1) { + goto done; + } + if (buf[nread - 1] == '\n') + nread--; + buf[nread] = '\0'; + id = strtoul(buf, &ep, 36); + if (ep == buf || *ep != '\0' || id >= iolog_get_maxseq()) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: bad sequence number: %s", pathbuf, buf); + id = 0; + } + } + id++; + + /* + * Convert id to a string and stash in sessid. + * Note that that least significant digits go at the end of the string. + */ + for (i = 5; i >= 0; i--) { + buf[i] = b36char[id % 36]; + id /= 36; + } + buf[6] = '\n'; + + /* Stash id for logging purposes. */ + memcpy(sessid, buf, 6); + sessid[6] = '\0'; + + /* Rewind and overwrite old seq file, including the NUL byte. */ + if (pwrite(fd, buf, 7, 0) != 7) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to write %s", __func__, pathbuf); + goto done; + } + ret = true; + +done: + if (fd != -1) + close(fd); + debug_return_bool(ret); +} diff --git a/lib/iolog/iolog_open.c b/lib/iolog/iolog_open.c new file mode 100644 index 0000000..c2556a7 --- /dev/null +++ b/lib/iolog/iolog_open.c @@ -0,0 +1,127 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <errno.h> +#include <fcntl.h> +#include <time.h> +#include <unistd.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +static unsigned char const gzip_magic[2] = {0x1f, 0x8b}; + +/* + * Open the specified I/O log file and store in iol. + * Stores the open file handle which has the close-on-exec flag set. + */ +bool +iolog_open(struct iolog_file *iol, int dfd, int iofd, const char *mode) +{ + int flags; + const char *file; + unsigned char magic[2]; + const uid_t iolog_uid = iolog_get_uid(); + const gid_t iolog_gid = iolog_get_gid(); + debug_decl(iolog_open, SUDO_DEBUG_UTIL); + + if (mode[0] == 'r') { + flags = mode[1] == '+' ? O_RDWR : O_RDONLY; + } else if (mode[0] == 'w') { + flags = O_CREAT|O_TRUNC; + flags |= mode[1] == '+' ? O_RDWR : O_WRONLY; + } else { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "%s: invalid I/O mode %s", __func__, mode); + debug_return_bool(false); + } + if ((file = iolog_fd_to_name(iofd)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "%s: invalid iofd %d", __func__, iofd); + debug_return_bool(false); + } + + iol->writable = false; + iol->compressed = false; + if (iol->enabled) { + int fd = iolog_openat(dfd, file, flags); + if (fd != -1) { + if (*mode == 'w') { + if (fchown(fd, iolog_uid, iolog_gid) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to fchown %d:%d %s", __func__, + (int)iolog_uid, (int)iolog_gid, file); + } + iol->compressed = iolog_get_compress(); + } else { + /* check for gzip magic number */ + if (pread(fd, magic, sizeof(magic), 0) == ssizeof(magic)) { + if (magic[0] == gzip_magic[0] && magic[1] == gzip_magic[1]) + iol->compressed = true; + } + } + if (fcntl(fd, F_SETFD, FD_CLOEXEC) != -1) { +#ifdef HAVE_ZLIB_H + if (iol->compressed) + iol->fd.g = gzdopen(fd, mode); + else +#endif + iol->fd.f = fdopen(fd, mode); + } + if (iol->fd.v != NULL) { + switch ((flags & O_ACCMODE)) { + case O_WRONLY: + case O_RDWR: + iol->writable = true; + break; + } + } else { + int save_errno = errno; + close(fd); + errno = save_errno; + fd = -1; + } + } + if (fd == -1) { + iol->enabled = false; + debug_return_bool(false); + } + } else { + if (*mode == 'w') { + /* Remove old log file in case we recycled sequence numbers. */ + (void)unlinkat(dfd, file, 0); + } + } + debug_return_bool(true); +} diff --git a/lib/iolog/iolog_openat.c b/lib/iolog/iolog_openat.c new file mode 100644 index 0000000..f6cd21b --- /dev/null +++ b/lib/iolog/iolog_openat.c @@ -0,0 +1,90 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <errno.h> +#include <fcntl.h> +#include <unistd.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +/* + * Wrapper for openat(2) that sets umask and retries as iolog_uid/iolog_gid + * if openat(2) returns EACCES. + */ +int +iolog_openat(int dfd, const char *path, int flags) +{ + const mode_t iolog_filemode = iolog_get_file_mode(); + const mode_t iolog_dirmode = iolog_get_dir_mode(); + mode_t omask = S_IRWXG|S_IRWXO; + int fd; + debug_decl(iolog_openat, SUDO_DEBUG_UTIL); + + if (ISSET(flags, O_CREAT)) { + /* umask must not be more restrictive than the file modes. */ + omask = umask(ACCESSPERMS & ~(iolog_filemode|iolog_dirmode)); + } + fd = openat(dfd, path, flags, iolog_filemode); + if (fd == -1 && errno == EACCES) { + /* Enable write bit if it is missing. */ + struct stat sb; + if (fstatat(dfd, path, &sb, 0) == 0) { + mode_t write_bits = iolog_filemode & (S_IWUSR|S_IWGRP|S_IWOTH); + if ((sb.st_mode & write_bits) != write_bits) { + if (fchmodat(dfd, path, iolog_filemode, 0) == 0) + fd = openat(dfd, path, flags, iolog_filemode); + } + } + } + if (fd == -1 && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + if (iolog_swapids(false)) { + fd = openat(dfd, path, flags, iolog_filemode); + if (!iolog_swapids(true)) { + /* iolog_swapids() warns on error. */ + if (fd != -1) { + close(fd); + fd = -1; + } + } + } + } + if (ISSET(flags, O_CREAT)) + umask(omask); + debug_return_int(fd); +} diff --git a/lib/iolog/iolog_path.c b/lib/iolog/iolog_path.c new file mode 100644 index 0000000..16f228c --- /dev/null +++ b/lib/iolog/iolog_path.c @@ -0,0 +1,130 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2011-2015 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#include <string.h> +#include <limits.h> +#include <time.h> +#include <unistd.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +/* + * Expand any escape sequences in inpath, returning the expanded path. + */ +bool +expand_iolog_path(const char *inpath, char *path, size_t pathlen, + const struct iolog_path_escape *escapes, void *closure) +{ + char *dst, *pathend, tmpbuf[PATH_MAX]; + const char *endbrace, *src; + bool strfit = false; + size_t len; + debug_decl(expand_iolog_path, SUDO_DEBUG_UTIL); + + /* Collapse multiple leading slashes. */ + while (inpath[0] == '/' && inpath[1] == '/') + inpath++; + + pathend = path + pathlen; + for (src = inpath, dst = path; *src != '\0'; src++) { + if (src[0] == '%') { + if (src[1] == '{') { + endbrace = strchr(src + 2, '}'); + if (endbrace != NULL) { + const struct iolog_path_escape *esc; + len = (size_t)(endbrace - src - 2); + for (esc = escapes; esc->name != NULL; esc++) { + if (strncmp(src + 2, esc->name, len) == 0 && + esc->name[len] == '\0') + break; + } + if (esc->name != NULL) { + len = esc->copy_fn(dst, (size_t)(pathend - dst), + closure); + if (len >= (size_t)(pathend - dst)) + goto bad; + dst += len; + src = endbrace; + continue; + } + } + } else if (src[1] == '%') { + /* Collapse %% -> % */ + src++; + } else { + /* May need strftime() */ + strfit = true; + } + } + /* Need at least 2 chars, including the NUL terminator. */ + if (dst + 1 >= pathend) + goto bad; + *dst++ = *src; + } + + /* Trim trailing slashes and NUL terminate. */ + while (dst > path && dst[-1] == '/') + dst--; + *dst = '\0'; + + /* Expand strftime escapes as needed. */ + if (strfit) { + struct tm tm; + time_t now; + + time(&now); + if (localtime_r(&now, &tm) == NULL) + goto bad; + + /* We only call strftime() on the current part of the buffer. */ + tmpbuf[sizeof(tmpbuf) - 1] = '\0'; + len = strftime(tmpbuf, sizeof(tmpbuf), path, &tm); + + if (len == 0 || tmpbuf[sizeof(tmpbuf) - 1] != '\0') + goto bad; /* strftime() failed, buf too small? */ + + if (len >= (size_t)(pathend - path)) + goto bad; /* expanded buffer too big to fit. */ + memcpy(path, tmpbuf, len); + dst = path + len; + *dst = '\0'; + } + + debug_return_bool(true); +bad: + debug_return_bool(false); +} diff --git a/lib/iolog/iolog_read.c b/lib/iolog/iolog_read.c new file mode 100644 index 0000000..71f778a --- /dev/null +++ b/lib/iolog/iolog_read.c @@ -0,0 +1,79 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <string.h> +#include <errno.h> +#include <limits.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * Read from a (possibly compressed) I/O log file. + */ +ssize_t +iolog_read(struct iolog_file *iol, void *buf, size_t nbytes, + const char **errstr) +{ + ssize_t nread; + debug_decl(iolog_read, SUDO_DEBUG_UTIL); + + if (nbytes > UINT_MAX) { + errno = EINVAL; + if (errstr != NULL) + *errstr = strerror(errno); + debug_return_ssize_t(-1); + } + +#ifdef HAVE_ZLIB_H + if (iol->compressed) { + if ((nread = gzread(iol->fd.g, buf, nbytes)) == -1) { + if (errstr != NULL) { + int errnum; + *errstr = gzerror(iol->fd.g, &errnum); + if (errnum == Z_ERRNO) + *errstr = strerror(errno); + } + } + } else +#endif + { + nread = (ssize_t)fread(buf, 1, nbytes, iol->fd.f); + if (nread == 0 && ferror(iol->fd.f)) { + nread = -1; + if (errstr != NULL) + *errstr = strerror(errno); + } + } + debug_return_ssize_t(nread); +} diff --git a/lib/iolog/iolog_seek.c b/lib/iolog/iolog_seek.c new file mode 100644 index 0000000..928ae6e --- /dev/null +++ b/lib/iolog/iolog_seek.c @@ -0,0 +1,69 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * I/O log wrapper for fseek/gzseek. + */ +off_t +iolog_seek(struct iolog_file *iol, off_t offset, int whence) +{ + off_t ret; + //debug_decl(iolog_seek, SUDO_DEBUG_UTIL); + +#ifdef HAVE_ZLIB_H + if (iol->compressed) + ret = gzseek(iol->fd.g, offset, whence); + else +#endif + ret = fseeko(iol->fd.f, offset, whence); + + //debug_return_off_t(ret); + return ret; +} + +/* + * I/O log wrapper for rewind/gzrewind. + */ +void +iolog_rewind(struct iolog_file *iol) +{ + debug_decl(iolog_rewind, SUDO_DEBUG_UTIL); + +#ifdef HAVE_ZLIB_H + if (iol->compressed) + (void)gzrewind(iol->fd.g); + else +#endif + rewind(iol->fd.f); + + debug_return; +} diff --git a/lib/iolog/iolog_swapids.c b/lib/iolog/iolog_swapids.c new file mode 100644 index 0000000..a0a3614 --- /dev/null +++ b/lib/iolog/iolog_swapids.c @@ -0,0 +1,95 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <time.h> +#include <unistd.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" + +/* + * Set effective user and group-IDs to iolog_uid and iolog_gid. + * If restore flag is set, swap them back. + */ +bool +iolog_swapids(bool restore) +{ +#ifdef HAVE_SETEUID + static uid_t user_euid = (uid_t)-1; + static gid_t user_egid = (gid_t)-1; + const uid_t iolog_uid = iolog_get_uid(); + const gid_t iolog_gid = iolog_get_gid(); + debug_decl(io_swapids, SUDO_DEBUG_UTIL); + + if (user_euid == (uid_t)-1) + user_euid = geteuid(); + if (user_egid == (gid_t)-1) + user_egid = getegid(); + + if (restore) { + if (seteuid(user_euid) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to restore effective uid to %d", __func__, + (int)user_euid); + sudo_warn("seteuid() %d -> %d", (int)iolog_uid, (int)user_euid); + debug_return_bool(false); + } + if (setegid(user_egid) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to restore effective gid to %d", __func__, + (int)user_egid); + sudo_warn("setegid() %d -> %d", (int)iolog_gid, (int)user_egid); + debug_return_bool(false); + } + } else { + /* Fail silently if the user has insufficient privileges. */ + if (setegid(iolog_gid) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to set effective gid to %d", __func__, + (int)iolog_gid); + debug_return_bool(false); + } + if (seteuid(iolog_uid) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to set effective uid to %d", __func__, + (int)iolog_uid); + debug_return_bool(false); + } + } + debug_return_bool(true); +#else + return false; +#endif +} diff --git a/lib/iolog/iolog_timing.c b/lib/iolog/iolog_timing.c new file mode 100644 index 0000000..9eddce8 --- /dev/null +++ b/lib/iolog/iolog_timing.c @@ -0,0 +1,273 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#include <string.h> +#include <signal.h> +#include <unistd.h> +#include <ctype.h> +#include <errno.h> +#include <limits.h> +#include <fcntl.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_eventlog.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +static int timing_event_adj; + +void +iolog_adjust_delay(struct timespec *delay, struct timespec *max_delay, + double scale_factor) +{ + double seconds; + debug_decl(iolog_adjust_delay, SUDO_DEBUG_UTIL); + + if (scale_factor != 1.0) { + /* Order is important: we don't want to double the remainder. */ + seconds = (double)delay->tv_sec / scale_factor; + delay->tv_sec = (time_t)seconds; + delay->tv_nsec /= scale_factor; + delay->tv_nsec += (seconds - delay->tv_sec) * 1000000000; + while (delay->tv_nsec >= 1000000000) { + delay->tv_sec++; + delay->tv_nsec -= 1000000000; + } + } + + /* Clamp to max delay. */ + if (max_delay != NULL) { + if (sudo_timespeccmp(delay, max_delay, >)) { + delay->tv_sec = max_delay->tv_sec; + delay->tv_nsec = max_delay->tv_nsec; + } + } + + debug_return; +} + +/* + * Parse the delay as seconds and nanoseconds: %lld.%09ld + * Sudo used to write this as a double, but since timing data is logged + * in the C locale this may not match the current locale. + */ +char * +iolog_parse_delay(const char *cp, struct timespec *delay, + const char *decimal_point) +{ + char numbuf[(((sizeof(long long) * 8) + 2) / 3) + 2]; + const char *errstr, *ep; + long long llval; + size_t len; + debug_decl(iolog_parse_delay, SUDO_DEBUG_UTIL); + + /* Parse seconds (whole number portion). */ + for (ep = cp; isdigit((unsigned char)*ep); ep++) + continue; + len = (size_t)(ep - cp); + if (len >= sizeof(numbuf)) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: number of seconds is too large", cp); + debug_return_ptr(NULL); + } + memcpy(numbuf, cp, len); + numbuf[len] = '\0'; + delay->tv_sec = sudo_strtonum(numbuf, 0, TIME_T_MAX, &errstr); + if (errstr != NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: number of seconds is %s", numbuf, errstr); + debug_return_ptr(NULL); + } + + /* Radix may be in user's locale for sudo < 1.7.4 so accept that too. */ + if (*ep != '.' && *ep != *decimal_point) { + if (*ep == '\0' || isspace((unsigned char)*ep)) { + /* No fractional part. */ + delay->tv_nsec = 0; + goto done; + } + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "invalid characters after seconds: %s", ep); + debug_return_ptr(NULL); + } + cp = ep + 1; + + /* Parse fractional part, we may read more precision than we can store. */ + for (ep = cp; isdigit((unsigned char)*ep); ep++) + continue; + len = (size_t)(ep - cp); + if (len >= sizeof(numbuf)) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: number of nanoseconds is too large", cp); + debug_return_ptr(NULL); + } + memcpy(numbuf, cp, len); + numbuf[len] = '\0'; + llval = sudo_strtonum(numbuf, 0, LLONG_MAX, &errstr); + if (errstr != NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: number of nanoseconds is %s", numbuf, errstr); + debug_return_ptr(NULL); + } + + /* Adjust fractional part to nanosecond precision. */ + if (len < 9) { + /* Convert to nanosecond precision. */ + do { + llval *= 10; + } while (++len < 9); + } else if (len > 9) { + /* Clamp to nanoseconds. */ + do { + llval /= 10; + } while (--len > 9); + } + delay->tv_nsec = (long)llval; + +done: + /* Advance to the next field. */ + while (isspace((unsigned char)*ep)) + ep++; + + debug_return_str((char *)ep); +} + +/* + * Parse a timing line, which is formatted as: + * IO_EVENT_TTYOUT sleep_time num_bytes + * IO_EVENT_WINSIZE sleep_time lines cols + * IO_EVENT_SUSPEND sleep_time signo + * Where type is IO_EVENT_*, sleep_time is the number of seconds to sleep + * before writing the data and num_bytes is the number of bytes to output. + * Returns true on success and false on failure. + */ +bool +iolog_parse_timing(const char *line, struct timing_closure *timing) +{ + unsigned long ulval; + char *cp, *ep; + debug_decl(iolog_parse_timing, SUDO_DEBUG_UTIL); + + /* Clear iolog descriptor. */ + timing->iol = NULL; + + /* Parse event type. */ + ulval = strtoul(line, &ep, 10); + if (ep == line || !isspace((unsigned char) *ep)) + goto bad; + if (ulval >= IO_EVENT_COUNT) + goto bad; + if (ulval == IO_EVENT_TTYOUT_1_8_7) { + /* work around a bug in timing files generated by sudo 1.8.7 */ + timing_event_adj = 2; + } + timing->event = (int)ulval - timing_event_adj; + for (cp = ep + 1; isspace((unsigned char) *cp); cp++) + continue; + + /* Parse delay, returns the next field or NULL on error. */ + if ((cp = iolog_parse_delay(cp, &timing->delay, timing->decimal)) == NULL) + goto bad; + + switch (timing->event) { + case IO_EVENT_SUSPEND: + /* Signal name (no leading SIG prefix) or number. */ + if (str2sig(cp, &timing->u.signo) == -1) + goto bad; + break; + case IO_EVENT_WINSIZE: + ulval = strtoul(cp, &ep, 10); + if (ep == cp || !isspace((unsigned char) *ep)) + goto bad; + if (ulval > INT_MAX) + goto bad; + timing->u.winsize.lines = (int)ulval; + for (cp = ep + 1; isspace((unsigned char) *cp); cp++) + continue; + + ulval = strtoul(cp, &ep, 10); + if (ep == cp || *ep != '\0') + goto bad; + if (ulval > INT_MAX) + goto bad; + timing->u.winsize.cols = (int)ulval; + break; + default: + errno = 0; + ulval = strtoul(cp, &ep, 10); + if (ep == cp || *ep != '\0') + goto bad; + /* Note: assumes SIZE_MAX == ULONG_MAX */ + if (errno == ERANGE && ulval == ULONG_MAX) + goto bad; + timing->u.nbytes = (size_t)ulval; + break; + } + + debug_return_bool(true); +bad: + debug_return_bool(false); +} + +/* + * Read the next record from the timing file. + * Return 0 on success, 1 on EOF and -1 on error. + */ +int +iolog_read_timing_record(struct iolog_file *iol, struct timing_closure *timing) +{ + char line[LINE_MAX]; + const char *errstr; + debug_decl(iolog_read_timing_record, SUDO_DEBUG_UTIL); + + /* Read next record from timing file. */ + if (iolog_gets(iol, line, sizeof(line), &errstr) == NULL) { + /* EOF or error reading timing file, we are done. */ + if (iolog_eof(iol)) + debug_return_int(1); + sudo_warnx(U_("error reading timing file: %s"), errstr); + debug_return_int(-1); + } + + /* Parse timing file record. */ + line[strcspn(line, "\n")] = '\0'; + if (!iolog_parse_timing(line, timing)) { + sudo_warnx(U_("invalid timing file line: %s"), line); + debug_return_int(-1); + } + + debug_return_int(0); +} diff --git a/lib/iolog/iolog_util.c b/lib/iolog/iolog_util.c new file mode 100644 index 0000000..bb1dde8 --- /dev/null +++ b/lib/iolog/iolog_util.c @@ -0,0 +1,74 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * Map IOFD_* -> name. + */ +const char * +iolog_fd_to_name(int iofd) +{ + const char *ret; + debug_decl(iolog_fd_to_name, SUDO_DEBUG_UTIL); + + switch (iofd) { + case IOFD_STDIN: + ret = "stdin"; + break; + case IOFD_STDOUT: + ret = "stdout"; + break; + case IOFD_STDERR: + ret = "stderr"; + break; + case IOFD_TTYIN: + ret = "ttyin"; + break; + case IOFD_TTYOUT: + ret = "ttyout"; + break; + case IOFD_TIMING: + ret = "timing"; + break; + default: + ret = "unknown"; + sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: unexpected iofd %d", + __func__, iofd); + break; + } + debug_return_const_str(ret); +} diff --git a/lib/iolog/iolog_write.c b/lib/iolog/iolog_write.c new file mode 100644 index 0000000..82a3f6d --- /dev/null +++ b/lib/iolog/iolog_write.c @@ -0,0 +1,105 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include <config.h> + +#include <stdio.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <string.h> +#include <errno.h> +#include <limits.h> +#include <time.h> + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_iolog.h" + +/* + * Write to an I/O log, optionally compressing. + */ +ssize_t +iolog_write(struct iolog_file *iol, const void *buf, size_t len, + const char **errstr) +{ + ssize_t ret; + debug_decl(iolog_write, SUDO_DEBUG_UTIL); + + if (len > UINT_MAX) { + errno = EINVAL; + if (errstr != NULL) + *errstr = strerror(errno); + debug_return_ssize_t(-1); + } + +#ifdef HAVE_ZLIB_H + if (iol->compressed) { + int errnum; + + ret = gzwrite(iol->fd.g, (const voidp)buf, len); + if (ret == 0) { + ret = -1; + if (errstr != NULL) { + *errstr = gzerror(iol->fd.g, &errnum); + if (errnum == Z_ERRNO) + *errstr = strerror(errno); + } + goto done; + } + if (iolog_get_flush()) { + if (gzflush(iol->fd.g, Z_SYNC_FLUSH) != Z_OK) { + ret = -1; + if (errstr != NULL) { + *errstr = gzerror(iol->fd.g, &errnum); + if (errnum == Z_ERRNO) + *errstr = strerror(errno); + } + goto done; + } + } + } else +#endif + { + ret = fwrite(buf, 1, len, iol->fd.f); + if (ret == 0) { + ret = -1; + if (errstr != NULL) + *errstr = strerror(errno); + goto done; + } + if (iolog_get_flush()) { + if (fflush(iol->fd.f) != 0) { + ret = -1; + if (errstr != NULL) + *errstr = strerror(errno); + goto done; + } + } + } + +done: + debug_return_ssize_t(ret); +} diff --git a/lib/iolog/regress/corpus/seed/log_json/id.json b/lib/iolog/regress/corpus/seed/log_json/id.json new file mode 100644 index 0000000..5655639 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_json/id.json @@ -0,0 +1,36 @@ +{ + "timestamp": { + "seconds": 1603746837, + "nanoseconds": 16450063 + }, + "columns": 80, + "command": "/usr/bin/id", + "lines": 24, + "runargv": [ + "id" + ], + "runenv": [ + "PATH=/home/millert/bin/OpenBSD.amd64:/home/millert/bin:/home/millert/bin/scripts:/home/millert/node_modules/.bin:/usr/local/gnu/bin:/usr/local/bin:/usr/local/sbin:/usr/local/etc:/usr/local/rcs/bin:/usr/local/nmh/bin:/usr/local/news/bin:/usr/local/emacs/bin:/usr/local/netpbm/bin:/usr/local/mtools/bin:/usr/local/netscape/bin:/usr/local/ghostscript/bin:/usr/local/frame-5.5.6/bin:/usr/local/teTeX/bin:/usr/local/cvs-1.10.1/bin:/usr/local/games/bin:/usr/local/archivers/bin:/usr/local/skey/bin:/usr/local/audio/bin:/usr/local/rtty/bin:/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/X11R6/bin:/usr/local/bin:/usr/obj/bin:/usr/src/bin", + "TERM=xterm-color", + "LANG=en_US.UTF-8", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/bin/id", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "KRB5CCNAME=bogus" + ], + "runuid": 0, + "rungid": 0, + "runcwd": "/usr/src/local/millert/sudo/trunk/lib/eventlog/regress", + "runuser": "root", + "rungroup": "wheel", + "submitcwd": "/usr/src/local/millert/sudo/trunk/lib/eventlog/regress", + "submithost": "xerxes.sudo.ws", + "submituser": "millert", + "ttyname": "/dev/ttypb" +} diff --git a/lib/iolog/regress/corpus/seed/log_json/ls.json b/lib/iolog/regress/corpus/seed/log_json/ls.json new file mode 100644 index 0000000..17c99d8 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_json/ls.json @@ -0,0 +1,31 @@ +{ + "timestamp": { + "seconds": 1584790549, + "nanoseconds": 782859154 + }, + "columns": 80, + "command": "/bin/ls", + "lines": 24, + "runargv": [ "ls" ], + "runenv": [ + "LANG=en_US.UTF-8", + "TERM=tmux", + "PATH=/home/millert/bin/OpenBSD.amd64:/home/millert/bin:/home/millert/bin/scripts:/home/millert/node_modules/.bin:/usr/local/gnu/bin:/usr/local/bin:/usr/local/sbin:/usr/local/etc:/usr/local/rcs/bin:/usr/local/nmh/bin:/usr/local/news/bin:/usr/local/emacs/bin:/usr/local/netpbm/bin:/usr/local/mtools/bin:/usr/local/netscape/bin:/usr/local/ghostscript/bin:/usr/local/frame-5.5.6/bin:/usr/local/teTeX/bin:/usr/local/cvs-1.10.1/bin:/usr/local/games/bin:/usr/local/archivers/bin:/usr/local/skey/bin:/usr/local/audio/bin:/usr/local/rtty/bin:/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/X11R6/bin:/usr/local/bin:/usr/obj/bin:/usr/src/bin", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/bin/ls", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "KRB5CCNAME=bogus" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/usr/src/local/millert/hg/sudo/1.7", + "submithost": "xerxes.sudo.ws", + "submituser": "millert", + "ttyname": "/dev/ttyp3" +} diff --git a/lib/iolog/regress/corpus/seed/log_json/mailq.json b/lib/iolog/regress/corpus/seed/log_json/mailq.json new file mode 100644 index 0000000..669090d --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_json/mailq.json @@ -0,0 +1,31 @@ +{ + "timestamp": { + "seconds": 1584884264, + "nanoseconds": 499794755 + }, + "columns": 80, + "command": "/usr/bin/mailq", + "lines": 24, + "runargv": [ "mailq" ], + "runenv": [ + "LANG=en_US.UTF-8", + "PATH=/home/millert/bin/OpenBSD.amd64:/home/millert/bin:/home/millert/bin/scripts:/home/millert/node_modules/.bin:/usr/local/gnu/bin:/usr/local/bin:/usr/local/sbin:/usr/local/etc:/usr/local/rcs/bin:/usr/local/nmh/bin:/usr/local/news/bin:/usr/local/emacs/bin:/usr/local/netpbm/bin:/usr/local/mtools/bin:/usr/local/netscape/bin:/usr/local/ghostscript/bin:/usr/local/frame-5.5.6/bin:/usr/local/teTeX/bin:/usr/local/cvs-1.10.1/bin:/usr/local/games/bin:/usr/local/archivers/bin:/usr/local/skey/bin:/usr/local/audio/bin:/usr/local/rtty/bin:/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/X11R6/bin:/usr/local/bin:/usr/obj/bin:/usr/src/bin", + "TERM=tmux", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/bin/mailq", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "KRB5CCNAME=bogus" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/home/millert", + "submithost": "xerxes.sudo.ws", + "submituser": "millert", + "ttyname": "/dev/ttyp3" +} diff --git a/lib/iolog/regress/corpus/seed/log_json/make.json b/lib/iolog/regress/corpus/seed/log_json/make.json new file mode 100644 index 0000000..dcc4736 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_json/make.json @@ -0,0 +1,36 @@ +{ + "timestamp": { + "seconds": 1584977889, + "nanoseconds": 510217787 + }, + "columns": 80, + "command": "/usr/bin/make", + "lines": 24, + "runargv": [ + "make", + "-C", + "/usr/src/usr.bin/sort", + "install" + ], + "runenv": [ + "PATH=/home/millert/bin/OpenBSD.amd64:/home/millert/bin:/home/millert/bin/scripts:/home/millert/node_modules/.bin:/usr/local/gnu/bin:/usr/local/bin:/usr/local/sbin:/usr/local/etc:/usr/local/rcs/bin:/usr/local/nmh/bin:/usr/local/news/bin:/usr/local/emacs/bin:/usr/local/netpbm/bin:/usr/local/mtools/bin:/usr/local/netscape/bin:/usr/local/ghostscript/bin:/usr/local/frame-5.5.6/bin:/usr/local/teTeX/bin:/usr/local/cvs-1.10.1/bin:/usr/local/games/bin:/usr/local/archivers/bin:/usr/local/skey/bin:/usr/local/audio/bin:/usr/local/rtty/bin:/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/X11R6/bin:/usr/local/bin:/usr/obj/bin:/usr/src/bin", + "TERM=xterm-color", + "LANG=en_US.UTF-8", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/bin/make -C /usr/src/usr.bin/sort install", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "KRB5CCNAME=bogus" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/home/millert/tmp/src/usr.bin/sort", + "submithost": "xerxes.sudo.ws", + "submituser": "millert", + "ttyname": "/dev/ttypi" +} diff --git a/lib/iolog/regress/corpus/seed/log_json/pkg_add.json b/lib/iolog/regress/corpus/seed/log_json/pkg_add.json new file mode 100644 index 0000000..bfebc76 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_json/pkg_add.json @@ -0,0 +1,34 @@ +{ + "timestamp": { + "seconds": 1595281300, + "nanoseconds": 130458256 + }, + "columns": 80, + "command": "/usr/sbin/pkg_add", + "lines": 24, + "runargv": [ + "pkg_add", + "p5-PDF-API2" + ], + "runenv": [ + "PATH=/home/millert/bin/OpenBSD.amd64:/home/millert/bin:/home/millert/bin/scripts:/home/millert/node_modules/.bin:/usr/local/gnu/bin:/usr/local/bin:/usr/local/sbin:/usr/local/etc:/usr/local/rcs/bin:/usr/local/nmh/bin:/usr/local/news/bin:/usr/local/emacs/bin:/usr/local/netpbm/bin:/usr/local/mtools/bin:/usr/local/netscape/bin:/usr/local/ghostscript/bin:/usr/local/frame-5.5.6/bin:/usr/local/teTeX/bin:/usr/local/cvs-1.10.1/bin:/usr/local/games/bin:/usr/local/archivers/bin:/usr/local/skey/bin:/usr/local/audio/bin:/usr/local/rtty/bin:/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/X11R6/bin:/usr/local/bin:/usr/obj/bin:/usr/src/bin", + "TERM=xterm-color", + "LANG=en_US.UTF-8", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/sbin/pkg_add p5-PDF-API2", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "KRB5CCNAME=bogus" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/usr/src/local/Music/chordpro", + "submithost": "xerxes.sudo.ws", + "submituser": "millert", + "ttyname": "/dev/ttypd" +} diff --git a/lib/iolog/regress/corpus/seed/log_json/pkg_delete.json b/lib/iolog/regress/corpus/seed/log_json/pkg_delete.json new file mode 100644 index 0000000..f0e4fba --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_json/pkg_delete.json @@ -0,0 +1,34 @@ +{ + "timestamp": { + "seconds": 1595620314, + "nanoseconds": 965982512 + }, + "columns": 80, + "command": "/usr/sbin/pkg_delete", + "lines": 24, + "runargv": [ + "pkg_delete", + "chordpro" + ], + "runenv": [ + "PATH=/home/millert/bin/OpenBSD.amd64:/home/millert/bin:/home/millert/bin/scripts:/home/millert/node_modules/.bin:/usr/local/gnu/bin:/usr/local/bin:/usr/local/sbin:/usr/local/etc:/usr/local/rcs/bin:/usr/local/nmh/bin:/usr/local/news/bin:/usr/local/emacs/bin:/usr/local/netpbm/bin:/usr/local/mtools/bin:/usr/local/netscape/bin:/usr/local/ghostscript/bin:/usr/local/frame-5.5.6/bin:/usr/local/teTeX/bin:/usr/local/cvs-1.10.1/bin:/usr/local/games/bin:/usr/local/archivers/bin:/usr/local/skey/bin:/usr/local/audio/bin:/usr/local/rtty/bin:/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/X11R6/bin:/usr/local/bin:/usr/obj/bin:/usr/src/bin", + "TERM=xterm-color", + "LANG=en_US.UTF-8", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/sbin/pkg_delete chordpro", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "KRB5CCNAME=bogus" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/usr/ports/textproc/chordpro/pkg", + "submithost": "xerxes.sudo.ws", + "submituser": "millert", + "ttyname": "/dev/ttypd" +} diff --git a/lib/iolog/regress/corpus/seed/log_json/printenv.json b/lib/iolog/regress/corpus/seed/log_json/printenv.json new file mode 100644 index 0000000..6e78719 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_json/printenv.json @@ -0,0 +1,34 @@ +{ + "timestamp": { + "seconds": 1601411718, + "nanoseconds": 269131020 + }, + "columns": 80, + "command": "/usr/bin/printenv", + "lines": 24, + "runargv": [ + "/usr/bin/printenv" + ], + "runenv": [ + "KRB5CCNAME=bogus", + "LANG=en_US.UTF-8", + "PATH=/tmp", + "TERM=xterm-color", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/bin/printenv", + "SUDO_USER=testdude", + "SUDO_UID=1000", + "SUDO_GID=1000" + ], + "runuid": 0, + "runcwd": "/usr/src/local/millert/sudo/trunk/plugins/sudoers", + "runuser": "root", + "submitcwd": "/usr/src/local/millert/sudo/trunk/plugins/sudoers", + "submithost": "xerxes.sudo.ws", + "submituser": "testdude", + "ttyname": "/dev/ttypb" +} diff --git a/lib/iolog/regress/corpus/seed/log_legacy/id.log b/lib/iolog/regress/corpus/seed/log_legacy/id.log new file mode 100644 index 0000000..e59965e --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/id.log @@ -0,0 +1,3 @@ +1603746837:millert:root::/dev/ttypb:24:80 +/usr/src/local/millert/sudo/trunk/lib/eventlog/regress +/usr/bin/id diff --git a/lib/iolog/regress/corpus/seed/log_legacy/less.log b/lib/iolog/regress/corpus/seed/log_legacy/less.log new file mode 100644 index 0000000..66e2929 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/less.log @@ -0,0 +1,3 @@ +1611859113:bob:bob:ldap:/dev/console:24:80 +/var/tmp +/usr/bin/less /etc/ldapd.conf diff --git a/lib/iolog/regress/corpus/seed/log_legacy/ls.log b/lib/iolog/regress/corpus/seed/log_legacy/ls.log new file mode 100644 index 0000000..808605c --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/ls.log @@ -0,0 +1,3 @@ +1584790549:millert:root::/dev/ttyp3:24:80 +/usr/src/local/millert/hg/sudo/1.7 +/bin/ls diff --git a/lib/iolog/regress/corpus/seed/log_legacy/mailq.log b/lib/iolog/regress/corpus/seed/log_legacy/mailq.log new file mode 100644 index 0000000..9b1fdd6 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/mailq.log @@ -0,0 +1,3 @@ +1584884264:millert:root::/dev/ttyp3:24:80 +/home/millert +/usr/bin/mailq diff --git a/lib/iolog/regress/corpus/seed/log_legacy/make.log b/lib/iolog/regress/corpus/seed/log_legacy/make.log new file mode 100644 index 0000000..c27798a --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/make.log @@ -0,0 +1,3 @@ +1584977889:millert:root::/dev/ttypi:24:80 +/home/millert/tmp/src/usr.bin/sort +/usr/bin/make -C /usr/src/usr.bin/sort install diff --git a/lib/iolog/regress/corpus/seed/log_legacy/pkg_add.log b/lib/iolog/regress/corpus/seed/log_legacy/pkg_add.log new file mode 100644 index 0000000..78358e7 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/pkg_add.log @@ -0,0 +1,3 @@ +1595281300:millert:root::/dev/ttypd:24:80 +/usr/src/local/Music/chordpro +/usr/sbin/pkg_add p5-PDF-API2 diff --git a/lib/iolog/regress/corpus/seed/log_legacy/pkg_delete.log b/lib/iolog/regress/corpus/seed/log_legacy/pkg_delete.log new file mode 100644 index 0000000..ce0899a --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/pkg_delete.log @@ -0,0 +1,3 @@ +1595620314:millert:root::/dev/ttypd:24:80 +/usr/ports/textproc/chordpro/pkg +/usr/sbin/pkg_delete chordpro diff --git a/lib/iolog/regress/corpus/seed/log_legacy/printenv.log b/lib/iolog/regress/corpus/seed/log_legacy/printenv.log new file mode 100644 index 0000000..dbc739a --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/printenv.log @@ -0,0 +1,3 @@ +1601411718:testdude:root::/dev/ttypb:24:80 +/usr/src/local/millert/sudo/trunk/plugins/sudoers +/usr/bin/printenv diff --git a/lib/iolog/regress/corpus/seed/log_legacy/smtpctl.log b/lib/iolog/regress/corpus/seed/log_legacy/smtpctl.log new file mode 100644 index 0000000..d365617 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/smtpctl.log @@ -0,0 +1,3 @@ +1666108884:aemon:root::/dev/pts/4:64:128 +/home/aemon +/usr/sbin/smtpctl remove 272a4d27e1fd732e diff --git a/lib/iolog/regress/corpus/seed/log_legacy/vi.log b/lib/iolog/regress/corpus/seed/log_legacy/vi.log new file mode 100644 index 0000000..c95f061 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/log_legacy/vi.log @@ -0,0 +1,3 @@ +1611849879:alice:root::/dev/pts/0:24:80 +/export/home/alice +/usr/bin/vi /etc/nsswitch.conf diff --git a/lib/iolog/regress/corpus/seed/timing/timing.1 b/lib/iolog/regress/corpus/seed/timing/timing.1 new file mode 100644 index 0000000..e954cda --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.1 @@ -0,0 +1,51 @@ +4 0.032200538 32 +4 0.000461816 917 +4 0.000260488 41 +3 0.748747801 1 +4 0.002709345 1040 +3 0.605486330 1 +4 0.002136958 792 +3 0.981620620 1 +4 0.001898021 39 +7 0.002496718 TSTP +7 11.781181911 CONT +5 0.000331519 59 120 +4 0.002261240 7 +4 0.005713594 7 +4 0.001005416 974 +4 0.004255422 2064 +4 0.001929362 445 +3 0.632938830 1 +4 0.001316335 15 +3 0.989972022 1 +4 0.001419091 39 +7 0.002164759 TSTP +7 1.195700989 CONT +4 0.001525087 7 +7 0.002025577 TTOU +7 0.908621867 CONT +4 0.001755079 7 +4 0.001712634 2064 +4 0.001236879 467 +3 0.347054501 1 +4 0.003931829 2082 +3 0.236017124 1 +4 0.002960088 618 +3 0.285032645 1 +4 0.000951230 1 +3 0.470931231 1 +4 0.001103587 8 +3 0.142977268 1 +4 0.001048037 1 +3 0.126189543 1 +4 0.000255520 1 +4 0.000641997 2064 +4 0.000298772 176 +3 3.183861587 1 +4 0.001098032 9 +3 0.142511842 1 +4 0.000995141 1 +3 0.191337037 1 +4 0.001096192 1 +4 0.001180378 7 +4 0.000838979 28 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.2 b/lib/iolog/regress/corpus/seed/timing/timing.2 new file mode 100644 index 0000000..d3e8da0 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.2 @@ -0,0 +1,196 @@ +4 0.017420446 378 +4 0.101673410 78 +4 0.020237132 106 +4 32.406835619 258 +4 0.071903094 51 +4 0.044405150 53 +4 0.002465527 153 +4 0.061104878 37 +4 0.037284253 3 +4 0.035933494 3 +4 0.035405047 3 +4 0.035096439 3 +4 0.035427343 3 +4 0.035278610 3 +4 0.035503923 3 +4 0.034726429 3 +4 0.035415822 3 +4 0.035642850 4 +4 0.035104123 3 +4 0.035177940 3 +4 0.035114787 3 +4 0.035398463 3 +4 0.035774228 3 +4 0.034687088 3 +4 0.035231607 3 +4 0.035235355 3 +4 0.035430098 3 +4 0.035238761 3 +4 0.035310472 3 +4 0.035678834 6 +4 0.035098980 3 +4 0.034974643 3 +4 0.034769832 3 +4 0.035066706 3 +4 0.034910781 3 +4 0.034939164 3 +4 0.035387880 3 +4 0.036229124 3 +4 0.035210123 6 +4 0.034996626 6 +4 0.034484929 2 +4 0.014762481 40 +4 0.034798156 3 +4 0.035382724 3 +4 0.035200992 3 +4 0.035793731 3 +4 0.036046635 3 +4 0.035232505 3 +4 0.035596184 3 +4 0.034359958 3 +4 0.034881742 3 +4 0.036581308 4 +4 0.035716612 3 +4 0.034981224 3 +4 0.034653311 3 +4 0.035700405 3 +4 0.035204600 3 +4 0.035080066 3 +4 0.035072298 3 +4 0.035950557 3 +4 0.034524949 3 +4 0.035231401 3 +4 0.035918148 6 +4 0.035009022 3 +4 0.034086126 3 +4 0.034031601 3 +4 0.035507794 3 +4 0.035359991 3 +4 0.035451670 3 +4 0.034207436 3 +4 0.036154464 3 +4 0.034687026 6 +4 0.034511000 6 +4 0.035712971 2 +4 0.001114632 280 +4 0.013357954 70 +4 0.009099934 250 +4 0.345595767 59 +4 0.014672692 168 +4 0.165009111 119 +4 0.037129573 168 +4 0.163729717 119 +4 0.046685595 70 +4 0.010058716 205 +4 0.335682997 62 +4 0.009757680 403 +4 0.764539162 234 +4 0.126274733 133 +4 0.035954324 133 +4 0.160744133 706 +4 0.012594228 389 +4 0.000600099 337 +4 0.008974842 70 +4 0.009992828 205 +4 0.333655416 62 +4 0.009799688 415 +4 0.768206552 251 +4 0.123329919 133 +4 0.036529633 133 +4 0.131658603 706 +4 0.009965871 452 +4 0.000352099 274 +4 0.006881291 70 +4 0.007616147 210 +4 0.258108895 67 +4 0.007582335 418 +4 0.592632286 244 +4 0.096206429 143 +4 0.028539423 143 +4 0.124772846 706 +4 0.009854967 389 +4 0.000365510 337 +4 0.038009729 245 +4 0.044260031 73 +4 0.013835442 72 +4 0.013734457 81 +4 0.013966252 260 +4 0.233058895 59 +4 0.007278138 869 +4 1.481039643 148 +4 0.089258162 158 +4 0.082642822 151 +4 0.051838211 2202 +4 0.164269353 45 +4 0.014776451 127 +4 0.033523033 127 +4 0.102601946 706 +4 0.009758392 475 +4 0.000371524 251 +4 0.006895216 149 +4 0.101515800 117 +4 0.049231011 149 +4 0.100724385 117 +4 0.028593605 142 +4 0.100398116 110 +4 0.033582408 74 +4 0.013919259 82 +4 0.020859788 63 +4 0.007864945 70 +4 0.007803279 207 +4 0.258587972 64 +4 0.007479117 409 +4 0.590341346 238 +4 0.095587884 137 +4 0.028246058 137 +4 0.125974303 706 +4 0.009846897 475 +4 0.000398383 251 +4 0.007711302 101 +4 0.013103236 208 +4 0.261674900 65 +4 0.007528283 730 +4 0.890361622 601 +4 0.126547307 139 +4 0.034250610 139 +4 0.126209288 706 +4 0.009859395 475 +4 0.000386854 251 +4 0.002122077 310 +4 0.153210769 179 +4 0.014128026 253 +4 0.007009755 152 +4 0.127577685 103 +4 0.029587241 31 +4 0.001733173 36 +4 0.001730350 187 +4 0.002311429 334 +4 0.002449265 165 +4 0.089927714 131 +4 0.028627022 132 +4 0.124746485 706 +4 0.009744954 452 +4 0.000377336 274 +4 0.006732444 62 +4 0.006519788 106 +4 0.024636847 130 +4 0.018143227 294 +4 0.177574909 150 +4 0.124543833 104 +4 0.021106187 92 +4 0.021020993 108 +4 0.019733705 106 +4 0.021929696 120 +4 0.021340851 108 +4 0.020144663 104 +4 0.019972905 96 +4 0.019911985 102 +4 0.020978336 118 +4 0.020270010 118 +4 0.020800394 98 +4 0.023331698 118 +4 0.020625734 108 +4 0.024362590 45 +4 0.006712794 74 +4 0.008052322 209 +4 0.088262080 95 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.3 b/lib/iolog/regress/corpus/seed/timing/timing.3 new file mode 100644 index 0000000..4034898 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.3 @@ -0,0 +1,988 @@ +4 0.004667517 65 +1 0.000204598 16384 +1 0.000232870 16384 +1 0.000182715 16384 +1 0.000233631 16384 +1 0.000180381 16384 +1 0.000175649 16384 +1 0.000175959 16384 +1 0.000214345 16384 +1 0.000184234 16384 +1 0.000227610 16384 +1 0.000185340 16384 +1 0.000176307 16384 +1 0.000175898 16384 +1 0.000268993 16384 +1 0.000183674 16384 +1 0.000215319 16384 +1 0.000175147 16384 +1 0.000175248 16384 +1 0.000175224 16384 +1 0.000215165 16384 +1 0.000186660 16384 +1 0.000175657 16384 +1 0.000212448 16384 +1 0.000176406 16384 +1 0.000176418 16384 +1 0.000175909 16384 +1 0.000233918 16384 +1 0.000175175 16384 +1 0.000210767 16384 +1 0.000176349 16384 +1 0.000175932 16384 +1 0.000223892 16384 +1 0.000204215 16384 +1 0.000182071 16384 +1 0.000174307 16384 +1 0.000212948 16384 +1 0.000174008 16384 +1 0.000183305 16384 +1 0.000210859 16384 +1 0.000173624 16384 +1 0.000174269 16384 +1 0.000173759 16384 +1 0.000211001 16384 +1 0.000188432 16384 +1 0.000208482 16384 +1 0.000173818 16384 +1 0.000173706 16384 +1 0.000172848 16384 +1 0.000219983 16384 +1 0.000173715 16384 +1 0.000173231 16384 +1 0.000207740 16384 +1 0.000172355 16384 +1 0.000173862 16384 +1 0.000218171 16384 +1 0.000172711 16384 +1 0.000171980 16384 +1 0.000173769 16384 +1 0.000209693 16384 +1 0.000182913 16384 +1 0.000213414 16384 +1 0.000174563 16384 +1 0.000176066 16384 +1 0.000178416 16384 +1 0.000211025 16384 +1 0.000184019 16384 +1 0.000172715 16384 +1 0.000211906 16384 +1 0.000172898 16384 +1 0.000172698 16384 +1 0.000172687 16384 +1 0.000219835 16384 +1 0.000175073 16384 +1 0.000172194 16384 +1 0.000210039 16384 +1 0.000172651 16384 +1 0.000180363 16384 +1 0.000207814 16384 +1 0.000181339 16384 +1 0.000172957 16384 +1 0.000210462 16384 +1 0.000173359 16384 +1 0.000183117 16384 +1 0.000211472 16384 +1 0.000172785 16384 +1 0.000173065 16384 +1 0.000172556 16384 +1 0.000219412 16384 +1 0.000175049 16384 +1 0.000172688 16384 +1 0.000212409 16384 +1 0.000173995 16384 +1 0.000173362 16384 +1 0.000217888 16384 +1 0.000174519 16384 +1 0.000179535 16384 +1 0.000210660 16384 +1 0.000173236 16384 +1 0.000172656 16384 +1 0.000218333 16384 +1 0.000175598 16384 +1 0.000173390 16384 +1 0.000174078 16384 +1 0.000210326 16384 +1 0.000182926 16384 +1 0.000173350 16384 +1 0.000211036 16384 +1 0.000174038 16384 +1 0.000173647 16384 +1 0.000173506 16384 +1 0.000219713 16384 +1 0.000173048 16384 +1 0.000216544 16384 +1 0.000173473 16384 +1 0.000173584 16384 +1 0.000217290 16384 +1 0.000221436 16384 +1 0.000181452 16384 +1 0.000175981 16384 +1 0.000216787 16384 +1 0.000176126 16384 +1 0.000192080 16384 +1 0.000218372 16384 +1 0.000176383 16384 +1 0.000175741 16384 +1 0.000176882 16384 +1 0.000211760 16384 +1 0.000180460 16384 +1 0.000171301 16384 +1 0.000217254 16384 +1 0.000171345 16384 +1 0.000171068 16384 +1 0.000217296 16384 +1 0.000171584 16384 +1 0.000171382 16384 +1 0.000211004 16384 +1 0.000171735 16384 +1 0.000171288 16384 +1 0.000217634 16384 +1 0.000171509 16384 +1 0.000171665 16384 +1 0.000171047 16384 +1 0.000232622 16384 +1 0.000200850 16384 +1 0.000186185 16384 +1 0.000236223 16384 +1 0.000189277 16384 +1 0.000184901 16384 +1 0.000218248 16384 +1 0.000186495 16384 +1 0.000197206 16384 +1 0.000211952 16384 +1 0.000175248 16384 +1 0.000173748 16384 +1 0.000174236 16384 +1 0.000222111 16384 +1 0.000174574 16384 +1 0.000174434 16384 +1 0.000212226 16384 +1 0.000174342 16384 +1 0.000184829 16384 +1 0.000213260 16384 +1 0.000173502 16384 +1 0.000173093 16384 +1 0.000221162 16384 +1 0.000174153 16384 +1 0.000182299 16384 +1 0.000210864 16384 +1 0.000203068 16384 +1 0.000219136 16384 +1 0.000174002 16384 +1 0.000213188 16384 +1 0.000183505 16384 +1 0.000172565 16384 +1 0.000209734 16384 +1 0.000174341 16384 +1 0.000172264 16384 +1 0.000221781 16384 +1 0.000174790 16384 +1 0.000172739 16384 +1 0.000174020 16384 +1 0.000221785 16384 +1 0.000172995 16384 +1 0.000222941 16384 +1 0.000173977 16384 +1 0.000172728 16384 +1 0.000173524 16384 +1 0.000214508 16384 +1 0.000180455 16384 +1 0.000173688 16384 +1 0.000218400 16384 +1 0.000173836 16384 +1 0.000173021 16384 +1 0.000174233 16384 +1 0.000211773 16384 +1 0.000173345 16384 +1 0.000172586 16384 +1 0.000209547 16384 +1 0.000173828 16384 +1 0.000177025 16384 +1 0.000219995 16384 +1 0.000172918 16384 +1 0.000173449 16384 +1 0.000209423 16384 +1 0.000181676 16384 +1 0.000183441 16384 +1 0.000209581 16384 +1 0.000173832 16384 +1 0.000173270 16384 +1 0.000172904 16384 +1 0.000210702 16384 +1 0.000182215 16384 +1 0.000189641 16384 +1 0.000284181 16384 +1 0.000175365 16384 +1 0.000172881 16384 +1 0.000228551 16384 +1 0.000183598 16384 +1 0.000212813 16384 +1 0.000171234 16384 +1 0.000171113 16384 +1 0.000265216 16384 +1 0.000256766 16384 +1 0.000177761 16384 +1 0.000176795 16384 +1 0.000216366 16384 +1 0.000176847 16384 +1 0.000176382 16384 +1 0.000196256 16384 +1 0.000185652 16384 +1 0.000191254 16384 +1 0.000184776 16384 +1 0.000217719 16384 +1 0.000196783 16384 +1 0.000214624 16384 +1 0.000176543 16384 +1 0.000176621 16384 +1 0.000176781 16384 +1 0.000214375 16384 +1 0.000187073 16384 +1 0.000175881 16384 +1 0.000214427 16384 +1 0.000176819 16384 +1 0.000186002 16384 +1 0.000223983 16384 +1 0.000173340 16384 +1 0.000180282 16384 +1 0.000175780 16384 +1 0.000216125 16384 +1 0.000176193 16384 +1 0.000234609 16384 +1 0.000175698 16384 +1 0.000174926 16384 +1 0.000175740 16384 +1 0.000213854 16384 +1 0.000176984 16384 +1 0.000186810 16384 +1 0.000210152 16384 +1 0.000174875 16384 +1 0.000174813 16384 +1 0.000175036 16384 +1 0.000226974 16384 +1 0.000174660 16384 +1 0.000174744 16384 +1 0.000204522 16384 +1 0.000174780 16384 +1 0.000174814 16384 +1 0.000221269 16384 +1 0.000188334 16384 +1 0.000175739 16384 +1 0.000209695 16384 +1 0.000193824 16384 +1 0.000188632 16384 +1 0.000210526 16384 +1 0.000174158 16384 +1 0.000174339 16384 +1 0.000174180 16384 +1 0.000206907 16384 +1 0.000182368 16384 +1 0.000173833 16384 +1 0.000209012 16384 +1 0.000173131 16384 +1 0.000172859 16384 +1 0.000172674 16384 +1 0.000219815 16384 +1 0.000182668 16384 +1 0.000212487 16384 +1 0.000173833 16384 +1 0.000173242 16384 +1 0.000221886 16384 +1 0.000174126 16384 +1 0.000173782 16384 +1 0.000173083 16384 +1 0.000212048 16384 +1 0.000173991 16384 +1 0.000183737 16384 +1 0.000212986 16384 +1 0.000175737 16384 +1 0.000171877 16384 +1 0.000173977 16384 +1 0.000212917 16384 +1 0.000183401 16384 +1 0.000220644 16384 +1 0.000174845 16384 +1 0.000173519 16384 +1 0.000173358 16384 +1 0.000221424 16384 +1 0.000174225 16384 +1 0.000174026 16384 +1 0.000181262 16384 +1 0.000181238 16384 +1 0.000179989 16384 +1 0.000234088 16384 +1 0.000174627 16384 +1 0.000174688 16384 +1 0.000175388 16384 +1 0.000214217 16384 +1 0.000182064 16384 +1 0.000175192 16384 +1 0.000221012 16384 +1 0.000175500 16384 +1 0.000173344 16384 +1 0.000212621 16384 +1 0.000182532 16384 +1 0.000174054 16384 +1 0.000213046 16384 +1 0.000178598 16384 +1 0.000172744 16384 +1 0.000174442 16384 +1 0.000224111 16384 +1 0.000174925 16384 +1 0.000173327 16384 +1 0.000212011 16384 +1 0.000174397 16384 +1 0.000183846 16384 +1 0.000211973 16384 +1 0.000174197 16384 +1 0.000181158 16384 +1 0.000211734 16384 +1 0.000174521 16384 +1 0.000185459 16384 +1 0.000210420 16384 +1 0.000173614 16384 +1 0.000174063 16384 +1 0.000173928 16384 +1 0.000221641 16384 +1 0.000174892 16384 +1 0.000173602 16384 +1 0.000213548 16384 +1 0.000173288 16384 +1 0.000174566 16384 +1 0.000221746 16384 +1 0.000173691 16384 +1 0.000172544 16384 +1 0.000221593 16384 +1 0.000174859 16384 +1 0.000174593 16384 +1 0.000221470 16384 +1 0.000174906 16384 +1 0.000174414 16384 +1 0.000174643 16384 +1 0.000180381 16384 +1 0.000228118 16384 +1 0.000174372 16384 +1 0.000172894 16384 +1 0.000174088 16384 +1 0.000210179 16384 +1 0.000173018 16384 +1 0.000183585 16384 +1 0.000212582 16384 +1 0.000174028 16384 +1 0.000180274 16384 +1 0.000210011 16384 +1 0.000181061 16384 +1 0.000171667 16384 +1 0.000212975 16384 +1 0.000173474 16384 +1 0.000174824 16384 +1 0.000174770 16384 +1 0.000259517 16384 +1 0.000175254 16384 +1 0.000174674 16384 +1 0.000211257 16384 +1 0.000173914 16384 +1 0.000173226 16384 +1 0.000218736 16384 +1 0.000174777 16384 +1 0.000174287 16384 +1 0.000173806 16384 +1 0.000223350 16384 +1 0.000182470 16384 +1 0.000173368 16384 +1 0.000210632 16384 +1 0.000173962 16384 +1 0.000174398 16384 +1 0.000173870 16384 +1 0.000219226 16384 +1 0.000174328 16384 +1 0.000173605 16384 +1 0.000207352 16384 +1 0.000175893 16384 +1 0.000181901 16384 +1 0.000210141 16384 +1 0.000174263 16384 +1 0.000174436 16384 +1 0.000173800 16384 +1 0.000218953 16384 +1 0.000182143 16384 +1 0.000209929 16384 +1 0.000181286 16384 +1 0.000175206 16384 +1 0.000175289 16384 +1 0.000211021 16384 +1 0.000184189 16384 +1 0.000173899 16384 +1 0.000208349 16384 +1 0.000173540 16384 +1 0.000173470 16384 +1 0.000218306 16384 +1 0.000174466 16384 +1 0.000173733 16384 +1 0.000174997 16384 +1 0.000208404 16384 +1 0.000183404 16384 +1 0.000216987 16384 +1 0.000174787 16384 +1 0.000172001 16384 +1 0.000174352 16384 +1 0.000210113 16384 +1 0.000174975 16384 +1 0.000181474 16384 +1 0.000208027 16384 +1 0.000220815 16384 +1 0.000182672 16384 +1 0.000177670 16384 +1 0.000226754 16384 +1 0.000176226 16384 +1 0.000176257 16384 +1 0.000213945 16384 +1 0.000177178 16384 +1 0.000184848 16384 +1 0.000227104 16384 +1 0.000176737 16384 +1 0.000176047 16384 +1 0.000213861 16384 +1 0.000176249 16384 +1 0.000192460 16384 +1 0.000213055 16384 +1 0.000176122 16384 +1 0.000175803 16384 +1 0.000176855 16384 +1 0.000213759 16384 +1 0.000183896 16384 +1 0.000176042 16384 +1 0.000215572 16384 +1 0.000177052 16384 +1 0.000176248 16384 +1 0.000176225 16384 +1 0.000232080 16384 +1 0.000175961 16384 +1 0.000214198 16384 +1 0.000176799 16384 +1 0.000175935 16384 +1 0.000223226 16384 +1 0.000176909 16384 +1 0.000176795 16384 +1 0.000176510 16384 +1 0.000214109 16384 +1 0.000176961 16384 +1 0.000186460 16384 +1 0.000211960 16384 +1 0.000176559 16384 +1 0.000175660 16384 +1 0.000176204 16384 +1 0.000219927 16384 +1 0.000189594 16384 +1 0.000214824 16384 +1 0.000176935 16384 +1 0.000176513 16384 +1 0.000176800 16384 +1 0.000224628 16384 +1 0.000176509 16384 +1 0.000175911 16384 +1 0.000214526 16384 +1 0.000185996 16384 +1 0.000177260 16384 +1 0.000222187 16384 +1 0.000176306 16384 +1 0.000175852 16384 +1 0.000176047 16384 +1 0.000213267 16384 +1 0.000187775 16384 +1 0.000223034 16384 +1 0.000178203 16384 +1 0.000176681 16384 +1 0.000176577 16384 +1 0.000211623 16384 +1 0.000187933 16384 +1 0.000176091 16384 +1 0.000213563 16384 +1 0.000176665 16384 +1 0.000175972 16384 +1 0.000221236 16384 +1 0.000177542 16384 +1 0.000176816 16384 +1 0.000176855 16384 +1 0.000214626 16384 +1 0.000176270 16384 +1 0.000187315 16384 +1 0.000213606 16384 +1 0.000185588 16384 +1 0.000175148 16384 +1 0.000211150 16384 +1 0.000175119 16384 +1 0.000186448 16384 +1 0.000212381 16384 +1 0.000177247 16384 +1 0.000175999 16384 +1 0.000176495 16384 +1 0.000222973 16384 +1 0.000175776 16384 +1 0.000176586 16384 +1 0.000212810 16384 +1 0.000176501 16384 +1 0.000176409 16384 +1 0.000223551 16384 +1 0.000177325 16384 +1 0.000185881 16384 +1 0.000212232 16384 +1 0.000176149 16384 +1 0.000182616 16384 +1 0.000216249 16384 +1 0.000183941 16384 +1 0.000179989 16384 +1 0.000176223 16384 +1 0.000212771 16384 +1 0.000187318 16384 +1 0.000336166 16384 +1 0.000219610 16384 +1 0.000176123 16384 +1 0.000176534 16384 +1 0.000176734 16384 +1 0.000224839 16384 +1 0.000176819 16384 +1 0.000222734 16384 +1 0.000177474 16384 +1 0.000176537 16384 +1 0.000225175 16384 +1 0.000177148 16384 +1 0.000176676 16384 +1 0.000176364 16384 +1 0.000211976 16384 +1 0.000176519 16384 +1 0.000186739 16384 +1 0.000213745 16384 +1 0.000176337 16384 +1 0.000175372 16384 +1 0.000175256 16384 +1 0.000191167 16384 +1 0.000227098 16384 +1 0.000203959 16384 +1 0.000194934 16384 +1 0.000214879 16384 +1 0.000174297 16384 +1 0.000184364 16384 +1 0.000215725 16384 +1 0.000173186 16384 +1 0.000174405 16384 +1 0.000173021 16384 +1 0.000212846 16384 +1 0.000181787 16384 +1 0.000173693 16384 +1 0.000211996 16384 +1 0.000174205 16384 +1 0.000175232 16384 +1 0.000222319 16384 +1 0.000174473 16384 +1 0.000173905 16384 +1 0.000174245 16384 +1 0.000222767 16384 +1 0.000174680 16384 +1 0.000217322 16384 +1 0.000175657 16384 +1 0.000172138 16384 +1 0.000173154 16384 +1 0.000181922 16384 +1 0.000211261 16384 +1 0.000184041 16384 +1 0.000173746 16384 +1 0.000243145 16384 +1 0.000179559 16384 +1 0.000176514 16384 +1 0.000228488 16384 +1 0.000177394 16384 +1 0.000177116 16384 +1 0.000176330 16384 +1 0.000223859 16384 +1 0.000182981 16384 +1 0.000227680 16384 +1 0.000177529 16384 +1 0.000177276 16384 +1 0.000176643 16384 +1 0.000213851 16384 +1 0.000184064 16384 +1 0.000178917 16384 +1 0.000183389 16384 +1 0.000213760 16384 +1 0.000176615 16384 +1 0.000177014 16384 +1 0.000222460 16384 +1 0.000177618 16384 +1 0.000177433 16384 +1 0.000176751 16384 +1 0.000220289 16384 +1 0.000183874 16384 +1 0.000223291 16384 +1 0.000176584 16384 +1 0.000175356 16384 +1 0.000176131 16384 +1 0.000238184 16384 +1 0.000193171 16384 +1 0.000174034 16384 +1 0.000215225 16384 +1 0.000174230 16384 +1 0.000174692 16384 +1 0.000175198 16384 +1 0.000220923 16384 +1 0.000174519 16384 +1 0.000173328 16384 +1 0.000210593 16384 +1 0.000175280 16384 +1 0.000223725 16384 +1 0.000174043 16384 +1 0.000172213 16384 +1 0.000174386 16384 +1 0.000210062 16384 +1 0.000172668 16384 +1 0.000182741 16384 +1 0.000209600 16384 +1 0.000173388 16384 +1 0.000174516 16384 +1 0.000204938 16384 +1 0.000219722 16384 +1 0.000186264 16384 +1 0.000175835 16384 +1 0.000216579 16384 +1 0.000176859 16384 +1 0.000185424 16384 +1 0.000256274 16384 +1 0.000177038 16384 +1 0.000177028 16384 +1 0.000177097 16384 +1 0.000218396 16384 +1 0.000176244 16384 +1 0.000186753 16384 +1 0.000216613 16384 +1 0.000177165 16384 +1 0.000175987 16384 +1 0.000176194 16384 +1 0.000224954 16384 +1 0.000176241 16384 +1 0.000179706 16384 +1 0.000215687 16384 +1 0.000176822 16384 +1 0.000176959 16384 +1 0.000238809 16384 +1 0.000176021 16384 +1 0.000176005 16384 +1 0.000215081 16384 +1 0.000176917 16384 +1 0.000176841 16384 +1 0.000226806 16384 +1 0.000176823 16384 +1 0.000176219 16384 +1 0.000176206 16384 +1 0.000215191 16384 +1 0.000187089 16384 +1 0.000175357 16384 +1 0.000215160 16384 +1 0.000175506 16384 +1 0.000176262 16384 +1 0.000176893 16384 +1 0.000234077 16384 +1 0.000179820 16384 +1 0.000216583 16384 +1 0.000179626 16384 +1 0.000177220 16384 +1 0.000176652 16384 +1 0.000227752 16384 +1 0.000176586 16384 +1 0.000176687 16384 +1 0.000214614 16384 +1 0.000177012 16384 +1 0.000195925 16384 +1 0.000217877 16384 +1 0.000176660 16384 +1 0.000176628 16384 +1 0.000176518 16384 +1 0.000215128 16384 +1 0.000187158 16384 +1 0.000225865 16384 +1 0.000176883 16384 +1 0.000176479 16384 +1 0.000176918 16384 +1 0.000224584 16384 +1 0.000180642 16384 +1 0.000176575 16384 +1 0.000244591 16384 +1 0.000178884 16384 +1 0.000174478 16384 +1 0.000226308 16384 +1 0.000174493 16384 +1 0.000174253 16384 +1 0.000176100 16384 +1 0.000215833 16384 +1 0.000176009 16384 +1 0.000183651 16384 +1 0.000223742 16384 +1 0.000174847 16384 +1 0.000174555 16384 +1 0.000213911 16384 +1 0.000182787 16384 +1 0.000174312 16384 +1 0.000213740 16384 +1 0.000175147 16384 +1 0.000174444 16384 +1 0.000174608 16384 +1 0.000222736 16384 +1 0.000174226 16384 +1 0.000174346 16384 +1 0.000216076 16384 +1 0.000174753 16384 +1 0.000182164 16384 +1 0.000217255 16384 +1 0.000182199 16384 +1 0.000176654 16384 +1 0.000184926 16384 +1 0.000214193 16384 +1 0.000184332 16384 +1 0.000175061 16384 +1 0.000214842 16384 +1 0.000174290 16384 +1 0.000175230 16384 +1 0.000174584 16384 +1 0.000222141 16384 +1 0.000175004 16384 +1 0.000221859 16384 +1 0.000215405 16384 +1 0.000174805 16384 +1 0.000184484 16384 +1 0.000212251 16384 +1 0.000173998 16384 +1 0.000179855 16384 +1 0.000214218 16384 +1 0.000173891 16384 +1 0.000183743 16384 +1 0.000213744 16384 +1 0.000173599 16384 +1 0.000173705 16384 +1 0.000172790 16384 +1 0.000220443 16384 +1 0.000176454 16384 +1 0.000174052 16384 +1 0.000182942 16384 +1 0.000182499 16384 +1 0.000182752 16384 +1 0.000218520 16384 +1 0.000174344 16384 +1 0.000174067 16384 +1 0.000221027 16384 +1 0.000174479 16384 +1 0.000173231 16384 +1 0.000219055 16384 +1 0.000173519 16384 +1 0.000173592 16384 +1 0.000187641 16384 +1 0.000180615 16384 +1 0.000221532 16384 +1 0.000173358 16384 +1 0.000173716 16384 +1 0.000212930 16384 +1 0.000173799 16384 +1 0.000173265 16384 +1 0.000220938 16384 +1 0.000174478 16384 +1 0.000174193 16384 +1 0.000218225 16384 +1 0.000175334 16384 +1 0.000174731 16384 +1 0.000221306 16384 +1 0.000173339 16384 +1 0.000172534 16384 +1 0.000174621 16384 +1 0.000211371 16384 +1 0.000184274 16384 +1 0.000173693 16384 +1 0.000210738 16384 +1 0.000172870 16384 +1 0.000173658 16384 +1 0.000174610 16384 +1 0.000227013 16384 +1 0.000174377 16384 +1 0.000173774 16384 +1 0.000216715 16384 +1 0.000174562 16384 +1 0.000184457 16384 +1 0.000212227 16384 +1 0.000174285 16384 +1 0.000172947 16384 +1 0.000172874 16384 +1 0.000209950 16384 +1 0.000183721 16384 +1 0.000173842 16384 +1 0.000181812 16384 +1 0.000209234 16384 +1 0.000173865 16384 +1 0.000174440 16384 +1 0.000219158 16384 +1 0.000173688 16384 +1 0.000186204 16384 +1 0.000187117 16384 +1 0.000224835 16384 +1 0.000186466 16384 +1 0.000215016 16384 +1 0.000173500 16384 +1 0.000172877 16384 +1 0.000173607 16384 +1 0.000212322 16384 +1 0.000183453 16384 +1 0.000173058 16384 +1 0.000212908 16384 +1 0.000174174 16384 +1 0.000173832 16384 +1 0.000220095 16384 +1 0.000174213 16384 +1 0.000173628 16384 +1 0.000173636 16384 +1 0.000214330 16384 +1 0.000181537 16384 +1 0.000218378 16384 +1 0.000176719 16384 +1 0.000173799 16384 +1 0.000175342 16384 +1 0.000180003 16384 +1 0.000180824 16384 +1 0.000206418 16384 +1 0.000180934 16384 +1 0.000213981 16384 +1 0.000173692 16384 +1 0.000174841 16384 +1 0.000219890 16384 +1 0.000174085 16384 +1 0.000178707 16384 +1 0.000173240 16384 +1 0.000212296 16384 +1 0.000183092 16384 +1 0.000223713 16384 +1 0.000174196 16384 +1 0.000174774 16384 +1 0.000176585 16384 +1 0.000213063 16384 +1 0.000181023 16384 +1 0.000174437 16384 +1 0.000212119 16384 +1 0.000174637 16384 +1 0.000174680 16384 +1 0.000172043 16384 +1 0.000225831 16384 +1 0.000174957 16384 +1 0.000173717 16384 +1 0.000204836 16384 +1 0.000174480 16384 +1 0.000174503 16384 +1 0.000227562 16384 +1 0.000174648 16384 +1 0.000173883 16384 +1 0.000210909 16384 +1 0.000175163 16384 +1 0.000185280 16384 +1 0.000188143 16384 +1 0.000213442 16384 +1 0.000175698 16384 +1 0.000174523 16384 +1 0.000173744 16384 +1 0.000222276 16384 +1 0.000173932 16384 +1 0.000174101 16384 +1 0.000228212 16384 +1 0.000179652 16384 +1 0.000182744 16384 +1 0.000219840 16384 +1 0.000171827 16384 +1 0.000172109 16384 +1 0.000213111 16384 +1 0.000175428 16384 +1 0.000182643 16384 +1 0.000180712 16384 +1 0.000212075 16384 +1 0.000174431 16384 +1 0.000174165 16384 +1 0.000173958 16384 +1 0.000221502 16384 +1 0.000174430 16384 +1 0.000172987 16384 +1 0.000213347 16384 +1 0.000179394 16384 +1 0.000184413 16384 +1 0.000221817 16384 +1 0.000173676 16384 +1 0.000173467 16384 +1 0.000211345 16384 +1 0.000173427 16384 +1 0.000183070 16384 +1 0.000214273 16384 +1 0.000173861 16384 +1 0.000172542 16384 +1 0.000172972 16384 +1 0.000212044 16384 +1 0.000179707 16384 +1 0.000173853 16384 +1 0.000214614 16384 +1 0.000175333 16384 +1 0.000174546 16384 +1 0.000219227 16384 +1 0.000182069 16384 +1 0.000174346 16384 +1 0.000213209 16384 +1 0.000174893 16384 +1 0.000173416 16384 +1 0.000220164 16384 +1 0.000174433 16384 +1 0.000173567 16384 +1 0.000174038 16384 +1 0.000211480 16384 +1 0.000181584 16384 +1 0.000174524 16384 +1 0.000212783 16384 +1 0.000173224 16384 +1 0.000173899 16384 +1 0.000173311 16384 +1 0.000227583 16384 +1 0.000173853 16384 +1 0.000181100 16384 +1 0.000210033 16384 +1 0.000173540 16384 +1 0.000173247 16384 +1 0.000216875 16384 +1 0.000176372 16384 +1 0.000174152 16384 +1 0.000173313 16384 +1 0.000180973 16384 +1 0.000219101 16384 +1 0.000174160 16384 +1 0.000173459 16384 +1 0.000208939 16384 +1 0.000173989 16384 +1 0.000173410 16384 +1 0.000218716 16384 +1 0.000177116 16384 +1 0.000182663 16384 +1 0.000212028 16384 +1 0.000173705 16384 +1 0.000181046 16384 +1 0.000209238 16384 +1 0.000174394 16384 +1 0.000174024 16384 +1 0.000173850 16384 +1 0.000210442 16384 +1 0.000181175 16384 +1 0.000171863 16384 +1 0.000211097 16384 +1 0.000174362 16384 +1 0.000174110 16384 +1 0.000174258 16384 +1 0.000222086 16384 +1 0.000173989 16384 +1 0.000232996 16384 +1 0.000178935 16384 +1 0.000174268 16384 +1 0.000224038 16384 +1 0.000174040 16384 +1 0.000174231 16384 +1 0.000174277 16384 +1 0.000216674 16384 +1 0.000175634 16384 +4 0.000634865 54 +1 0.000552527 10240 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.4 b/lib/iolog/regress/corpus/seed/timing/timing.4 new file mode 100644 index 0000000..20e0bb0 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.4 @@ -0,0 +1,8 @@ +2 0.025750192 5 +0 0.670737828 2 +0 2.832110312 2 +0 0.903947334 2 +0 1.727798521 3 +0 2.040329883 2 +2 0.001192523 2 +1 0.001253839 77 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.5 b/lib/iolog/regress/corpus/seed/timing/timing.5 new file mode 100644 index 0000000..53e6c24 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.5 @@ -0,0 +1,110 @@ +4 0.094338301 36 +4 0.000886452 454 +4 0.000419509 47 +3 0.578593257 1 +4 0.000401105 9 +3 0.239515513 1 +4 0.000346806 1 +3 0.087693564 1 +4 0.000347787 1 +3 0.143659822 1 +4 0.000358177 1 +3 0.144622999 1 +4 0.000365053 1 +3 0.334698655 1 +4 0.000383718 1 +3 0.143675707 1 +4 0.000490451 38 +3 0.607406896 1 +4 0.000371268 14 +3 0.215742108 1 +4 0.000405734 20 +3 0.167496479 1 +4 0.000397476 32 +3 0.231540616 2 +4 0.001466590 36 +4 0.000350286 42 +3 0.158274203 1 +4 0.000370821 60 +3 0.120308265 1 +4 0.000415876 15 +3 0.142813715 1 +4 0.000334956 44 +3 0.303764107 1 +4 0.000391847 8 +3 0.095659280 1 +4 0.000378759 1 +3 0.175643525 1 +4 0.000322526 1 +3 0.135538631 1 +4 0.000350139 1 +4 0.000387250 43 +4 0.000294911 14 +3 1.167339458 1 +4 0.000459546 34 +7 0.000701240 TSTP +7 14.031400225 CONT +4 0.000703876 7 +4 0.000318515 552 +3 0.519022507 1 +4 0.000353381 8 +3 0.151484068 1 +4 0.000408559 1 +3 0.111526674 1 +4 0.000332701 1 +3 0.640246014 1 +4 0.000595362 2 +3 0.262836266 1 +4 0.000548454 34 +3 0.431603931 1 +4 0.000412839 34 +7 0.000525770 TSTP +7 14.791352365 CONT +4 0.000694230 7 +4 0.000302349 493 +3 0.727405050 1 +4 0.000500700 34 +7 0.000535360 TSTP +7 3.670976441 CONT +4 0.000618883 7 +4 0.000329643 493 +3 0.726805533 1 +4 0.000401741 15 +3 0.169615608 1 +4 0.000404146 14 +3 0.149519005 1 +4 0.000346040 14 +3 0.153626768 1 +4 0.000374982 14 +3 10.982612173 1 +3 0.499604568 1 +4 0.000430040 54 +3 0.082890262 1 +3 0.083639576 1 +4 0.000372554 36 +3 0.083005173 1 +3 0.083770729 1 +4 0.000362184 30 +3 0.082958130 1 +3 0.083891314 1 +4 0.000406165 69 +3 0.083110106 1 +3 0.083892294 1 +4 0.000367886 54 +3 0.224878822 1 +3 0.197955553 1 +4 0.000374885 45 +3 1.639667508 1 +4 0.000391391 8 +3 0.127675700 1 +4 0.000336583 1 +3 0.159694034 1 +4 0.000460055 1 +4 0.000356674 57 +3 12.784074969 1 +4 0.000383899 8 +3 0.319071776 1 +4 0.000350990 1 +3 0.375753852 1 +4 0.000391679 1 +4 0.000470435 31 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.6 b/lib/iolog/regress/corpus/seed/timing/timing.6 new file mode 100644 index 0000000..2cfb414 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.6 @@ -0,0 +1,15185 @@ +4 0.097693988 36 +4 0.000957658 581 +3 1.103319620 1 +4 0.000458372 9 +3 0.343116579 1 +4 0.000338600 1 +3 0.167807742 1 +4 0.000347723 1 +3 0.168370615 1 +4 0.000331790 1 +3 0.126841177 1 +4 0.000494776 21 +4 0.000389804 737 +3 3.911758825 1 +4 0.000589551 589 +3 1.199213488 1 +4 0.000571867 671 +3 0.175283013 1 +4 0.000551106 788 +3 0.927605729 1 +4 0.000592528 778 +3 0.727361437 1 +4 0.000600088 810 +3 0.151449161 1 +4 0.000549159 703 +3 0.151365424 1 +4 0.000521802 579 +3 0.175504252 1 +4 0.000572822 841 +3 1.479559831 1 +4 0.000566667 671 +3 1.215437518 1 +4 0.000560614 732 +3 6.359874366 1 +4 0.000586055 517 +3 0.711069519 1 +4 0.000624372 678 +3 1.967625161 1 +4 0.000587631 788 +3 2.959415103 1 +4 0.000467050 52 +3 0.258284691 1 +4 0.000359406 17 +3 0.150663754 1 +4 0.000345830 16 +3 0.629841487 1 +3 0.130078374 1 +4 0.000427154 28 +3 1.573712476 1 +4 0.000597951 683 +3 0.679455332 1 +4 0.000624382 625 +3 0.863325943 1 +4 0.000589350 849 +3 0.871257287 1 +4 0.000377259 15 +3 0.500679027 1 +4 0.000338887 15 +3 0.082915074 1 +4 0.000418604 17 +3 0.082596070 1 +4 0.000321263 17 +3 0.083131776 1 +4 0.000330500 17 +3 0.083371296 1 +4 0.000345874 15 +3 0.083108756 1 +4 0.000389047 15 +3 0.082748138 1 +4 0.000315527 16 +3 0.083950965 1 +4 0.000325339 16 +3 0.548314643 1 +4 0.000410020 17 +3 0.429723783 1 +4 0.001632651 37 +4 0.000426417 133 +3 0.693988537 1 +4 0.000351760 16 +3 0.463602549 1 +4 0.000356594 10 +3 0.415613181 1 +4 0.000366763 1 +3 0.135780117 1 +4 0.000335017 1 +3 0.175462207 1 +4 0.000330054 1 +3 0.079900650 1 +4 0.000334757 1 +3 0.103456346 1 +4 0.000319517 1 +3 0.103817387 1 +4 0.000323711 1 +3 0.063555555 1 +4 0.000319964 1 +3 0.119579686 1 +4 0.000404602 1 +3 0.223797910 1 +4 0.000389022 40 +3 2.503757937 1 +4 0.000390701 10 +3 0.055447548 1 +4 0.000533591 690 +3 2.903881053 1 +4 0.000568568 726 +3 0.145177548 1 +4 0.000362889 102 +3 1.894563020 1 +4 0.000338633 18 +3 0.168988785 1 +4 0.000374107 18 +3 0.173551488 1 +4 0.000384121 17 +3 0.161628071 1 +4 0.000403103 18 +3 0.149569901 1 +4 0.000370231 17 +3 0.201795897 1 +4 0.000371537 17 +3 0.277452123 1 +3 0.312120348 1 +4 0.000382358 65 +3 0.135528556 1 +4 0.000376779 79 +3 0.655753048 2 +4 0.000393158 103 +3 0.311981813 1 +4 0.000358735 18 +3 0.153241402 1 +4 0.000357208 18 +3 0.149367912 1 +4 0.000341365 17 +3 0.153758664 1 +4 0.000409446 18 +3 0.141572461 1 +4 0.000334930 17 +3 0.281753655 1 +4 0.000313237 17 +3 0.253785106 1 +3 0.048044598 1 +4 0.000390744 29 +3 0.199848389 1 +4 0.000351924 18 +3 0.095365075 1 +4 0.000367343 18 +3 0.103384570 1 +4 0.000330248 18 +3 0.087929267 1 +4 0.000363207 18 +3 0.263566078 2 +4 0.000365425 28 +3 0.129673483 1 +4 0.000418293 18 +3 0.245509930 1 +3 0.072023907 1 +4 0.000346915 27 +3 0.233641617 1 +4 0.000371518 18 +3 0.149968246 1 +4 0.000329324 18 +3 0.750253477 1 +4 0.109987655 37 +3 24.356082499 2 +4 0.000575072 18 +3 0.311960778 1 +4 0.000363365 17 +3 6.328346132 1 +4 0.000383670 31 +3 0.374564260 1 +4 0.000364229 31 +3 4.263853812 1 +4 0.000385394 31 +3 0.072217819 1 +4 0.000359701 31 +3 0.142867118 1 +4 0.000386346 31 +3 0.127731426 1 +4 0.000511355 31 +3 0.055387421 1 +4 0.000385155 31 +3 1.695812701 1 +4 0.000358800 31 +3 0.697693334 1 +4 0.109968812 31 +3 3.968687583 1 +4 0.000582462 652 +3 2.087163132 1 +4 0.000600691 922 +3 1.671266499 1 +4 0.000436508 36 +3 0.500227380 1 +4 0.000409164 78 +3 0.083208834 1 +4 0.000483458 69 +3 0.082631972 1 +4 0.000394210 73 +3 0.083382084 1 +4 0.000400565 84 +3 13.617030561 1 +4 0.000354061 15 +3 0.500733232 1 +4 0.000347347 15 +3 0.082671126 1 +4 0.000355244 15 +3 0.082945476 1 +4 0.000365822 18 +3 0.082683300 1 +4 0.000403621 17 +3 0.083034469 1 +4 0.000356155 15 +3 0.083001633 1 +4 0.000378724 15 +3 0.082987035 1 +4 0.000356646 15 +3 0.083172601 1 +4 0.000347790 17 +3 0.082982191 1 +4 0.000354769 18 +3 0.083231707 1 +4 0.000356674 16 +3 0.083455577 1 +4 0.000375342 16 +3 0.082774961 1 +4 0.000345080 16 +3 0.083148577 1 +4 0.000372898 17 +3 0.082488084 1 +4 0.000351168 18 +3 0.361137018 1 +4 0.000520394 16 +3 0.557563133 1 +4 0.000365756 16 +3 0.217686213 1 +4 0.000405765 16 +3 0.213411640 1 +4 0.000437376 16 +3 0.201749904 1 +4 0.000417367 16 +3 1.077644672 1 +3 0.183765838 1 +3 0.114281411 1 +4 0.000415479 29 +3 1.797684026 1 +4 0.000592681 817 +3 2.423564964 1 +4 0.000635387 721 +3 0.735894059 1 +4 0.000366561 16 +3 0.499433634 1 +4 0.000403990 18 +3 0.083697754 1 +4 0.000353510 16 +3 0.082821690 1 +4 0.000460907 16 +3 0.083470466 1 +4 0.000391016 18 +3 0.351749864 1 +4 0.000435746 219 +3 0.335662878 1 +4 0.000385166 36 +3 0.455599429 2 +4 0.000450086 32 +3 0.311480720 1 +3 0.130132593 1 +4 0.000422315 30 +3 0.141538312 1 +4 0.000350580 18 +3 0.161698419 1 +4 0.000450382 16 +3 0.149595861 1 +4 0.000357490 16 +3 0.216118106 1 +4 0.000392863 80 +3 0.287025425 1 +4 0.000368499 16 +3 0.217810528 1 +4 0.000368675 16 +3 0.173583780 1 +4 0.000612887 16 +3 0.185363502 1 +4 0.000357218 16 +3 0.558456948 1 +4 0.000384082 18 +3 0.478831088 1 +4 0.000373041 47 +3 0.143904945 1 +4 0.000423017 19 +3 0.143222621 1 +4 0.000362659 17 +3 1.143703843 1 +4 0.000371411 18 +3 0.167600427 1 +4 0.000358131 18 +3 0.175738166 1 +4 0.000372615 18 +3 0.119668569 1 +4 0.000396472 18 +3 0.095593535 1 +4 0.000371665 18 +3 0.191668990 1 +4 0.000415434 18 +3 0.215453670 1 +4 0.000353548 18 +3 0.215843292 1 +4 0.000368685 18 +3 0.543724152 1 +4 0.000363077 18 +3 0.423428920 1 +4 0.000565616 18 +3 0.119487325 1 +4 0.000392118 18 +3 0.135715995 1 +4 0.000360686 18 +3 0.071574120 1 +4 0.000439295 18 +3 0.191534353 1 +4 0.000349726 18 +3 0.231687599 1 +4 0.000350854 18 +3 0.247590333 1 +4 0.000349565 18 +3 0.399664247 1 +4 0.000399287 17 +3 0.199694033 1 +4 0.000399199 18 +3 0.103461914 1 +4 0.000385370 18 +3 0.095701982 1 +4 0.000393397 18 +3 0.295621485 1 +4 0.000348993 19 +3 0.144437413 1 +4 0.000379088 18 +3 0.198764313 1 +4 0.000397818 18 +3 12.245000582 1 +3 0.067286171 1 +4 0.000930451 647 +3 1.271066901 1 +4 0.000611308 785 +3 0.967396885 1 +4 0.000391811 9 +3 2.013803015 12 +4 0.000359778 12 +3 0.354058672 1 +4 0.000442726 15 +4 0.000353259 38 +3 0.454372890 1 +4 0.000353679 43 +3 0.201776929 1 +4 0.000449372 21 +3 0.165645069 1 +4 0.000388749 56 +4 0.000394368 7 +3 0.369116907 1 +4 0.000346666 43 +3 0.381642743 1 +4 0.000350900 21 +3 0.489700692 1 +4 0.000403145 56 +4 0.000284088 7 +3 0.357448445 1 +4 0.000432074 43 +3 1.625632487 1 +4 0.000561739 21 +3 2.749500295 1 +4 0.000382505 32 +3 0.127541732 1 +4 0.000349587 17 +3 0.879715291 1 +4 0.000422238 18 +3 0.079504711 1 +4 0.000358804 18 +3 0.071640554 1 +4 0.000462190 17 +3 1.511581913 1 +4 0.000370736 18 +3 0.137723663 1 +4 0.000576506 18 +3 0.157423583 1 +4 0.000359301 18 +3 0.111569388 1 +4 0.000370080 19 +3 0.175788910 1 +4 0.000390579 18 +3 0.127548586 1 +4 0.000517405 16 +3 0.087543039 1 +4 0.000389857 13 +3 0.087475036 1 +4 0.000385001 11 +3 0.263652341 1 +4 0.000362769 11 +3 0.079606457 1 +4 0.000456234 13 +3 0.151586763 1 +4 0.000576884 16 +3 0.119449667 1 +4 0.000391357 18 +3 0.248391442 1 +4 0.000348267 18 +3 0.070873604 1 +4 0.000395821 19 +3 0.031479523 1 +4 0.000339832 18 +3 0.215879653 1 +4 0.000371564 18 +3 0.208675804 1 +4 0.000364165 18 +3 0.781127774 1 +4 0.110104180 31 +3 0.347449927 1 +4 0.000391058 17 +3 0.759576804 1 +4 0.000399054 17 +3 0.719475822 1 +4 0.000363481 16 +3 0.209764674 1 +4 0.000420853 18 +3 0.181543921 1 +4 0.000446865 18 +3 0.695649553 1 +4 0.000364348 17 +3 5.655914971 1 +4 0.000371102 17 +3 0.501146264 1 +4 0.000390485 19 +3 0.082334811 1 +4 0.000389853 104 +3 0.082770985 1 +4 0.000640857 35 +3 0.082634854 1 +4 0.000391535 63 +3 0.082831129 1 +4 0.000395020 74 +3 0.083338259 1 +4 0.000765883 37 +3 0.305557932 1 +4 0.000358155 22 +3 0.500134468 1 +4 0.000373010 20 +3 0.082875224 1 +4 0.000369529 17 +3 0.083206683 1 +4 0.000650077 20 +3 0.820266736 1 +4 0.000372327 17 +3 0.500281203 1 +4 0.000356297 20 +3 0.083495657 1 +4 0.000352191 20 +3 0.082911125 1 +4 0.000345727 17 +3 0.084251862 1 +4 0.000421566 63 +3 0.198985382 1 +4 0.000347753 17 +3 0.169733060 1 +4 0.000561367 22 +3 0.165295001 1 +4 0.000351808 20 +3 2.623960816 1 +3 0.199877174 1 +3 0.154622991 1 +4 0.000424027 149 +3 0.116976645 1 +4 0.000356668 39 +3 0.500771628 1 +4 0.000453280 18 +3 0.083310622 1 +4 0.000333387 16 +3 0.083360523 1 +4 0.000588696 16 +3 0.083278747 1 +4 0.000364923 16 +3 0.083317744 1 +4 0.000363486 16 +3 0.082785265 1 +4 0.000334722 17 +3 0.083134633 1 +4 0.000327780 18 +3 0.388953653 1 +4 0.000397659 17 +3 0.279631899 1 +4 0.000443440 116 +3 0.735498889 1 +4 0.000402995 40 +3 0.161654066 1 +4 0.000360349 18 +3 0.645690164 1 +3 0.122095192 1 +4 0.000550745 75 +3 0.861346110 1 +4 0.000368374 18 +3 0.297657683 1 +4 0.000409950 16 +3 0.221573357 1 +4 0.000359706 17 +3 0.201590265 1 +4 0.000420145 18 +3 0.725891565 1 +4 0.000410403 94 +3 2.343419099 1 +3 0.138014095 1 +4 0.000406190 75 +3 0.149528893 1 +4 0.000376405 18 +3 0.233967970 1 +4 0.000362616 16 +3 0.181388607 1 +4 0.000375845 17 +3 0.169715363 1 +4 0.000358644 18 +3 0.421516995 1 +4 0.000423347 16 +3 0.223600858 1 +4 0.000351994 16 +3 0.169858347 1 +4 0.000372798 18 +3 0.165442069 1 +4 0.000437843 18 +3 47.612015956 1 +4 0.000420777 17 +3 7.645117521 1 +4 0.000357043 17 +3 0.203064792 1 +4 0.000404651 19 +3 0.148078594 1 +4 0.000372767 20 +3 14.800360987 1 +4 0.000372152 19 +3 0.193409434 1 +4 0.000360058 20 +3 0.181573590 1 +4 0.000334749 17 +3 4.672137645 1 +4 0.000547796 17 +3 0.201216303 1 +4 0.000350221 17 +3 0.493727268 1 +4 0.000394587 79 +3 1.239531925 1 +4 0.000411232 17 +3 0.201577596 1 +4 0.000363153 17 +3 0.181839196 1 +4 0.000365743 17 +3 0.217580259 1 +4 0.000419291 17 +3 0.413603793 1 +4 0.000389252 17 +3 4.879696734 1 +3 0.087993182 1 +4 0.000359318 28 +3 1.183741831 1 +4 0.000392000 18 +3 0.072371680 1 +4 0.000344036 18 +3 0.102840326 1 +4 0.000339979 18 +3 0.263644252 1 +4 0.000364716 18 +3 0.239809832 1 +4 0.000367180 107 +3 1.841911098 1 +4 0.109988327 33 +3 0.183660214 1 +4 0.000468781 9 +3 0.439556740 1 +4 0.000343767 1 +3 0.455845269 1 +4 0.000558674 54 +3 0.735274963 1 +4 0.000346882 9 +3 0.343642094 1 +4 0.000339960 1 +3 1.135630546 1 +4 0.000319323 1 +3 0.336150973 1 +4 0.002246722 58 +3 0.725368029 1 +4 0.000365124 9 +3 0.513883520 1 +4 0.000327517 1 +3 0.245487314 1 +4 0.000376272 1 +3 0.207695699 1 +4 0.000583922 779 +3 3.047550138 1 +3 0.129914536 1 +4 0.000361284 30 +3 0.517742428 1 +4 0.000876578 750 +3 0.153144700 1 +4 0.000827063 111 +3 1.077031634 1 +4 0.000385969 71 +3 0.671823909 1 +4 0.000700510 18 +3 0.177114177 1 +4 0.000365033 18 +3 0.165687178 1 +4 0.000364717 17 +3 0.351744220 1 +3 0.071908205 1 +4 0.000407900 28 +3 0.151677345 1 +4 0.000736606 18 +3 0.079541471 1 +4 0.000340519 18 +3 0.063463155 1 +4 0.000367949 18 +3 0.223506778 1 +4 0.000413034 18 +3 0.191692925 1 +4 0.000356857 26 +3 0.731677511 1 +4 0.109976927 33 +3 0.637929593 1 +4 0.000343755 17 +3 2.143779663 1 +4 0.000397634 4 +3 1.194158239 1 +4 0.000365274 4 +3 0.333180352 1 +4 0.000422079 17 +3 0.153395992 1 +4 0.000325371 17 +3 0.277789897 1 +4 0.000338965 4 +3 2.791906961 1 +4 0.000353063 17 +3 0.447635092 1 +3 0.138080657 1 +4 0.000566001 123 +3 0.253283500 1 +4 0.000734297 18 +3 2.401408669 1 +4 0.000329021 17 +3 0.229622809 1 +4 0.000368301 17 +3 0.249743461 1 +4 0.000332259 18 +3 1.405520404 1 +4 0.000626065 17 +3 0.513922219 1 +4 0.000352021 4 +3 0.317143072 1 +3 0.096174521 1 +4 0.000367483 33 +3 0.289500737 1 +4 0.000337331 18 +3 0.141681003 1 +4 0.000524692 18 +3 0.137672726 1 +4 0.000685531 18 +3 0.133085948 1 +4 0.000369897 18 +3 0.231827680 1 +4 0.000447277 18 +3 0.095501521 1 +4 0.000366060 18 +3 0.119494082 1 +4 0.001318263 18 +3 0.086667164 1 +4 0.000415062 19 +3 0.279538386 1 +4 0.000366880 18 +3 0.111882109 1 +4 0.000655035 18 +3 0.151184959 1 +4 0.000339245 18 +3 1.025459480 1 +3 0.006208551 1 +4 0.000357062 24 +3 0.219848723 1 +4 0.000409328 17 +3 3.732349804 1 +4 0.000364343 33 +3 0.593127057 13 +4 0.000410474 31 +3 0.797100093 1 +4 0.109976757 36 +3 1.778343138 1 +4 0.000499455 19 +3 0.217486897 1 +4 0.000362913 20 +3 1.989787928 1 +3 0.138144962 1 +4 0.000396217 89 +3 0.117343236 1 +4 0.000350336 18 +3 0.185752941 1 +4 0.000436495 16 +3 0.181922256 1 +4 0.000521924 16 +3 1.039959830 1 +4 0.000421118 16 +3 0.302818771 1 +3 0.121940521 1 +4 0.000714028 29 +3 0.197500732 1 +4 0.000364824 41 +3 1.223352169 1 +4 0.000384389 98 +3 0.368054015 1 +3 0.145929723 1 +4 0.000360153 22 +3 0.349490946 1 +4 0.000403415 18 +3 0.185711754 1 +4 0.000411094 18 +3 3.309560066 1 +4 0.000424639 17 +3 0.201622600 1 +4 0.000332911 17 +3 0.165514358 1 +4 0.000442890 18 +3 0.161627298 1 +4 0.000349309 17 +3 0.174031062 1 +4 0.000359363 17 +3 0.233245167 1 +4 0.000367185 17 +3 0.421696528 1 +4 0.000411396 17 +3 0.137662000 1 +4 0.000391667 17 +3 0.149641485 1 +4 0.000356515 18 +3 0.167537597 1 +4 0.000361277 24 +3 0.263817838 1 +4 0.000694390 31 +3 0.087126940 1 +4 0.000318414 31 +3 0.047574605 1 +4 0.000421695 31 +3 0.199647884 1 +4 0.000311776 31 +3 0.167877106 1 +4 0.000365130 31 +3 0.167451081 1 +4 0.000321456 31 +3 0.689076734 1 +4 0.110105163 33 +3 0.584921459 1 +4 0.000348307 9 +3 0.143224088 1 +4 0.000343586 1 +3 0.071732407 1 +4 0.000409628 1 +4 0.000372659 70 +3 0.655337176 1 +4 0.000404457 35 +3 0.499593688 1 +4 0.000366052 22 +3 0.083397439 1 +4 0.000368501 20 +3 0.083071213 1 +4 0.000340792 16 +3 0.083428883 1 +4 0.000350381 16 +3 0.083093697 1 +4 0.000392045 17 +3 0.083057376 1 +4 0.000365675 16 +3 0.083710948 1 +4 0.000327269 18 +3 0.083119476 1 +4 0.000474101 85 +3 0.083493053 1 +4 0.000360764 47 +3 0.082641058 1 +4 0.000398974 46 +3 0.083186621 1 +4 0.000365016 35 +3 0.083157636 1 +4 0.000398605 55 +3 0.082965738 1 +4 0.000428731 55 +3 0.160742908 1 +4 0.000439591 20 +3 0.500151554 1 +4 0.000351208 17 +3 0.084287672 1 +4 0.000493732 19 +3 0.082375156 1 +4 0.000384640 18 +3 0.082970019 1 +4 0.000397199 16 +3 0.082867805 1 +4 0.000318173 20 +3 0.083465407 1 +4 0.000390887 20 +3 0.082803369 1 +4 0.000334778 17 +3 0.083401403 1 +4 0.000375336 17 +3 0.082724495 1 +4 0.000320315 20 +3 0.247278331 1 +4 0.000447587 20 +3 0.575539980 1 +4 0.000355606 20 +3 0.185633872 1 +4 0.000356683 20 +3 0.149543565 1 +4 0.000362475 20 +3 0.439731864 1 +4 0.000424684 20 +3 0.233648427 1 +4 0.000350978 20 +3 0.213624195 1 +4 0.000395175 20 +3 0.225668560 1 +4 0.000421855 17 +3 0.221519026 1 +4 0.000369391 17 +3 0.209697790 1 +4 0.000352732 20 +3 0.229431459 1 +4 0.000408315 16 +3 0.233795367 1 +4 0.000353754 19 +3 0.349714972 1 +4 0.000374089 16 +3 0.499556051 1 +4 0.000350045 20 +3 0.082976420 1 +4 0.000426476 20 +3 0.082721495 1 +4 0.000346098 17 +3 0.082736431 1 +4 0.000369046 17 +3 0.083222016 1 +4 0.000406594 20 +3 0.083347906 1 +4 0.000343270 20 +3 0.083681978 1 +4 0.000476449 20 +3 0.082863415 1 +4 0.000529778 20 +3 0.443298219 1 +4 0.000822688 22 +3 0.729154569 1 +4 0.000334348 20 +3 0.237781665 1 +4 0.000355457 20 +3 0.249570764 1 +4 0.000354909 20 +3 0.221637136 1 +4 0.000349387 17 +3 0.217649492 1 +4 0.000389379 17 +3 0.213410528 1 +4 0.000345541 20 +3 0.257915898 1 +4 0.000375323 16 +3 0.317549640 1 +4 0.000351138 19 +3 0.327647625 1 +4 0.000508773 16 +3 0.499759639 1 +4 0.000351912 20 +3 0.083489529 1 +4 0.000340082 20 +3 0.083360580 1 +4 0.000341345 17 +3 0.083050464 1 +4 0.000348861 17 +3 0.083594027 1 +4 0.000410636 20 +3 0.083859543 1 +4 0.000339867 20 +3 0.378370667 1 +4 0.000353882 20 +3 26.654551214 2 +4 0.000299370 1 +4 0.000385007 20 +3 0.185788276 1 +4 0.000347829 19 +3 0.165558740 1 +4 0.000378265 18 +3 0.177115827 1 +4 0.000434495 19 +3 0.165615248 1 +4 0.000539262 19 +3 0.167652319 1 +4 0.000582877 17 +3 0.185338981 1 +4 0.000352150 16 +3 0.149631534 1 +4 0.000340936 16 +3 0.327728843 1 +4 0.000355118 16 +3 0.207710858 1 +4 0.000356196 22 +3 0.247467447 1 +4 0.000408781 27 +3 0.730114735 1 +4 0.110011184 32 +3 0.639487397 1 +4 0.000361215 30 +3 0.239789830 1 +4 0.000414086 27 +3 0.143501290 1 +4 0.000357619 27 +3 0.137600846 1 +4 0.000349030 29 +3 0.117672637 1 +4 0.000345332 27 +3 0.335762608 1 +4 0.000371813 16 +3 0.151515079 1 +4 0.000333398 17 +3 0.687814969 1 +4 0.000343303 27 +3 0.009771867 1 +4 0.000327767 27 +3 0.437553675 1 +4 0.000342484 16 +3 0.319573265 2 +4 0.000350629 35 +3 0.175819045 1 +4 0.000402475 30 +3 0.439484588 1 +4 0.000423719 39 +3 0.709999823 1 +4 0.000148519 17 +4 0.109827205 30 +3 8.507894554 1 +4 0.000410327 10 +3 0.151626335 1 +4 0.000353842 1 +3 0.087531531 1 +4 0.000371017 1 +4 0.000383910 69 +3 26.896906288 1 +4 0.000458838 38 +3 0.184859903 1 +4 0.000353687 18 +3 0.149756379 1 +4 0.000376787 19 +3 0.137592999 1 +4 0.000388187 18 +3 0.133791741 1 +4 0.000365782 22 +3 0.385421417 1 +4 0.000438732 20 +3 0.181646957 1 +4 0.000398813 20 +3 0.193545413 1 +4 0.000339360 20 +3 0.189661040 1 +4 0.000577231 17 +3 0.201388878 1 +4 0.000354544 17 +3 0.181736570 1 +4 0.000359366 17 +3 0.201709891 1 +4 0.000362687 17 +3 0.181657511 1 +4 0.000434378 19 +3 0.287459023 1 +4 0.000347569 20 +3 0.499939467 1 +4 0.000399194 17 +3 0.083057931 1 +4 0.000326400 17 +3 0.083236239 1 +4 0.000434921 17 +3 0.083397703 1 +4 0.000359935 17 +3 0.082995075 1 +4 0.000348933 20 +3 0.083447945 1 +4 0.000441606 20 +3 0.082804793 1 +4 0.000374644 20 +3 0.328091598 1 +4 0.000353006 20 +3 0.749778667 1 +3 0.159831338 1 +3 0.138127251 1 +4 0.000507113 453 +3 2.181672845 1 +4 0.000491811 452 +3 0.703366636 1 +3 0.199981256 1 +4 0.000352191 41 +3 0.567809983 1 +4 0.000527156 16 +3 0.499777301 1 +4 0.000341032 16 +3 0.083424938 1 +4 0.000359035 16 +3 0.083015258 1 +4 0.000314614 16 +3 0.083460885 1 +4 0.000361793 16 +3 0.083777579 1 +4 0.000313755 16 +3 0.083579493 1 +4 0.000367356 16 +3 0.083140437 1 +4 0.000317726 16 +3 0.278778522 1 +4 0.000341987 19 +3 0.141637962 1 +3 0.144050458 1 +3 0.127942512 1 +3 0.155207765 1 +4 0.000490014 479 +3 0.748564240 1 +4 0.000373697 40 +3 0.655960408 1 +4 0.000679698 869 +3 0.646826081 1 +4 0.000418888 15 +3 0.500527307 1 +4 0.000346354 15 +3 0.081843651 1 +4 0.000374311 17 +3 0.083519997 1 +4 0.000347824 17 +3 0.083477961 1 +4 0.000344511 15 +3 0.083426619 1 +4 0.000355385 15 +3 0.082727163 1 +4 0.000347717 15 +3 0.082932280 1 +4 0.000389440 17 +3 0.083334199 1 +4 0.000622308 19 +3 0.082558753 1 +4 0.000355512 16 +3 0.082872242 1 +4 0.000351363 16 +3 0.260990699 1 +4 0.000542866 646 +3 1.655439535 1 +4 0.000819821 437 +3 0.806961778 1 +4 0.000393280 66 +3 0.775566971 1 +4 0.000423759 18 +3 0.783885933 1 +4 0.000485141 363 +3 1.831723483 1 +4 0.000554379 40 +3 0.279058688 1 +4 0.000359222 15 +3 0.281709081 1 +4 0.000352527 17 +3 0.213643780 1 +4 0.000615478 23 +3 0.175421229 1 +4 0.000702794 32 +3 0.223239931 1 +4 0.000612203 32 +3 0.151359913 1 +4 0.000733272 32 +3 0.055356863 1 +4 0.000504130 32 +3 0.063391699 1 +4 0.000438785 32 +3 0.343892463 2 +4 0.000677091 23 +3 0.119234648 1 +4 0.000610279 17 +3 1.159306399 1 +4 0.000532996 10 +3 0.135332780 1 +4 0.000370068 1 +3 0.119678333 1 +4 0.000371365 1 +4 0.000295812 53 +4 0.000412108 16 +3 1.455822582 1 +4 0.000619925 646 +3 0.862826551 1 +4 0.000884052 592 +3 2.015014662 1 +4 0.000601988 628 +3 1.559569350 1 +4 0.000797895 926 +3 1.839221425 1 +4 0.000452782 47 +3 0.499724782 1 +4 0.000394463 34 +3 0.083061436 1 +4 0.000461010 74 +3 0.083213071 1 +4 0.000394094 72 +3 0.082597592 1 +4 0.000629094 87 +3 1.210968921 1 +4 0.000429352 47 +3 0.498607568 1 +4 0.000631607 34 +3 0.082584482 1 +4 0.000639306 64 +3 0.083305880 1 +4 0.000400040 72 +3 0.083135273 1 +4 0.000621457 104 +3 0.082893886 1 +4 0.000670785 47 +3 3.940356908 1 +4 0.000388271 34 +3 0.499602664 1 +4 0.000411279 56 +3 0.082931528 1 +4 0.000386802 72 +3 0.192151484 1 +4 0.000412085 17 +3 0.500050387 1 +4 0.000354066 17 +3 0.082906636 1 +4 0.000379668 18 +3 0.083693206 1 +4 0.000423020 20 +3 0.082953035 1 +4 0.000441869 18 +3 0.168429833 1 +4 0.000500791 18 +3 0.171526741 1 +4 0.000367870 19 +3 0.179690436 1 +4 0.000467217 16 +3 0.215673132 1 +4 0.000363513 18 +3 0.500350987 1 +4 0.000410286 20 +3 0.083205181 1 +4 0.000333549 18 +3 0.082500549 1 +4 0.000329966 17 +3 0.083050700 1 +4 0.000395420 17 +3 0.082862144 1 +4 0.000335598 18 +3 0.082684797 1 +4 0.000383548 20 +3 0.274747992 1 +4 0.000613396 839 +3 8.831964575 1 +4 0.000640423 801 +3 1.631181039 1 +4 0.000375831 17 +3 1.305627476 1 +4 0.000428633 15 +3 0.497733854 1 +4 0.000360959 15 +3 0.083122017 1 +4 0.000368287 15 +3 0.083642407 1 +4 0.000333844 15 +3 0.083295622 1 +4 0.000370535 16 +3 1.736553561 1 +4 0.000629246 838 +3 1.335539707 1 +4 0.000438005 16 +3 0.499718772 1 +4 0.000376280 18 +3 0.082613486 1 +4 0.000373838 16 +3 0.083636145 1 +4 0.000364210 16 +3 0.082920470 1 +4 0.000359328 16 +3 0.456951382 1 +4 0.000352142 16 +3 0.201656565 1 +4 0.000439855 16 +3 0.205465187 1 +4 0.000371276 16 +3 0.297745871 1 +4 0.000412243 16 +3 0.469760981 1 +4 0.000450415 18 +3 0.695465699 1 +4 0.000564386 801 +3 1.519622937 1 +4 0.000587351 836 +3 1.439344375 1 +4 0.000483671 115 +3 0.499715623 1 +4 0.000578789 133 +3 0.082560675 1 +4 0.000401248 44 +3 0.082898904 1 +4 0.000463999 115 +3 0.083267781 1 +4 0.000428878 130 +3 0.083135862 1 +4 0.000374468 44 +3 0.301722353 1 +4 0.000497865 16 +3 0.499837789 1 +4 0.000339484 17 +3 0.082709505 1 +4 0.000413937 16 +3 0.083176641 1 +4 0.000330187 16 +3 0.083139526 1 +4 0.000543854 16 +3 0.394988957 1 +4 0.000343115 16 +3 0.269629692 1 +4 0.000348912 28 +3 0.071635991 1 +4 0.000362496 17 +3 0.159759804 1 +4 0.000347896 18 +3 0.183536253 1 +4 0.000423127 18 +3 0.183529976 1 +4 0.000359333 18 +3 0.111615035 1 +4 0.000361619 18 +3 0.175838486 1 +4 0.000358092 35 +3 0.343534013 2 +4 0.000377489 31 +3 0.169506249 1 +4 0.000329047 17 +3 0.205756115 1 +4 0.000343659 17 +3 0.265598752 1 +4 0.000374504 17 +3 0.277776817 1 +4 0.000385196 18 +3 0.623607466 1 +4 0.000465991 17 +3 0.407578830 1 +4 0.000377308 17 +3 0.383596590 1 +4 0.000344645 17 +3 0.287624982 1 +4 0.000338938 17 +3 0.500058529 1 +4 0.000361373 18 +3 0.083005940 1 +4 0.000368949 18 +3 0.083199114 1 +4 0.000331711 20 +3 0.083023505 1 +4 0.000487715 17 +3 0.083150658 1 +4 0.000352183 17 +3 0.083005686 1 +4 0.000420446 19 +3 0.082645909 1 +4 0.000443195 17 +3 0.082880092 1 +4 0.000348592 19 +3 0.084370020 1 +4 0.000554421 19 +3 0.082753405 1 +4 0.000344666 19 +3 0.082759368 1 +4 0.000370472 18 +3 0.273664109 1 +4 0.000349786 20 +3 0.414549669 2 +4 0.000469361 31 +3 0.183558246 1 +4 0.000349709 31 +3 0.079685759 1 +4 0.000383733 16 +3 0.207556160 1 +4 0.000425055 17 +3 0.175532538 1 +4 0.000353824 17 +3 0.151619008 1 +4 0.000454891 17 +3 0.127532347 1 +4 0.000370301 18 +3 0.151735505 1 +4 0.000380548 34 +4 0.703909264 17 +3 0.079980896 1 +4 0.110019529 30 +3 0.905877768 1 +4 0.000445492 24 +3 1.047415902 1 +4 0.000332007 19 +3 0.499902514 1 +4 0.000439156 19 +3 0.082836836 1 +4 0.000478012 18 +3 0.082851279 1 +4 0.000358081 17 +3 0.083713388 1 +4 0.000610451 21 +3 0.082968659 1 +4 0.000359505 17 +3 0.277418759 1 +4 0.000341648 10 +3 0.135643786 1 +4 0.000345552 1 +3 0.087654054 1 +4 0.000422437 1 +4 0.000449764 70 +3 0.503010874 1 +4 0.000354564 39 +3 0.501454976 1 +4 0.000364633 19 +3 0.081948991 1 +4 0.000319512 17 +3 0.082820842 1 +4 0.000330816 20 +3 0.083311309 1 +4 0.000348309 20 +3 0.083663099 1 +4 0.000353884 17 +3 0.082662925 1 +4 0.000340642 19 +3 0.084299043 1 +4 0.000352433 20 +3 0.081663755 1 +4 0.000380282 18 +3 0.082756710 1 +4 0.000316548 19 +3 0.083824192 1 +4 0.000345942 34 +3 0.083168918 1 +4 0.000445371 74 +3 0.082953951 1 +4 0.000355228 73 +3 0.083088287 1 +4 0.000367068 90 +3 0.083149922 1 +4 0.000348080 47 +3 0.688053329 1 +4 0.000381554 34 +3 0.497613523 1 +4 0.000366693 64 +3 0.083561312 1 +4 0.000419851 75 +3 0.199676372 1 +4 0.000672162 20 +3 0.201352501 1 +4 0.000605369 17 +3 0.498124334 1 +4 0.000639937 18 +3 0.082473199 1 +4 0.000457451 20 +3 0.083307226 1 +4 0.000353384 20 +3 0.082727515 1 +4 0.000534145 17 +3 0.082859004 1 +4 0.000345422 17 +3 0.082716025 1 +4 0.000444831 18 +3 0.083456421 1 +4 0.000566420 20 +3 0.082288311 1 +4 0.000575933 18 +3 0.083136546 1 +4 0.000336951 19 +3 0.083151116 1 +4 0.000532592 20 +3 0.082635042 1 +4 0.000346929 16 +3 0.083301988 1 +4 0.000532397 19 +3 0.083170403 1 +4 0.000414279 18 +3 0.083016143 1 +4 0.000369031 17 +3 0.166586961 1 +4 0.000586191 17 +3 0.201647795 1 +4 0.000355931 19 +3 0.157534136 1 +4 0.000355658 16 +3 0.185688458 1 +4 0.000350437 16 +3 0.405343831 1 +4 0.000338913 16 +3 2.776772946 1 +4 0.000765659 16 +3 0.498951429 1 +4 0.000358422 17 +3 0.082649556 1 +4 0.000356330 19 +3 0.083223260 1 +4 0.000434303 20 +3 0.082959209 1 +4 0.000343712 18 +3 0.083665361 1 +4 0.000351377 19 +3 0.082729431 1 +4 0.000343251 16 +3 0.083766736 1 +4 0.000369217 20 +3 0.082957236 1 +4 0.000506694 20 +3 0.514406159 1 +4 0.000384271 17 +3 0.135711038 1 +4 0.000448742 27 +3 0.095642611 1 +4 0.000353778 18 +3 0.143502669 1 +4 0.000343133 18 +3 0.191824914 1 +4 0.000345515 18 +3 0.167508155 1 +4 0.000439012 18 +3 0.119586152 1 +4 0.000364246 14 +3 0.199599029 1 +4 0.000394824 31 +3 0.359494159 2 +4 0.000360391 31 +3 0.500491661 1 +4 0.000348030 14 +3 0.083022059 1 +4 0.000354076 19 +3 0.082658870 1 +4 0.000334284 16 +3 0.082744416 1 +4 0.000375206 20 +3 0.082793199 1 +4 0.000335734 20 +3 0.083032690 1 +4 0.000390111 102 +3 0.083169309 1 +4 0.000564309 47 +3 0.082834177 1 +4 0.000370394 34 +3 0.083161897 1 +4 0.000555561 56 +3 0.083027258 1 +4 0.000411563 72 +3 0.083065270 1 +4 0.000438012 111 +3 0.083244716 1 +4 0.000388982 61 +3 5.390076001 1 +4 0.000361755 17 +3 0.500376102 1 +4 0.000346290 20 +3 0.083773871 1 +4 0.000339582 19 +3 0.082705021 1 +4 0.000343591 17 +3 0.083076161 1 +4 0.000351006 18 +3 0.083267781 1 +4 0.000353708 20 +3 0.860627549 1 +4 0.000413376 9 +3 0.159561144 1 +4 0.000536985 1 +3 0.055446008 1 +4 0.000397264 1 +4 0.000412078 70 +3 0.303331126 1 +4 0.000419620 37 +3 0.500407349 1 +4 0.000345294 16 +3 0.083195438 1 +4 0.000349955 20 +3 0.083323730 1 +4 0.000359940 19 +3 0.083153203 1 +4 0.000351876 17 +3 0.083203532 1 +4 0.000348572 19 +3 0.083551307 1 +4 0.000405705 34 +3 0.083713520 1 +4 0.000475964 63 +3 0.082759958 1 +4 0.000642429 67 +3 0.082355568 1 +4 0.000391276 36 +3 0.150523447 1 +4 0.000359130 21 +3 0.499631795 1 +4 0.000429306 20 +3 0.082668851 1 +4 0.000394256 17 +3 0.083587363 1 +4 0.000550229 18 +3 0.083265075 1 +4 0.000418526 20 +3 0.082872392 1 +4 0.000485616 20 +3 0.084466364 1 +4 0.000508445 19 +3 1.586077941 1 +4 0.000347002 18 +3 0.565763557 1 +4 0.000371357 18 +3 1.121561378 1 +4 0.000438793 20 +3 0.165842554 1 +4 0.000511685 21 +3 0.161127237 1 +4 0.000424980 20 +3 3.077818632 1 +4 0.000452650 20 +3 0.185586315 1 +4 0.000371881 21 +3 0.181483248 1 +4 0.000352713 19 +3 0.265640013 1 +4 0.000356845 17 +3 0.237734230 1 +4 0.000335245 18 +3 0.169878470 1 +4 0.000349162 20 +3 0.157400611 1 +4 0.000384050 21 +3 0.137767120 1 +4 0.000353454 20 +3 0.885723127 1 +3 0.127835187 1 +3 0.146006447 1 +4 0.000416838 248 +3 0.325825520 1 +4 0.000662162 941 +3 0.399307036 1 +4 0.000356040 18 +3 0.499876896 1 +4 0.000349176 19 +3 0.082827014 1 +4 0.000409474 20 +3 0.083267243 1 +4 0.000498996 17 +3 0.083253106 1 +4 0.000358544 17 +3 0.083263726 1 +4 0.000337032 17 +3 0.083042359 1 +4 0.000358627 18 +3 0.083620693 1 +4 0.000350194 20 +3 0.082760510 1 +4 0.000630143 17 +3 0.082784874 1 +4 0.000550076 17 +3 0.082704841 1 +4 0.000574716 19 +3 0.082744908 1 +4 0.000418352 17 +3 0.082774202 1 +4 0.000354258 19 +3 0.082677819 1 +4 0.000378462 16 +3 0.083521815 1 +4 0.000768416 16 +3 0.083022700 1 +4 0.000438248 18 +3 0.450666400 1 +4 0.000497195 188 +3 1.007600483 1 +4 0.000581024 778 +3 0.599384935 1 +4 0.000360129 15 +3 0.500500421 1 +4 0.000365977 15 +3 0.083046809 1 +4 0.000346430 15 +3 0.083022384 1 +4 0.000366479 15 +3 0.083224960 1 +4 0.000465202 15 +3 0.082781315 1 +4 0.001236088 17 +3 0.082531962 1 +4 0.000465791 18 +3 0.083206979 1 +4 0.000429056 16 +3 0.083211682 1 +4 0.000333562 17 +3 0.082977928 1 +4 0.000367388 16 +3 0.082943957 1 +4 0.000365290 17 +3 0.315483208 1 +4 0.000393839 51 +3 1.167665625 2 +4 0.000913033 53 +3 0.182978821 1 +4 0.000398811 41 +3 0.153587089 1 +4 0.000595040 16 +3 0.157539637 1 +4 0.000569714 17 +3 0.137512376 1 +4 0.000658573 16 +3 0.309205758 1 +4 0.000382197 16 +3 0.185911600 1 +4 0.000512091 17 +3 0.149111251 1 +4 0.000396892 16 +3 0.169839512 1 +4 0.000356643 17 +3 0.197498698 1 +4 0.000403258 18 +3 0.169593924 1 +4 0.000339724 16 +3 0.133707454 1 +4 0.000411193 17 +3 0.145624323 1 +4 0.000402009 16 +3 0.613718602 1 +3 0.143849770 1 +3 0.113977538 1 +4 0.000399485 30 +3 0.189809136 1 +4 0.000489080 184 +3 0.207464929 1 +4 0.000396541 41 +3 0.185688210 1 +4 0.000382841 17 +3 0.173560003 1 +4 0.000349710 16 +3 0.169557571 1 +4 0.000380527 17 +3 0.141625411 1 +4 0.000349480 18 +3 0.143540418 1 +4 0.000404076 18 +3 0.500446448 1 +4 0.000528431 18 +3 0.083456864 1 +4 0.000358381 17 +3 0.082908576 1 +4 0.000332441 18 +3 0.082997287 1 +4 0.000323440 17 +3 0.084391379 1 +4 0.000338972 18 +3 0.363607768 1 +4 0.000372113 18 +3 0.153661829 1 +4 0.000360189 17 +3 0.149657377 1 +4 0.000337623 18 +3 0.153708359 1 +4 0.000371589 17 +3 0.197639231 1 +3 0.071919331 1 +4 0.000535106 6 +3 0.281484931 1 +4 0.000363947 17 +3 0.149715247 1 +4 0.000446534 17 +3 0.185630636 1 +4 0.000352668 18 +3 0.301625584 1 +4 0.000420794 17 +3 0.111541731 1 +4 0.000362384 17 +3 0.153487339 1 +4 0.000384289 17 +3 1.077671578 1 +4 0.000373787 29 +3 1.135694313 2 +4 0.000455849 38 +3 0.161894671 1 +4 0.000424980 17 +3 0.157286557 1 +4 0.000414068 24 +3 0.215649944 1 +4 0.000362453 27 +3 0.279634478 1 +4 0.000382029 27 +3 0.079771511 1 +4 0.000338178 27 +3 0.111424942 1 +4 0.000389236 27 +3 0.103723776 1 +4 0.000408895 27 +3 0.279611650 1 +4 0.000438696 28 +3 0.167489619 1 +4 0.000340970 27 +3 0.121779530 1 +4 0.000381886 29 +3 0.141467726 1 +4 0.000342816 27 +3 0.263712595 1 +4 0.000389215 27 +3 0.111460903 1 +4 0.000341648 27 +3 0.207878690 1 +4 0.000441034 27 +3 0.063483895 1 +4 0.000337227 27 +3 0.391866272 1 +4 0.000430578 45 +3 0.087431813 1 +4 0.000346458 36 +3 0.786929049 1 +4 0.109919332 33 +3 0.750768305 1 +4 0.000369786 17 +3 0.295716194 1 +4 0.000366326 17 +3 0.218629147 1 +4 0.000367947 17 +3 5.636919818 1 +4 0.000374497 17 +3 1355.286048369 1 +4 0.109011400 1 +3 1.490559382 1 +4 0.000357441 17 +3 0.295055507 1 +4 0.000315393 17 +3 2.111778287 1 +3 0.096511683 1 +3 0.105319373 1 +4 0.000335261 30 +3 0.253704552 1 +4 0.000436942 149 +3 0.343686706 1 +4 0.000328610 43 +3 0.170833496 1 +4 0.000336496 18 +3 0.164434028 1 +4 0.000314439 17 +3 0.177767839 1 +4 0.000322700 17 +3 0.197573428 1 +4 0.000324172 18 +3 0.177835910 1 +4 0.000312284 17 +3 0.309632372 1 +4 0.000343358 17 +3 0.271619755 1 +3 0.104063983 1 +4 0.000372121 26 +3 0.287775040 1 +4 0.000363707 18 +3 0.111377554 1 +4 0.000349460 18 +3 0.239645302 1 +4 0.000336576 27 +3 0.071735089 1 +4 0.000330810 27 +3 0.151774365 1 +4 0.000323559 27 +3 0.207685137 1 +4 0.000352612 27 +3 0.743594889 1 +4 0.109994294 33 +3 0.402123637 1 +4 0.000459725 31 +3 0.847552031 2 +4 0.000372091 31 +3 2.015571160 1 +4 0.000385207 31 +3 1.631737529 1 +4 0.000360234 27 +3 0.679716084 1 +4 0.000367304 17 +3 0.279650564 1 +4 0.000324321 18 +3 0.655637050 1 +4 0.000411043 27 +3 9.936312957 1 +4 0.000350518 27 +3 0.431347782 1 +4 0.000355531 28 +3 0.503565171 1 +4 0.000398839 27 +3 0.503617679 1 +4 0.000357867 27 +3 0.423588873 1 +4 0.000358174 27 +3 1.847873914 1 +4 0.000405355 27 +3 0.319511106 1 +4 0.000318428 45 +4 0.707294448 18 +3 0.689969912 1 +4 0.110044320 31 +3 1.717323869 1 +4 0.000346123 17 +3 0.414922328 1 +4 0.000333108 9 +3 3.656376669 1 +4 0.000355126 24 +3 0.294989399 1 +4 0.000325068 28 +3 0.167577032 1 +4 0.000325343 28 +3 0.176570876 1 +4 0.000355360 28 +3 0.062913079 1 +4 0.000319204 28 +3 0.183638201 1 +4 0.000305624 29 +3 0.063720709 1 +4 0.000330903 28 +3 0.151643423 1 +4 0.000309986 28 +3 0.087702635 1 +4 0.000315924 28 +3 0.687627731 1 +4 0.000334813 28 +3 1.759871422 1 +4 0.000380929 28 +3 0.215524344 1 +4 0.000325008 28 +3 0.167570983 1 +4 0.000308543 28 +3 0.112563005 1 +4 0.000324025 28 +3 1.343008921 1 +4 0.000329887 28 +3 0.071597918 1 +4 0.000323210 29 +3 0.079624009 1 +4 0.000298985 28 +3 1.015958588 1 +4 0.000369154 17 +3 0.135463553 1 +4 0.000307810 18 +3 0.128003674 1 +4 0.000334953 28 +3 0.111341087 1 +4 0.000312659 28 +3 0.167803786 1 +4 0.000307857 28 +3 1.735851319 1 +4 0.000370105 28 +3 0.383452951 2 +4 0.000317159 24 +3 0.832455739 1 +3 0.079253131 1 +4 0.000431951 28 +3 0.415703583 1 +4 0.000328586 18 +3 0.311548333 1 +4 0.000328201 18 +3 0.698955582 1 +4 0.109992859 37 +3 0.462971498 1 +4 0.000380718 23 +3 0.135433447 1 +4 0.000336163 24 +3 62.410493085 1 +4 0.000358077 19 +3 0.176982743 1 +4 0.000323854 20 +3 0.582668503 1 +3 0.215073430 1 +3 0.129961162 1 +4 0.000381255 162 +3 0.158277679 1 +4 0.000346224 41 +3 0.145075471 1 +4 0.000349158 16 +3 0.165624343 1 +4 0.000418271 16 +3 0.155440827 1 +4 0.000319586 16 +3 0.211726570 1 +4 0.000356541 158 +3 5.368078153 1 +4 0.000354072 43 +3 0.218658167 1 +4 0.000325955 18 +3 0.196551091 1 +4 0.000302677 17 +3 0.201642786 1 +4 0.000340321 17 +3 0.149635875 1 +4 0.000300915 18 +3 2.184866499 1 +4 0.000345788 4 +3 0.272660452 1 +4 0.000348781 4 +3 0.277607983 1 +4 0.000316319 24 +3 0.327564491 1 +4 0.000322444 27 +3 2.751905926 1 +4 0.000336694 27 +3 0.423623387 1 +4 0.000352361 27 +3 0.511757455 1 +4 0.000344154 27 +3 0.071574193 1 +4 0.000315063 27 +3 0.175774578 1 +4 0.000321676 27 +3 0.207621572 1 +4 0.000312464 27 +3 0.319717021 1 +4 0.000340340 27 +3 4.391800618 2 +3 0.138077046 1 +4 0.000353195 94 +3 0.261583195 1 +4 0.000408997 85 +3 0.327629465 1 +4 0.000339131 29 +3 0.217602626 1 +4 0.000355921 18 +3 0.469620162 1 +4 0.000331587 19 +3 0.305749384 1 +4 0.000477633 166 +3 0.597426029 1 +4 0.000373177 150 +3 0.471823730 1 +4 0.000384326 41 +3 0.233567792 1 +4 0.000416471 16 +3 0.165717168 1 +4 0.000363228 16 +3 4.759691707 1 +3 0.167982627 1 +3 0.090004510 1 +4 0.000374936 29 +3 0.333497762 1 +4 0.000442909 142 +3 0.279708427 1 +4 0.000354939 43 +3 0.500668158 1 +4 0.000342487 18 +3 0.083288958 1 +4 0.000393562 17 +3 0.083496591 1 +4 0.000305439 17 +3 0.509420052 1 +4 0.000345250 18 +3 0.181420224 1 +4 0.000338016 17 +3 0.186424176 1 +4 0.000408116 16 +3 0.292862348 1 +4 0.000327081 14 +3 0.239622003 1 +4 0.000405427 17 +3 0.185653517 1 +4 0.000326735 17 +3 0.301690532 1 +4 0.000333015 17 +3 0.185686888 1 +4 0.000320161 17 +3 0.133603576 1 +4 0.000389670 17 +3 0.121537455 1 +4 0.000349007 17 +3 0.133756554 1 +4 0.000348035 17 +3 0.113708278 1 +4 0.000375077 17 +3 0.181588197 1 +4 0.000320146 17 +3 0.247725864 1 +4 0.000345665 4 +3 0.145694291 1 +4 0.000395946 4 +3 0.165451544 1 +4 0.000323197 4 +3 0.161705030 1 +4 0.000344935 4 +3 0.125705497 1 +4 0.000306407 4 +3 0.139302910 1 +4 0.000407498 4 +3 0.164048481 1 +4 0.000320381 4 +3 0.417597010 1 +4 0.000379491 4 +3 0.173635897 1 +4 0.000319662 24 +3 0.193688535 1 +4 0.000335694 27 +3 0.093672109 1 +4 0.000419259 27 +3 0.071599550 1 +4 0.000311541 28 +3 0.183773162 1 +4 0.000338949 27 +3 0.215666458 1 +4 0.000321816 27 +3 0.671793710 2 +4 0.000341553 33 +3 1.047583259 1 +4 0.000344162 16 +3 0.183654957 1 +4 0.000323913 18 +3 0.233793694 1 +4 0.000390101 17 +3 0.509576860 1 +4 0.000325925 17 +3 0.689747099 1 +4 0.000366075 17 +3 2.157542223 1 +4 0.000414784 26 +3 0.199608787 1 +4 0.000327154 18 +3 0.996848027 1 +4 0.109971083 36 +3 5.677291390 1 +4 0.000352075 20 +3 0.287541649 1 +4 0.000324724 20 +3 0.303777177 1 +4 0.000335877 20 +3 4.027017614 1 +4 0.000376221 19 +3 0.148151160 1 +4 0.000318898 20 +3 0.153996016 1 +4 0.000336099 20 +3 0.141326062 1 +4 0.000301818 20 +3 0.247873353 1 +3 0.113937336 1 +4 0.000345598 29 +3 0.229781504 1 +4 0.000361327 43 +3 0.121498710 1 +4 0.000317212 20 +3 0.141844049 1 +4 0.000337465 19 +3 0.247712021 1 +4 0.000355190 88 +3 0.703645321 1 +4 0.000419216 45 +3 0.207377514 2 +4 0.000328790 34 +3 0.159694452 1 +4 0.000339405 16 +3 0.161693631 1 +4 0.000303017 18 +3 0.341763799 1 +4 0.000344438 18 +3 1.015607522 1 +4 0.000337297 33 +3 0.231808474 1 +4 0.000345310 18 +3 0.183609427 1 +4 0.000348803 18 +3 0.151621169 1 +4 0.000340968 18 +3 0.071617354 1 +4 0.000340082 18 +3 0.151636128 1 +4 0.000326752 18 +3 0.127790406 1 +4 0.000347013 18 +3 0.167664123 1 +4 0.000361627 18 +3 0.119539753 1 +4 0.000334043 18 +3 0.303835058 1 +4 0.000393910 18 +3 0.087515898 1 +4 0.000330357 19 +3 0.375829127 1 +4 0.000381315 18 +3 0.129554274 1 +4 0.000329974 17 +3 0.085547027 1 +4 0.000333917 18 +3 0.159760955 1 +4 0.000319214 19 +3 0.119675564 1 +4 0.000324081 18 +3 0.231671824 1 +4 0.000344584 17 +3 0.081850440 1 +4 0.000328694 18 +3 0.133533946 1 +4 0.000338481 18 +3 0.207610747 1 +4 0.000320407 18 +3 0.095620195 1 +4 0.000305295 18 +3 0.519738841 1 +4 0.000347186 18 +3 0.095699160 1 +4 0.000321257 18 +3 0.103615810 1 +4 0.000349111 17 +3 0.719747780 1 +4 0.000329712 18 +3 0.263761306 1 +4 0.000343076 18 +3 0.199484445 1 +4 0.000335516 16 +3 0.128462380 1 +4 0.000339980 13 +3 0.118964420 1 +4 0.000322799 11 +3 0.079629165 1 +4 0.000320585 11 +3 0.119613685 1 +4 0.000365738 13 +3 0.071779378 1 +4 0.000333589 16 +3 0.119539596 1 +4 0.000330669 18 +3 0.191683622 1 +4 0.000320680 18 +3 0.183700306 1 +4 0.000306913 19 +3 0.183773381 1 +4 0.000328223 18 +3 0.095678195 1 +4 0.000312077 18 +3 0.175588035 1 +4 0.000333542 18 +3 0.087738779 1 +4 0.000302918 18 +3 0.047544625 1 +4 0.000384855 18 +3 0.255723045 1 +4 0.000313346 18 +3 0.160157003 1 +4 0.000324507 18 +3 0.111359765 1 +4 0.000333551 18 +3 0.151767421 1 +4 0.000312405 18 +3 0.303397461 2 +4 0.000363249 33 +3 0.177841572 1 +4 0.000320580 17 +3 0.149535897 1 +4 0.000335614 17 +3 0.154196825 1 +4 0.000320025 17 +3 0.109240108 1 +4 0.000315702 4 +3 0.639770085 1 +4 0.000346749 19 +3 0.535670249 1 +4 0.000331265 17 +3 0.185671951 1 +4 0.000350951 16 +3 5.125904385 1 +4 0.000431425 88 +3 0.186977482 1 +4 0.000385201 104 +3 0.452241058 1 +4 0.000375841 44 +3 0.121656381 1 +4 0.000360525 34 +3 0.165573345 1 +4 0.000356146 54 +3 0.263466455 1 +4 0.000328059 16 +3 0.209585261 1 +4 0.000316103 18 +3 0.157813780 1 +4 0.000328357 16 +3 0.169852196 1 +4 0.000395202 16 +3 3.461723285 1 +4 0.000362811 16 +3 0.255532421 1 +4 0.000339689 18 +3 0.119616008 1 +4 0.000325998 18 +3 0.170355554 1 +4 0.000367394 17 +3 0.285071366 1 +3 0.071817285 1 +4 0.000412397 4 +3 0.143702867 1 +3 0.055910855 1 +4 0.000414719 5 +3 14.440866789 1 +4 0.000355757 24 +3 0.270870488 1 +4 0.000344692 19 +3 1.003915582 1 +4 0.109901407 33 +3 7.398756208 1 +4 0.000565541 905 +3 2.151348317 1 +4 0.000597751 775 +3 0.535104159 1 +4 0.000567414 885 +3 3.455623341 1 +4 0.000356962 15 +3 0.499621583 1 +4 0.000334991 15 +3 0.082746921 1 +4 0.000367092 15 +3 0.082809523 1 +4 0.000307765 17 +3 0.083042775 1 +4 0.000305767 18 +3 0.083620957 1 +4 0.000303635 15 +3 0.083543148 1 +4 0.000395460 15 +3 0.082977878 1 +4 0.000345953 15 +3 0.083546396 1 +4 0.000356394 17 +3 0.083402942 1 +4 0.000380225 18 +3 0.083511060 1 +4 0.000337833 16 +3 0.317250225 1 +4 0.000347420 16 +3 3.269957967 1 +4 0.000411221 16 +3 0.500100450 1 +4 0.000332747 16 +3 0.083269372 1 +4 0.000375851 17 +3 0.083184899 1 +4 0.000355772 17 +3 0.084111434 1 +4 0.000404485 15 +3 0.082862947 1 +4 0.000324645 15 +3 0.082880334 1 +4 0.000364168 15 +3 0.082942671 1 +4 0.000348189 18 +3 1.733670017 1 +4 0.000367479 18 +3 0.169798494 1 +4 0.000316243 15 +3 0.165723069 1 +4 0.000409110 15 +3 0.359556527 1 +3 0.146319761 1 +4 0.000380726 28 +3 0.421481252 1 +4 0.000588725 806 +3 0.399268717 1 +4 0.000413960 19 +3 0.499965393 1 +4 0.000374304 18 +3 0.083201716 1 +4 0.000362287 17 +3 0.083516925 1 +4 0.000308564 19 +3 0.083207789 1 +4 0.000305446 19 +3 0.083147296 1 +4 0.000321533 20 +3 0.495046928 1 +4 0.000326144 18 +3 0.497512357 1 +4 0.000354661 17 +3 0.083577867 1 +4 0.000325406 20 +3 0.082751067 1 +4 0.000332784 20 +3 0.083050111 1 +4 0.000325669 20 +3 0.083128025 1 +4 0.000339349 19 +3 0.083053302 1 +4 0.000322173 17 +3 0.083069129 1 +4 0.000329116 20 +3 0.082803835 1 +4 0.000342221 20 +3 0.083184165 1 +4 0.000319960 21 +3 0.083367062 1 +4 0.000313845 19 +3 0.082733046 1 +4 0.000314193 20 +3 1.273743625 1 +4 0.000382171 61 +3 0.911675042 2 +4 0.000413945 91 +3 0.335606840 1 +4 0.000338940 17 +3 0.223600080 1 +3 0.154015266 1 +4 0.000350944 40 +3 0.237638708 1 +4 0.000387173 18 +3 0.137585301 1 +4 0.000364394 17 +3 6.941973560 1 +3 0.169994410 1 +4 0.000351093 57 +3 5.229817087 1 +4 0.000353408 17 +3 0.895529177 1 +4 0.000378019 63 +3 1.823769261 1 +4 0.000558188 48 +3 0.727480849 1 +4 0.000346612 9 +3 0.103564042 1 +4 0.000418594 43 +3 0.479619362 1 +4 0.000581226 17 +3 0.783466733 1 +4 0.000397266 10 +3 0.311567758 1 +4 0.000468045 1 +3 0.183529936 1 +4 0.000446948 1 +3 0.175665108 1 +4 0.000347008 1 +3 0.295546700 1 +4 0.000488259 1 +3 0.311713969 1 +4 0.000708820 426 +3 0.543277569 1 +4 0.000468093 191 +3 0.370453129 1 +4 0.000436304 195 +3 0.332492711 1 +4 0.000516417 629 +3 2.297769577 1 +4 0.000375844 17 +3 1.349639570 1 +4 0.000539640 516 +3 0.169431993 1 +4 0.000381393 58 +3 0.957581268 1 +4 0.000369523 10 +3 0.159576813 1 +4 0.000359247 1 +3 0.087702014 1 +4 0.000325770 1 +4 0.000404527 71 +3 0.471205359 1 +4 0.000347201 37 +3 0.499925798 1 +4 0.000339188 20 +3 0.083415211 1 +4 0.000310028 17 +3 0.083391046 1 +4 0.000307447 16 +3 0.082895739 1 +4 0.000307431 18 +3 0.083394592 1 +4 0.000310969 17 +3 0.083139837 1 +4 0.000339507 19 +3 0.082927037 1 +4 0.000310078 16 +3 8.255292921 1 +4 0.000399911 16 +3 0.154649653 1 +4 0.000327368 18 +3 0.156068589 1 +4 0.000333478 17 +3 0.185684061 1 +4 0.000303888 19 +3 0.645740718 1 +4 0.000339869 17 +3 0.209568252 1 +4 0.000352399 16 +3 0.181665352 1 +4 0.000300823 17 +3 1.183886754 1 +3 0.079931813 1 +4 0.000368609 24 +3 0.135650054 1 +4 0.000331397 17 +3 0.287578764 1 +4 0.000408887 17 +3 0.511566421 2 +4 0.000358917 32 +3 0.183823846 1 +4 0.000359244 22 +3 0.175544051 1 +4 0.000339007 23 +3 0.743690311 1 +4 0.000388158 16 +3 0.242018541 1 +4 0.000324740 18 +3 0.205240057 1 +4 0.000326932 19 +3 0.201744955 1 +4 0.000384731 20 +3 0.197564455 1 +4 0.000331179 17 +3 0.202047265 1 +4 0.000343138 19 +3 0.205735276 1 +4 0.000394812 16 +3 0.279264151 1 +4 0.000323404 18 +3 0.499895957 1 +4 0.000369741 20 +3 0.083569476 1 +4 0.000307162 17 +3 0.083267533 1 +4 0.000382126 19 +3 0.083133696 1 +4 0.000319785 20 +3 0.083082217 1 +4 0.000311716 17 +3 0.438926962 1 +4 0.000308596 16 +3 0.381920137 1 +3 0.223951188 1 +3 0.105984888 1 +4 0.000342800 30 +3 0.373632952 1 +4 0.000429730 329 +3 0.671880020 1 +4 0.000368303 42 +3 0.145342356 1 +4 0.000319131 17 +3 0.405714676 1 +3 0.064015291 1 +4 0.000407190 28 +3 0.159571256 1 +4 0.000359129 17 +3 0.135739925 1 +4 0.000342254 17 +3 0.095414506 1 +4 0.000385877 17 +3 0.263781157 1 +4 0.000341915 17 +3 0.143633585 1 +4 0.000341779 17 +3 0.127773709 1 +4 0.000326438 17 +3 0.096178447 1 +4 0.000407714 17 +3 0.150944671 1 +4 0.000324320 17 +3 1.167778613 2 +4 0.000450760 32 +3 1.151657400 1 +3 0.087857087 1 +4 0.000353619 28 +3 1.343853416 2 +4 0.000410493 36 +3 0.767628835 1 +4 0.000393689 17 +3 0.823535322 1 +4 0.000350832 17 +3 0.607779189 1 +4 0.000330991 23 +3 0.567719946 1 +4 0.000345112 41 +3 0.415541324 1 +4 0.000342291 40 +3 0.215587583 1 +4 0.000332996 40 +3 0.271815338 1 +4 0.000356992 40 +3 0.726008674 1 +4 0.110033117 32 +3 0.739536474 1 +4 0.000366927 16 +3 0.431716905 1 +4 0.000367342 20 +3 0.247730542 1 +4 0.000435044 16 +3 0.153581531 1 +4 0.000328017 18 +3 0.165388638 1 +4 0.000321800 19 +3 0.161953265 1 +4 0.000356221 20 +3 0.157434805 1 +4 0.000324051 17 +3 0.137776152 1 +4 0.000331819 19 +3 0.166259555 1 +4 0.000312381 16 +3 0.247121126 1 +4 0.000392045 18 +3 0.499770198 1 +4 0.000333407 20 +3 0.083248530 1 +4 0.000307234 17 +3 0.083307513 1 +4 0.000409962 19 +3 0.082946162 1 +4 0.000312854 20 +3 0.363169418 1 +4 0.000346906 17 +3 8.429939840 1 +4 0.000355388 16 +3 0.239519158 1 +3 0.079944635 1 +4 0.000446971 28 +3 0.999708399 1 +4 0.000371364 17 +3 0.231399429 1 +4 0.000337278 17 +3 0.247770548 1 +4 0.000331658 17 +3 0.807599971 2 +4 0.000440067 27 +3 0.137837192 1 +4 0.000320814 16 +3 3.277671637 1 +4 0.000349084 23 +3 2.479738186 1 +4 0.000437566 31 +3 0.383502557 1 +4 0.000352195 31 +3 0.815744863 1 +4 0.000353932 31 +3 2.607751895 1 +4 0.000414627 31 +3 0.471841722 1 +4 0.000350908 31 +3 4.223463535 1 +4 0.000364000 32 +3 0.895657056 1 +4 0.000342411 31 +3 6.560153255 2 +4 0.000392008 35 +3 0.487401076 1 +4 0.000331628 19 +3 0.359759861 1 +4 0.000431837 16 +3 0.727411615 1 +3 0.071871017 1 +4 0.000334399 28 +3 0.184029362 1 +4 0.000357277 17 +3 0.271597042 1 +4 0.000333227 17 +3 0.007953852 1 +4 0.000353027 17 +3 0.407629558 1 +4 0.000342284 16 +3 0.239440204 1 +4 0.000399439 16 +3 0.271562646 1 +4 0.000315251 17 +3 0.015736464 1 +4 0.000328911 17 +3 0.463671983 1 +4 0.000386971 16 +3 0.255520313 1 +4 0.000396876 17 +3 0.255575574 1 +4 0.000319696 17 +3 0.327885831 1 +4 0.000370830 17 +3 0.135785420 1 +4 0.000308482 26 +3 0.063340907 1 +4 0.000354097 26 +3 0.760099189 2 +4 0.000349488 35 +3 0.263620209 1 +4 0.000430686 19 +3 2.655481019 1 +4 0.000352994 16 +3 0.201493229 1 +4 0.000388037 17 +3 0.565590496 1 +4 0.000340637 17 +3 0.279623962 1 +4 0.000403302 16 +3 0.217726250 1 +4 0.000330488 16 +3 0.157942626 1 +4 0.000341139 16 +3 0.153577727 1 +4 0.000391217 16 +3 1.629471085 1 +4 0.000365359 4 +3 0.153936121 1 +4 0.000353264 4 +3 0.157494105 1 +4 0.000387426 23 +3 3.815804737 2 +4 0.000555868 607 +3 0.185304508 1 +3 0.726180765 1 +4 0.000587305 896 +3 0.145166099 1 +4 0.000343318 17 +3 0.453717138 1 +4 0.000343318 18 +3 0.423806171 1 +4 0.000328304 32 +3 0.311473677 1 +4 0.000356712 51 +3 0.463701906 2 +4 0.000363047 31 +3 0.162468850 1 +4 0.000381771 17 +3 0.212936288 1 +4 0.000328744 17 +3 0.201572542 1 +4 0.000318393 17 +3 0.158188635 1 +4 0.000346781 17 +3 0.153086812 1 +4 0.000310759 17 +3 0.181748570 1 +4 0.000327495 17 +3 0.224633589 1 +4 0.000327160 24 +3 3.083265476 7 +4 0.000413328 55 +4 0.708396562 17 +3 0.109938943 1 +4 0.110046238 33 +3 1.131997691 1 +4 0.000368514 18 +3 0.614589204 1 +4 0.000348852 17 +3 7.328427097 1 +3 0.071398870 1 +4 0.000340671 29 +3 0.247583410 1 +4 0.000325206 18 +3 0.191682188 1 +4 0.000318153 18 +3 0.103684604 1 +4 0.000308663 17 +3 0.119653908 1 +4 0.000354466 18 +3 0.007920117 1 +4 0.000312124 19 +3 0.503678429 1 +4 0.000342666 18 +3 0.247490366 1 +4 0.000315711 19 +3 0.879814337 1 +4 0.000355112 18 +3 0.191647045 1 +4 0.000415816 18 +3 0.095496496 1 +4 0.000324130 18 +3 1.727941926 2 +4 0.000390151 24 +3 0.145311050 1 +4 0.000361530 17 +3 0.351067244 1 +3 0.086891293 1 +4 0.000376008 33 +3 1.159520811 1 +4 0.000356484 18 +3 1.631586569 1 +4 0.000360394 18 +3 2.223806976 1 +4 0.000348027 18 +3 5.303916208 2 +4 0.000397893 42 +3 0.383392549 1 +4 0.000343944 17 +3 0.153586044 1 +4 0.000327230 17 +3 0.165955767 1 +4 0.000350745 17 +3 0.145506471 1 +4 0.000327568 17 +3 0.149646704 1 +4 0.000394312 17 +3 0.177641094 1 +4 0.000337041 17 +3 0.165864558 1 +4 0.000322018 18 +3 0.137981608 1 +4 0.000327508 17 +3 0.485219823 1 +4 0.000357033 4 +3 0.311700882 1 +4 0.000414137 17 +3 0.500029320 1 +4 0.000351715 18 +3 0.082610702 1 +4 0.000335635 17 +3 0.083552630 1 +4 0.000323946 17 +3 0.083191415 1 +4 0.000311562 17 +3 0.250983064 1 +4 0.000322803 17 +3 0.189509172 1 +4 0.000311570 24 +3 0.367953067 1 +4 0.000402579 44 +4 0.708053942 18 +3 0.083378469 2 +4 0.000421970 37 +3 1.377642309 1 +4 0.000354773 19 +3 0.197731080 1 +4 0.000340457 20 +3 0.385502092 1 +4 0.000390110 20 +3 0.541627942 1 +4 0.000395369 18 +3 0.215837621 1 +4 0.000316576 24 +3 0.311575327 1 +4 0.000375469 19 +3 0.399886694 1 +4 0.000335074 20 +3 0.863526521 1 +4 0.000439261 19 +3 0.699983695 1 +4 0.110027389 33 +3 5.894499112 1 +4 0.000451518 20 +3 0.202621066 1 +4 0.000320801 19 +3 0.155971941 1 +4 0.000410889 20 +3 1.207458435 1 +4 0.000353441 17 +3 0.519857411 1 +4 0.000348953 24 +3 0.335643444 1 +4 0.000335709 20 +3 0.935719660 1 +4 0.000407745 20 +3 0.745725890 1 +4 0.110057260 33 +3 5.096001875 1 +4 0.000375705 18 +3 0.208285701 1 +4 0.000335118 17 +3 0.500229484 1 +4 0.000351746 17 +3 0.082089645 1 +4 0.000304275 17 +3 0.082961955 1 +4 0.000381201 18 +3 0.083131641 1 +4 0.000306994 17 +3 0.083585185 1 +4 0.000395186 18 +3 0.373142920 1 +4 0.000344102 18 +3 0.169563174 1 +4 0.000352400 17 +3 0.229835133 1 +4 0.000324837 17 +3 4.448064965 1 +4 0.000354894 18 +3 0.225338934 1 +4 0.000348300 17 +3 0.293659106 1 +4 0.000321764 17 +3 0.201812583 1 +4 0.000386869 18 +3 0.405460344 1 +4 0.000346744 17 +3 0.500122367 1 +4 0.000358785 17 +3 0.083259233 1 +4 0.000314479 17 +3 0.083574798 1 +4 0.000311706 17 +3 0.082828057 1 +4 0.000319412 17 +3 0.083388392 1 +4 0.000321179 17 +3 0.083681547 1 +4 0.000355028 18 +3 0.466832397 1 +4 0.000344230 17 +3 26.935338372 1 +4 0.000437200 17 +3 0.499741069 1 +4 0.000354244 17 +3 0.082820682 1 +4 0.000311809 17 +3 0.082888909 1 +4 0.000309663 17 +3 0.083270332 1 +4 0.000323716 17 +3 0.083815610 1 +4 0.000312243 17 +3 0.082827600 1 +4 0.000321313 17 +3 0.083498993 1 +4 0.000338685 17 +3 0.082869333 1 +4 0.000321419 18 +3 0.083316232 1 +4 0.000312199 17 +3 5.871279492 1 +4 0.000344698 18 +3 0.249514726 1 +4 0.000383238 19 +3 0.317703189 1 +4 0.000323249 20 +3 0.193482584 1 +4 0.000305137 18 +3 0.949820398 1 +3 0.096099933 1 +3 0.122987696 1 +4 0.000418853 31 +3 0.212453658 1 +4 0.000364048 179 +3 0.287711755 1 +4 0.000331579 41 +3 0.153836709 1 +4 0.000311394 16 +3 0.373422885 1 +4 0.000355467 16 +3 0.263747926 1 +4 0.000343796 16 +3 0.185613747 1 +4 0.000355462 16 +3 0.253735948 1 +4 0.000305528 16 +3 0.185902430 1 +4 0.000346254 16 +3 0.157376420 1 +4 0.000314771 17 +3 0.145911915 1 +4 0.000322312 16 +3 0.101681818 1 +4 0.000309979 18 +3 0.137425196 1 +4 0.000309656 18 +3 0.373925187 1 +4 0.000365363 24 +3 0.191397497 1 +4 0.000334851 31 +3 0.152638766 1 +4 0.000332264 31 +3 0.062935512 1 +4 0.000317057 31 +3 0.191640837 1 +4 0.000332105 31 +3 0.111562845 1 +4 0.000334212 31 +3 0.087713075 1 +4 0.000307308 31 +3 0.023895233 1 +4 0.000376620 31 +3 0.071305173 1 +4 0.000314625 31 +3 0.135882091 1 +4 0.000331895 31 +3 0.112892436 1 +4 0.000318745 32 +3 0.398540363 2 +4 0.000347929 36 +3 0.145543747 1 +4 0.000310408 18 +3 0.181733383 1 +4 0.000310710 19 +3 0.225791287 1 +4 0.000358431 20 +3 0.293422000 1 +4 0.000413438 19 +3 0.287674279 1 +4 0.000331060 20 +3 1.751776737 1 +4 0.000386746 18 +3 0.255480713 1 +4 0.000355248 17 +3 0.193905578 1 +4 0.000354053 18 +3 0.277552573 1 +3 0.056022450 1 +4 0.000337430 28 +3 0.215669320 1 +4 0.000392293 18 +3 0.751567284 1 +4 0.000343946 18 +3 0.159544512 1 +4 0.000339343 18 +3 0.738907235 1 +4 0.110079893 37 +3 0.046918166 1 +4 0.000346342 17 +3 1.951583337 1 +4 0.000336705 17 +3 0.271900166 1 +4 0.000329704 17 +3 0.201801219 1 +4 0.000320399 17 +3 0.181508584 1 +4 0.000311770 17 +3 0.169907266 1 +4 0.000367005 17 +3 0.661357828 1 +4 0.000358258 17 +3 2.167868078 1 +4 0.000422447 19 +3 0.201708762 1 +4 0.000321464 20 +3 0.285464595 1 +4 0.000333990 18 +3 1.951700809 1 +4 0.000347358 4 +3 0.391721772 1 +4 0.000337571 18 +3 0.185483810 1 +4 0.000353506 19 +3 0.213953442 1 +4 0.000308516 20 +3 1.199619712 1 +4 0.000420574 4 +3 1.935588071 1 +4 0.000340007 17 +3 0.500493774 1 +4 0.000344335 19 +3 0.082886485 1 +4 0.000376775 20 +3 0.083138078 1 +4 0.000321539 17 +3 0.083191881 1 +4 0.000305872 19 +3 0.083334596 1 +4 0.000308127 16 +3 0.083456869 1 +4 0.000337756 20 +3 0.083357583 1 +4 0.000327672 19 +3 0.245553300 1 +4 0.000334643 21 +3 0.217664280 1 +4 0.000336961 17 +3 0.189667138 1 +4 0.000313081 18 +3 0.169903078 1 +4 0.000322471 20 +3 0.149403068 1 +4 0.000373311 17 +3 0.583752446 1 +4 0.000365052 9 +3 0.311420326 1 +4 0.000334050 1 +3 0.113709736 1 +4 0.000328754 1 +3 0.269629311 1 +4 0.000334443 1 +3 0.199817057 1 +4 0.000336559 13 +4 0.000338588 45 +3 1.063427309 1 +4 0.000394966 41 +3 0.500115589 1 +4 0.000345806 20 +3 0.083139629 1 +4 0.000358336 17 +3 0.082598810 1 +4 0.000345737 19 +3 0.084031462 1 +4 0.000343220 20 +3 0.208172960 1 +4 0.000333316 19 +3 0.353593933 1 +4 0.000364028 20 +3 1.638053347 1 +4 0.000376336 4 +3 0.455382229 1 +4 0.000333648 17 +3 0.247648687 1 +4 0.000335276 31 +3 0.711882600 1 +4 0.000350656 39 +4 0.708294247 18 +3 0.319934314 1 +4 0.110026734 31 +3 31.510486412 1 +4 0.000365444 19 +3 0.217423519 1 +4 0.000342183 20 +3 0.165727326 1 +4 0.000373901 18 +3 0.193576422 1 +4 0.000389807 20 +3 0.501809418 1 +4 0.000370361 18 +3 0.185479186 1 +4 0.000353245 17 +3 0.165738100 1 +4 0.000391552 17 +3 0.185568811 1 +4 0.000326827 17 +3 0.389645144 1 +3 0.079955068 1 +4 0.000362696 7 +3 0.239817965 1 +4 0.000337478 17 +3 0.499804687 1 +4 0.000329867 18 +3 0.083927622 1 +4 0.000336878 19 +3 0.082239166 1 +4 0.000320152 20 +3 0.083317108 1 +4 0.000311769 17 +3 0.083328906 1 +4 0.000349950 19 +3 10.398342245 1 +4 0.000339689 20 +3 0.190926873 1 +4 0.000343843 17 +3 0.193983113 1 +4 0.000311998 17 +3 0.181405177 1 +4 0.000335518 18 +3 0.743747351 1 +3 0.080750263 1 +4 0.000362917 29 +3 0.983969402 2 +4 0.000361177 28 +3 0.326649869 1 +4 0.000392960 6 +3 0.185789164 1 +4 0.000325462 4 +3 0.157535507 1 +4 0.000411977 4 +3 0.129429124 1 +4 0.000316986 4 +3 0.134168711 1 +4 0.000349959 4 +3 0.161309787 1 +4 0.000338609 4 +3 0.117658051 1 +4 0.000363040 4 +3 0.249687333 1 +4 0.000333827 4 +3 0.397558284 1 +4 0.000342014 4 +3 0.143659469 1 +4 0.000318067 24 +3 0.223862839 1 +4 0.000406197 27 +3 0.159432209 1 +4 0.000353186 27 +3 0.183718252 1 +4 0.000352853 27 +3 0.560775341 2 +4 0.000342059 36 +3 0.366510501 1 +4 0.000346896 17 +3 0.169856402 1 +4 0.000338191 15 +3 0.181495702 1 +4 0.000381002 9 +3 0.959741177 1 +3 0.063922857 1 +4 0.000342183 29 +3 0.231615735 1 +4 0.000340924 13 +3 0.135678664 1 +4 0.000323864 16 +3 0.111820454 1 +4 0.000345612 17 +3 0.111566508 1 +4 0.000389733 18 +3 0.415649943 2 +4 0.000341770 28 +3 0.137739006 1 +4 0.000318061 18 +3 0.445512459 1 +3 0.072001743 1 +4 0.000404452 33 +3 0.159687980 1 +4 0.000323236 18 +3 0.087563053 1 +4 0.000315358 18 +3 0.095820094 1 +4 0.000368675 18 +3 0.207459649 1 +4 0.000327594 18 +3 0.143768333 1 +4 0.000349465 18 +3 0.511556634 1 +4 0.000336677 18 +3 0.137695863 1 +4 0.000335991 18 +3 0.397707766 1 +4 0.000343216 18 +3 0.423783351 2 +4 0.000347446 28 +3 1.055613217 1 +4 0.000340383 17 +3 0.215749254 1 +4 0.000342298 33 +3 0.199529985 1 +4 0.000397427 18 +3 0.191675036 1 +4 0.000346706 18 +3 0.359683867 2 +4 0.000369961 12 +3 0.119499816 1 +4 0.000316543 1 +3 0.071884463 1 +4 0.000337752 1 +4 0.000406056 71 +3 16.864636688 1 +4 0.000417982 39 +3 1.982761857 1 +4 0.000364483 16 +3 0.201773522 1 +4 0.000370579 19 +3 0.197459498 1 +4 0.000330729 20 +3 0.185686403 1 +4 0.000365432 20 +3 0.325699985 1 +3 0.279889565 1 +3 0.122194256 1 +4 0.000397331 158 +3 0.141506476 1 +4 0.000328477 41 +3 0.161643732 1 +4 0.000402495 16 +3 0.133583723 1 +4 0.000327938 16 +3 0.146028919 1 +4 0.000349062 16 +3 0.117267672 1 +4 0.000323723 16 +3 0.121732123 1 +4 0.000382146 17 +3 0.181705721 1 +4 0.000361214 16 +3 0.295675391 1 +4 0.000433182 164 +3 36.441560549 1 +4 0.000394892 41 +3 0.176818774 1 +4 0.000337521 16 +3 0.157633029 1 +4 0.000312926 16 +3 0.185768636 1 +4 0.000395215 16 +3 0.381511190 1 +4 0.000334361 16 +3 0.167888328 1 +4 0.000342384 18 +3 0.153562610 1 +4 0.000304993 17 +3 0.181654295 1 +4 0.000423831 18 +3 0.161419461 1 +4 0.000311281 17 +3 0.141734011 1 +4 0.000325034 17 +3 0.169768560 1 +4 0.000328403 18 +3 0.149646269 1 +4 0.000346239 18 +3 0.319604919 1 +4 0.000331568 18 +3 0.431854030 1 +4 0.000383382 18 +3 0.500341945 1 +4 0.000361535 17 +3 0.082386950 1 +4 0.000334650 17 +3 0.082928473 1 +4 0.000324967 17 +3 0.083439928 1 +4 0.000338704 17 +3 0.082800886 1 +4 0.000320995 17 +3 0.083070466 1 +4 0.000375476 17 +3 0.083388393 1 +4 0.000332583 17 +3 0.083681173 1 +4 0.000338640 17 +3 0.732952042 1 +4 0.000336557 17 +3 0.477571104 1 +4 0.000341230 4 +3 0.111584609 1 +4 0.000329798 39 +3 0.807798820 1 +4 0.000371883 31 +3 1.879777050 1 +4 0.000346880 38 +3 0.575594195 2 +4 0.000403331 34 +3 0.279481085 1 +4 0.000341609 17 +3 0.193731862 1 +4 0.000353646 17 +3 0.133635967 1 +4 0.000326808 17 +3 0.199653806 1 +4 0.000343865 18 +3 0.217632124 1 +4 0.000327499 17 +3 0.333914145 1 +4 0.000346748 17 +3 0.201475101 1 +4 0.000325034 17 +3 0.253845553 1 +4 0.000353298 17 +3 0.217519276 1 +4 0.000317614 17 +3 0.197699767 1 +4 0.000341367 17 +3 0.279697713 1 +4 0.000347395 4 +3 4.391931838 1 +4 0.000382826 9 +3 0.159420283 1 +4 0.000335654 1 +3 0.111719368 1 +4 0.000347944 1 +4 0.000972742 10 +4 0.000403494 61 +3 2.110386452 1 +4 0.000369178 39 +3 17.034834764 1 +4 0.000383986 19 +3 0.497234888 1 +4 0.000337602 20 +3 0.084271274 1 +4 0.000325667 21 +3 0.082062227 1 +4 0.000307956 20 +3 0.083458142 1 +4 0.000378024 18 +3 0.083199922 1 +4 0.000337838 17 +3 0.082989013 1 +4 0.000313158 19 +3 0.082832977 1 +4 0.000348033 19 +3 0.083541463 1 +4 0.000328121 19 +3 0.082929197 1 +4 0.000313910 18 +3 0.083452781 1 +4 0.000309767 17 +3 0.082767924 1 +4 0.000311219 19 +3 0.083015240 1 +4 0.000346502 20 +3 0.082732345 1 +4 0.000313155 19 +3 0.083514591 1 +4 0.000374006 37 +3 0.083202819 1 +4 0.000344767 46 +3 0.082762877 1 +4 0.000359216 94 +3 0.083311882 1 +4 0.000376838 152 +3 0.082723059 1 +4 0.000363037 47 +3 0.083441576 1 +4 0.000382240 98 +3 0.083381556 1 +4 0.000379171 152 +3 0.082387028 1 +4 0.000371299 86 +3 0.083603851 1 +4 0.000352149 38 +3 13.187291173 1 +4 0.000364475 20 +3 0.201591490 1 +4 0.000341083 19 +3 0.181550902 1 +4 0.000331003 16 +3 0.351762681 1 +4 0.000348213 16 +3 0.218037835 1 +4 0.000314279 19 +3 0.141360603 1 +4 0.000334775 16 +3 0.217421174 1 +4 0.000347537 16 +3 1.613955996 1 +4 0.000399838 20 +3 0.153400809 1 +4 0.000326442 4 +3 0.605790128 1 +4 0.000375715 16 +3 0.159963188 1 +4 0.000369091 20 +3 0.175264072 1 +4 0.000390057 17 +3 0.201687192 1 +4 0.000344551 16 +3 0.157495908 1 +4 0.000339017 17 +3 0.169631706 1 +4 0.000328428 16 +3 0.325859306 1 +4 0.000351315 16 +3 0.201655096 1 +4 0.000338171 16 +3 0.197485573 1 +4 0.000406494 18 +3 0.375701536 1 +4 0.000333841 19 +3 8.552199557 1 +4 0.000384966 16 +3 0.499368787 1 +4 0.000326486 17 +3 0.083035429 1 +4 0.000395329 17 +3 0.082744859 1 +4 0.000316918 16 +3 0.083822819 1 +4 0.000348257 16 +3 2.153854370 1 +4 0.000359777 16 +3 0.454970727 1 +4 0.000381231 16 +3 2.903628235 1 +4 0.000397139 4 +3 0.137652738 1 +4 0.000370089 4 +3 14.879197379 1 +4 0.000588898 762 +3 5.222678102 1 +4 0.000550454 793 +3 0.153450247 1 +4 0.000348693 4 +3 1.341483527 1 +4 0.000389025 17 +3 0.199684507 1 +4 0.000320075 24 +3 0.119439232 1 +4 0.000384750 34 +3 0.143774044 1 +4 0.000316257 34 +3 0.079693380 1 +4 0.000378889 34 +3 0.111870144 1 +4 0.000321397 34 +3 0.191442427 1 +4 0.000335188 35 +3 0.495698254 2 +4 0.000347889 34 +3 0.135636537 1 +4 0.000331297 17 +3 0.169760444 1 +4 0.000355278 17 +3 0.165496749 1 +4 0.000346968 17 +3 0.153680419 1 +4 0.000318333 17 +3 0.125792663 1 +4 0.000339694 17 +3 0.183624102 1 +4 0.000334578 4 +3 0.153758616 1 +4 0.000342895 4 +3 0.165566675 1 +4 0.000329560 4 +3 0.137908416 1 +4 0.000404009 7 +3 0.349276207 1 +4 0.000346136 5 +3 18.160593708 1 +4 0.000363397 19 +3 0.337569975 1 +4 0.000330696 20 +3 0.165697402 1 +4 0.000342986 20 +3 0.169507433 1 +4 0.000333203 19 +3 0.413625250 1 +4 0.000359561 20 +3 0.271674243 1 +4 0.000361874 17 +3 0.169540245 1 +4 0.000346444 17 +3 0.173734662 1 +4 0.000349677 17 +3 0.169738408 1 +4 0.000351974 17 +3 0.197583944 1 +4 0.000319564 18 +3 0.185640509 1 +4 0.000343136 17 +3 0.285756461 1 +4 0.000326809 17 +3 0.232292994 1 +4 0.000388610 17 +3 0.110906483 1 +4 0.000307183 24 +3 0.623734540 2 +4 0.000376785 33 +3 0.223759608 1 +4 0.000342357 24 +3 0.160654122 1 +4 0.000315471 32 +3 0.134793593 1 +4 0.000329562 32 +3 0.167385993 1 +4 0.000319999 32 +3 0.087692138 1 +4 0.000358351 32 +3 0.199660073 1 +4 0.000344751 33 +3 0.407927178 2 +4 0.000420648 36 +3 0.543366155 1 +4 0.000340478 17 +3 0.375853191 1 +4 0.000378380 18 +3 0.217433113 1 +4 0.000328987 17 +3 1.405781702 1 +4 0.000347724 4 +3 0.137652772 1 +4 0.000364203 4 +3 2.253770331 1 +4 0.000337139 17 +3 0.257778530 1 +4 0.000387409 17 +3 3.269870180 1 +4 0.000343585 17 +3 0.271446679 1 +3 0.095813564 1 +4 0.000386545 28 +3 0.359667828 1 +4 0.000342076 18 +3 0.143686060 1 +4 0.000393273 18 +3 0.095738892 1 +4 0.000330771 19 +3 6.037626129 1 +4 0.110016314 38 +3 23.541898745 1 +4 0.000366452 17 +3 0.094576810 1 +4 0.000364105 18 +3 0.439953748 1 +4 0.000334744 17 +3 0.143475210 1 +4 0.000412452 17 +3 0.499995276 1 +4 0.000361066 18 +3 0.083070390 1 +4 0.000359463 17 +3 0.083581776 1 +4 0.000306816 17 +3 0.083458877 1 +4 0.000343769 18 +3 0.082669993 1 +4 0.000315571 17 +3 0.083198248 1 +4 0.000384370 17 +3 0.083694700 1 +4 0.000314496 18 +3 0.082887020 1 +4 0.000375129 17 +3 0.083594365 1 +4 0.000312188 17 +3 20.247243326 1 +4 0.000431676 23 +3 0.239385283 1 +4 0.000340447 23 +3 0.399672296 1 +4 0.000362638 24 +3 0.295931090 1 +4 0.000348452 19 +3 0.359425905 2 +4 0.000382605 36 +3 0.154451375 1 +4 0.000362061 19 +3 0.148799278 1 +4 0.000368235 20 +3 0.279663320 1 +4 0.000353554 24 +3 0.295672037 1 +4 0.000346773 19 +3 0.623692871 2 +4 0.000390137 10 +3 0.167677853 1 +4 0.000353614 1 +3 0.135699710 1 +4 0.000381724 1 +4 0.000311595 71 +3 35.888691525 1 +4 0.000380571 39 +3 5.423523165 1 +4 0.000341236 17 +3 0.217798218 1 +4 0.000344187 19 +3 0.397690449 1 +4 0.000366442 20 +3 2.513732807 1 +4 0.000387679 17 +3 0.197384328 1 +4 0.000331356 19 +3 0.335674728 1 +4 0.000339958 20 +3 0.185593608 1 +4 0.000311937 17 +3 1.334051578 1 +3 0.359853017 1 +3 0.155216835 1 +4 0.000430781 184 +3 0.140258689 1 +4 0.000335231 41 +3 0.169686067 1 +4 0.000345717 16 +3 0.157818890 1 +4 0.000347461 16 +3 0.303708008 1 +4 0.000444404 233 +3 4.759801138 1 +4 0.000363526 41 +3 0.499823451 1 +4 0.000347010 16 +3 0.083712879 1 +4 0.000317597 16 +3 0.082796797 1 +4 0.000326708 16 +3 0.083007561 1 +4 0.000341557 16 +3 0.083728222 1 +4 0.000327262 16 +3 0.082587059 1 +4 0.000378164 18 +3 0.082926527 1 +4 0.000327341 16 +3 1.312661937 1 +4 0.000398033 17 +3 0.709613047 1 +4 0.000346253 17 +3 0.169590463 1 +4 0.000412545 16 +3 0.421534122 1 +4 0.000403937 15 +3 0.991714169 1 +4 0.000427131 13 +3 0.241399307 1 +4 0.000356090 17 +3 0.453824047 1 +4 0.000379495 18 +3 0.320876867 1 +4 0.000359400 21 +3 0.782515366 1 +4 0.000389596 17 +3 0.217394721 1 +4 0.000363849 16 +3 3.470053717 1 +4 0.000447022 15 +3 0.345406299 1 +4 0.000347561 9 +3 24.583114102 1 +4 0.000394154 24 +3 0.286974944 1 +4 0.000370130 25 +3 0.135644134 1 +4 0.000373238 26 +3 0.263746811 1 +4 0.000351969 28 +3 0.145520398 1 +4 0.000370469 30 +3 0.093587014 1 +4 0.000329265 29 +3 0.055637504 1 +4 0.000358894 28 +3 0.079593004 1 +4 0.000356934 28 +3 0.175807494 1 +4 0.000369155 28 +3 0.335557147 2 +4 0.000401615 24 +3 0.169616376 1 +4 0.000346995 17 +3 0.365655153 1 +3 0.079819032 1 +4 0.000359693 4 +3 0.351689460 1 +3 0.088197773 1 +4 0.000344617 28 +3 0.111462078 1 +4 0.000376654 18 +3 0.664739248 1 +4 0.110064490 37 +3 3.473586517 1 +4 0.000625635 794 +3 1.015071437 1 +4 0.000386082 34 +3 0.499932551 1 +4 0.000430947 92 +3 0.082826258 1 +4 0.000386639 96 +3 0.082746645 1 +4 0.000372811 93 +3 0.083326197 1 +4 0.000379790 44 +3 0.083016049 1 +4 0.000432717 34 +3 0.083078196 1 +4 0.000361275 76 +3 9.652630453 1 +4 0.000418614 115 +3 0.497876596 1 +4 0.000388240 132 +3 0.082670210 1 +4 0.000418183 44 +3 0.082847437 1 +4 0.000361215 115 +3 0.083045506 1 +4 0.000420881 132 +3 0.083327586 1 +4 0.000358546 44 +3 0.173799235 1 +4 0.000399280 16 +3 0.500016895 1 +4 0.000351978 16 +3 0.082774164 1 +4 0.000347894 16 +3 0.083041816 1 +4 0.000321530 16 +3 0.083247592 1 +4 0.000333520 16 +3 0.083307658 1 +4 0.000353112 16 +3 0.083097481 1 +4 0.000378219 18 +3 0.586188721 1 +4 0.000361755 9 +3 0.135471484 1 +4 0.000324248 1 +3 0.103678962 1 +4 0.000339098 1 +4 0.000603521 69 +3 1.103030135 1 +4 0.000396260 37 +3 0.169851746 1 +4 0.000331487 16 +3 6.261932030 1 +4 0.000339833 16 +3 0.265472283 1 +4 0.000313612 18 +3 0.381799465 1 +4 0.000334484 18 +3 0.951572234 1 +4 0.000348900 17 +3 1.735823832 1 +4 0.000404114 17 +3 0.201548379 1 +4 0.000334137 19 +3 0.197764185 1 +4 0.000410260 18 +3 0.177546445 1 +4 0.000371907 20 +3 2.429781261 1 +4 0.000610228 797 +3 0.879438495 1 +4 0.000585346 869 +3 10.951858610 1 +4 0.000440909 15 +3 10.799940923 1 +4 0.000341886 10 +3 0.303350678 1 +4 0.000343017 1 +3 0.167643177 1 +4 0.000374399 1 +3 0.175754245 1 +4 0.000347929 1 +3 0.647646181 1 +4 0.000353274 1 +3 0.175767904 1 +4 0.000379161 1 +3 0.271525075 1 +4 0.000347821 38 +3 1.639717397 1 +4 0.000588717 732 +3 3.839532834 1 +4 0.000340486 10 +3 0.087734228 1 +4 0.000652134 783 +3 3.535513042 1 +4 0.000356527 19 +3 0.500583414 1 +4 0.000399680 17 +3 0.083518452 1 +4 0.000321724 21 +3 0.083699460 1 +4 0.000391997 20 +3 0.082616070 1 +4 0.000323285 20 +3 0.083314663 1 +4 0.000339676 19 +3 0.083051219 1 +4 0.000339791 16 +3 0.083546343 1 +4 0.000381123 20 +3 0.083323899 1 +4 0.000324578 20 +3 0.082941783 1 +4 0.000349620 17 +3 0.082666144 1 +4 0.000313653 19 +3 0.082949171 1 +4 0.000384689 34 +3 0.083319014 1 +4 0.000363061 76 +3 0.084397062 1 +4 0.000456607 118 +3 0.082312231 1 +4 0.000361616 133 +3 1.734451501 1 +4 0.000426216 47 +3 0.381438416 1 +4 0.000343299 20 +3 0.455708441 1 +3 0.122319633 1 +4 0.000364578 29 +3 0.245415055 1 +4 0.000343142 39 +3 0.500119816 1 +4 0.000342403 19 +3 0.083415591 1 +4 0.000325276 15 +3 0.083065498 1 +4 0.000321760 18 +3 0.083456733 1 +4 0.000371619 20 +3 0.083754254 1 +4 0.000325312 17 +3 0.082940409 1 +4 0.000332374 20 +3 0.082932899 1 +4 0.000312083 18 +3 0.083389380 1 +4 0.000315540 18 +3 0.083010926 1 +4 0.000317392 20 +3 0.082698803 1 +4 0.000315490 20 +3 0.083225849 1 +4 0.000330847 19 +3 0.082970489 1 +4 0.000337374 19 +3 0.083452587 1 +4 0.000341626 17 +3 0.083398248 1 +4 0.000383430 19 +3 0.573224781 1 +4 0.000391364 109 +3 0.871546645 1 +4 0.000360210 17 +3 0.577727169 1 +4 0.000331132 16 +3 0.229592433 1 +4 0.000362804 16 +3 1.057743977 1 +4 0.000350083 17 +3 1.765762623 1 +4 0.000428124 16 +3 1.383694692 1 +4 0.000358331 17 +3 0.297640829 1 +4 0.000327893 16 +3 4.910395239 1 +4 0.000406035 31 +3 1.397314945 21 +4 0.000359083 37 +3 1.609793354 1 +4 0.000384455 17 +3 1.696416598 1 +4 0.109980578 35 +3 13.121523751 1 +4 0.000366600 16 +3 0.809510869 1 +4 0.000352286 19 +3 0.317591826 1 +4 0.000394635 16 +3 0.143487508 1 +4 0.000321175 15 +3 0.217761934 1 +4 0.000319186 17 +3 0.149758961 1 +4 0.000324585 17 +3 0.161655829 1 +4 0.000324805 16 +3 0.325490170 1 +4 0.000367580 16 +3 0.391654555 1 +4 0.000365332 4 +3 0.159725048 1 +4 0.000383846 16 +3 0.161781642 1 +4 0.000363862 16 +3 0.133365775 1 +4 0.000316864 16 +3 0.113801837 1 +4 0.000380328 16 +3 0.117553141 1 +4 0.000313111 16 +3 0.145746732 1 +4 0.000370316 16 +3 0.301631901 1 +4 0.000324591 4 +3 0.223737158 1 +4 0.000420746 16 +3 0.295476548 1 +4 0.000341334 16 +3 0.767843686 1 +4 0.000394438 16 +3 0.695710039 1 +4 0.000332074 16 +3 0.471539808 1 +4 0.000386183 16 +3 0.495629753 1 +4 0.000364721 16 +3 0.169471254 1 +4 0.000395600 17 +3 0.157824880 1 +4 0.000343854 16 +3 0.439781914 1 +4 0.000356489 16 +3 0.111383855 1 +4 0.000325492 4 +3 0.185756624 1 +4 0.000356705 4 +3 0.117635696 1 +4 0.000335667 6 +3 0.151711751 1 +4 0.000414281 23 +3 0.231635316 1 +4 0.000328243 24 +3 0.087619785 1 +4 0.000356361 24 +3 0.223603835 1 +4 0.000338573 24 +3 0.479888257 1 +4 0.000351910 16 +3 0.071516472 1 +4 0.000333981 17 +3 0.167572694 1 +4 0.000344816 25 +3 0.103655085 1 +4 0.000349044 24 +3 0.031695949 1 +4 0.000326415 24 +3 0.774499266 1 +4 0.110011972 32 +3 0.035262855 1 +4 0.000332976 30 +3 0.168385201 1 +4 0.000354280 24 +3 0.494758039 2 +4 0.000380367 33 +3 0.303743033 1 +3 0.139108924 1 +4 0.000390353 47 +3 8.332910848 1 +4 0.000343885 10 +3 0.143572664 1 +4 0.000304229 1 +3 0.071928794 1 +4 0.000353615 1 +4 0.000389971 70 +3 4.743276758 1 +4 0.000417445 36 +3 0.499719386 1 +4 0.000360638 17 +3 0.083358699 1 +4 0.000352661 20 +3 0.082721814 1 +4 0.000313192 17 +3 3.870979071 1 +4 0.000383594 17 +3 0.498026409 1 +4 0.000375845 19 +3 0.083003383 1 +4 0.000386986 17 +3 0.083129783 1 +4 0.000326125 20 +3 0.083434987 1 +4 0.000323584 17 +3 0.084191069 1 +4 0.000320855 17 +3 0.081883819 1 +4 0.000322254 19 +3 0.083758626 1 +4 0.000327114 16 +3 0.084057046 1 +4 0.000392717 21 +3 0.082125748 1 +4 0.000322579 17 +3 0.083188434 1 +4 0.000311301 17 +3 0.084080430 1 +4 0.000373902 19 +3 0.082827532 1 +4 0.000358945 119 +3 0.083087590 1 +4 0.000373025 133 +3 0.083085520 1 +4 0.000383822 47 +3 0.082890926 1 +4 0.000432347 34 +3 0.083149409 1 +4 0.000365709 74 +3 0.083323885 1 +4 0.000360498 72 +3 0.082904465 1 +4 0.000363469 92 +3 0.083277200 1 +4 0.000353641 47 +3 0.083035549 1 +4 0.000364001 34 +3 0.083024694 1 +4 0.000354147 85 +3 0.436548943 1 +4 0.000391764 17 +3 0.501119745 1 +4 0.000334290 18 +3 0.082300439 1 +4 0.000338687 20 +3 0.083169014 1 +4 0.000322771 18 +3 0.082941715 1 +4 0.000309774 17 +3 0.083080152 1 +4 0.000331539 17 +3 0.083061608 1 +4 0.000316191 18 +3 0.083320427 1 +4 0.000363945 20 +3 0.254308068 1 +4 0.000313941 19 +3 0.392092048 1 +4 0.000561957 754 +3 4.767660373 1 +4 0.000562641 699 +3 1.224209205 1 +4 0.000584624 755 +3 1.086712767 1 +4 0.000554301 858 +3 173.398125109 1 +4 0.000597114 751 +3 3.710424528 1 +4 0.000434863 92 +3 0.499993413 1 +4 0.000383464 96 +3 0.084353418 1 +4 0.000379985 93 +3 0.082259439 1 +4 0.000359586 44 +3 0.083467923 1 +4 0.000352713 34 +3 0.082973101 1 +4 0.000356854 76 +3 0.083846608 1 +4 0.000371618 115 +3 25.122087962 1 +4 0.000567705 880 +3 7.942980934 1 +4 0.000356889 15 +3 0.500276063 1 +4 0.000385987 15 +3 0.083330134 1 +4 0.000317600 15 +3 0.082887076 1 +4 0.000314367 15 +3 0.083197735 1 +4 0.000324356 15 +3 0.083567058 1 +4 0.000337583 15 +3 0.082868538 1 +4 0.000310929 17 +3 0.083759940 1 +4 0.000324532 18 +3 0.082131535 1 +4 0.000349180 16 +3 0.083376306 1 +4 0.000311864 17 +3 0.083677997 1 +4 0.000324080 16 +3 0.083654014 1 +4 0.000313726 16 +3 0.083737061 1 +4 0.000314814 18 +3 0.082964153 1 +4 0.000336715 16 +3 0.082726858 1 +4 0.000312325 16 +3 0.083101948 1 +4 0.000348739 16 +3 0.083329035 1 +4 0.000320928 16 +3 0.083216977 1 +4 0.000319246 18 +3 0.082672314 1 +4 0.000307806 16 +3 0.084325873 1 +4 0.000348140 17 +3 0.082422366 1 +4 0.000363604 44 +3 0.083049231 1 +4 0.000363395 97 +3 0.082753897 1 +4 0.000393840 91 +3 0.083559486 1 +4 0.000386767 44 +3 0.082939324 1 +4 0.000373976 95 +3 0.082706022 1 +4 0.000386850 92 +3 0.083500496 1 +4 0.000358572 44 +3 0.885104924 1 +4 0.000421535 34 +3 39.951501347 1 +4 0.000583653 755 +3 0.926849683 1 +4 0.000617545 735 +3 0.559514961 1 +4 0.000566334 818 +3 0.959282192 1 +4 0.000479931 72 +3 0.499546453 1 +4 0.000396574 62 +3 0.083434377 1 +4 0.000398163 37 +3 40.722109863 1 +4 0.000577903 859 +3 1.430611693 1 +4 0.000391510 15 +3 0.500163171 1 +4 0.000337607 15 +3 0.083759610 1 +4 0.000359738 17 +3 0.082655315 1 +4 0.000343770 17 +3 0.082732761 1 +4 0.000335851 15 +3 0.082743430 1 +4 0.000319388 16 +3 0.083822318 1 +4 0.000352233 15 +3 0.083089759 1 +4 0.000321641 17 +3 0.082825352 1 +4 0.000349164 18 +3 0.083791797 1 +4 0.000325299 16 +3 0.083068212 1 +4 0.000370780 16 +3 0.083765591 1 +4 0.000323828 16 +3 0.082813122 1 +4 0.000339110 16 +3 0.083608168 1 +4 0.000322280 18 +3 0.083010845 1 +4 0.000341757 16 +3 9.471316892 1 +4 0.000343512 17 +3 0.498328117 1 +4 0.000368632 16 +3 0.083500772 1 +4 0.000364604 16 +3 0.083649960 1 +4 0.000343547 16 +3 0.083296348 1 +4 0.000348931 16 +3 0.084231077 1 +4 0.000367471 16 +3 0.081395597 1 +4 0.000362010 92 +3 0.083224218 1 +4 0.000388863 44 +3 0.083188442 1 +4 0.000366450 34 +3 0.083088798 1 +4 0.000405215 93 +3 15.687256348 1 +4 0.000365620 16 +3 0.499769431 1 +4 0.000377466 18 +3 0.082966183 1 +4 0.000326121 16 +3 0.083061395 1 +4 0.000345310 16 +3 0.082797922 1 +4 0.000323222 16 +3 0.083003183 1 +4 0.000322430 16 +3 0.083640542 1 +4 0.000343474 16 +3 0.082662134 1 +4 0.000329010 16 +3 0.083433826 1 +4 0.000326679 16 +3 0.717295792 1 +4 0.000362489 17 +3 9.246256414 1 +3 0.121762406 1 +4 0.000372802 29 +3 0.261669317 1 +4 0.000374347 103 +3 0.471606299 1 +4 0.000349599 18 +3 0.177723317 1 +4 0.000320525 18 +3 0.149531376 1 +4 0.000317570 17 +3 0.145788692 1 +4 0.000327977 17 +3 0.261597392 1 +4 0.000354466 18 +3 0.360741810 1 +4 0.000357309 17 +3 0.200460328 1 +4 0.000321081 17 +3 0.149905846 1 +4 0.000357241 17 +3 6.279812516 1 +4 0.000353334 4 +3 0.599555710 1 +4 0.000335743 17 +3 0.127714321 1 +3 0.080017049 1 +4 0.000382513 28 +3 0.639577091 1 +4 0.000358401 18 +3 0.767003151 1 +4 0.109989259 37 +3 0.187151499 1 +4 0.000346591 40 +3 0.287392683 1 +4 0.000385092 40 +3 0.343723079 2 +4 0.000368831 33 +3 0.463491583 1 +4 0.000435988 59 +3 0.327520206 1 +4 0.000348395 18 +3 4.636741822 7 +4 0.000401747 25 +3 0.339403889 1 +4 0.000331128 17 +3 33.096554304 2 +4 0.000410601 36 +7 0.000507670 TSTP +7 33.592008232 CONT +4 0.000786179 7 +4 0.000280514 799 +3 2.606784744 1 +4 0.000379428 31 +3 4.594248745 20 +4 0.000361507 37 +3 0.325405936 1 +4 0.000357059 17 +3 7.476120404 34 +4 0.000555940 52 +3 0.325399978 1 +4 0.000542024 17 +3 4.543750298 34 +4 0.000453705 98 +3 4.538399418 1 +3 0.034736034 1 +4 0.000347439 9 +3 0.111485082 1 +4 0.000389472 1 +3 0.191836691 1 +4 0.000349003 43 +3 0.623558211 1 +4 0.000440117 33 +3 0.143477527 1 +4 0.000352203 17 +3 0.231866390 1 +4 0.000362754 18 +3 0.159597752 1 +4 0.000336335 18 +3 0.167693314 1 +4 0.000347364 19 +3 0.207554391 1 +4 0.000341936 15 +3 0.343822076 1 +4 0.000344344 16 +3 0.215594862 1 +4 0.000368821 17 +3 0.135544701 1 +4 0.000334504 17 +3 0.047720903 1 +4 0.000328578 17 +3 0.183610492 1 +4 0.000331143 17 +3 0.271651176 1 +4 0.000376779 17 +3 0.503763620 2 +4 0.000394028 36 +3 37.745595101 1 +4 0.000349121 19 +3 0.217034267 1 +4 0.000399334 20 +3 0.205427082 1 +4 0.000354892 16 +3 1.065863721 1 +4 0.000425449 19 +3 0.533513377 1 +4 0.000380448 20 +3 0.567672251 1 +3 0.130101959 1 +4 0.000424973 29 +3 0.269547621 1 +4 0.000352307 41 +3 0.161465729 1 +4 0.000365436 20 +3 0.149596147 1 +4 0.000333491 20 +3 0.153692873 1 +4 0.000313810 15 +3 0.133632562 1 +4 0.000321132 20 +3 0.311801949 1 +4 0.000361249 104 +3 0.639725752 1 +3 0.135963947 1 +4 0.000352421 84 +3 0.311597013 1 +3 0.064147385 1 +4 0.000357800 29 +3 1.630121451 7 +4 0.000369118 25 +3 0.313043225 2 +4 0.000350825 37 +3 0.255962410 1 +3 0.047636991 1 +4 0.000408675 6 +3 1.608788858 1 +4 0.000456490 18 +3 1.238824509 1 +4 0.000384430 25 +3 4.331991931 36 +4 0.000410721 95 +3 0.971262804 1 +3 0.079976027 1 +4 0.000361427 28 +3 0.287589060 1 +4 0.000339987 19 +3 2.168861266 4 +4 0.000371567 28 +3 1.252918183 5 +4 0.000370132 23 +3 0.699263778 1 +4 0.110142043 33 +3 0.199951622 1 +4 0.000324229 22 +3 0.145600189 1 +4 0.000345335 20 +3 0.149617621 1 +4 0.000318206 16 +3 0.153737423 1 +4 0.000312236 19 +3 0.133659447 1 +4 0.000325207 20 +3 0.129660650 1 +4 0.000317376 20 +3 0.133666439 1 +4 0.000389246 47 +3 0.161655933 1 +4 0.000362612 99 +3 0.117684704 1 +4 0.000437356 94 +3 0.177589087 1 +4 0.000369371 47 +3 0.285712479 1 +4 0.000324828 20 +3 0.360734950 1 +3 0.112810885 1 +4 0.000351088 29 +3 0.245748660 1 +4 0.000356700 43 +3 0.153487510 1 +4 0.000317802 19 +3 0.157776976 1 +4 0.000397700 20 +3 0.161456001 1 +4 0.000324479 20 +3 0.141774119 1 +4 0.000336573 19 +3 0.153774037 1 +4 0.000386267 20 +3 0.141530271 1 +4 0.000359167 20 +3 0.153608292 1 +4 0.000322263 19 +3 0.333868354 1 +4 0.000409765 20 +3 0.311476384 1 +4 0.000372037 100 +3 2.152494115 1 +3 0.079338693 1 +4 0.000362088 29 +3 0.315948467 7 +4 0.000515412 67 +3 0.323213155 2 +4 0.000377947 33 +3 0.535531343 1 +3 0.047994706 1 +4 0.000354636 6 +3 2.440374530 1 +4 0.000373870 24 +3 3.805683567 39 +4 0.000449189 135 +3 1.001622387 1 +4 0.000369665 62 +3 0.479049305 2 +4 0.000365282 34 +3 0.143687740 1 +4 0.000360857 24 +3 0.159547482 1 +4 0.000343495 19 +3 1.880106562 9 +4 0.000356396 33 +3 0.627014310 1 +4 0.110003044 33 +3 13.303015767 1 +4 0.000429375 17 +3 0.193335351 1 +4 0.000328035 21 +3 0.485715287 1 +4 0.000337050 22 +3 9.129944515 1 +4 0.000391862 17 +3 0.498215899 1 +4 0.000338218 22 +3 0.082904375 1 +4 0.000355741 20 +3 0.082657933 1 +4 0.000328584 16 +3 0.084061572 1 +4 0.000314004 19 +3 0.082824895 1 +4 0.000324312 20 +3 0.083443491 1 +4 0.000334772 20 +3 0.082809770 1 +4 0.000334535 19 +3 0.082798218 1 +4 0.000313383 21 +3 0.243187561 1 +4 0.000365955 20 +3 0.500230870 1 +4 0.000341683 20 +3 0.083274854 1 +4 0.000325193 20 +3 0.082818560 1 +4 0.000308637 19 +3 0.083960978 1 +4 0.000333325 20 +3 0.426000229 1 +4 0.000336973 20 +3 0.213830366 1 +3 0.500687773 1 +4 0.000446693 97 +3 0.082796026 1 +3 0.083635363 1 +4 0.000355972 48 +3 0.082901407 1 +3 0.084268407 1 +4 0.000398718 30 +3 0.082863130 1 +3 0.083385320 1 +4 0.000346105 97 +3 0.083059996 1 +3 0.083058962 1 +4 0.000381019 89 +3 0.083075946 1 +3 0.206334017 1 +4 0.000373633 91 +3 0.181859768 1 +3 0.169812993 1 +4 0.000375620 49 +3 0.165644564 1 +3 0.185971061 1 +4 0.000363444 92 +3 0.165789845 1 +3 0.385925308 1 +4 0.000391649 101 +3 0.365499576 1 +4 0.000350679 18 +3 0.500122316 1 +4 0.000344882 16 +3 0.082779027 1 +4 0.000333228 16 +3 0.082804862 1 +4 0.000310371 16 +3 0.082768243 1 +4 0.000428173 16 +3 0.083085458 1 +4 0.000322093 17 +3 0.082817450 1 +4 0.000373640 44 +3 0.082831867 1 +4 0.000374277 34 +3 0.083265891 1 +4 0.000400726 54 +3 0.082799250 1 +4 0.000359395 71 +3 0.083042042 1 +4 0.000421075 112 +3 0.205828346 1 +4 0.000350861 16 +3 0.500128122 1 +4 0.000374088 16 +3 0.082996870 1 +4 0.000316414 16 +3 0.083574926 1 +4 0.000330608 18 +3 0.083434733 1 +4 0.000319073 16 +3 0.082945777 1 +4 0.000327451 17 +3 0.083062480 1 +4 0.000326098 16 +3 12.468055977 1 +4 0.000403075 16 +3 0.229340834 1 +4 0.000334437 16 +3 0.170011338 1 +4 0.000350252 16 +3 305.080853416 1 +4 0.000357297 16 +3 0.499712144 1 +4 0.000390246 16 +3 0.082811528 1 +4 0.000342959 16 +3 0.082280939 1 +4 0.000605643 16 +3 0.083090027 1 +4 0.000350823 17 +3 0.082792526 1 +4 0.000353048 16 +3 0.082663170 1 +4 0.000369943 16 +3 0.083655848 1 +4 0.000418055 18 +3 0.083146383 1 +4 0.000405476 16 +3 0.082986955 1 +4 0.000338767 16 +3 0.083275055 1 +4 0.000521216 58 +3 0.082562989 1 +4 0.000640961 34 +3 0.083339019 1 +4 0.000398237 61 +3 0.082783475 1 +4 0.000397557 63 +3 0.185961846 1 +4 0.000350742 16 +3 0.153606324 1 +4 0.000351134 16 +3 0.150396884 1 +4 0.000351210 18 +3 0.136918460 1 +4 0.000371616 16 +3 0.117674373 1 +4 0.000356828 16 +3 0.145572057 1 +4 0.000367855 16 +3 0.309608021 1 +4 0.000435564 32 +3 0.080303026 1 +4 0.000348265 18 +3 0.167081174 1 +4 0.000362195 18 +3 0.287604394 1 +4 0.000365589 18 +3 0.119596079 1 +4 0.000332452 17 +3 0.423673342 1 +4 0.000366852 18 +3 0.160327894 1 +4 0.000360262 18 +3 0.158978615 1 +4 0.000364156 18 +3 0.575597191 1 +4 0.000344260 17 +3 0.111804373 1 +4 0.000347689 18 +3 0.439457400 2 +4 0.000358797 31 +3 0.281796283 1 +4 0.000352656 17 +3 0.357515641 1 +4 0.000370017 21 +3 0.559558022 1 +4 0.000448963 31 +3 0.079815133 1 +4 0.000348358 18 +3 0.591688138 2 +4 0.000374344 32 +3 0.327539528 1 +4 0.000330647 9 +3 0.143633680 1 +4 0.000590716 1 +3 0.087503013 1 +4 0.000756019 11 +4 0.000400148 61 +3 31.448295918 1 +4 0.000629257 883 +3 5.111258039 1 +4 0.000351808 17 +3 0.499703034 1 +4 0.000400652 18 +3 0.082635319 1 +4 0.000540967 17 +3 0.082868149 1 +4 0.000494295 17 +3 0.082901520 1 +4 0.000313138 18 +3 0.083421936 1 +4 0.000373402 20 +3 0.083218793 1 +4 0.000328879 17 +3 0.083214530 1 +4 0.000346025 17 +3 0.082578627 1 +4 0.000346003 18 +3 8.150269658 1 +4 0.000363903 18 +3 0.213378491 1 +4 0.000461823 20 +3 0.186770439 1 +4 0.000581424 18 +3 0.164286182 1 +4 0.000380816 16 +3 4.903982535 1 +4 0.000367656 17 +3 0.153510666 1 +4 0.000341938 18 +3 0.149697119 1 +4 0.000343747 19 +3 0.211556218 1 +4 0.000342054 17 +3 0.195592296 1 +4 0.000378550 20 +3 0.463600866 1 +3 0.106134844 1 +4 0.000357633 30 +3 0.261639119 1 +4 0.000384154 36 +3 0.145573011 1 +4 0.000357779 18 +3 0.677693415 1 +4 0.000439066 20 +3 0.145508251 1 +4 0.000342164 18 +3 0.149604994 1 +4 0.000364306 16 +3 0.161842107 1 +4 0.000355461 18 +3 0.221457848 1 +4 0.000361987 17 +3 0.311692567 1 +4 0.000369625 22 +3 0.879888862 1 +4 0.000711855 830 +3 1.271520325 1 +4 0.000610571 862 +3 1.279280274 1 +4 0.000383892 18 +3 0.499390638 1 +4 0.000348084 18 +3 0.083076480 1 +4 0.000413453 18 +3 0.083421410 1 +4 0.000354474 18 +3 0.082785003 1 +4 0.000367550 18 +3 0.082898553 1 +4 0.000341109 17 +3 0.083529978 1 +4 0.000385285 19 +3 0.083015081 1 +4 0.000339409 20 +3 0.082823787 1 +4 0.000429733 21 +3 0.083276952 1 +4 0.000352359 19 +3 0.083412063 1 +4 0.000367975 17 +3 0.082673286 1 +4 0.000343524 20 +3 0.721130396 1 +3 0.154070246 1 +4 0.000379984 84 +3 0.229604850 1 +3 0.170532585 1 +4 0.000436692 117 +3 0.285020611 1 +3 0.170262550 1 +4 0.000389631 74 +3 0.197440319 1 +3 0.121861653 1 +4 0.000376338 46 +3 0.197838152 1 +3 0.113796320 1 +4 0.000378746 39 +3 0.349874483 1 +4 0.000398965 10 +3 0.199647430 1 +4 0.000331110 1 +3 0.071427202 1 +4 0.000348580 1 +4 0.000415405 70 +3 2.887476526 1 +4 0.000583736 861 +3 5.975968449 1 +4 0.000599183 878 +3 1.639218505 1 +4 0.000676829 840 +3 18.640117849 1 +4 0.000708879 878 +3 1.351029379 1 +4 0.000338065 18 +3 0.551726408 1 +4 0.000638251 708 +3 1.592390050 1 +4 0.000614038 17 +3 0.499281201 1 +4 0.000361723 18 +3 0.082802459 1 +4 0.000331499 15 +3 0.082807536 1 +4 0.000364739 15 +3 0.083525030 1 +4 0.000333271 15 +3 0.083423790 1 +4 0.000431876 15 +3 0.082820704 1 +4 0.000334049 15 +3 0.083016323 1 +4 0.000374775 15 +3 0.083125769 1 +4 0.000453713 17 +3 0.082969191 1 +4 0.000428278 18 +3 0.083106971 1 +4 0.000319947 16 +3 1.419992144 1 +4 0.000550351 570 +3 1.263381917 1 +4 0.000390523 76 +3 0.185466776 1 +4 0.000397981 65 +3 0.173625432 1 +4 0.000416718 36 +3 0.519672264 1 +4 0.000353401 17 +3 0.177834237 1 +4 0.000342628 15 +3 8.141768786 1 +4 0.000534125 663 +3 2.503599942 1 +4 0.000580856 741 +3 0.711629519 1 +4 0.000690980 716 +3 0.591114578 1 +4 0.000781048 597 +3 0.487249694 1 +4 0.000577707 733 +3 3.063293774 1 +4 0.000333000 16 +3 0.500323845 1 +4 0.000417908 18 +3 0.082467932 1 +4 0.000337739 16 +3 0.082923122 1 +4 0.000454304 16 +3 0.082945644 1 +4 0.000330324 18 +3 0.083710325 1 +4 0.000365034 16 +3 0.083364206 1 +4 0.000433299 17 +3 0.083042008 1 +4 0.000342279 16 +3 0.083093016 1 +4 0.000400053 17 +3 0.082978936 1 +4 0.000351761 18 +3 2.063541504 1 +4 0.000395230 54 +3 0.287753625 1 +4 0.000378037 38 +3 0.359454900 1 +4 0.000361308 19 +3 0.111878081 1 +4 0.000458391 17 +3 3.319525627 1 +4 0.000335753 18 +3 0.223942086 1 +4 0.000385710 18 +3 0.127326902 1 +4 0.000334250 18 +3 0.135655063 1 +4 0.000365659 17 +3 0.479710733 1 +4 0.000346918 17 +3 2.327788491 1 +4 0.000347750 18 +3 0.175614082 1 +4 0.000383315 18 +3 0.119598238 1 +4 0.000337943 18 +3 0.071602147 1 +4 0.000395307 18 +3 0.328027592 1 +4 0.000367378 18 +3 0.119221737 1 +4 0.000337344 18 +3 0.129844131 1 +4 0.000343188 18 +3 0.109624618 1 +4 0.000334550 18 +3 0.239511917 1 +4 0.000385675 19 +3 0.191870639 1 +4 0.000452720 18 +3 0.351475579 1 +4 0.000440246 17 +3 0.121703509 1 +4 0.000364897 18 +3 0.093347207 1 +4 0.000344195 19 +3 0.135668364 1 +4 0.000341657 17 +3 0.248582905 1 +4 0.000347392 18 +3 0.007185995 1 +4 0.000356981 18 +3 0.839249703 1 +4 0.000482206 17 +3 0.139523516 1 +4 0.000378338 17 +3 0.115728849 1 +4 0.000341072 18 +3 0.087463961 1 +4 0.000341446 18 +3 0.103741610 1 +4 0.000467615 17 +3 1.031668138 1 +4 0.000373832 18 +3 0.111444149 1 +4 0.000341171 18 +3 0.135576625 1 +4 0.000360623 18 +3 0.095768198 1 +4 0.000389785 18 +3 0.071643746 1 +4 0.000382010 17 +3 0.111541595 1 +4 0.000337322 19 +3 0.119745737 1 +4 0.000367651 18 +3 0.152010598 1 +4 0.000336790 18 +3 0.071249469 1 +4 0.000355612 18 +3 0.111595064 1 +4 0.000347300 18 +3 0.127714645 1 +4 0.000395856 18 +3 0.167639654 1 +4 0.000350440 18 +3 0.175765275 1 +4 0.000433003 18 +3 0.759538185 1 +4 0.000359089 18 +3 0.709730548 1 +4 0.109927658 33 +3 4.268095613 1 +4 0.000426077 61 +3 14.006783454 53 +4 0.000444446 71 +3 0.936872940 2 +3 0.151954890 1 +4 0.000383324 39 +3 0.471870533 1 +4 0.000369988 22 +3 1.175527431 1 +4 0.000429277 62 +3 0.239737011 1 +4 0.000341658 40 +3 0.439415420 2 +4 0.000383170 33 +3 0.175640302 1 +4 0.000349671 18 +3 0.169845963 1 +4 0.000433399 18 +3 0.197402764 1 +4 0.000346099 17 +3 0.161737299 1 +4 0.000359958 17 +3 0.157603293 1 +4 0.000746578 18 +3 0.185302491 1 +4 0.000515689 17 +3 0.293429490 1 +4 0.000369115 17 +3 51.473362785 2 +4 0.000339224 18 +3 0.320202308 1 +4 0.000376746 61 +3 0.935101651 2 +4 0.000353311 9 +3 0.111679022 1 +4 0.000316888 1 +3 0.167660090 1 +4 0.000323413 1 +3 0.191624800 1 +4 0.000319812 1 +3 0.031835341 1 +4 0.000373940 1 +3 0.127624294 1 +4 0.000367299 1 +3 0.081461257 1 +4 0.000311281 1 +3 0.069641656 1 +4 0.000295870 1 +3 0.055794153 1 +4 0.000295469 1 +3 0.335808944 1 +4 0.000319378 1 +4 0.000324449 39 +3 0.223383309 1 +4 0.000385035 21 +3 0.220343199 339 +4 0.000652037 372 +4 0.000353694 167 +3 0.506204321 2 +4 0.000364502 32 +3 0.169938430 1 +4 0.000364254 47 +3 0.181399879 1 +4 0.000405858 34 +3 0.185574231 1 +4 0.000362139 57 +3 0.149529480 1 +4 0.000386950 18 +3 0.137724101 1 +4 0.000361077 18 +3 0.157610025 1 +4 0.000349608 20 +3 0.169682124 1 +4 0.000329677 12 +3 0.181623016 1 +4 0.000355865 18 +3 0.231693664 1 +4 0.000328066 15 +3 0.103674216 1 +4 0.000411816 17 +3 0.185557476 1 +4 0.000351002 17 +3 0.693724611 1 +3 0.063986470 1 +4 0.000414948 4 +3 3.599898900 1 +4 0.000366572 6 +3 0.487570874 1 +3 0.080006699 1 +4 0.000328093 5 +3 0.807685354 1 +4 0.000391036 25 +3 1.007602547 1 +4 0.000336740 17 +3 0.495687132 1 +4 0.000388623 4 +3 0.377692091 1 +4 0.000381859 4 +3 0.197468637 1 +4 0.000381306 4 +3 0.177657772 1 +4 0.000334142 4 +3 0.149706863 1 +4 0.000371475 4 +3 0.161661316 1 +4 0.000329386 4 +3 1.093766694 1 +4 0.000420679 24 +3 4.439891434 10 +4 0.000348675 37 +3 0.352440612 1 +4 0.000403922 16 +3 0.446694400 1 +4 0.000401831 17 +3 0.479474969 1 +4 0.000375148 18 +3 0.503577308 1 +4 0.000339713 19 +3 0.151622771 1 +4 0.000390220 18 +3 0.119655893 1 +4 0.000327642 28 +3 0.095751225 1 +4 0.000334422 26 +3 0.271708489 1 +4 0.000401127 25 +3 1.479669755 1 +4 0.000379663 24 +3 0.111444615 1 +4 0.000347160 25 +3 0.007708330 1 +4 0.000390990 26 +3 0.223674227 1 +4 0.000327520 28 +3 0.143656115 1 +4 0.000344246 28 +3 0.095909278 1 +4 0.000319979 29 +3 0.127422801 1 +4 0.000406591 28 +3 0.359643369 1 +4 0.000333786 28 +3 0.327801354 1 +4 0.000378689 28 +3 0.063505708 1 +4 0.000332085 28 +3 0.111747253 1 +4 0.000337853 28 +3 0.127691320 1 +4 0.000319370 28 +3 0.079634322 1 +4 0.000373251 28 +3 0.896332843 1 +4 0.000359424 28 +3 3.653371335 12 +4 0.000369213 40 +3 0.593809187 1 +4 0.000376704 28 +3 5.631641259 12 +4 0.000391907 62 +3 2.632260317 1 +4 0.000363200 27 +3 1.094876417 1 +4 0.000392616 27 +3 0.047462202 1 +4 0.000323871 27 +3 0.223743446 1 +4 0.000385249 27 +3 0.103613398 1 +4 0.000329889 27 +3 0.063570291 1 +4 0.000363991 27 +3 0.055665091 1 +4 0.000321541 29 +3 0.119674787 1 +4 0.000339864 28 +3 1.071411539 1 +4 0.110001408 33 +3 1.122489595 1 +4 0.000350324 31 +3 0.207610556 1 +4 0.000360506 28 +3 0.271567088 1 +4 0.000338646 28 +3 0.151734822 1 +4 0.000371033 28 +3 0.103646643 1 +4 0.000337889 28 +3 0.055549958 1 +4 0.000331959 28 +3 0.071686557 1 +4 0.000324418 28 +3 0.153778079 1 +4 0.000318098 28 +3 0.719215427 1 +4 0.110062736 31 +3 0.152536689 1 +4 0.000325753 17 +3 0.727619168 1 +4 0.000368041 23 +3 6.023891164 1 +4 0.000336216 22 +3 0.095570673 1 +4 0.000318568 16 +3 0.499855446 1 +4 0.000353077 18 +3 0.082638388 1 +4 0.000326471 18 +3 0.082879773 1 +4 0.000315071 17 +3 0.083689718 1 +4 0.000333563 17 +3 0.083360147 1 +4 0.000393187 18 +3 0.083148721 1 +4 0.000322239 17 +3 0.083354258 1 +4 0.000329533 17 +3 0.082806829 1 +4 0.000339056 16 +3 0.629283940 1 +4 0.000340408 11 +3 0.389693443 1 +4 0.000353240 15 +3 0.265630733 1 +4 0.000321777 17 +3 0.181760862 1 +4 0.000380341 17 +3 0.500533616 1 +4 0.000338907 17 +3 0.082780232 1 +4 0.000308097 18 +3 0.083082240 1 +4 0.000322838 17 +3 0.082938916 1 +4 0.000311577 17 +3 0.609047833 1 +4 0.000360384 19 +3 0.281657639 1 +4 0.000341025 14 +3 0.253757988 1 +4 0.000368631 57 +3 0.215391235 1 +4 0.000331700 18 +3 0.177775992 1 +4 0.000330974 18 +3 0.173604257 1 +4 0.000320234 19 +3 0.500281398 1 +4 0.000333548 20 +3 0.083166069 1 +4 0.000351326 17 +3 0.083450551 1 +4 0.000328254 16 +3 0.083462620 1 +4 0.000342748 17 +3 0.083735805 1 +4 0.000319693 20 +3 0.082628406 1 +4 0.000308331 20 +3 0.083855967 1 +4 0.000324968 20 +3 0.082664905 1 +4 0.000308269 21 +3 0.243994363 1 +4 0.000439045 20 +3 0.197383047 1 +4 0.000357385 20 +3 1.168840173 1 +4 0.000444723 20 +3 0.184593663 1 +4 0.000330398 18 +3 0.141457719 1 +4 0.000338424 17 +3 0.161879283 1 +4 0.000319779 19 +3 0.253472046 1 +3 0.106079505 1 +4 0.000355040 29 +3 0.262307417 1 +4 0.000345156 40 +3 0.499552302 1 +4 0.000327899 17 +3 0.082863917 1 +4 0.000309780 20 +3 0.083328104 1 +4 0.000316051 20 +3 0.083075176 1 +4 0.000336459 21 +3 0.083178617 1 +4 0.000301976 20 +3 0.083526705 1 +4 0.000321293 20 +3 0.082815633 1 +4 0.000309968 20 +3 0.082956521 1 +4 0.000321659 17 +3 0.082694681 1 +4 0.000314372 20 +3 0.083698296 1 +4 0.000321880 16 +3 0.286269190 1 +4 0.000394631 17 +3 0.205612385 1 +4 0.000318983 19 +3 0.439725478 1 +4 0.000417959 92 +3 0.751637278 1 +4 0.000346364 40 +3 0.263542843 1 +4 0.000348710 94 +3 0.487682780 1 +4 0.000325684 18 +3 0.169702256 1 +4 0.000326697 17 +3 0.181639480 1 +4 0.000380232 17 +3 0.185691871 1 +4 0.000319615 18 +3 0.173642179 1 +4 0.000331672 15 +3 0.185625540 1 +4 0.000348856 9 +3 3.133919522 1 +3 0.087839815 1 +4 0.000409867 29 +3 0.479718852 1 +4 0.000363015 13 +3 0.096415306 1 +4 0.000357976 16 +3 0.190844518 1 +4 0.000336645 18 +3 0.071557006 1 +4 0.000339644 17 +3 0.079679438 1 +4 0.000345309 19 +3 0.623703198 2 +4 0.000436476 28 +3 0.457657334 1 +4 0.000341136 17 +3 0.277631894 1 +3 0.056041376 1 +4 0.000334450 5 +3 0.575568521 1 +4 0.000382138 6 +3 37.135276709 1 +4 0.109949460 1 +3 0.532250295 1 +4 0.000382436 17 +3 0.487109631 1 +4 0.000347002 17 +3 0.169619784 1 +4 0.000475929 17 +3 0.365596129 1 +4 0.000336175 17 +3 0.279601149 1 +3 0.055955606 1 +4 0.000368805 43 +3 0.215822365 1 +4 0.000335052 42 +3 11.816224383 1 +4 0.000418215 20 +3 0.273365040 1 +4 0.000342733 19 +3 6.333922854 1 +4 0.000360305 20 +3 0.217709489 1 +4 0.000409785 20 +3 0.245465986 1 +4 0.000341101 20 +3 0.311678496 1 +4 0.000371672 20 +3 1.199840369 1 +3 0.159795890 1 +3 0.121940449 1 +4 0.000340981 30 +3 0.285755030 1 +4 0.000386875 109 +3 0.367693758 1 +4 0.000333904 43 +3 0.169692707 1 +4 0.000372716 18 +3 0.173550378 1 +4 0.000337946 17 +3 0.177683749 1 +4 0.000411044 17 +3 0.165552334 1 +4 0.000328781 18 +3 0.169847364 1 +4 0.000343848 17 +3 0.349475197 1 +4 0.000338459 17 +3 0.199688020 1 +3 0.048091986 1 +4 0.000373727 69 +3 0.183600558 1 +3 0.071954096 1 +4 0.000341226 69 +3 0.143583093 1 +3 0.072123557 1 +4 0.000351541 70 +3 0.143624734 1 +3 0.071961404 1 +4 0.000345451 21 +3 0.159839162 1 +3 0.055884309 1 +4 0.000407696 105 +3 0.143631378 1 +3 0.072088178 1 +4 0.000421948 4 +3 0.159495000 1 +3 0.055895829 1 +4 0.000337136 4 +3 0.167754686 1 +3 0.056028754 1 +4 0.000406078 4 +3 0.223455056 1 +3 0.031991668 1 +4 0.000387841 5 +3 0.400327077 1 +3 0.063267058 1 +4 0.000353785 4 +3 0.383868089 1 +3 0.079890355 1 +4 0.000333697 4 +3 0.455722661 1 +4 0.000398118 17 +3 0.167692715 1 +4 0.000337065 4 +3 0.383631375 1 +3 0.087948554 1 +4 0.000343360 4 +3 0.191610058 1 +3 0.056338319 1 +4 0.000357270 4 +3 0.335332459 1 +4 0.000332694 4 +3 0.191988912 1 +4 0.000388017 24 +3 0.255408656 1 +4 0.000327531 27 +3 0.311964670 1 +4 0.000329936 27 +3 0.535282635 1 +4 0.000351203 25 +3 0.647773276 2 +4 0.000455207 36 +3 0.391515669 1 +4 0.000351281 17 +3 0.169667094 1 +4 0.000405985 15 +3 0.149563591 1 +4 0.000334695 9 +3 0.441740673 1 +4 0.000380755 16 +3 0.333631683 1 +4 0.000341236 17 +3 0.263603265 1 +4 0.000353596 17 +3 0.207649137 1 +4 0.000346167 4 +3 0.145751757 1 +4 0.000332387 7 +3 0.109543845 1 +4 0.000311179 24 +3 0.183897677 1 +4 0.000328809 20 +3 0.007351151 1 +4 0.000312790 20 +3 0.129932470 1 +4 0.000339756 22 +3 0.397882668 1 +4 0.000351199 17 +3 0.191341819 1 +4 0.000365951 18 +3 0.135882881 1 +4 0.000329121 20 +3 0.143446050 1 +4 0.000319704 20 +3 0.199607207 1 +4 0.000351943 20 +3 0.167824352 1 +4 0.000315567 20 +3 0.247614467 1 +4 0.000342691 20 +3 0.055736817 1 +4 0.000307130 21 +3 0.063593990 1 +4 0.000331799 20 +3 0.015658267 1 +4 0.000312669 20 +3 0.543777302 1 +4 0.000406003 20 +3 0.757150037 1 +4 0.110005761 33 +3 8.530119335 1 +4 0.109944528 1 +3 37.460552135 1 +3 0.097390628 1 +4 0.000319727 21 +3 1.408422266 1 +4 0.000364515 16 +3 0.200914972 1 +4 0.000369363 19 +3 0.253657346 1 +4 0.000311340 20 +3 0.145663954 1 +4 0.000402758 20 +3 1.141692288 1 +3 0.144013908 1 +3 0.122031340 1 +4 0.000500023 30 +3 0.181343851 1 +4 0.000381788 118 +3 0.159761862 1 +4 0.000369254 43 +3 0.153674795 1 +4 0.000330265 18 +3 0.173816829 1 +4 0.000349210 17 +3 0.169495023 1 +4 0.000341292 17 +3 0.181618874 1 +4 0.000352165 18 +3 0.217642100 1 +4 0.000347284 17 +3 0.229581941 1 +4 0.000395292 17 +3 0.103730075 1 +3 0.080645875 1 +4 0.000334303 27 +3 0.199303016 1 +4 0.000314887 18 +3 0.095439448 1 +4 0.000409778 18 +3 0.119587852 1 +4 0.000327680 18 +3 0.103733059 1 +4 0.000326631 24 +3 0.271534140 2 +4 0.000416677 36 +3 0.159607458 1 +4 0.000328158 15 +3 0.162032829 1 +4 0.000336834 9 +3 0.909222034 1 +3 0.072113027 1 +4 0.000401278 4 +3 0.295626428 1 +3 0.055830914 1 +4 0.000342416 6 +3 0.551895662 1 +3 0.079965287 1 +4 0.000383645 7 +3 0.415814232 1 +4 0.000398259 7 +3 1.095530830 1 +4 0.000332068 24 +3 0.249480319 1 +4 0.000367411 16 +3 0.069703592 1 +4 0.000309604 17 +3 0.031736612 1 +4 0.000332510 19 +3 0.135653206 1 +4 0.000344851 19 +3 0.151760722 1 +4 0.000414377 20 +3 0.135442232 1 +4 0.000320695 19 +3 0.215735795 1 +4 0.000379862 19 +3 0.143675662 1 +4 0.000333069 19 +3 0.119611034 1 +4 0.000388026 19 +3 0.095667408 1 +4 0.000322488 19 +3 0.391754973 2 +4 0.000406533 9 +3 0.095435400 1 +4 0.000352384 1 +3 0.103698735 1 +4 0.000337172 1 +4 0.000406655 71 +3 2.807345891 1 +4 0.000352232 39 +3 0.193837807 1 +4 0.000430656 17 +3 0.277359668 1 +4 0.000492549 14 +3 0.207629890 1 +3 0.096070940 1 +4 0.000406128 21 +3 0.201357121 1 +3 0.062198393 1 +4 0.000509318 4 +3 0.647524515 1 +3 0.058847717 1 +4 0.001006521 5 +3 0.268140710 1 +4 0.000355018 9 +3 0.127573024 1 +4 0.000314944 1 +3 0.087755708 1 +4 0.000373545 1 +4 0.000733677 71 +3 25.680327100 2 +4 0.000415360 40 +3 0.500168461 1 +4 0.000345733 17 +3 0.082014980 1 +4 0.000343734 17 +3 0.082732160 1 +4 0.000308449 16 +3 0.083085216 1 +4 0.000347725 17 +3 0.083293791 1 +4 0.000335752 20 +3 0.083300563 1 +4 0.000333679 20 +3 0.082744557 1 +4 0.000336053 20 +3 0.083491280 1 +4 0.000332338 21 +3 0.379409860 1 +3 0.500660526 1 +4 0.000392326 56 +3 0.082903979 1 +3 0.083893553 1 +4 0.000359338 109 +3 0.082775650 1 +3 0.083271789 1 +4 0.000351209 50 +3 0.082798483 1 +3 0.083266529 1 +4 0.000380645 79 +3 0.083243559 1 +3 0.083454583 1 +4 0.000356844 37 +3 0.083466983 1 +3 0.083394091 1 +4 0.000347213 30 +3 0.082976787 1 +3 0.083665025 1 +4 0.000350425 46 +3 0.083447438 1 +3 0.496309135 1 +4 0.000396465 76 +3 0.413792647 1 +4 0.000332448 10 +3 0.127516669 1 +4 0.000319480 1 +3 0.135976584 1 +4 0.000330092 1 +4 0.000371342 70 +3 0.615159903 1 +4 0.000381340 37 +3 0.193423073 1 +4 0.000311446 16 +3 0.197763128 1 +4 0.000365698 16 +3 0.201717774 1 +4 0.000326641 16 +3 0.165578714 1 +4 0.000378396 16 +3 0.561741684 1 +4 0.000330516 16 +3 31.791327930 1 +4 0.000410781 16 +3 0.144878230 1 +4 0.000313374 16 +3 0.166528198 1 +4 0.000355110 16 +3 0.255128716 1 +4 0.000327253 18 +3 0.623592858 1 +4 0.000398111 56 +3 0.484581327 482 +4 0.000648644 327 +4 0.000281574 297 +3 0.474031925 2 +4 0.000390452 51 +3 0.499760537 1 +4 0.000362859 57 +3 0.147600416 1 +4 0.000328532 18 +3 0.499730413 1 +4 0.000367052 20 +3 0.082609608 1 +4 0.000308948 20 +3 0.083518076 1 +4 0.000336197 17 +3 0.083368597 1 +4 0.000363839 20 +3 0.083226698 1 +4 0.000314125 14 +3 0.083626568 1 +4 0.000320239 20 +3 0.083315917 1 +4 0.000311907 20 +3 0.082827275 1 +4 0.000348916 20 +3 0.083415597 1 +4 0.000308781 20 +3 0.084330134 1 +4 0.000372289 18 +3 0.082708926 1 +4 0.000318105 19 +3 0.083442131 1 +4 0.000309499 19 +3 0.082831846 1 +4 0.000324884 19 +3 0.083502220 1 +4 0.000310053 16 +3 0.083391652 1 +4 0.000336717 18 +3 0.312867040 1 +4 0.000343477 19 +3 0.967726339 1 +3 0.183872709 1 +3 0.114021623 1 +4 0.000351377 30 +3 0.421787047 1 +4 0.000331517 42 +3 0.177689750 1 +4 0.000331284 19 +3 0.165569011 1 +4 0.000315404 20 +3 0.649914652 1 +4 0.000356583 19 +3 0.498184093 1 +4 0.000340550 18 +3 0.083446321 1 +4 0.000323868 20 +3 0.081995170 1 +4 0.000313058 20 +3 0.083345668 1 +4 0.000321728 20 +3 0.083106825 1 +4 0.000311740 20 +3 0.083763827 1 +4 0.000342292 17 +3 0.083422989 1 +4 0.000343899 17 +3 0.083296303 1 +4 0.000382450 20 +3 0.386287427 1 +4 0.000340438 17 +3 0.303729371 1 +4 0.000390762 139 +3 1.743796971 1 +4 0.000366338 43 +3 0.249498115 1 +4 0.000349871 18 +3 0.229570730 1 +4 0.000331705 17 +3 15.760889770 1 +4 0.000409383 92 +3 0.248996787 1 +4 0.000555008 47 +3 0.237465819 1 +4 0.000370083 20 +3 0.201728425 1 +4 0.000330774 18 +3 1.597483199 1 +4 0.000359256 17 +3 0.187300351 1 +4 0.000325557 18 +3 0.196007135 1 +4 0.000402731 17 +3 0.271755807 1 +4 0.000330358 17 +3 0.135391799 1 +3 0.064279766 1 +4 0.000345506 29 +3 0.471782423 2 +4 0.000401253 29 +3 0.295480571 1 +3 0.615908125 2 +4 0.000351774 17 +3 0.423865831 1 +4 0.000414001 24 +3 0.167449862 1 +4 0.000337963 90 +3 0.143709501 1 +4 0.000399620 90 +3 0.351544993 2 +4 0.000433133 97 +3 0.175501386 1 +4 0.000364540 17 +3 0.247753373 1 +3 0.071950244 1 +4 0.000350965 29 +3 0.199788929 1 +4 0.000362167 18 +3 0.327454931 1 +4 0.000340203 18 +3 0.415799497 1 +4 0.000388320 17 +3 0.039693974 1 +4 0.000325919 18 +3 0.159589337 1 +4 0.000354441 18 +3 0.167737055 1 +4 0.000329736 18 +3 0.135529240 1 +4 0.000323341 18 +3 0.111785235 1 +4 0.000370118 18 +3 0.327533134 2 +4 0.000359409 79 +3 0.153678584 1 +4 0.000342212 17 +3 0.373732092 1 +4 0.000344131 28 +4 0.000335541 99 +3 0.607480075 1 +4 0.000421897 28 +3 0.503372723 1 +4 0.000353922 73 +3 0.231700166 1 +4 0.000387482 74 +3 0.087547841 1 +4 0.000343386 75 +3 0.967852369 1 +4 0.000357882 77 +3 0.119760772 1 +4 0.000327700 77 +3 0.495430199 2 +4 0.000409435 22 +3 1.455670962 1 +3 0.136049650 1 +4 0.000407127 9 +3 0.607658736 1 +4 0.000334196 1 +3 0.111608823 1 +4 0.000422528 138 +3 0.847566104 1 +4 0.000337607 18 +3 0.239593294 1 +4 0.000453913 13 +3 0.815744351 1 +3 0.095810438 1 +4 0.000563110 29 +3 0.335618566 1 +4 0.000473371 13 +3 0.063541474 1 +4 0.000356626 16 +3 0.127674719 1 +4 0.000572425 18 +3 0.135320159 1 +4 0.000468512 18 +3 0.167562653 1 +4 0.000349390 19 +3 0.423803062 1 +4 0.000356501 23 +3 0.151579025 1 +4 0.000365639 23 +3 0.184373685 1 +4 0.000494081 23 +3 0.166790569 1 +4 0.000351437 23 +3 0.143673253 1 +4 0.000340845 23 +3 0.143583097 1 +4 0.000329542 23 +3 1.061800155 1 +4 0.110035826 33 +3 11.230177681 1 +4 0.109894286 1 +3 0.144779688 1 +4 0.000313719 18 +3 0.499170658 1 +4 0.000355520 20 +3 0.082890827 1 +4 0.000326134 20 +3 0.082812159 1 +4 0.000353703 17 +3 0.083534823 1 +4 0.000321899 20 +3 0.083823155 1 +4 0.000328459 17 +3 0.083063504 1 +4 0.000326317 20 +3 0.082630883 1 +4 0.000349978 20 +3 0.082977332 1 +4 0.000362105 20 +3 0.082647748 1 +4 0.000538387 20 +3 0.083605349 1 +4 0.000352822 18 +3 0.083226123 1 +4 0.000341422 18 +3 0.432770428 1 +3 0.500922303 1 +4 0.000402545 55 +3 0.082605686 1 +3 0.083208646 1 +4 0.000365150 65 +3 0.083378933 1 +3 0.083849630 1 +4 0.000385798 104 +3 0.398970997 1 +3 0.438007413 1 +4 0.000393754 38 +3 6.970020862 1 +3 0.125928496 1 +4 0.000363261 36 +3 20.400806501 1 +4 0.000457508 15 +3 0.499017393 1 +4 0.000333411 16 +3 0.082977503 1 +4 0.000339093 15 +3 0.083176300 1 +4 0.000338799 15 +3 0.083177846 1 +4 0.000390102 15 +3 0.083624712 1 +4 0.000325837 18 +3 0.471595615 1 +4 0.000389240 16 +3 0.181397975 1 +4 0.000406234 16 +3 0.183472337 1 +4 0.000328933 16 +3 0.201743125 1 +4 0.000345084 16 +3 1.157743437 1 +3 0.167917005 1 +3 0.114115602 1 +4 0.000348750 29 +3 0.205470455 1 +4 0.000412451 168 +3 0.239697388 1 +4 0.000335225 41 +3 0.153641480 1 +4 0.000406105 16 +3 0.173497615 1 +4 0.000328928 16 +3 0.169690697 1 +4 0.000389667 16 +3 0.437681597 1 +4 0.000331343 18 +3 0.167688715 1 +4 0.000340679 18 +3 0.186123336 1 +4 0.000324602 17 +3 0.181070872 1 +4 0.000391565 17 +3 0.185935537 1 +4 0.000351646 17 +3 0.205541082 1 +3 0.079898558 1 +4 0.000347454 4 +3 0.183833396 1 +4 0.000350846 6 +3 0.255464528 1 +4 0.000356907 17 +3 0.103755323 1 +4 0.000338515 18 +3 0.201671821 1 +4 0.000391423 18 +3 0.149456132 1 +4 0.000311397 17 +3 0.185895976 1 +4 0.000348917 17 +3 1.766458957 1 +3 0.111748001 1 +4 0.000342213 29 +3 3.009475648 13 +4 0.000366756 50 +3 3.533449180 2 +4 0.000377710 35 +3 0.193494105 1 +4 0.000372244 20 +3 0.245805875 1 +4 0.000360129 38 +3 0.215558489 1 +4 0.000355014 19 +3 0.169780542 1 +4 0.000328647 20 +3 0.157458487 1 +4 0.000396414 17 +3 0.137650747 1 +4 0.000347145 17 +3 0.126381715 1 +4 0.000320292 17 +3 0.121045758 1 +4 0.000313152 17 +3 0.141670376 1 +4 0.000323232 17 +3 0.129670629 1 +4 0.000357552 18 +3 0.134123742 1 +4 0.000321029 16 +3 0.199272519 1 +3 0.154085494 1 +4 0.000405687 114 +3 3.414143106 1 +3 0.145794378 1 +4 0.000366336 38 +3 0.773973986 1 +4 0.000346917 9 +3 0.263659920 1 +4 0.000331238 1 +3 0.063057300 1 +4 0.000312699 1 +3 0.039609940 1 +4 0.000310816 1 +3 0.199833113 1 +4 0.000354866 1 +3 0.183408742 1 +4 0.000321901 1 +3 0.151895847 1 +4 0.000312409 1 +3 0.143668554 1 +4 0.000345163 42 +3 4.816406965 1 +4 0.000356929 17 +3 0.169107106 1 +4 0.000320840 18 +3 0.133669171 1 +4 0.000307794 17 +3 0.153798546 1 +4 0.000375121 17 +3 0.221497804 1 +3 0.080011551 1 +4 0.000339785 29 +3 0.135585549 1 +4 0.000366028 18 +3 0.416084841 1 +4 0.000345946 17 +3 0.119140269 1 +4 0.000385091 18 +3 0.071633955 1 +4 0.000339052 18 +3 0.063691059 1 +4 0.000335902 18 +3 0.199683965 1 +4 0.000337395 18 +3 0.183745149 1 +4 0.000363842 18 +3 0.055538150 1 +4 0.000354163 18 +3 0.121754583 1 +4 0.000405515 42 +3 0.221720024 2 +4 0.000341910 24 +3 0.129582201 1 +4 0.000342469 17 +3 0.237651901 1 +3 0.064652588 1 +4 0.000357747 33 +3 0.134849167 1 +4 0.000360703 19 +3 0.135710909 1 +4 0.000316010 18 +3 0.095563112 1 +4 0.000387194 18 +3 0.120230822 1 +4 0.000339029 18 +3 0.055130444 1 +4 0.000409056 18 +3 1.374432178 1 +4 0.109982395 37 +3 48.370700967 1 +4 0.109937620 1 +3 0.356890712 1 +4 0.000327038 18 +3 0.407155126 1 +4 0.000352911 24 +3 0.255744725 1 +4 0.000335455 34 +3 0.135529116 1 +4 0.000330631 33 +3 0.143803776 1 +4 0.000311379 33 +3 0.487583780 1 +4 0.000342134 33 +3 0.671346413 1 +4 0.109925140 33 +3 4.546670271 1 +3 0.143813430 1 +3 0.122041644 1 +4 0.000413285 31 +3 0.237567793 1 +4 0.000397703 174 +3 0.639827081 1 +4 0.000348563 43 +3 0.201765239 1 +4 0.000413365 18 +3 0.197467535 1 +4 0.000325038 17 +3 0.185511784 1 +4 0.000363859 17 +3 0.317787633 1 +4 0.000360147 17 +3 0.185639356 1 +4 0.000394657 17 +3 0.149574807 1 +4 0.000313383 18 +3 0.287591136 1 +3 0.088011658 1 +4 0.000363159 4 +3 0.199715538 1 +3 0.064018271 1 +4 0.000358743 4 +3 0.519699010 1 +4 0.000408737 4 +3 0.255615399 1 +4 0.000360562 17 +3 0.423601363 1 +4 0.000382063 4 +3 0.719940695 1 +4 0.000436410 17 +3 0.287256454 1 +4 0.000327343 18 +3 0.209763170 1 +4 0.000341903 17 +3 0.229558968 1 +4 0.000324724 17 +3 0.201843917 1 +4 0.000387559 18 +3 0.277373847 1 +3 0.072253667 1 +4 0.000386864 29 +3 0.135401781 1 +4 0.000369952 18 +3 0.135684962 1 +4 0.000336159 18 +3 0.079554769 1 +4 0.000345051 18 +3 0.103783530 1 +4 0.000325816 18 +3 0.071570269 1 +4 0.000316469 18 +3 0.455813369 2 +4 0.000351968 40 +3 0.359747698 1 +4 0.000331253 20 +3 0.203367315 1 +4 0.000322835 19 +3 0.180023613 1 +4 0.000341577 20 +3 0.231451705 1 +4 0.000405716 17 +3 0.185669610 1 +4 0.000339183 18 +3 0.165678940 1 +4 0.000313232 18 +3 0.146003186 1 +4 0.000311441 17 +3 0.597478758 1 +4 0.000337850 19 +3 0.201801336 1 +4 0.000318510 20 +3 0.149506466 1 +4 0.000313023 17 +3 0.162112343 1 +4 0.000351940 17 +3 0.109200955 1 +4 0.000327850 17 +3 0.137872830 1 +4 0.000333502 18 +3 0.117568342 1 +4 0.000333679 16 +3 0.311639974 1 +3 0.162003130 1 +4 0.000379755 75 +3 0.261545399 1 +3 0.122065898 1 +4 0.000456392 104 +3 0.117453068 1 +4 0.000373602 15 +3 1.409741982 1 +4 0.000446896 19 +3 0.181656097 1 +4 0.000329522 16 +3 0.169639882 1 +4 0.000373205 16 +3 0.165528402 1 +4 0.000335128 16 +3 9.040562010 1 +4 0.000370820 16 +3 0.161235472 1 +4 0.000332626 18 +3 0.157502963 1 +4 0.000419027 18 +3 0.138188933 1 +4 0.000314842 17 +3 0.157156218 1 +4 0.000379167 17 +3 0.153473962 1 +4 0.000315378 18 +3 0.133800302 1 +4 0.000388554 17 +3 0.145594867 1 +4 0.000337298 17 +3 0.277627903 1 +3 0.072079917 1 +4 0.000347425 33 +3 0.103483251 1 +4 0.000356924 19 +3 0.135734917 1 +4 0.000323910 18 +3 0.199753900 1 +4 0.000334302 17 +3 0.063635876 1 +4 0.000341138 18 +3 0.183611705 1 +4 0.000364358 18 +3 0.119829742 1 +4 0.000337920 18 +3 0.263566945 1 +4 0.000333138 18 +3 0.063997843 1 +4 0.000328836 18 +3 0.055383715 1 +4 0.000317688 18 +3 0.716639951 1 +4 0.110075430 33 +3 0.805765447 1 +4 0.000508410 17 +3 0.222761693 1 +4 0.000394105 17 +3 0.185504503 1 +4 0.000321400 18 +3 1.677965485 1 +3 0.039881330 1 +4 0.000369242 4 +3 0.199610204 1 +4 0.000347055 6 +3 5.135801847 2 +4 0.000452682 12 +3 0.288286666 1 +4 0.000394276 19 +3 0.168847062 1 +4 0.000343905 37 +3 0.501746799 1 +4 0.000419846 85 +3 0.575522020 1 +4 0.000385413 104 +3 0.279741971 1 +4 0.000389606 38 +3 0.703500287 1 +4 0.000347354 35 +3 0.367655223 1 +4 0.000440241 17 +3 0.169886001 1 +4 0.000322410 19 +3 0.165459397 1 +4 0.000343386 20 +3 0.783680443 1 +3 1.728216886 2 +4 0.000360084 18 +3 0.170121193 1 +4 0.000340091 18 +3 0.236945841 1 +4 0.000355168 17 +3 0.175714857 1 +4 0.000334692 17 +3 0.567775846 1 +4 0.000380103 17 +3 0.127481824 1 +4 0.000316456 24 +3 0.111589708 1 +4 0.000357462 22 +3 0.127897662 1 +4 0.000314507 22 +3 0.191536188 1 +4 0.000362848 22 +3 0.167705788 1 +4 0.000352659 22 +3 0.095456418 1 +4 0.000356951 22 +3 0.103850853 1 +4 0.000349034 22 +3 0.744244200 1 +4 0.000355774 17 +3 0.319046499 1 +4 0.000442546 17 +3 0.143575233 1 +4 0.000360203 17 +3 0.183669560 1 +4 0.000358766 17 +3 0.183618884 1 +4 0.000353155 17 +3 0.071676335 1 +4 0.000406601 18 +3 0.135535452 1 +4 0.000424665 17 +3 0.135675891 1 +4 0.000400942 22 +3 0.407376145 2 +4 0.000442732 36 +3 0.201778282 1 +4 0.000379741 19 +3 0.165544242 1 +4 0.000363140 20 +3 0.881872514 1 +4 0.000443857 17 +3 0.709387659 1 +4 0.000355279 17 +3 0.185624354 1 +4 0.000430600 17 +3 0.165649264 1 +4 0.000342672 18 +3 0.209736385 1 +4 0.000368710 18 +3 0.925502720 1 +3 0.103977414 1 +4 0.000346841 33 +3 3.192451814 1 +4 0.000363895 19 +3 0.126932545 1 +4 0.000319243 18 +3 0.199693950 1 +4 0.000339547 17 +3 0.111660863 1 +4 0.000331957 18 +3 0.247850101 1 +4 0.000338948 18 +3 0.175556736 1 +4 0.000389250 18 +3 0.231664064 1 +4 0.000337667 18 +3 0.071549899 1 +4 0.000315591 18 +3 0.071706185 1 +4 0.000309370 18 +3 0.375803703 2 +4 0.000395729 10 +3 0.127643695 1 +4 0.000307878 1 +3 0.071834668 1 +4 0.000355001 1 +4 0.000417061 71 +3 0.375146422 1 +4 0.000339288 39 +3 0.151503993 1 +4 0.000321562 17 +3 0.169772264 1 +4 0.000325145 18 +3 1.045757585 1 +3 0.095851424 1 +4 0.000379875 21 +3 0.167626919 1 +4 0.000353220 6 +3 1.975821698 1 +4 0.000408611 17 +3 0.177503624 1 +4 0.000334285 19 +3 0.173754324 1 +4 0.000328232 20 +3 0.703659513 1 +4 0.000322992 17 +3 0.456054539 1 +4 0.000342364 4 +3 0.169341293 1 +4 0.000360693 4 +3 0.141649340 1 +4 0.000346621 7 +3 4.439967084 1 +4 0.000355890 20 +3 0.185564983 1 +4 0.000336582 21 +3 0.181527451 1 +4 0.000375780 21 +3 0.185605030 1 +4 0.000333384 20 +3 0.133758247 1 +4 0.000319822 19 +3 1.890366705 1 +4 0.000424785 20 +3 0.268973084 1 +4 0.000383056 17 +3 0.135742214 1 +4 0.000324542 17 +3 0.185611026 1 +4 0.000329502 17 +3 0.157585660 1 +4 0.000319498 18 +3 0.137843567 1 +4 0.000322983 18 +3 0.421548220 1 +4 0.000347243 18 +3 0.167696564 1 +4 0.000363056 31 +3 0.183842979 1 +4 0.000363409 28 +3 0.543684667 1 +4 0.000396383 17 +3 0.199383764 1 +4 0.000354674 18 +3 3.312107842 15 +4 0.000361784 43 +3 0.575321321 2 +4 0.000410440 33 +3 0.193579312 1 +4 0.000343675 20 +3 0.165802683 1 +4 0.000390893 20 +3 0.155701490 1 +4 0.000336779 21 +3 0.155391198 1 +4 0.000442939 19 +3 0.192317929 1 +3 0.167344553 1 +3 0.153916527 1 +4 0.000442250 57 +3 1.965674558 1 +4 0.000451457 40 +3 0.499764594 1 +4 0.000396980 15 +3 0.082979766 1 +4 0.000325901 15 +3 0.083061258 1 +4 0.000394347 15 +3 0.082997320 1 +4 0.000349944 15 +3 0.082916734 1 +4 0.000353710 15 +3 0.082907630 1 +4 0.000321255 15 +3 0.084252453 1 +4 0.000385319 77 +3 0.082080906 1 +4 0.000348032 78 +3 0.082745791 1 +4 0.000444184 72 +3 0.082981982 1 +4 0.000346113 36 +3 0.083731417 1 +4 0.000385605 46 +3 0.082942554 1 +4 0.000378678 100 +3 0.083760268 1 +4 0.000439603 88 +3 0.082953919 1 +4 0.000360369 44 +3 0.174291698 1 +4 0.000337277 15 +3 0.500579794 1 +4 0.000402079 15 +3 0.083593537 1 +4 0.000343839 15 +3 0.083042831 1 +4 0.000330159 17 +3 0.083311131 1 +4 0.000383417 17 +3 0.083070405 1 +4 0.000322192 15 +3 0.082817202 1 +4 0.000324962 16 +3 0.082955668 1 +4 0.000352557 15 +3 0.551931053 1 +4 0.000422846 16 +3 2.029544042 1 +4 0.000380646 53 +3 0.263684538 1 +4 0.000403640 36 +3 1.071617388 2 +4 0.000404052 120 +3 0.879674421 1 +4 0.000392763 41 +3 0.500303514 1 +4 0.000344169 16 +3 0.084517571 1 +4 0.000383004 16 +3 0.081634254 1 +4 0.000357732 16 +3 1.142049302 1 +4 0.000390219 16 +3 0.221699701 1 +4 0.000424641 16 +3 0.521657225 1 +4 0.000350753 16 +3 0.581563664 1 +4 0.000367152 17 +3 0.257531636 1 +4 0.000395919 16 +3 0.229855554 1 +4 0.000345921 16 +3 0.499956178 1 +4 0.000387651 16 +3 0.083525574 1 +4 0.000328273 16 +3 0.083559651 1 +4 0.000448435 92 +3 0.082634412 1 +4 0.000371538 44 +3 0.084196617 1 +4 0.000374507 34 +3 0.082463247 1 +4 0.000368721 54 +3 0.225010916 1 +4 0.000343039 16 +3 0.217584858 1 +4 0.000343449 18 +3 0.165678539 1 +4 0.000323934 16 +3 0.521585543 1 +4 0.000374796 16 +3 1.421720860 1 +4 0.000342931 16 +3 0.623662268 1 +4 0.000356870 16 +3 0.415818209 1 +4 0.000338788 16 +3 0.185610370 1 +4 0.000327341 16 +3 56.863558864 2 +4 0.000372835 17 +3 0.500188793 1 +4 0.000338762 16 +3 0.082791915 1 +4 0.000373587 16 +3 0.082892994 1 +4 0.000310608 16 +3 0.083644957 1 +4 0.000323414 16 +3 0.082564517 1 +4 0.000316353 16 +3 0.082823382 1 +4 0.000327113 17 +3 0.420762239 1 +4 0.000341057 16 +3 0.725683280 1 +4 0.000347385 16 +3 0.169601783 1 +4 0.000349340 17 +3 0.149560568 1 +4 0.000310762 16 +3 0.296088444 1 +4 0.000367454 52 +3 0.111316743 1 +4 0.000342702 16 +3 0.159628313 1 +4 0.000317998 16 +3 0.487871378 1 +4 0.000351865 17 +3 0.015419206 1 +4 0.000327941 17 +3 0.183829312 1 +4 0.000369127 17 +3 1.016087062 1 +4 0.000342832 14 +3 0.359359352 1 +4 0.000348427 20 +3 0.015437651 1 +4 0.000321955 18 +3 0.159885333 1 +4 0.000340734 16 +3 0.671697063 1 +4 0.000354526 16 +3 0.271587848 1 +4 0.000326924 20 +3 0.247596505 1 +4 0.000360905 14 +3 0.167722031 1 +4 0.000326457 1 +3 0.224174607 1 +4 0.000419383 16 +3 0.215153787 1 +4 0.000333891 16 +3 0.391504699 1 +4 0.000333100 19 +3 0.103595519 1 +4 0.000394378 17 +3 0.279805680 1 +4 0.000404785 18 +3 0.159573060 1 +4 0.000390699 18 +3 0.095574834 1 +4 0.000331628 18 +3 0.111597223 1 +4 0.000318922 17 +3 0.135793057 1 +4 0.000363708 18 +3 0.087540509 1 +4 0.000336322 17 +3 0.159752029 1 +4 0.000390604 18 +3 0.087611800 1 +4 0.000383487 18 +3 0.056742351 1 +4 0.000465323 19 +3 0.104304822 1 +4 0.000356671 18 +3 0.085617326 1 +4 0.000358310 18 +3 0.071768679 1 +4 0.000304527 18 +3 0.087588588 1 +4 0.000401929 18 +3 0.095604151 1 +4 0.000315903 17 +3 0.103694046 1 +4 0.000346116 18 +3 0.087606667 1 +4 0.000375860 18 +3 0.079815608 1 +4 0.000340996 18 +3 0.232588017 1 +4 0.000325128 18 +3 0.254726895 1 +4 0.000353367 19 +3 0.111576060 1 +4 0.000339386 18 +3 0.095602835 1 +4 0.000339095 18 +3 0.103790138 1 +4 0.000339718 18 +3 0.087671506 1 +4 0.000415849 18 +3 0.985995502 1 +4 0.110005593 33 +3 2.607663495 1 +4 0.000374918 19 +3 0.225767927 1 +4 0.000345812 21 +3 0.277624993 1 +4 0.000404794 17 +3 0.407409999 1 +4 0.000343714 17 +3 0.201843922 1 +4 0.000373062 20 +3 0.173597223 1 +4 0.000400054 20 +3 0.185479258 1 +4 0.000322413 17 +3 0.717710421 1 +4 0.000344428 17 +3 0.209787831 1 +4 0.000395843 17 +3 0.525563477 1 +4 0.000337454 31 +3 0.479842633 1 +4 0.000379006 54 +3 0.143380297 1 +4 0.000333983 53 +3 0.047700484 1 +4 0.000405173 53 +3 0.143889187 1 +4 0.000341593 53 +3 0.055310108 1 +4 0.000335033 53 +3 0.223859077 1 +4 0.000345699 49 +3 0.367648069 2 +4 0.000413740 34 +3 0.201608958 1 +4 0.000355101 19 +3 1.117664776 1 +4 0.000363813 21 +3 0.201520385 1 +4 0.000366371 17 +3 0.525715747 1 +3 0.216059662 1 +3 0.139194879 1 +4 0.000420538 177 +3 0.980364282 1 +4 0.000359846 10 +3 0.143577346 1 +4 0.000324217 1 +3 0.103734730 1 +4 0.000388367 1 +4 0.000325011 70 +3 34.000539382 2 +4 0.000409555 38 +3 0.170109040 1 +4 0.000332830 17 +3 0.133255641 1 +4 0.000337807 16 +3 0.161597428 1 +4 0.000350663 16 +3 0.117553372 1 +4 0.000335532 16 +3 0.145851410 1 +4 0.000366825 16 +3 0.557738013 1 +4 0.000375498 54 +3 0.503544954 1 +4 0.000354412 35 +3 0.196026505 312 +4 0.000580006 327 +4 0.000364241 109 +3 0.482383695 2 +4 0.000418500 36 +3 0.225817667 1 +4 0.000331601 14 +3 0.149639782 1 +4 0.000322562 20 +3 0.399640121 1 +4 0.000352179 14 +3 0.185857789 1 +4 0.000364838 21 +3 0.133867146 1 +4 0.000362586 10 +3 0.255247637 1 +3 0.138165075 1 +4 0.000359884 38 +3 0.325583677 1 +4 0.000355319 14 +3 0.500205808 1 +4 0.000355091 15 +3 0.083618019 1 +4 0.000398399 14 +3 0.087175131 1 +4 0.000318895 14 +3 0.185452694 1 +4 0.000374563 15 +3 0.157599866 1 +4 0.000323648 14 +3 0.153792848 1 +4 0.000368093 14 +3 0.125478695 1 +4 0.000318600 14 +3 0.153909002 1 +4 0.000408088 14 +3 0.117457249 1 +4 0.000342417 18 +3 0.500068003 1 +4 0.000349528 16 +3 0.082970902 1 +4 0.000324961 16 +3 0.083438608 1 +4 0.000341588 16 +3 0.083172836 1 +4 0.000363292 16 +3 0.083089491 1 +4 0.000389105 17 +3 0.863300330 1 +4 0.000378973 15 +3 0.285475036 1 +4 0.000375948 15 +3 0.256278631 1 +4 0.000584535 894 +3 0.446763867 1 +4 0.000404832 16 +3 0.500276476 1 +4 0.000363390 16 +3 0.083456225 1 +4 0.000336862 17 +3 0.082927433 1 +4 0.000328319 16 +3 0.083688812 1 +4 0.000339892 16 +3 0.082802915 1 +4 0.000358656 18 +3 0.082716245 1 +4 0.000348332 16 +3 0.082738342 1 +4 0.000357387 16 +3 0.083145079 1 +4 0.000328128 16 +3 0.082874154 1 +4 0.000322745 16 +3 0.083506173 1 +4 0.000314595 16 +3 0.082634175 1 +4 0.000309010 16 +3 0.113315995 1 +4 0.000351674 18 +3 2.711790189 1 +3 0.121811708 1 +4 0.000342354 30 +3 1.350780677 1 +4 0.000484288 43 +3 0.499582593 1 +4 0.000364018 17 +3 0.082898191 1 +4 0.000411469 19 +3 0.082727601 1 +4 0.000316052 20 +3 0.083071661 1 +4 0.000344978 17 +3 0.083232812 1 +4 0.000314568 19 +3 0.082802022 1 +4 0.000650484 16 +3 0.082775725 1 +4 0.000390980 20 +3 0.082924623 1 +4 0.000372701 17 +3 0.082767449 1 +4 0.000413153 18 +3 0.082665069 1 +4 0.000335966 19 +3 0.083807830 1 +4 0.000323808 20 +3 0.082809994 1 +4 0.000442159 97 +3 0.083449431 1 +4 0.000360868 47 +3 0.082590256 1 +4 0.000410985 119 +3 0.083417111 1 +4 0.000363701 110 +3 0.082967041 1 +4 0.000441623 47 +3 0.083131456 1 +4 0.000353412 72 +3 0.083159443 1 +4 0.000398348 115 +3 0.082743335 1 +4 0.000361302 87 +3 0.173665158 1 +4 0.000346653 18 +3 0.500511599 1 +4 0.000381397 17 +3 0.082614069 1 +4 0.000344279 19 +3 0.083045344 1 +4 0.000389864 20 +3 0.083123871 1 +4 0.000325308 17 +3 0.083441137 1 +4 0.000311326 19 +3 0.083141430 1 +4 0.000396549 20 +3 0.082617036 1 +4 0.000319848 17 +3 0.083321903 1 +4 0.000365649 19 +3 0.082906019 1 +4 0.000325418 20 +3 0.083867395 1 +4 0.000387734 18 +3 0.082253100 1 +4 0.000327111 17 +3 5.209306135 1 +4 0.000356936 17 +3 0.499498038 1 +4 0.000338429 18 +3 0.083248941 1 +4 0.000349050 19 +3 0.082998680 1 +4 0.000338105 20 +3 0.083409580 1 +4 0.000370794 17 +3 0.248980850 1 +4 0.000336665 17 +3 0.500064336 1 +4 0.000378903 19 +3 0.083450003 1 +4 0.000327997 20 +3 0.083058283 1 +4 0.000348129 18 +3 0.342141965 1 +4 0.000344336 17 +3 2.309742734 1 +4 0.000361916 32 +3 0.023594273 1 +4 0.000341553 17 +3 0.455682228 1 +4 0.000391532 19 +3 0.239511887 1 +4 0.000330122 18 +3 0.095768258 1 +4 0.000318396 18 +3 0.191721877 1 +4 0.000330911 18 +3 0.071563823 1 +4 0.000317252 18 +3 0.055776677 1 +4 0.000334562 18 +3 0.239666474 1 +4 0.000316451 36 +3 0.359606042 2 +3 0.130090139 1 +4 0.000333990 30 +3 0.277709067 1 +4 0.000407820 43 +3 0.499829756 1 +4 0.000372602 21 +3 0.083237824 1 +4 0.000358203 19 +3 0.082780471 1 +4 0.000314001 20 +3 0.083331423 1 +4 0.000364130 20 +3 0.082893794 1 +4 0.000313460 19 +3 0.241005525 1 +4 0.000560889 16 +3 0.172332582 1 +4 0.000362109 17 +3 0.161543688 1 +4 0.000383005 19 +3 0.141590926 1 +4 0.000316806 20 +3 0.831752554 1 +4 0.000452418 173 +3 0.431577690 1 +4 0.000357268 112 +3 0.255558635 2 +4 0.000368567 34 +3 0.153660452 1 +4 0.000311132 17 +3 0.181775527 1 +4 0.000403350 114 +3 0.161501956 1 +4 0.000406326 85 +3 0.157630278 1 +4 0.000440968 44 +3 0.175647759 1 +4 0.000337343 16 +3 0.169626426 1 +4 0.000363192 16 +3 0.157530000 1 +4 0.000394097 16 +3 0.145792064 1 +4 0.000346868 17 +3 0.341531021 1 +4 0.000334808 14 +3 0.295732817 1 +4 0.000407270 14 +3 2.871705613 1 +3 0.095882751 1 +4 0.000343000 29 +3 0.231720463 1 +4 0.000344213 18 +3 0.119827603 1 +4 0.000329884 16 +3 0.111545685 1 +4 0.000376956 13 +3 0.087503250 1 +4 0.000330464 11 +3 0.343792660 2 +4 0.000351276 41 +3 0.500314061 1 +4 0.000349806 16 +3 0.083047818 1 +4 0.000333175 12 +3 0.082653704 1 +4 0.000318647 17 +3 0.083646378 1 +4 0.000379608 93 +3 0.082873806 1 +4 0.000389031 88 +3 0.083588092 1 +4 0.000348052 47 +3 0.082953785 1 +4 0.000418760 34 +3 0.083057976 1 +4 0.000363325 83 +3 0.082940781 1 +4 0.000363256 87 +3 0.083293536 1 +4 0.000377127 87 +3 0.082681683 1 +4 0.000362138 87 +3 0.272565953 1 +4 0.000435778 17 +3 0.499770637 1 +4 0.000340514 17 +3 0.083160135 1 +4 0.000358875 18 +3 0.082910009 1 +4 0.000334212 14 +3 0.083181014 1 +4 0.000344586 18 +3 0.083669914 1 +4 0.000373685 20 +3 0.082643920 1 +4 0.000399210 17 +3 0.083361848 1 +4 0.000346453 19 +3 0.082790860 1 +4 0.000341810 20 +3 0.083299434 1 +4 0.000312008 17 +3 0.083016580 1 +4 0.000347551 19 +3 0.082919542 1 +4 0.000314294 20 +3 0.313175103 1 +3 0.146080553 1 +4 0.000344070 30 +3 0.229642077 1 +4 0.000339589 43 +3 0.137635985 1 +4 0.000326642 19 +3 0.133717887 1 +4 0.000321032 17 +3 0.145653934 1 +4 0.000369265 19 +3 0.133492222 1 +4 0.000312544 20 +3 0.137737194 1 +4 0.000321177 17 +3 0.117801793 1 +4 0.000333762 19 +3 0.343597995 1 +4 0.000380476 85 +3 0.287646986 1 +4 0.000361537 52 +3 0.231510696 2 +4 0.000336455 34 +3 0.175869250 1 +4 0.000383886 15 +3 0.119538844 1 +4 0.000334277 13 +3 0.351730609 1 +3 0.095873721 1 +4 0.000372055 28 +3 0.175831831 1 +4 0.000360643 18 +3 0.151492854 1 +4 0.000393452 16 +3 0.087491223 1 +4 0.000345820 13 +3 0.121899184 1 +4 0.000363901 11 +3 0.197590595 1 +4 0.000350851 13 +3 0.008260737 1 +4 0.000353771 16 +3 0.127012728 1 +4 0.000339277 17 +3 0.327792032 1 +4 0.000381745 14 +3 0.123116629 1 +4 0.000374609 11 +3 0.236049131 1 +4 0.000386290 13 +3 0.047514475 1 +4 0.000406455 13 +3 0.263703469 2 +4 0.000370569 33 +3 0.500296560 1 +4 0.000360875 20 +3 0.082780693 1 +4 0.000416335 12 +3 0.082633911 1 +4 0.000381199 84 +3 0.083575166 1 +4 0.000418162 86 +3 0.082666881 1 +4 0.000376174 81 +3 0.083380645 1 +4 0.000371076 94 +3 0.083205627 1 +4 0.000371207 35 +3 0.082737781 1 +4 0.000481356 56 +3 0.083041576 1 +4 0.000423818 72 +3 0.071806079 1 +4 0.000339931 19 +3 0.500183823 1 +4 0.000385364 17 +3 0.082827724 1 +4 0.000353565 17 +3 0.083656119 1 +4 0.000341832 20 +3 0.082794864 1 +4 0.000338655 14 +3 0.083175690 1 +4 0.000316477 20 +3 0.082761809 1 +4 0.000403365 20 +3 0.082924047 1 +4 0.000317314 20 +3 0.082885107 1 +4 0.000347656 19 +3 0.082790687 1 +4 0.000331263 20 +3 0.083246887 1 +4 0.000326722 18 +3 0.083814619 1 +4 0.000331605 18 +3 0.082931200 1 +4 0.000331613 20 +3 0.083060683 1 +4 0.000378291 16 +3 0.083759840 1 +4 0.000322280 18 +3 0.083622004 1 +4 0.000361180 19 +3 0.308971204 1 +4 0.000319377 16 +3 0.868939444 1 +3 0.103877213 1 +3 0.105874567 1 +4 0.000334379 30 +3 0.261832718 1 +4 0.000348964 42 +3 0.161559851 1 +4 0.000366215 18 +3 0.149614795 1 +4 0.000344224 19 +3 0.137701948 1 +4 0.000358859 17 +3 0.125690550 1 +4 0.000337707 19 +3 0.137576502 1 +4 0.000322554 17 +3 0.214943184 1 +4 0.000355615 20 +3 0.262553259 1 +4 0.000392429 177 +3 0.879507130 1 +4 0.000382009 43 +3 0.499698962 1 +4 0.000356425 18 +3 0.082880019 1 +4 0.000346907 17 +3 0.626329712 1 +4 0.000359114 17 +3 0.197623254 1 +4 0.000329710 18 +3 0.185875211 1 +4 0.000351555 17 +3 0.989598679 1 +4 0.000360673 17 +3 11.816695526 1 +3 0.079221270 1 +4 0.000364779 29 +3 0.271784652 1 +4 0.000358693 18 +3 0.103629336 1 +4 0.000396262 18 +3 0.136661000 1 +4 0.000355047 18 +3 0.136461950 1 +4 0.000346455 18 +3 0.109841872 1 +4 0.000366960 18 +3 0.063581292 1 +4 0.000463782 18 +3 0.583768705 2 +4 0.000388785 28 +3 0.121456522 1 +4 0.000369572 17 +3 0.229573850 1 +3 0.080078948 1 +4 0.000376905 29 +3 0.168466698 1 +4 0.000367279 18 +3 0.086775728 1 +4 0.000376735 19 +3 0.143609462 1 +4 0.000386832 18 +3 0.087614344 1 +4 0.000364885 18 +3 0.191548043 1 +4 0.000456479 18 +3 0.135645856 1 +4 0.000381937 54 +3 0.047636999 1 +4 0.000359263 54 +3 0.215682793 1 +4 0.000375939 95 +3 0.600259093 2 +4 0.000518686 36 +7 0.000524969 TSTP +7 0.934500773 CONT +4 0.000608780 7 +4 0.000283100 902 +3 12.831529799 2 +4 0.000406864 19 +3 0.193942526 1 +4 0.000331562 19 +3 0.141002438 1 +4 0.000349896 16 +3 0.154083839 1 +4 0.000318132 20 +3 0.269538392 1 +3 0.137867205 1 +4 0.000367111 97 +3 2.573897292 1 +3 0.121815978 1 +4 0.000423477 30 +3 0.125502227 1 +4 0.000342705 14 +3 0.177671569 1 +4 0.000392414 18 +3 0.165702251 1 +4 0.000355251 16 +3 0.161611438 1 +4 0.000358127 17 +3 0.157739165 1 +4 0.000399045 16 +3 0.201530843 1 +4 0.000385973 18 +3 0.181540334 1 +4 0.000344512 18 +3 0.177678136 1 +4 0.000372884 17 +3 0.133790538 1 +4 0.000328319 17 +3 0.177633734 1 +4 0.000381932 18 +3 0.134352460 1 +4 0.000326386 17 +3 0.144902210 1 +4 0.000422863 17 +3 0.149559996 1 +4 0.000338509 18 +3 0.153694128 1 +4 0.000338244 17 +3 4.206426919 1 +3 0.103717321 1 +4 0.000360936 33 +3 0.619710519 16 +4 0.000530304 67 +3 0.822678487 1 +4 0.110011343 33 +3 2.430491651 1 +4 0.000383286 17 +3 0.489593323 1 +4 0.000336921 17 +3 0.261771486 1 +3 0.055956088 1 +4 0.000425498 30 +3 1.317893619 6 +4 0.000381459 24 +3 0.513259308 2 +4 0.000379054 53 +3 0.251556729 6 +4 0.000429874 6 +3 0.123850490 1 +4 0.000376758 43 +3 0.455590257 1 +4 0.000373481 17 +3 0.009327020 1 +4 0.000336126 18 +3 0.895963662 1 +4 0.000447140 18 +3 0.589748576 1 +3 0.071809754 1 +4 0.000350926 4 +3 0.199565306 1 +4 0.000413549 4 +3 0.319747540 1 +4 0.000350618 17 +3 0.201699161 1 +4 0.000347274 18 +3 1.549587898 1 +4 0.000352369 18 +3 0.177712722 1 +4 0.000339430 19 +3 0.149611635 1 +4 0.000330970 16 +3 0.145801068 1 +4 0.000337969 20 +3 0.317648862 1 +4 0.000421408 15 +4 0.018480285 86 +3 0.485114517 1 +4 0.000499266 39 +3 0.201386408 1 +4 0.000462504 18 +3 0.189506678 1 +4 0.000355374 16 +3 0.170158573 1 +4 0.000436753 17 +3 0.965253218 1 +4 0.000369171 17 +3 0.185558447 1 +4 0.000345242 16 +3 0.149548076 1 +4 0.000345254 16 +3 0.155337511 1 +4 0.000346110 14 +3 0.332079954 1 +3 0.153896742 1 +4 0.000394003 65 +3 0.189619752 1 +4 0.000359015 14 +3 0.201770281 1 +4 0.000322599 18 +3 0.165592397 1 +4 0.000371551 16 +3 0.169598000 1 +4 0.000372484 17 +3 0.141619226 1 +4 0.000426226 16 +3 0.499911586 1 +4 0.000358731 18 +3 0.083382753 1 +4 0.000369646 18 +3 0.082957105 1 +4 0.000327406 17 +3 0.082715862 1 +4 0.000349219 17 +3 0.082762668 1 +4 0.000334275 18 +3 0.083555638 1 +4 0.000430642 17 +3 0.083462271 1 +4 0.000330495 18 +3 0.083430157 1 +4 0.000377314 18 +3 0.083701151 1 +4 0.000322508 17 +3 0.494763645 1 +4 0.000433546 18 +3 0.215492413 1 +4 0.000384989 31 +3 0.815854569 1 +4 0.000391280 28 +3 0.583465415 1 +4 0.000394001 17 +3 0.591890813 1 +4 0.000386881 18 +3 67.177561192 2 +4 0.105917815 49 +3 0.038088666 1 +4 0.000352776 17 +3 0.199862087 1 +4 0.000339868 16 +3 0.151309765 1 +4 0.000355404 17 +3 0.320348551 1 +4 0.000358010 16 +3 0.185209753 1 +4 0.000413594 16 +3 0.125500032 1 +4 0.000329879 15 +3 0.464186187 1 +4 0.000389574 19 +3 0.143198480 1 +4 0.000386303 16 +3 0.335490147 1 +4 0.000343078 19 +3 0.127700355 1 +4 0.000331710 17 +3 0.119411202 1 +4 0.000343321 18 +3 0.167759692 1 +4 0.000375966 18 +3 0.119802854 1 +4 0.000354809 18 +3 0.119509308 1 +4 0.000324820 17 +3 0.143667106 1 +4 0.000382790 18 +3 0.103673680 1 +4 0.000335793 17 +3 0.135643969 1 +4 0.000340830 18 +3 0.119781457 1 +4 0.000414540 18 +3 0.151559279 1 +4 0.000376428 19 +3 0.103502352 1 +4 0.000343095 18 +3 0.327918937 1 +4 0.000369007 18 +3 0.191386211 1 +4 0.000323451 18 +3 0.055833584 1 +4 0.000339316 18 +3 0.183497133 1 +4 0.000341701 18 +3 2.759884215 1 +4 0.000353817 17 +3 1.343698374 1 +4 0.000398678 18 +3 0.263597194 1 +4 0.000351283 18 +3 0.136171086 1 +4 0.000323570 18 +3 0.383311119 1 +4 0.000368396 17 +3 0.129580242 1 +4 0.000326319 17 +3 0.125535686 1 +4 0.000356268 18 +3 0.119521654 1 +4 0.000334366 17 +3 0.071742130 1 +4 0.000373644 19 +3 0.103629767 1 +4 0.000352929 17 +3 0.143690325 1 +4 0.000332635 18 +3 0.111666624 1 +4 0.000331586 18 +3 0.087678783 1 +4 0.000335957 17 +3 0.087739242 1 +4 0.000345426 18 +3 0.087665513 1 +4 0.000329670 18 +3 0.135534046 1 +4 0.000408805 18 +3 0.063614214 1 +4 0.000326288 17 +3 0.503854866 1 +4 0.000386003 18 +3 0.079473988 1 +4 0.000341047 19 +3 0.007840380 1 +4 0.000339496 18 +3 0.183870771 1 +4 0.000329080 18 +3 0.063320318 1 +4 0.000322379 18 +3 0.135725119 1 +4 0.000358219 18 +3 0.111524351 1 +4 0.000343725 18 +3 0.359700050 2 +4 0.000378278 37 +3 0.343740597 1 +4 0.000348623 18 +3 0.185974011 1 +4 0.000324519 17 +3 0.221497352 1 +4 0.000348255 18 +3 61.266181291 1 +4 0.000354372 31 +3 0.551303471 1 +4 0.000368484 29 +3 0.599410219 1 +4 0.000400874 29 +3 0.127552920 1 +4 0.000362578 29 +3 0.071716928 1 +4 0.000344303 29 +3 0.087544652 1 +4 0.000340316 29 +3 0.722100185 1 +4 0.110021264 31 +3 20.680890782 1 +4 0.000373634 20 +3 0.185089699 1 +4 0.000362602 19 +3 0.165544295 1 +4 0.000352237 16 +3 0.257714646 1 +4 0.000382170 17 +3 4.566358379 1 +3 0.169459880 1 +4 0.000375644 75 +3 0.190699375 1 +3 0.152920201 1 +4 0.000380041 106 +3 0.205688285 1 +3 0.154039503 1 +4 0.000492548 38 +3 0.189318760 1 +3 0.124691703 1 +4 0.000364730 47 +3 1.411224968 1 +4 0.000369994 9 +3 0.167522151 1 +4 0.000349130 1 +3 0.143891438 1 +4 0.000383205 1 +4 0.000545951 10 +4 0.000360470 60 +3 1.470625810 1 +4 0.000386167 35 +3 0.153570765 1 +4 0.000350691 18 +3 0.149620068 1 +4 0.000365596 16 +3 0.137623239 1 +4 0.000387301 16 +3 0.149520210 1 +4 0.000415206 17 +3 0.151625465 1 +4 0.000371854 28 +3 0.080573318 1 +4 0.000357410 17 +3 0.110579480 1 +4 0.000325456 18 +3 0.239863880 1 +4 0.000385086 18 +3 0.183564586 1 +4 0.000366174 18 +3 0.087765549 1 +4 0.000427781 19 +3 0.239509128 1 +4 0.000346854 18 +3 0.007633165 1 +4 0.000373394 18 +3 0.087639180 1 +4 0.000337988 18 +3 0.319775512 1 +4 0.000505715 17 +3 0.161491658 1 +4 0.000352871 17 +3 0.085589099 1 +4 0.000370120 17 +3 0.184838360 1 +4 0.000409714 18 +3 0.094224328 1 +4 0.000370512 18 +3 0.047660818 1 +4 0.000328388 18 +3 0.111610547 1 +4 0.000404627 18 +3 0.055751577 1 +4 0.000325479 18 +3 0.127599689 1 +4 0.000375926 18 +3 0.071769878 1 +4 0.000327629 18 +3 0.087684664 1 +4 0.000416728 17 +3 0.111457791 1 +4 0.000327898 18 +3 0.087812327 1 +4 0.000351461 19 +3 0.055612649 1 +4 0.000328030 18 +3 0.072130867 1 +4 0.000369877 18 +3 0.167161278 1 +4 0.000329555 18 +3 0.087618415 1 +4 0.000413663 18 +3 0.063484181 1 +4 0.000352491 17 +3 0.567916037 1 +4 0.000387987 18 +3 0.103339604 1 +4 0.000330244 18 +3 0.103795367 1 +4 0.000370998 18 +3 0.095640338 1 +4 0.000342275 17 +3 1.007620119 1 +4 0.000417762 19 +3 0.063692281 1 +4 0.000343725 18 +3 0.193859611 1 +4 0.000369170 18 +3 0.085516875 1 +4 0.000350647 18 +3 0.111527754 1 +4 0.000404490 18 +3 0.639826877 1 +4 0.000376295 18 +3 0.135447001 1 +4 0.000358152 18 +3 0.239822952 1 +4 0.000348368 17 +3 0.138692136 1 +4 0.000337824 17 +3 0.220537966 1 +4 0.000384335 18 +3 0.063512962 1 +4 0.000341670 18 +3 0.135704602 1 +4 0.000330981 18 +3 0.327799432 1 +4 0.000380412 36 +4 0.705157028 18 +3 0.019950283 1 +4 0.110054367 29 +3 2.316470417 1 +4 0.000419398 10 +3 0.095529461 1 +4 0.000330058 1 +3 0.111813412 1 +4 0.000463456 1 +4 0.000412210 71 +3 2.943675520 1 +4 0.000400463 39 +3 2.063298340 1 +4 0.000355686 19 +3 0.185555546 1 +4 0.000362504 18 +3 0.165455731 1 +4 0.000345161 20 +3 0.153747794 1 +4 0.000330354 19 +3 0.301780484 1 +4 0.000382464 20 +3 0.177433698 1 +4 0.000348824 20 +3 0.133755788 1 +4 0.000339111 18 +3 0.233597558 1 +4 0.000335806 19 +3 0.773747586 1 +3 0.272072108 1 +3 0.113925233 1 +4 0.000355719 31 +3 0.237636070 1 +4 0.000413470 284 +3 0.223648251 1 +4 0.000386499 41 +3 0.161577638 1 +4 0.000347935 17 +3 0.141694835 1 +4 0.000323027 16 +3 0.161769830 1 +4 0.000321395 16 +3 0.133603573 1 +4 0.000358816 16 +3 0.129628258 1 +4 0.000324973 18 +3 15.158245983 2 +4 0.000381351 17 +3 0.144128400 1 +4 0.000402588 17 +3 0.311178227 1 +3 0.071831442 1 +4 0.000370743 29 +3 0.215685324 1 +4 0.000337607 18 +3 0.127651179 1 +4 0.000407826 17 +3 0.087480453 1 +4 0.000371903 13 +3 0.079895733 1 +4 0.000341664 11 +3 0.175686154 1 +4 0.000346960 11 +3 0.183434115 1 +4 0.000425501 13 +3 0.183686290 1 +4 0.000371790 16 +3 0.119704637 1 +4 0.000422827 19 +3 0.658458051 1 +4 0.110009419 33 +3 4.095778374 1 +4 0.000412939 17 +3 0.499871945 1 +4 0.000365514 17 +3 0.083258950 1 +4 0.000457382 17 +3 0.083555168 1 +4 0.000333139 19 +3 0.082757480 1 +4 0.000427081 34 +3 0.082955737 1 +4 0.000369778 57 +3 0.083140434 1 +4 0.000400397 72 +3 0.168959595 1 +4 0.000427643 19 +3 0.500214531 1 +4 0.000366360 18 +3 0.082637030 1 +4 0.000321226 18 +3 0.083382411 1 +4 0.000321180 18 +3 0.083317085 1 +4 0.000352069 17 +3 0.083060249 1 +4 0.000326548 17 +3 0.083291726 1 +4 0.000320362 17 +3 0.769933000 1 +4 0.000393975 17 +3 0.919667510 1 +4 0.000352380 17 +3 0.311512747 1 +4 0.000342246 17 +3 0.201904768 1 +4 0.000337561 17 +3 0.149354708 1 +4 0.000330234 17 +3 0.161865319 1 +4 0.000344640 19 +3 0.197546984 1 +4 0.000398805 16 +3 0.263704802 1 +4 0.000365442 18 +3 0.209456425 1 +4 0.000346204 18 +3 0.149810929 1 +4 0.000326993 17 +3 0.145647497 1 +4 0.000336915 17 +3 0.117654947 1 +4 0.000326396 17 +3 0.711858350 1 +3 0.215794237 1 +3 0.098692624 1 +4 0.000352279 30 +3 0.245072663 1 +4 0.000413162 152 +3 0.343589827 1 +4 0.000353535 43 +3 0.217628262 1 +4 0.000388389 17 +3 0.285641658 1 +4 0.000349375 17 +3 0.169616288 1 +4 0.000329603 18 +3 0.181998092 1 +4 0.000355735 17 +3 0.185294964 1 +4 0.000335426 17 +3 0.197804731 1 +4 0.000561390 18 +3 0.167404808 1 +4 0.000356999 18 +3 0.185860111 1 +4 0.000339021 17 +3 0.781427426 1 +4 0.000345923 17 +3 0.185697121 1 +4 0.000347099 18 +3 0.413672727 1 +3 0.072009864 1 +4 0.000367795 29 +3 1.239791419 1 +4 0.000372411 18 +3 0.071340348 1 +4 0.000349935 18 +3 0.087787090 1 +4 0.000341787 18 +3 0.064184380 1 +4 0.000373641 18 +3 0.343127607 2 +4 0.000363811 40 +3 0.495728208 1 +3 0.153866919 1 +4 0.000381217 117 +3 0.317668622 1 +4 0.000343528 18 +3 0.201756661 1 +4 0.000357579 18 +3 0.181438883 1 +4 0.000431407 17 +3 0.169782035 1 +4 0.000355737 17 +3 0.158459464 1 +4 0.000368564 18 +3 0.168862312 1 +4 0.000353069 17 +3 0.309583374 1 +4 0.000341940 17 +3 6.528430103 1 +3 0.055462031 1 +4 0.000367215 29 +3 0.351596495 1 +4 0.000434845 18 +3 0.055556172 1 +4 0.000345054 18 +3 0.127601700 1 +4 0.000369145 18 +3 0.119719841 1 +4 0.000352897 18 +3 0.071669428 1 +4 0.000421346 18 +3 0.263567769 2 +4 0.000393053 28 +3 0.153564993 1 +4 0.000338198 17 +3 0.229730832 1 +3 0.063895311 1 +4 0.000359651 33 +3 0.127722731 1 +4 0.000449988 18 +3 0.103515795 1 +4 0.000359790 18 +3 0.151624155 1 +4 0.000389670 18 +3 0.151650854 1 +4 0.000371329 18 +3 0.624624544 2 +4 0.000416918 29 +3 0.168504380 1 +4 0.000421755 17 +3 10.654173843 2 +4 0.000352326 18 +3 0.424138296 1 +3 0.055311738 1 +4 0.000356667 4 +3 0.183672243 1 +3 0.047968635 1 +4 0.000396462 4 +3 0.183787577 1 +3 0.063925096 1 +4 0.000358036 4 +3 0.319605460 1 +3 0.071929449 1 +4 0.000465348 4 +3 0.223722878 1 +4 0.000363252 10 +3 0.183587733 1 +4 0.000433712 14 +3 0.647630308 1 +3 0.063895585 1 +4 0.000417815 4 +3 0.535615893 1 +3 0.064012416 1 +4 0.000348669 4 +3 0.175726381 1 +4 0.000365969 17 +3 0.169966104 1 +4 0.000357277 17 +3 0.133255650 1 +4 0.000403378 17 +3 0.137644548 1 +4 0.000350718 18 +3 0.229589398 1 +4 0.000365216 20 +3 0.463682245 1 +4 0.000350292 17 +3 0.503710571 1 +3 0.071984253 1 +4 0.000365719 28 +3 0.239651030 1 +4 0.000371735 18 +3 0.135639150 1 +4 0.000347031 18 +3 0.375716854 1 +4 0.000353884 18 +3 0.145568976 1 +4 0.000359135 18 +3 0.141844499 1 +4 0.000342832 24 +3 0.055394243 1 +4 0.000427838 23 +3 0.055635519 1 +4 0.000326181 23 +3 0.591843859 2 +4 0.000389100 35 +3 0.499738355 1 +4 0.000369830 16 +3 0.083117755 1 +4 0.000333179 20 +3 0.082622531 1 +4 0.000326263 20 +3 0.082752732 1 +4 0.000351052 20 +3 0.082639690 1 +4 0.000397694 19 +3 0.083120133 1 +4 0.000365561 16 +3 0.084210436 1 +4 0.000333697 20 +3 0.082058788 1 +4 0.000410842 21 +3 0.083103481 1 +4 0.000345452 17 +3 0.083358651 1 +4 0.000425225 86 +3 0.082712757 1 +4 0.000367934 47 +3 0.330067959 1 +4 0.000525402 20 +3 0.191546795 1 +4 0.000484461 18 +3 0.161572675 1 +4 0.000409905 13 +3 0.229427039 1 +3 0.072238531 1 +4 0.000384219 28 +3 0.199416678 1 +4 0.000369245 13 +3 0.159740429 1 +4 0.000359174 16 +3 0.103384937 1 +4 0.000342926 17 +3 0.111719927 1 +4 0.000334395 18 +3 0.191704946 1 +4 0.000351843 24 +3 0.135694345 1 +4 0.000385816 23 +3 0.183679105 1 +4 0.000341780 23 +3 0.135643465 1 +4 0.000409507 23 +3 0.263719585 2 +4 0.000430565 36 +3 0.745526976 1 +4 0.000349700 17 +3 0.221526461 1 +3 0.154139252 1 +4 0.000363741 40 +3 0.197648612 1 +4 0.000380234 18 +3 0.145592219 1 +4 0.000347438 18 +3 0.497692162 1 +4 0.000559334 17 +3 0.083258084 1 +4 0.000366159 17 +3 0.082714433 1 +4 0.000363401 18 +3 0.284743957 1 +4 0.000380457 17 +3 0.983705644 1 +4 0.000455424 17 +3 4.128251235 1 +3 0.055263603 1 +4 0.000392117 29 +3 0.311678075 1 +4 0.000364203 17 +3 0.183681414 1 +4 0.000440272 18 +3 0.055707892 1 +4 0.000336896 18 +3 0.127524254 1 +4 0.000347727 18 +3 0.119410661 1 +4 0.000362210 17 +3 0.352201070 2 +4 0.000382496 28 +3 0.161470026 1 +4 0.000366634 17 +3 0.981529955 1 +3 0.071904396 1 +4 0.000375458 33 +3 1.687914699 1 +4 0.000375000 18 +3 0.095554075 1 +4 0.000395143 18 +3 0.335928270 1 +4 0.000415245 19 +3 0.151152635 1 +4 0.000403090 18 +3 0.223691617 1 +4 0.000382719 16 +3 0.095596121 1 +4 0.000552478 13 +3 0.479860646 2 +4 0.000394744 29 +3 0.145244202 1 +4 0.000428117 11 +3 0.334356045 1 +3 0.047245638 1 +4 0.000364391 29 +3 0.231474679 1 +4 0.000366527 11 +3 0.127831282 1 +4 0.000348438 13 +3 0.119706825 1 +4 0.000413701 16 +3 0.159493916 1 +4 0.000337168 18 +3 0.063503681 1 +4 0.000413528 18 +3 0.017324370 1 +4 0.000363635 19 +3 0.037925101 1 +4 0.000359329 34 +3 0.447799378 1 +4 0.000354927 17 +3 0.155150106 1 +4 0.000358097 18 +3 0.548165767 1 +4 0.000435383 19 +3 0.709231736 1 +4 0.110013539 39 +3 2.317003920 1 +4 0.000370810 18 +3 0.137062672 1 +4 0.000451671 17 +3 0.269450345 1 +3 0.055962476 1 +4 0.000376465 28 +3 0.143660940 1 +4 0.000324800 18 +3 0.047648307 1 +4 0.000324962 18 +3 0.159709120 1 +4 0.000330247 18 +3 0.055824884 1 +4 0.000344909 18 +3 0.175503094 1 +4 0.000417635 29 +3 0.071590626 1 +4 0.000343271 29 +3 0.183678892 1 +4 0.000381034 29 +3 0.319724383 2 +4 0.000383703 24 +3 0.191668805 1 +4 0.000371153 4 +3 0.631573623 1 +4 0.000351948 9 +3 3.567896880 1 +4 0.000413212 1 +3 0.351539578 1 +4 0.000365350 1 +3 0.191536273 1 +4 0.000372288 43 +3 1.055699949 1 +4 0.000397684 4 +3 1.199544502 1 +4 0.000366758 20 +3 1.959891454 1 +4 0.000383916 4 +3 0.391505464 1 +4 0.000517804 21 +4 0.000377686 41 +3 0.623122013 1 +4 0.000404023 43 +3 0.500068594 1 +4 0.000367278 19 +3 0.082673669 1 +4 0.000414010 17 +3 0.083212499 1 +4 0.000361841 20 +3 0.083398609 1 +4 0.000378938 20 +3 0.083503493 1 +4 0.000339474 20 +3 0.083548955 1 +4 0.000350817 19 +3 0.082922183 1 +4 0.000380499 16 +3 0.082633674 1 +4 0.000419267 20 +3 0.346679965 1 +4 0.000345699 9 +3 0.127600231 1 +4 0.000348823 1 +3 0.079852974 1 +4 0.000384659 1 +4 0.000487278 71 +3 1.047053399 1 +4 0.000371454 35 +3 0.201577612 1 +4 0.000346492 18 +3 0.141620220 1 +4 0.000434290 20 +3 0.161725379 1 +4 0.000349536 17 +3 0.381540104 1 +4 0.000458714 20 +3 0.255538554 1 +4 0.000362273 20 +3 0.217589396 1 +4 0.000442248 17 +3 0.197745827 1 +4 0.000361737 19 +3 0.217592627 1 +4 0.000417554 16 +3 0.237510507 1 +4 0.000365859 18 +3 0.185442213 1 +4 0.000383843 20 +3 0.157776099 1 +4 0.000388969 17 +3 0.145656120 1 +4 0.000432544 20 +3 0.725571649 1 +3 0.224026841 1 +3 0.130120797 1 +4 0.000463027 195 +3 0.413944645 1 +4 0.000590754 739 +3 3.767186937 1 +4 0.000401657 17 +3 0.501150681 1 +4 0.000383413 17 +3 0.083052650 1 +4 0.000406041 18 +3 0.082919414 1 +4 0.000341142 17 +3 0.083048449 1 +4 0.000389613 18 +3 0.083058567 1 +4 0.000341517 20 +3 0.083738747 1 +4 0.000401697 17 +3 0.083487118 1 +4 0.000318078 19 +3 0.082386624 1 +4 0.000349825 20 +3 0.083549970 1 +4 0.000348323 17 +3 0.083216984 1 +4 0.000357428 19 +3 2.002381804 1 +4 0.000472399 182 +3 0.391433807 1 +4 0.000415113 41 +3 0.153619892 1 +4 0.000339569 16 +3 0.157579095 1 +4 0.000381298 16 +3 0.137710185 1 +4 0.000331000 15 +3 0.237609414 1 +3 0.154038387 1 +4 0.000386302 28 +3 0.085678700 1 +4 0.000342804 15 +3 0.137577797 1 +4 0.000325385 17 +3 0.125663214 1 +4 0.000339410 16 +3 0.129648391 1 +4 0.000371056 16 +3 0.133745687 1 +4 0.000344839 16 +3 0.121870473 1 +4 0.000344271 16 +3 0.141414753 1 +4 0.000349286 16 +3 0.279635191 1 +4 0.000368680 83 +3 0.919741389 1 +4 0.000372528 16 +3 0.185634184 1 +4 0.000334268 18 +3 0.149643991 1 +4 0.000381864 16 +3 0.178813890 1 +4 0.000340575 16 +3 0.132512157 1 +4 0.000326605 16 +3 0.207669487 1 +3 0.130001555 1 +4 0.000373613 30 +3 0.101685025 1 +4 0.000359406 16 +3 0.169496704 1 +4 0.000347369 16 +3 0.117830690 1 +4 0.000346260 15 +3 0.271560924 1 +4 0.000378261 70 +3 0.335674560 1 +4 0.000334295 17 +3 0.319680454 1 +4 0.000381445 17 +3 0.111605973 1 +4 0.000330906 16 +3 0.351541311 1 +3 0.055960494 1 +4 0.000350943 27 +3 0.231761623 1 +4 0.000365793 17 +3 0.071605203 1 +4 0.000375718 17 +3 0.063717020 1 +4 0.000426567 17 +3 0.167512881 1 +4 0.000373898 17 +3 0.215669475 1 +4 0.000387267 18 +3 0.119543451 1 +4 0.000350589 18 +3 0.119698085 1 +4 0.000383518 18 +3 0.063626059 1 +4 0.000331352 18 +3 0.151709723 1 +4 0.000444992 18 +3 0.415446226 2 +4 0.000358904 10 +3 0.111754384 1 +4 0.000375156 1 +3 0.087635169 1 +4 0.000352317 1 +4 0.000356910 70 +3 0.647287901 1 +4 0.000418985 38 +3 0.500906857 1 +4 0.000359649 21 +3 0.082239879 1 +4 0.000401465 19 +3 0.082678794 1 +4 0.000349987 20 +3 6.253213528 1 +4 0.000594687 818 +3 0.943207476 1 +4 0.000359186 18 +3 0.500411947 1 +4 0.000363800 17 +3 0.082935185 1 +4 0.000364544 19 +3 0.083270215 1 +4 0.000324230 16 +3 0.082879840 1 +4 0.000328773 16 +3 0.394701064 1 +4 0.000342138 16 +3 0.498004689 1 +4 0.000343189 18 +3 0.084036201 1 +4 0.000328291 19 +3 0.082809036 1 +4 0.000320226 18 +3 0.083381699 1 +4 0.000356306 19 +3 0.082845594 1 +4 0.000362854 17 +3 0.082591044 1 +4 0.000330810 20 +3 0.274046350 1 +4 0.000358247 17 +3 1.663733384 1 +4 0.000385247 17 +3 0.169387535 1 +4 0.000338773 18 +3 0.453821805 1 +4 0.000364475 17 +3 0.815670849 1 +4 0.000397658 21 +3 3.463852526 1 +4 0.000372814 10 +3 0.135519697 1 +4 0.000323566 1 +3 0.087713390 1 +4 0.000342568 1 +4 0.000308209 14 +4 0.000365143 57 +3 0.366888761 1 +4 0.000410446 39 +3 0.500676434 1 +4 0.000348263 17 +3 0.083090874 1 +4 0.000434494 19 +3 0.082830339 1 +4 0.000324887 16 +3 0.083566806 1 +4 0.000402301 20 +3 0.083173820 1 +4 0.000334397 18 +3 0.082730980 1 +4 0.000393689 17 +3 0.082825052 1 +4 0.000341337 19 +3 0.083170302 1 +4 0.000377153 14 +3 0.083072838 1 +4 0.000390173 56 +3 0.082999886 1 +4 0.000439470 75 +3 0.082762651 1 +4 0.000395232 113 +3 0.082620995 1 +4 0.000397350 61 +3 0.082871001 1 +4 0.000373226 34 +3 0.083575770 1 +4 0.000409959 63 +3 0.082917348 1 +4 0.000372697 69 +3 0.163160664 1 +4 0.000430026 22 +3 0.499891634 1 +4 0.000363031 17 +3 0.083667974 1 +4 0.000358611 18 +3 0.083655556 1 +4 0.000331308 20 +3 0.082933196 1 +4 0.000406880 17 +3 0.083358936 1 +4 0.000338614 20 +3 0.082833576 1 +4 0.000352971 17 +3 0.083692508 1 +4 0.000408021 18 +3 0.082857776 1 +4 0.000367410 20 +3 0.083019645 1 +4 0.000332219 17 +3 21.927781806 1 +4 0.000441868 10 +3 0.502837059 1 +4 0.000350164 1 +3 0.151681189 1 +4 0.000353626 1 +3 0.151622397 1 +4 0.000311634 1 +3 0.087826712 1 +4 0.000353519 1 +3 0.151558813 1 +4 0.000327227 1 +3 0.231730506 1 +4 0.000651083 903 +3 32.501930553 1 +4 0.109975552 1 +3 0.028943050 1 +4 0.000370553 17 +3 0.193248641 1 +4 0.000388154 19 +3 0.197569088 1 +4 0.000387741 19 +3 0.337809277 1 +4 0.000368492 16 +3 1.509640262 1 +4 0.000364843 16 +3 0.169678380 1 +4 0.000390517 16 +3 0.149422705 1 +4 0.000422957 17 +3 0.177633505 1 +4 0.000350401 16 +3 0.149621210 1 +4 0.000384687 16 +3 0.327694270 1 +4 0.000358998 22 +3 0.911712189 1 +4 0.000401784 38 +3 0.504510471 1 +4 0.000396015 38 +3 0.526653542 2 +4 0.000493199 32 +3 0.169493494 1 +4 0.000336623 16 +3 0.149703387 1 +4 0.000357534 17 +3 0.105766267 1 +4 0.000329302 16 +3 0.245599159 1 +4 0.000406078 16 +3 0.575618562 1 +4 0.000364879 16 +3 0.311608382 1 +4 0.000349871 16 +3 0.185596270 1 +4 0.000398002 16 +3 1.365688778 1 +4 0.000363466 16 +3 0.255699476 1 +4 0.000359577 16 +3 0.153604076 1 +4 0.000329306 16 +3 0.389581420 1 +4 0.000348745 30 +3 0.335840754 1 +4 0.000400729 43 +3 0.447431650 2 +4 0.000390504 30 +3 0.185734624 1 +4 0.000385907 16 +3 0.285715442 1 +4 0.000366225 16 +3 0.319421703 1 +4 0.000358107 16 +3 0.207748026 1 +4 0.000353624 23 +3 0.143468126 1 +4 0.000390232 40 +3 0.199737673 1 +4 0.000360893 40 +3 0.151876766 1 +4 0.000363927 40 +3 0.103505994 1 +4 0.000400039 40 +3 0.127470683 1 +4 0.000351737 40 +3 0.087789128 1 +4 0.000364161 40 +3 0.103384124 1 +4 0.000355439 40 +3 0.127838284 1 +4 0.000363215 40 +3 0.647731652 2 +4 0.000391568 10 +3 0.095454269 1 +4 0.000345634 1 +3 0.119803172 1 +4 0.000395598 1 +4 0.000411305 70 +3 2.687757586 1 +4 0.000771462 909 +3 0.831467981 1 +4 0.003215880 778 +3 11.679345950 1 +3 0.021098554 1 +4 0.000353074 16 +3 0.500492644 1 +4 0.000350399 15 +3 16.339427653 2 +4 0.000483019 18 +3 0.234059151 1 +4 0.000399213 17 +3 0.181245736 1 +4 0.000373271 16 +3 0.377574752 1 +4 0.000399487 15 +3 0.213541131 1 +4 0.000363939 15 +3 0.455592358 1 +4 0.000368419 15 +3 0.217860660 1 +4 0.000362396 15 +3 0.829822342 1 +3 0.199520605 1 +3 0.122077648 1 +4 0.000371995 29 +3 0.301692078 1 +4 0.000429013 168 +3 0.263429942 1 +4 0.000439329 42 +3 0.185772461 1 +4 0.000367660 17 +3 0.173522004 1 +4 0.000351702 16 +3 0.169723295 1 +4 0.000353912 16 +3 0.181558878 1 +4 0.000346110 17 +3 0.360811073 1 +4 0.000384036 16 +3 0.406733402 1 +3 0.071723810 1 +4 0.000435085 4 +3 0.183594255 1 +3 0.064832901 1 +4 0.000364702 4 +3 0.182897521 1 +3 0.063976876 1 +4 0.000447247 4 +3 0.183453955 1 +3 0.063996744 1 +4 0.000368818 4 +3 0.199914064 1 +3 0.055782650 1 +4 0.000429917 4 +3 0.527557291 1 +3 0.081236809 1 +4 0.000396926 4 +3 0.958840513 1 +4 0.000419130 4 +3 0.239238446 1 +4 0.000358296 16 +3 0.383668436 1 +4 0.000430813 4 +3 0.311593779 1 +4 0.000372858 16 +3 0.255700878 1 +4 0.000468984 17 +3 0.170610780 1 +4 0.000348450 16 +3 0.180469947 1 +4 0.000550694 17 +3 0.201643938 1 +4 0.000372859 16 +3 0.229538559 1 +4 0.000382536 16 +3 0.185532139 1 +4 0.000356124 16 +3 0.261601985 1 +4 0.000387245 16 +3 0.135920173 1 +4 0.000364712 4 +3 0.137582828 1 +4 0.000406378 7 +3 0.101406308 1 +4 0.000378019 23 +3 0.127611094 1 +4 0.000416266 19 +3 0.063597802 1 +4 0.000351139 19 +3 0.135777101 1 +4 0.000383814 19 +3 0.071872137 1 +4 0.000347966 19 +3 0.183497136 1 +4 0.000388051 19 +3 0.087333908 1 +4 0.000347077 20 +3 0.167728912 1 +4 0.000446104 19 +3 0.152024080 1 +4 0.000347542 19 +3 0.055241445 1 +4 0.000385482 19 +3 0.719955348 1 +4 0.109930592 32 +3 4.609864082 1 +4 0.000458471 18 +3 0.185496737 1 +4 0.000353455 19 +3 0.173481209 1 +4 0.000412202 16 +3 0.185800042 1 +4 0.000371954 17 +3 0.165563687 1 +4 0.000383396 16 +3 0.455705316 1 +4 0.000519137 16 +3 0.183502619 1 +3 0.087954866 1 +4 0.000398623 4 +3 0.127667464 1 +3 0.048005922 1 +4 0.000556711 4 +3 0.271606905 1 +4 0.000365658 10 +3 0.111439488 1 +4 0.000364614 1 +3 0.119629265 1 +4 0.000356249 1 +4 0.000358164 70 +3 23.456782660 1 +4 0.000420244 39 +3 0.185036269 1 +4 0.000378673 19 +3 0.261464712 1 +4 0.000358112 20 +3 0.185802233 1 +4 0.000354946 16 +3 0.133526698 1 +4 0.000351124 18 +3 0.145720194 1 +4 0.000346442 19 +3 0.141404511 1 +4 0.000347248 19 +3 0.903765278 1 +3 0.160022307 1 +3 0.122095060 1 +4 0.000359637 30 +3 0.229676169 1 +4 0.000458957 160 +3 0.281155229 1 +4 0.000370937 40 +3 0.176037772 1 +4 0.000338887 15 +3 0.141472526 1 +4 0.000364237 15 +3 0.087748400 1 +4 0.000345260 17 +3 0.185814611 1 +4 0.000402835 17 +3 0.157522572 1 +4 0.000354716 16 +3 0.145735709 1 +4 0.000442894 16 +3 0.157390360 1 +4 0.000374352 17 +3 0.519794542 1 +3 0.071877963 1 +4 0.000385470 28 +3 2.666067450 16 +4 0.000385961 42 +3 0.653306438 2 +4 0.000389654 32 +3 0.335636999 1 +3 0.055882266 1 +4 0.000376155 4 +3 0.191644598 1 +4 0.000421996 4 +3 0.159629868 1 +4 0.000380822 17 +3 0.247669348 1 +4 0.000354744 17 +3 0.233607882 1 +4 0.000474290 17 +3 0.237582654 1 +4 0.000391815 18 +3 0.265544774 1 +4 0.000403142 17 +3 2.045831577 1 +3 0.071988213 1 +4 0.000365710 33 +3 0.183567304 1 +4 0.000340983 18 +3 0.135520945 1 +4 0.000339207 18 +3 0.375758029 1 +4 0.000437595 18 +3 0.255608738 1 +4 0.000342984 18 +3 0.231779299 1 +4 0.000385756 18 +3 0.623567503 1 +4 0.000408780 19 +3 0.706978607 1 +3 0.092654921 1 +4 0.000392070 40 +3 0.151447284 1 +4 0.000397522 16 +3 0.177694701 1 +4 0.000349486 16 +3 0.237684625 1 +4 0.000395108 16 +3 0.169524623 1 +4 0.000332610 16 +3 0.109663657 1 +4 0.000393453 4 +3 18.720866665 1 +4 0.000378684 10 +3 0.183076196 1 +4 0.000372289 1 +3 0.143478724 1 +4 0.000321412 1 +3 0.223863235 1 +4 0.000329886 1 +3 0.095739590 1 +4 0.000344349 1 +3 0.255589294 1 +4 0.000381290 42 +3 6.352356328 1 +4 0.000370173 10 +3 0.247069394 1 +4 0.000358856 1 +3 0.111615287 1 +4 0.000352443 1 +3 0.095530677 1 +4 0.000320066 1 +3 0.119880870 1 +4 0.000346334 1 +3 0.071569135 1 +4 0.000389853 1 +3 0.135694663 1 +4 0.000369364 21 +4 0.000400694 626 +3 0.903231822 1 +4 0.000640086 932 +3 0.137505949 1 +4 0.000414885 4 +3 0.293443410 1 +4 0.000342797 10 +3 0.095633509 1 +4 0.000321921 1 +3 0.111824456 1 +4 0.000392877 1 +4 0.000692568 10 +4 0.000315916 61 +3 51.768343604 2 +4 0.000413690 38 +3 0.178048003 1 +4 0.000354008 20 +3 0.181050315 1 +4 0.000399295 16 +3 0.367773466 1 +4 0.000350064 17 +3 0.185496152 1 +4 0.000457337 19 +3 0.165580652 1 +4 0.000373275 20 +3 0.943666684 1 +3 0.143938971 1 +3 0.138092960 1 +4 0.000446899 31 +3 0.189573253 1 +4 0.000434622 166 +3 0.415594353 1 +4 0.000353175 43 +3 0.119498545 1 +4 0.000416279 17 +3 0.153622082 1 +4 0.000325486 17 +3 0.149797383 1 +4 0.000364900 17 +3 0.145463973 1 +4 0.000320115 18 +3 0.245861873 1 +3 0.055899416 1 +4 0.000346184 33 +3 0.145440842 1 +4 0.000330750 18 +3 0.093927827 1 +4 0.000402535 18 +3 0.151636302 1 +4 0.000334025 18 +3 0.137649589 1 +4 0.000327258 18 +3 0.165641957 1 +4 0.000344676 18 +3 0.103530501 1 +4 0.000394530 18 +3 0.119730331 1 +4 0.000344489 18 +3 0.191797816 1 +4 0.000345030 18 +3 0.519553219 1 +4 0.000375999 17 +3 0.271649244 2 +4 0.000369176 40 +3 0.159664026 1 +4 0.000343802 18 +3 0.079615085 1 +4 0.000343537 17 +3 0.145638061 1 +4 0.000343617 18 +3 0.213673268 1 +3 0.072064928 1 +4 0.000393468 29 +3 0.159540889 1 +4 0.000361177 18 +3 0.184772577 1 +4 0.000362006 18 +3 0.182583209 1 +4 0.000390393 18 +3 0.063563677 1 +4 0.000353075 18 +3 0.087721187 1 +4 0.000352908 18 +3 0.063547733 1 +4 0.000347315 19 +3 0.359639301 2 +4 0.000394679 10 +3 0.127782684 1 +4 0.000360020 1 +3 0.071659375 1 +4 0.000364721 1 +4 0.000372040 71 +3 6.634229053 1 +4 0.000421555 39 +3 2.772844912 1 +3 0.183934845 1 +3 0.122103896 1 +4 0.000367222 31 +3 0.206475986 1 +4 0.000393142 162 +3 0.398737041 1 +4 0.000358632 43 +3 0.169656431 1 +4 0.000426268 18 +3 0.141499927 1 +4 0.000324744 17 +3 0.129908896 1 +4 0.000431243 17 +3 0.157477718 1 +4 0.000331106 18 +3 0.169510188 1 +4 0.000371123 17 +3 0.349819526 1 +4 0.000346283 17 +3 0.135620817 1 +3 0.063908244 1 +4 0.000349393 29 +3 0.639705380 1 +4 0.000358994 18 +3 0.079608415 1 +4 0.000349582 18 +3 0.167641208 1 +4 0.000333097 18 +3 0.119635150 1 +4 0.000325893 18 +3 0.335988537 2 +4 0.000388503 40 +3 0.151517652 1 +4 0.000335407 18 +3 0.127531426 1 +4 0.000328917 17 +3 0.169831361 1 +4 0.000355114 18 +3 0.133559681 1 +3 0.063905257 1 +4 0.000385249 29 +3 0.183692948 1 +4 0.000348863 18 +3 0.159623972 1 +4 0.000374389 18 +3 0.063535418 1 +4 0.000350747 18 +3 0.119697622 1 +4 0.000358409 18 +3 0.151553538 1 +4 0.000402518 17 +3 0.629201687 1 +4 0.109983114 38 +3 298.263891899 1 +4 0.000588358 699 +3 1.606355242 1 +4 0.000872215 897 +3 76.011148005 2 +4 0.000390311 10 +3 0.312238015 1 +4 0.000502056 1 +3 0.102935471 1 +4 0.000351174 1 +3 0.127581255 1 +4 0.000380726 1 +3 0.103742863 1 +4 0.000384563 1 +3 0.063444415 1 +4 0.000359179 1 +3 0.359878770 1 +4 0.000473029 315 +3 0.935393460 1 +4 0.000483869 72 +3 0.217488870 1 +4 0.000383700 83 +3 0.197755857 1 +4 0.000399680 37 +3 0.353532689 1 +4 0.000393040 46 +3 0.445939810 1 +4 0.000403231 17 +3 0.193269546 1 +4 0.000384174 19 +3 0.141479206 1 +4 0.000416231 19 +3 0.185773593 1 +4 0.000344559 19 +3 1.013564710 1 +4 0.000371861 19 +3 0.500236837 1 +4 0.000349341 19 +3 0.083152533 1 +4 0.000362027 18 +3 0.083278402 1 +4 0.000337363 17 +3 0.082801903 1 +4 0.000476148 90 +3 0.082979424 1 +4 0.000371072 138 +3 0.082892788 1 +4 0.000404162 48 +3 0.083297138 1 +4 0.000374667 100 +3 0.082743191 1 +4 0.000454006 77 +3 0.171217027 1 +4 0.000357358 16 +3 0.499821948 1 +4 0.000389587 18 +3 0.083044901 1 +4 0.000359768 20 +3 0.083408324 1 +4 0.000361675 16 +3 0.083595084 1 +4 0.000345073 18 +3 0.082858679 1 +4 0.000353379 17 +3 0.083066037 1 +4 0.000364008 19 +3 0.082619739 1 +4 0.000372550 20 +3 0.083322360 1 +4 0.000335888 20 +3 0.659095664 1 +3 0.064103392 1 +4 0.000413047 4 +3 0.199480585 1 +4 0.000369964 6 +3 0.983673021 1 +3 0.192162767 1 +3 0.137843351 1 +4 0.000374780 31 +3 0.253735860 1 +4 0.000416276 35 +3 0.007498793 1 +4 0.000332880 17 +3 0.567618789 2 +4 0.000441430 56 +3 0.791639884 1 +3 0.216076388 1 +3 0.113871034 1 +4 0.000397392 30 +3 0.269670795 1 +4 0.000500106 176 +3 0.575691826 1 +4 0.000411222 43 +3 0.201417974 1 +4 0.000358402 18 +3 0.213703365 1 +4 0.000369426 17 +3 0.233813941 1 +4 0.000335005 17 +3 0.357464711 1 +4 0.000368953 18 +3 0.431768171 1 +4 0.000345909 17 +3 0.119700892 1 +3 0.063770807 1 +4 0.000352332 4 +3 0.167672569 1 +3 0.063967435 1 +4 0.000368483 4 +3 0.143672983 1 +3 0.056030855 1 +4 0.000352227 4 +3 0.160407573 1 +3 0.071172537 1 +4 0.000355767 4 +3 0.159739816 1 +3 0.039912535 1 +4 0.000347316 4 +3 0.447779307 1 +3 0.055839304 1 +4 0.000379150 5 +3 0.279712819 1 +4 0.000386731 4 +3 0.095611959 1 +4 0.000400849 24 +3 0.207798321 1 +4 0.000337390 27 +3 0.087597784 1 +4 0.000389358 27 +3 0.111494118 1 +4 0.000360532 27 +3 0.119583518 1 +4 0.000460045 27 +3 0.079741611 1 +4 0.000374955 27 +3 0.343562146 2 +4 0.000420269 36 +3 0.143619037 1 +4 0.000485945 17 +3 0.161838563 1 +4 0.000410377 17 +3 0.165388957 1 +4 0.000503584 17 +3 0.351458028 1 +4 0.002150537 18 +3 0.181744478 1 +4 0.000567521 4 +3 0.145375184 1 +4 0.000549998 7 +3 0.445548680 1 +4 0.000495244 24 +3 3.452580790 12 +4 0.000391347 32 +3 0.578726807 2 +4 0.000391488 34 +3 0.359677949 1 +4 0.000383036 17 +3 0.011477617 1 +4 0.000333260 16 +3 0.755720694 2 +4 0.000352425 1 +4 0.000440325 31 +3 0.505727615 1 +4 0.000386077 32 +3 0.341197056 1 +4 0.000373183 18 +3 0.295516508 1 +4 0.000360937 18 +3 7.173168110 1 +3 0.026864958 1 +4 0.000303644 11 +3 0.176044754 1 +4 0.000355252 1 +3 0.111242246 1 +4 0.000392288 1 +4 0.000366758 71 +3 3.295308862 1 +4 0.000416904 37 +3 0.401523517 1 +4 0.000360580 20 +3 0.405717920 1 +4 0.000389768 18 +3 0.577791745 1 +4 0.000400066 17 +3 0.181468215 1 +4 0.000401772 18 +3 0.209541880 1 +4 0.000374824 17 +3 0.213643227 1 +4 0.000387221 17 +3 0.327539140 1 +4 0.000439965 23 +3 0.143698704 1 +4 0.000385017 61 +3 0.119542477 1 +4 0.000354853 61 +3 0.095593840 1 +4 0.000456266 61 +3 0.295655918 1 +4 0.000372849 61 +3 0.375733076 1 +4 0.000403936 61 +3 0.119288440 1 +4 0.000337659 61 +3 0.056065244 1 +4 0.000361086 61 +3 0.143433148 1 +4 0.000362130 102 +3 0.087713046 1 +4 0.000372159 69 +3 1.919627989 2 +4 0.000464314 187 +3 3.551728192 1 +4 0.000393181 19 +3 0.201557515 1 +4 0.000372588 20 +3 0.349688057 1 +4 0.000420833 17 +3 4.831747260 1 +3 0.111871581 1 +3 0.114122553 1 +4 0.000354640 31 +3 0.221585743 1 +4 0.000391777 163 +3 0.240467032 1 +4 0.000434937 41 +3 0.152672352 1 +4 0.000344560 16 +3 0.149768362 1 +4 0.000434848 16 +3 0.127472340 1 +4 0.000339760 18 +3 0.178623535 1 +4 0.000353469 18 +3 0.148709804 1 +4 0.000343942 17 +3 0.153727092 1 +4 0.000386014 17 +3 0.142593698 1 +4 0.000368171 18 +3 0.208699427 1 +4 0.000396993 17 +3 0.333603582 1 +4 0.000538131 17 +3 0.135265076 1 +4 0.000339192 24 +3 0.127829179 1 +4 0.000323979 32 +3 0.119545651 1 +4 0.000342267 32 +3 0.119718848 1 +4 0.000346974 32 +3 0.223585570 1 +4 0.000369503 32 +3 0.288598091 2 +4 0.000382734 37 +3 0.286827308 1 +4 0.000406692 17 +3 0.111520326 1 +4 0.000324944 17 +3 0.153897651 1 +4 0.000346842 18 +3 0.197541026 1 +3 0.071959249 1 +4 0.000341812 33 +3 0.151570364 1 +4 0.000366159 18 +3 0.135625141 1 +4 0.000356074 18 +3 0.063913211 1 +4 0.000401265 18 +3 0.135397091 1 +4 0.000357625 17 +3 0.063550006 1 +4 0.000362082 17 +3 0.279790276 2 +4 0.000441836 42 +3 0.145473116 1 +4 0.000368696 19 +3 0.158423711 1 +4 0.000538310 20 +3 0.152974603 1 +4 0.000396211 20 +3 0.229515269 1 +4 0.000358456 19 +3 0.375529290 1 +3 0.122053636 1 +4 0.000396379 86 +3 5.117682119 1 +4 0.000355614 10 +3 0.143687036 1 +4 0.000342123 1 +3 0.103779058 1 +4 0.000338014 1 +4 0.000471743 70 +3 36.697316637 1 +4 0.000360502 36 +7 0.000559521 TSTP +7 1.118239345 CONT +4 0.000607646 7 +4 0.000313754 926 +3 137.956669383 1 +4 0.000608610 896 +3 4.694772644 1 +4 0.000627083 865 +3 0.527194435 1 +4 0.000635130 878 +3 0.743371590 1 +4 0.000677426 934 +3 1.135313487 1 +4 0.000611580 865 +3 31.114191724 1 +4 0.000400871 16 +3 0.498748730 1 +4 0.000370612 17 +3 0.083393608 1 +4 0.000349957 18 +3 0.083228301 1 +4 0.000357796 16 +3 0.083284779 1 +4 0.000421892 16 +3 0.083464480 1 +4 0.000364048 16 +3 0.083115757 1 +4 0.000365411 16 +3 0.545452921 1 +4 0.000375613 18 +3 0.184571070 1 +4 0.000356358 16 +3 2.197804352 1 +4 0.000397371 18 +3 0.201554287 1 +4 0.000400853 18 +3 0.405725695 1 +4 0.000372011 17 +3 2.775555603 1 +4 0.000390934 21 +3 0.501263659 1 +4 0.000381829 4 +3 0.082749646 1 +4 0.000342354 4 +3 0.082921972 1 +4 0.000334667 4 +3 0.084067835 1 +4 0.000353635 4 +3 0.083089249 1 +4 0.000368937 4 +3 0.082963484 1 +4 0.000354061 4 +3 0.242701309 1 +4 0.000354086 4 +3 1.477591715 1 +4 0.000353246 9 +3 0.592358558 1 +4 0.000377591 1 +3 0.174795711 1 +4 0.000321748 1 +3 0.247794938 1 +4 0.000338889 1 +3 0.112209648 1 +4 0.000340485 1 +3 0.135029439 1 +4 0.000341037 1 +3 0.055554909 1 +4 0.000345707 1 +3 0.191736684 1 +4 0.000358563 43 +3 0.319684203 1 +4 0.000365506 17 +3 0.399790968 1 +4 0.000361879 17 +3 0.241394863 1 +4 0.000352882 17 +3 0.725887828 1 +4 0.000477986 17 +3 0.353608370 1 +4 0.000354885 21 +3 0.429584062 1 +4 0.000396938 133 +3 0.279378180 1 +4 0.000358585 17 +3 0.175723038 1 +4 0.000409308 17 +3 4.095816823 1 +3 0.095825766 1 +4 0.000392721 79 +3 0.271896964 1 +3 0.063763870 1 +4 0.000434312 79 +3 12.400029830 2 +4 0.000385072 18 +3 0.500489311 1 +4 0.000381535 18 +3 0.082115608 1 +4 0.000331586 18 +3 0.083558181 1 +4 0.000322628 20 +3 0.082878969 1 +4 0.000412686 17 +3 0.083102007 1 +4 0.000331306 17 +3 0.083058770 1 +4 0.000368108 18 +3 0.083335584 1 +4 0.000328856 18 +3 0.083122443 1 +4 0.000375361 20 +3 0.083140106 1 +4 0.000329073 17 +3 0.535854127 1 +4 0.000363332 17 +3 0.303667929 1 +4 0.000345811 16 +3 0.127414119 1 +4 0.000329253 16 +3 0.575842927 1 +4 0.000372816 18 +3 0.207521448 1 +4 0.000380002 33 +3 0.191680395 1 +4 0.000415139 18 +3 0.239721569 1 +4 0.000359173 18 +3 0.135707566 1 +4 0.000348263 18 +3 0.127456151 1 +4 0.000345213 18 +3 0.113021388 1 +4 0.000349421 18 +3 0.070170448 1 +4 0.000383365 18 +3 0.175705240 1 +4 0.000341282 18 +3 0.039635955 1 +4 0.000448486 18 +3 0.023475627 1 +4 0.000329365 19 +3 0.151772167 1 +4 0.000355765 18 +3 0.151811396 1 +4 0.000345209 18 +3 0.311602242 1 +4 0.000376122 17 +3 0.145722459 1 +4 0.000374938 17 +3 0.141488289 1 +4 0.000411336 18 +3 0.121640620 1 +4 0.000343935 17 +3 0.157504669 1 +4 0.000368814 18 +3 0.095638665 1 +4 0.000335562 18 +3 0.151826083 1 +4 0.000370317 17 +3 0.159537640 1 +4 0.000337397 17 +3 0.200748674 1 +4 0.000433909 17 +3 0.152593300 1 +4 0.000336655 17 +3 0.157635603 1 +4 0.000376891 18 +3 0.137603741 1 +4 0.000350292 17 +3 0.061550084 1 +4 0.000403425 18 +3 0.167783816 1 +4 0.000358165 19 +3 0.159454522 1 +4 0.000356062 18 +3 0.111783645 1 +4 0.000402895 18 +3 0.071540835 1 +4 0.000352165 18 +3 0.079665713 1 +4 0.000441442 18 +3 0.087580841 1 +4 0.000427823 18 +3 0.359989306 1 +4 0.000358601 18 +3 0.239226909 1 +4 0.000373383 17 +3 0.143514814 1 +4 0.000349556 17 +3 0.167751454 1 +4 0.000392330 19 +3 0.159585858 1 +4 0.000355057 17 +3 0.111688172 1 +4 0.000435191 17 +3 0.039591792 1 +4 0.000333307 17 +3 0.079745614 1 +4 0.000380560 17 +3 0.087569485 1 +4 0.000327945 17 +3 0.143716242 1 +4 0.000362228 18 +3 0.151621835 1 +4 0.000377097 18 +3 0.119543924 1 +4 0.000402925 18 +3 0.087366870 1 +4 0.000347471 18 +3 0.087783726 1 +4 0.000351720 19 +3 0.119580802 1 +4 0.000327089 18 +3 1.399803885 1 +4 0.000373000 18 +3 0.135758540 1 +4 0.000388294 18 +3 0.063433900 1 +4 0.000389975 18 +3 0.087873763 1 +4 0.000346176 18 +3 0.015454620 1 +4 0.000345227 18 +3 0.183740784 1 +4 0.000340555 17 +3 0.183687529 1 +4 0.000350207 18 +3 0.087651959 1 +4 0.000354004 18 +3 0.095470793 1 +4 0.000329564 18 +3 0.344080703 1 +4 0.000407214 18 +3 0.375679144 1 +4 0.000386215 18 +3 0.151253567 1 +4 0.000376792 18 +3 0.368260780 1 +4 0.000426592 18 +3 0.463141441 2 +4 0.000372831 39 +3 0.499616728 1 +4 0.000349728 20 +3 0.083258270 1 +4 0.000321692 19 +3 0.082820913 1 +4 0.000371649 17 +3 0.083827042 1 +4 0.000332168 20 +3 0.083185308 1 +4 0.000332464 17 +3 0.083697529 1 +4 0.000339107 17 +3 0.083415893 1 +4 0.000364753 19 +3 0.083598749 1 +4 0.000352820 16 +3 0.083088290 1 +4 0.000427827 21 +3 0.083525197 1 +4 0.000368018 14 +3 0.506039084 1 +4 0.000379518 13 +3 0.095386336 1 +4 0.000367863 16 +3 0.161923430 1 +4 0.000354726 18 +3 0.157560479 1 +4 0.000358988 18 +3 0.423659737 1 +4 0.000353732 17 +3 0.847670925 1 +4 0.000393746 17 +3 0.431620650 1 +4 0.000403175 17 +3 1.167679625 1 +4 0.000387411 79 +3 0.249536457 1 +4 0.000365653 79 +3 0.605670872 1 +4 0.000369650 79 +3 1.783802629 2 +4 0.000379593 18 +3 0.186118123 1 +4 0.000378437 47 +3 0.180976931 1 +4 0.000351710 20 +3 0.217856920 1 +4 0.000408993 17 +3 3.517731838 1 +4 0.000373305 17 +3 0.201450541 1 +4 0.000356815 19 +3 0.245571264 1 +4 0.000341944 20 +3 0.239848248 1 +4 0.000359928 17 +3 0.311511301 1 +4 0.000351362 17 +3 0.161756301 1 +4 0.000334570 18 +3 0.205588500 1 +4 0.000426037 17 +3 0.169868284 1 +4 0.000338882 17 +3 0.109390361 1 +4 0.000355237 23 +3 0.151655281 1 +4 0.000384306 24 +3 0.327530229 1 +4 0.000345480 9 +3 0.127757608 1 +4 0.000403946 1 +3 0.175935105 1 +4 0.000454742 11 +4 0.000420094 61 +3 1.103044519 1 +4 0.000612613 922 +3 0.415175455 1 +4 0.000358090 19 +3 0.527767062 1 +4 0.000379689 16 +3 0.351574936 1 +4 0.000384239 86 +3 0.500235440 1 +4 0.000400092 77 +3 0.082757413 1 +4 0.000376150 77 +3 0.083308781 1 +4 0.000340141 77 +3 0.082992475 1 +4 0.000435990 77 +3 0.178905212 1 +4 0.000364419 77 +3 0.173403319 1 +4 0.000354806 77 +3 0.225831910 1 +4 0.000359714 77 +3 0.749493093 1 +4 0.000391440 22 +3 0.191682853 1 +4 0.000370273 22 +3 0.223780980 1 +4 0.000332007 16 +3 0.217892668 1 +4 0.000356396 17 +3 0.165424257 1 +4 0.000364054 16 +3 0.287407138 1 +4 0.000385048 16 +3 0.113280849 1 +4 0.000358545 22 +3 0.150104957 1 +4 0.000385980 23 +3 0.303582804 1 +4 0.000361146 19 +3 0.743725373 1 +4 0.000360773 16 +3 1.167690376 1 +3 0.087968963 1 +4 0.000380787 4 +3 0.159570709 1 +3 0.072026816 1 +4 0.000350365 4 +3 0.287679924 1 +4 0.000368317 4 +3 0.169859422 1 +4 0.000673128 4 +3 7.632381569 1 +4 0.109950952 1 +3 1.959673015 1 +4 0.000376965 16 +3 1.287215620 1 +3 0.210513588 1 +4 0.000391697 98 +3 0.172921613 1 +3 0.154136665 1 +4 0.000415202 100 +3 0.141822554 1 +3 0.161743453 1 +4 0.000507720 46 +3 0.157412835 1 +3 0.162251948 1 +4 0.000409228 89 +3 0.157538347 1 +3 0.401929979 1 +4 0.000406217 101 +3 0.317547177 1 +4 0.000423142 10 +3 0.151581196 1 +4 0.000518330 1 +3 0.143492974 1 +4 0.000373153 1 +3 0.079624129 1 +4 0.000337376 1 +3 0.047604678 1 +4 0.000383266 1 +3 0.184669164 1 +4 0.000601798 918 +3 3.046839043 1 +4 0.000371088 17 +3 0.145363443 1 +4 0.000371312 18 +3 0.837658318 1 +4 0.000444343 24 +3 0.575418335 1 +4 0.000377676 39 +3 0.055609717 1 +4 0.000364620 39 +3 0.287765120 1 +4 0.000386080 40 +3 0.703784086 2 +4 0.000653224 828 +3 0.319288655 1 +4 0.000622814 874 +3 0.215393969 1 +4 0.000638096 800 +3 0.631478728 1 +4 0.000380618 8 +3 0.151549926 1 +4 0.000337736 1 +3 0.039574688 1 +4 0.000329953 1 +4 0.000375688 632 +3 0.135215715 1 +4 0.000359826 9 +3 0.255687730 1 +4 0.000415834 1 +3 0.135563818 1 +4 0.000346850 1 +3 0.367827358 1 +4 0.000369753 1 +3 0.103438993 1 +4 0.000352540 1 +3 0.103648809 1 +4 0.000327471 1 +3 0.071756608 1 +4 0.000380862 1 +3 0.183704141 1 +4 0.000601790 861 +3 1.415585005 1 +4 0.000682731 1087 +3 0.167337750 1 +4 0.000612615 728 +3 0.455244017 1 +4 0.000448561 31 +4 0.000374506 698 +3 0.745164190 1 +4 0.000372895 21 +3 1.309719317 1 +4 0.000599452 914 +3 0.255336273 1 +4 0.000354554 19 +3 0.825640669 1 +4 0.000387518 21 +3 1.621708460 1 +4 0.000355082 18 +3 0.255636360 1 +4 0.000373358 18 +3 0.199571666 1 +4 0.000368407 17 +3 1.007788881 1 +4 0.000374963 4 +3 0.201587592 1 +4 0.000358092 4 +3 0.133609220 1 +4 0.000452236 4 +3 0.145869939 1 +4 0.000382109 4 +3 0.149274181 1 +4 0.000343534 4 +3 0.145708143 1 +4 0.000351243 4 +3 0.437543032 1 +4 0.000399236 4 +3 0.289909705 1 +4 0.000334891 4 +3 2.605615048 1 +4 0.000409755 18 +3 0.295695513 1 +4 0.000378715 19 +3 0.153513460 1 +4 0.000349889 20 +3 0.213713492 1 +4 0.000411932 21 +3 0.401647731 1 +4 0.000377474 22 +3 0.797560567 1 +4 0.000396681 23 +3 0.425614010 1 +4 0.000359595 24 +3 0.549657260 1 +4 0.000349846 25 +3 2.551724694 1 +4 0.000399019 18 +3 0.499929100 1 +4 0.000352614 17 +3 0.083705797 1 +4 0.000380299 117 +3 0.082983597 1 +4 0.000377553 85 +3 0.082727485 1 +4 0.000455291 34 +3 0.083219394 1 +4 0.000374830 95 +3 0.083604190 1 +4 0.000388504 97 +3 0.169736721 1 +4 0.000350924 17 +3 0.499883640 1 +4 0.000361798 17 +3 0.082699677 1 +4 0.000340410 18 +3 0.082924380 1 +4 0.000368512 20 +3 0.083266795 1 +4 0.000404601 17 +3 0.082798017 1 +4 0.000374351 17 +3 0.082640844 1 +4 0.000347335 18 +3 0.083292975 1 +4 0.000426983 17 +3 0.286914609 1 +4 0.000340747 17 +3 0.295806957 1 +4 0.000376555 4 +3 0.500023921 1 +4 0.000363726 4 +3 0.082953992 1 +4 0.000433494 4 +3 0.082709404 1 +4 0.000336450 4 +3 0.083676007 1 +4 0.000364435 4 +3 0.082964062 1 +4 0.000340507 4 +3 0.082922325 1 +4 0.000365499 4 +3 0.788259159 1 +4 0.000370031 4 +3 1.253521471 1 +4 0.000391511 4 +3 6.599914770 1 +4 0.000380933 18 +3 0.319446621 1 +4 0.000385693 17 +3 3.439896624 1 +4 0.000432834 78 +3 0.500445476 1 +4 0.000417865 78 +3 0.702340298 1 +4 0.000370513 78 +3 0.496989320 1 +4 0.000420677 79 +3 0.083494250 1 +4 0.000359145 78 +3 0.083621482 1 +4 0.000402832 159 +3 0.084331945 1 +4 0.000340128 4 +3 0.742005260 1 +4 0.000404598 4 +3 0.353637154 1 +4 0.000363675 4 +3 5.509918559 1 +4 0.000383274 17 +3 1.479529377 1 +4 0.000380697 78 +3 0.500411556 1 +4 0.000459808 78 +3 0.082778013 1 +4 0.000340857 78 +3 0.083111298 1 +4 0.000404997 78 +3 0.082735630 1 +4 0.000384490 78 +3 0.083630656 1 +4 0.000371814 78 +3 0.359183488 1 +4 0.000355458 78 +3 0.189465730 1 +4 0.000356717 78 +3 0.553740617 1 +4 0.000452195 78 +3 1.621707077 1 +4 0.000382454 18 +3 0.207563026 1 +4 0.000345149 17 +3 0.177616185 1 +4 0.000463753 17 +3 0.133458797 1 +4 0.000328028 16 +3 0.311812562 1 +4 0.000375537 16 +3 0.209715537 1 +4 0.000365633 16 +3 0.213545705 1 +4 0.000386233 22 +3 0.167579291 1 +4 0.000372100 23 +3 0.135611283 1 +4 0.000410175 16 +3 0.209722417 1 +4 0.000362663 16 +3 0.157486100 1 +4 0.000350318 22 +3 0.231957603 1 +4 0.000371729 23 +3 0.512250024 1 +4 0.000429872 16 +3 0.550878919 1 +4 0.000376199 22 +3 0.135440425 1 +4 0.000332319 23 +3 0.170257807 1 +4 0.000325663 17 +3 0.285265098 1 +4 0.000363966 17 +3 0.201519231 1 +4 0.000339678 17 +3 0.181742156 1 +4 0.000331342 17 +3 0.170582676 1 +4 0.000354224 17 +3 0.204709227 1 +4 0.000332339 17 +3 0.521756570 1 +4 0.000364615 17 +3 0.197634097 1 +4 0.000336843 17 +3 0.255701032 1 +4 0.000382266 2 +3 0.159464709 1 +4 0.000368805 17 +3 0.169720266 1 +4 0.000348238 17 +3 0.165632676 1 +4 0.000349272 17 +3 0.351517390 1 +3 0.464418734 1 +4 0.000404631 2 +3 0.743489820 1 +4 0.000405586 17 +3 0.127375207 1 +4 0.000337043 18 +3 0.170141567 1 +4 0.000393307 18 +3 0.333178526 1 +4 0.000357925 17 +3 0.183833666 1 +4 0.000467932 78 +3 0.500190251 1 +4 0.000373160 78 +3 0.082685764 1 +4 0.000385147 78 +3 0.083008182 1 +4 0.000351039 78 +3 0.083037265 1 +4 0.000434460 78 +3 0.082892682 1 +4 0.000355135 78 +3 0.083533921 1 +4 0.000377191 78 +3 0.243935726 1 +4 0.000449754 78 +3 0.213479932 1 +4 0.000382132 78 +3 2.239710334 1 +4 0.000401714 9 +3 0.159516587 1 +4 0.000408303 1 +3 0.063670632 1 +4 0.000355716 1 +4 0.000381180 71 +3 3.663406855 1 +4 0.000379384 37 +3 0.201655132 1 +4 0.000378782 16 +3 0.182043250 1 +4 0.000334297 20 +3 0.153295765 1 +4 0.000329281 17 +3 0.645757822 1 +4 0.000363122 17 +3 0.351475229 1 +4 0.000338047 17 +3 0.231540164 1 +4 0.000365529 17 +3 0.287723036 1 +4 0.000345992 17 +3 0.500168935 1 +4 0.000408512 47 +3 0.082426580 1 +4 0.000367480 92 +3 0.083224488 1 +4 0.000370449 102 +3 0.116669549 1 +4 0.000346915 18 +3 0.500213750 1 +4 0.000350082 19 +3 0.083127552 1 +4 0.000360786 20 +3 0.082980819 1 +4 0.000363822 17 +3 6.310589126 1 +4 0.000394153 17 +3 0.498354169 1 +4 0.000387554 17 +3 0.083219103 1 +4 0.000342153 18 +3 0.083160066 1 +4 0.000360452 20 +3 0.083474179 1 +4 0.000333867 17 +3 0.083153173 1 +4 0.000345219 17 +3 0.082945600 1 +4 0.000324201 18 +3 0.082839985 1 +4 0.000400573 16 +3 0.253944964 1 +4 0.000364001 17 +3 0.303707859 1 +4 0.000380456 23 +3 0.319493883 1 +4 0.000337420 26 +3 0.439684657 2 +4 0.000456120 37 +3 0.231704010 1 +4 0.000364217 17 +3 0.279796722 1 +4 0.000405976 24 +3 0.343401231 1 +4 0.000388183 74 +3 0.303555553 2 +4 0.000394285 36 +3 0.439664416 1 +4 0.000382079 134 +3 0.215740167 1 +4 0.000413677 17 +3 0.154031244 1 +4 0.000370217 19 +3 0.317173508 1 +4 0.000398654 20 +3 0.312109507 1 +4 0.000384129 133 +3 1.311086895 1 +4 0.000468258 17 +3 0.247670264 1 +4 0.000566957 765 +3 2.135572935 1 +4 0.000401778 17 +3 0.559496218 1 +4 0.000356911 17 +3 0.257605602 1 +4 0.000370437 18 +3 0.557561536 1 +4 0.000365280 17 +3 0.183589462 1 +4 0.000407185 24 +3 0.335713990 1 +4 0.000399405 104 +3 0.455592372 2 +4 0.000428032 36 +3 0.201827538 1 +4 0.000396177 47 +3 0.165325141 1 +4 0.000398182 119 +3 0.169743508 1 +4 0.000503484 125 +3 0.197465764 1 +4 0.000403824 47 +3 0.367566207 1 +4 0.000345422 20 +3 0.499948646 1 +4 0.000450718 17 +3 0.082916345 1 +4 0.000334208 19 +3 0.083743043 1 +4 0.000365424 20 +3 0.668027305 1 +4 0.000344319 9 +3 0.127616885 1 +4 0.000389556 1 +3 0.063698609 1 +4 0.000367317 1 +4 0.000308014 14 +4 0.000311920 57 +3 3.103058907 1 +4 0.000420309 37 +3 0.281430416 1 +4 0.000391572 20 +3 0.653620110 1 +4 0.000346649 17 +3 0.441696601 1 +4 0.000351826 19 +3 2.981870284 1 +4 0.000420171 34 +3 0.945760713 1 +4 0.000431728 70 +3 14.926277405 1 +4 0.000381836 17 +3 0.500010040 1 +4 0.000418235 18 +3 0.083287212 1 +4 0.000331118 20 +3 0.083248663 1 +4 0.000425143 17 +3 0.083076968 1 +4 0.000322811 19 +3 0.082702205 1 +4 0.000337987 20 +3 0.575256615 1 +4 0.000363130 17 +3 0.677561508 1 +4 0.000396849 17 +3 0.500089770 1 +4 0.000405668 17 +3 0.082727833 1 +4 0.000337580 17 +3 0.083052744 1 +4 0.000341862 18 +3 0.083609893 1 +4 0.000352462 17 +3 0.082848311 1 +4 0.000321241 17 +3 0.083823926 1 +4 0.000348848 17 +3 0.082284757 1 +4 0.000328215 18 +3 0.083189559 1 +4 0.000355194 17 +3 0.082971342 1 +4 0.000357883 18 +3 0.083156952 1 +4 0.000344987 17 +3 0.082919646 1 +4 0.000320014 18 +3 0.083883272 1 +4 0.000332894 17 +3 0.082801049 1 +4 0.000335230 17 +3 0.083369966 1 +4 0.000331249 18 +3 0.083247646 1 +4 0.000409715 17 +3 0.083043049 1 +4 0.000342522 14 +3 0.084233866 1 +4 0.000339196 16 +3 0.082430678 1 +4 0.000338452 16 +3 0.495768575 1 +4 0.000369233 18 +3 3.663651029 1 +4 0.000357787 17 +3 0.311840767 1 +4 0.000358067 22 +3 0.447516612 1 +4 0.000444672 31 +3 0.527438065 2 +4 0.000368557 24 +3 0.145854319 1 +4 0.000357463 17 +3 0.389686435 1 +4 0.000377187 17 +3 0.295524943 1 +4 0.000347405 31 +3 0.431602915 1 +4 0.000385636 42 +3 0.351714465 1 +4 0.000396298 30 +3 1.175715288 2 +4 0.000417190 37 +3 0.359523623 1 +4 0.000350170 17 +3 0.287663316 1 +4 0.000361177 31 +3 0.287672759 1 +4 0.000377838 43 +3 0.487561501 1 +4 0.000392311 31 +3 0.623635902 2 +4 0.000416460 22 +3 0.231611039 1 +4 0.000358732 24 +3 0.271842044 1 +4 0.000406813 26 +3 0.343370365 2 +4 0.000380928 33 +3 0.170726284 1 +4 0.000380691 17 +3 0.180613035 1 +4 0.000350015 17 +3 0.439559561 1 +4 0.000350252 16 +3 0.169573482 1 +4 0.000362390 18 +3 0.157768876 1 +4 0.000333562 24 +3 0.327944225 1 +4 0.000376491 33 +3 0.823624768 1 +4 0.109929671 33 +3 11.346442722 1 +4 0.000384715 17 +3 0.135385039 1 +4 0.000346971 16 +3 0.153650783 1 +4 0.000366514 18 +3 0.181638007 1 +4 0.000355682 18 +3 0.304121026 1 +4 0.000348081 17 +3 0.185381126 1 +4 0.000349748 17 +3 0.237505223 1 +4 0.000355453 24 +3 1.863642855 1 +4 0.000413811 109 +3 1.328116581 1 +4 0.000406424 109 +3 0.527169793 1 +4 0.000378795 109 +3 0.279499340 1 +4 0.000384060 109 +3 0.695805322 1 +4 0.000379395 109 +3 0.327475776 1 +4 0.000400691 126 +3 0.287808853 1 +4 0.000365527 113 +3 0.811365647 1 +4 0.110066681 33 +3 3.790382320 1 +4 0.000384889 23 +3 2.559652278 1 +3 0.279861622 1 +4 0.000346426 23 +3 0.327756463 1 +4 0.000345382 17 +3 0.169619186 1 +4 0.000355833 18 +3 0.141625037 1 +4 0.000345513 17 +3 0.279692210 1 +4 0.000350600 17 +3 0.135688208 1 +4 0.000339452 23 +3 0.087794348 1 +4 0.000357403 24 +3 4.679945306 1 +4 0.000391928 19 +3 0.369277719 1 +4 0.000362685 20 +3 0.541904679 1 +3 0.169919904 1 +4 0.000407758 146 +3 0.189486320 1 +3 0.154049223 1 +4 0.000376602 116 +3 0.173563108 1 +3 0.122124061 1 +4 0.000379450 64 +3 0.485534711 1 +4 0.000431899 8 +3 0.143536054 1 +4 0.000322833 1 +3 0.103805995 1 +4 0.000353146 1 +4 0.000876790 10 +4 0.000394966 58 +3 0.366300801 1 +4 0.000446745 37 +3 0.169506941 1 +4 0.000361830 16 +3 0.157737806 1 +4 0.000384886 16 +3 0.249607015 1 +4 0.000427266 16 +3 0.181405289 1 +4 0.000362563 16 +3 0.143733834 1 +4 0.000354720 16 +3 0.500558910 1 +4 0.000415658 18 +3 0.083461755 1 +4 0.000349338 18 +3 0.082788023 1 +4 0.000359309 17 +3 0.082908063 1 +4 0.000324597 17 +3 3.224714789 1 +4 0.000379721 17 +3 0.499538503 1 +4 0.000353926 19 +3 0.083267339 1 +4 0.000360067 16 +3 0.083652153 1 +4 0.000335256 20 +3 0.083433569 1 +4 0.000356133 17 +3 0.082976121 1 +4 0.000390926 17 +3 0.083053557 1 +4 0.000419727 17 +3 0.082594671 1 +4 0.000405612 117 +3 0.082932847 1 +4 0.000421645 78 +3 0.082956612 1 +4 0.000375613 34 +3 0.083414152 1 +4 0.000636990 95 +3 0.291714750 1 +4 0.000490907 17 +3 0.499951467 1 +4 0.000568886 18 +3 0.082670852 1 +4 0.000498291 21 +3 0.082713051 1 +4 0.000590882 17 +3 0.083230712 1 +4 0.000519918 17 +3 0.083090766 1 +4 0.000561212 17 +3 1.709356913 1 +4 0.000384305 17 +3 0.499886762 1 +4 0.000363184 17 +3 0.083006562 1 +4 0.000345084 17 +3 0.083533142 1 +4 0.000346778 20 +3 0.083482127 1 +4 0.000365645 16 +3 0.083693772 1 +4 0.000322166 20 +3 0.083716517 1 +4 0.000396755 97 +3 0.082845649 1 +4 0.000373926 98 +3 0.083463729 1 +4 0.000382354 47 +3 0.082898629 1 +4 0.000381183 92 +3 0.083018539 1 +4 0.000389878 101 +3 0.083403555 1 +4 0.000388824 47 +3 0.175108423 1 +4 0.000347562 20 +3 0.217146999 1 +4 0.000350923 17 +3 0.165603007 1 +4 0.000346764 19 +3 0.137694771 1 +4 0.000349303 20 +3 0.157613162 1 +4 0.000382712 17 +3 0.167650866 1 +4 0.000342564 17 +3 0.311745700 1 +4 0.000378919 17 +3 0.153516781 1 +4 0.000389323 17 +3 0.325654480 1 +4 0.000391744 21 +3 0.169688353 1 +4 0.000357614 4 +3 0.157534808 1 +4 0.000353330 4 +3 0.154886136 1 +4 0.000425480 4 +3 0.124415471 1 +4 0.000353887 4 +3 0.137713377 1 +4 0.000385011 4 +3 0.149458119 1 +4 0.000354594 4 +3 0.121685638 1 +4 0.000361286 4 +3 0.973709966 1 +4 0.000376678 17 +3 1.009665186 1 +4 0.000377569 19 +3 0.205524115 1 +4 0.000387418 20 +3 0.495785323 1 +4 0.000385730 4 +3 0.499647967 1 +4 0.000375708 4 +3 0.083155548 1 +4 0.000381245 4 +3 0.083038932 1 +4 0.000350367 4 +3 0.083074377 1 +4 0.000350422 4 +3 0.082811653 1 +4 0.000345684 4 +3 0.082843827 1 +4 0.000429483 4 +3 0.082536445 1 +4 0.000329136 4 +3 0.744076080 1 +4 0.000388774 17 +3 0.303425704 1 +4 0.000346177 18 +3 0.119614101 1 +4 0.000332779 17 +3 0.140024791 1 +4 0.000347506 17 +3 0.107287043 1 +4 0.000413799 23 +3 0.207633584 1 +4 0.000427452 24 +3 0.495798375 1 +4 0.000591242 838 +3 0.415387430 1 +4 0.000400310 18 +3 0.185488924 1 +4 0.000353861 17 +3 0.165759249 1 +4 0.000397123 20 +3 0.169620639 1 +4 0.000359521 16 +3 0.718012984 1 +4 0.000402799 16 +3 0.177357060 1 +4 0.000365666 17 +3 0.325489631 1 +4 0.000397737 16 +3 0.167680709 1 +4 0.000400409 4 +3 0.499983596 1 +4 0.000443905 4 +3 0.082783046 1 +4 0.000424726 4 +3 0.082516554 1 +4 0.000366547 4 +3 0.083271276 1 +4 0.000338383 4 +3 0.083111548 1 +4 0.000445116 4 +3 0.082715200 1 +4 0.000343684 4 +3 0.444670136 1 +4 0.000424947 4 +3 1.461772429 1 +4 0.000372625 16 +3 0.161544881 1 +4 0.000389758 18 +3 0.133779295 1 +4 0.000356464 19 +3 0.375657353 1 +4 0.000409811 4 +3 0.500130550 1 +4 0.000446349 4 +3 0.084072290 1 +4 0.000405097 4 +3 0.081983605 1 +4 0.000433410 4 +3 0.083212407 1 +4 0.000385627 4 +3 0.082625138 1 +4 0.000355126 4 +3 0.082970102 1 +4 0.000433675 4 +3 0.083703605 1 +4 0.000355807 4 +3 0.941974868 1 +4 0.000401594 16 +3 0.287662486 1 +4 0.000370377 17 +3 0.175662421 1 +4 0.000450268 16 +3 0.137429599 1 +4 0.000349171 16 +3 0.117702694 1 +4 0.000364947 22 +3 0.207886655 1 +4 0.000341449 23 +3 1.104204534 1 +4 0.000595586 19 +3 0.499726414 1 +4 0.000412254 17 +3 0.082763129 1 +4 0.000422345 20 +3 0.083462409 1 +4 0.000367752 20 +3 0.083536698 1 +4 0.000350644 21 +3 0.663735900 1 +4 0.000378557 21 +3 0.263573715 1 +4 0.000380666 17 +3 0.047575241 1 +4 0.000343907 16 +3 0.170558034 1 +4 0.000366080 18 +3 0.156796717 1 +4 0.000415633 18 +3 0.359565909 1 +4 0.000389897 18 +3 0.119534956 1 +4 0.000333576 18 +3 0.225726019 1 +4 0.000418449 17 +3 0.205589490 1 +4 0.000353991 4 +3 0.499804267 1 +4 0.000354127 4 +3 0.083319670 1 +4 0.000579498 4 +3 0.082781763 1 +4 0.000385999 4 +3 0.082551312 1 +4 0.000360121 4 +3 0.083515411 1 +4 0.000336331 4 +3 0.084003421 1 +4 0.000330381 4 +3 0.363489014 1 +4 0.000365388 4 +3 0.165517621 1 +4 0.000341948 18 +3 0.201602455 1 +4 0.000426000 19 +3 0.269700353 1 +4 0.000346176 20 +3 0.287606038 1 +4 0.000387541 79 +3 0.500757622 1 +4 0.000381185 79 +3 0.082492019 1 +4 0.000348990 79 +3 0.083543179 1 +4 0.000357938 79 +3 0.083056603 1 +4 0.000356201 79 +3 0.082954796 1 +4 0.000390463 79 +3 0.083051835 1 +4 0.000340912 79 +3 0.082798583 1 +4 0.000374209 79 +3 1.262590706 1 +4 0.000395391 17 +3 0.199750642 1 +4 0.000340637 20 +3 0.287499305 1 +4 0.000344857 17 +3 0.153627834 1 +4 0.000361415 17 +3 0.133617182 1 +4 0.000423563 23 +3 0.183659316 1 +4 0.000363558 24 +3 0.175599840 1 +4 0.000340404 19 +3 0.241835755 1 +4 0.000348606 16 +3 0.229516546 1 +4 0.000345795 17 +3 0.185609469 1 +4 0.000340789 18 +3 0.149637670 1 +4 0.000345723 18 +3 0.500791570 1 +4 0.000445016 47 +3 0.082583390 1 +4 0.000377035 83 +3 0.083365873 1 +4 0.000460660 92 +3 0.082824087 1 +4 0.000376083 47 +3 0.083414413 1 +4 0.000371807 112 +3 0.083491880 1 +4 0.000376482 86 +3 0.083854113 1 +4 0.000371886 47 +3 0.300784350 1 +4 0.000492564 20 +3 0.499820846 1 +4 0.000378588 17 +3 0.083179389 1 +4 0.000362515 19 +3 0.083469929 1 +4 0.000340053 20 +3 0.082670043 1 +4 0.000349875 20 +3 0.083500008 1 +4 0.000342594 20 +3 0.082973318 1 +4 0.000343174 20 +3 0.217746683 1 +4 0.000363125 17 +3 0.128338762 1 +4 0.000334453 18 +3 0.168770898 1 +4 0.000443666 18 +3 0.213671488 1 +4 0.000328120 17 +3 0.025716945 1 +4 0.000370642 17 +3 0.357758108 1 +4 0.000351117 17 +3 0.169543519 1 +4 0.000392530 17 +3 0.141609781 1 +4 0.000347500 17 +3 0.727612317 1 +4 0.000399071 4 +3 0.187152626 1 +4 0.000362028 4 +3 0.148122889 1 +4 0.000444145 4 +3 0.145526596 1 +4 0.000342455 4 +3 0.197732554 1 +4 0.000376040 4 +3 0.177643966 1 +4 0.000342032 4 +3 0.181679284 1 +4 0.000394013 4 +3 0.593474459 1 +4 0.000369757 4 +3 0.237802186 1 +4 0.000452974 17 +3 0.201487042 1 +4 0.000346969 19 +3 0.181551425 1 +4 0.000373977 21 +3 0.711760029 1 +3 0.088219534 1 +4 0.000357894 4 +3 1.759548545 1 +4 0.000542106 17 +3 0.217450484 1 +4 0.000543141 19 +3 0.277457836 1 +4 0.000376117 20 +3 0.399547567 1 +4 0.000372843 4 +3 0.239770273 1 +4 0.000341606 17 +3 0.239459643 1 +4 0.000354375 18 +3 0.167748072 1 +4 0.000368185 17 +3 0.161714100 1 +4 0.000331686 17 +3 0.141647695 1 +4 0.000343859 23 +3 0.175629679 1 +4 0.000372694 24 +3 0.103554779 1 +4 0.000439057 19 +3 0.169664638 1 +4 0.000417062 95 +3 0.165604493 1 +4 0.000408782 93 +3 0.169626978 1 +4 0.000388267 47 +3 0.197489319 1 +4 0.000353575 20 +3 0.169870056 1 +4 0.000355273 17 +3 0.213649084 1 +4 0.000350989 17 +3 0.047486240 1 +4 0.000324129 16 +3 0.161671274 1 +4 0.000346250 18 +3 0.141689031 1 +4 0.000379799 18 +3 0.183639098 1 +4 0.000335563 17 +3 0.431604394 1 +3 0.072073842 1 +4 0.000397484 4 +3 0.199608915 1 +4 0.000333885 17 +3 0.711716130 1 +4 0.000444465 18 +3 0.111475471 1 +4 0.000342124 16 +3 0.143705701 1 +4 0.000364229 1 +3 0.072023722 1 +4 0.000315558 1 +3 0.447214710 2 +4 0.000338835 1 +4 0.000399088 67 +3 0.162072418 1 +4 0.000343971 4 +3 0.492889031 1 +4 0.000433418 17 +3 0.183511417 1 +4 0.000338202 18 +3 0.151760080 1 +4 0.000353876 18 +3 0.177669887 1 +4 0.000373866 17 +3 0.101681943 1 +4 0.000427001 23 +3 0.167488100 1 +4 0.000346252 24 +3 0.079733083 1 +4 0.000378997 19 +3 0.161602206 1 +4 0.000383186 34 +3 0.158769842 1 +4 0.000424969 82 +3 0.168544633 1 +4 0.000383672 115 +3 0.469599939 1 +4 0.000497017 116 +3 0.169647661 1 +4 0.000401025 92 +3 0.181501628 1 +4 0.000412609 47 +3 0.201461558 1 +4 0.000376930 34 +3 0.469729442 1 +4 0.000517278 18 +3 3.634148108 1 +4 0.000353365 20 +3 0.197171038 1 +4 0.000395122 20 +3 0.439500765 1 +4 0.000381673 20 +3 0.319544893 1 +4 0.000367765 17 +3 0.153726098 1 +4 0.000350973 17 +3 0.149624446 1 +4 0.000421456 17 +3 0.095585004 1 +4 0.000353419 23 +3 0.439530502 2 +4 0.000366432 29 +3 0.144480307 1 +4 0.000346839 23 +3 0.214910498 1 +4 0.000544866 24 +3 0.239634133 1 +4 0.000347315 17 +3 0.151450031 1 +4 0.000421811 18 +3 0.193713288 1 +4 0.000350838 18 +3 0.053541780 1 +4 0.000395381 17 +3 0.159637998 1 +4 0.000349715 17 +3 0.343839411 1 +4 0.000424118 17 +3 0.169593905 1 +4 0.000361401 17 +3 0.213455686 1 +3 0.088162845 1 +4 0.000349742 4 +3 0.807653749 1 +4 0.000590419 811 +3 0.327398399 1 +4 0.000350294 10 +3 0.135653423 1 +4 0.000360454 1 +3 0.119713405 1 +4 0.000366595 1 +4 0.000367560 69 +3 0.391102699 1 +4 0.000393085 36 +3 0.171125079 1 +4 0.000346290 17 +3 0.164187638 1 +4 0.000370940 15 +3 0.279596206 1 +4 0.000339502 17 +3 0.187105726 1 +4 0.000333155 17 +3 0.468493314 1 +4 0.000376724 16 +3 0.463535375 1 +3 0.151953765 1 +4 0.000383799 20 +3 0.335625730 1 +4 0.000356158 16 +3 0.177858248 1 +4 0.000444427 18 +3 0.318031680 1 +4 0.000354948 20 +3 0.598943884 1 +4 0.000419828 4 +3 0.376477818 1 +4 0.000405880 16 +3 0.200943755 1 +4 0.000380972 18 +3 0.197394866 1 +4 0.000346636 20 +3 0.311586026 1 +4 0.000444641 4 +3 0.343674151 1 +4 0.000364287 17 +3 0.169615881 1 +4 0.000388487 19 +3 0.181685338 1 +4 0.000348924 20 +3 1.599598489 1 +4 0.000580054 4 +3 0.383449244 1 +4 0.000377671 17 +3 0.185655545 1 +4 0.000488395 19 +3 0.165740137 1 +4 0.000484289 20 +3 0.407297798 1 +4 0.000410615 4 +3 0.239601119 1 +4 0.000369584 19 +3 0.199583063 1 +4 0.000379429 18 +3 0.199690679 1 +4 0.000387326 17 +3 0.185636739 1 +4 0.000375703 17 +3 0.389683301 1 +4 0.000375682 23 +3 0.168057557 1 +4 0.000387858 24 +3 0.343110087 1 +4 0.000351349 19 +3 0.201702332 1 +4 0.000364174 16 +3 0.189587561 1 +4 0.000338508 20 +3 0.233660534 1 +4 0.000392796 19 +3 1.573761567 1 +4 0.000390660 9 +3 0.095555823 1 +4 0.000343815 1 +3 0.159632041 1 +4 0.000337522 1 +3 0.079673356 1 +4 0.000359858 1 +4 0.000980505 10 +4 0.000359183 61 +3 0.342306424 1 +4 0.000389909 35 +3 0.500321479 1 +4 0.000444199 51 +3 0.083255876 1 +4 0.000405104 34 +3 0.082790624 1 +4 0.000375824 63 +3 0.172274916 1 +4 0.000340301 17 +3 0.500388717 1 +4 0.000371203 18 +3 0.083013323 1 +4 0.000343404 20 +3 0.083474899 1 +4 0.000325347 17 +3 0.083312871 1 +4 0.000372762 19 +3 0.083168494 1 +4 0.000358499 17 +3 0.082694849 1 +4 0.000328069 18 +3 0.083686067 1 +4 0.000327436 20 +3 0.082873073 1 +4 0.000334989 19 +3 7.891431332 1 +4 0.000664983 937 +3 0.286472250 1 +4 0.000579445 770 +3 0.247373909 1 +4 0.000576050 932 +3 0.455528649 1 +4 0.000573675 716 +3 0.383576281 1 +4 0.000669928 615 +3 0.551140399 1 +4 0.000697621 647 +3 1.335153592 1 +4 0.000522782 15 +3 0.500175251 1 +4 0.000382502 15 +3 0.083026774 1 +4 0.000352613 16 +3 0.083259074 1 +4 0.000372923 15 +3 0.083595977 1 +4 0.000378020 17 +3 0.082989066 1 +4 0.000411759 17 +3 0.188640354 1 +4 0.000355060 16 +3 0.247867350 1 +4 0.000468442 22 +3 1.399357655 1 +4 0.000366174 18 +3 0.759786035 1 +4 0.000413566 18 +3 0.071606423 1 +4 0.000394679 18 +3 0.112732241 1 +4 0.000412462 18 +3 0.118313899 1 +4 0.000430946 18 +3 0.071392479 1 +4 0.000368698 18 +3 0.103767191 1 +4 0.000387429 19 +3 0.721284357 1 +4 0.110006112 33 +3 0.424351588 1 +4 0.000378997 16 +3 0.161596483 1 +4 0.000498455 16 +3 0.349667671 1 +4 0.000375140 23 +3 0.223531420 1 +4 0.000411806 25 +3 0.991724465 1 +4 0.000381443 25 +3 0.167557833 1 +4 0.000442192 25 +3 0.137535956 1 +4 0.000360285 27 +3 0.117626571 1 +4 0.000390086 25 +3 0.703759347 1 +4 0.000371237 25 +3 0.119686952 1 +4 0.000374561 26 +3 0.191588087 1 +4 0.000395497 25 +3 0.088293034 1 +4 0.000380320 25 +3 0.742746392 2 +4 0.105697838 37 +3 0.023053975 1 +4 0.000383199 17 +3 0.126989308 1 +4 0.000356697 15 +3 0.751825140 1 +4 0.000381633 15 +3 1.159592105 1 +4 0.000371959 18 +3 0.151667092 1 +4 0.000393159 15 +3 0.423468492 1 +4 0.000361709 18 +3 0.143701173 1 +4 0.000417394 16 +3 0.135456882 1 +4 0.000361989 17 +3 0.151678345 1 +4 0.000369964 17 +3 0.135731878 1 +4 0.000344024 17 +3 2.919857971 1 +4 0.000396250 16 +3 0.279536198 1 +4 0.000398445 17 +3 0.511886168 1 +4 0.000397594 16 +3 0.231441322 1 +4 0.000356468 17 +3 0.103510344 1 +4 0.000380772 16 +3 0.135673632 1 +4 0.000350063 17 +3 0.135497894 1 +4 0.000436801 17 +3 0.095578070 1 +4 0.000354244 18 +3 0.135695039 1 +4 0.000452497 17 +3 0.055691179 1 +4 0.000363124 17 +3 0.143563638 1 +4 0.000361664 17 +3 0.399694195 1 +4 0.000367626 16 +3 0.231529790 1 +4 0.000433258 17 +3 0.063518663 1 +4 0.000336569 17 +3 0.063690859 1 +4 0.000359410 16 +3 0.200158477 1 +4 0.000396737 17 +3 0.167138258 1 +4 0.000376001 17 +3 0.055644122 1 +4 0.000374781 18 +3 0.167654564 1 +4 0.000349898 17 +3 0.063605224 1 +4 0.000354548 16 +3 0.152392989 1 +4 0.000354777 17 +3 0.062843544 1 +4 0.000342127 17 +3 0.103807551 1 +4 0.000404765 17 +3 0.111572012 1 +4 0.000351588 17 +3 0.367715454 2 +4 0.000376739 10 +3 0.111597239 1 +4 0.000337430 1 +3 0.207800105 1 +4 0.000373721 1 +3 0.927574858 1 +4 0.000378119 1 +4 0.000910395 10 +4 0.000349291 60 +3 13.327831835 1 +4 0.000645291 927 +3 0.526431244 1 +4 0.000596756 751 +3 0.567378071 1 +4 0.000653579 861 +3 0.439652125 1 +4 0.000583643 774 +3 1.063130218 1 +4 0.000562647 610 +3 2.735568898 1 +4 0.000545164 558 +3 0.591456258 1 +4 0.000606715 830 +3 1.023525670 1 +4 0.000649515 694 +3 0.455261151 1 +4 0.000556382 473 +3 1.135566027 1 +4 0.000598606 612 +3 0.231338607 1 +4 0.000627040 879 +3 0.215256263 1 +4 0.000554070 616 +3 0.191478140 1 +4 0.000579073 606 +3 0.719585214 1 +4 0.000578407 753 +3 19.504875154 1 +4 0.000361189 34 +7 0.000562995 TSTP +7 3.126512649 CONT +4 0.000588769 7 +4 0.000380269 7 +4 0.000354194 750 +3 311.641897994 1 +4 0.000604112 877 +3 0.998748534 1 +4 0.000585499 736 +3 0.543243285 1 +4 0.000590598 920 +3 1.215382810 1 +4 0.000626907 748 +3 0.759577586 1 +4 0.000378405 16 +3 0.500355277 1 +4 0.000378008 16 +3 0.082934555 1 +4 0.000333983 16 +3 0.083181849 1 +4 0.000345495 16 +3 0.083045391 1 +4 0.000332502 18 +3 0.322425180 1 +4 0.000333350 16 +3 0.189693383 1 +4 0.000364966 16 +3 0.151719082 1 +4 0.000328601 16 +3 0.201621575 1 +4 0.000353389 16 +3 0.317554951 1 +4 0.000368242 16 +3 0.169513519 1 +4 0.000344426 16 +3 4.302883350 1 +3 0.183082352 1 +3 0.130055613 1 +4 0.000367496 29 +3 0.333626376 1 +4 0.000364249 37 +3 0.169648346 1 +4 0.000332523 16 +3 0.213809620 1 +4 0.000450185 131 +3 0.383346101 1 +4 0.000393992 126 +3 0.295802735 2 +4 0.000356949 34 +3 0.137805466 1 +4 0.000356504 16 +3 0.141251852 1 +4 0.000328164 18 +3 0.186312331 1 +4 0.000325851 18 +3 0.157293999 1 +4 0.000357570 17 +3 0.119801855 1 +4 0.000392268 17 +3 0.711658819 1 +3 0.079877700 1 +4 0.000364041 28 +3 0.191593101 1 +4 0.000405981 18 +3 0.111644357 1 +4 0.000330638 18 +3 0.111417820 1 +4 0.000400641 18 +3 0.215732039 1 +4 0.000356014 18 +3 0.423839652 2 +4 0.000368967 36 +3 1.359666507 1 +4 0.000360121 17 +3 22.696217775 2 +4 0.000364050 18 +3 0.240160250 1 +4 0.000372361 17 +3 2.479207069 1 +3 0.071960936 1 +4 0.000361362 28 +3 0.175536104 1 +4 0.000345406 18 +3 0.111798617 1 +4 0.000344638 18 +3 0.135680226 1 +4 0.000374027 18 +3 0.175718654 1 +4 0.000354925 18 +3 0.543588816 2 +4 0.000353300 33 +3 0.407616585 1 +4 0.000341374 17 +3 0.153794364 1 +4 0.000357012 17 +3 2.813745145 1 +4 0.000360069 24 +3 3.687602308 2 +4 0.000404036 33 +3 0.423620674 1 +4 0.000373787 17 +3 2.545818720 1 +4 0.000377595 17 +3 0.781588378 1 +4 0.000374532 24 +3 1.895694680 1 +4 0.000362996 21 +3 0.137583514 1 +4 0.000363227 23 +3 0.125608581 1 +4 0.000354598 21 +3 0.255686021 1 +4 0.000384391 19 +3 0.129658171 1 +4 0.000383271 20 +3 0.109489916 1 +4 0.000431427 17 +3 13.248049988 2 +4 0.000424076 31 +3 0.319697438 1 +4 0.000367284 20 +3 0.671588544 1 +4 0.000382924 49 +3 0.800196597 1 +4 0.000395701 16 +3 0.168100866 1 +4 0.000346183 16 +3 0.110656936 1 +4 0.000371000 18 +3 1.584289938 1 +4 0.000362400 18 +3 0.199015099 1 +4 0.000442427 18 +3 0.129483498 1 +4 0.000348687 18 +3 0.189607259 1 +4 0.000393515 18 +3 0.167777309 1 +4 0.000361169 17 +3 3.546079966 15 +4 0.000455112 33 +3 9.347909578 1 +4 0.109990815 33 +3 0.627551628 1 +4 0.000381786 18 +3 0.399697487 1 +4 0.000395214 29 +3 0.243427135 13 +4 0.000446506 31 +3 1.248157353 1 +4 0.109995515 34 +3 4.490067760 1 +3 0.083856092 1 +4 0.000387412 16 +3 0.528023063 1 +3 0.153386148 1 +4 0.000397320 74 +3 0.413628130 1 +4 0.000351231 18 +3 0.471818832 1 +4 0.000500237 25 +3 0.207428342 1 +4 0.000377993 19 +3 0.311628436 2 +4 0.000388215 9 +3 0.143596403 1 +4 0.000347411 1 +3 0.175732792 1 +4 0.000407666 1 +3 0.079541562 1 +4 0.000370632 1 +4 0.000314804 54 +4 0.000331122 15 +3 52.370415160 1 +4 0.000650054 891 +3 0.589851841 1 +4 0.000625414 814 +3 0.559417946 1 +4 0.000662742 922 +3 2.183633578 1 +4 0.000600612 797 +3 1.111368831 1 +4 0.000580402 680 +3 3.023420204 1 +4 0.000783246 783 +3 0.303155855 1 +4 0.000851199 923 +3 0.383194869 1 +4 0.000791889 809 +3 0.607230184 1 +4 0.000745230 883 +3 2.695368393 1 +4 0.000589889 689 +3 2.607443931 1 +4 0.000423971 18 +3 0.249494793 1 +4 0.000343334 16 +3 25.495109330 1 +4 0.000397043 16 +3 0.185120056 1 +4 0.000355099 16 +3 0.151116361 1 +4 0.000361796 18 +3 0.160043361 1 +4 0.000346922 16 +3 0.301642111 1 +3 0.137906881 1 +4 0.000349964 28 +3 0.205709678 1 +4 0.000366959 37 +3 0.162539226 1 +4 0.000344278 16 +3 0.156614882 1 +4 0.000390682 18 +3 0.217739910 1 +4 0.000412163 16 +3 0.293620538 1 +4 0.000371324 71 +3 4.383928242 1 +4 0.000384727 18 +3 0.201504645 1 +4 0.000342978 17 +3 1.421781402 1 +3 0.055847564 1 +4 0.000363371 28 +3 0.255754333 1 +4 0.000376076 18 +3 0.159453995 1 +4 0.000341660 18 +3 0.136324941 1 +4 0.000381340 18 +3 0.246976566 1 +4 0.000365764 18 +3 0.782015232 1 +4 0.110026089 33 +3 1.003877816 1 +4 0.000423505 9 +3 0.127449232 1 +4 0.000350303 1 +3 0.159619209 1 +4 0.000328406 1 +3 0.192771301 1 +4 0.000410219 1 +4 0.000369259 10 +4 0.000297636 61 +3 9.231636766 1 +4 0.000364204 35 +7 0.000533543 TSTP +7 1.677861371 CONT +4 0.000709404 7 +4 0.000258601 722 +3 3.296041959 1 +4 0.000394331 35 +7 0.000524420 TSTP +7 9.622426511 CONT +4 0.000536008 7 +4 0.000294990 664 +3 32.720725744 1 +4 0.000462659 17 +3 0.359159217 1 +3 0.138045550 1 +4 0.000394501 81 +3 0.053564869 1 +4 0.000376500 63 +3 41.185576701 1 +4 0.000378621 17 +3 0.374911082 1 +3 0.130036236 1 +4 0.000385894 54 +3 0.077434689 1 +4 0.000387997 61 +3 3.256007840 1 +4 0.000380680 9 +3 0.111427215 1 +4 0.000329944 1 +3 0.151767387 1 +4 0.000401364 1 +3 0.119783561 1 +4 0.000357625 1 +4 0.000330857 14 +4 0.000321627 57 +3 26.432783973 1 +4 0.000360734 35 +7 0.000540272 TSTP +7 1.638401958 CONT +4 0.000620050 7 +4 0.000263276 722 +3 20.040125363 1 +4 0.000376103 19 +3 0.499356754 1 +4 0.000396980 35 +3 0.082717724 1 +4 0.000378205 94 +3 0.083076036 1 +4 0.000423738 89 +3 0.083778095 1 +4 0.000408547 94 +3 4.960955350 1 +4 0.000381038 17 +3 0.201194482 1 +4 0.000357095 17 +3 0.149608263 1 +4 0.000362816 17 +3 0.170104859 1 +4 0.000347020 19 +3 0.421481515 1 +4 0.000344429 20 +3 1.311561552 1 +4 0.000419294 18 +3 1.215535250 1 +4 0.000406120 23 +3 0.111510392 1 +4 0.000342121 19 +3 0.127732346 1 +4 0.000333493 19 +3 0.079906920 1 +4 0.000340861 20 +3 0.135354815 1 +4 0.000336685 19 +3 0.215895431 1 +4 0.000359662 16 +3 0.471864560 2 +4 0.000427681 9 +3 0.103542921 1 +4 0.000380301 1 +3 0.111394516 1 +4 0.000623447 1 +3 0.135586436 1 +4 0.000662568 11 +4 0.000491916 57 +3 0.367199525 1 +4 0.000417002 35 +7 0.000579930 TSTP +7 3.190750507 CONT +4 0.000593766 7 +4 0.000284779 774 +3 5.471359994 1 +4 0.000459874 16 +3 0.153533655 1 +4 0.000361816 20 +3 0.469318465 1 +3 0.007847296 1 +3 0.845079062 1 +3 0.035052113 1 +4 0.000355537 18 +3 0.208313541 1 +4 0.000436611 22 +3 0.206993239 1 +4 0.000425016 17 +3 0.231936612 2 +4 0.000426777 34 +3 0.159141599 1 +4 0.000405512 55 +3 0.135576787 1 +4 0.000343081 18 +3 0.175634789 1 +4 0.000441921 55 +3 0.072012783 1 +4 0.000351657 18 +3 0.127822426 1 +4 0.000455363 55 +3 0.327044101 1 +4 0.000375474 8 +3 0.063577551 1 +4 0.000349591 1 +3 0.159970670 1 +4 0.000353036 1 +3 0.103682984 1 +4 0.000424628 1 +4 0.000792283 10 +4 0.000364645 58 +3 1.078671651 1 +4 0.000391093 34 +7 0.000513596 TSTP +7 2.591065402 CONT +4 0.000601346 7 +4 0.000287188 791 +3 37.760831992 1 +4 0.000443768 14 +3 0.160747888 1 +4 0.000344691 14 +3 0.133686815 1 +4 0.000334620 14 +3 0.263782102 1 +4 0.000373509 44 +3 0.191557949 1 +4 0.000363541 16 +3 0.295618804 1 +4 0.000389317 16 +3 0.415866786 1 +4 0.000372879 19 +3 0.175714516 1 +4 0.000381307 18 +3 0.095311527 1 +4 0.000376169 18 +3 0.143728133 1 +4 0.000357376 17 +3 0.143807808 1 +4 0.000395966 18 +3 0.095362582 1 +4 0.000329435 17 +3 0.576008873 1 +4 0.000456409 18 +3 0.135118685 1 +4 0.000373175 18 +3 0.023614825 1 +4 0.000400278 18 +3 0.199667163 1 +4 0.000344809 18 +3 0.087976135 1 +4 0.000370895 18 +3 0.095574375 1 +4 0.000329680 18 +3 0.199431335 1 +4 0.000372131 18 +3 0.127554755 1 +4 0.000392708 18 +3 0.192014997 1 +4 0.000427810 18 +3 0.215260752 1 +4 0.000394722 18 +3 0.183626456 1 +4 0.000400192 18 +3 0.079732331 1 +4 0.000387065 17 +3 0.232420431 1 +4 0.000491812 18 +3 0.166613868 1 +4 0.000495342 18 +3 0.071768069 1 +4 0.000442951 19 +3 0.127220424 1 +4 0.000356692 18 +3 0.137877295 1 +4 0.000415021 17 +3 0.181293341 1 +4 0.000358763 18 +3 0.095706054 1 +4 0.000354026 18 +3 0.088033930 1 +4 0.000345101 17 +3 0.375264587 1 +4 0.000490245 18 +3 0.071473917 1 +4 0.000417871 18 +3 0.135625942 1 +4 0.000380041 18 +3 0.119745699 1 +4 0.000368423 18 +3 0.071518698 1 +4 0.000412694 19 +3 0.087535976 1 +4 0.000355199 18 +3 0.095721416 1 +4 0.000397695 17 +3 0.167747682 1 +4 0.000332670 18 +3 0.079805314 1 +4 0.000417932 18 +3 0.119643272 1 +4 0.000352331 18 +3 0.223328679 1 +4 0.000396868 18 +3 0.303678505 2 +4 0.000380271 9 +3 0.047529437 1 +4 0.000363105 1 +3 0.224008517 1 +4 0.000337254 1 +3 0.207354297 1 +4 0.000399690 1 +4 0.000906479 10 +4 0.000402682 61 +3 1444.511782296 1 +4 0.000357469 35 +3 1.342687924 1 +4 0.000366400 14 +3 0.407610514 1 +4 0.000351696 33 +3 0.520420433 1 +4 0.000350931 16 +3 0.230857014 1 +4 0.000341388 14 +3 0.159793954 1 +4 0.000346996 28 +3 0.159601748 1 +4 0.000366510 16 +3 0.247626520 1 +4 0.000406626 14 +3 0.143416056 1 +4 0.000355414 28 +3 0.143689211 1 +4 0.000331886 17 +3 0.247721225 1 +4 0.000343072 14 +3 0.112647575 1 +4 0.000342353 24 +3 0.222669051 1 +4 0.000339199 17 +3 0.185998654 1 +4 0.000370907 16 +3 1.949534608 1 +4 0.000351397 16 +3 3.199702184 1 +4 0.000367257 18 +3 0.177412774 1 +4 0.000310564 17 +3 0.149758084 1 +4 0.000399511 18 +3 0.137634608 1 +4 0.000328197 17 +3 0.630029674 1 +4 0.000364345 31 +3 0.008581525 1 +4 0.000315502 26 +3 0.606622757 1 +4 0.000342426 17 +3 0.183407419 1 +4 0.000354683 18 +3 0.551780711 2 +4 0.000353001 34 +3 0.319603902 1 +4 0.000324205 17 +3 37.505124390 2 +4 0.109937326 1 +4 0.000284505 53 +3 0.314168709 1 +4 0.000448015 16 +3 0.351243330 1 +4 0.000329283 14 +3 0.247724391 1 +4 0.000348110 19 +3 0.935489659 2 +4 0.000358535 34 +3 0.255623807 1 +4 0.000348768 1 +3 0.186146414 1 +4 0.000360970 1 +3 0.213625304 1 +4 0.000367568 16 +3 0.191209864 1 +4 0.000348053 30 +3 0.311505848 1 +4 0.000407475 19 +3 0.111493980 1 +4 0.000336532 18 +3 0.047993277 1 +4 0.000317649 17 +3 0.415678954 1 +4 0.000349863 18 +3 62.666060129 2 +4 0.000606532 931 +3 4.375431732 1 +4 0.000582261 864 +3 4.007561683 1 +4 0.000606428 920 +3 0.615130627 1 +4 0.000395265 152 +3 0.623644967 1 +4 0.000464766 85 +3 0.500366140 1 +4 0.000387863 36 +3 0.082937457 1 +4 0.000538294 46 +3 0.082774391 1 +4 0.000439587 69 +3 0.900148919 1 +4 0.000413634 15 +3 0.500630508 1 +4 0.000370006 17 +3 0.082212526 1 +4 0.000358776 17 +3 0.458020142 1 +4 0.000352446 15 +3 0.741673343 1 +3 0.153841053 1 +4 0.000382350 111 +3 8.134125152 1 +4 0.000409732 15 +3 0.185466395 1 +4 0.000328110 15 +3 0.101576738 1 +4 0.000327092 17 +3 0.185854954 1 +4 0.000335670 17 +3 0.149600279 1 +4 0.000362093 16 +3 0.423566779 1 +4 0.000340985 30 +3 0.247704807 1 +4 0.000415144 33 +3 0.698039358 1 +4 0.109954509 30 +3 1.183854845 1 +4 0.000587227 743 +3 6.823896413 1 +4 0.000639671 794 +3 3.543257902 1 +4 0.000353344 18 +3 0.217631915 1 +4 0.000336459 17 +3 0.197417741 1 +4 0.000349473 19 +3 0.187658067 1 +4 0.000335192 16 +3 151.345510542 1 +4 0.000365247 16 +3 0.590975836 1 +4 0.000393298 16 +3 0.463692786 1 +3 0.145831771 1 +4 0.000398722 114 +3 0.557795268 1 +4 0.000392380 52 +3 0.936298833 1 +4 0.000358777 15 +3 0.680089190 1 +4 0.000346781 17 +3 5.979960398 44 +4 0.000422221 96 +3 0.554367727 2 +3 0.162133998 1 +4 0.000396206 82 +3 0.141456616 1 +4 0.000407998 19 +3 0.191551242 1 +3 0.146260670 1 +4 0.000428847 112 +3 0.205228187 1 +4 0.000340512 16 +3 0.127846804 1 +4 0.000330859 16 +3 0.185792950 1 +4 0.000331302 16 +3 3.933610220 1 +4 0.000343234 16 +3 1.863725787 1 +4 0.000356375 23 +3 0.327644144 1 +4 0.000344743 48 +3 0.063482729 1 +4 0.000348582 48 +3 0.279936861 1 +4 0.000340867 48 +3 0.271691438 1 +4 0.000336898 48 +3 0.319538697 1 +4 0.000331634 48 +3 1.167651877 1 +4 0.000356329 48 +3 0.167654474 1 +4 0.000345840 49 +3 0.071693547 1 +4 0.000326721 48 +3 0.247570408 1 +4 0.000370740 48 +3 0.615741893 1 +4 0.000464667 16 +3 0.215612366 1 +4 0.000355715 17 +3 0.599537487 1 +4 0.000358534 48 +3 0.087817960 1 +4 0.000340005 48 +3 0.087692776 1 +4 0.000326620 48 +3 0.239713026 1 +4 0.000346762 48 +3 0.255488394 1 +4 0.000369661 48 +3 0.280455348 1 +4 0.000349905 48 +3 0.310991988 1 +4 0.000369127 16 +3 0.359660061 1 +4 0.000341556 17 +3 0.119479788 1 +4 0.000413928 48 +3 0.105672374 1 +4 0.000362396 49 +3 0.453571012 1 +4 0.000373295 48 +3 0.799768052 1 +4 0.000408525 48 +3 0.487553934 1 +4 0.000443791 48 +3 2.456102815 1 +4 0.000354594 48 +3 79.488811236 1 +4 0.110023221 32 +3 0.715179515 1 +4 0.000381592 16 +3 0.391509277 1 +4 0.000393526 29 +3 0.943740666 1 +4 0.000349374 17 +3 0.207526246 1 +4 0.000485668 17 +3 0.143704057 1 +4 0.000348007 17 +3 0.143435378 1 +4 0.000368142 17 +3 0.772597412 1 +4 0.110063985 36 +3 13.022095358 1 +4 0.000403981 16 +3 0.318925791 1 +4 0.000336517 16 +3 0.231729783 1 +4 0.000376458 22 +3 0.327623023 1 +4 0.000356997 23 +3 4.863969747 1 +4 0.000400224 19 +3 0.271571541 1 +3 0.121996556 1 +4 0.000371499 114 +3 1.221527164 1 +4 0.000358054 10 +3 0.135648707 1 +4 0.000346341 1 +3 0.191734839 1 +4 0.000327609 1 +3 0.855719441 1 +4 0.000405426 1 +4 0.000913135 10 +4 0.000366858 59 +3 1.639324634 1 +4 0.000346597 36 +7 0.000524874 TSTP +7 7.390665382 CONT +4 0.000577837 7 +4 0.000278006 890 +3 0.943025876 1 +4 0.000390314 36 +7 0.000583277 TSTP +7 3.655223483 CONT +4 0.000662626 7 +4 0.000274567 832 +3 0.238863751 1 +4 0.000341171 10 +3 0.151505929 1 +4 0.000391834 1 +3 0.137883068 1 +4 0.000322436 1 +3 0.109515330 1 +4 0.000404666 1 +3 0.103717451 1 +4 0.000357360 37 +3 0.815709527 1 +4 0.000352853 15 +3 0.159532468 1 +4 0.000363590 27 +3 0.135611441 1 +4 0.000325560 17 +3 0.279702847 2 +4 0.000381860 10 +3 0.111647606 1 +4 0.000319571 1 +3 0.151625318 1 +4 0.000400472 1 +3 0.111620405 1 +4 0.000357341 1 +4 0.000349341 70 +3 0.271431357 1 +4 0.000442392 36 +7 0.000589559 TSTP +7 5.007416369 CONT +4 0.000611646 7 +4 0.000285315 894 +3 139.067795008 1 +4 0.000366007 10 +3 0.175382851 1 +4 0.000358223 1 +3 0.111476767 1 +4 0.000329678 1 +3 0.175716778 1 +4 0.000320858 1 +3 0.079671236 1 +4 0.000316534 1 +3 0.151560952 1 +4 0.000326277 1 +3 0.488409850 1 +4 0.000363235 2 +3 0.190930680 1 +4 0.000375687 1 +3 0.087882121 1 +4 0.000362324 1 +3 0.191550670 1 +4 0.000377130 1 +3 0.079498486 1 +4 0.000329328 1 +3 0.159837929 1 +4 0.000368066 1 +3 0.191679354 1 +4 0.000347134 1 +3 0.111522730 1 +4 0.000495846 230 +3 0.935864352 1 +4 0.000425402 92 +3 0.471305015 1 +4 0.000458137 99 +3 0.500865580 1 +4 0.000398986 47 +3 0.082631283 1 +4 0.000414903 84 +3 0.183422133 1 +4 0.000400867 19 +3 0.500266352 1 +4 0.000375323 20 +3 0.083307165 1 +4 0.000331403 18 +3 0.415194545 1 +4 0.000402584 20 +3 1.023936226 1 +4 0.000497916 101 +3 0.500055301 1 +4 0.000417051 47 +3 0.082510846 1 +4 0.000372054 34 +3 0.224011651 1 +4 0.000378891 18 +3 0.500202057 1 +4 0.000358539 20 +3 0.082465930 1 +4 0.000364336 17 +3 1.576237965 1 +4 0.000351901 17 +3 0.500393152 1 +4 0.000424266 17 +3 0.082998040 1 +4 0.000337146 17 +3 0.083361640 1 +4 0.000366396 17 +3 0.083026828 1 +4 0.000328046 17 +3 0.322675228 1 +4 0.000358470 17 +3 0.197462184 1 +4 0.000327079 17 +3 8.983859141 1 +4 0.000370774 19 +3 0.185493393 1 +4 0.000377384 20 +3 0.245713013 1 +4 0.000360578 18 +3 1.775859748 1 +4 0.000390726 17 +3 0.217434224 1 +4 0.000437951 17 +3 0.613590208 1 +4 0.000343518 17 +3 0.401991192 1 +4 0.000365295 17 +3 0.613633274 1 +4 0.000386015 23 +3 4.831604582 2 +4 0.000418606 24 +3 0.609550222 1 +4 0.000349183 17 +3 1.197892808 1 +4 0.000392443 18 +3 0.743417992 1 +4 0.000355778 31 +3 0.135791222 1 +4 0.000363517 41 +3 0.255623210 1 +4 0.000348819 41 +3 0.135439706 1 +4 0.000355313 41 +3 0.127642166 1 +4 0.000343773 41 +3 0.087597337 1 +4 0.000413648 41 +3 0.511757339 1 +4 0.000386501 17 +3 0.295549405 1 +4 0.000354872 17 +3 0.247871391 1 +4 0.000336372 18 +3 0.423687804 1 +4 0.000366803 18 +3 0.312824699 1 +4 0.000346374 18 +3 0.166498953 1 +4 0.000392980 18 +3 0.175434190 1 +4 0.000342254 18 +3 0.048255175 1 +4 0.000380756 41 +3 0.407030000 2 +4 0.000370220 22 +3 0.217738714 1 +4 0.000353696 17 +3 0.181536597 1 +4 0.000332401 18 +3 0.231541475 1 +4 0.000345720 13 +3 0.415750621 1 +4 0.000338210 32 +4 0.000414623 47 +3 0.759277247 1 +4 0.000397349 17 +3 0.169834065 1 +4 0.000337775 17 +3 0.261383628 1 +3 0.064153359 1 +4 0.000348148 4 +3 0.231520166 1 +3 0.056531856 1 +4 0.000382853 4 +3 1.895342307 1 +4 0.000456643 17 +3 0.201356339 1 +4 0.000378326 17 +3 0.181691568 1 +4 0.000363113 17 +3 0.249584295 1 +4 0.000389502 14 +3 0.165768928 1 +4 0.000340410 17 +3 0.305572986 1 +4 0.000431361 18 +3 0.317493918 1 +4 0.000350985 24 +3 0.184487115 1 +4 0.000458530 40 +3 0.126821620 1 +4 0.000338513 41 +3 0.151634183 1 +4 0.000388402 40 +3 0.087626685 1 +4 0.000340338 40 +3 0.175741439 1 +4 0.000438664 40 +3 0.191535949 1 +4 0.000441000 40 +3 2.983589796 1 +4 0.000394143 36 +3 3.876142022 1 +4 0.110035167 33 +3 2.245808557 1 +4 0.000385760 9 +3 0.479480256 1 +4 0.000346419 1 +3 0.175540002 1 +4 0.000401919 1 +3 0.144704507 1 +4 0.000414907 1 +4 0.000994584 33 +4 0.000359030 234 +3 1.077365878 1 +4 0.000452370 1 +4 0.000529473 39 +3 0.975461430 1 +4 0.000369082 10 +3 0.079079752 1 +4 0.000333556 1 +3 0.111602431 1 +4 0.000355467 1 +3 0.143759103 1 +4 0.000351076 1 +3 0.079804287 1 +4 0.000390138 1 +3 0.159501313 1 +4 0.000336925 1 +3 0.191638893 1 +4 0.000321370 1 +3 0.087790847 1 +4 0.000365868 39 +3 0.951692897 1 +4 0.000388405 20 +4 0.000296957 44 +3 0.943170547 1 +4 0.000385451 39 +3 1.015715447 1 +4 0.000368926 18 +3 0.495572904 1 +4 0.000357103 27 +3 0.271727558 1 +4 0.000354500 41 +3 0.279593281 1 +4 0.000368767 41 +3 0.279729949 1 +4 0.000344578 41 +3 0.119512584 1 +4 0.000335820 41 +3 0.127658598 1 +4 0.000350615 41 +3 0.112015544 1 +4 0.000350583 41 +3 0.359414507 2 +4 0.001179038 37 +4 0.000369617 50 +3 0.152403225 1 +4 0.000364549 18 +3 0.157671627 1 +4 0.000394073 17 +3 0.145641042 1 +4 0.000347979 17 +3 0.309696044 1 +4 0.000435866 79 +3 0.375578806 1 +4 0.000369602 17 +3 0.367673524 1 +4 0.000357062 17 +3 0.159409371 1 +3 0.072207178 1 +4 0.000343349 4 +3 0.159688152 1 +3 0.055847137 1 +4 0.000362818 4 +3 0.671784890 1 +4 0.000363347 7 +3 0.343688525 1 +4 0.000415495 6 +3 0.543510360 1 +4 0.000344138 17 +3 0.209642619 1 +4 0.000352097 17 +3 0.181762731 1 +4 0.000331216 17 +3 0.201586802 1 +4 0.000345010 18 +3 0.365829346 1 +4 0.000350518 17 +3 0.137561319 1 +4 0.000347562 18 +3 0.197610494 1 +4 0.000367008 17 +3 0.319585496 1 +4 0.000425341 31 +3 0.223569372 1 +4 0.000376930 22 +3 0.263653708 1 +4 0.000353015 22 +3 0.095704747 1 +4 0.000337212 22 +3 0.031598269 1 +4 0.000390594 23 +3 0.159870952 1 +4 0.000373548 22 +3 0.087394680 1 +4 0.000441986 22 +3 0.135671073 1 +4 0.000346682 17 +3 0.171746131 1 +4 0.000372517 17 +3 0.123510868 1 +4 0.000334221 18 +3 0.039498943 1 +4 0.000397046 19 +3 0.095672146 1 +4 0.000325363 18 +3 0.143754279 1 +4 0.000368239 18 +3 0.223605386 1 +4 0.000426063 22 +3 0.471610261 2 +4 0.000363802 10 +3 0.015554665 1 +4 0.000331508 1 +3 0.519817760 1 +4 0.000334263 1 +3 0.095415578 1 +4 0.000337575 1 +3 0.207982629 1 +4 0.000324473 1 +3 0.199753320 1 +4 0.000356718 1 +4 0.000355183 71 +3 0.631202493 1 +4 0.000368000 36 +7 0.000533702 TSTP +7 9.719803852 CONT +4 0.000717076 7 +4 0.000281202 935 +3 1.910931388 1 +4 0.000374954 27 +3 0.791476970 1 +4 0.000428506 22 +3 0.503506447 1 +4 0.000359931 22 +3 0.783341366 1 +4 0.110007030 31 +3 1.274470397 1 +4 0.000387502 10 +3 0.535680050 1 +4 0.000383579 1 +3 0.231451119 1 +4 0.000348086 1 +3 0.567827770 1 +4 0.000370217 1 +4 0.000969074 10 +4 0.000368597 61 +3 0.390582206 1 +4 0.000343682 36 +7 0.000550450 TSTP +7 7.671269982 CONT +4 0.000521260 7 +4 0.000313171 937 +3 3.359782410 1 +4 0.000585741 735 +3 0.582616667 1 +4 0.000372238 9 +3 0.239602178 1 +4 0.000379157 1 +3 0.071530109 1 +4 0.000409901 1 +3 0.047637382 1 +4 0.000337421 1 +3 0.151664776 1 +4 0.000346153 1 +3 0.159637490 1 +4 0.000337865 1 +3 0.095592779 1 +4 0.000543052 483 +3 1.175692739 1 +4 0.000522195 459 +3 0.959460007 1 +4 0.000413312 10 +3 0.087665908 1 +4 0.000588781 901 +3 20.248284711 1 +4 0.000628499 735 +3 0.703151451 1 +4 0.000394160 16 +3 0.500440767 1 +4 0.000364519 19 +3 0.083350811 1 +4 0.000339014 16 +3 0.083368775 1 +4 0.000367441 16 +3 0.082421879 1 +4 0.000334253 16 +3 0.083399387 1 +4 0.000373818 16 +3 0.082500566 1 +4 0.000352212 18 +3 0.083488959 1 +4 0.000393128 16 +3 0.083496147 1 +4 0.000331955 16 +3 0.083871243 1 +4 0.000343925 16 +3 0.081931645 1 +4 0.000370064 17 +3 0.082703361 1 +4 0.000366468 19 +3 0.083019623 1 +4 0.000334439 15 +3 20.326566240 1 +4 0.000471274 48 +3 0.327106449 1 +4 0.000353524 17 +3 0.311706322 1 +4 0.000347343 15 +3 0.303618878 1 +4 0.000346708 18 +3 0.728839583 1 +4 0.000354561 17 +3 0.238385696 1 +4 0.000352209 17 +3 0.112615975 1 +4 0.000399816 17 +3 0.120579656 1 +4 0.000385619 17 +3 0.133655702 1 +4 0.000344040 17 +3 0.095466522 1 +4 0.000360328 16 +3 3.910454605 17 +4 0.000387696 34 +3 0.882055600 1 +4 0.000366495 17 +3 0.703083657 1 +4 0.109998917 32 +3 12.138355281 1 +4 0.000353524 17 +3 0.391376221 1 +3 0.114111346 1 +4 0.000390180 30 +3 0.733514800 2 +4 0.000318313 43 +3 0.296185035 1 +4 0.000370741 10 +3 0.095073316 1 +4 0.000320445 1 +3 0.159714469 1 +4 0.000398610 1 +3 0.671756082 1 +4 0.000389472 1 +4 0.000316261 54 +4 0.000335938 16 +3 3.918991433 1 +4 0.000381639 39 +3 1.391820866 1 +3 0.122572983 1 +4 0.000360413 30 +3 0.204894183 1 +4 0.000384831 86 +3 0.271578260 1 +4 0.000331163 18 +3 0.191741559 1 +4 0.000335189 24 +3 0.199800770 1 +4 0.000354462 54 +3 0.303563006 2 +4 0.000393336 37 +3 0.479595529 1 +4 0.000347304 17 +3 0.169714473 1 +4 0.000343137 17 +3 1.181838714 1 +4 0.000350867 17 +3 0.215787302 1 +3 0.055719028 1 +4 0.000390356 4 +3 0.183565376 1 +3 0.048098033 1 +4 0.000346186 4 +3 0.183546432 1 +3 0.064027289 1 +4 0.000349285 4 +3 0.183726774 1 +3 0.064156076 1 +4 0.000362277 4 +3 0.215339578 1 +3 0.072071346 1 +4 0.000363777 4 +3 0.231873889 1 +3 0.063969603 1 +4 0.000402839 4 +3 0.263444177 1 +3 0.063964083 1 +4 0.000342881 4 +3 0.343905078 1 +3 0.071787058 1 +4 0.000406727 4 +3 0.383604382 1 +4 0.000364356 4 +3 0.487710026 1 +4 0.000347111 10 +3 0.111479835 1 +4 0.000339801 1 +3 0.159905658 1 +4 0.000329563 1 +3 0.151681622 1 +4 0.000380117 1 +4 0.000362919 71 +3 0.351505640 1 +4 0.000382206 36 +7 0.000580633 TSTP +7 32.463933608 CONT +4 0.000537317 7 +4 0.000244099 818 +3 47.356867926 1 +4 0.109957000 1 +3 0.806463708 1 +4 0.000358654 26 +3 0.263077121 1 +4 0.000404056 21 +3 0.201777643 1 +4 0.000340541 22 +3 0.181498047 1 +4 0.000391365 25 +3 0.201749986 1 +4 0.000410354 26 +3 0.213830902 1 +4 0.000374860 29 +3 0.242743477 1 +4 0.000394934 30 +3 0.244272733 1 +4 0.000385118 33 +3 0.209309059 1 +4 0.000340397 34 +3 0.214094906 1 +4 0.000378032 32 +3 0.251108045 1 +4 0.000372349 41 +3 0.587937535 1 +4 0.000481045 90 +3 0.841658979 1 +4 0.000494395 486 +3 1.341390713 1 +4 0.000486133 24 +3 0.519694376 1 +4 0.000393747 155 +3 0.831485644 1 +4 0.000447253 77 +3 0.169721938 1 +4 0.000424379 89 +3 0.173329315 1 +4 0.000399653 37 +3 0.695943082 1 +4 0.000396328 19 +3 0.217744022 1 +4 0.000371435 19 +3 1.013539345 1 +4 0.000351822 19 +3 0.201679794 1 +4 0.000371668 16 +3 0.381651959 1 +4 0.000347085 16 +3 0.111281352 1 +4 0.000372287 17 +3 40.945109689 2 +4 0.000383051 1 +3 0.146046290 1 +4 0.000424718 114 +3 0.293110069 1 +4 0.000349116 18 +3 0.343611868 1 +4 0.000465799 21 +3 0.152039383 1 +4 0.000341033 18 +3 0.895491197 1 +4 0.000431804 85 +3 0.121643026 1 +4 0.000380059 114 +3 0.717740102 1 +4 0.000388116 10 +3 0.136135528 1 +4 0.000338595 1 +3 0.159004015 1 +4 0.000358829 1 +3 0.127435366 1 +4 0.000419382 1 +4 0.000360168 69 +3 0.351579698 1 +4 0.000340105 36 +7 0.000542662 TSTP +7 3.574908791 CONT +4 0.000647797 7 +4 0.000365803 7 +4 0.000333531 932 +3 25.144213797 1 +4 0.000398416 15 +3 0.498848979 1 +4 0.000351256 15 +3 0.082812596 1 +4 0.000329004 15 +3 0.083143137 1 +4 0.000348013 14 +3 0.082660556 1 +4 0.000387320 46 +3 0.082704152 1 +4 0.000439266 69 +3 0.083314713 1 +4 0.000433380 68 +3 1.363337851 1 +4 0.000425625 15 +3 0.535453563 1 +3 0.131077452 1 +4 0.000364806 28 +3 0.476484778 1 +4 0.000402903 36 +3 0.169805705 1 +4 0.000360465 17 +3 0.157433074 1 +4 0.000344571 17 +3 0.161739168 1 +4 0.000359301 15 +3 0.165484321 1 +4 0.000349031 15 +3 1.320462291 1 +4 0.000400814 85 +3 0.855094187 1 +4 0.000374453 17 +3 0.185572957 1 +4 0.000418129 16 +3 0.558124604 1 +3 0.063631937 1 +4 0.000407487 27 +3 0.199283070 1 +4 0.000443065 17 +3 0.112006975 1 +4 0.000373057 17 +3 0.151304036 1 +4 0.000393661 17 +3 0.223637698 1 +4 0.000412293 17 +3 0.239479322 1 +4 0.000353837 28 +3 0.758172425 1 +4 0.109982937 32 +3 3.740049129 1 +4 0.000367935 10 +3 0.119621049 1 +4 0.000373245 1 +3 0.143618739 1 +4 0.000352990 1 +3 0.127356695 1 +4 0.000448660 1 +4 0.000735504 10 +4 0.000317788 60 +3 0.254609036 1 +4 0.000391575 38 +3 0.153508364 1 +4 0.000345369 16 +3 0.158001131 1 +4 0.000370827 16 +3 0.407492826 1 +3 0.122224923 1 +4 0.000402076 121 +3 0.213027993 1 +4 0.000368828 10 +3 0.160033352 1 +4 0.000312779 1 +3 0.127679358 1 +4 0.000325689 1 +3 0.111858366 1 +4 0.000427966 1 +4 0.000728807 10 +4 0.000310549 59 +3 0.358674147 1 +4 0.000381775 36 +7 0.000556280 TSTP +7 3.398953112 CONT +4 0.000585693 7 +4 0.000258047 816 +3 8.359823493 1 +4 0.000364980 15 +3 0.398872193 1 +4 0.000355369 15 +3 0.223880601 1 +3 0.113803831 1 +4 0.000440426 124 +3 0.093815211 1 +4 0.000425262 71 +3 0.311346433 1 +4 0.000346301 10 +3 0.079595192 1 +4 0.000380864 1 +3 0.144039791 1 +4 0.000317825 1 +3 0.135665510 1 +4 0.000416861 1 +4 0.000694595 10 +4 0.000313831 60 +3 0.631121519 1 +4 0.000437524 36 +7 0.000499301 TSTP +7 1.455005436 CONT +4 0.000590497 7 +4 0.000254139 819 +3 9.727355907 1 +4 0.000415913 18 +3 0.463029287 1 +4 0.000347850 19 +3 0.202215316 1 +4 0.000372760 16 +3 0.829066678 1 +3 0.122203769 1 +4 0.000439313 114 +3 0.453506556 1 +4 0.000421375 10 +3 0.167711639 1 +4 0.000365479 1 +3 0.159427775 1 +4 0.000336347 1 +3 0.175990250 1 +4 0.000538887 11 +4 0.000378672 60 +3 0.439932577 1 +4 0.000405067 36 +7 0.000552412 TSTP +7 1.518019485 CONT +4 0.000663787 7 +4 0.000252195 864 +3 19.912570325 1 +4 0.000392436 16 +3 0.192646540 1 +4 0.000357344 18 +3 0.165647707 1 +4 0.000375569 17 +3 0.156129872 1 +4 0.000346051 19 +3 0.259497708 1 +3 0.122179663 1 +4 0.000393729 29 +3 0.213048153 1 +4 0.000370261 36 +3 0.146222355 1 +4 0.000344307 17 +3 0.141011473 1 +4 0.000349990 19 +3 0.231654842 1 +4 0.000402098 82 +3 1.559949739 1 +4 0.000411193 17 +3 0.231403233 1 +4 0.000346807 23 +3 0.071911835 1 +4 0.000379667 18 +3 0.119365932 1 +4 0.000346694 18 +3 0.071560426 1 +4 0.000376899 19 +3 0.159663650 1 +4 0.000362636 18 +3 0.167663410 1 +4 0.000353339 18 +3 0.079650029 1 +4 0.000406404 18 +3 0.527922390 2 +4 0.000543237 32 +3 0.151624218 1 +4 0.001092944 17 +3 0.160825397 1 +4 0.000389846 17 +3 0.165772322 1 +4 0.000392250 16 +3 0.391473104 1 +3 0.071853894 1 +4 0.000411310 27 +3 0.175424679 1 +4 0.000350117 17 +3 0.095606766 1 +4 0.000384163 17 +3 0.095548028 1 +4 0.000345581 17 +3 0.176055076 1 +4 0.000386596 17 +3 0.199374962 1 +4 0.000351586 34 +3 0.671730466 2 +4 0.000465209 10 +3 0.087443393 1 +4 0.000336542 1 +3 0.127659853 1 +4 0.000395755 1 +3 0.111659148 1 +4 0.000357388 1 +4 0.000365768 70 +3 0.359942717 1 +4 0.000474416 36 +7 0.000526799 TSTP +7 16.391336233 CONT +4 0.000606739 7 +4 0.000252703 825 +3 9.423126066 1 +4 0.000404453 17 +3 0.103478360 1 +4 0.000379639 17 +3 0.215753975 1 +3 0.055777719 1 +4 0.000374798 27 +3 2.192310846 1 +4 0.000364538 18 +3 0.095017669 1 +4 0.000374579 17 +3 0.167858272 1 +4 0.000394995 17 +3 0.183487470 1 +4 0.000328229 17 +3 0.424749918 2 +4 0.000375944 14 +3 0.086373079 1 +4 0.000342026 1 +3 0.143957741 1 +4 0.000323698 1 +3 0.095552429 1 +4 0.000351824 1 +4 0.000369679 14 +4 0.000331407 56 +3 0.407347448 1 +4 0.000387372 36 +7 0.000639935 TSTP +7 3.249297749 CONT +4 0.000674732 7 +4 0.000254330 824 +3 83.655961172 1 +4 0.000430093 19 +3 0.271188534 1 +4 0.000394617 19 +3 27.608941812 1 +3 0.161186568 1 +4 0.000450516 124 +3 0.437705088 1 +3 0.079896297 1 +4 0.000395445 27 +3 0.207743933 1 +4 0.000356038 17 +3 0.111692035 1 +4 0.000370128 17 +3 0.095509613 1 +4 0.000337918 16 +3 0.112097732 1 +4 0.000401108 17 +3 0.063059306 1 +4 0.000361219 36 +3 0.552280978 1 +4 0.000415916 16 +3 0.135428657 1 +4 0.000336479 16 +3 0.367466610 1 +4 0.000411259 16 +3 0.247878161 1 +4 0.000349830 16 +3 0.103207817 1 +4 0.000381731 17 +3 0.207641973 1 +4 0.000394821 17 +3 0.111713293 1 +4 0.000365416 16 +3 0.079649048 1 +4 0.000356122 16 +3 0.795727480 1 +4 0.110053931 32 +3 0.038080066 1 +4 0.000342743 17 +3 0.279446216 1 +4 0.000374827 23 +3 0.295697084 1 +4 0.000354596 18 +3 0.535620025 1 +4 0.000454264 18 +3 0.095457715 1 +4 0.000349601 18 +3 0.103619461 1 +4 0.000371113 19 +3 0.247658136 1 +4 0.000352418 18 +3 0.223712040 1 +4 0.000394071 18 +3 0.215535872 1 +4 0.000349938 18 +3 0.399676754 2 +4 0.000391624 10 +3 0.120019780 1 +4 0.000385700 1 +3 0.287262291 1 +4 0.000410793 1 +3 5.687972903 1 +4 0.000422720 1 +4 0.000835771 10 +4 0.000338408 60 +3 3.654443851 1 +4 0.000358954 36 +7 0.000568777 TSTP +7 2.735311839 CONT +4 0.000617805 7 +4 0.000258026 872 +3 6.247684694 1 +4 0.000381665 17 +3 0.271033476 1 +3 0.080017407 1 +4 0.000376864 21 +3 0.183514484 1 +4 0.000400388 7 +3 0.543949651 1 +4 0.000355286 10 +3 0.119603286 1 +4 0.000363348 1 +3 0.127447163 1 +4 0.000341483 1 +3 0.327721799 1 +4 0.000428809 1 +4 0.000707831 10 +4 0.000323420 60 +3 0.343068111 1 +4 0.000514657 36 +7 0.000473004 TSTP +7 14.439862195 CONT +4 0.000539168 7 +4 0.000254087 866 +3 0.614218693 1 +4 0.000363210 16 +3 0.177673946 1 +4 0.000353681 16 +3 0.157793450 1 +4 0.000325782 16 +3 0.161671660 1 +4 0.000395594 17 +3 0.157483187 1 +4 0.000332878 16 +3 0.123732328 1 +4 0.000401784 16 +3 0.187796972 1 +4 0.000357585 22 +3 0.119318881 1 +4 0.000324225 31 +3 0.138162368 1 +4 0.000379037 33 +3 0.117380233 1 +4 0.000358787 35 +3 0.359435429 2 +4 0.000397934 10 +3 0.479762921 1 +4 0.000361008 42 +3 0.311959467 1 +4 0.000390897 30 +3 0.135228283 1 +4 0.000363360 31 +3 0.592821208 2 +4 0.000371179 32 +3 0.102464558 1 +4 0.000401580 23 +3 0.271758514 1 +4 0.000352094 10 +3 0.095461652 1 +4 0.000352317 1 +3 0.175740178 1 +4 0.000360447 1 +3 0.119944584 1 +4 0.000369823 1 +4 0.000418330 54 +4 0.000290714 16 +3 0.535003752 1 +4 0.000347906 36 +7 0.000540252 TSTP +7 8.119422644 CONT +4 0.000550546 7 +4 0.000270883 7 +4 0.000309568 863 +3 4.439312397 1 +4 0.000422377 10 +3 0.126842073 1 +4 0.000374980 1 +3 0.191573294 1 +4 0.000343883 1 +3 0.104338672 1 +4 0.000337400 1 +3 0.095097124 1 +4 0.000333834 1 +3 0.183571932 1 +4 0.000343439 1 +3 0.071851031 1 +4 0.000341209 1 +3 0.215747016 1 +4 0.000416855 21 +4 0.000328367 433 +3 1.303495007 1 +3 0.105633305 1 +4 0.000369836 30 +3 0.317692992 1 +4 0.000596648 512 +3 2.639519736 1 +4 0.000636971 842 +3 0.153213684 1 +4 0.000353795 2 +3 0.445780954 1 +4 0.000386371 61 +3 0.823774769 1 +4 0.000441965 10 +3 0.097360557 1 +4 0.000493182 1 +3 0.157577353 1 +4 0.000729707 11 +4 0.000470530 61 +3 3.390825751 1 +4 0.000405386 39 +3 0.255568652 1 +3 0.055907219 1 +4 0.000356174 28 +3 0.223697836 1 +4 0.000363714 18 +3 0.071906737 1 +4 0.000392293 18 +3 0.137411001 1 +4 0.000339774 18 +3 0.069925847 1 +4 0.000366418 18 +3 0.415281632 2 +4 0.000369014 14 +3 0.175719944 1 +4 0.000341084 1 +3 0.159555979 1 +4 0.000344904 1 +3 0.111749441 1 +4 0.000375281 1 +4 0.000410804 71 +3 6.504533238 1 +4 0.000361531 36 +7 0.000558118 TSTP +7 1.278101661 CONT +4 0.000811650 7 +4 0.000376336 769 +3 11.511743118 1 +4 0.000364527 17 +3 0.161438531 1 +4 0.000345224 17 +3 0.157323414 1 +4 0.000537486 18 +3 0.121528105 1 +4 0.000498558 17 +3 0.125526397 1 +4 0.000482108 19 +3 0.255732231 1 +3 0.121881198 1 +4 0.000345581 29 +3 0.213459919 1 +4 0.000395734 36 +3 0.161822173 1 +4 0.000357575 17 +3 0.157298340 1 +4 0.000412710 20 +3 0.178299484 1 +4 0.000327592 17 +3 0.237035658 1 +4 0.000416700 88 +3 0.631761843 1 +4 0.000402040 17 +3 0.151418917 1 +3 0.154220895 1 +4 0.000423284 70 +3 0.101389342 1 +4 0.000335849 17 +3 0.359970840 1 +4 0.000403114 64 +3 0.255375492 1 +4 0.000350430 17 +3 0.153935811 1 +4 0.000325999 17 +3 0.357694905 1 +4 0.000363787 18 +3 0.137455631 1 +4 0.000495269 17 +3 0.565508737 1 +3 0.047830147 1 +4 0.000532450 28 +3 0.351524429 1 +4 0.000467173 18 +3 0.071666434 1 +4 0.000641468 18 +3 0.167194718 1 +4 0.000489431 18 +3 0.200295616 1 +4 0.000551093 18 +3 0.224195045 1 +4 0.000490351 29 +3 0.942128105 2 +4 0.000420457 10 +3 0.159520647 1 +4 0.000340538 1 +3 0.191674682 1 +4 0.000341809 1 +3 0.162114470 1 +4 0.000403173 1 +4 0.000370828 71 +3 3.453730031 1 +4 0.000407152 36 +7 0.000532697 TSTP +7 1.279692927 CONT +4 0.000594321 7 +4 0.000338319 766 +3 20.543075366 1 +3 0.161678515 1 +4 0.000393388 89 +3 0.109518649 1 +4 0.000377129 77 +3 0.487449518 1 +4 0.000414332 10 +3 0.103420818 1 +4 0.000327642 1 +3 0.160021081 1 +4 0.000339209 1 +3 0.103534453 1 +4 0.000352986 1 +4 0.000362220 71 +3 11.872264722 1 +4 0.000426217 10 +3 0.143175518 1 +4 0.000337384 1 +3 0.143330589 1 +4 0.000347866 1 +3 0.095812134 1 +4 0.000395322 1 +4 0.000374560 71 +3 0.719728666 1 +4 0.000364309 36 +7 0.000545907 TSTP +7 1.382542565 CONT +4 0.000623723 7 +4 0.000296046 766 +3 9.311903448 1 +3 0.145546621 1 +4 0.000387557 79 +3 0.597650202 1 +4 0.000355720 10 +3 0.127432037 1 +4 0.000369744 1 +3 0.175848436 1 +4 0.000346841 1 +3 0.111455892 1 +4 0.000363654 1 +4 0.000784986 10 +4 0.000316427 61 +3 2.342798974 1 +4 0.000586526 81 +3 0.263320080 1 +4 0.000396667 17 +3 0.175857695 1 +4 0.000346577 18 +3 0.175300181 1 +4 0.000422884 18 +3 0.151615841 1 +4 0.000365608 5 +3 0.255672928 1 +4 0.000377346 20 +3 1.335841010 1 +4 0.000350921 10 +3 0.103478377 1 +4 0.000340388 1 +3 0.079799956 1 +4 0.000377597 1 +4 0.000340277 619 +3 0.088604932 1 +4 0.000347462 9 +3 0.110282970 1 +4 0.000362487 1 +3 0.112068737 1 +4 0.000335578 1 +3 0.137441147 1 +4 0.000356006 1 +3 0.021400111 1 +4 0.000315926 1 +3 0.343808846 1 +4 0.000695257 21 +4 0.000443236 818 +3 1.342789495 1 +4 0.000576959 740 +3 0.153934670 1 +4 0.000389186 5 +3 0.645080930 1 +4 0.000358932 10 +3 0.095733242 1 +4 0.000334965 1 +3 0.143733003 1 +4 0.000330461 1 +3 0.079904187 1 +4 0.000340350 1 +4 0.000651650 10 +4 0.000323088 61 +3 1.886982413 1 +4 0.000364249 36 +7 0.000518790 TSTP +7 1.438859082 CONT +4 0.000639886 7 +4 0.000308077 765 +3 19.960179842 1 +3 0.137318544 1 +4 0.000425193 89 +3 0.101456129 1 +4 0.000385837 78 +3 0.687735193 1 +4 0.000344463 10 +3 0.111760772 1 +4 0.000372205 1 +3 0.143536207 1 +4 0.000334583 1 +3 0.095671266 1 +4 0.000382623 1 +4 0.000308090 14 +4 0.000326265 57 +3 0.287477689 1 +4 0.000340497 36 +7 0.000549212 TSTP +7 1.334882104 CONT +4 0.000566744 7 +4 0.000445456 7 +4 0.000310448 758 +3 21.919165309 1 +4 0.000389164 17 +3 1.607860009 1 +3 0.145916570 1 +4 0.000550629 79 +3 40.887569204 1 +3 0.063226887 1 +4 0.000407176 28 +3 0.231577718 1 +4 0.000347207 18 +3 0.135826371 1 +4 0.000348097 18 +3 0.135755107 1 +4 0.000342546 18 +3 0.513437669 1 +4 0.000352245 17 +3 0.333870129 1 +4 0.000348692 17 +3 0.271457790 1 +4 0.000354921 17 +3 0.567782986 1 +4 0.000403925 17 +3 0.087387382 1 +4 0.000330600 18 +3 0.064692221 1 +4 0.000374641 41 +3 0.334386122 2 +4 0.000368782 36 +3 0.095813194 1 +4 0.000326974 17 +3 0.319688238 1 +4 0.000400214 4 +3 0.217758066 1 +4 0.000382550 6 +3 0.181472137 1 +4 0.000377069 4 +3 0.351749687 1 +4 0.000351451 17 +3 0.337577822 1 +4 0.000361249 18 +3 0.477870170 1 +4 0.000357175 17 +3 0.249462376 1 +4 0.000361629 17 +3 0.205554148 1 +4 0.000429511 17 +3 0.271772888 1 +4 0.000366700 4 +3 0.185663908 1 +4 0.000801799 4 +3 0.149332116 1 +4 0.000354948 4 +3 0.137604340 1 +4 0.000341941 4 +3 0.149596246 1 +4 0.000347968 7 +3 0.879575837 1 +4 0.000371385 6 +3 0.495575891 1 +4 0.000410648 7 +3 0.535996334 1 +4 0.000346507 17 +3 3.031472869 1 +4 0.000383621 10 +3 0.111534733 1 +4 0.000341148 1 +3 0.127793429 1 +4 0.000314986 1 +3 0.135521274 1 +4 0.000370481 1 +4 0.000315991 10 +4 0.000321545 61 +3 0.287211223 1 +4 0.000349261 36 +7 0.000625125 TSTP +7 18.263683258 CONT +4 0.000498815 7 +4 0.000274045 761 +3 1.023194790 1 +4 0.000373438 18 +3 0.143586996 1 +4 0.000363107 23 +3 0.295540816 1 +4 0.000393611 19 +3 0.455657673 2 +4 0.000426373 10 +3 0.113703338 1 +4 0.000378402 1 +3 0.157390675 1 +4 0.000357087 1 +3 0.151742623 1 +4 0.000372121 1 +4 0.000389981 71 +3 4.695812081 1 +4 0.000435116 47 +3 0.279470887 1 +4 0.000352451 20 +3 0.135503138 1 +4 0.000416970 17 +3 0.264941187 1 +4 0.000350779 17 +3 0.150132591 1 +4 0.000411483 4 +3 0.311846550 1 +4 0.000391644 8 +3 0.183614576 1 +4 0.000404638 17 +3 0.175683730 1 +4 0.000357988 7 +3 0.423533239 1 +4 0.000398142 10 +3 0.095915760 1 +4 0.000332763 1 +3 0.143141796 1 +4 0.000384253 1 +3 0.127668348 1 +4 0.000355276 1 +4 0.000376278 71 +3 2.375919235 1 +4 0.000378363 36 +7 0.000560572 TSTP +7 15.551189540 CONT +4 0.000539521 7 +4 0.000299553 760 +3 23.695858735 2 +4 0.000359908 18 +3 0.170196607 1 +4 0.000348039 17 +3 0.573067146 2 +4 0.000315257 18 +3 0.664401104 1 +3 0.105229177 1 +4 0.000345009 30 +3 0.221703840 1 +4 0.000407918 101 +3 0.527554619 1 +4 0.000353805 17 +3 0.135802397 1 +3 0.071781394 1 +4 0.000350908 29 +3 0.247749684 1 +4 0.000361118 18 +3 0.103453369 1 +4 0.000336479 18 +3 0.137722936 1 +4 0.000361246 18 +3 0.517919323 2 +4 0.000389552 40 +3 1.831522136 1 +4 0.000398435 17 +3 0.249614782 1 +4 0.000388303 18 +3 3.541891503 1 +4 0.000378322 17 +3 0.295458712 1 +4 0.000363984 17 +3 0.095756287 1 +4 0.000364362 18 +3 0.199627897 1 +3 0.055865953 1 +4 0.000355114 27 +3 0.223763732 1 +4 0.000376939 18 +3 0.064087461 1 +4 0.000346247 17 +3 0.145196165 1 +4 0.000374948 18 +3 0.077578841 1 +4 0.000345534 41 +3 0.703167850 1 +4 0.110020471 33 +3 0.538607790 1 +4 0.000410711 17 +3 0.161582846 1 +4 0.000363956 17 +3 0.141494482 1 +4 0.000353886 18 +3 0.169681414 1 +4 0.000383409 17 +3 0.421508228 1 +4 0.000358304 17 +3 0.568001575 1 +4 0.000413829 17 +3 0.209401778 1 +4 0.000350372 18 +3 2.102060980 1 +3 0.055601917 1 +4 0.000394102 4 +3 0.215605473 1 +3 0.064149899 1 +4 0.000341844 4 +3 0.215470952 1 +3 0.040040524 1 +4 0.000342404 4 +3 0.615762246 1 +3 0.032063265 1 +4 0.000365036 4 +3 0.247519203 1 +3 0.056030347 1 +4 0.000378459 4 +3 0.224142535 1 +3 0.031523638 1 +4 0.000358178 4 +3 0.423666972 1 +4 0.000376999 4 +3 0.255643217 1 +4 0.000343531 17 +3 4.856027841 1 +4 0.000500863 18 +3 0.193366280 1 +4 0.000389063 17 +3 0.165522421 1 +4 0.000344857 17 +3 0.473753484 1 +4 0.000400177 17 +3 0.437554096 1 +4 0.000359468 18 +3 1.607761052 1 +4 0.000366734 33 +3 0.151682280 1 +4 0.000346026 18 +3 0.407553246 2 +4 0.000364683 13 +3 0.127618024 1 +4 0.000319068 1 +3 0.143660206 1 +4 0.000364479 1 +3 0.143742384 1 +4 0.000406650 1 +4 0.000367797 71 +3 0.351557499 1 +4 0.000402956 36 +7 0.000565724 TSTP +7 2.191516357 CONT +4 0.000601223 7 +4 0.000313328 736 +3 0.486301431 1 +4 0.000401910 27 +3 0.719571416 1 +4 0.000386112 38 +3 0.369728756 1 +4 0.000378489 21 +3 0.349666198 1 +4 0.000466278 22 +3 0.361397835 1 +4 0.000376363 25 +3 0.381641787 1 +4 0.000422633 26 +3 0.386758659 1 +4 0.000357995 29 +3 0.556543071 1 +4 0.000385322 30 +3 0.543559098 1 +4 0.000354657 4 +3 0.191664837 1 +4 0.000384254 4 +3 0.153687121 1 +4 0.000395274 4 +3 0.133534453 1 +4 0.000396348 4 +3 0.121659912 1 +4 0.000413405 4 +3 0.125573096 1 +4 0.000387566 4 +3 0.139150330 1 +4 0.000327305 4 +3 0.148154366 1 +4 0.000372650 32 +3 0.249863620 1 +4 0.000339958 1 +3 0.637929725 1 +4 0.000396127 10 +3 0.111347453 1 +4 0.000349649 1 +3 0.239519890 1 +4 0.000376892 1 +4 0.000894005 10 +4 0.000362047 61 +3 0.718355866 1 +4 0.000378376 36 +7 0.000534690 TSTP +7 5.191647462 CONT +4 0.000706786 7 +4 0.000362129 736 +3 0.686656947 1 +4 0.000446177 27 +3 0.295649306 1 +4 0.000566542 38 +3 0.409198821 1 +4 0.000441251 21 +3 0.621630445 1 +4 0.000366152 22 +3 0.305683015 1 +4 0.000432894 25 +3 0.309555663 1 +4 0.000358268 26 +3 0.361574083 1 +4 0.000411224 29 +3 0.381625199 1 +4 0.000357855 30 +3 0.961682942 1 +4 0.000419125 33 +3 0.669684753 1 +4 0.000434909 44 +3 0.655678777 1 +4 0.000427507 17 +3 20.106525371 1 +3 0.045647273 1 +4 0.000365446 18 +3 0.186268181 1 +4 0.000372156 17 +3 0.132866873 1 +4 0.000376959 17 +3 0.185773537 1 +4 0.000351543 18 +3 0.221453445 1 +4 0.000393827 31 +3 0.184683590 1 +4 0.000337990 20 +3 0.651084582 1 +3 0.091972978 1 +4 0.000436889 34 +3 0.247353084 1 +4 0.000389987 17 +3 0.087558484 1 +4 0.000370313 18 +3 0.159730348 1 +4 0.000342223 24 +3 0.223550409 1 +4 0.000404235 45 +3 0.279483799 2 +4 0.000368998 36 +3 0.207881506 1 +4 0.000385223 17 +3 0.217550024 1 +4 0.000377422 18 +3 0.293652368 1 +4 0.000374239 17 +3 0.231611804 1 +4 0.000354648 24 +3 0.255771372 1 +4 0.000396653 19 +3 0.709843468 1 +4 0.109945476 33 +3 2.772403375 1 +4 0.000405016 10 +3 0.159034249 1 +4 0.000343155 1 +3 0.175485925 1 +4 0.000390619 1 +3 0.127848732 1 +4 0.000380434 1 +4 0.000358212 71 +3 0.751855132 1 +4 0.000404622 36 +7 0.000608357 TSTP +7 2.502601867 CONT +4 0.000660954 7 +4 0.000292705 761 +3 42.344294221 2 +4 0.000346361 21 +3 0.232300274 1 +4 0.000397957 17 +3 0.110977267 1 +4 0.000347456 18 +3 0.191542148 1 +4 0.000421802 23 +3 0.191648097 1 +4 0.000390839 31 +3 0.423642384 2 +4 0.000417125 10 +3 0.095563652 1 +4 0.000328914 1 +3 0.162289389 1 +4 0.000386050 1 +3 0.132960135 1 +4 0.000421188 1 +4 0.000357036 71 +3 2.528509506 1 +4 0.000374574 36 +7 0.000558417 TSTP +7 1.326200172 CONT +4 0.000651198 7 +4 0.000368984 7 +4 0.000333315 755 +3 10.759500663 1 +4 0.000424380 21 +3 0.366812536 1 +4 0.000354543 18 +3 0.127689176 1 +4 0.000369158 17 +3 0.175591974 1 +3 0.048660960 1 +4 0.000359942 26 +3 0.087772999 1 +4 0.000337647 17 +3 0.110972447 1 +4 0.000331622 18 +3 0.129662149 1 +4 0.000359074 21 +3 0.341590744 2 +4 0.000418281 10 +3 0.175657585 1 +4 0.000350980 1 +3 0.119880120 1 +4 0.000393669 1 +3 0.143461878 1 +4 0.000387547 1 +4 0.000367203 10 +4 0.000313262 61 +3 1.423356906 1 +4 0.000369190 36 +7 0.000544947 TSTP +7 1.086855932 CONT +4 0.000600841 7 +4 0.000259936 762 +3 29.456688546 1 +4 0.000382210 17 +3 0.166860376 1 +3 0.072853854 1 +4 0.000486510 26 +3 0.094686413 1 +4 0.000397296 17 +3 0.055880947 1 +4 0.000550370 18 +3 0.359221233 2 +4 0.000388415 14 +3 0.111920171 1 +4 0.000344960 1 +3 0.119262715 1 +4 0.000351551 1 +3 0.135698555 1 +4 0.000358834 1 +4 0.000370376 71 +3 7.200064723 1 +4 0.000396296 39 +3 0.201124997 1 +4 0.000353353 17 +3 12.583077072 1 +4 0.000405715 36 +7 0.000556650 TSTP +7 2.166256425 CONT +4 0.000595403 7 +4 0.000284965 701 +3 34.464618235 1 +3 0.137495155 1 +4 0.000393855 89 +3 6.333858500 1 +4 0.000421474 17 +3 0.247499316 1 +4 0.000344421 17 +3 0.201481700 1 +4 0.000396558 17 +3 0.165632278 1 +4 0.000384607 19 +3 0.287697103 1 +4 0.000394441 20 +3 0.185936115 1 +4 0.000389601 17 +3 0.197247752 1 +4 0.000421181 17 +3 10.256287285 1 +4 0.000401831 17 +3 0.463252389 1 +4 0.000411884 24 +3 0.919761790 1 +4 0.000376261 27 +3 0.599663943 1 +4 0.000430115 28 +3 1.727519207 1 +4 0.000366528 27 +3 0.775678123 2 +4 0.000446678 33 +3 0.127615264 1 +4 0.000336915 17 +3 0.169691032 1 +4 0.000404518 17 +3 14.214084103 2 +4 0.000406930 31 +3 1.064172346 1 +4 0.000446106 82 +3 0.462979744 1 +4 0.000425667 80 +3 0.455412593 1 +4 0.000399671 17 +3 1.015850622 1 +3 0.200009465 1 +3 0.121842965 1 +4 0.000413815 31 +3 0.197469351 1 +4 0.000429019 144 +3 0.313156262 1 +4 0.000562658 43 +3 0.168267990 1 +4 0.000376310 17 +3 0.149529087 1 +4 0.000561536 18 +3 0.161330526 1 +4 0.000487524 17 +3 0.333469617 1 +4 0.000432119 7 +3 2.407756190 1 +4 0.000399637 18 +3 0.185510385 1 +4 0.000403515 17 +3 0.397545429 1 +4 0.000349287 24 +3 0.455775587 1 +4 0.000382010 26 +3 0.119660765 1 +4 0.000344743 27 +3 0.983754654 1 +4 0.000391754 26 +3 0.367444466 2 +4 0.000479735 24 +3 0.153584990 1 +4 0.000518767 17 +3 0.333432343 1 +4 0.000451263 31 +3 0.951762306 1 +4 0.000390342 20 +3 0.799717393 1 +4 0.110050651 31 +3 6.394224606 1 +4 0.000399427 17 +3 0.201242861 1 +4 0.000362093 17 +3 0.805831872 1 +4 0.000492597 24 +3 0.463611154 1 +4 0.000353344 28 +3 0.495490410 2 +4 0.000435363 33 +3 0.153574646 1 +4 0.000344398 17 +3 0.205530768 1 +4 0.000359665 17 +3 0.368002084 1 +4 0.000369806 31 +3 5.543652529 1 +4 0.000405256 21 +3 2.319551608 2 +4 0.000402605 31 +3 0.127672928 1 +4 0.000396047 16 +3 0.145521021 1 +4 0.000370101 18 +3 0.198850123 1 +4 0.000380497 18 +3 0.374518191 1 +4 0.000376497 4 +3 0.071763335 1 +4 0.000357445 29 +3 1.991623930 1 +4 0.000360230 17 +3 0.153682265 1 +4 0.000355502 17 +3 0.141566970 1 +4 0.000343818 17 +3 0.319546316 1 +4 0.000381425 32 +3 0.415753148 1 +4 0.000376296 20 +3 0.111609906 1 +4 0.000376038 20 +3 0.111683841 1 +4 0.000339838 20 +3 0.223663238 1 +4 0.000345139 20 +3 1.735836126 1 +4 0.000383634 20 +3 1.431546931 1 +4 0.000376084 20 +3 0.471593841 1 +4 0.000359976 38 +4 0.703414565 18 +3 0.529968458 1 +4 0.110004687 31 +3 0.344443632 1 +4 0.000377377 17 +3 0.161592431 1 +4 0.000373603 20 +3 0.149541334 1 +4 0.000376216 19 +3 0.169770415 1 +4 0.000380554 21 +3 0.237617326 1 +4 0.000353075 17 +3 0.271492043 1 +4 0.000393653 23 +3 0.847577958 1 +4 0.000355919 17 +3 0.215824561 2 +4 0.000420253 34 +3 0.159446820 1 +4 0.000385845 55 +3 0.119529700 1 +4 0.000443729 18 +3 0.143622153 1 +4 0.000371709 55 +3 0.087744678 1 +4 0.000432932 18 +3 0.135547822 1 +4 0.000387780 55 +3 0.367740510 1 +4 0.000403129 8 +3 0.119486192 1 +4 0.000352406 1 +3 0.159480106 1 +4 0.000381349 1 +3 0.095840317 1 +4 0.000406279 1 +4 0.000347860 68 +3 0.296854807 1 +4 0.000333832 34 +7 0.000530929 TSTP +7 18.711040311 CONT +4 0.000722739 7 +4 0.000294419 720 +3 1.878490908 1 +4 0.000385552 14 +3 0.499457577 1 +4 0.000364101 14 +3 0.083000133 1 +4 0.000374483 14 +3 0.083512020 1 +4 0.000330702 19 +3 0.082876543 1 +4 0.000450885 16 +3 0.082872661 1 +4 0.000348207 16 +3 0.455801267 1 +4 0.000408033 16 +3 22.718850312 1 +4 0.000367782 16 +3 0.499319128 1 +4 0.000440603 18 +3 0.083031219 1 +4 0.000339332 18 +3 5.992261219 1 +4 0.000404772 17 +3 1.015513604 1 +4 0.000428246 21 +3 0.343708648 1 +4 0.000407440 17 +3 0.499501973 1 +4 0.000404036 17 +3 0.082759959 1 +4 0.000405669 17 +3 0.082706521 1 +4 0.000350717 17 +3 0.082937503 1 +4 0.000415135 17 +3 0.204004487 1 +4 0.000358586 17 +3 2.061676979 1 +3 0.178034321 1 +4 0.000458403 41 +3 0.157662119 1 +3 0.162192601 1 +4 0.000462507 71 +3 0.173246535 1 +3 0.153994123 1 +4 0.000444605 119 +3 0.173440035 1 +3 0.122042974 1 +4 0.000383053 77 +3 0.357731675 1 +4 0.000408902 18 +3 0.735691322 1 +4 0.000400895 16 +3 0.367560977 1 +4 0.000392665 24 +3 0.143760259 1 +4 0.000398216 16 +3 0.367347853 1 +4 0.000417748 15 +3 0.119692664 1 +4 0.000357595 28 +3 0.175609639 1 +4 0.000389132 16 +3 0.215606599 1 +4 0.000346514 15 +3 0.079667984 1 +4 0.000454884 28 +3 0.175582670 1 +4 0.000358310 16 +3 0.239689561 1 +4 0.000413015 15 +3 0.079470073 1 +4 0.000357373 24 +3 0.391674008 1 +4 0.000382927 16 +3 0.153648702 1 +4 0.000342793 16 +3 0.149695017 1 +4 0.000398179 16 +3 0.119534529 1 +4 0.000382745 18 +3 0.207754094 1 +4 0.000381072 17 +3 0.185524250 1 +4 0.000387534 17 +3 0.117594633 1 +4 0.000385616 7 +3 0.527773376 1 +4 0.000363479 10 +3 0.143658968 1 +4 0.000374950 1 +3 0.151534283 1 +4 0.000338832 1 +3 0.247642362 1 +4 0.000414888 1 +4 0.000623078 10 +4 0.000327615 61 +3 0.679143212 1 +4 0.000428228 36 +7 0.000498302 TSTP +7 15.759302739 CONT +4 0.000709658 7 +4 0.000259898 761 +3 1.447011203 1 +4 0.000422073 52 +3 0.111465797 1 +4 0.000378643 17 +3 0.112301851 1 +4 0.000341490 16 +3 0.599047398 1 +4 0.000373061 16 +3 0.137569975 1 +4 0.000351584 15 +3 0.133686062 1 +4 0.000363926 19 +3 0.455652573 1 +4 0.000404204 19 +3 0.095485987 1 +4 0.000330733 17 +3 3.896053197 1 +4 0.000419108 18 +3 0.103484157 1 +4 0.000355073 18 +3 0.103427073 1 +4 0.000339638 18 +3 0.088569795 1 +4 0.000347190 18 +3 0.054934884 1 +4 0.000344192 17 +3 0.071779814 1 +4 0.000390972 18 +3 0.103236039 1 +4 0.000394154 18 +3 0.079809854 1 +4 0.000388847 18 +3 0.207558980 1 +4 0.000358322 19 +3 0.119757145 1 +4 0.000373061 18 +3 0.079697457 1 +4 0.000366006 18 +3 0.207569155 1 +4 0.000635030 18 +3 0.263316887 1 +4 0.000556093 18 +3 0.183554241 1 +4 0.000414673 18 +3 0.095605329 1 +4 0.000367209 18 +3 0.088897668 1 +4 0.000400849 18 +3 0.023143466 1 +4 0.000358736 18 +3 0.086779107 1 +4 0.000390339 17 +3 0.079564663 1 +4 0.000339080 19 +3 0.119593603 1 +4 0.000432584 18 +3 0.095575470 1 +4 0.000338328 18 +3 0.015961962 1 +4 0.000398069 18 +3 0.151235025 1 +4 0.000341615 18 +3 0.263735292 2 +4 0.000416151 36 +3 0.344262441 1 +4 0.000347914 17 +3 0.162363392 1 +4 0.000380379 17 +3 0.188195394 1 +4 0.000401011 7 +3 0.175818950 1 +4 0.000394224 17 +3 0.537388667 1 +4 0.000378779 17 +3 1.661891035 1 +4 0.000410197 10 +3 0.089165673 1 +4 0.000321823 1 +3 0.149978075 1 +4 0.000387317 1 +3 0.095732547 1 +4 0.000376913 1 +4 0.000309348 54 +4 0.000366179 17 +3 1.463359603 1 +4 0.000359983 36 +7 0.000588293 TSTP +7 1.494986237 CONT +4 0.000710772 7 +4 0.000476110 755 +3 0.815254487 1 +4 0.000413124 36 +7 0.000500056 TSTP +7 5.470841894 CONT +4 0.000537987 7 +4 0.000309014 695 +3 1.103014779 1 +4 0.000479227 10 +3 0.255480340 1 +4 0.000377261 1 +3 0.095464134 1 +4 0.000369958 1 +3 0.239785146 1 +4 0.000349997 1 +3 0.111606627 1 +4 0.000387143 1 +3 0.095592443 1 +4 0.000362436 1 +3 0.209546330 1 +4 0.000383199 1 +3 0.069908389 1 +4 0.000388572 13 +4 0.000356399 40 +3 0.391033583 1 +4 0.000463571 22 +4 0.000339472 36 +3 22.904792991 1 +4 0.000415262 10 +3 0.142951874 1 +4 0.000403144 1 +3 0.128583126 1 +4 0.000412641 1 +3 0.166690878 1 +4 0.000689289 739 +3 2.624041365 1 +4 0.000400916 9 +3 0.174887138 1 +4 0.000384252 1 +3 0.119405108 1 +4 0.000372425 1 +3 0.167720375 1 +4 0.000332687 1 +4 0.000349403 35 +3 0.423713292 1 +4 0.000375338 35 +7 0.000583271 TSTP +7 70.969129284 CONT +4 0.000697139 7 +4 0.000259336 690 +3 0.222944020 1 +4 0.000347798 9 +3 0.111816210 1 +4 0.000335574 1 +3 0.103568627 1 +4 0.000378947 1 +3 0.135595030 1 +4 0.000396827 1 +3 0.137532828 1 +4 0.000358634 1 +3 0.117757171 1 +4 0.000375277 1 +3 0.055587721 1 +4 0.000394197 1 +3 0.191608522 1 +4 0.000361412 1 +3 0.199704361 1 +4 0.000402536 1 +3 0.207616763 1 +4 0.000411565 25 +4 0.000397031 586 +3 0.631256050 1 +4 0.000424291 33 +4 0.000316004 581 +3 0.521136839 1 +4 0.000435811 57 +4 0.000341314 400 +3 0.813835754 1 +4 0.000377370 34 +4 0.000433569 581 +3 0.352584941 1 +4 0.000397390 57 +4 0.000363548 400 +3 0.733347389 1 +4 0.000405165 10 +3 0.167473344 1 +4 0.000351018 1 +3 0.079771169 1 +4 0.000353889 1 +4 0.000318311 603 +3 0.103143305 1 +4 0.000341409 9 +3 0.087795642 1 +4 0.000383953 18 +4 0.000367685 594 +3 2.327546392 1 +4 0.000646503 717 +3 0.519264719 1 +4 0.000577177 820 +3 0.487328825 1 +4 0.000621281 777 +3 0.255472449 1 +4 0.000560288 838 +3 0.431395389 1 +4 0.000543030 491 +3 1.815692773 1 +4 0.000376360 36 +7 0.000559203 TSTP +7 36.256087000 CONT +4 0.000670313 7 +4 0.000314670 514 +3 1.007150321 1 +4 0.000371526 10 +3 0.111658445 1 +4 0.000365925 1 +3 0.127497532 1 +4 0.000344023 1 +3 0.008585145 1 +4 0.000359333 1 +3 0.062918881 1 +4 0.000337433 1 +3 0.520163861 1 +4 0.000437412 2 +3 0.294795978 1 +4 0.000381118 1 +3 0.071692988 1 +4 0.000376974 1 +3 0.143539792 1 +4 0.000323794 1 +3 0.183757372 1 +4 0.000393274 1 +3 0.063755161 1 +4 0.000544230 660 +3 0.639400190 1 +4 0.000381233 17 +3 0.185646026 1 +4 0.000387918 17 +3 0.165576131 1 +4 0.000370784 17 +3 0.169594206 1 +4 0.000346486 20 +3 0.165630517 1 +4 0.000379258 16 +3 0.247663006 1 +4 0.000384711 18 +3 0.153654800 1 +4 0.000384127 21 +3 0.133594381 1 +4 0.000358222 17 +3 0.153676469 1 +4 0.000411504 17 +3 0.143149979 1 +4 0.000355384 17 +3 0.702200221 1 +3 0.144007022 1 +3 0.129890903 1 +4 0.000355329 31 +3 0.797783059 1 +4 0.000398510 39 +3 0.615529280 1 +4 0.000363986 10 +3 0.095683598 1 +4 0.000325788 1 +3 0.103551436 1 +4 0.000383441 1 +3 0.119607986 1 +4 0.000347694 1 +3 0.145819004 1 +4 0.000319052 1 +3 0.125546782 1 +4 0.000367240 1 +3 0.039546567 1 +4 0.000326530 1 +3 0.183922235 1 +4 0.000373559 21 +4 0.000353866 702 +3 2.087798526 1 +4 0.000539051 571 +3 0.487204393 1 +4 0.000612492 688 +3 0.567301355 1 +4 0.000529935 569 +3 0.183352643 1 +4 0.000572020 259 +3 1.895653835 1 +4 0.000559693 676 +3 0.183349956 1 +4 0.000627051 788 +3 0.311439753 1 +4 0.000520169 684 +3 0.223235251 1 +4 0.000556696 706 +3 1.855807818 1 +4 0.000623383 754 +3 0.399430211 1 +4 0.000666082 755 +3 0.678992219 1 +4 0.000407642 9 +3 0.071844278 1 +4 0.000408252 39 +3 2.271730493 1 +4 0.000695074 754 +3 0.951239040 1 +4 0.000655239 755 +3 0.199279212 1 +4 0.000524359 568 +3 0.351523060 1 +4 0.000597140 688 +3 0.375552882 1 +4 0.000572100 882 +3 0.335236477 1 +4 0.000595587 797 +3 0.335527330 1 +4 0.000590118 858 +3 0.335478957 1 +4 0.000645679 720 +3 0.335412572 1 +4 0.000564452 692 +3 0.447292502 1 +4 0.000617332 631 +3 0.439511370 1 +4 0.000599395 551 +3 1.255467302 1 +4 0.000612853 695 +3 0.975312065 1 +4 0.000556515 535 +3 0.849295704 1 +4 0.000409538 21 +4 0.000423212 591 +3 0.821288316 1 +4 0.000544036 588 +3 0.503545779 1 +4 0.000591477 688 +3 0.759494154 1 +4 0.000630742 882 +3 0.383301604 1 +4 0.000361161 32 +4 0.000355504 586 +3 0.425292376 1 +4 0.000427732 57 +4 0.000374856 555 +3 0.213333573 1 +4 0.000533322 588 +3 0.440372326 1 +4 0.000558654 688 +3 0.478209058 1 +4 0.000375810 9 +3 0.135845091 1 +4 0.000342553 1 +3 0.055731981 1 +4 0.000322099 1 +4 0.000333614 606 +3 0.095106089 1 +4 0.000343483 9 +3 0.511910900 1 +4 0.000395045 18 +4 0.000423280 594 +3 0.551397717 1 +4 0.000373563 62 +3 0.831401151 1 +4 0.000373044 33 +4 0.000436827 581 +3 0.359415188 1 +4 0.000369864 62 +3 1.559405239 1 +4 0.000385266 21 +4 0.000454423 436 +3 0.720007528 1 +4 0.000685988 734 +3 0.422694195 1 +4 0.000616489 820 +3 0.319316852 1 +4 0.000618298 761 +3 1.575514606 1 +4 0.000601742 540 +3 0.191314674 1 +4 0.000505078 21 +3 2.239427678 1 +4 0.000379643 17 +3 0.489926311 1 +4 0.000480378 18 +3 0.261299017 1 +4 0.000443556 156 +3 0.727585489 1 +4 0.000403010 43 +3 0.279611069 1 +3 0.079889305 1 +4 0.000401246 28 +3 0.239587313 1 +4 0.000397168 18 +3 0.072427298 1 +4 0.000333939 18 +3 0.342923416 1 +4 0.000398306 18 +3 0.183637399 1 +4 0.000381758 18 +3 0.111595657 1 +4 0.000361019 37 +3 0.063655434 1 +4 0.000399939 37 +3 0.503644352 2 +4 0.000390806 36 +3 0.161502231 1 +4 0.000365327 17 +3 0.141749408 1 +4 0.000369984 17 +3 0.185648138 1 +4 0.000356033 18 +3 0.165731462 1 +4 0.000352816 17 +3 0.161555741 1 +4 0.000359941 17 +3 0.149736702 1 +4 0.000425806 17 +3 0.113442477 1 +4 0.000355350 17 +3 0.149749419 1 +4 0.000381168 18 +3 0.201596848 1 +4 0.000367273 17 +3 0.213610750 1 +4 0.000357214 17 +3 0.233632365 1 +4 0.000352405 17 +3 0.237703831 1 +3 0.080015656 1 +4 0.000390973 28 +3 0.127528045 1 +4 0.000376775 18 +3 0.079637141 1 +4 0.000351734 18 +3 0.311727166 1 +4 0.000398259 18 +3 0.167561704 1 +4 0.000358484 19 +3 0.103706101 1 +4 0.000403651 20 +3 0.047631111 1 +4 0.000352065 20 +3 0.615677935 2 +4 0.000405081 10 +3 0.112025215 1 +4 0.000345942 1 +3 0.119151839 1 +4 0.000395602 1 +4 0.000393444 71 +3 7.400109465 1 +4 0.000377879 10 +3 0.182947979 1 +4 0.000348115 1 +3 0.063744236 1 +4 0.000406283 1 +4 0.000387358 71 +3 0.535224823 1 +4 0.000495439 39 +3 1.033667865 1 +4 0.000395791 32 +4 0.000389749 580 +3 2.085715205 1 +4 0.000595160 571 +3 1.063184152 1 +4 0.000601361 688 +3 4.184426491 1 +4 0.000611529 882 +3 198.294712987 1 +4 0.000500980 9 +3 0.189589980 1 +4 0.000719043 1 +3 0.119318988 1 +4 0.000564771 1 +3 0.151441953 1 +4 0.000358560 1 +3 0.137706675 1 +4 0.000460100 1 +3 0.149441070 1 +4 0.000384899 1 +3 0.071650668 1 +4 0.000445636 1 +3 0.191711996 1 +4 0.000613876 706 +3 1.015888491 1 +4 0.000617595 571 +3 0.438878102 1 +4 0.000577367 688 +3 0.447478114 1 +4 0.000689566 882 +3 0.359286096 1 +4 0.000640649 797 +3 0.335430267 1 +4 0.000677678 858 +3 0.472182198 1 +4 0.000627037 720 +3 0.366435323 1 +4 0.001010110 692 +3 4.511252143 1 +4 0.000650383 695 +3 0.255194042 1 +4 0.000405046 27 +4 0.000383570 722 +3 32.216371870 1 +4 0.000375360 10 +3 0.359619347 1 +4 0.000373969 1 +3 0.015453064 1 +4 0.000338365 1 +3 0.135960195 1 +4 0.000425283 1 +3 0.327618492 1 +4 0.000378966 1 +3 0.137620317 1 +4 0.000466152 1 +3 0.061246195 1 +4 0.000375182 1 +3 0.183740916 1 +4 0.000390135 1 +3 0.087550652 1 +4 0.000351053 1 +3 0.239890261 1 +4 0.000688894 800 +3 0.799211665 1 +4 0.000379792 20 +3 0.337657412 1 +4 0.000425576 20 +3 0.613410916 1 +4 0.000437220 9 +3 0.231802960 1 +4 0.000363706 1 +3 0.095550999 1 +4 0.000355948 1 +3 0.311690991 1 +4 0.000360403 1 +3 0.119493793 1 +4 0.000381406 1 +3 0.145015673 1 +4 0.000614387 1 +3 0.062048669 1 +4 0.000369418 1 +3 0.191858922 1 +4 0.000451365 46 +4 0.000332511 12 +3 0.783070466 1 +4 0.000399820 9 +3 0.231602050 1 +4 0.000506878 1 +3 0.079371339 1 +4 0.000374732 1 +3 0.143672519 1 +4 0.000357272 1 +3 0.063707147 1 +4 0.000360474 1 +3 0.199859218 1 +4 0.000407986 39 +3 0.463330673 1 +4 0.000427909 41 +4 0.000329585 727 +3 4.048292042 1 +4 0.000659682 987 +3 1.046745489 1 +4 0.000708998 1031 +3 0.623413444 1 +4 0.000606119 737 +3 1.391046737 1 +4 0.000385105 10 +3 0.103821049 1 +4 0.000344610 1 +3 0.151389382 1 +4 0.000492370 1 +3 0.135684531 1 +4 0.000350529 1 +3 0.167734456 1 +4 0.000379684 1 +3 0.063573356 1 +4 0.000336023 1 +3 0.063502987 1 +4 0.000363503 1 +3 0.223733380 1 +4 0.000655733 700 +3 25.104799626 1 +4 0.000399281 10 +3 0.159008041 1 +4 0.000402494 1 +3 0.159700848 1 +4 0.000402276 1 +3 0.063353917 1 +4 0.000404021 1 +3 0.215798492 1 +4 0.000405804 1 +3 0.119647512 1 +4 0.000477310 191 +3 0.871404448 1 +4 0.000469989 63 +3 0.663591548 1 +4 0.000421793 71 +3 0.499801607 1 +4 0.000527248 58 +3 0.083029044 1 +4 0.000401822 47 +3 0.083244748 1 +4 0.000470973 34 +3 38.037421477 1 +4 0.000348897 8 +3 0.079604312 1 +4 0.000382227 1 +3 0.159674301 1 +4 0.000343747 1 +3 0.088281992 1 +4 0.000366830 1 +3 0.087830069 1 +4 0.000359714 1 +3 0.150800262 1 +4 0.000394596 1 +3 0.167596087 1 +4 0.000375193 1 +3 0.191569013 1 +4 0.000356516 1 +3 0.247780823 1 +4 0.000422578 24 +4 0.000446540 801 +3 1.551406059 1 +4 0.000405220 57 +4 0.000399134 749 +3 1.166934863 1 +4 0.000381655 10 +3 0.087671380 1 +4 0.000582668 41 +4 0.000415955 771 +3 6.511197329 1 +4 0.000613896 34 +4 0.000290759 791 +3 17.855985952 1 +4 0.000392818 17 +3 0.569405413 1 +4 0.000358391 17 +3 0.497800637 1 +4 0.000387651 17 +3 0.083195865 1 +4 0.000355967 17 +3 0.083425185 1 +4 0.000856532 18 +3 1.547546742 1 +4 0.000503055 23 +3 0.183568509 1 +4 0.000385734 23 +3 0.071482783 1 +4 0.000413536 19 +3 0.119783893 1 +4 0.000374924 20 +3 0.175621531 1 +4 0.000688902 19 +3 0.111129585 1 +4 0.000543899 19 +3 0.007492305 1 +4 0.000320451 19 +3 0.328076834 1 +4 0.000603112 17 +3 0.161056013 1 +4 0.000377849 17 +3 0.141748645 1 +4 0.000437131 18 +3 0.239569515 1 +4 0.000391192 18 +3 0.175630219 1 +4 0.000559085 19 +3 0.095322294 1 +4 0.000536504 19 +3 0.111530509 1 +4 0.000359670 19 +3 0.055675989 1 +4 0.000385189 19 +3 0.247503945 1 +4 0.000392250 19 +3 0.103561293 1 +4 0.000360224 19 +3 0.127872954 1 +4 0.000366021 20 +3 0.511480153 2 +4 0.000401829 10 +3 0.103750841 1 +4 0.000506651 1 +3 0.143407021 1 +4 0.000400126 1 +3 0.095528275 1 +4 0.000406794 1 +4 0.000373737 71 +3 0.287782083 1 +4 0.000341659 36 +7 0.000558827 TSTP +7 25.999831488 CONT +4 0.000523441 7 +4 0.000236712 754 +3 3.303725066 1 +4 0.000699688 639 +3 0.558943365 1 +4 0.000358426 9 +3 0.375464515 1 +4 0.000728486 1 +3 0.007507401 1 +4 0.000316351 1 +3 0.055107562 1 +4 0.000363764 1 +3 0.415905885 1 +4 0.000376008 1 +3 0.147347883 1 +4 0.000412975 1 +3 0.163923920 1 +4 0.000377046 1 +3 18.472815831 1 +4 0.000455734 1 +3 0.303014397 1 +4 0.000357172 1 +3 0.224750112 1 +4 0.000406001 1 +3 0.136844895 1 +4 0.000346398 1 +3 0.109232604 1 +4 0.000427810 1 +3 0.392148315 1 +4 0.000344556 2 +3 0.263814421 1 +4 0.000428066 1 +3 0.166663903 1 +4 0.000342941 1 +3 0.137990258 1 +4 0.001053470 1 +3 0.100790618 1 +4 0.000343833 1 +3 0.207661471 1 +4 0.000377886 40 +3 0.473599768 1 +4 0.000391002 32 +4 0.000360855 705 +3 1.261382162 1 +4 0.000364648 10 +3 0.087533109 1 +4 0.000377866 18 +4 0.000361082 674 +3 11.896125981 1 +4 0.001620248 10 +3 0.101985297 1 +4 0.000430458 18 +4 0.000294990 689 +3 184.533873636 1 +4 0.000421301 10 +3 0.599060170 1 +4 0.000463651 1 +3 0.087494112 1 +4 0.000321414 1 +3 0.256043716 1 +4 0.000326971 1 +3 0.047318053 1 +4 0.000334214 1 +3 0.095759799 1 +4 0.000512111 1 +3 0.239470833 1 +4 0.000347820 1 +3 0.191631063 1 +4 0.000347219 1 +3 0.119784608 1 +4 0.000438453 41 +4 0.000335714 585 +3 106.586128074 1 +4 0.000418614 39 +3 1.752608685 1 +4 0.000380543 20 +3 0.197628987 1 +4 0.000427663 19 +3 0.153554957 1 +4 0.000366344 20 +3 0.725566286 1 +4 0.000597954 19 +3 0.201493802 1 +4 0.000352051 20 +3 0.149624969 1 +4 0.000355754 20 +3 0.304030193 1 +3 0.122005589 1 +4 0.000429672 30 +3 0.253251625 1 +4 0.000383425 100 +3 0.279685150 1 +4 0.000355705 18 +3 1.263760746 2 +4 0.000459528 73 +3 0.624090280 1 +4 0.000353236 17 +3 0.318943178 1 +4 0.000359400 23 +3 0.959672316 1 +4 0.000342497 18 +3 0.231808080 2 +4 0.000363647 34 +3 0.159515378 1 +4 0.000358754 56 +3 0.087619052 1 +4 0.000318953 18 +3 0.151754660 1 +4 0.000323220 55 +3 0.207648573 1 +4 0.000323762 15 +3 0.169611195 1 +4 0.000337631 15 +3 0.101863938 1 +4 0.000344067 18 +3 0.247531118 1 +3 0.311838031 2 +4 0.000341970 16 +3 0.207759216 1 +3 0.146055428 1 +4 0.000332071 29 +3 0.477715855 2 +4 0.000389217 1 +3 0.168124794 1 +3 0.130429375 1 +4 0.000514504 26 +3 0.172489164 1 +4 0.000548759 158 +3 0.431574679 1 +4 0.000379927 49 +3 0.127541264 1 +4 0.000340955 16 +3 0.431668893 1 +4 0.000460327 15 +3 0.127600772 1 +4 0.000499579 28 +3 0.127808975 1 +4 0.000355777 16 +3 0.199339957 1 +4 0.000432400 14 +3 0.095445357 1 +4 0.000358959 24 +3 0.143812536 1 +4 0.000343400 16 +3 0.169745514 1 +4 0.000382521 16 +3 0.109556607 1 +4 0.000352115 16 +3 0.177670917 1 +4 0.000384687 18 +3 0.149600436 1 +4 0.000343239 18 +3 0.247641731 1 +4 0.000340803 18 +3 0.185516724 1 +4 0.000495872 17 +3 0.205772317 1 +4 0.000346917 4 +3 0.217825586 1 +4 0.000364003 6 +3 0.213423459 1 +4 0.000365457 4 +3 0.319585038 1 +4 0.000363926 17 +3 0.743639537 1 +3 0.080133792 1 +4 0.000416927 4 +3 0.167620249 1 +3 0.063765726 1 +4 0.000355550 4 +3 0.215720694 1 +3 0.048014069 1 +4 0.000424490 4 +3 0.367576945 1 +4 0.000384582 4 +3 0.500931653 1 +4 0.000368133 4 +3 0.082891603 1 +4 0.000385176 4 +3 0.083267710 1 +4 0.000363598 4 +3 0.083295317 1 +4 0.000413402 4 +3 0.082848953 1 +4 0.000331234 4 +3 0.083350265 1 +4 0.000547179 4 +3 0.082820949 1 +4 0.000361568 4 +3 0.083960695 1 +4 0.000599924 7 +3 1.097009841 1 +4 0.000362618 17 +3 4.935746168 1 +4 0.000391970 18 +3 0.207704955 1 +4 0.000365172 18 +3 0.169509675 1 +4 0.000379055 17 +3 0.589730872 1 +4 0.000369999 31 +3 0.255624532 1 +4 0.000519728 31 +3 0.031432160 1 +4 0.000429333 31 +3 1.407646041 2 +4 0.000394802 37 +3 2.151660008 1 +4 0.000461818 19 +3 0.185651627 1 +4 0.000432896 20 +3 0.165569201 1 +4 0.000345574 20 +3 0.169659802 1 +4 0.000422324 19 +3 0.405722651 1 +4 0.000363552 18 +3 3.271568134 1 +4 0.000350266 17 +3 0.137754674 1 +4 0.000365437 20 +3 0.213454126 1 +4 0.000397014 20 +3 0.169607523 1 +4 0.000371113 19 +3 0.213714772 1 +4 0.000342087 20 +3 7.642107866 1 +4 0.000376375 20 +3 0.509523548 1 +3 0.161824934 1 +4 0.000463161 68 +3 0.189569262 1 +3 0.153980331 1 +4 0.000399471 74 +3 0.173817347 1 +3 0.145850395 1 +4 0.000417591 70 +3 0.661702198 1 +4 0.000438025 15 +3 0.169527617 1 +4 0.000463697 14 +3 0.149577133 1 +4 0.000424375 18 +3 0.295466207 1 +4 0.000352364 18 +3 0.263549511 1 +4 0.000393437 18 +3 0.194132483 1 +4 0.000343541 17 +3 0.149512046 1 +4 0.000382610 17 +3 0.201498788 1 +4 0.000370958 18 +3 0.421511751 1 +4 0.000417087 18 +3 0.199729040 1 +3 0.071874021 1 +4 0.000343081 4 +3 0.247672408 1 +4 0.000396139 6 +3 0.319652955 1 +4 0.000346619 18 +3 0.199599960 1 +4 0.000357428 24 +3 0.231697594 1 +4 0.000359225 19 +3 0.223551535 1 +4 0.000672168 19 +3 0.047319029 1 +4 0.000387753 19 +3 0.087690646 1 +4 0.000363889 19 +3 0.247534002 1 +4 0.000352289 19 +3 0.191815082 1 +4 0.000347206 19 +3 0.367633035 2 +4 0.000392641 35 +3 0.351613781 1 +4 0.000353246 14 +3 0.271717046 1 +4 0.000497230 15 +3 0.290351570 1 +4 0.000373981 15 +3 0.460691814 1 +4 0.000381376 24 +3 0.167560576 1 +4 0.000364462 16 +3 0.471798818 1 +4 0.000361187 15 +3 0.143835098 1 +4 0.000479757 28 +3 0.159300413 1 +4 0.000361310 16 +3 0.295658858 1 +4 0.000359389 14 +3 0.103530627 1 +4 0.000376373 24 +3 0.295767100 1 +4 0.000347813 9 +3 0.927716879 1 +4 0.000483703 1 +3 0.199479229 1 +4 0.000474704 1 +3 0.151658838 1 +4 0.000428612 1 +4 0.000433767 70 +3 0.439462066 1 +4 0.000355872 35 +7 0.000597311 TSTP +7 5.374814287 CONT +4 0.000587921 7 +4 0.000356356 7 +4 0.000298048 646 +3 4.015465365 1 +4 0.000391700 16 +3 0.727171357 1 +4 0.000368542 18 +3 0.591349323 1 +4 0.000354578 18 +3 0.177802364 1 +4 0.000347755 17 +3 0.381697828 1 +4 0.000367834 21 +3 0.343728825 1 +4 0.000563400 10 +3 0.135223999 1 +4 0.000362096 1 +3 0.247882945 1 +4 0.000394669 1 +3 0.247599306 1 +4 0.000403518 1 +4 0.000402784 71 +3 1.639191893 1 +4 0.000430769 36 +7 0.000577903 TSTP +7 1.455151930 CONT +4 0.000599454 7 +4 0.000277477 655 +3 19.808624383 1 +4 0.000620969 730 +3 1.550627339 1 +4 0.000575359 607 +3 2.135387686 1 +4 0.000551566 16 +3 0.499508523 1 +4 0.000368551 17 +3 0.082895069 1 +4 0.000407322 16 +3 0.082724768 1 +4 0.000355119 16 +3 0.083289719 1 +4 0.000359989 16 +3 0.082972034 1 +4 0.000358664 18 +3 0.083550867 1 +4 0.000357394 18 +3 0.682393143 1 +4 0.000514469 18 +3 5.239464747 1 +4 0.000357573 17 +3 0.303718219 1 +4 0.000389341 16 +3 0.153497530 1 +4 0.000362550 16 +3 0.197645169 1 +4 0.000344754 16 +3 1.015752224 1 +3 0.247971976 1 +4 0.000381490 22 +3 0.191674293 1 +4 0.000436538 18 +3 0.207618715 2 +4 0.000372068 34 +3 0.175537166 1 +4 0.000369702 23 +4 0.000358929 33 +3 0.127364793 1 +4 0.000354324 18 +3 0.151376226 1 +4 0.000366593 55 +3 0.255738152 1 +4 0.000344903 18 +3 0.257391796 1 +3 0.104301529 1 +4 0.000360991 28 +3 0.237644139 1 +4 0.000392513 120 +3 0.255590357 1 +4 0.000351348 16 +3 0.775731688 1 +4 0.000417487 16 +3 0.255723760 1 +4 0.000358589 23 +3 0.183461158 1 +4 0.000403981 17 +3 0.295703357 2 +4 0.000381414 34 +3 0.224477384 1 +4 0.000394858 16 +3 0.152747648 1 +4 0.000333163 18 +3 0.318739023 1 +4 0.000365360 18 +3 0.166589978 1 +4 0.000330995 17 +3 0.169695514 1 +4 0.000365565 17 +3 0.453575751 1 +4 0.000391533 20 +3 3.511826680 1 +4 0.000379165 9 +3 0.231519861 1 +4 0.000355888 1 +3 0.151728131 1 +4 0.000402742 1 +3 0.191560006 1 +4 0.000330002 1 +3 0.111720453 1 +4 0.000427301 141 +3 1.015593541 1 +4 0.000366551 20 +3 0.499780992 1 +4 0.000390781 13 +3 0.083591972 1 +4 0.000338616 20 +3 0.083173877 1 +4 0.000348954 17 +3 0.082791217 1 +4 0.000315724 20 +3 0.082888571 1 +4 0.000324345 17 +3 0.082877315 1 +4 0.000342978 18 +3 0.228477607 1 +4 0.000354424 20 +3 0.253676349 1 +4 0.000352173 17 +3 0.177609442 1 +4 0.000324841 18 +3 0.997767898 1 +4 0.000411047 4 +3 0.399462155 1 +4 0.000341911 19 +3 0.401740314 1 +4 0.000350008 16 +3 0.498318919 1 +4 0.000342628 20 +3 0.083051030 1 +4 0.001183443 20 +3 0.082368509 1 +4 0.000430734 21 +3 0.083436563 1 +4 0.000409277 15 +3 0.083261267 1 +4 0.000520477 14 +3 0.082682237 1 +4 0.000479996 12 +3 0.083276505 1 +4 0.000406351 47 +3 0.083040343 1 +4 0.000376074 55 +3 0.083884389 1 +4 0.000367499 82 +3 0.083670398 1 +4 0.000460801 83 +3 0.121882354 1 +4 0.000333662 14 +3 0.499710087 1 +4 0.000350508 18 +3 0.083149838 1 +4 0.000329768 19 +3 0.082760868 1 +4 0.000338668 20 +3 0.083287297 1 +4 0.000329723 15 +3 0.083433722 1 +4 0.000318367 17 +3 0.082885103 1 +4 0.000391176 17 +3 0.083185700 1 +4 0.000338025 21 +3 0.082696974 1 +4 0.000339598 20 +3 0.083223383 1 +4 0.000339001 18 +3 0.280193383 1 +4 0.000362337 9 +3 0.119712471 1 +4 0.000323805 1 +3 0.167634103 1 +4 0.000324327 1 +3 0.095701181 1 +4 0.000382500 1 +4 0.000612131 10 +4 0.000366488 59 +3 0.310748273 1 +4 0.000361886 35 +7 0.000565278 TSTP +7 1.319347496 CONT +4 0.000644159 7 +4 0.000301609 786 +3 1.446800162 1 +4 0.000415385 15 +3 0.147274104 1 +4 0.000411903 18 +3 0.156549622 1 +4 0.000342514 28 +3 0.158945907 1 +4 0.000383638 18 +3 0.407592647 2 +4 0.107006610 32 +3 0.134968216 1 +4 0.000374285 10 +3 0.093619166 1 +4 0.000321406 1 +3 0.135669132 1 +4 0.000418615 1 +3 0.111632584 1 +4 0.000440515 1 +4 0.000418319 71 +3 0.223294460 1 +4 0.000391684 36 +7 0.000579182 TSTP +7 1.231321848 CONT +4 0.000599653 7 +4 0.000272461 792 +3 22.632186080 1 +4 0.000378197 10 +3 0.159171346 1 +4 0.000358639 1 +3 0.175482875 1 +4 0.000330726 1 +3 0.295940912 1 +4 0.000358370 1 +4 0.000559630 10 +4 0.000318172 61 +3 4.462731189 1 +4 0.000387862 10 +3 0.871705771 1 +4 0.000359601 1 +3 0.087987496 1 +4 0.000319220 1 +3 0.070927565 1 +4 0.000390511 1 +3 0.199889669 1 +4 0.000351310 1 +3 0.175724658 1 +4 0.000332611 1 +3 0.119842732 1 +4 0.000370593 13 +4 0.000387753 39 +3 0.767555090 1 +4 0.000493540 36 +7 0.000508215 TSTP +7 1.966763075 CONT +4 0.000741179 7 +4 0.000279981 775 +3 25.824754391 1 +4 0.000470756 36 +7 0.000494758 TSTP +7 65.088723394 CONT +4 0.000679719 7 +4 0.000275667 733 +3 6.927156213 1 +4 0.000373384 16 +3 0.496363737 1 +4 0.000376392 15 +3 0.470682080 1 +4 0.000349852 15 +3 0.391716421 1 +4 0.000394592 32 +3 0.247584509 1 +4 0.000420580 15 +3 0.311530292 1 +4 0.000370720 15 +3 0.183777268 1 +4 0.000363324 26 +3 0.151478625 1 +4 0.000446062 15 +3 0.231612927 1 +4 0.000339645 15 +3 0.127583911 1 +4 0.000373080 23 +3 0.176030220 1 +4 0.000348512 16 +3 0.335461954 1 +4 0.000445479 15 +3 1.183603443 1 +4 0.000391993 24 +3 0.159550415 1 +4 0.000429718 16 +3 1.815580809 1 +3 0.138366471 1 +4 0.000385973 75 +3 0.357256096 1 +4 0.000370503 10 +3 0.103593163 1 +4 0.000327301 1 +3 0.135668931 1 +4 0.000339880 1 +3 0.135758729 1 +4 0.000374779 1 +4 0.000383260 14 +4 0.000381334 56 +3 1.295293307 1 +4 0.000397081 36 +7 0.000524204 TSTP +7 26.187658124 CONT +4 0.000555116 7 +4 0.000279669 721 +4 0.000500127 37 +3 2.138534979 1 +4 0.000382233 18 +3 1.319434356 1 +4 0.000371323 18 +3 0.391746191 1 +4 0.000430419 118 +3 2.183749419 1 +4 0.000416517 16 +3 0.499887990 1 +4 0.000346047 16 +3 0.083137968 1 +4 0.000364435 16 +3 0.082712342 1 +4 0.000410273 18 +3 0.083108498 1 +4 0.000332183 19 +3 0.083055230 1 +4 0.000334342 16 +3 0.083178624 1 +4 0.000350218 18 +3 0.083412336 1 +4 0.000324054 21 +3 0.083131851 1 +4 0.000336146 17 +3 0.082551557 1 +4 0.000353136 17 +3 31.721861726 1 +4 0.000361401 10 +3 0.223027249 1 +4 0.000363075 1 +3 0.143735767 1 +4 0.000404044 1 +3 0.047432050 1 +4 0.000315162 1 +3 0.183901229 1 +4 0.000344476 1 +3 0.103401044 1 +4 0.000342643 1 +3 0.519775970 1 +4 0.000387978 1 +3 0.023680438 1 +4 0.000321479 1 +3 0.521798478 1 +4 0.000343976 1 +3 0.109494999 1 +4 0.000336452 1 +3 0.143885891 1 +4 0.000339551 1 +3 0.047382978 1 +4 0.000312934 1 +3 0.039850761 1 +4 0.000335274 1 +3 0.223626456 1 +4 0.000598221 357 +3 2.759557850 1 +4 0.000454453 165 +3 6.463847512 1 +4 0.000484059 69 +3 0.233266723 1 +4 0.000376357 45 +3 0.189701742 1 +4 0.000378185 34 +3 2.088931237 1 +4 0.000487228 18 +3 0.498740683 1 +4 0.000530493 17 +3 0.083294029 1 +4 0.000517648 16 +3 0.082933704 1 +4 0.000589034 16 +3 0.083121594 1 +4 0.000381672 16 +3 0.083190653 1 +4 0.000378804 18 +3 0.083077548 1 +4 0.000584605 16 +3 0.082964696 1 +4 0.000477948 16 +3 1.229635017 1 +3 0.111955978 1 +3 0.106424974 1 +4 0.000402502 29 +3 0.701155126 1 +4 0.000353726 9 +3 0.072668400 1 +4 0.000476573 243 +3 0.862667867 1 +4 0.000408783 87 +3 0.169676459 1 +4 0.000385322 38 +3 0.245570905 1 +4 0.000340632 19 +3 0.169687251 1 +4 0.000347165 15 +3 0.597576864 1 +4 0.000498113 136 +3 5.727928438 1 +4 0.000378035 42 +3 0.249524958 1 +4 0.000421281 17 +3 0.365535485 1 +4 0.000362850 16 +3 6.880479377 1 +3 0.087821755 1 +4 0.000404628 28 +3 0.367357626 12 +4 0.000426716 55 +4 0.707348201 17 +3 0.130074470 1 +4 0.109903231 32 +3 1.027983646 1 +4 0.000356073 16 +3 0.655678250 1 +4 0.000371281 16 +3 0.537767701 1 +4 0.000346343 16 +3 0.349609359 1 +3 0.047872207 1 +4 0.000418273 28 +3 0.215773114 1 +4 0.000347070 17 +3 0.087473202 1 +4 0.000346937 17 +3 0.103719147 1 +4 0.000344838 17 +3 0.063617875 1 +4 0.000328166 18 +3 0.583689531 1 +4 0.000365628 17 +3 0.311682441 1 +4 0.000360082 16 +3 0.527836560 2 +4 0.000441033 27 +3 0.167394327 1 +4 0.000340744 16 +3 0.247578360 1 +3 0.048043305 1 +4 0.000443248 26 +3 0.225666468 1 +4 0.000344870 17 +3 0.213619058 1 +4 0.000394568 17 +3 0.559562890 2 +4 0.000394478 27 +3 15.848324193 1 +4 0.000419279 19 +3 0.183489003 1 +4 0.000345899 17 +3 2.687855479 1 +4 0.000386428 16 +3 0.231489856 1 +4 0.000344842 16 +3 0.500614309 1 +4 0.000372932 16 +3 0.082950621 1 +4 0.000424711 16 +3 0.082927846 1 +4 0.000359324 16 +3 0.082941249 1 +4 0.000359952 16 +3 0.083537449 1 +4 0.000432234 16 +3 0.083639033 1 +4 0.000319760 17 +3 0.082940801 1 +4 0.000367004 16 +3 0.082525413 1 +4 0.000343394 16 +3 0.364577942 1 +4 0.000374545 16 +3 0.221683183 1 +4 0.000344868 4 +3 0.175628924 1 +4 0.000394552 23 +3 0.487635634 1 +4 0.000354558 20 +3 0.304027953 1 +4 0.000420292 20 +3 0.716794830 1 +4 0.109962082 32 +3 0.588597619 1 +4 0.000363484 18 +3 0.153596439 1 +4 0.000393960 19 +3 0.205857650 1 +4 0.000340264 16 +3 0.279444090 1 +4 0.000355102 22 +3 0.223662246 1 +4 0.000430116 18 +3 0.823680490 2 +4 0.000386804 39 +3 0.367559652 1 +4 0.000371871 22 +3 0.231607979 1 +4 0.000350902 18 +3 0.803025775 1 +4 0.110021990 31 +3 0.142996783 1 +4 0.000338813 17 +3 0.247082307 1 +4 0.000455963 55 +3 0.175699074 1 +4 0.000337278 17 +3 0.159629093 1 +4 0.000409539 55 +3 8.752156863 1 +4 0.000371058 9 +3 0.159565505 1 +4 0.000362081 1 +3 0.159543856 1 +4 0.000364929 1 +3 0.135718484 1 +4 0.000430600 11 +4 0.000388491 59 +3 0.879830763 1 +4 0.000351088 35 +7 0.000591714 TSTP +7 10.775074428 CONT +4 0.000532260 7 +4 0.000283695 801 +3 122.379680708 1 +4 0.000338202 1 +3 0.975616476 1 +4 0.000372258 17 +3 0.471044194 1 +4 0.000365445 21 +3 0.319595247 1 +4 0.000347971 18 +3 0.479822759 2 +4 0.000381076 10 +3 0.087500836 1 +4 0.000372536 1 +3 0.143525511 1 +4 0.000343071 1 +3 0.095868843 1 +4 0.000446368 1 +4 0.000368224 69 +3 0.375411408 1 +4 0.000338057 35 +7 0.000563565 TSTP +7 34.800073031 CONT +4 0.000746321 7 +4 0.000257701 806 +3 1.343129903 1 +4 0.000460083 15 +3 0.499812064 1 +4 0.000412548 15 +3 0.083184054 1 +4 0.000376452 15 +3 0.083522459 1 +4 0.000408231 17 +3 0.082785596 1 +4 0.000371098 15 +3 0.488374234 1 +4 0.000340219 17 +3 0.143810199 1 +4 0.000418250 16 +3 0.153628152 1 +4 0.000340937 16 +3 0.149498016 1 +4 0.000371942 16 +3 0.153786227 1 +4 0.000337495 16 +3 0.157573629 1 +4 0.000438718 22 +3 0.312586383 1 +4 0.000370158 22 +3 0.730315193 1 +4 0.110086103 32 +3 0.382311887 2 +4 0.000382288 11 +3 0.224281839 1 +4 0.000428709 1 +3 0.126845647 1 +4 0.000438222 1 +3 0.103578691 1 +4 0.000389511 1 +4 0.000367224 70 +3 0.327889257 1 +4 0.000461851 36 +7 0.000523766 TSTP +7 14.535079922 CONT +4 0.000670302 7 +4 0.000265270 810 +3 9.103631881 1 +4 0.000367466 18 +3 0.217331832 1 +4 0.000399854 19 +3 1.421553205 1 +4 0.000361412 19 +3 0.193680658 1 +4 0.000361545 18 +3 0.141506554 1 +4 0.000387865 19 +3 0.199722276 1 +4 0.000355568 16 +3 0.223687340 1 +4 0.000436533 32 +3 0.311582460 1 +4 0.000362446 10 +3 0.119464594 1 +4 0.000321298 1 +3 0.127769465 1 +4 0.000342437 1 +3 0.103694545 1 +4 0.000358101 1 +4 0.000603249 10 +4 0.000399811 59 +3 8.535483151 1 +4 0.000405372 36 +7 0.000583666 TSTP +7 5.998846396 CONT +4 0.000580307 7 +4 0.000295594 766 +4 0.000503637 36 +3 2.294722820 1 +4 0.000388838 26 +3 3.503556579 1 +4 0.000373627 9 +3 0.143605993 1 +4 0.000330021 1 +3 0.175570042 1 +4 0.000329775 1 +3 0.119669497 1 +4 0.000384506 1 +4 0.000341788 54 +4 0.000338318 15 +3 21.992383039 1 +4 0.000380385 9 +3 0.334960478 1 +4 0.000376254 1 +3 0.159566818 1 +4 0.000360293 1 +3 0.175726678 1 +4 0.000340187 1 +3 0.215654078 1 +4 0.000324899 1 +3 0.127898264 1 +4 0.000574071 755 +3 1.687538943 1 +3 0.129829547 1 +4 0.000370848 30 +3 0.957674306 1 +4 0.000593030 675 +3 0.137423633 1 +4 0.000468474 17 +3 0.909460482 1 +4 0.000495247 15 +3 0.169503370 1 +4 0.000378756 15 +3 0.157521154 1 +4 0.000329270 15 +3 0.153895847 1 +4 0.000350257 17 +3 0.141571021 1 +4 0.000342057 15 +3 0.121773778 1 +4 0.000365563 15 +3 0.101450868 1 +4 0.000354511 15 +3 0.248445006 1 +4 0.000408703 76 +3 0.446846618 1 +3 0.135861200 1 +4 0.000378781 21 +3 0.399849423 1 +4 0.000333820 17 +3 0.167659310 1 +4 0.000360256 23 +3 0.087678898 1 +4 0.000330257 18 +3 0.223584124 1 +4 0.000395566 18 +3 0.015619789 1 +4 0.000336952 18 +3 0.392545632 1 +4 0.000342836 16 +3 0.118843946 1 +4 0.000372277 17 +3 0.151461990 1 +4 0.000336400 18 +3 0.264330546 1 +4 0.000391538 18 +3 0.167508769 1 +4 0.000346292 18 +3 0.151135765 1 +4 0.000432924 19 +3 0.111685031 1 +4 0.000331441 18 +3 0.079619828 1 +4 0.000361622 18 +3 0.119696776 1 +4 0.000336516 18 +3 0.713742396 1 +3 0.086780048 1 +4 0.000360976 32 +3 0.110696559 1 +4 0.000325357 15 +3 0.153844943 1 +4 0.000350991 17 +3 0.335340094 1 +4 0.000353421 16 +3 5.974912521 1 +4 0.000358901 16 +3 0.129029239 1 +4 0.000374149 16 +3 0.237395351 1 +3 0.088025697 1 +4 0.000363525 4 +3 0.167722244 1 +3 0.055909963 1 +4 0.000352863 4 +3 0.175656873 1 +3 0.040047222 1 +4 0.000400447 6 +3 0.247662054 1 +3 0.055969909 1 +4 0.000361014 4 +3 0.591591932 1 +4 0.000389174 21 +3 0.599701281 1 +4 0.000383012 4 +3 0.185704845 1 +4 0.000340460 4 +3 0.117530795 1 +4 0.000336025 4 +3 0.127651288 1 +4 0.000326314 23 +3 0.227617576 21 +4 0.000394931 49 +3 0.739762936 1 +4 0.000364907 28 +3 2.933895249 24 +4 0.000409806 52 +3 0.809380993 2 +4 0.000386852 35 +3 0.359707158 1 +3 0.145967481 1 +4 0.000488735 83 +3 0.245435757 1 +3 0.153976145 1 +4 0.000379350 87 +3 0.205686113 1 +3 0.171590848 1 +4 0.000383419 73 +3 0.180070094 1 +3 0.169972937 1 +4 0.000411777 62 +3 0.205778448 1 +3 0.170474122 1 +4 0.000392368 62 +3 0.228967146 1 +3 0.154108572 1 +4 0.000466808 84 +3 0.669659733 1 +4 0.000357843 17 +3 0.279718786 1 +4 0.000387121 58 +3 3.863563779 2 +3 0.129957922 1 +4 0.000396599 98 +3 0.717649806 1 +4 0.000393166 23 +3 0.399692174 1 +4 0.000384597 10 +3 0.112958508 1 +4 0.000337201 1 +3 0.126218681 1 +4 0.000316153 1 +3 0.095579406 1 +4 0.000400509 1 +4 0.000780511 10 +4 0.000384998 59 +3 1.879097413 1 +4 0.000405332 36 +7 0.000520590 TSTP +7 119.826827916 CONT +4 0.000775849 7 +4 0.000260731 821 +3 4.375067531 1 +4 0.000381934 10 +3 0.279467306 1 +4 0.000361364 1 +3 0.207587374 1 +4 0.000343894 1 +3 0.167709587 1 +4 0.000368746 1 +3 0.215741233 1 +4 0.000337767 1 +3 0.223551818 1 +4 0.000538641 264 +3 2.239531984 1 +4 0.000353768 9 +3 0.087861376 1 +4 0.000434604 172 +3 0.591198116 1 +4 0.000413197 87 +3 27.650282086 1 +4 0.000375320 15 +3 0.216036186 1 +4 0.000339618 15 +3 0.557577555 1 +4 0.000361545 17 +3 0.135514992 1 +4 0.000849186 16 +3 0.209302149 1 +4 0.000328994 16 +3 0.213714076 1 +4 0.000342101 17 +3 0.169517039 1 +4 0.000346635 17 +3 0.421847735 1 +4 0.000351468 17 +3 0.151544748 1 +3 0.080143076 1 +4 0.000351960 20 +3 0.263690201 1 +3 0.055774217 1 +4 0.000399576 5 +3 0.367654328 1 +4 0.000375681 6 +3 0.719657836 1 +4 0.000434688 16 +3 0.263521851 1 +4 0.000346499 23 +3 0.279746476 1 +4 0.000380054 18 +3 0.710073289 1 +4 0.110008539 32 +3 2.347598243 1 +4 0.000393924 10 +3 0.079685270 1 +4 0.000401395 1 +3 0.135456431 1 +4 0.000371437 1 +3 0.103691393 1 +4 0.000349437 1 +4 0.000385114 70 +3 0.239821236 1 +4 0.000335297 36 +7 0.000505632 TSTP +7 1.230823148 CONT +4 0.000675817 7 +4 0.000350616 7 +4 0.000294831 850 +3 23.808037641 1 +4 0.000483238 16 +3 0.200756075 1 +4 0.000342844 16 +3 0.165768291 1 +4 0.000389865 39 +3 0.161467370 1 +4 0.000407762 73 +3 0.317657050 1 +4 0.000374583 18 +3 0.185507615 1 +4 0.000350344 21 +3 1.685930882 1 +4 0.000430918 10 +3 0.199468221 1 +4 0.000349579 1 +3 0.143750021 1 +4 0.000326515 1 +3 0.119605560 1 +4 0.000326526 1 +3 0.119984250 1 +4 0.000409566 39 +3 0.615348721 1 +4 0.000597532 913 +3 1.681877265 1 +4 0.000578058 666 +3 1.213063033 1 +4 0.000566762 724 +3 0.953636042 1 +4 0.000630790 344 +3 0.957197011 1 +4 0.000371631 20 +4 0.000424486 669 +3 31.555179780 1 +4 0.000616650 744 +3 1.020593190 1 +4 0.000362479 10 +3 0.071589347 1 +4 0.000625290 674 +3 3.136312054 1 +4 0.000364258 62 +3 0.679052733 1 +4 0.000576460 579 +3 0.487292331 1 +4 0.000395222 55 +3 1.047614227 1 +4 0.000459645 19 +4 0.000402406 782 +3 0.689108023 1 +4 0.000509481 408 +3 0.709404492 1 +4 0.000578293 720 +3 1.201603521 1 +4 0.000570565 855 +3 0.661291698 1 +4 0.000581138 748 +3 3.121724722 1 +4 0.000605819 657 +3 0.933460490 1 +4 0.000563268 560 +3 0.655363138 1 +4 0.000617957 838 +3 0.895563613 1 +4 0.000555777 612 +3 0.471409918 1 +4 0.000558188 583 +3 0.503285278 1 +4 0.000412215 55 +4 0.000375934 748 +3 0.999404469 1 +4 0.000397323 10 +3 0.119496582 1 +4 0.000334729 1 +3 0.119657542 1 +4 0.000366361 1 +4 0.001255341 8 +4 0.000320612 23 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.7 b/lib/iolog/regress/corpus/seed/timing/timing.7 new file mode 100644 index 0000000..320a868 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.7 @@ -0,0 +1,10 @@ +3 0.731998581 1 +4 0.001916416 2 +7 0.002850082 TSTP +7 0.683456735 CONT +3 0.688967687 1 +4 0.001667674 2 +7 0.002277631 TSTP +7 0.515107145 CONT +3 0.343713993 1 +4 0.002050968 2 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.8 b/lib/iolog/regress/corpus/seed/timing/timing.8 new file mode 100644 index 0000000..5fabcc4 --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.8 @@ -0,0 +1,891 @@ +4 0.064664132 32 +4 0.000859566 850 +3 1.028898872 1 +4 0.001747739 9 +3 0.926126566 1 +4 0.001425060 1 +3 0.198414833 1 +4 0.001499542 1 +3 0.134447257 1 +4 0.001506297 1 +3 0.118268537 1 +4 0.001541057 1 +3 0.086780988 1 +4 0.001622847 1 +3 0.062239852 1 +4 0.001588923 1 +3 0.214384951 1 +4 0.001460651 1 +3 0.086510579 1 +4 0.003193030 911 +3 1.981206350 1 +4 0.001460605 17 +3 0.342451860 1 +3 0.121863647 1 +4 0.001573592 30 +3 0.260718112 1 +4 0.104455308 53 +3 0.215829722 1 +4 0.001744179 18 +3 0.365827912 1 +4 0.001569107 23 +3 0.846427645 1 +4 0.001572957 19 +3 0.814749657 1 +4 0.001575922 19 +3 0.182163938 1 +4 0.001568547 19 +3 0.414578434 1 +4 0.001656973 19 +3 0.318272879 1 +4 0.001584842 19 +3 0.262367325 1 +4 0.001488336 19 +3 0.230410279 1 +4 0.109315456 37 +4 0.001609717 49 +3 0.353056895 1 +4 0.001788404 10 +3 0.094128417 1 +4 0.001531837 1 +3 0.142508934 1 +4 0.001593153 1 +3 0.126357885 1 +4 0.002388055 15 +4 0.001432636 58 +3 1.228902472 1 +4 0.002391036 40 +7 0.002743419 TSTP +7 5025.564659632 CONT +4 0.003192704 7 +4 0.001526602 997 +3 0.793028278 1 +4 0.003000277 40 +7 0.002235214 TSTP +7 5925.171790777 CONT +4 0.002096058 7 +4 0.001318204 7 +4 0.001159538 900 +3 0.984554657 1 +4 0.001469616 40 +7 0.002327650 TSTP +7 6189.225069749 CONT +4 0.002104678 7 +4 0.001037801 7 +4 0.001216318 900 +3 1.161146125 1 +4 0.001439585 16 +3 0.814606611 1 +4 0.001606528 21 +3 0.230277078 1 +4 0.001975296 53 +3 0.190021728 1 +3 0.096129999 1 +4 0.001594887 33 +3 0.182291714 1 +4 0.001773170 4 +3 0.326454021 1 +4 0.001484961 9 +3 0.366715902 1 +4 0.001543752 1 +3 0.446210491 1 +4 0.001689363 1 +3 0.006253433 1 +4 0.001433390 1 +3 0.064300445 1 +4 0.001604202 1 +3 0.340813942 1 +4 0.001517377 1 +3 0.160276062 1 +4 0.002970366 1 +3 0.058797601 1 +4 0.001392200 1 +3 0.127730195 1 +4 0.001667163 1 +3 0.094630017 1 +4 0.001782949 1 +4 0.001676588 70 +3 0.355976786 1 +4 0.001506307 39 +7 0.002105798 TSTP +7 14.292867168 CONT +4 0.002398126 7 +4 0.001008191 7 +4 0.001088992 984 +3 1.219079321 1 +4 0.001760534 21 +3 0.285906574 1 +4 0.001752349 60 +3 0.190367416 1 +4 0.105561951 31 +3 0.022256270 1 +4 0.001478141 15 +3 0.206781774 1 +4 0.001554002 4 +3 0.270277605 1 +4 0.001420215 9 +3 0.118523501 1 +4 0.001731089 1 +3 0.126173273 1 +4 0.001409300 1 +3 0.118763318 1 +4 0.001517062 1 +4 0.001639842 70 +3 0.293063491 1 +4 0.001358755 39 +7 0.002350591 TSTP +7 88449.593270142 CONT +4 0.002494607 7 +4 0.001958302 991 +3 0.825250499 1 +4 0.001436475 9 +3 0.438398078 1 +4 0.001697468 32 +3 1.350305447 1 +4 0.001477446 15 +3 0.168253265 1 +4 0.001493751 15 +3 0.180841618 1 +4 0.001722349 21 +3 0.182231663 1 +4 0.001695639 47 +3 0.230290135 1 +4 0.109360689 31 +3 0.178605949 1 +4 0.111499107 1 +3 0.144875484 1 +4 0.001417120 9 +3 0.150117516 1 +4 0.001488857 1 +3 0.110446391 1 +4 0.001616968 1 +3 0.110541552 1 +4 0.001419525 1 +4 0.001945622 10 +4 0.001402320 60 +3 6.452086794 1 +4 0.001500216 73 +3 0.405864230 1 +4 0.001626618 9 +3 0.134289323 1 +4 0.001338674 1 +3 0.142601704 1 +4 0.001527262 1 +3 0.102629985 1 +4 0.001900211 11 +4 0.001350750 60 +3 0.405180113 1 +4 0.001535457 39 +7 0.002495892 TSTP +7 221561.264483987 CONT +4 0.002009587 7 +4 0.001101567 7 +4 0.001442021 919 +4 0.001278489 65 +3 5.463826160 1 +4 0.001484976 15 +3 0.184226629 1 +4 0.001414341 15 +3 0.292783684 1 +3 0.153810375 1 +4 0.001446971 27 +3 0.268656044 1 +4 0.002896326 120 +3 0.285181477 1 +4 0.001661168 15 +3 0.150478007 1 +4 0.001453396 22 +3 0.230540344 1 +4 0.001440316 53 +3 0.166485119 1 +3 0.087962359 1 +4 0.001508426 33 +3 0.222749504 1 +4 0.001509546 18 +3 1.894427201 1 +4 0.001588127 26 +3 1.518514800 1 +4 0.001448627 18 +3 0.222417824 1 +4 0.001472537 24 +3 0.190411167 1 +4 0.001525827 19 +3 0.838594711 1 +3 0.031760695 1 +4 0.001551002 38 +3 0.870824301 1 +4 0.001489017 16 +3 1.014356232 1 +4 0.001701719 18 +3 0.822415083 1 +4 0.001494696 24 +3 0.222596147 1 +4 0.001432681 19 +3 0.310526270 1 +4 0.001596028 19 +3 0.126330981 1 +4 0.001500257 19 +3 0.174752799 1 +4 0.001638468 20 +3 0.253981113 1 +4 0.001461846 37 +3 0.254649605 1 +4 0.103883614 34 +3 0.200314766 1 +4 0.001387905 20 +3 0.406667304 1 +4 0.001731770 17 +3 0.110003286 1 +4 0.001520397 23 +3 0.230621930 1 +4 0.001493146 24 +3 0.446629930 1 +4 0.001496936 16 +3 0.254613349 1 +4 0.001397571 15 +3 0.166240486 1 +4 0.001700974 22 +3 0.190319056 1 +4 0.001517261 58 +3 0.254819347 1 +4 0.107582560 31 +3 0.292233944 1 +4 0.001445151 9 +3 0.110475422 1 +4 0.001698858 1 +3 0.094333824 1 +4 0.001586513 77 +3 0.326387580 1 +4 0.001661283 39 +7 0.002204689 TSTP +7 0.556717292 CONT +4 0.002623429 7 +4 0.001179768 1027 +3 0.267631453 1 +4 0.001424285 9 +3 0.110521878 1 +4 0.001441585 1 +3 0.127356593 1 +4 0.001510382 1 +3 0.077681400 1 +4 0.001539912 1 +4 0.001640563 70 +3 0.388998560 1 +4 0.001719929 39 +7 0.002200549 TSTP +7 13.244385459 CONT +4 0.000729218 7 +4 0.000294418 1005 +3 7.079466151 1 +4 0.001791190 45 +3 0.205970549 1 +4 0.001643508 17 +3 0.414571661 1 +4 0.001531132 16 +3 0.222850249 1 +4 0.001640468 17 +3 0.205982399 1 +4 0.001558167 17 +3 0.134087222 1 +4 0.001465226 17 +3 0.166847603 1 +4 0.001662358 17 +3 0.126370137 1 +4 0.001446416 17 +3 0.550630445 1 +4 0.001435360 16 +3 0.334496380 1 +4 0.001602892 19 +3 1.686172041 1 +4 0.000346437 17 +3 0.151576266 1 +4 0.000349729 16 +3 0.319957850 1 +4 0.001433906 17 +3 0.166454049 1 +4 0.001689503 17 +3 0.062391632 1 +4 0.001573468 17 +3 0.150461777 1 +4 0.001457996 16 +3 0.070532447 1 +4 0.001422680 17 +3 0.086873802 1 +4 0.001815970 16 +3 0.189849021 1 +4 0.001595918 19 +3 0.126580914 1 +4 0.001572067 18 +3 0.102119195 1 +4 0.001489716 18 +3 0.110616169 1 +4 0.001610073 18 +3 0.142382103 1 +4 0.001462456 18 +3 0.062502293 1 +4 0.001701379 17 +3 0.214412562 1 +4 0.001462741 18 +3 1.198409314 1 +4 0.000460850 17 +3 0.999678958 1 +4 0.000331997 17 +3 0.127804986 1 +4 0.000303396 18 +3 0.151363097 1 +4 0.000316266 18 +3 0.112134826 1 +4 0.001454656 18 +3 0.150624064 1 +4 0.001407951 37 +3 0.222441090 1 +4 0.111006972 33 +3 0.281208333 1 +4 0.001415495 17 +3 0.150437782 1 +3 0.063714477 1 +4 0.001565847 27 +3 0.214617624 1 +4 0.001526422 18 +3 0.062489458 1 +4 0.001570842 18 +3 0.166474689 1 +4 0.001500832 18 +3 0.030451545 1 +4 0.001512782 20 +3 0.222611776 1 +4 0.001628519 19 +3 0.030120866 1 +4 0.001466336 19 +3 0.030404355 1 +4 0.001619698 19 +3 0.334815583 1 +4 0.108865834 33 +3 0.187010010 1 +4 0.001488371 17 +3 0.126381232 1 +4 0.001505957 14 +3 0.126545303 1 +3 0.112060040 1 +4 0.001389665 9 +3 0.422737541 1 +4 0.001438741 1 +3 0.286661427 1 +4 0.001490682 1 +3 0.152535520 1 +4 0.001536577 36 +3 0.324257351 1 +4 0.001444521 9 +3 0.142471479 1 +4 0.001356360 1 +3 0.158776959 1 +4 0.001371060 1 +3 0.094594897 1 +4 0.001367810 33 +4 0.001464076 23 +3 0.549135158 1 +4 0.001431856 9 +3 0.126501453 1 +4 0.001472637 1 +3 0.126547613 1 +4 0.001491527 1 +3 0.078728327 1 +4 0.001626128 11 +4 0.001487806 59 +3 0.340831284 1 +4 0.001617373 39 +7 0.002583839 TSTP +7 514445.097903843 CONT +4 0.002257030 7 +4 0.002294835 1007 +3 0.945625170 1 +4 0.002777691 39 +7 0.002355126 TSTP +7 86184.341362582 CONT +4 0.002221120 7 +4 0.001443996 7 +4 0.001283714 914 +3 2.392062045 1 +4 0.002652904 12 +4 0.001409386 27 +7 0.002425876 TSTP +7 21288.589641005 CONT +4 0.002742450 7 +4 0.001324494 7 +4 0.002229915 914 +3 1.223042554 1 +4 0.001448160 39 +7 0.002279495 TSTP +7 2137.685708492 CONT +4 0.004071430 7 +4 0.001616922 7 +4 0.001927357 914 +3 0.830124110 1 +4 0.001490492 39 +7 0.003177815 TSTP +7 17415.985595701 CONT +4 0.002433577 7 +4 0.000994215 7 +4 0.001078497 914 +3 1.240972872 1 +4 0.001393460 39 +7 0.002303475 TSTP +7 601.486631680 CONT +4 0.002426206 7 +4 0.001210918 7 +4 0.001102268 914 +3 0.857339012 1 +4 0.001674773 39 +7 0.002435617 TSTP +7 391818.529264947 CONT +4 0.000657391 7 +4 0.000218089 7 +4 0.000220770 914 +3 0.357849108 1 +4 0.001405050 9 +3 0.166742233 1 +4 0.001567897 1 +3 0.438304127 1 +4 0.001349665 1 +3 0.168918821 1 +4 0.001550563 32 +3 0.308645085 1 +4 0.001736869 39 +7 0.002554823 TSTP +7 303016.218109119 CONT +4 0.002752175 7 +4 0.001469450 7 +4 0.001455036 914 +3 0.887365475 1 +4 0.001395045 39 +7 0.002446251 TSTP +7 215139.725383626 CONT +4 0.002051468 7 +4 0.001705964 7 +4 0.001550202 914 +3 2.231928411 1 +4 0.001527117 15 +3 0.498266348 1 +4 0.001486902 15 +3 0.082105873 1 +4 0.001468756 15 +3 0.081830336 1 +4 0.001803544 15 +3 0.081630069 1 +4 0.001465996 15 +3 0.082089163 1 +4 0.001416686 15 +3 0.081225139 1 +4 0.001559182 15 +3 0.081618058 1 +4 0.001515897 15 +3 0.358906691 1 +4 0.001396906 14 +3 0.470357374 1 +4 0.001615638 20 +3 0.590548039 1 +4 0.001531272 52 +3 0.318289227 1 +4 0.106849942 30 +3 0.589134119 1 +4 0.001647973 13 +3 0.238312812 1 +4 0.001495872 14 +3 0.254615192 1 +3 0.680285637 1 +4 0.001795360 57 +3 0.013906154 1 +3 0.616146242 1 +3 0.409887356 1 +4 0.001467901 76 +3 0.516728247 1 +4 0.001690474 38 +3 0.382235119 1 +4 0.001520617 8 +3 0.142389056 1 +4 0.001473906 1 +3 0.142420386 1 +4 0.001444666 1 +3 0.174696653 1 +4 0.001473371 1 +4 0.001439716 69 +3 19.886035460 1 +4 0.001387176 8 +3 0.198563762 1 +4 0.001444846 1 +3 0.150104471 1 +4 0.001389040 1 +3 0.070689737 1 +4 0.001632588 1 +3 0.222393421 1 +4 0.001440621 1 +3 0.238663600 1 +4 0.001475092 1 +3 0.062492711 1 +4 0.001421216 1 +3 0.182816888 1 +4 0.002090833 97 +3 1.334082056 1 +4 0.001590818 13 +3 0.305939475 1 +4 0.001700324 67 +3 0.235779724 1 +4 0.001464116 19 +4 0.001492152 35 +3 0.964004231 1 +4 0.001741719 50 +3 0.278959707 1 +4 0.001432251 21 +3 0.182114085 1 +4 0.001620368 47 +3 0.350179179 1 +4 0.107922284 31 +3 0.131951961 1 +4 0.001523742 9 +3 0.094135896 1 +4 0.001403400 1 +3 0.142636459 1 +4 0.001577172 1 +3 0.094638578 1 +4 0.001459331 1 +4 0.001541516 70 +3 96.145045437 1 +4 0.001549497 73 +3 0.341566794 1 +4 0.001548772 24 +3 0.498636188 1 +4 0.001599858 36 +3 0.081953121 1 +4 0.001685429 80 +3 0.081549192 1 +4 0.001707554 73 +3 0.081462547 1 +4 0.001545412 29 +3 0.081530717 1 +4 0.001500116 28 +3 0.082355147 1 +4 0.001531262 66 +3 0.081767874 1 +4 0.001744160 38 +3 0.789979541 1 +4 0.001606227 4 +3 0.358523227 1 +4 0.001604633 82 +3 0.272270038 1 +4 0.001443841 34 +3 0.332620240 1 +4 0.001770160 29 +3 0.624231837 1 +4 0.001632883 64 +3 1.652451899 1 +4 0.001654788 70 +3 0.734505012 1 +4 0.001562342 93 +3 1.880416967 1 +4 0.001634748 95 +3 0.428543082 1 +4 0.001622603 82 +3 0.984350791 1 +4 0.001579713 61 +3 2.260460546 1 +4 0.001487417 4 +3 1.174634347 1 +4 0.109238624 1 +3 0.122995541 1 +4 0.001469521 9 +3 0.205892618 1 +4 0.001436966 1 +3 0.190721400 1 +4 0.001453656 1 +3 0.230410960 1 +4 0.001382565 1 +4 0.001685329 10 +4 0.001422790 60 +3 497.229682755 1 +4 0.001702369 64 +3 0.373140824 1 +4 0.001650363 53 +3 0.222094912 1 +4 0.108091981 31 +3 0.020290645 1 +4 0.002822676 16 +3 0.429852456 1 +4 0.001597523 4 +3 0.309925354 1 +4 0.004018280 9 +3 0.107818588 1 +4 0.002077103 1 +3 0.157934667 1 +4 0.001607838 1 +3 0.142065202 1 +4 0.001527667 1 +4 0.001288279 70 +3 3.669505533 1 +4 0.001787579 112 +3 0.333964666 1 +4 0.001474371 16 +3 0.350737976 1 +4 0.001566112 4 +3 0.390887715 1 +4 0.002744260 9 +3 0.140604781 1 +4 0.001397456 1 +3 0.142504391 1 +4 0.001401601 1 +3 0.134659340 1 +4 0.001721459 11 +4 0.001419231 60 +3 26.822251418 1 +4 0.001519201 39 +7 0.002500413 TSTP +7 525.340953853 CONT +4 0.002230704 7 +4 0.001091722 7 +4 0.001688199 989 +3 11.498496123 1 +4 0.001568418 21 +3 0.270488068 1 +4 0.001494706 53 +3 0.181928393 1 +4 0.108733447 31 +3 0.011220234 1 +4 0.000300299 16 +3 0.186000031 1 +4 0.000368706 15 +3 0.165946487 1 +4 0.001458631 15 +3 0.206296603 1 +4 0.001388705 4 +3 0.398763618 1 +4 0.001733419 9 +3 0.134039163 1 +4 0.001352560 1 +3 0.150563986 1 +4 0.001774664 1 +3 0.118604493 1 +4 0.001889116 1 +4 0.001338740 10 +4 0.001224763 60 +3 39.317057656 1 +4 0.001529292 114 +3 0.526420139 1 +4 0.001762420 24 +3 1.453889027 1 +4 0.001660013 9 +3 0.142498857 1 +4 0.001503141 1 +3 0.158253476 1 +4 0.001575483 1 +3 0.126616056 1 +4 0.001599948 11 +4 0.001609493 60 +3 18.669558170 1 +4 0.001706343 39 +7 0.002530179 TSTP +7 899.138795805 CONT +4 0.002583274 7 +4 0.001100897 996 +3 22.924250602 1 +4 0.001534347 39 +7 0.002390422 TSTP +7 33.389385737 CONT +4 0.002581218 7 +4 0.001103253 909 +3 1.300181276 1 +4 0.001546257 21 +3 0.222059492 1 +4 0.001546522 53 +3 0.238415013 1 +4 0.109184843 31 +3 0.379042919 1 +4 0.001510807 16 +3 0.728577452 1 +4 0.001415450 15 +3 0.348526297 1 +4 0.001532597 15 +3 0.238429373 1 +4 0.001420890 4 +3 0.494674934 1 +4 0.001382005 9 +3 0.142381471 1 +4 0.001641738 1 +3 0.158314351 1 +4 0.001517022 1 +3 0.110660725 1 +4 0.001756579 11 +4 0.001475116 60 +3 4.469140151 1 +4 0.001770309 114 +3 1.342163731 1 +4 0.001480936 15 +3 0.120459473 1 +4 0.001589178 15 +3 0.356430164 1 +4 0.001456581 4 +3 0.334376125 1 +4 0.001466151 9 +3 0.126632301 1 +4 0.001454071 1 +3 0.126422069 1 +4 0.001605663 1 +3 0.150550710 1 +4 0.001745935 11 +4 0.001392925 60 +3 4.325068886 1 +4 0.001720604 39 +7 0.002486903 TSTP +7 891.514393588 CONT +4 0.002117423 7 +4 0.001018707 7 +4 0.001061871 989 +3 0.962925345 1 +4 0.001912621 39 +7 0.002395502 TSTP +7 223.988309212 CONT +4 0.004026484 7 +4 0.003277921 909 +3 0.824140274 1 +4 0.001467277 39 +7 0.002166324 TSTP +7 165.969859204 CONT +4 0.002685960 7 +4 0.001102062 909 +3 1.204357411 1 +4 0.001592647 39 +7 0.002600499 TSTP +7 365.952349812 CONT +4 0.002136278 7 +4 0.001015612 7 +4 0.001090512 902 +3 2.587193742 1 +4 0.001677088 21 +3 0.238212841 1 +4 0.001453711 58 +3 0.182738187 1 +4 0.103895514 31 +3 0.015860486 1 +4 0.001442766 16 +3 0.175100452 1 +4 0.001623353 4 +3 0.317922373 1 +4 0.001434376 9 +3 0.118643218 1 +4 0.001451876 1 +3 0.143568628 1 +4 0.001493967 1 +3 0.133445736 1 +4 0.001666329 11 +4 0.001563117 60 +3 10.886975712 1 +4 0.001788550 107 +3 1.028357489 1 +4 0.001568272 16 +3 0.222512547 1 +4 0.001624668 4 +3 0.422244017 1 +4 0.001640078 9 +3 0.118441936 1 +4 0.001454661 1 +3 0.190559708 1 +4 0.001502192 1 +3 0.063679725 1 +4 0.001555767 1 +4 0.001457386 70 +3 1.371874710 1 +4 0.001718184 39 +7 0.002116473 TSTP +7 1576.050026568 CONT +4 0.002127468 7 +4 0.001049282 7 +4 0.001639418 924 +4 0.001391265 65 +3 1.523879474 1 +4 0.001548957 21 +3 0.250838772 1 +4 0.001700133 58 +3 0.230340197 1 +4 0.104563743 31 +3 0.239123573 1 +4 0.001496932 15 +3 0.729816646 1 +4 0.001550162 15 +3 1.187192299 1 +4 0.001481971 9 +3 0.110402577 1 +4 0.001412975 1 +3 0.158515493 1 +4 0.001436916 1 +3 0.094598474 1 +4 0.001499411 1 +4 0.001518196 70 +3 9.365579810 1 +4 0.001831315 77 +3 1.182085879 1 +4 0.001472681 43 +3 0.390399757 1 +4 0.001662683 15 +3 0.184476161 1 +4 0.001397095 15 +3 0.348555334 1 +4 0.001499592 4 +3 0.270318004 1 +4 0.001536837 9 +3 0.150522705 1 +4 0.001440726 1 +3 0.150446974 1 +4 0.001533892 1 +3 0.102548415 1 +4 0.001787650 11 +4 0.001647433 60 +3 2.916930093 1 +4 0.001625608 114 +3 0.214224046 1 +4 0.001634898 15 +3 0.184268399 1 +4 0.001487721 15 +3 0.564812318 1 +4 0.001470741 4 +3 0.342338326 1 +4 0.001475527 9 +3 0.102308113 1 +4 0.001503831 1 +3 0.142560303 1 +4 0.001449421 1 +3 0.086868864 1 +4 0.001684149 11 +4 0.001568817 60 +3 2.300776175 1 +4 0.001568797 65 +3 0.182344003 1 +4 0.001525456 19 +3 0.270439101 1 +4 0.001373955 9 +3 0.126832641 1 +4 0.001451926 1 +3 0.126404321 1 +4 0.001414901 1 +3 0.102456485 1 +4 0.001882240 11 +4 0.001455061 60 +3 2.589161412 1 +4 0.001532046 107 +3 0.310199760 1 +4 0.001553737 9 +3 0.102485115 1 +4 0.001450441 1 +3 0.142337871 1 +4 0.001438495 1 +3 0.102649342 1 +4 0.001621893 11 +4 0.001480321 60 +3 1.557961175 1 +4 0.000416039 39 +7 0.000477545 TSTP +7 8128.685130733 CONT +4 0.002319896 7 +4 0.001163737 996 +3 0.290820915 1 +4 0.000331067 9 +3 0.616107098 1 +4 0.001559643 32 +3 0.238160217 1 diff --git a/lib/iolog/regress/corpus/seed/timing/timing.9 b/lib/iolog/regress/corpus/seed/timing/timing.9 new file mode 100644 index 0000000..2d566ba --- /dev/null +++ b/lib/iolog/regress/corpus/seed/timing/timing.9 @@ -0,0 +1,416 @@ +4 0.026820058 32 +4 0.001711422 762 +4 0.000339736 53 +3 0.905773982 1 +4 0.000700765 860 +3 0.407034180 1 +4 0.001790364 9 +3 0.510563157 1 +4 0.002274839 29 +3 0.269760922 1 +4 0.002799020 895 +3 0.261256015 1 +4 0.001780719 8 +3 0.285937300 1 +4 0.002033227 1 +3 0.062079447 1 +4 0.001816029 1 +3 0.198257089 1 +4 0.001487481 1 +3 0.128223837 1 +4 0.001924376 1 +3 0.108202451 1 +4 0.002071588 1 +3 0.069737343 1 +4 0.001511027 1 +3 0.174650250 1 +4 0.001780474 1 +3 0.062641443 1 +4 0.002176683 40 +3 0.877270244 1 +4 0.000430823 16 +3 0.289936925 1 +4 0.002316440 15 +3 0.363768246 1 +4 0.001806569 15 +3 0.320027982 1 +4 0.002890541 232 +3 8.683563015 1 +4 0.000607468 172 +3 0.735169546 1 +4 0.000381425 40 +7 0.000714068 TSTP +7 4.679016635 CONT +4 0.001236107 7 +4 0.000355486 868 +3 0.486326156 1 +4 0.000368280 16 +3 0.500332044 1 +4 0.001645467 19 +3 0.081610572 1 +4 0.002250109 18 +3 0.081911959 1 +4 0.001516567 17 +3 0.082431635 1 +4 0.001610247 18 +3 0.082161797 1 +4 0.003386766 17 +3 0.080508120 1 +4 0.001542922 18 +3 0.082616917 1 +4 0.001645122 16 +3 0.081939075 1 +4 0.001501656 16 +3 0.511385566 1 +4 0.002390561 15 +3 0.245498856 1 +4 0.001952776 21 +3 0.223035995 1 +4 0.003835676 55 +3 0.186797228 1 +3 0.047844172 1 +4 0.000732686 37 +4 0.000319482 45 +3 0.143148267 1 +4 0.000323210 22 +4 0.000313341 53 +3 0.167541047 1 +4 0.001531157 15 +3 0.126430707 1 +4 0.001452986 73 +3 0.142488895 1 +4 0.001809904 15 +3 0.158496117 1 +4 0.001794434 70 +3 0.206419877 1 +4 0.002088947 16 +3 0.143391926 1 +4 0.000370251 15 +3 0.141381098 1 +4 0.000358046 15 +3 0.191688547 1 +4 0.000427144 46 +3 0.208167967 1 +4 0.102311817 22 +3 0.089357005 1 +4 0.000398479 9 +3 0.127420516 1 +4 0.000380604 1 +3 0.143659945 1 +4 0.000327122 1 +3 0.096070029 1 +4 0.002590102 1 +4 0.002764385 70 +3 0.506400385 1 +4 0.000377794 39 +7 0.000611796 TSTP +7 2.327330424 CONT +4 0.000495748 7 +4 0.000441282 7 +4 0.000373026 881 +3 0.735006268 1 +4 0.001573642 9 +3 0.342034557 1 +4 0.000484931 1 +3 0.103713531 1 +4 0.000637123 1 +3 0.183071121 1 +4 0.000357114 1 +3 0.119472186 1 +4 0.000380389 1 +3 0.207816458 1 +4 0.000336918 1 +3 0.079764969 1 +4 0.000396629 1 +3 0.063696314 1 +4 0.001863508 1 +3 0.270414990 1 +4 0.003903627 1 +3 0.276201466 1 +4 0.002198988 1 +3 0.149500975 1 +4 0.001513607 1 +3 0.215266651 1 +4 0.002604633 13 +4 0.002562303 871 +3 0.738702176 1 +4 0.002825906 1002 +3 2.005235450 1 +4 0.004513134 16 +3 0.523238388 1 +4 0.001690173 21 +3 0.293580307 1 +4 0.000509384 59 +3 0.279677930 1 +4 0.106364722 31 +3 0.661572887 1 +4 0.000362005 9 +3 0.127723461 1 +4 0.000433533 1 +3 0.143495220 1 +4 0.000559143 1 +3 0.095541842 1 +4 0.000617635 1 +4 0.000341242 55 +4 0.000258160 15 +3 0.302985707 1 +4 0.000369362 69 +3 0.353548453 1 +4 0.000657140 1249 +3 0.934092779 1 +4 0.002462327 53 +4 0.002104332 869 +3 0.634609718 1 +4 0.000441319 40 +7 0.000443732 TSTP +7 1.744019170 CONT +4 0.001795958 7 +4 0.000416107 7 +4 0.000539438 866 +4 0.000421610 53 +3 0.588160440 1 +4 0.001847652 773 +3 0.382350930 1 +4 0.002998357 995 +3 0.212912612 1 +4 0.001679020 988 +3 0.454277400 1 +4 0.000594016 763 +3 0.608608241 1 +4 0.003235459 255 +3 0.619577351 1 +4 0.000444752 12 +3 0.576479814 1 +4 0.003941878 9 +3 0.267043488 1 +4 0.000498001 1 +3 0.143318045 1 +4 0.000893037 1 +3 0.191448484 1 +4 0.000462690 1 +3 0.071606137 1 +4 0.000681691 1 +3 1.055203591 1 +4 0.000340939 1 +3 0.151234915 1 +4 0.000386658 1 +3 0.231980036 1 +4 0.000384274 1 +3 0.224097550 1 +4 0.002980857 1 +3 0.316956963 1 +4 0.002499527 41 +3 0.765698516 1 +4 0.004091634 814 +3 0.811449495 1 +4 0.000770341 56 +3 0.487224212 1 +4 0.000351782 15 +3 4.072509089 1 +3 0.129548871 1 +4 0.002049532 27 +3 0.212133148 1 +4 0.001864670 127 +3 0.293976096 1 +3 0.079927799 1 +4 0.001776949 13 +3 0.456159524 1 +4 0.000484628 16 +3 0.181365177 1 +4 0.000330693 17 +3 0.241967560 1 +4 0.003597134 16 +3 0.242152690 1 +4 0.001952176 17 +3 0.477814310 1 +4 0.000393908 19 +3 1.279717661 1 +4 0.000354247 10 +3 0.161660774 1 +4 0.001684608 1 +3 0.116305564 1 +4 0.000545227 1 +3 0.111377593 1 +4 0.000357819 1 +3 0.121894944 1 +4 0.000372917 1 +3 0.133460281 1 +4 0.000348850 1 +3 0.136188546 1 +4 0.003970087 951 +3 0.563603446 1 +4 0.000905922 1231 +3 0.505214773 1 +4 0.000614466 885 +3 0.693135780 1 +4 0.000384251 10 +3 0.071878551 1 +4 0.000600843 1209 +3 5.919638901 1 +4 0.000618364 947 +3 1.023329385 1 +4 0.000765748 975 +3 0.170239029 1 +4 0.004114269 20 +3 0.944977220 1 +4 0.000813752 923 +3 0.591209323 1 +4 0.000642505 1013 +3 0.855854140 1 +4 0.002983512 910 +3 0.468501621 1 +4 0.001040724 747 +3 0.630997945 1 +4 0.000557718 627 +3 0.568268097 1 +4 0.002969451 604 +3 0.372751868 1 +4 0.003244305 597 +3 1.748017891 1 +4 0.000318899 9 +3 0.112209702 1 +4 0.001585602 1 +3 0.126237191 1 +4 0.001430490 55 +4 0.002520732 19 +3 0.332580571 1 +4 0.003443457 1341 +3 0.555906216 1 +4 0.000345676 9 +3 0.127700075 1 +4 0.000364774 1 +3 0.191792996 1 +4 0.001614682 1 +3 0.430688655 1 +4 0.002797525 1 +4 0.002209299 67 +3 0.578767196 1 +4 0.000721267 664 +3 2.103369630 1 +4 0.000778525 1285 +3 2.487079900 1 +4 0.000722413 1131 +3 1.743405354 1 +4 0.000701480 876 +3 1.551102701 1 +4 0.000365233 15 +3 0.186125212 1 +4 0.002986112 15 +3 0.346545258 1 +3 0.121964530 1 +4 0.000408994 27 +3 0.285901647 1 +4 0.000553920 102 +3 0.287259743 1 +4 0.000348243 15 +3 0.223770096 1 +4 0.000406451 22 +3 0.240395190 1 +4 0.004131039 37 +3 0.203426649 1 +4 0.111240280 31 +3 0.016527422 1 +4 0.001560067 15 +3 0.958779715 1 +4 0.001824469 4 +3 0.014727259 1 +3 0.447093611 1 +3 0.320953147 1 +3 0.070854407 1 +4 0.000362686 27 +3 0.248016393 1 +4 0.001856075 17 +3 0.181888557 1 +4 0.000362541 16 +3 0.095577241 1 +4 0.000446013 16 +3 0.143582924 1 +4 0.000641692 16 +3 0.087370271 1 +4 0.000410273 16 +3 0.255775198 1 +4 0.000349423 30 +3 0.159417098 1 +4 0.101629346 31 +3 0.106812822 1 +4 0.001794174 10 +3 0.150640833 1 +4 0.001973111 1 +3 0.229540234 1 +4 0.002537393 1 +3 0.189596890 1 +4 0.001555707 1 +3 0.166481893 1 +4 0.001832689 1 +3 0.086653686 1 +4 0.002660778 1 +3 0.196235441 1 +4 0.000767079 42 +3 0.319661955 1 +4 0.000409364 29 +4 0.000770391 950 +3 1.230617822 1 +4 0.000497367 10 +3 0.071849269 1 +4 0.001265887 18 +4 0.001255668 849 +3 0.309179080 1 +4 0.001531469 9 +3 0.230462157 1 +4 0.001149025 1 +3 0.158773274 1 +4 0.000864557 1 +3 0.087581903 1 +4 0.002618648 71 +3 0.325070173 1 +4 0.000861044 39 +7 0.001361477 TSTP +7 2.677917273 CONT +4 0.001090445 7 +4 0.000695543 914 +3 1.566157098 1 +3 0.130276992 1 +4 0.003990123 27 +3 0.201715122 1 +4 0.000382345 105 +3 0.239728138 1 +4 0.000703854 15 +3 0.183585413 1 +4 0.001608753 22 +3 0.198057579 1 +4 0.000422730 37 +3 0.167314657 1 +4 0.101159452 31 +3 0.043125007 1 +4 0.000340134 16 +3 0.167883234 1 +3 0.056208548 1 +4 0.001792780 28 +3 0.317497649 1 +4 0.000387046 17 +3 0.103776317 1 +4 0.000373976 17 +3 0.135697848 1 +4 0.000467905 17 +3 0.135580381 1 +4 0.000480750 17 +3 0.031618064 1 +4 0.000861943 17 +3 0.110813826 1 +4 0.000349600 17 +3 0.183789669 1 +4 0.000339386 31 +3 0.216650735 1 +4 0.112823566 32 +3 0.174864673 1 +4 0.003063388 10 +3 0.180669765 1 +4 0.001724638 1 +3 0.174368732 1 +4 0.002114123 1 +3 0.134554835 1 +4 0.002041362 1 +4 0.001560387 71 +3 0.980188224 1 +3 0.135913384 1 +4 0.002612273 41 diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_json.c b/lib/iolog/regress/fuzz/fuzz_iolog_json.c new file mode 100644 index 0000000..80f6c9f --- /dev/null +++ b/lib/iolog/regress/fuzz/fuzz_iolog_json.c @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <unistd.h> +#if defined(HAVE_STDINT_H) +# include <stdint.h> +#elif defined(HAVE_INTTYPES_H) +# include <inttypes.h> +#endif + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_eventlog.h" +#include "sudo_fatal.h" +#include "sudo_iolog.h" +#include "sudo_plugin.h" +#include "sudo_util.h" + +#include "iolog_json.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + +static FILE * +open_data(const uint8_t *data, size_t size) +{ +#ifdef HAVE_FMEMOPEN + /* Operate in-memory. */ + return fmemopen((void *)data, size, "r"); +#else + char tempfile[] = "/tmp/json.XXXXXX"; + size_t nwritten; + int fd; + + /* Use (unlinked) temporary file. */ + fd = mkstemp(tempfile); + if (fd == -1) + return NULL; + unlink(tempfile); + nwritten = write(fd, data, size); + if (nwritten != size) { + close(fd); + return NULL; + } + lseek(fd, 0, SEEK_SET); + return fdopen(fd, "r"); +#endif +} + +static int +fuzz_conversation(int num_msgs, const struct sudo_conv_message msgs[], + struct sudo_conv_reply replies[], struct sudo_conv_callback *callback) +{ + int n; + + for (n = 0; n < num_msgs; n++) { + const struct sudo_conv_message *msg = &msgs[n]; + + switch (msg->msg_type & 0xff) { + case SUDO_CONV_PROMPT_ECHO_ON: + case SUDO_CONV_PROMPT_MASK: + case SUDO_CONV_PROMPT_ECHO_OFF: + /* input not supported */ + return -1; + case SUDO_CONV_ERROR_MSG: + case SUDO_CONV_INFO_MSG: + /* no output for fuzzers */ + break; + default: + return -1; + } + } + return 0; +} + +int +LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + struct eventlog *evlog = NULL; + FILE *fp; + + initprogname("fuzz_iolog_json"); + if (getenv("SUDO_FUZZ_VERBOSE") == NULL) + sudo_warn_set_conversation(fuzz_conversation); + + fp = open_data(data, size); + if (fp == NULL) + return 0; + + /* Parsed contents of an log.json file are stored in evlog. */ + evlog = calloc(1, sizeof(*evlog)); + if (evlog != NULL) { + evlog->runuid = (uid_t)-1; + evlog->rungid = (gid_t)-1; + evlog->exit_value = -1; + + /* Try to parse buffer as a JSON-format I/O log info file. */ + iolog_parse_loginfo_json(fp, "fuzz.json", evlog); + eventlog_free(evlog); + } + fclose(fp); + + fflush(stdout); + + return 0; +} diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_json.dict b/lib/iolog/regress/fuzz/fuzz_iolog_json.dict new file mode 100644 index 0000000..2caf63d --- /dev/null +++ b/lib/iolog/regress/fuzz/fuzz_iolog_json.dict @@ -0,0 +1,21 @@ +# I/O log JSON keywords +"\"columns\"" +"\"command\"" +"\"dumped_core\"" +"\"exit_value\"" +"\"lines\"" +"\"run_time\"" +"\"runargv\"" +"\"runenv\"" +"\"rungid\"" +"\"rungroup\"" +"\"runuid\"" +"\"runuser\"" +"\"runchroot\"" +"\"runcwd\"" +"\"signal\"" +"\"submitcwd\"" +"\"submithost\"" +"\"submituser\"" +"\"timestamp\"" +"\"ttyname\""" diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_legacy.c b/lib/iolog/regress/fuzz/fuzz_iolog_legacy.c new file mode 100644 index 0000000..207374c --- /dev/null +++ b/lib/iolog/regress/fuzz/fuzz_iolog_legacy.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <unistd.h> +#if defined(HAVE_STDINT_H) +# include <stdint.h> +#elif defined(HAVE_INTTYPES_H) +# include <inttypes.h> +#endif + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_eventlog.h" +#include "sudo_fatal.h" +#include "sudo_iolog.h" +#include "sudo_plugin.h" +#include "sudo_util.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + +static FILE * +open_data(const uint8_t *data, size_t size) +{ +#ifdef HAVE_FMEMOPEN + /* Operate in-memory. */ + return fmemopen((void *)data, size, "r"); +#else + char tempfile[] = "/tmp/legacy.XXXXXX"; + size_t nwritten; + int fd; + + /* Use (unlinked) temporary file. */ + fd = mkstemp(tempfile); + if (fd == -1) + return NULL; + unlink(tempfile); + nwritten = write(fd, data, size); + if (nwritten != size) { + close(fd); + return NULL; + } + lseek(fd, 0, SEEK_SET); + return fdopen(fd, "r"); +#endif +} + +static int +fuzz_conversation(int num_msgs, const struct sudo_conv_message msgs[], + struct sudo_conv_reply replies[], struct sudo_conv_callback *callback) +{ + int n; + + for (n = 0; n < num_msgs; n++) { + const struct sudo_conv_message *msg = &msgs[n]; + + switch (msg->msg_type & 0xff) { + case SUDO_CONV_PROMPT_ECHO_ON: + case SUDO_CONV_PROMPT_MASK: + case SUDO_CONV_PROMPT_ECHO_OFF: + /* input not supported */ + return -1; + case SUDO_CONV_ERROR_MSG: + case SUDO_CONV_INFO_MSG: + /* no output for fuzzers */ + break; + default: + return -1; + } + } + return 0; +} + +int +LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + struct eventlog *evlog = NULL; + FILE *fp; + + initprogname("fuzz_iolog_legacy"); + if (getenv("SUDO_FUZZ_VERBOSE") == NULL) + sudo_warn_set_conversation(fuzz_conversation); + + fp = open_data(data, size); + if (fp == NULL) + return 0; + + /* Parsed contents of an I/O log info file are stored in evlog. */ + evlog = calloc(1, sizeof(*evlog)); + if (evlog != NULL) { + evlog->runuid = (uid_t)-1; + evlog->rungid = (gid_t)-1; + + /* Try to parse buffer as a legacy-format I/O log info file. */ + iolog_parse_loginfo_legacy(fp, "fuzz.legacy", evlog); + eventlog_free(evlog); + } + fclose(fp); + fflush(stdout); + + return 0; +} diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_legacy.dict b/lib/iolog/regress/fuzz/fuzz_iolog_legacy.dict new file mode 100644 index 0000000..d524d49 --- /dev/null +++ b/lib/iolog/regress/fuzz/fuzz_iolog_legacy.dict @@ -0,0 +1,42 @@ +# Legacy I/O log info file: +# timestamp:submit_user:run_user:run_group:tty:lines:columns +# working directory +# command [args] + +# users and groups +"millert" +"root" +"bin" +"wheel" +"operator" +"testuser" +"alice" +"bob" +"users" + +# terminals +"/dev/console" +"/dev/tty00" +"/dev/tty01" +"/dev/pts/0" +"/dev/pts/1" +"/dev/ttyp2" +"/dev/ttyp3" + +# directories +"/root" +"/home/millert" +"/home/alice" +"/home/bob" +"/tmp" +"/usr/local" +"/usr/src" + +# commands +"/bin/ls" +"/usr/bin/id -u" +"/usr/bin/su -" +"/usr/bin/mailq" +"/usr/bin/make -C /usr/src/usr.bin/sort install" +"/usr/bin/apt update" +"/usr/bin/rpm -e sudo" diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_timing.c b/lib/iolog/regress/fuzz/fuzz_iolog_timing.c new file mode 100644 index 0000000..dac9736 --- /dev/null +++ b/lib/iolog/regress/fuzz/fuzz_iolog_timing.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2021 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <unistd.h> +#if defined(HAVE_STDINT_H) +# include <stdint.h> +#elif defined(HAVE_INTTYPES_H) +# include <inttypes.h> +#endif +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_eventlog.h" +#include "sudo_fatal.h" +#include "sudo_iolog.h" +#include "sudo_plugin.h" +#include "sudo_util.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + +static int +fuzz_conversation(int num_msgs, const struct sudo_conv_message msgs[], + struct sudo_conv_reply replies[], struct sudo_conv_callback *callback) +{ + int n; + + for (n = 0; n < num_msgs; n++) { + const struct sudo_conv_message *msg = &msgs[n]; + + switch (msg->msg_type & 0xff) { + case SUDO_CONV_PROMPT_ECHO_ON: + case SUDO_CONV_PROMPT_MASK: + case SUDO_CONV_PROMPT_ECHO_OFF: + /* input not supported */ + return -1; + case SUDO_CONV_ERROR_MSG: + case SUDO_CONV_INFO_MSG: + /* no output for fuzzers */ + break; + default: + return -1; + } + } + return 0; +} + +int +LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + struct iolog_file iolog_file = { true }; + struct timing_closure closure; + char logdir[] = "/tmp/timing.XXXXXX"; + int dfd = -1, fd = -1; + + initprogname("fuzz_iolog_timing"); + if (getenv("SUDO_FUZZ_VERBOSE") == NULL) + sudo_warn_set_conversation(fuzz_conversation); + + /* I/O logs consist of multiple files in a directory. */ + if (mkdtemp(logdir) == NULL) + return 0; + + /* Create a timing file from the supplied data. */ + dfd = open(logdir, O_RDONLY); + if (dfd == -1) + goto cleanup; + + fd = openat(dfd, "timing", O_WRONLY|O_CREAT|O_EXCL, S_IRWXU); + if (fd == -1) + goto cleanup; + + if (write(fd, data, size) != (ssize_t)size) + goto cleanup; + close(fd); + fd = -1; + + /* Open the timing file we wrote and try to parse it. */ + if (!iolog_open(&iolog_file, dfd, IOFD_TIMING, "r")) + goto cleanup; + + memset(&closure, 0, sizeof(closure)); + closure.decimal = "."; + for (;;) { + if (iolog_read_timing_record(&iolog_file, &closure) != 0) + break; + } + iolog_close(&iolog_file, NULL); + +cleanup: + if (dfd != -1) { + if (fd != -1) + close(fd); + unlinkat(dfd, "timing", 0); + close(dfd); + } + rmdir(logdir); + fflush(stdout); + + return 0; +} + +/* STUB */ +bool +iolog_swapids(bool restore) +{ + return false; +} diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_timing.dict b/lib/iolog/regress/fuzz/fuzz_iolog_timing.dict new file mode 100644 index 0000000..42bdeb5 --- /dev/null +++ b/lib/iolog/regress/fuzz/fuzz_iolog_timing.dict @@ -0,0 +1,89 @@ +# I/O log timing lines are formatted as: +# [0-4] sleep_time num_bytes +# 5 sleep_time lines cols +# 7 sleep_time signum|sigabbrev + +# Signal abbreviations +"ABRT" +"ALRM" +"BUS" +"CANCEL" +"CHLD" +"CLD" +"CONT" +"CONT" +"EMT" +"FPE" +"FREEZE" +"HUP" +"ILL" +"INFO" +"INT" +"IO" +"IOT" +"KILL" +"LOST" +"LWP" +"PIPE" +"POLL" +"PROF" +"PWR" +"QUIT" +"SEGV" +"STKFLT" +"STOP" +"STOP" +"SYS" +"TERM" +"THAW" +"TRAP" +"TSTP" +"TSTP" +"TTIN" +"TTIN" +"TTOU" +"TTOU" +"UNUSED" +"URG" +"USR1" +"USR2" +"VTALRM" +"WAITING" +"WINCH" +"XCPU" +"XFSZ" + +# Signal numbers, 0-32 +"0" +"1" +"2" +"3" +"4" +"5" +"6" +"7" +"8" +"9" +"10" +"11" +"12" +"13" +"14" +"15" +"16" +"17" +"18" +"19" +"20" +"21" +"22" +"23" +"24" +"25" +"26" +"27" +"28" +"29" +"30" +"31" +"32" diff --git a/lib/iolog/regress/host_port/host_port_test.c b/lib/iolog/regress/host_port/host_port_test.c new file mode 100644 index 0000000..9b504e1 --- /dev/null +++ b/lib/iolog/regress/host_port/host_port_test.c @@ -0,0 +1,145 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2019-2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif +#include <time.h> +#include <unistd.h> + +#include "sudo_compat.h" +#include "sudo_fatal.h" +#include "sudo_iolog.h" +#include "sudo_util.h" + +sudo_dso_public int main(int argc, char *argv[]); + +/* + * Test that iolog_parse_host_port() works as expected. + */ + +struct host_port_test { + const char *str; /* input string */ + const char *host; /* parsed host */ + const char *port; /* parsed port */ + bool tls; /* parsed TLS flag */ + const char *defport; /* default port */ + const char *defport_tls; /* default port */ + bool ret; /* return value */ +}; + +static struct host_port_test test_data[] = { + /* No TLS */ + { "xerxes", "xerxes", "12345", false, "12345", NULL, true }, + { "xerxes:12345", "xerxes", "12345", false, "67890", NULL, true }, + { "127.0.0.1", "127.0.0.1", "12345", false, "12345", NULL, true }, + { "127.0.0.1:12345", "127.0.0.1", "12345", false, "67890", NULL, true }, + { "[::1]", "::1", "12345", false, "12345", NULL, true }, + { "[::1]:12345", "::1", "12345", false, "67890", NULL, true }, + + /* With TLS */ + { "xerxes(tls)", "xerxes", "12345", true, "5678", "12345", true }, + { "xerxes:12345(tls)", "xerxes", "12345", true, "5678", "67890", true }, + { "127.0.0.1(tls)", "127.0.0.1", "12345", true, "5678", "12345", true }, + { "127.0.0.1:12345(tls)", "127.0.0.1", "12345", true, "5678", "67890", true }, + { "[::1](tls)", "::1", "12345", true, "5678", "12345", true }, + { "[::1]:12345(tls)", "::1", "12345", true, "5678", "67890", true }, + + /* Errors */ + { "xerxes:", NULL, NULL, false, "12345", NULL, false }, /* missing port */ + { "127.0.0.1:", NULL, NULL, false, "12345", NULL, false }, /* missing port */ + { "[::1:12345", NULL, NULL, false, "67890", NULL, false }, /* missing bracket */ + { "[::1]:", NULL, NULL, false, "12345", NULL, false }, /* missing port */ + { NULL } +}; + +int +main(int argc, char *argv[]) +{ + int i, errors = 0, ntests = 0; + char *host, *port, *copy = NULL; + bool ret, tls; + + initprogname(argc > 0 ? argv[0] : "host_port_test"); + + for (i = 0; test_data[i].str != NULL; i++) { + host = port = NULL; + tls = false; + free(copy); + if ((copy = strdup(test_data[i].str)) == NULL) + sudo_fatal_nodebug(NULL); + + ntests++; + ret = iolog_parse_host_port(copy, &host, &port, &tls, + test_data[i].defport, test_data[i].defport_tls); + if (ret != test_data[i].ret) { + sudo_warnx_nodebug("test #%d: %s: returned %s, expected %s", + ntests, test_data[i].str, ret ? "true" : "false", + test_data[i].ret ? "true" : "false"); + errors++; + continue; + } + if (!ret) + continue; + + if (host == NULL) { + sudo_warnx_nodebug("test #%d: %s: NULL host", + ntests, test_data[i].str); + errors++; + continue; + } + if (strcmp(host, test_data[i].host) != 0) { + sudo_warnx_nodebug("test #%d: %s: bad host, expected %s, got %s", + ntests, test_data[i].str, test_data[i].host, host); + errors++; + continue; + } + if (port == NULL) { + sudo_warnx_nodebug("test #%d: %s: NULL port", + ntests, test_data[i].str); + errors++; + continue; + } + if (strcmp(port, test_data[i].port) != 0) { + sudo_warnx_nodebug("test #%d: %s: bad port, expected %s, got %s", + ntests, test_data[i].str, test_data[i].port, port); + errors++; + continue; + } + if (tls != test_data[i].tls) { + sudo_warnx_nodebug("test #%d: %s: bad tls, expected %s, got %s", + ntests, test_data[i].str, test_data[i].tls ? "true" : "false", + tls ? "true" : "false"); + errors++; + continue; + } + } + free(copy); + if (ntests != 0) { + printf("%s: %d tests run, %d errors, %d%% success rate\n", + getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); + } + return errors; +} diff --git a/lib/iolog/regress/iolog_filter/check_iolog_filter.c b/lib/iolog/regress/iolog_filter/check_iolog_filter.c new file mode 100644 index 0000000..d24f12f --- /dev/null +++ b/lib/iolog/regress/iolog_filter/check_iolog_filter.c @@ -0,0 +1,203 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2022 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <unistd.h> + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_util.h" +#include "sudo_fatal.h" + +#include "sudo_iolog.h" + +sudo_dso_public int main(int argc, char *argv[]); + +int +main(int argc, char *argv[]) +{ + int dfd = -1, ttyin_fd = -1, ttyout_fd = -1, ttyin_ok_fd = -1; + int ch, i, ntests = 0, errors = 0; + void *passprompt_regex = NULL; + + initprogname(argc > 0 ? argv[0] : "check_iolog_filter"); + + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + /* ignore */ + break; + default: + fprintf(stderr, "usage: %s [-v] iolog_dir ...\n", getprogname()); + return EXIT_FAILURE; + } + } + argc -= optind; + argv += optind; + + passprompt_regex = iolog_pwfilt_alloc(); + if (passprompt_regex == NULL) + sudo_fatalx("unable to allocate memory"); + if (!iolog_pwfilt_add(passprompt_regex, "(?i)password[: ]*")) + exit(1); + + for (i = 0; i < argc; i++) { + struct iolog_file iolog_timing = { true }; + struct timing_closure timing; + const char *logdir = argv[i]; + char tbuf[8192], fbuf[8192]; + ssize_t nread; + + ntests++; + + /* I/O logs consist of multiple files in a directory. */ + dfd = open(logdir, O_RDONLY); + if (dfd == -1) { + sudo_warn("%s", logdir); + errors++; + continue; + } + + if (!iolog_open(&iolog_timing, dfd, IOFD_TIMING, "r")) { + sudo_warn("timing"); + errors++; + goto next; + } + + ttyout_fd = openat(dfd, "ttyout", O_RDONLY, 0644); + if (ttyout_fd == -1) { + sudo_warn("ttyout"); + errors++; + goto next; + } + + ttyin_fd = openat(dfd, "ttyin", O_RDONLY, 0644); + if (ttyin_fd == -1) { + sudo_warn("ttyin"); + errors++; + goto next; + } + + ttyin_ok_fd = openat(dfd, "ttyin.filtered", O_RDONLY, 0644); + if (ttyin_ok_fd == -1) { + sudo_warn("ttyin.filtered"); + errors++; + goto next; + } + + memset(&timing, 0, sizeof(timing)); + timing.decimal = "."; + for (;;) { + char *newbuf = NULL; + const char *name; + int fd; + + if (iolog_read_timing_record(&iolog_timing, &timing) != 0) + break; + + switch (timing.event) { + case IO_EVENT_TTYOUT: + fd = ttyout_fd; + name = "ttyout"; + break; + case IO_EVENT_TTYIN: + fd = ttyin_fd; + name = "ttyin"; + break; + default: + continue; + } + + if (timing.u.nbytes > sizeof(tbuf)) { + sudo_warn("buffer too small, %zu > %zu", timing.u.nbytes, + sizeof(tbuf)); + errors++; + continue; + } + + nread = read(fd, tbuf, timing.u.nbytes); + if ((size_t)nread != timing.u.nbytes) { + if (nread == -1) + sudo_warn("%s/%s", argv[i], name); + else + sudo_warnx("%s/%s: short read", argv[i], name); + errors++; + continue; + } + + /* Apply filter. */ + if (!iolog_pwfilt_run(passprompt_regex, timing.event, tbuf, + timing.u.nbytes, &newbuf)) { + errors++; + continue; + } + + if (timing.event == IO_EVENT_TTYIN) { + nread = read(ttyin_ok_fd, fbuf, timing.u.nbytes); + if (nread == -1) { + if (nread == -1) + sudo_warn("%s/ttyin.filtered", argv[i]); + else + sudo_warnx("%s/ttyin.filtered: short read", argv[i]); + errors++; + free(newbuf); + break; + } + if (memcmp(fbuf, newbuf ? newbuf : tbuf, timing.u.nbytes) != 0) { + sudo_warnx("%s: ttyin mismatch at byte %lld", argv[i], + (long long)lseek(fd, 0, SEEK_CUR)); + errors++; + free(newbuf); + break; + } + } + + free(newbuf); + } +next: + if (ttyin_fd != -1) { + close(ttyin_fd); + ttyin_fd = -1; + } + if (ttyin_ok_fd != -1) { + close(ttyin_ok_fd); + ttyin_ok_fd = -1; + } + if (dfd != -1) { + close(dfd); + dfd = -1; + } + if (iolog_timing.enabled) + iolog_close(&iolog_timing, NULL); + } + iolog_pwfilt_free(passprompt_regex); + + if (ntests != 0) { + printf("iolog_filter: %d test%s run, %d errors, %d%% success rate\n", + ntests, ntests == 1 ? "" : "s", errors, + (ntests - errors) * 100 / ntests); + } + + return errors; +} diff --git a/lib/iolog/regress/iolog_filter/test1/log b/lib/iolog/regress/iolog_filter/test1/log new file mode 100644 index 0000000..551adfb --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test1/log @@ -0,0 +1,3 @@ +1645151020:millert:root::/dev/ttypb:24:80 +/home/millert +/usr/bin/passwd diff --git a/lib/iolog/regress/iolog_filter/test1/timing b/lib/iolog/regress/iolog_filter/test1/timing new file mode 100644 index 0000000..3a62388 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test1/timing @@ -0,0 +1,44 @@ +4 0.087089703 32 +4 0.000503221 13 +3 1.617732029 1 +3 0.671818399 1 +3 0.632182533 1 +3 0.135484597 1 +3 0.120171445 1 +3 0.120200768 1 +3 0.239782513 1 +3 0.064059449 1 +3 0.184048364 1 +3 0.135992479 1 +3 0.167905298 1 +3 0.087948033 1 +3 0.135913060 1 +3 0.136306311 1 +3 0.279830387 1 +3 0.280221744 1 +4 0.000453682 2 +4 0.001188404 20 +3 0.678534827 1 +3 1.912119627 1 +3 0.303804149 1 +3 0.071831900 1 +3 0.248608651 1 +3 0.088758738 1 +3 0.262821628 1 +3 0.111839737 1 +3 0.184326849 1 +3 0.119709565 1 +3 0.184446495 1 +3 0.089439595 1 +3 0.150353799 1 +3 0.152035883 1 +3 0.392237165 1 +3 0.183498720 1 +3 0.136099560 1 +3 0.256165394 1 +4 0.000392254 2 +4 0.000348360 35 +4 0.000330782 13 +3 0.871580665 1 +4 0.000434371 2 +4 0.001150945 23 diff --git a/lib/iolog/regress/iolog_filter/test1/ttyin b/lib/iolog/regress/iolog_filter/test1/ttyin new file mode 100644 index 0000000..5a2067d --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test1/ttyin @@ -0,0 +1 @@ +A new password?
A bad password...
\ No newline at end of file diff --git a/lib/iolog/regress/iolog_filter/test1/ttyin.filtered b/lib/iolog/regress/iolog_filter/test1/ttyin.filtered new file mode 100644 index 0000000..d4943b3 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test1/ttyin.filtered @@ -0,0 +1 @@ +***************
*****************
*
\ No newline at end of file diff --git a/lib/iolog/regress/iolog_filter/test1/ttyout b/lib/iolog/regress/iolog_filter/test1/ttyout new file mode 100644 index 0000000..bac1f87 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test1/ttyout @@ -0,0 +1,7 @@ +Changing password for millert.
+New password:
+Retype new password:
+Mismatch; try again, EOF to quit.
+New password:
+
+Password unchanged.
diff --git a/lib/iolog/regress/iolog_filter/test2/log b/lib/iolog/regress/iolog_filter/test2/log new file mode 100644 index 0000000..8790573 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test2/log @@ -0,0 +1,3 @@ +1645153850:millert:millert::/dev/ttypb:24:80 +/home/millert +/usr/bin/su testdude diff --git a/lib/iolog/regress/iolog_filter/test2/timing b/lib/iolog/regress/iolog_filter/test2/timing new file mode 100644 index 0000000..7e6b1cc --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test2/timing @@ -0,0 +1,73 @@ +4 0.077895153 9 +3 9.876530326 1 +3 0.191980568 1 +3 0.168017746 1 +3 0.088081740 1 +3 0.183886638 1 +3 0.071966892 1 +3 0.175772878 1 +3 0.672270691 1 +4 0.000336085 2 +4 0.022264031 8 +3 4.721817713 1 +4 0.001379444 1 +3 0.086406844 1 +4 0.000383615 1 +3 0.055583229 1 +4 0.000353543 1 +3 0.079726966 1 +4 0.000336390 1 +3 0.063626746 1 +4 0.000719018 1 +3 0.135204338 1 +4 0.000342720 1 +3 0.095976209 1 +4 0.000338049 1 +3 0.047259669 1 +4 0.000339501 1 +3 0.399809817 1 +4 0.000345392 1 +3 0.111587761 1 +4 0.000366589 1 +3 0.087582640 1 +4 0.000328160 1 +3 0.480159500 1 +4 0.000370778 3 +3 0.143285883 1 +4 0.000332529 3 +3 0.135841236 1 +4 0.000343729 3 +3 0.223401313 1 +4 0.000329496 1 +3 0.063760060 1 +4 0.000382349 1 +3 0.087442363 1 +4 0.000345787 1 +3 0.095598655 1 +4 0.000343712 1 +3 0.560106197 1 +4 0.000405183 3 +3 0.151363786 1 +4 0.000345085 3 +3 0.167809002 1 +4 0.000326037 3 +3 0.135471962 1 +4 0.000378004 3 +3 0.111681517 1 +4 0.000329093 1 +3 0.127537491 1 +4 0.000355403 1 +3 0.103896235 1 +4 0.000320608 1 +3 0.095563437 1 +4 0.000327463 1 +3 0.087808248 1 +4 0.000321244 1 +3 0.503531970 1 +4 0.000338699 1 +3 1.383887942 1 +4 0.000324499 3 +4 0.000334583 11 +4 0.000324866 8 +3 0.999440679 1 +4 0.000365851 5 diff --git a/lib/iolog/regress/iolog_filter/test2/ttyin b/lib/iolog/regress/iolog_filter/test2/ttyin new file mode 100644 index 0000000..29482c0 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test2/ttyin @@ -0,0 +1 @@ +test123
echo hi ereherethere!
\ No newline at end of file diff --git a/lib/iolog/regress/iolog_filter/test2/ttyin.filtered b/lib/iolog/regress/iolog_filter/test2/ttyin.filtered new file mode 100644 index 0000000..e3c303d --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test2/ttyin.filtered @@ -0,0 +1 @@ +*******
echo hi ereherethere!
\ No newline at end of file diff --git a/lib/iolog/regress/iolog_filter/test2/ttyout b/lib/iolog/regress/iolog_filter/test2/ttyout new file mode 100644 index 0000000..dbb7124 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test2/ttyout @@ -0,0 +1,4 @@ +Password:
+xerxes$ echo hi ere here there!
+hi there!
+xerxes$ ^D
diff --git a/lib/iolog/regress/iolog_filter/test3/log b/lib/iolog/regress/iolog_filter/test3/log new file mode 100644 index 0000000..f0500f4 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test3/log @@ -0,0 +1,3 @@ +1645201461:millert:root::/dev/ttyp0:24:80 +/home/millert +/usr/bin/ssh -oPubkeyAuthentication=no localhost diff --git a/lib/iolog/regress/iolog_filter/test3/timing b/lib/iolog/regress/iolog_filter/test3/timing new file mode 100644 index 0000000..03b67f4 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test3/timing @@ -0,0 +1,54 @@ +4 0.158768144 1 +4 0.000406264 27 +3 4.390837642 1 +3 0.119705081 1 +3 0.175600726 1 +3 0.064357615 1 +3 0.239945395 1 +3 0.088142451 1 +3 0.143665762 1 +3 0.071941169 1 +3 0.208359675 1 +3 0.145706215 1 +3 0.302231926 1 +3 0.079805215 1 +3 0.112114024 1 +3 0.143802378 1 +3 0.160033289 1 +4 0.000416283 2 +4 0.042939142 40 +4 0.000399448 27 +3 1.084753026 1 +3 0.087720859 1 +3 0.215896027 1 +3 0.167921572 1 +3 0.304253899 1 +3 0.103807201 1 +3 0.191962088 1 +3 0.071989566 1 +3 0.296183440 1 +3 0.162262688 1 +3 0.125661454 1 +3 0.192164590 1 +4 0.000394039 2 +4 0.034617321 40 +4 0.000414822 27 +3 0.796676353 1 +3 0.119589531 1 +3 0.120189440 1 +3 0.080002264 1 +3 0.120104599 1 +3 0.087897523 1 +3 0.088072936 1 +3 0.111980459 1 +3 0.064099904 1 +3 0.440166638 1 +3 0.159957933 1 +3 0.063988834 1 +3 0.247906778 1 +3 0.167767797 1 +3 0.151961605 1 +3 0.176237322 1 +3 0.368288839 1 +4 0.000364019 2 +4 0.034413644 79 diff --git a/lib/iolog/regress/iolog_filter/test3/ttyin b/lib/iolog/regress/iolog_filter/test3/ttyin new file mode 100644 index 0000000..224e0b4 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test3/ttyin @@ -0,0 +1 @@ +not a password
nope, sorry
try again please
\ No newline at end of file diff --git a/lib/iolog/regress/iolog_filter/test3/ttyin.filtered b/lib/iolog/regress/iolog_filter/test3/ttyin.filtered new file mode 100644 index 0000000..bc6dfb5 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test3/ttyin.filtered @@ -0,0 +1 @@ +**************
***********
****************
\ No newline at end of file diff --git a/lib/iolog/regress/iolog_filter/test3/ttyout b/lib/iolog/regress/iolog_filter/test3/ttyout new file mode 100644 index 0000000..b6befb9 --- /dev/null +++ b/lib/iolog/regress/iolog_filter/test3/ttyout @@ -0,0 +1,6 @@ +
root@localhost's password:
+Permission denied, please try again.
+
root@localhost's password:
+Permission denied, please try again.
+
root@localhost's password:
+root@localhost: Permission denied (publickey,password,keyboard-interactive).
diff --git a/lib/iolog/regress/iolog_json/check_iolog_json.c b/lib/iolog/regress/iolog_json/check_iolog_json.c new file mode 100644 index 0000000..ce8565f --- /dev/null +++ b/lib/iolog/regress/iolog_json/check_iolog_json.c @@ -0,0 +1,265 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <limits.h> +#include <unistd.h> + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_util.h" +#include "sudo_fatal.h" + +#include "iolog_json.h" + +sudo_dso_public int main(int argc, char *argv[]); + +static bool +json_print_object(struct json_container *jsonc, struct json_object *object) +{ + struct json_item *item; + struct json_value json_value; + bool ret = false; + + TAILQ_FOREACH(item, &object->items, entries) { + switch (item->type) { + case JSON_STRING: + json_value.type = JSON_STRING; + json_value.u.string = item->u.string; + if (!sudo_json_add_value(jsonc, item->name, &json_value)) + goto oom; + break; + case JSON_NUMBER: + json_value.type = JSON_NUMBER; + json_value.u.number = item->u.number; + if (!sudo_json_add_value(jsonc, item->name, &json_value)) + goto oom; + break; + case JSON_OBJECT: + if (!sudo_json_open_object(jsonc, item->name)) + goto oom; + if (!json_print_object(jsonc, &item->u.child)) + goto done; + if (!sudo_json_close_object(jsonc)) + goto oom; + break; + case JSON_ARRAY: + if (!sudo_json_open_array(jsonc, item->name)) + goto oom; + if (!json_print_object(jsonc, &item->u.child)) + goto done; + if (!sudo_json_close_array(jsonc)) + goto oom; + break; + case JSON_BOOL: + json_value.type = JSON_BOOL; + json_value.u.boolean = item->u.boolean; + if (!sudo_json_add_value(jsonc, item->name, &json_value)) + goto oom; + break; + case JSON_NULL: + json_value.type = JSON_NULL; + if (!sudo_json_add_value(jsonc, item->name, &json_value)) + goto oom; + break; + default: + sudo_warnx("unsupported JSON type %d", item->type); + goto done; + } + } + + ret = true; + goto done; + +oom: + sudo_warnx("%s: %s", __func__, "unable to allocate memory"); +done: + return ret; +} + +static bool +json_format(struct json_container *jsonc, struct json_object *object) +{ + struct json_item *item; + bool ret = false; + + /* First object holds all the actual data. */ + item = TAILQ_FIRST(&object->items); + if (item->type != JSON_OBJECT) { + sudo_warnx("expected JSON_OBJECT, got %d", item->type); + goto done; + } + object = &item->u.child; + + if (!json_print_object(jsonc, object)) + goto done; + + ret = true; + +done: + return ret; +} + +static void +usage(void) +{ + fprintf(stderr, "usage: %s [-c] input_file ...\n", + getprogname()); + exit(EXIT_FAILURE); +} + +static bool +compare(FILE *fp, const char *infile, struct json_container *jsonc) +{ + const char *cp; + unsigned int lineno = 0; + size_t linesize = 0; + char *line = NULL; + ssize_t len; + + cp = sudo_json_get_buf(jsonc); + + while ((len = getdelim(&line, &linesize, '\n', fp)) != -1) { + lineno++; + + /* skip open/close brace, not present in formatted output */ + if (lineno == 1 && strcmp(line, "{\n") == 0) + continue; + if (*cp == '\0' && strcmp(line, "}\n") == 0) + continue; + + /* Ignore newlines in output to make comparison easier. */ + if (*cp == '\n') + cp++; + if (line[len - 1] == '\n') + len--; + + if (strncmp(line, cp, len) != 0) { + fprintf(stderr, "%s: mismatch on line %u\n", infile, lineno); + fprintf(stderr, "expected: %s", line); + fprintf(stderr, "got : %.*s\n", (int)len, cp); + return false; + } + cp += len; + } + free(line); + + return true; +} + +int +main(int argc, char *argv[]) +{ + struct json_object root; + int ch, i, ntests = 0, errors = 0; + bool cat = false; + + initprogname(argc > 0 ? argv[0] : "check_iolog_json"); + + while ((ch = getopt(argc, argv, "c")) != -1) { + switch (ch) { + case 'c': + cat = true; + break; + default: + usage(); + } + } + argc -= optind; + argv += optind; + + if (argc < 1) + usage(); + + for (i = 0; i < argc; i++) { + struct json_container jsonc; + const char *infile = argv[i]; + const char *outfile = argv[i]; + const char *cp; + char pathbuf[PATH_MAX]; + FILE *infp = NULL; + FILE *outfp = NULL; + + ntests++; + + if (!sudo_json_init(&jsonc, 4, false, true, true)) { + errors++; + continue; + } + + /* Parse input file. */ + if ((infp = fopen(infile, "r")) == NULL) { + sudo_warn("%s", argv[i]); + errors++; + continue; + } + if (!iolog_parse_json(infp, infile, &root)) { + errors++; + goto next; + } + + /* Format as pretty-printed JSON */ + if (!json_format(&jsonc, &root)) { + errors++; + goto next; + } + + /* Check for a .out.ok file in the same location as the .in file. */ + cp = strrchr(infile, '.'); + if (cp != NULL && strcmp(cp, ".in") == 0) { + snprintf(pathbuf, sizeof(pathbuf), "%.*s.out.ok", + (int)(cp - infile), infile); + if ((outfp = fopen(pathbuf, "r")) != NULL) + outfile = pathbuf; + } + if (outfp == NULL) + outfp = infp; + + /* Compare output to expected output. */ + rewind(outfp); + if (!compare(outfp, outfile, &jsonc)) + errors++; + + /* Write the formatted output to stdout for -c (cat) */ + if (cat) { + fprintf(stdout, "{%s\n}\n", sudo_json_get_buf(&jsonc)); + fflush(stdout); + } + +next: + free_json_items(&root.items); + sudo_json_free(&jsonc); + if (infp != NULL) + fclose(infp); + if (outfp != NULL && outfp != infp) + fclose(outfp); + } + + if (ntests != 0) { + printf("iolog_json: %d test%s run, %d errors, %d%% success rate\n", + ntests, ntests == 1 ? "" : "s", errors, + (ntests - errors) * 100 / ntests); + } + + return errors; +} diff --git a/lib/iolog/regress/iolog_json/test1.in b/lib/iolog/regress/iolog_json/test1.in new file mode 100644 index 0000000..8ad3689 --- /dev/null +++ b/lib/iolog/regress/iolog_json/test1.in @@ -0,0 +1,34 @@ +{ + "timestamp": { + "seconds": 1584993067, + "nanoseconds": 880288287 + }, + "columns": 80, + "command": "/usr/bin/make", + "lines": 24, + "runargv": [ + "make", + "test" + ], + "runenv": [ + "LANG=en_US.UTF-8", + "PATH=/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin", + "TERM=vt100", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/bin/make test", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "A__z=\"*SHLVL" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/home/test", + "submithost": "sudo.ws", + "submituser": "millert", + "ttyname": "/dev/console" +} diff --git a/lib/iolog/regress/iolog_json/test2.in b/lib/iolog/regress/iolog_json/test2.in new file mode 100644 index 0000000..df7170f --- /dev/null +++ b/lib/iolog/regress/iolog_json/test2.in @@ -0,0 +1,28 @@ +{ + "timestamp": { "seconds": 1584993067, "nanoseconds": 880288287 }, + "columns": 80, + "command": "/usr/bin/make", + "lines": 24, + "runargv": [ "make", "test" ], + "runenv": [ + "LANG=en_US.UTF-8", + "PATH=/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin", + "TERM=vt100", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/bin/make test", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "A__z=\"*SHLVL" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/home/test", + "submithost": "sudo.ws", + "submituser": "millert", + "ttyname": "/dev/console" +} diff --git a/lib/iolog/regress/iolog_json/test2.out.ok b/lib/iolog/regress/iolog_json/test2.out.ok new file mode 100644 index 0000000..8ad3689 --- /dev/null +++ b/lib/iolog/regress/iolog_json/test2.out.ok @@ -0,0 +1,34 @@ +{ + "timestamp": { + "seconds": 1584993067, + "nanoseconds": 880288287 + }, + "columns": 80, + "command": "/usr/bin/make", + "lines": 24, + "runargv": [ + "make", + "test" + ], + "runenv": [ + "LANG=en_US.UTF-8", + "PATH=/bin:/sbin:/usr/games:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin", + "TERM=vt100", + "MAIL=/var/mail/root", + "LOGNAME=root", + "USER=root", + "HOME=/root", + "SHELL=/bin/ksh", + "SUDO_COMMAND=/usr/bin/make test", + "SUDO_USER=millert", + "SUDO_UID=8036", + "SUDO_GID=20", + "A__z=\"*SHLVL" + ], + "runuid": 0, + "runuser": "root", + "submitcwd": "/home/test", + "submithost": "sudo.ws", + "submituser": "millert", + "ttyname": "/dev/console" +} diff --git a/lib/iolog/regress/iolog_json/test3.in b/lib/iolog/regress/iolog_json/test3.in new file mode 100644 index 0000000..6f243e3 --- /dev/null +++ b/lib/iolog/regress/iolog_json/test3.in @@ -0,0 +1,22 @@ +{ + "true": false, + "false": true, + "number": 1234567890, + "null": null, + "string": "non\u0073ense", + "scope": { + "a": "b", + "bah": null + }, + "array1": [ + "foo", + "bar", + [ + 123, + null, + false, + "fizz", + "buzz" + ] + ] +} diff --git a/lib/iolog/regress/iolog_json/test3.out.ok b/lib/iolog/regress/iolog_json/test3.out.ok new file mode 100644 index 0000000..ea2df89 --- /dev/null +++ b/lib/iolog/regress/iolog_json/test3.out.ok @@ -0,0 +1,22 @@ +{ + "true": false, + "false": true, + "number": 1234567890, + "null": null, + "string": "nonsense", + "scope": { + "a": "b", + "bah": null + }, + "array1": [ + "foo", + "bar", + [ + 123, + null, + false, + "fizz", + "buzz" + ] + ] +} diff --git a/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c b/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c new file mode 100644 index 0000000..36935ee --- /dev/null +++ b/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c @@ -0,0 +1,115 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <sys/wait.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_util.h" +#include "sudo_fatal.h" +#include "sudo_iolog.h" + +sudo_dso_public int main(int argc, char *argv[]); + +static const char *test_paths[] = { + "testdir/a/b/c/user", /* create new */ + "testdir/a/b/c/user", /* open existing */ + "testdir/a/b/c/user.XXXXXX", /* mkdtemp new */ + NULL +}; + +static void +test_iolog_mkpath(const char *testdir, int *ntests, int *nerrors) +{ + const char **tp; + char *path; + + iolog_set_owner(geteuid(), getegid()); + + for (tp = test_paths; *tp != NULL; tp++) { + if (asprintf(&path, "%s/%s", testdir, *tp) == -1) + sudo_fatalx("unable to allocate memory"); + + (*ntests)++; + if (!iolog_mkpath(path)) { + sudo_warnx("unable to mkpath %s", path); + (*nerrors)++; + } + free(path); + } +} + +int +main(int argc, char *argv[]) +{ + char testdir[] = "mkpath.XXXXXX"; + const char *rmargs[] = { "rm", "-rf", NULL, NULL }; + int ch, status, ntests = 0, errors = 0; + + initprogname(argc > 0 ? argv[0] : "check_iolog_mkpath"); + + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + /* ignore */ + break; + default: + fprintf(stderr, "usage: %s [-v]\n", getprogname()); + return EXIT_FAILURE; + } + } + argc -= optind; + argv += optind; + + if (mkdtemp(testdir) == NULL) + sudo_fatal("unable to create test dir"); + rmargs[2] = testdir; + + test_iolog_mkpath(testdir, &ntests, &errors); + + if (ntests != 0) { + printf("iolog_mkpath: %d test%s run, %d errors, %d%% success rate\n", + ntests, ntests == 1 ? "" : "s", errors, + (ntests - errors) * 100 / ntests); + } + + /* Clean up (avoid running via shell) */ + switch (fork()) { + case -1: + sudo_warn("fork"); + _exit(1); + case 0: + execvp("rm", (char **)rmargs); + _exit(1); + default: + wait(&status); + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) + errors++; + break; + } + + return errors; +} diff --git a/lib/iolog/regress/iolog_path/check_iolog_path.c b/lib/iolog/regress/iolog_path/check_iolog_path.c new file mode 100644 index 0000000..7a46735 --- /dev/null +++ b/lib/iolog/regress/iolog_path/check_iolog_path.c @@ -0,0 +1,296 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <limits.h> +#include <time.h> +#include <unistd.h> + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_util.h" +#include "sudo_fatal.h" +#include "sudo_iolog.h" + +static struct iolog_escape_data { + char sessid[7]; + char *user; + char *group; + char *runas_user; + char *runas_group; + char *host; + char *command; +} escape_data; + +sudo_dso_public int main(int argc, char *argv[]); + +static void +usage(void) +{ + fprintf(stderr, "usage: %s datafile\n", getprogname()); + exit(EXIT_FAILURE); +} + +static void +reset_escape_data(struct iolog_escape_data *data) +{ + free(data->user); + free(data->group); + free(data->runas_user); + free(data->runas_group); + free(data->host); + free(data->command); + memset(data, 0, sizeof(*data)); +} + +static size_t +fill_seq(char *str, size_t strsize, void *unused) +{ + int len; + + /* Path is of the form /var/log/sudo-io/00/00/01. */ + len = snprintf(str, strsize, "%c%c/%c%c/%c%c", escape_data.sessid[0], + escape_data.sessid[1], escape_data.sessid[2], escape_data.sessid[3], + escape_data.sessid[4], escape_data.sessid[5]); + if (len < 0) + return strsize; /* handle non-standard snprintf() */ + return len; +} + +static size_t +fill_user(char *str, size_t strsize, void *unused) +{ + return strlcpy(str, escape_data.user, strsize); +} + +static size_t +fill_group(char *str, size_t strsize, void *unused) +{ + return strlcpy(str, escape_data.group, strsize); +} + +static size_t +fill_runas_user(char *str, size_t strsize, void *unused) +{ + return strlcpy(str, escape_data.runas_user, strsize); +} + +static size_t +fill_runas_group(char *str, size_t strsize, void *unused) +{ + return strlcpy(str, escape_data.runas_group, strsize); +} + +static size_t +fill_hostname(char *str, size_t strsize, void *unused) +{ + return strlcpy(str, escape_data.host, strsize); +} + +static size_t +fill_command(char *str, size_t strsize, void *unused) +{ + return strlcpy(str, escape_data.command, strsize); +} + +/* Note: "seq" must be first in the list. */ +static struct iolog_path_escape path_escapes[] = { + { "seq", fill_seq }, + { "user", fill_user }, + { "group", fill_group }, + { "runas_user", fill_runas_user }, + { "runas_group", fill_runas_group }, + { "hostname", fill_hostname }, + { "command", fill_command }, + { NULL, NULL } +}; + +static int +do_check(char *dir_in, char *file_in, char *tdir_out, char *tfile_out) +{ + char dir[PATH_MAX], dir_out[PATH_MAX] = ""; + char file[PATH_MAX], file_out[PATH_MAX] = ""; + int error = 0; + struct tm tm; + time_t now; + int len; + + /* + * Expand any strftime(3) escapes + * XXX - want to pass tm to expand_iolog_path + */ + time(&now); + if (localtime_r(&now, &tm) == NULL) + sudo_fatal("localtime_r"); + if (tdir_out[0] != '\0') { + len = strftime(dir_out, sizeof(dir_out), tdir_out, &tm); + if (len == 0 || dir_out[sizeof(dir_out) - 1] != '\0') + sudo_fatalx("dir_out: strftime overflow"); + } + if (tfile_out[0] != '\0') { + len = strftime(file_out, sizeof(file_out), tfile_out, &tm); + if (len == 0 || file_out[sizeof(file_out) - 1] != '\0') + sudo_fatalx("file_out: strftime overflow"); + } + + if (!expand_iolog_path(dir_in, dir, sizeof(dir), &path_escapes[1], NULL)) + sudo_fatalx("unable to expand I/O log dir"); + if (!expand_iolog_path(file_in, file, sizeof(file), &path_escapes[0], dir)) + sudo_fatalx("unable to expand I/O log file"); + + if (strcmp(dir, dir_out) != 0) { + sudo_warnx("%s: expected %s, got %s", dir_in, dir_out, dir); + error = 1; + } + if (strcmp(file, file_out) != 0) { + sudo_warnx("%s: expected %s, got %s", file_in, file_out, file); + error = 1; + } + + return error; +} + +#define MAX_STATE 12 + +int +main(int argc, char *argv[]) +{ + size_t len; + FILE *fp; + char line[2048]; + char *file_in = NULL, *file_out = NULL; + char *dir_in = NULL, *dir_out = NULL; + int ch, state = 0, errors = 0, ntests = 0; + + initprogname(argc > 0 ? argv[0] : "check_iolog_path"); + + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + /* ignore */ + break; + default: + fprintf(stderr, "usage: %s [-v] data\n", getprogname()); + return EXIT_FAILURE; + } + } + argc -= optind; + argv += optind; + + if (argc != 1) + usage(); + + fp = fopen(argv[0], "r"); + if (fp == NULL) + sudo_fatalx("unable to open %s", argv[0]); + + /* + * Input consists of 12 lines: + * sequence number + * user name + * user gid + * runas user name + * runas gid + * hostname [short form] + * command + * dir [with escapes] + * file [with escapes] + * expanded dir + * expanded file + * empty line + */ + while (fgets(line, sizeof(line), fp) != NULL) { + len = strcspn(line, "\n"); + line[len] = '\0'; + + switch (state) { + case 0: + strlcpy(escape_data.sessid, line, sizeof(escape_data.sessid)); + break; + case 1: + if ((escape_data.user = strdup(line)) == NULL) + sudo_fatal(NULL); + break; + case 2: + if ((escape_data.group = strdup(line)) == NULL) + sudo_fatal(NULL); + break; + case 3: + if ((escape_data.runas_user = strdup(line)) == NULL) + sudo_fatal(NULL); + break; + case 4: + if ((escape_data.runas_group = strdup(line)) == NULL) + sudo_fatal(NULL); + break; + case 5: + if ((escape_data.host = strdup(line)) == NULL) + sudo_fatal(NULL); + break; + case 6: + if ((escape_data.command = strdup(line)) == NULL) + sudo_fatal(NULL); + break; + case 7: + if (dir_in != NULL) + free(dir_in); + dir_in = strdup(line); + break; + case 8: + if (file_in != NULL) + free(file_in); + file_in = strdup(line); + break; + case 9: + if (dir_out != NULL) + free(dir_out); + dir_out = strdup(line); + break; + case 10: + if (file_out != NULL) + free(file_out); + file_out = strdup(line); + break; + case 11: + errors += do_check(dir_in, file_in, dir_out, file_out); + ntests++; + reset_escape_data(&escape_data); + break; + default: + sudo_fatalx("internal error, invalid state %d", state); + } + state = (state + 1) % MAX_STATE; + } + free(dir_in); + free(dir_out); + free(file_in); + free(file_out); + + if (ntests != 0) { + printf("iolog_path: %d test%s run, %d errors, %d%% success rate\n", + ntests, ntests == 1 ? "" : "s", errors, + (ntests - errors) * 100 / ntests); + } + + return errors; +} diff --git a/lib/iolog/regress/iolog_path/data b/lib/iolog/regress/iolog_path/data new file mode 100644 index 0000000..48dc87e --- /dev/null +++ b/lib/iolog/regress/iolog_path/data @@ -0,0 +1,96 @@ +000001 +nobody +nogroup +root +root +somehost +id +/var/log/sudo-io +%%{bogus} +/var/log/sudo-io +%%{bogus} + +000001 +nobody +nogroup +root +wheel +somehost +id +/var/log/sudo-io +%%{seq} +/var/log/sudo-io +%%{seq} + +000001 +nobody +nogroup +root +wheel +somehost +id +/var/log/sudo-io +%{seq} +/var/log/sudo-io +00/00/01 + +000001 +nobody +nogroup +root +wheel +somehost +id +/var/log/sudo-io/%{user} +%{seq} +/var/log/sudo-io/nobody +00/00/01 + +000001 +nobody +nogroup +root +wheel +somehost +su +/var/log/sudo-io/%{user}/%{runas_user} +%{command}_%Y%m%s_%H%M +/var/log/sudo-io/nobody/root +su_%Y%m%s_%H%M + +000001 +nobody +nogroup +root +wheel +somehost +su +/var/log/sudo-io/ +//%{user}/%{runas_user}/%{command}_%Y%m%s_%H%M +/var/log/sudo-io +/nobody/root/su_%Y%m%s_%H%M + +000001 +nobody +nogroup +root +wheel +somehost +su +/var/log/sudo-io/%d%m%Y +%{user}/%{runas_user}/%{command} +/var/log/sudo-io/%d%m%Y +nobody/root/su + +000001 +nobody +nogroup +root +wheel +somehost +su +//////// +%{user}/%{runas_user}/%{command} + +nobody/root/su + diff --git a/lib/iolog/regress/iolog_timing/check_iolog_timing.c b/lib/iolog/regress/iolog_timing/check_iolog_timing.c new file mode 100644 index 0000000..915b604 --- /dev/null +++ b/lib/iolog/regress/iolog_timing/check_iolog_timing.c @@ -0,0 +1,161 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2018 Todd C. Miller <Todd.Miller@sudo.ws> + * + * Permission to use, copy, modify, and 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. + * + * THE 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 <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_util.h" +#include "sudo_fatal.h" +#include "sudo_iolog.h" + +sudo_dso_public int main(int argc, char *argv[]); + +static struct parse_delay_test { + const char *input; + const char *next_field; + struct timespec expected_delay; +} parse_delay_tests[] = { + { "10.99999999999 X", "X", { 10, 999999999 } }, /* clamp to nsec */ + { "10.999999999 X", "X", { 10, 999999999 } }, /* nsec */ + { "10.999999 X", "X", { 10, 999999000 } }, /* usec -> nsec */ + { "10.000999999 X", "X", { 10, 999999 } }, + { "10.9 X", "X", { 10, 900000000 } }, + { "10.0 X", "X", { 10, 0 } } +}; + +/* + * Test iolog_parse_delay() + */ +static void +test_parse_delay(int *ntests, int *nerrors) +{ + unsigned int i; + + for (i = 0; i < nitems(parse_delay_tests); i++) { + struct timespec delay; + struct parse_delay_test *test = &parse_delay_tests[i]; + char *cp = iolog_parse_delay(test->input, &delay, "."); + if (cp == NULL) { + sudo_warnx("%s:%u failed to parse delay: %s", __func__, + i, test->input); + (*nerrors)++; + continue; + } + if (strcmp(cp, test->next_field) != 0) { + sudo_warnx("%s:%u next field (want \"%s\", got \"%s\"", __func__, + i, test->next_field, cp); + (*nerrors)++; + continue; + } + if (delay.tv_sec != test->expected_delay.tv_sec) { + sudo_warnx("%s:%u wrong seconds (want %lld, got %lld)", __func__, + i, (long long)test->expected_delay.tv_sec, + (long long)delay.tv_sec); + (*nerrors)++; + continue; + } + if (delay.tv_nsec != test->expected_delay.tv_nsec) { + sudo_warnx("%s:%u wrong nanoseconds (want %ld, got %ld)", __func__, + i, test->expected_delay.tv_nsec, delay.tv_nsec); + (*nerrors)++; + continue; + } + } + (*ntests) += i; +} + +static struct adjust_delay_test { + struct timespec in_delay; + struct timespec out_delay; + struct timespec max_delay; + double scale_factor; +} adjust_delay_tests[] = { + { { 10, 300 }, { 10, 300 }, { 0, 0 }, 1.0 }, + { { 10, 300 }, { 5, 150 }, { 0, 0 }, 2.0 }, + { { 5, 300 }, { 2, 500000150 }, { 0, 0 }, 2.0 }, + { { 0, 1000000 }, { 0, 333333 }, { 0, 0 }, 3 }, + { { 10, 1000000 }, { 3, 333666666 }, { 0, 0 }, 3 }, + { { 5, 150 }, { 10, 300 }, { 0, 0 }, 0.5 }, + { { 5, 500000000 }, { 11, 0 }, { 0, 0 }, 0.5 }, + { { 5, 150 }, { 5, 0 }, { 5, 0 }, 0.5 } +}; + +/* + * Test iolog_adjust_delay() + */ +static void +test_adjust_delay(int *ntests, int *nerrors) +{ + unsigned int i; + + for (i = 0; i < nitems(adjust_delay_tests); i++) { + struct adjust_delay_test *test = &adjust_delay_tests[i]; + + iolog_adjust_delay(&test->in_delay, + sudo_timespecisset(&test->max_delay) ? &test->max_delay : NULL, + test->scale_factor); + if (!sudo_timespeccmp(&test->in_delay, &test->out_delay, ==)) { + sudo_warnx("%s:%u want {%lld, %ld}, got {%lld, %ld}", __func__, i, + (long long)test->out_delay.tv_sec, test->out_delay.tv_nsec, + (long long)test->in_delay.tv_sec, test->in_delay.tv_nsec); + (*nerrors)++; + } + } + (*ntests) += i; +} + +int +main(int argc, char *argv[]) +{ + int ch, ntests = 0, errors = 0; + + initprogname(argc > 0 ? argv[0] : "check_iolog_timing"); + + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + /* ignore */ + break; + default: + fprintf(stderr, "usage: %s [-v]\n", getprogname()); + return EXIT_FAILURE; + } + } + argc -= optind; + argv += optind; + + test_parse_delay(&ntests, &errors); + + test_adjust_delay(&ntests, &errors); + + if (ntests != 0) { + printf("iolog_timing: %d test%s run, %d errors, %d%% success rate\n", + ntests, ntests == 1 ? "" : "s", errors, + (ntests - errors) * 100 / ntests); + } + + return errors; +} |