summaryrefslogtreecommitdiff
path: root/src/auditor
diff options
context:
space:
mode:
Diffstat (limited to 'src/auditor')
-rw-r--r--src/auditor/.gitignore7
-rw-r--r--src/auditor/Makefile.am84
-rw-r--r--src/auditor/auditor-basedb.age1
-rw-r--r--src/auditor/auditor-basedb.feesbin800 -> 0 bytes
-rw-r--r--src/auditor/auditor-basedb.mpub1
-rw-r--r--src/auditor/auditor-basedb.sql8087
-rw-r--r--src/auditor/auditor.conf6
-rw-r--r--src/auditor/batch.conf183
-rwxr-xr-xsrc/auditor/batch.sh235
-rw-r--r--src/auditor/generate-auditor-basedb-template.conf1
-rw-r--r--src/auditor/generate-auditor-basedb.conf186
-rwxr-xr-xsrc/auditor/generate-auditor-basedb.sh301
-rw-r--r--src/auditor/generate-kyc-basedb.conf4
-rwxr-xr-xsrc/auditor/generate-revoke-basedb.sh377
-rw-r--r--src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv1
-rw-r--r--src/auditor/report-lib.c301
-rw-r--r--src/auditor/report-lib.h65
-rw-r--r--src/auditor/revoke-basedb.age1
-rw-r--r--src/auditor/revoke-basedb.conf (renamed from src/auditor/test-auditor.conf)14
-rw-r--r--src/auditor/revoke-basedb.feesbin800 -> 0 bytes
-rw-r--r--src/auditor/revoke-basedb.mpub1
-rw-r--r--src/auditor/revoke-basedb.sql8078
-rwxr-xr-xsrc/auditor/setup.sh93
-rw-r--r--src/auditor/taler-auditor-dbinit.c5
-rw-r--r--src/auditor/taler-auditor-exchange.c224
-rw-r--r--src/auditor/taler-auditor-httpd.c79
-rw-r--r--src/auditor/taler-auditor-httpd.h6
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation-get.c166
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation-get.h70
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation.c288
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation.h1
-rw-r--r--src/auditor/taler-auditor-httpd_exchanges.c116
-rw-r--r--src/auditor/taler-auditor-httpd_exchanges.h46
-rw-r--r--src/auditor/taler-auditor-sync.c45
-rw-r--r--src/auditor/taler-auditor.in20
-rw-r--r--src/auditor/taler-helper-auditor-aggregation.c541
-rw-r--r--src/auditor/taler-helper-auditor-coins.c1797
-rw-r--r--src/auditor/taler-helper-auditor-deposits.c278
-rw-r--r--src/auditor/taler-helper-auditor-purses.c1451
-rw-r--r--src/auditor/taler-helper-auditor-render.py12
-rw-r--r--src/auditor/taler-helper-auditor-reserves.c1378
-rw-r--r--src/auditor/taler-helper-auditor-wire.c1737
-rwxr-xr-xsrc/auditor/test-auditor.sh2628
-rwxr-xr-xsrc/auditor/test-kyc.sh751
-rwxr-xr-xsrc/auditor/test-revocation.sh900
-rwxr-xr-xsrc/auditor/test-sync.sh183
46 files changed, 9692 insertions, 21057 deletions
diff --git a/src/auditor/.gitignore b/src/auditor/.gitignore
index 6d25d8bae..11c875dc6 100644
--- a/src/auditor/.gitignore
+++ b/src/auditor/.gitignore
@@ -19,3 +19,10 @@ generate-auditor-basedb-revocation.conf
revocation-tmp-*
auditor-basedb.wdb
taler-auditor-sync
+auditor-basedb.sqlite3
+taler-auditor-test.sqlite3
+libeufin-nexus.pid
+libeufin-sandbox.pid
+taler-helper-auditor-purses
+generate-kyc-basedb.conf.edited
+generate-auditor-basedb.conf.edited
diff --git a/src/auditor/Makefile.am b/src/auditor/Makefile.am
index 09a0deec3..381c0b115 100644
--- a/src/auditor/Makefile.am
+++ b/src/auditor/Makefile.am
@@ -16,12 +16,12 @@ clean-local:
bin_PROGRAMS = \
taler-auditor-dbinit \
- taler-auditor-exchange \
taler-auditor-httpd \
taler-auditor-sync \
taler-helper-auditor-aggregation \
taler-helper-auditor-coins \
taler-helper-auditor-deposits \
+ taler-helper-auditor-purses \
taler-helper-auditor-reserves \
taler-helper-auditor-wire
@@ -54,21 +54,20 @@ libauditorreport_la_LIBADD = \
taler_auditor_dbinit_SOURCES = \
taler-auditor-dbinit.c
taler_auditor_dbinit_LDADD = \
- $(LIBGCRYPT_LIBS) \
- $(top_builddir)/src/util/libtalerutil.la \
- $(top_builddir)/src/pq/libtalerpq.la \
$(top_builddir)/src/auditordb/libtalerauditordb.la \
- -lgnunetutil $(XLIB)
-taler_auditor_dbinit_LDFLAGS = \
- $(POSTGRESQL_LDFLAGS)
+ $(top_builddir)/src/pq/libtalerpq.la \
+ $(top_builddir)/src/util/libtalerutil.la \
+ -lgnunetutil \
+ $(LIBGCRYPT_LIBS) \
+ $(XLIB)
taler_auditor_dbinit_CPPFLAGS = \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/pq/ \
$(POSTGRESQL_CPPFLAGS)
-taler_helper_auditor_reserves_SOURCES = \
- taler-helper-auditor-reserves.c
-taler_helper_auditor_reserves_LDADD = \
+taler_helper_auditor_coins_SOURCES = \
+ taler-helper-auditor-coins.c
+taler_helper_auditor_coins_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -81,9 +80,9 @@ taler_helper_auditor_reserves_LDADD = \
-lgnunetutil \
$(XLIB)
-taler_helper_auditor_coins_SOURCES = \
- taler-helper-auditor-coins.c
-taler_helper_auditor_coins_LDADD = \
+taler_helper_auditor_aggregation_SOURCES = \
+ taler-helper-auditor-aggregation.c
+taler_helper_auditor_aggregation_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -96,9 +95,9 @@ taler_helper_auditor_coins_LDADD = \
-lgnunetutil \
$(XLIB)
-taler_helper_auditor_aggregation_SOURCES = \
- taler-helper-auditor-aggregation.c
-taler_helper_auditor_aggregation_LDADD = \
+taler_helper_auditor_deposits_SOURCES = \
+ taler-helper-auditor-deposits.c
+taler_helper_auditor_deposits_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -111,9 +110,9 @@ taler_helper_auditor_aggregation_LDADD = \
-lgnunetutil \
$(XLIB)
-taler_helper_auditor_deposits_SOURCES = \
- taler-helper-auditor-deposits.c
-taler_helper_auditor_deposits_LDADD = \
+taler_helper_auditor_purses_SOURCES = \
+ taler-helper-auditor-purses.c
+taler_helper_auditor_purses_LDADD = \
$(LIBGCRYPT_LIBS) \
$(top_builddir)/src/util/libtalerutil.la \
$(top_builddir)/src/json/libtalerjson.la \
@@ -126,6 +125,23 @@ taler_helper_auditor_deposits_LDADD = \
-lgnunetutil \
$(XLIB)
+taler_helper_auditor_reserves_SOURCES = \
+ taler-helper-auditor-reserves.c
+taler_helper_auditor_reserves_LDADD = \
+ $(LIBGCRYPT_LIBS) \
+ $(top_builddir)/src/util/libtalerutil.la \
+ $(top_builddir)/src/json/libtalerjson.la \
+ $(top_builddir)/src/bank-lib/libtalerbank.la \
+ $(top_builddir)/src/exchangedb/libtalerexchangedb.la \
+ $(top_builddir)/src/auditordb/libtalerauditordb.la \
+ libauditorreport.la \
+ -ljansson \
+ -lgnunetjson \
+ -lgnunetutil \
+ $(XLIB)
+
+
+
taler_helper_auditor_wire_SOURCES = \
taler-helper-auditor-wire.c
taler_helper_auditor_wire_LDADD = \
@@ -146,7 +162,7 @@ taler_helper_auditor_wire_LDADD = \
taler_auditor_httpd_SOURCES = \
taler-auditor-httpd.c taler-auditor-httpd.h \
taler-auditor-httpd_deposit-confirmation.c taler-auditor-httpd_deposit-confirmation.h \
- taler-auditor-httpd_exchanges.c taler-auditor-httpd_exchanges.h \
+ taler-auditor-httpd_deposit-confirmation-get.c taler-auditor-httpd_deposit-confirmation-get.h \
taler-auditor-httpd_mhd.c taler-auditor-httpd_mhd.h
taler_auditor_httpd_LDADD = \
$(LIBGCRYPT_LIBS) \
@@ -162,15 +178,6 @@ taler_auditor_httpd_LDADD = \
-lz \
$(XLIB)
-taler_auditor_exchange_SOURCES = \
- taler-auditor-exchange.c
-taler_auditor_exchange_LDADD = \
- $(LIBGCRYPT_LIBS) \
- $(top_builddir)/src/util/libtalerutil.la \
- $(top_builddir)/src/auditordb/libtalerauditordb.la \
- -lgnunetutil \
- $(XLIB)
-
taler_auditor_sync_SOURCES = \
taler-auditor-sync.c
taler_auditor_sync_LDADD = \
@@ -182,8 +189,6 @@ taler_auditor_sync_LDADD = \
-lgnunetutil \
$(LIBGCRYPT_LIBS) \
$(XLIB)
-taler_auditor_sync_LDFLAGS = \
- $(POSTGRESQL_LDFLAGS)
taler_auditor_sync_CPPFLAGS = \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/pq/ \
@@ -192,27 +197,22 @@ taler_auditor_sync_CPPFLAGS = \
check_SCRIPTS = \
test-auditor.sh \
+ test-kyc.sh \
test-revocation.sh \
test-sync.sh
.NOTPARALLEL:
-TESTS = $(check_SCRIPTS)
+# TESTS = $(check_SCRIPTS)
EXTRA_DIST = \
taler-auditor.in \
taler-helper-auditor-render.py \
auditor.conf \
- test-auditor.conf \
+ setup.sh \
test-sync-in.conf \
test-sync-out.conf \
generate-auditor-basedb.sh \
- generate-revoke-basedb.sh \
generate-auditor-basedb.conf \
- generate-auditor-basedb-template.conf \
- $(check_SCRIPTS) \
- auditor-basedb.age \
- auditor-basedb.sql \
- auditor-basedb.mpub \
- revoke-basedb.age \
- revoke-basedb.sql \
- revoke-basedb.mpub
+ generate-kyc-basedb.conf \
+ generate-revoke-basedb.sh \
+ $(check_SCRIPTS)
diff --git a/src/auditor/auditor-basedb.age b/src/auditor/auditor-basedb.age
deleted file mode 100644
index 3a0370507..000000000
--- a/src/auditor/auditor-basedb.age
+++ /dev/null
@@ -1 +0,0 @@
-1630849842
diff --git a/src/auditor/auditor-basedb.fees b/src/auditor/auditor-basedb.fees
deleted file mode 100644
index ef2a6d121..000000000
--- a/src/auditor/auditor-basedb.fees
+++ /dev/null
Binary files differ
diff --git a/src/auditor/auditor-basedb.mpub b/src/auditor/auditor-basedb.mpub
deleted file mode 100644
index a3c4f9a4b..000000000
--- a/src/auditor/auditor-basedb.mpub
+++ /dev/null
@@ -1 +0,0 @@
-K9XQK7176F2CVFPXQAWC8EMYZJNVSW011E1MF9RQE7QTGE1KJXA0
diff --git a/src/auditor/auditor-basedb.sql b/src/auditor/auditor-basedb.sql
deleted file mode 100644
index 8bcc691a7..000000000
--- a/src/auditor/auditor-basedb.sql
+++ /dev/null
@@ -1,8087 +0,0 @@
---
--- PostgreSQL database dump
---
-
--- Dumped from database version 13.4 (Debian 13.4-3)
--- Dumped by pg_dump version 13.4 (Debian 13.4-3)
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
---
--- Name: _v; Type: SCHEMA; Schema: -; Owner: -
---
-
-CREATE SCHEMA _v;
-
-
---
--- Name: SCHEMA _v; Type: COMMENT; Schema: -; Owner: -
---
-
-COMMENT ON SCHEMA _v IS 'Schema for versioning data and functionality.';
-
-
---
--- Name: assert_patch_is_applied(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_patch_is_applied(in_patch_name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
-BEGIN
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF NOT FOUND THEN
- RAISE EXCEPTION 'Patch % is not applied!', in_patch_name;
- END IF;
- RETURN format('Patch %s is applied.', in_patch_name);
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_patch_is_applied(in_patch_name text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_patch_is_applied(in_patch_name text) IS 'Function that can be used to make sure that patch has been applied.';
-
-
---
--- Name: assert_user_is_not_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_not_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RAISE EXCEPTION 'Current user is superuser - cannot continue.';
- END IF;
- RETURN 'assert_user_is_not_superuser: OK';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_not_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_not_superuser() IS 'Function that can be used to make sure that patch is being applied using normal (not superuser) account.';
-
-
---
--- Name: assert_user_is_one_of(text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-BEGIN
- IF current_user = any( p_acceptable_users ) THEN
- RETURN 'assert_user_is_one_of: OK';
- END IF;
- RAISE EXCEPTION 'User is not one of: % - cannot continue.', p_acceptable_users;
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_one_of(VARIADIC p_acceptable_users text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) IS 'Function that can be used to make sure that patch is being applied by one of defined users.';
-
-
---
--- Name: assert_user_is_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RETURN 'assert_user_is_superuser: OK';
- END IF;
- RAISE EXCEPTION 'Current user is not superuser - cannot continue.';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_superuser() IS 'Function that can be used to make sure that patch is being applied using superuser account.';
-
-
---
--- Name: register_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, NULL, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text) IS 'Wrapper to allow registration of patches without requirements and conflicts.';
-
-
---
--- Name: register_patch(text, text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text, text[]) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, $2, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text, text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text, text[]) IS 'Wrapper to allow registration of patches without conflicts.';
-
-
---
--- Name: register_patch(text, text[], text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
- t_text_a TEXT[];
- i INT4;
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF FOUND THEN
- RAISE EXCEPTION 'Patch % is already applied!', in_patch_name;
- END IF;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE patch_name = any( in_conflicts ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Versioning patches conflict. Conflicting patche(s) installed: %.', array_to_string( t_text_a, ', ' );
- END IF;
-
- IF array_upper( in_requirements, 1 ) IS NOT NULL THEN
- t_text_a := '{}';
- FOR i IN array_lower( in_requirements, 1 ) .. array_upper( in_requirements, 1 ) LOOP
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_requirements[i];
- IF NOT FOUND THEN
- t_text_a := t_text_a || in_requirements[i];
- END IF;
- END LOOP;
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Missing prerequisite(s): %.', array_to_string( t_text_a, ', ' );
- END IF;
- END IF;
-
- INSERT INTO _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts ) VALUES ( in_patch_name, now(), current_user, coalesce( in_requirements, '{}' ), coalesce( in_conflicts, '{}' ) );
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) IS 'Function to register patches in database. Raises exception if there are conflicts, prerequisites are not installed or the migration has already been installed.';
-
-
---
--- Name: unregister_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- i INT4;
- t_text_a TEXT[];
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE in_patch_name = ANY( requires ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Cannot uninstall %, as it is required by: %.', in_patch_name, array_to_string( t_text_a, ', ' );
- END IF;
-
- DELETE FROM _v.patches WHERE patch_name = in_patch_name;
- GET DIAGNOSTICS i = ROW_COUNT;
- IF i < 1 THEN
- RAISE EXCEPTION 'Patch % is not installed, so it can''t be uninstalled!', in_patch_name;
- END IF;
-
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION unregister_patch(in_patch_name text, OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) IS 'Function to unregister patches in database. Dies if the patch is not registered, or if unregistering it would break dependencies.';
-
-
-SET default_tablespace = '';
-
-SET default_table_access_method = heap;
-
---
--- Name: patches; Type: TABLE; Schema: _v; Owner: -
---
-
-CREATE TABLE _v.patches (
- patch_name text NOT NULL,
- applied_tsz timestamp with time zone DEFAULT now() NOT NULL,
- applied_by text NOT NULL,
- requires text[],
- conflicts text[]
-);
-
-
---
--- Name: TABLE patches; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON TABLE _v.patches IS 'Contains information about what patches are currently applied on database.';
-
-
---
--- Name: COLUMN patches.patch_name; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.patch_name IS 'Name of patch, has to be unique for every patch.';
-
-
---
--- Name: COLUMN patches.applied_tsz; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_tsz IS 'When the patch was applied.';
-
-
---
--- Name: COLUMN patches.applied_by; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_by IS 'Who applied this patch (PostgreSQL username)';
-
-
---
--- Name: COLUMN patches.requires; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.requires IS 'List of patches that are required for given patch.';
-
-
---
--- Name: COLUMN patches.conflicts; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.conflicts IS 'List of patches that conflict with given patch.';
-
-
---
--- Name: aggregation_tracking; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_tracking (
- aggregation_serial_id bigint NOT NULL,
- deposit_serial_id bigint NOT NULL,
- wtid_raw bytea
-);
-
-
---
--- Name: TABLE aggregation_tracking; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.aggregation_tracking IS 'mapping from wire transfer identifiers (WTID) to deposits (and back)';
-
-
---
--- Name: COLUMN aggregation_tracking.wtid_raw; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_tracking.wtid_raw IS 'We first create entries in the aggregation_tracking table and then finally the wire_out entry once we know the total amount. Hence the constraint must be deferrable and we cannot use a wireout_uuid here, because we do not have it when these rows are created. Changing the logic to first INSERT a dummy row into wire_out and then UPDATEing that row in the same transaction would theoretically reduce per-deposit storage costs by 5 percent (24/~460 bytes).';
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq OWNED BY public.aggregation_tracking.aggregation_serial_id;
-
-
---
--- Name: app_bankaccount; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_bankaccount (
- is_public boolean NOT NULL,
- account_no integer NOT NULL,
- balance character varying NOT NULL,
- user_id integer NOT NULL
-);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_bankaccount_account_no_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_bankaccount_account_no_seq OWNED BY public.app_bankaccount.account_no;
-
-
---
--- Name: app_banktransaction; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_banktransaction (
- id integer NOT NULL,
- amount character varying NOT NULL,
- subject character varying(200) NOT NULL,
- date timestamp with time zone NOT NULL,
- cancelled boolean NOT NULL,
- request_uid character varying(128) NOT NULL,
- credit_account_id integer NOT NULL,
- debit_account_id integer NOT NULL
-);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_banktransaction_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_banktransaction_id_seq OWNED BY public.app_banktransaction.id;
-
-
---
--- Name: app_talerwithdrawoperation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_talerwithdrawoperation (
- withdraw_id uuid NOT NULL,
- amount character varying NOT NULL,
- selection_done boolean NOT NULL,
- confirmation_done boolean NOT NULL,
- aborted boolean NOT NULL,
- selected_reserve_pub text,
- selected_exchange_account_id integer,
- withdraw_account_id integer NOT NULL
-);
-
-
---
--- Name: auditor_balance_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_balance_summary (
- master_pub bytea,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- deposit_fee_balance_val bigint NOT NULL,
- deposit_fee_balance_frac integer NOT NULL,
- melt_fee_balance_val bigint NOT NULL,
- melt_fee_balance_frac integer NOT NULL,
- refund_fee_balance_val bigint NOT NULL,
- refund_fee_balance_frac integer NOT NULL,
- risk_val bigint NOT NULL,
- risk_frac integer NOT NULL,
- loss_val bigint NOT NULL,
- loss_frac integer NOT NULL,
- irregular_recoup_val bigint NOT NULL,
- irregular_recoup_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_balance_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_balance_summary IS 'the sum of the outstanding coins from auditor_denomination_pending (denom_pubs must belong to the respectives exchange master public key); it represents the auditor_balance_summary of the exchange at this point (modulo unexpected historic_loss-style events where denomination keys are compromised)';
-
-
---
--- Name: auditor_denom_sigs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denom_sigs (
- auditor_denom_serial bigint NOT NULL,
- auditor_uuid bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- auditor_sig bytea,
- CONSTRAINT auditor_denom_sigs_auditor_sig_check CHECK ((length(auditor_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_denom_sigs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denom_sigs IS 'Table with auditor signatures on exchange denomination keys.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_uuid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_uuid IS 'Identifies the auditor.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.denominations_serial IS 'Denomination the signature is for.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_sig IS 'Signature of the auditor, of purpose TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS.';
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq OWNED BY public.auditor_denom_sigs.auditor_denom_serial;
-
-
---
--- Name: auditor_denomination_pending; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denomination_pending (
- denom_pub_hash bytea NOT NULL,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- denom_loss_val bigint NOT NULL,
- denom_loss_frac integer NOT NULL,
- num_issued bigint NOT NULL,
- denom_risk_val bigint NOT NULL,
- denom_risk_frac integer NOT NULL,
- recoup_loss_val bigint NOT NULL,
- recoup_loss_frac integer NOT NULL,
- CONSTRAINT auditor_denomination_pending_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_denomination_pending; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denomination_pending IS 'outstanding denomination coins that the exchange is aware of and what the respective balances are (outstanding as well as issued overall which implies the maximum value at risk).';
-
-
---
--- Name: COLUMN auditor_denomination_pending.num_issued; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.num_issued IS 'counts the number of coins issued (withdraw, refresh) of this denomination';
-
-
---
--- Name: COLUMN auditor_denomination_pending.denom_risk_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.denom_risk_val IS 'amount that could theoretically be lost in the future due to recoup operations';
-
-
---
--- Name: COLUMN auditor_denomination_pending.recoup_loss_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.recoup_loss_val IS 'amount actually lost due to recoup operations past revocation';
-
-
---
--- Name: auditor_exchange_signkeys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchange_signkeys (
- master_pub bytea,
- ep_start bigint NOT NULL,
- ep_expire bigint NOT NULL,
- ep_end bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT auditor_exchange_signkeys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT auditor_exchange_signkeys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_exchange_signkeys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchange_signkeys IS 'list of the online signing keys of exchanges we are auditing';
-
-
---
--- Name: auditor_exchanges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchanges (
- master_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- CONSTRAINT auditor_exchanges_master_pub_check CHECK ((length(master_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_exchanges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchanges IS 'list of the exchanges we are auditing';
-
-
---
--- Name: auditor_historic_denomination_revenue; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_denomination_revenue (
- master_pub bytea,
- denom_pub_hash bytea NOT NULL,
- revenue_timestamp bigint NOT NULL,
- revenue_balance_val bigint NOT NULL,
- revenue_balance_frac integer NOT NULL,
- loss_balance_val bigint NOT NULL,
- loss_balance_frac integer NOT NULL,
- CONSTRAINT auditor_historic_denomination_revenue_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_historic_denomination_revenue; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_denomination_revenue IS 'Table with historic profits; basically, when a denom_pub has expired and everything associated with it is garbage collected, the final profits end up in here; note that the denom_pub here is not a foreign key, we just keep it as a reference point.';
-
-
---
--- Name: COLUMN auditor_historic_denomination_revenue.revenue_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_historic_denomination_revenue.revenue_balance_val IS 'the sum of all of the profits we made on the coin except for withdraw fees (which are in historic_reserve_revenue); so this includes the deposit, melt and refund fees';
-
-
---
--- Name: auditor_historic_reserve_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_reserve_summary (
- master_pub bytea,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- reserve_profits_val bigint NOT NULL,
- reserve_profits_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_historic_reserve_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_reserve_summary IS 'historic profits from reserves; we eventually GC auditor_historic_reserve_revenue, and then store the totals in here (by time intervals).';
-
-
---
--- Name: auditor_predicted_result; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_predicted_result (
- master_pub bytea,
- balance_val bigint NOT NULL,
- balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_predicted_result; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_predicted_result IS 'Table with the sum of the ledger, auditor_historic_revenue and the auditor_reserve_balance. This is the final amount that the exchange should have in its bank account right now.';
-
-
---
--- Name: auditor_progress_aggregation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_aggregation (
- master_pub bytea NOT NULL,
- last_wire_out_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_aggregation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_aggregation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_coin (
- master_pub bytea NOT NULL,
- last_withdraw_serial_id bigint DEFAULT 0 NOT NULL,
- last_deposit_serial_id bigint DEFAULT 0 NOT NULL,
- last_melt_serial_id bigint DEFAULT 0 NOT NULL,
- last_refund_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_refresh_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_coin IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_deposit_confirmation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_deposit_confirmation (
- master_pub bytea NOT NULL,
- last_deposit_confirmation_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_deposit_confirmation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_deposit_confirmation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_reserve (
- master_pub bytea NOT NULL,
- last_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_out_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_close_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_reserve IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_reserve_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserve_balance (
- master_pub bytea,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_reserve_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserve_balance IS 'sum of the balances of all customer reserves (by exchange master public key)';
-
-
---
--- Name: auditor_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserves (
- reserve_pub bytea NOT NULL,
- master_pub bytea,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL,
- expiration_date bigint NOT NULL,
- auditor_reserves_rowid bigint NOT NULL,
- origin_account text,
- CONSTRAINT auditor_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserves IS 'all of the customer reserves and their respective balances that the auditor is aware of';
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq OWNED BY public.auditor_reserves.auditor_reserves_rowid;
-
-
---
--- Name: auditor_wire_fee_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_wire_fee_balance (
- master_pub bytea,
- wire_fee_balance_val bigint NOT NULL,
- wire_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_wire_fee_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_wire_fee_balance IS 'sum of the balances of all wire fees (by exchange master public key)';
-
-
---
--- Name: auditors; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditors (
- auditor_uuid bigint NOT NULL,
- auditor_pub bytea NOT NULL,
- auditor_name character varying NOT NULL,
- auditor_url character varying NOT NULL,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT auditors_auditor_pub_check CHECK ((length(auditor_pub) = 32))
-);
-
-
---
--- Name: TABLE auditors; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditors IS 'Table with auditors the exchange uses or has used in the past. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN auditors.auditor_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_pub IS 'Public key of the auditor.';
-
-
---
--- Name: COLUMN auditors.auditor_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_url IS 'The base URL of the auditor.';
-
-
---
--- Name: COLUMN auditors.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.is_active IS 'true if we are currently supporting the use of this auditor.';
-
-
---
--- Name: COLUMN auditors.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditors_auditor_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditors_auditor_uuid_seq OWNED BY public.auditors.auditor_uuid;
-
-
---
--- Name: auth_group; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group (
- id integer NOT NULL,
- name character varying(150) NOT NULL
-);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_id_seq OWNED BY public.auth_group.id;
-
-
---
--- Name: auth_group_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group_permissions (
- id bigint NOT NULL,
- group_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_permissions_id_seq OWNED BY public.auth_group_permissions.id;
-
-
---
--- Name: auth_permission; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_permission (
- id integer NOT NULL,
- name character varying(255) NOT NULL,
- content_type_id integer NOT NULL,
- codename character varying(100) NOT NULL
-);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_permission_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_permission_id_seq OWNED BY public.auth_permission.id;
-
-
---
--- Name: auth_user; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user (
- id integer NOT NULL,
- password character varying(128) NOT NULL,
- last_login timestamp with time zone,
- is_superuser boolean NOT NULL,
- username character varying(150) NOT NULL,
- first_name character varying(150) NOT NULL,
- last_name character varying(150) NOT NULL,
- email character varying(254) NOT NULL,
- is_staff boolean NOT NULL,
- is_active boolean NOT NULL,
- date_joined timestamp with time zone NOT NULL
-);
-
-
---
--- Name: auth_user_groups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_groups (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- group_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_groups_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_groups_id_seq OWNED BY public.auth_user_groups.id;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_id_seq OWNED BY public.auth_user.id;
-
-
---
--- Name: auth_user_user_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_user_permissions (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_user_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_user_permissions_id_seq OWNED BY public.auth_user_user_permissions.id;
-
-
---
--- Name: denomination_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denomination_revocations (
- denom_revocations_serial_id bigint NOT NULL,
- master_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT denomination_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denomination_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denomination_revocations IS 'remembering which denomination keys have been revoked';
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq OWNED BY public.denomination_revocations.denom_revocations_serial_id;
-
-
---
--- Name: denominations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denominations (
- denom_pub_hash bytea NOT NULL,
- denom_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_withdraw bigint NOT NULL,
- expire_deposit bigint NOT NULL,
- expire_legal bigint NOT NULL,
- coin_val bigint NOT NULL,
- coin_frac integer NOT NULL,
- fee_withdraw_val bigint NOT NULL,
- fee_withdraw_frac integer NOT NULL,
- fee_deposit_val bigint NOT NULL,
- fee_deposit_frac integer NOT NULL,
- fee_refresh_val bigint NOT NULL,
- fee_refresh_frac integer NOT NULL,
- fee_refund_val bigint NOT NULL,
- fee_refund_frac integer NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT denominations_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64)),
- CONSTRAINT denominations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denominations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denominations IS 'Main denominations table. All the valid denominations the exchange knows about.';
-
-
---
--- Name: COLUMN denominations.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.denominations_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.denominations_denominations_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denominations_denominations_serial_seq OWNED BY public.denominations.denominations_serial;
-
-
---
--- Name: deposit_confirmations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposit_confirmations (
- master_pub bytea,
- serial_id bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- h_wire bytea NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- amount_without_fee_val bigint NOT NULL,
- amount_without_fee_frac integer NOT NULL,
- coin_pub bytea NOT NULL,
- merchant_pub bytea NOT NULL,
- exchange_sig bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT deposit_confirmations_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_sig_check CHECK ((length(exchange_sig) = 64)),
- CONSTRAINT deposit_confirmations_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposit_confirmations_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT deposit_confirmations_master_sig_check CHECK ((length(master_sig) = 64)),
- CONSTRAINT deposit_confirmations_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE deposit_confirmations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposit_confirmations IS 'deposit confirmation sent to us by merchants; we must check that the exchange reported these properly.';
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposit_confirmations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposit_confirmations_serial_id_seq OWNED BY public.deposit_confirmations.serial_id;
-
-
---
--- Name: deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits (
- deposit_serial_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wallet_timestamp bigint NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- h_wire bytea NOT NULL,
- coin_sig bytea NOT NULL,
- wire text NOT NULL,
- tiny boolean DEFAULT false NOT NULL,
- done boolean DEFAULT false NOT NULL,
- known_coin_id bigint NOT NULL,
- shard integer DEFAULT 0 NOT NULL,
- CONSTRAINT deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT deposits_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposits_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT deposits_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits IS 'Deposits we have received and for which we need to make (aggregate) wire transfers (and manage refunds).';
-
-
---
--- Name: COLUMN deposits.tiny; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.tiny IS 'Set to TRUE if we decided that the amount is too small to ever trigger a wire transfer by itself (requires real aggregation)';
-
-
---
--- Name: COLUMN deposits.done; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.done IS 'Set to TRUE once we have included this deposit in some aggregate wire transfer to the merchant';
-
-
---
--- Name: COLUMN deposits.shard; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.shard IS 'Used for load sharding. Should be set based on h_wire, merchant_pub and a service salt. Default of 0 onlyapplies for columns migrated from a previous version without sharding support. 64-bit value because we need an *unsigned* 32-bit value.';
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposits_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposits_deposit_serial_id_seq OWNED BY public.deposits.deposit_serial_id;
-
-
---
--- Name: django_content_type; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_content_type (
- id integer NOT NULL,
- app_label character varying(100) NOT NULL,
- model character varying(100) NOT NULL
-);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_content_type_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_content_type_id_seq OWNED BY public.django_content_type.id;
-
-
---
--- Name: django_migrations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_migrations (
- id bigint NOT NULL,
- app character varying(255) NOT NULL,
- name character varying(255) NOT NULL,
- applied timestamp with time zone NOT NULL
-);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_migrations_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_migrations_id_seq OWNED BY public.django_migrations.id;
-
-
---
--- Name: django_session; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_session (
- session_key character varying(40) NOT NULL,
- session_data text NOT NULL,
- expire_date timestamp with time zone NOT NULL
-);
-
-
---
--- Name: exchange_sign_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.exchange_sign_keys (
- esk_serial bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_sign bigint NOT NULL,
- expire_legal bigint NOT NULL,
- CONSTRAINT exchange_sign_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT exchange_sign_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE exchange_sign_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.exchange_sign_keys IS 'Table with master public key signatures on exchange online signing keys.';
-
-
---
--- Name: COLUMN exchange_sign_keys.exchange_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.exchange_pub IS 'Public online signing key of the exchange.';
-
-
---
--- Name: COLUMN exchange_sign_keys.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.master_sig IS 'Signature affirming the validity of the signing key of purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.';
-
-
---
--- Name: COLUMN exchange_sign_keys.valid_from; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.valid_from IS 'Time when this online signing key will first be used to sign messages.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_sign; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_sign IS 'Time when this online signing key will no longer be used to sign.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_legal; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_legal IS 'Time when this online signing key legally expires.';
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.exchange_sign_keys_esk_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.exchange_sign_keys_esk_serial_seq OWNED BY public.exchange_sign_keys.esk_serial;
-
-
---
--- Name: known_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins (
- known_coin_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- denom_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-
-
---
--- Name: TABLE known_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.known_coins IS 'information about coins and their signatures, so we do not have to store the signatures more than once if a coin is involved in multiple operations';
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.known_coins_known_coin_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.known_coins_known_coin_id_seq OWNED BY public.known_coins.known_coin_id;
-
-
---
--- Name: merchant_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_accounts (
- account_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- h_wire bytea NOT NULL,
- salt bytea NOT NULL,
- payto_uri character varying NOT NULL,
- active boolean NOT NULL,
- CONSTRAINT merchant_accounts_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT merchant_accounts_salt_check CHECK ((length(salt) = 64))
-);
-
-
---
--- Name: TABLE merchant_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_accounts IS 'bank accounts of the instances';
-
-
---
--- Name: COLUMN merchant_accounts.h_wire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.h_wire IS 'salted hash of payto_uri';
-
-
---
--- Name: COLUMN merchant_accounts.salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.salt IS 'salt used when hashing payto_uri into h_wire';
-
-
---
--- Name: COLUMN merchant_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.payto_uri IS 'payto URI of a merchant bank account';
-
-
---
--- Name: COLUMN merchant_accounts.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.active IS 'true if we actively use this bank account, false if it is just kept around for older contracts to refer to';
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_accounts_account_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_accounts_account_serial_seq OWNED BY public.merchant_accounts.account_serial;
-
-
---
--- Name: merchant_contract_terms; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_contract_terms (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- contract_terms bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- creation_time bigint NOT NULL,
- pay_deadline bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- paid boolean DEFAULT false NOT NULL,
- wired boolean DEFAULT false NOT NULL,
- fulfillment_url character varying,
- session_id character varying DEFAULT ''::character varying NOT NULL,
- claim_token bytea NOT NULL,
- CONSTRAINT merchant_contract_terms_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_contract_terms_h_contract_terms_check CHECK ((length(h_contract_terms) = 64))
-);
-
-
---
--- Name: TABLE merchant_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_contract_terms IS 'Contracts are orders that have been claimed by a wallet';
-
-
---
--- Name: COLUMN merchant_contract_terms.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.order_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.order_id IS 'Not a foreign key into merchant_orders because paid contracts persist after expiration';
-
-
---
--- Name: COLUMN merchant_contract_terms.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.contract_terms IS 'These contract terms include the wallet nonce';
-
-
---
--- Name: COLUMN merchant_contract_terms.h_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.h_contract_terms IS 'Hash over contract_terms';
-
-
---
--- Name: COLUMN merchant_contract_terms.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_contract_terms.refund_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.refund_deadline IS 'By what times do refunds have to be approved (useful to reject refund requests)';
-
-
---
--- Name: COLUMN merchant_contract_terms.paid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.paid IS 'true implies the customer paid for this contract; order should be DELETEd from merchant_orders once paid is set to release merchant_order_locks; paid remains true even if the payment was later refunded';
-
-
---
--- Name: COLUMN merchant_contract_terms.wired; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.wired IS 'true implies the exchange wired us the full amount for all non-refunded payments under this contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.fulfillment_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.fulfillment_url IS 'also included in contract_terms, but we need it here to SELECT on it during repurchase detection; can be NULL if the contract has no fulfillment URL';
-
-
---
--- Name: COLUMN merchant_contract_terms.session_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.session_id IS 'last session_id from we confirmed the paying client to use, empty string for none';
-
-
---
--- Name: COLUMN merchant_contract_terms.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.claim_token IS 'Token optionally used to access the status of the order. All zeros (not NULL) if not used';
-
-
---
--- Name: merchant_deposit_to_transfer; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposit_to_transfer (
- deposit_serial bigint NOT NULL,
- coin_contribution_value_val bigint NOT NULL,
- coin_contribution_value_frac integer NOT NULL,
- credit_serial bigint NOT NULL,
- execution_time bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- CONSTRAINT merchant_deposit_to_transfer_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposit_to_transfer; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposit_to_transfer IS 'Mapping of deposits to (possibly unconfirmed) wire transfers; NOTE: not used yet';
-
-
---
--- Name: COLUMN merchant_deposit_to_transfer.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposit_to_transfer.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposits (
- deposit_serial bigint NOT NULL,
- order_serial bigint,
- deposit_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- deposit_fee_val bigint NOT NULL,
- deposit_fee_frac integer NOT NULL,
- refund_fee_val bigint NOT NULL,
- refund_fee_frac integer NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- account_serial bigint NOT NULL,
- CONSTRAINT merchant_deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT merchant_deposits_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposits IS 'Refunds approved by the merchant (backoffice) logic, excludes abort refunds';
-
-
---
--- Name: COLUMN merchant_deposits.deposit_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.deposit_timestamp IS 'Time when the exchange generated the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.wire_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.wire_fee_val IS 'We MAY want to see if we should try to get this via merchant_exchange_wire_fees (not sure, may be too complicated with the date range, etc.)';
-
-
---
--- Name: COLUMN merchant_deposits.signkey_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.signkey_serial IS 'Online signing key of the exchange on the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.exchange_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.exchange_sig IS 'Signature of the exchange over the deposit confirmation';
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_deposits_deposit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_deposits_deposit_serial_seq OWNED BY public.merchant_deposits.deposit_serial;
-
-
---
--- Name: merchant_exchange_signing_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_signing_keys (
- signkey_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- expire_date bigint NOT NULL,
- end_date bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_signing_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_signing_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_signing_keys IS 'Here we store proofs of the exchange online signing keys being signed by the exchange master key';
-
-
---
--- Name: COLUMN merchant_exchange_signing_keys.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_signing_keys.master_pub IS 'Master public key of the exchange with these online signing keys';
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq OWNED BY public.merchant_exchange_signing_keys.signkey_serial;
-
-
---
--- Name: merchant_exchange_wire_fees; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_wire_fees (
- wirefee_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- h_wire_method bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_wire_fees_h_wire_method_check CHECK ((length(h_wire_method) = 64)),
- CONSTRAINT merchant_exchange_wire_fees_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_wire_fees_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_wire_fees; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_wire_fees IS 'Here we store proofs of the wire fee structure of the various exchanges';
-
-
---
--- Name: COLUMN merchant_exchange_wire_fees.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_wire_fees.master_pub IS 'Master public key of the exchange with these wire fees';
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq OWNED BY public.merchant_exchange_wire_fees.wirefee_serial;
-
-
---
--- Name: merchant_instances; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_instances (
- merchant_serial bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- merchant_id character varying NOT NULL,
- merchant_name character varying NOT NULL,
- address bytea NOT NULL,
- jurisdiction bytea NOT NULL,
- default_max_deposit_fee_val bigint NOT NULL,
- default_max_deposit_fee_frac integer NOT NULL,
- default_max_wire_fee_val bigint NOT NULL,
- default_max_wire_fee_frac integer NOT NULL,
- default_wire_fee_amortization integer NOT NULL,
- default_wire_transfer_delay bigint NOT NULL,
- default_pay_delay bigint NOT NULL,
- auth_hash bytea,
- auth_salt bytea,
- CONSTRAINT merchant_instances_auth_hash_check CHECK ((length(auth_hash) = 64)),
- CONSTRAINT merchant_instances_auth_salt_check CHECK ((length(auth_salt) = 32)),
- CONSTRAINT merchant_instances_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_instances; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_instances IS 'all the instances supported by this backend';
-
-
---
--- Name: COLUMN merchant_instances.merchant_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_id IS 'identifier of the merchant as used in the base URL (required)';
-
-
---
--- Name: COLUMN merchant_instances.merchant_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_name IS 'legal name of the merchant as a simple string (required)';
-
-
---
--- Name: COLUMN merchant_instances.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.address IS 'physical address of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: COLUMN merchant_instances.jurisdiction; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.jurisdiction IS 'jurisdiction of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: COLUMN merchant_instances.auth_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_hash IS 'hash used for merchant back office Authorization, NULL for no check';
-
-
---
--- Name: COLUMN merchant_instances.auth_salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_salt IS 'salt to use when hashing Authorization header before comparing with auth_hash';
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_instances_merchant_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_instances_merchant_serial_seq OWNED BY public.merchant_instances.merchant_serial;
-
-
---
--- Name: merchant_inventory; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory (
- product_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- product_id character varying NOT NULL,
- description character varying NOT NULL,
- description_i18n bytea NOT NULL,
- unit character varying NOT NULL,
- image bytea NOT NULL,
- taxes bytea NOT NULL,
- price_val bigint NOT NULL,
- price_frac integer NOT NULL,
- total_stock bigint NOT NULL,
- total_sold bigint DEFAULT 0 NOT NULL,
- total_lost bigint DEFAULT 0 NOT NULL,
- address bytea NOT NULL,
- next_restock bigint NOT NULL
-);
-
-
---
--- Name: TABLE merchant_inventory; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory IS 'products offered by the merchant (may be incomplete, frontend can override)';
-
-
---
--- Name: COLUMN merchant_inventory.description; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description IS 'Human-readable product description';
-
-
---
--- Name: COLUMN merchant_inventory.description_i18n; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description_i18n IS 'JSON map from IETF BCP 47 language tags to localized descriptions';
-
-
---
--- Name: COLUMN merchant_inventory.unit; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.unit IS 'Unit of sale for the product (liters, kilograms, packages)';
-
-
---
--- Name: COLUMN merchant_inventory.image; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.image IS 'NOT NULL, but can be 0 bytes; must contain an ImageDataUrl';
-
-
---
--- Name: COLUMN merchant_inventory.taxes; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.taxes IS 'JSON array containing taxes the merchant pays, must be JSON, but can be just "[]"';
-
-
---
--- Name: COLUMN merchant_inventory.price_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.price_val IS 'Current price of one unit of the product';
-
-
---
--- Name: COLUMN merchant_inventory.total_stock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_stock IS 'A value of -1 is used for unlimited (electronic good), may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_sold; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_sold IS 'Number of products sold, must be below total_stock, non-negative, may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_lost; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_lost IS 'Number of products that used to be in stock but were lost (spoiled, damaged), may never be lowered; total_stock >= total_sold + total_lost must always hold';
-
-
---
--- Name: COLUMN merchant_inventory.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.address IS 'JSON formatted Location of where the product is stocked';
-
-
---
--- Name: COLUMN merchant_inventory.next_restock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.next_restock IS 'GNUnet absolute time indicating when the next restock is expected. 0 for unknown.';
-
-
---
--- Name: merchant_inventory_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory_locks (
- product_serial bigint NOT NULL,
- lock_uuid bytea NOT NULL,
- total_locked bigint NOT NULL,
- expiration bigint NOT NULL,
- CONSTRAINT merchant_inventory_locks_lock_uuid_check CHECK ((length(lock_uuid) = 16))
-);
-
-
---
--- Name: TABLE merchant_inventory_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory_locks IS 'locks on inventory helt by shopping carts; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_inventory_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: COLUMN merchant_inventory_locks.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.expiration IS 'when does this lock automatically expire (if no order is created)';
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_inventory_product_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_inventory_product_serial_seq OWNED BY public.merchant_inventory.product_serial;
-
-
---
--- Name: merchant_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_keys (
- merchant_priv bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- CONSTRAINT merchant_keys_merchant_priv_check CHECK ((length(merchant_priv) = 32))
-);
-
-
---
--- Name: TABLE merchant_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_keys IS 'private keys of instances that have not been deleted';
-
-
---
--- Name: merchant_order_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_order_locks (
- product_serial bigint NOT NULL,
- total_locked bigint NOT NULL,
- order_serial bigint NOT NULL
-);
-
-
---
--- Name: TABLE merchant_order_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_order_locks IS 'locks on orders awaiting claim and payment; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_order_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_order_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: merchant_orders; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_orders (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- claim_token bytea NOT NULL,
- h_post_data bytea NOT NULL,
- pay_deadline bigint NOT NULL,
- creation_time bigint NOT NULL,
- contract_terms bytea NOT NULL,
- CONSTRAINT merchant_orders_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_orders_h_post_data_check CHECK ((length(h_post_data) = 64))
-);
-
-
---
--- Name: TABLE merchant_orders; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_orders IS 'Orders we offered to a customer, but that have not yet been claimed';
-
-
---
--- Name: COLUMN merchant_orders.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_orders.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.claim_token IS 'Token optionally used to authorize the wallet to claim the order. All zeros (not NULL) if not used';
-
-
---
--- Name: COLUMN merchant_orders.h_post_data; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.h_post_data IS 'Hash of the POST request that created this order, for idempotency checks';
-
-
---
--- Name: COLUMN merchant_orders.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_orders.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.contract_terms IS 'Claiming changes the contract_terms, hence we have no hash of the terms in this table';
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_orders_order_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_orders_order_serial_seq OWNED BY public.merchant_orders.order_serial;
-
-
---
--- Name: merchant_refund_proofs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refund_proofs (
- refund_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- signkey_serial bigint NOT NULL,
- CONSTRAINT merchant_refund_proofs_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_refund_proofs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_refund_proofs IS 'Refunds confirmed by the exchange (not all approved refunds are grabbed by the wallet)';
-
-
---
--- Name: merchant_refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refunds (
- refund_serial bigint NOT NULL,
- order_serial bigint NOT NULL,
- rtransaction_id bigint NOT NULL,
- refund_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- reason character varying NOT NULL,
- refund_amount_val bigint NOT NULL,
- refund_amount_frac integer NOT NULL
-);
-
-
---
--- Name: COLUMN merchant_refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.rtransaction_id IS 'Needed for uniqueness in case a refund is increased for the same order';
-
-
---
--- Name: COLUMN merchant_refunds.refund_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.refund_timestamp IS 'Needed for grouping of refunds in the wallet UI; has no semantics in the protocol (only for UX), but should be from the time when the merchant internally approved the refund';
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_refunds_refund_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_refunds_refund_serial_seq OWNED BY public.merchant_refunds.refund_serial;
-
-
---
--- Name: merchant_tip_pickup_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickup_signatures (
- pickup_serial bigint NOT NULL,
- coin_offset integer NOT NULL,
- blind_sig bytea NOT NULL
-);
-
-
---
--- Name: TABLE merchant_tip_pickup_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickup_signatures IS 'blind signatures we got from the exchange during the tip pickup';
-
-
---
--- Name: merchant_tip_pickups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickups (
- pickup_serial bigint NOT NULL,
- tip_serial bigint NOT NULL,
- pickup_id bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT merchant_tip_pickups_pickup_id_check CHECK ((length(pickup_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tip_pickups; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickups IS 'tips that have been picked up';
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_tip_pickups_pickup_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_pickups_pickup_serial_seq OWNED BY public.merchant_tip_pickups.pickup_serial;
-
-
---
--- Name: merchant_tip_reserve_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserve_keys (
- reserve_serial bigint NOT NULL,
- reserve_priv bytea NOT NULL,
- exchange_url character varying NOT NULL,
- payto_uri character varying,
- CONSTRAINT merchant_tip_reserve_keys_reserve_priv_check CHECK ((length(reserve_priv) = 32))
-);
-
-
---
--- Name: COLUMN merchant_tip_reserve_keys.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserve_keys.payto_uri IS 'payto:// URI used to fund the reserve, may be NULL once reserve is funded';
-
-
---
--- Name: merchant_tip_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserves (
- reserve_serial bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- creation_time bigint NOT NULL,
- expiration bigint NOT NULL,
- merchant_initial_balance_val bigint NOT NULL,
- merchant_initial_balance_frac integer NOT NULL,
- exchange_initial_balance_val bigint DEFAULT 0 NOT NULL,
- exchange_initial_balance_frac integer DEFAULT 0 NOT NULL,
- tips_committed_val bigint DEFAULT 0 NOT NULL,
- tips_committed_frac integer DEFAULT 0 NOT NULL,
- tips_picked_up_val bigint DEFAULT 0 NOT NULL,
- tips_picked_up_frac integer DEFAULT 0 NOT NULL,
- CONSTRAINT merchant_tip_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_tip_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_reserves IS 'private keys of reserves that have not been deleted';
-
-
---
--- Name: COLUMN merchant_tip_reserves.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.expiration IS 'FIXME: EXCHANGE API needs to tell us when reserves close if we are to compute this';
-
-
---
--- Name: COLUMN merchant_tip_reserves.merchant_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.merchant_initial_balance_val IS 'Set to the initial balance the merchant told us when creating the reserve';
-
-
---
--- Name: COLUMN merchant_tip_reserves.exchange_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.exchange_initial_balance_val IS 'Set to the initial balance the exchange told us when we queried the reserve status';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_committed_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_committed_val IS 'Amount of outstanding approved tips that have not been picked up';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_picked_up_val IS 'Total amount tips that have been picked up from this reserve';
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_tip_reserves_reserve_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_reserves_reserve_serial_seq OWNED BY public.merchant_tip_reserves.reserve_serial;
-
-
---
--- Name: merchant_tips; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tips (
- tip_serial bigint NOT NULL,
- reserve_serial bigint NOT NULL,
- tip_id bytea NOT NULL,
- justification character varying NOT NULL,
- next_url character varying NOT NULL,
- expiration bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- picked_up_val bigint DEFAULT 0 NOT NULL,
- picked_up_frac integer DEFAULT 0 NOT NULL,
- was_picked_up boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_tips_tip_id_check CHECK ((length(tip_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tips; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tips IS 'tips that have been authorized';
-
-
---
--- Name: COLUMN merchant_tips.reserve_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.reserve_serial IS 'Reserve from which this tip is funded';
-
-
---
--- Name: COLUMN merchant_tips.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.expiration IS 'by when does the client have to pick up the tip';
-
-
---
--- Name: COLUMN merchant_tips.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.amount_val IS 'total transaction cost for all coins including withdraw fees';
-
-
---
--- Name: COLUMN merchant_tips.picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.picked_up_val IS 'Tip amount left to be picked up';
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_tips_tip_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tips_tip_serial_seq OWNED BY public.merchant_tips.tip_serial;
-
-
---
--- Name: merchant_transfer_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_signatures (
- credit_serial bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- CONSTRAINT merchant_transfer_signatures_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_transfer_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_signatures IS 'table represents the main information returned from the /transfer request to the exchange.';
-
-
---
--- Name: COLUMN merchant_transfer_signatures.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_signatures.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_transfer_to_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_to_coin (
- deposit_serial bigint NOT NULL,
- credit_serial bigint NOT NULL,
- offset_in_exchange_list bigint NOT NULL,
- exchange_deposit_value_val bigint NOT NULL,
- exchange_deposit_value_frac integer NOT NULL,
- exchange_deposit_fee_val bigint NOT NULL,
- exchange_deposit_fee_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE merchant_transfer_to_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_to_coin IS 'Mapping of (credit) transfers to (deposited) coins';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_value_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_value_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits minus refunds';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_fee_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits';
-
-
---
--- Name: merchant_transfers; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfers (
- credit_serial bigint NOT NULL,
- exchange_url character varying NOT NULL,
- wtid bytea,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- account_serial bigint NOT NULL,
- verified boolean DEFAULT false NOT NULL,
- confirmed boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_transfers_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- Name: TABLE merchant_transfers; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfers IS 'table represents the information provided by the (trusted) merchant about incoming wire transfers';
-
-
---
--- Name: COLUMN merchant_transfers.credit_amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.credit_amount_val IS 'actual value of the (aggregated) wire transfer, excluding the wire fee, according to the exchange';
-
-
---
--- Name: COLUMN merchant_transfers.verified; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.verified IS 'true once we got an acceptable response from the exchange for this transfer';
-
-
---
--- Name: COLUMN merchant_transfers.confirmed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.confirmed IS 'true once the merchant confirmed that this transfer was received';
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_transfers_credit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_transfers_credit_serial_seq OWNED BY public.merchant_transfers.credit_serial;
-
-
---
--- Name: prewire; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire (
- prewire_uuid bigint NOT NULL,
- type text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL,
- failed boolean DEFAULT false NOT NULL
-);
-
-
---
--- Name: TABLE prewire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.prewire IS 'pre-commit data for wire transfers we are about to execute';
-
-
---
--- Name: COLUMN prewire.finished; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.finished IS 'set to TRUE once bank confirmed receiving the wire transfer request';
-
-
---
--- Name: COLUMN prewire.buf; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.buf IS 'serialized data to send to the bank to execute the wire transfer';
-
-
---
--- Name: COLUMN prewire.failed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.failed IS 'set to TRUE if the bank responded with a non-transient failure to our transfer request';
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.prewire_prewire_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.prewire_prewire_uuid_seq OWNED BY public.prewire.prewire_uuid;
-
-
---
--- Name: recoup; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup (
- recoup_uuid bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- "timestamp" bigint NOT NULL,
- known_coin_id bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: TABLE recoup; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup IS 'Information about recoups that were executed';
-
-
---
--- Name: COLUMN recoup.reserve_out_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.reserve_out_serial_id IS 'Identifies the h_blind_ev of the recouped coin.';
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_recoup_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_recoup_uuid_seq OWNED BY public.recoup.recoup_uuid;
-
-
---
--- Name: recoup_refresh; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh (
- recoup_refresh_uuid bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- "timestamp" bigint NOT NULL,
- known_coin_id bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: COLUMN recoup_refresh.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.rrc_serial IS 'Identifies the h_blind_ev of the recouped coin (as h_coin_ev).';
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq OWNED BY public.recoup_refresh.recoup_refresh_uuid;
-
-
---
--- Name: refresh_commitments; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_coin_sig bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- noreveal_index integer NOT NULL,
- old_known_coin_id bigint NOT NULL,
- CONSTRAINT refresh_commitments_old_coin_sig_check CHECK ((length(old_coin_sig) = 64)),
- CONSTRAINT refresh_commitments_rc_check CHECK ((length(rc) = 64))
-);
-
-
---
--- Name: TABLE refresh_commitments; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_commitments IS 'Commitments made when melting coins and the gamma value chosen by the exchange.';
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_commitments_melt_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_commitments_melt_serial_id_seq OWNED BY public.refresh_commitments.melt_serial_id;
-
-
---
--- Name: refresh_revealed_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_revealed_coins (
- freshcoin_index integer NOT NULL,
- link_sig bytea NOT NULL,
- coin_ev bytea NOT NULL,
- h_coin_ev bytea NOT NULL,
- ev_sig bytea NOT NULL,
- rrc_serial bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- CONSTRAINT refresh_revealed_coins_h_coin_ev_check CHECK ((length(h_coin_ev) = 64)),
- CONSTRAINT refresh_revealed_coins_link_sig_check CHECK ((length(link_sig) = 64))
-);
-
-
---
--- Name: TABLE refresh_revealed_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_revealed_coins IS 'Revelations about the new coins that are to be created during a melting session.';
-
-
---
--- Name: COLUMN refresh_revealed_coins.freshcoin_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.freshcoin_index IS 'index of the fresh coin being created (one melt operation may result in multiple fresh coins)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.coin_ev IS 'envelope of the new coin to be signed';
-
-
---
--- Name: COLUMN refresh_revealed_coins.h_coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.h_coin_ev IS 'hash of the envelope of the new coin to be signed (for lookups)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.ev_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.ev_sig IS 'exchange signature over the envelope';
-
-
---
--- Name: COLUMN refresh_revealed_coins.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.rrc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_revealed_coins.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.melt_serial_id IS 'Identifies the refresh commitment (rc) of the operation.';
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_revealed_coins_rrc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_revealed_coins_rrc_serial_seq OWNED BY public.refresh_revealed_coins.rrc_serial;
-
-
---
--- Name: refresh_transfer_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_transfer_keys (
- transfer_pub bytea NOT NULL,
- transfer_privs bytea NOT NULL,
- rtc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- CONSTRAINT refresh_transfer_keys_transfer_pub_check CHECK ((length(transfer_pub) = 32))
-);
-
-
---
--- Name: TABLE refresh_transfer_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_transfer_keys IS 'Transfer keys of a refresh operation (the data revealed to the exchange).';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_pub IS 'transfer public key for the gamma index';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_privs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_privs IS 'array of TALER_CNC_KAPPA - 1 transfer private keys that have been revealed, with the gamma entry being skipped';
-
-
---
--- Name: COLUMN refresh_transfer_keys.rtc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.rtc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_transfer_keys.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.melt_serial_id IS 'Identifies the refresh commitment (rc) of the operation.';
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_transfer_keys_rtc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_transfer_keys_rtc_serial_seq OWNED BY public.refresh_transfer_keys.rtc_serial;
-
-
---
--- Name: refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds (
- refund_serial_id bigint NOT NULL,
- merchant_sig bytea NOT NULL,
- rtransaction_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- deposit_serial_id bigint NOT NULL,
- CONSTRAINT refunds_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-);
-
-
---
--- Name: TABLE refunds; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refunds IS 'Data on coins that were refunded. Technically, refunds always apply against specific deposit operations involving a coin. The combination of coin_pub, merchant_pub, h_contract_terms and rtransaction_id MUST be unique, and we usually select by coin_pub so that one goes first.';
-
-
---
--- Name: COLUMN refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.rtransaction_id IS 'used by the merchant to make refunds unique in case the same coin for the same deposit gets a subsequent (higher) refund';
-
-
---
--- Name: COLUMN refunds.deposit_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.deposit_serial_id IS 'Identifies ONLY the merchant_pub, h_contract_terms and known_coin_id. Multiple deposits may match a refund, this only identifies one of them.';
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refunds_refund_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refunds_refund_serial_id_seq OWNED BY public.refunds.refund_serial_id;
-
-
---
--- Name: reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves (
- reserve_pub bytea NOT NULL,
- account_details text NOT NULL,
- current_balance_val bigint NOT NULL,
- current_balance_frac integer NOT NULL,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- reserve_uuid bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves IS 'Summarizes the balance of a reserve. Updated when new funds are added or withdrawn.';
-
-
---
--- Name: COLUMN reserves.expiration_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.expiration_date IS 'Used to trigger closing of reserves that have not been drained after some time';
-
-
---
--- Name: COLUMN reserves.gc_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.gc_date IS 'Used to forget all information about a reserve during garbage collection';
-
-
---
--- Name: reserves_close; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_close (
- close_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- receiver_account text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- reserve_uuid bigint NOT NULL,
- CONSTRAINT reserves_close_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- Name: TABLE reserves_close; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_close IS 'wire transfers executed by the reserve to close reserves';
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_close_close_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_close_close_uuid_seq OWNED BY public.reserves_close.close_uuid;
-
-
---
--- Name: reserves_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in (
- reserve_in_serial_id bigint NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- sender_account_details text NOT NULL,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL,
- reserve_uuid bigint NOT NULL
-);
-
-
---
--- Name: TABLE reserves_in; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_in IS 'list of transfers of funds into the reserves, one per incoming wire transfer';
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_in_reserve_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_in_reserve_in_serial_id_seq OWNED BY public.reserves_in.reserve_in_serial_id;
-
-
---
--- Name: reserves_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea NOT NULL,
- denom_sig bytea NOT NULL,
- reserve_sig bytea NOT NULL,
- execution_date bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- reserve_uuid bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT reserves_out_h_blind_ev_check CHECK ((length(h_blind_ev) = 64)),
- CONSTRAINT reserves_out_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-
-
---
--- Name: TABLE reserves_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_out IS 'Withdraw operations performed on reserves.';
-
-
---
--- Name: COLUMN reserves_out.h_blind_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_out.h_blind_ev IS 'Hash of the blinded coin, used as primary key here so that broken clients that use a non-random coin or blinding factor fail to withdraw (otherwise they would fail on deposit when the coin is not unique there).';
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_out_reserve_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_out_reserve_out_serial_id_seq OWNED BY public.reserves_out.reserve_out_serial_id;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_reserve_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_reserve_uuid_seq OWNED BY public.reserves.reserve_uuid;
-
-
---
--- Name: revolving_work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE UNLOGGED TABLE public.revolving_work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row integer NOT NULL,
- end_row integer NOT NULL,
- active boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE revolving_work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.revolving_work_shards IS 'coordinates work between multiple processes working on the same job with partitions that need to be repeatedly processed; unlogged because on system crashes the locks represented by this table will have to be cleared anyway, typically using "taler-exchange-dbinit -s"';
-
-
---
--- Name: COLUMN revolving_work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.active IS 'set to TRUE when a worker is active on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.revolving_work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.revolving_work_shards_shard_serial_id_seq OWNED BY public.revolving_work_shards.shard_serial_id;
-
-
---
--- Name: signkey_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.signkey_revocations (
- signkey_revocations_serial_id bigint NOT NULL,
- esk_serial bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT signkey_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE signkey_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.signkey_revocations IS 'remembering which online signing keys have been revoked';
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq OWNED BY public.signkey_revocations.signkey_revocations_serial_id;
-
-
---
--- Name: wire_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_accounts (
- payto_uri character varying NOT NULL,
- master_sig bytea,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT wire_accounts_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_accounts IS 'Table with current and historic bank accounts of the exchange. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN wire_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.payto_uri IS 'payto URI (RFC 8905) with the bank account of the exchange.';
-
-
---
--- Name: COLUMN wire_accounts.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.master_sig IS 'Signature of purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS';
-
-
---
--- Name: COLUMN wire_accounts.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.is_active IS 'true if we are currently supporting the use of this account.';
-
-
---
--- Name: COLUMN wire_accounts.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: wire_auditor_account_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_account_progress (
- master_pub bytea NOT NULL,
- account_name text NOT NULL,
- last_wire_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_wire_wire_out_serial_id bigint DEFAULT 0 NOT NULL,
- wire_in_off bigint,
- wire_out_off bigint
-);
-
-
---
--- Name: TABLE wire_auditor_account_progress; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_auditor_account_progress IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: wire_auditor_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_progress (
- master_pub bytea NOT NULL,
- last_timestamp bigint NOT NULL,
- last_reserve_close_uuid bigint NOT NULL
-);
-
-
---
--- Name: wire_fee; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_fee (
- wire_method character varying NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- wire_fee_serial bigint NOT NULL,
- CONSTRAINT wire_fee_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_fee; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_fee IS 'list of the wire fees of this exchange, by date';
-
-
---
--- Name: COLUMN wire_fee.wire_fee_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_fee.wire_fee_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_fee_wire_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_fee_wire_fee_serial_seq OWNED BY public.wire_fee.wire_fee_serial;
-
-
---
--- Name: wire_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_out (
- wireout_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid_raw bytea NOT NULL,
- wire_target text NOT NULL,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-
-
---
--- Name: TABLE wire_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_out IS 'wire transfers the exchange has executed';
-
-
---
--- Name: COLUMN wire_out.exchange_account_section; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.exchange_account_section IS 'identifies the configuration section with the debit account of this payment';
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_out_wireout_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_out_wireout_uuid_seq OWNED BY public.wire_out.wireout_uuid;
-
-
---
--- Name: work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row bigint NOT NULL,
- end_row bigint NOT NULL,
- completed boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.work_shards IS 'coordinates work between multiple processes working on the same job';
-
-
---
--- Name: COLUMN work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN work_shards.completed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.completed IS 'set to TRUE once the shard is finished by a worker';
-
-
---
--- Name: COLUMN work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.work_shards_shard_serial_id_seq OWNED BY public.work_shards.shard_serial_id;
-
-
---
--- Name: aggregation_tracking aggregation_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking ALTER COLUMN aggregation_serial_id SET DEFAULT nextval('public.aggregation_tracking_aggregation_serial_id_seq'::regclass);
-
-
---
--- Name: app_bankaccount account_no; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount ALTER COLUMN account_no SET DEFAULT nextval('public.app_bankaccount_account_no_seq'::regclass);
-
-
---
--- Name: app_banktransaction id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction ALTER COLUMN id SET DEFAULT nextval('public.app_banktransaction_id_seq'::regclass);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs ALTER COLUMN auditor_denom_serial SET DEFAULT nextval('public.auditor_denom_sigs_auditor_denom_serial_seq'::regclass);
-
-
---
--- Name: auditor_reserves auditor_reserves_rowid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves ALTER COLUMN auditor_reserves_rowid SET DEFAULT nextval('public.auditor_reserves_auditor_reserves_rowid_seq'::regclass);
-
-
---
--- Name: auditors auditor_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors ALTER COLUMN auditor_uuid SET DEFAULT nextval('public.auditors_auditor_uuid_seq'::regclass);
-
-
---
--- Name: auth_group id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group ALTER COLUMN id SET DEFAULT nextval('public.auth_group_id_seq'::regclass);
-
-
---
--- Name: auth_group_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_group_permissions_id_seq'::regclass);
-
-
---
--- Name: auth_permission id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission ALTER COLUMN id SET DEFAULT nextval('public.auth_permission_id_seq'::regclass);
-
-
---
--- Name: auth_user id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user ALTER COLUMN id SET DEFAULT nextval('public.auth_user_id_seq'::regclass);
-
-
---
--- Name: auth_user_groups id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups ALTER COLUMN id SET DEFAULT nextval('public.auth_user_groups_id_seq'::regclass);
-
-
---
--- Name: auth_user_user_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_user_user_permissions_id_seq'::regclass);
-
-
---
--- Name: denomination_revocations denom_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations ALTER COLUMN denom_revocations_serial_id SET DEFAULT nextval('public.denomination_revocations_denom_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: denominations denominations_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations ALTER COLUMN denominations_serial SET DEFAULT nextval('public.denominations_denominations_serial_seq'::regclass);
-
-
---
--- Name: deposit_confirmations serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations ALTER COLUMN serial_id SET DEFAULT nextval('public.deposit_confirmations_serial_id_seq'::regclass);
-
-
---
--- Name: deposits deposit_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits ALTER COLUMN deposit_serial_id SET DEFAULT nextval('public.deposits_deposit_serial_id_seq'::regclass);
-
-
---
--- Name: django_content_type id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type ALTER COLUMN id SET DEFAULT nextval('public.django_content_type_id_seq'::regclass);
-
-
---
--- Name: django_migrations id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations ALTER COLUMN id SET DEFAULT nextval('public.django_migrations_id_seq'::regclass);
-
-
---
--- Name: exchange_sign_keys esk_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys ALTER COLUMN esk_serial SET DEFAULT nextval('public.exchange_sign_keys_esk_serial_seq'::regclass);
-
-
---
--- Name: known_coins known_coin_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins ALTER COLUMN known_coin_id SET DEFAULT nextval('public.known_coins_known_coin_id_seq'::regclass);
-
-
---
--- Name: merchant_accounts account_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts ALTER COLUMN account_serial SET DEFAULT nextval('public.merchant_accounts_account_serial_seq'::regclass);
-
-
---
--- Name: merchant_deposits deposit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits ALTER COLUMN deposit_serial SET DEFAULT nextval('public.merchant_deposits_deposit_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_signing_keys signkey_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys ALTER COLUMN signkey_serial SET DEFAULT nextval('public.merchant_exchange_signing_keys_signkey_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_wire_fees wirefee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees ALTER COLUMN wirefee_serial SET DEFAULT nextval('public.merchant_exchange_wire_fees_wirefee_serial_seq'::regclass);
-
-
---
--- Name: merchant_instances merchant_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances ALTER COLUMN merchant_serial SET DEFAULT nextval('public.merchant_instances_merchant_serial_seq'::regclass);
-
-
---
--- Name: merchant_inventory product_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory ALTER COLUMN product_serial SET DEFAULT nextval('public.merchant_inventory_product_serial_seq'::regclass);
-
-
---
--- Name: merchant_orders order_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders ALTER COLUMN order_serial SET DEFAULT nextval('public.merchant_orders_order_serial_seq'::regclass);
-
-
---
--- Name: merchant_refunds refund_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds ALTER COLUMN refund_serial SET DEFAULT nextval('public.merchant_refunds_refund_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_pickups pickup_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups ALTER COLUMN pickup_serial SET DEFAULT nextval('public.merchant_tip_pickups_pickup_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_reserves reserve_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves ALTER COLUMN reserve_serial SET DEFAULT nextval('public.merchant_tip_reserves_reserve_serial_seq'::regclass);
-
-
---
--- Name: merchant_tips tip_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips ALTER COLUMN tip_serial SET DEFAULT nextval('public.merchant_tips_tip_serial_seq'::regclass);
-
-
---
--- Name: merchant_transfers credit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers ALTER COLUMN credit_serial SET DEFAULT nextval('public.merchant_transfers_credit_serial_seq'::regclass);
-
-
---
--- Name: prewire prewire_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire ALTER COLUMN prewire_uuid SET DEFAULT nextval('public.prewire_prewire_uuid_seq'::regclass);
-
-
---
--- Name: recoup recoup_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup ALTER COLUMN recoup_uuid SET DEFAULT nextval('public.recoup_recoup_uuid_seq'::regclass);
-
-
---
--- Name: recoup_refresh recoup_refresh_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh ALTER COLUMN recoup_refresh_uuid SET DEFAULT nextval('public.recoup_refresh_recoup_refresh_uuid_seq'::regclass);
-
-
---
--- Name: refresh_commitments melt_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments ALTER COLUMN melt_serial_id SET DEFAULT nextval('public.refresh_commitments_melt_serial_id_seq'::regclass);
-
-
---
--- Name: refresh_revealed_coins rrc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins ALTER COLUMN rrc_serial SET DEFAULT nextval('public.refresh_revealed_coins_rrc_serial_seq'::regclass);
-
-
---
--- Name: refresh_transfer_keys rtc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys ALTER COLUMN rtc_serial SET DEFAULT nextval('public.refresh_transfer_keys_rtc_serial_seq'::regclass);
-
-
---
--- Name: refunds refund_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds ALTER COLUMN refund_serial_id SET DEFAULT nextval('public.refunds_refund_serial_id_seq'::regclass);
-
-
---
--- Name: reserves reserve_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves ALTER COLUMN reserve_uuid SET DEFAULT nextval('public.reserves_reserve_uuid_seq'::regclass);
-
-
---
--- Name: reserves_close close_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close ALTER COLUMN close_uuid SET DEFAULT nextval('public.reserves_close_close_uuid_seq'::regclass);
-
-
---
--- Name: reserves_in reserve_in_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in ALTER COLUMN reserve_in_serial_id SET DEFAULT nextval('public.reserves_in_reserve_in_serial_id_seq'::regclass);
-
-
---
--- Name: reserves_out reserve_out_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out ALTER COLUMN reserve_out_serial_id SET DEFAULT nextval('public.reserves_out_reserve_out_serial_id_seq'::regclass);
-
-
---
--- Name: revolving_work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.revolving_work_shards_shard_serial_id_seq'::regclass);
-
-
---
--- Name: signkey_revocations signkey_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations ALTER COLUMN signkey_revocations_serial_id SET DEFAULT nextval('public.signkey_revocations_signkey_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: wire_fee wire_fee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee ALTER COLUMN wire_fee_serial SET DEFAULT nextval('public.wire_fee_wire_fee_serial_seq'::regclass);
-
-
---
--- Name: wire_out wireout_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out ALTER COLUMN wireout_uuid SET DEFAULT nextval('public.wire_out_wireout_uuid_seq'::regclass);
-
-
---
--- Name: work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.work_shards_shard_serial_id_seq'::regclass);
-
-
---
--- Data for Name: patches; Type: TABLE DATA; Schema: _v; Owner: -
---
-
-COPY _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts) FROM stdin;
-exchange-0001 2021-09-05 15:50:06.790312+02 grothoff {} {}
-exchange-0002 2021-09-05 15:50:06.916554+02 grothoff {} {}
-exchange-0003 2021-09-05 15:50:07.047827+02 grothoff {} {}
-merchant-0001 2021-09-05 15:50:07.127287+02 grothoff {} {}
-merchant-0002 2021-09-05 15:50:07.245712+02 grothoff {} {}
-auditor-0001 2021-09-05 15:50:07.321642+02 grothoff {} {}
-\.
-
-
---
--- Data for Name: aggregation_tracking; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_tracking (aggregation_serial_id, deposit_serial_id, wtid_raw) FROM stdin;
-\.
-
-
---
--- Data for Name: app_bankaccount; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_bankaccount (is_public, account_no, balance, user_id) FROM stdin;
-t 3 +TESTKUDOS:0 3
-t 4 +TESTKUDOS:0 4
-t 5 +TESTKUDOS:0 5
-t 6 +TESTKUDOS:0 6
-t 7 +TESTKUDOS:0 7
-t 8 +TESTKUDOS:0 8
-t 9 +TESTKUDOS:0 9
-f 10 +TESTKUDOS:0 10
-f 11 +TESTKUDOS:0 11
-f 12 +TESTKUDOS:90 12
-t 1 -TESTKUDOS:200 1
-f 13 +TESTKUDOS:82 13
-t 2 +TESTKUDOS:28 2
-\.
-
-
---
--- Data for Name: app_banktransaction; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_banktransaction (id, amount, subject, date, cancelled, request_uid, credit_account_id, debit_account_id) FROM stdin;
-1 TESTKUDOS:100 Joining bonus 2021-09-05 15:50:15.403053+02 f ce1cbc4c-9162-4442-85f2-f10410f4ed55 12 1
-2 TESTKUDOS:10 7MH40SSAX042GEV0CBP3ZJD956K4BZ6Z9KNZ4MYN2EZ10P45P9M0 2021-09-05 15:50:19.108848+02 f cfb0b530-5fbe-4bdb-ab95-2f5a1fb7d4d0 2 12
-3 TESTKUDOS:100 Joining bonus 2021-09-05 15:50:26.766972+02 f 9e857c37-cf2b-47aa-b199-6ff0f0e20eba 13 1
-4 TESTKUDOS:18 DVHAFSQXS8RFM6CBYSA377SPREM7QR9TGWZ9QCBXZVCV0WJNJEJ0 2021-09-05 15:50:27.54151+02 f 10c1c4f3-a188-4b30-9dc4-98ad8d55fc61 2 13
-\.
-
-
---
--- Data for Name: app_talerwithdrawoperation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_talerwithdrawoperation (withdraw_id, amount, selection_done, confirmation_done, aborted, selected_reserve_pub, selected_exchange_account_id, withdraw_account_id) FROM stdin;
-88145ad0-f8af-4461-a2d1-b87e08b5750b TESTKUDOS:10 t t f 7MH40SSAX042GEV0CBP3ZJD956K4BZ6Z9KNZ4MYN2EZ10P45P9M0 2 12
-966ecf96-19aa-4862-8cfc-639825621851 TESTKUDOS:18 t t f DVHAFSQXS8RFM6CBYSA377SPREM7QR9TGWZ9QCBXZVCV0WJNJEJ0 2 13
-\.
-
-
---
--- Data for Name: auditor_balance_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_balance_summary (master_pub, denom_balance_val, denom_balance_frac, deposit_fee_balance_val, deposit_fee_balance_frac, melt_fee_balance_val, melt_fee_balance_frac, refund_fee_balance_val, refund_fee_balance_frac, risk_val, risk_frac, loss_val, loss_frac, irregular_recoup_val, irregular_recoup_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_denom_sigs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denom_sigs (auditor_denom_serial, auditor_uuid, denominations_serial, auditor_sig) FROM stdin;
-1 1 58 \\x007d8eb38ec129c625b29316d4001940c5104985ce37e363fd51588a33b4d00689a2327446550cc917a138a89623fc64a5e6e23d86c8bf9483ef54c6b9b5dc00
-2 1 319 \\x025447f83c972339eb11eb27a1559a6a54b61fff5ed9f5283f70094887bdea6f34430382b1391df33a3c824269c32abb82a22ee32f0701bc6c696cb6081add00
-3 1 320 \\xa79b5e5614b9d0a9b6d3e9a512f63a461987e69ff0bf364a2160f84e6f77ca59c8b35bd761bdac728766640e09cbc7d7dbeb598a97f3eb719e82c5fc72c15b04
-4 1 360 \\x93497a23a28f26199ffd95d28db8a5de916ac46815d6488fdbbd94080be7f568f707865b0a94c1fccbe77dfcc3545ae2ff422ba5874c77636facc5942ccb8303
-5 1 423 \\x8c07713a18d42b28e3991b6cd08cc58041a3d6e176cb43e8ac0df34983f3f70c02d9c3456f29ad1942e162e8452fc509392e770a0179890e61d1ec6f1217a50f
-6 1 179 \\xe4037e11e9aa35ec79584e973c2829c387037de6e5419dfab8e7c489f7e5fa03054678395ab3af93a9e6e26ecb38af362d393c2fef8dd050a80f9465c5f1ed0f
-7 1 210 \\xa80c3ae52a0e8505e33bfd53934fdecd7d86c1dab75c8b0c9a822d10fbc21b966b56a729e8fceb0ff65794174c563fdc28acbf669d55d578e7162f4bf849a507
-8 1 264 \\x918ffaa84143812d1961d652ef63814e18ff9f8f8db8b51f8373e2a1b168e580f638ac61cdc2cdf134a7d9548bc41f5fe765d5e3282952a26d1168a8742e280c
-9 1 392 \\x2809418a5f96464be1eb8b9babe255a4faa010696c9130d405372274e6bac155bde31c05d5428ad92a3341424143bfff18a108bb581722e7c3426b3b6667350a
-10 1 300 \\x5371b37ab9a909023860ac9d31043134fecdd2569b1e931cc109e73c5c65e37e3a746ad678dcb2f0fd37ff103b77958e9319301dfebf1394e11fccb936c81d04
-11 1 115 \\x03d53c7e830446cbabb0bfb2252306d1c0d096120e19d7da69f7842c082d00450cf282dec06d16f166fceae525bc970dc6b7eb58626b3b86c2bd26452a76370c
-12 1 195 \\x54c32e55beb7f6a0ab849a7ee1035e7d77abc1fd26bbc0e5c72c9b39d3156c3d8feec919fae86e7873ad8102adffe15407e67d0f3bf54981a31d62130dfe6a00
-13 1 140 \\x06a882a2cc6d5581590e871d1b22806098a560d0f0fbb003eb39280ae0238802be86f4fe348a72f340bba21e5ca037425961417907f16f1334a5f72ef9f2a602
-14 1 343 \\x596cf5d4ebb344b3f76deb4159aa93ce32b1348d6d6356bb1fb6bcd336bae23d619309e943790134fdde65a91bc5a5d5d24f3743276394d1c6f78c1d1228a70d
-15 1 274 \\x9d0884f1d24bb19dcc00945697e7d0f05a4e599cf9f650a7f155a66ae03e06019be2ee17ad7ef6a22f9b480857e4f1f08a47c0205ff813f8f6788364e80dee03
-16 1 421 \\x03b8803f065c02ab0a2d6f3995100956750bd2a967e6258c7eac06c18e14ec44993f5fdbda930da17fd6099f841dc122f22702d310a3edcabca21bf39db79809
-17 1 194 \\x8a26b8e4fd321caeabd0232970311f23a87cdea509d641a4f5a16dcff418e86b1a6635be855401d04152776dfc5ab00966e5e8d2b422400f0026ab3c1bd67809
-18 1 144 \\x9bdca495255ee18bc5e5ee5cac6fdac1161f226de6181f0b116fce2e02035a27f58aaf1a0917fc706156405bd6149ec9612e813413a8a12180fc062433d8eb02
-19 1 402 \\xe2cc951c79290920ddf76293337d44afd69819e74495d031351ca6099082a39555693964d5f5dfc6734bfcf7c57f7bda8c2683539867a8a0d8f8d9c9946bb005
-20 1 137 \\xbd79ac43e2f6b0eab3500a0dcf7c4ddc27dd1aa871a6fa6f857df76e61491ce6c1acdf016f1342f07659ed60d21ca24b97e070b0008562c55dc67dbdced69f00
-21 1 30 \\x2ce40578b8f5616703e5c8c7f6e44a2385d778f1dd23df36402d6b881b24349e8c5fcb5eaae14ce72da0b6f13273fdfab7be16663f18ffc20dba87ea47414805
-22 1 289 \\x4910c4afc10e2cf099d490e8cab933a69b74f13bea11387ef9381815ac91fc88e36c67ca244fd8d18aa2b0f0e63f6318dc8cc674abb6faf752e7153a2ee18f0d
-23 1 209 \\x6fa121261147953f14877ebb4d0a88ff0574efa3d554ed573ea4757b9e86ef336c5902e165355d80e5414bd04c7ff0476d6fa61dfa559a5f0af532d3c4cca003
-24 1 295 \\x83fa672c66140ef6ab606369b34635690a2d640fc23f83d41a412714ff529353fcdffaa16785ce80a52af17bbb693790057729f7eb83569b565043a9e4902401
-25 1 230 \\xf73f0bb60e7e34747cfa25736a978ad2b0653ffbda1043ecc5da09e60912e31365770a6ab54a70c961f43ac12d8f6a81fa641ec2ba8a060913e72642ade69a07
-26 1 403 \\x1d8dbfae62b0ea15cb60223e5ef900519732725bcc343d9a5107ea3d3db47ae99473ee04d378f226f4b31e39d7f6b688ee081aa213ae849141d04f5d5b8baf0f
-27 1 333 \\x284ef67531e43728cfbf3e22352eb8a43a58bfef271551779af9eb96ddf9b510df2bcdf7fa77ed01ad65c0368feea5e11704d1fd4fb38316d6fb8623e911120e
-28 1 39 \\x10bd5d7f2271ce08682640a48b2f02cbec650a924c930273e3d9208c1054926c43e153cd0ee6c760a387d2db5dfc7dcf74842e0c8d0fa8d659a9cf8c34266c0e
-29 1 117 \\x5c5cdf0442b830a88b791d7d3bc5bdf3faefaf7c77254694f199c4d96667182b88301e1052ad192412f620b217d7707253059619a2f913c5e3e655bae2bb8204
-30 1 90 \\x5712a01c7a884f62079b9e9413f4d92be1ed5cc59734441c16f9368536734e70ea95ccba26351dbc323cafb422a502ac75dee43af5b05a29ade0736c854b4d03
-31 1 17 \\x89e5d9e42dd1cf34c89d5e59208261e36c9870f6c2275d8d5fcb9d6406e1f025bd9ada80f015cc8956a4c8380c1fabeefd7acd03cb11fe04a0527d4ae83f9409
-32 1 45 \\x1fff5e80ed35ab3be0ec847ed1877a13d7c55bb0754b75d349890e8fe65a42159ac3011cfce31898705d1ca46a07c2ec49b767773fa4160f51ce7418c6d2df0a
-33 1 29 \\x144386e56de58b0f642e111ed0e6c7291867c2aaabd402d4a58fe7967f2cff65700b01bfd585a74b933c0d2668554fe86b585eca051a599d83f5cc6d24f68c06
-34 1 135 \\xab080de6ded678c5ea68c4a6c7b0cf9991028e83930700a7ee68e4c30fee7392d57cf00730ce0a8a9b2d490b459f51335563d57987014ddaefdf3b85a0bd9302
-35 1 253 \\x653b45587d40882284edebca182a2592c941fa650ca8a42abd157209afbb2573160089446c70e0e709af8fd34cab87569d494feed67191bc43f3e37c45d43d09
-36 1 54 \\x79d2d608edc35733dda12afb098ac89105049e48e3373365fd70a1258c485af11489862a662450c22dc4682b0b7fa362eb12adb3b845140d574e57b92392450e
-37 1 335 \\xd6e31a7480a782c6b6b7d178733312fa7459663db31a0f8b7b1e6d121d484b8e6d0669c74b5f8df604bb96105b6646d0cd44600c8a86e947af84a77f333b6b01
-38 1 265 \\x4d379f82d0396f0d20742154c661611b65e9c99ee11481763b87a21d21c25500508f33abb0c895f9ca840798e8d067fca6d28abdf9a23880bb22a50269ae540c
-39 1 187 \\x11a662ca85bbba8164e46bb2484381e01d6d53623aeab5e5d46833f53fc01bb401e2b86aa68516fc40064e34ea375a80785386638b73357a6ccdb1bf82c2ac04
-40 1 72 \\xeb09a54178bedf48e02e0d06c6fe3fa48ed5863396e98e7645dc39aa8846492a12f6a78a72bb05dc2bb4ef79fb0a80e2fd763c8015f2291ac483865376e59b04
-41 1 371 \\xabe7d60294eb4bcf6037ac7176b478a99638c1088046213c3dfca624125ef616c3daef8b93ee98ca513b67af72326c99ce979763c16c2f3d6f5844663ae5e707
-42 1 276 \\x4fbbfabc1735cadc928a322916a25697cc9efc10c8cde2f84f0a519fed32e706f70da050b2e9aeeb7ea743ea3d937ad6c58c9becfee3a37dee2bc190057d4e04
-43 1 345 \\x5cea2b3d73be4a19db12fbf2f61b36f0895e5c8356f8e8eef4cb5bf54c25a35018379d277eca1590d2699acc43b63920bf5097fdedd07f590afd441cc9153800
-44 1 40 \\xfcb2b88bb11326207e0d1773ed029b8a32c083875949e97fbefa5f7c02d41f203669aacfbf59e913238c5c7d4fea91970bd6327ec9ac56d5199c2a6180c51e0c
-45 1 19 \\xbc3f874325ad7c07e0b4ce8761cf2dfa704a242d8471a3f886d9c75cb5a52da6ea4234e072cb3e2250aedd65efb0af46dad11fc93f89626ec5447ea4b8bbf201
-46 1 233 \\x0f486412cb889e5f7d9e09bc16e5ddec02d013c980dd45bb7c32e8a85819e490bf0147c89760d70ce25efee1649e597ce9fa0e4bf1704848b75b641cb1c71a01
-47 1 411 \\x234fe3504e0d6805c6be84a2ca32d1b2be1a8daee92bd24aae8663dcb1f525f38586a0c494b7ceef60618b9a87fada9902c9c8fef0b8593a1d6d90798d43cf02
-48 1 354 \\xccfd1f20d151d263e98e75d795a6ee599a0fbe8a8021f13a48ea2e15746316bda3957138d9cd8954cfbad99b5ec865971b91ea9ed738652cfd530e3db4902003
-49 1 42 \\x24087268c6480f6af1b8e67801dd2e35f3ceeeef87894d677a37ca31954727c831e89babfc57202db15673a084761aa6fa8bc8d04cd2b3a1313bd21e771dc308
-50 1 141 \\x3ad5a936b61818c0368d4a68218748188e54763cf4e13467d74f73d69f897ecf3fa8e0886ff120c544ae40776e4af2e8d5f03a3d61db9f8c903b82dd497f3c0e
-51 1 225 \\x32f03a3bfcb55e741862892f123fa087356c04c53aa6384f1fc55b3545a5f77e36b8836e34d4bc474e0a1cbd079ac0f81d41db722b8743f11574b51bf678ff04
-52 1 397 \\x34e21b268bd017f6b751bddc44f1225d3cd9c2b80032e21c469d34302dea6abc08b3972d6fdca0be1c6ece33993b319b30bca3df4121dee3dcc53a958776d908
-53 1 363 \\x396a4f470ef559c64ca534ab6099f2f38d875f285ed2d363706ac0afe9c123fa1152301351e05673a2f39a405577bfe24c3516602a53f9f6fef4dcc7b7e8ed04
-54 1 358 \\x75dfad066ae67835be5c19ea480a50f76e47b142f6d47b5f853df525f38dfeed881ca3d90fe4662232f6500cdf97e472892faac4962c2adc6bbe7908a865890f
-55 1 240 \\xc06ba438b4fb8b4283acba0833f25142d57c9a5ed0d82d98835fbd134003c9fd567fb7fff1c968c993ace05deb132b357e0d16b3dfdda02b7cc0d508cfa9de0d
-56 1 15 \\x82610fc607b2ff5445a51868c1d857ab9ed2c378ee828c81b118252f62fe5b282225b882d70c6f816acd42b1dbd34077ea1966d0d89203c916ce11f637a94f06
-57 1 266 \\x05c7308eec8dd313685f44d47edfe1122e6a50ad344bfed9cb2e817fd9544e360b8f9e9e0f4dfd7d25afc05e747df48aa76a7f4b0bc7c501fd9c459dda324c07
-58 1 78 \\x85fbcd490cc7d923820ce09701cf7f411578b52da8f957b58c66c0a82ee877ba2115be7440879ac22eb5177bd983624dfd541e8f79e43de5d57490a52ea36304
-59 1 262 \\xdffbcf571efaee20c23196525922e3460920b569725582157cf8edc6a7a17f766dd0851abb4787c8687dbcfe3bcc04aa4d9aa2014176d5a62c083b6ac2ccc10f
-60 1 249 \\x35a2ad81f650263d90b69179f69fd4704050e4853837016210600776097e22d37f2453c4455c021159d42f2177a284c5f572253022f87993bd8dd052e95e9103
-61 1 367 \\xa238e7f4cf2e3a68f000eaabfab3e9f813fc57211520de90bd1969f0fc6e1299e3beace220d5fb0399c6ecd28c63da535e4f8e273220a0bb6179067492e51e09
-62 1 26 \\x8f87660ccb8025fd6f62c9d53f50465847eb00148185cf9de86e12833e211f1a36ebed053c13fe77c3a25cf8a84fc61f3077241cfe296131933e65c1299a9600
-63 1 50 \\xbd613952c44e0b1f952514fc472b8b424444304b79f46dbfe9cc401c548498ac55e3f10400e645f3106dbfa55f9aa6dc6482379a420e88dd47e7d40cfac88708
-64 1 314 \\x852ce26a26c3083ad05277eb31059bed727966e272ee0bfa2309738e58476cccd2e541d9759f91b55568ed0066cecdae01ea9707f5579fc8e6965721086b510e
-65 1 413 \\x37b5a9dabc03756af7129f10912fbccb91e45b240573b1d3fb100866bf9e1aee4f611a8c5d0c6153b681d4bbc69f3f6dd13d1026719c23f9f5d4a06f26a6ea0c
-66 1 91 \\xb33d9e96e377dc72c04765f75b4f3e81c441861fb72a0771f4b783c22b3f9a04f76d1f21dfb908b07d4249dad19fa5688d4efa0b8dcf11a22678e4adf7f4840d
-67 1 110 \\x0903c3ef0912c166c7d4adbf40514daf14a4c345bb5409946dc4b2612cffc9500a4b45d47af30df88900dd78f21bb06e7617653b527ef5980c3ff5ddf4fba103
-68 1 294 \\x7fc648c79c2cad6f241ebeae67db2ecc81c85e3000b324c343dff43e3877ce6324dfb46e929a9213a8d9bafe61ad810173255d820f1d83ef7bb6b2738e93f90d
-69 1 112 \\xd60cd115674f65072477c2a0136aa999991d6a5318fd3a95322e91728b3bc8d85ba7cc41af5275d57665aca4cc19f2c477142aae9d4212349e7b36b1f1fe5305
-70 1 122 \\xe7ce78211a6a98df8563962943ca2aa210fb0dce200748e7c5ec0810618f57817cca8489fd7fe811698953099add00c02648fd3975eb4aa84168d5827c272500
-71 1 260 \\x6adb94b8a699cc99212aadb5bde16d55d30cf2f253e47264cfc236034735252a0625229277a8951694fb43cc9242022503e79352f8c5dc321937aca970462401
-72 1 43 \\xc9d00d45339c576bb1d9fbca3ec5f94f7796480c74bde85fba17d59db60ca3f604c2bb658069e59ee365605a3d8664430f17a12b2bfb15953980174249d56e0c
-73 1 161 \\x0ee6250ddde4cb8b003b6011851c930dc349c4b68ea5a6aa17d4098c31f2677d98be0d6eeed60e54fdab561e3252de3133b4c8381ad2c0c90fd5bec8a9e1ea07
-74 1 20 \\xd7d288a168a3e0af147c684419331a3343df456b7690afdf6c576d5464bb9f5236b91c2480d5451c50ea0853377fbea59f5c93eaa3a0d2c3b66129b1fbbf6202
-75 1 293 \\xa0f173bf51aaface3c0c841e7d2d5747efc541c783143b5f4a75ef8fb4f409f45e5bf7af3f384a45c484399f9875221b42210413ea6d6b7fb85b9838e9360b08
-76 1 8 \\x383836ccbf2a43d8f1f69c824bc0de6982a909c2700b176add93bdc4c83bb7797f02d455ca441a35f6a94c8d45043b334b3dec075d23d5a88ab5e7dc59278e0a
-77 1 322 \\xd8d581c64c21adf3fd726b79638d9e49b32d289e1bacf136f4b6b0dfe5dadf7692185de88244ee1689382a102bcb5ff3f484443a4a0b3d3ff15ca7d2d5ae5b0a
-78 1 395 \\xd96f74c18ad03be5f7aa7dbd40556e0f204a9698a2aebe10a9b209c6fecbc946e6b6aa97a301518cf44406509edb88ba95df3dd11886d76ce6456b204f1a830a
-79 1 208 \\xce47b593a72a751efda42d79958bcdb1987456e353d5571b209b3c542a428dc338ea5852016e51aa8501b9bb0dd3d585d7e3a7b9d169b2a96468b37d043a0f0f
-80 1 142 \\x46e00569164e0cf4e88befa5cfbf65af6c269d6514707db13d63b31492f33d1a5c0e8491a7d087e18b9c000a819a2e3cda0f2635b7732e664c967c4d6a5e5308
-81 1 204 \\xbec4276b3e4b089d9657cdeab7be7e1b4281741d4c84737636593393dd95b11e1b21f9a8e6c1e1608fa9963123172491f311fd469d7b500e26476ff441c38309
-82 1 390 \\x101389a92789fc0166866fa6fd57640ba4f8bdbacb7c3c4374d84050751fc36be5c4945393ae88efe7f7b3fa4386f4b1159e3dc9bf96a534abae5c8d4f027c07
-83 1 327 \\x8d0987fd5dd45e4e927861d2e320ea3d3af893ad2a377f4952a4898c1a6e8a8798909b47fa7f22f5c4cd390d25b0912698f9d6ac083fdedb1af58233dbb92e0b
-84 1 377 \\xce36d63786650dab6fa447814e2a174f3fc637c3a00f9e88ffb9a86b238a725aec71c718c77f1eb6e6ea0f4b3e57fe1896d329fa1a08e33d2e50d31d6ee0ba09
-85 1 370 \\x63ad5591c27c7570ea223d6ec78ffc67b07e95e2e5b899891214f4a36caa0355718b619c6e0562081a08d115a907127d2aa078997ef0bbd3abcf67096b55d504
-86 1 63 \\xf9c3092a28bb3c7b794a710b7ea84f810176e0a3cb30e36f4c1fde46eef7d7e25bf823ba3ddb9207d9ccf1f51d31354af673d2a84e77c007f26bda741589ab03
-87 1 263 \\x57c5ba6deafd5821535333af433c4af622c2167411b33b82eb9bd226ae8a8adc3526b429cef59b118a9b4657f45d74e24b15374a07a451f11c6a544a15e2d004
-88 1 120 \\x207098a349005dd5e4c51df9c54b665c1d42ee2c54c821ce31ad9be50780e3f4a3d9282c893c846923e119fc57121a101beaa2dde56599a4cf712d1773843c0c
-89 1 213 \\xc220b63b5c714aca4c63b9d4cff8d576627e76a2399ed76b441e8a887939a62d3b77c20ca6d86153d623b02ee88c1d3cf12e0b463bf1296ae4e400216a42420f
-90 1 124 \\x6387e2bf85a0dccb1f0df7050248a8cd6741464c4ffa9ba0bc8a25133448153513e100d65c020ca027b1528dbc8ff01efa2b20c3a9d578aa89c44294cb8d2f05
-91 1 393 \\x29b9df06d74931f7c3365748f442e67da66e4be2db55c7c01cac3144192a29b2b2707409abeb92f74c65a4568b5838e3606e0d4b5094ce7042fbe8750be09201
-92 1 48 \\x709d68b40a2b3d976b481b1ac9469aaf6452ca49cafdd978530b8914fd40127cb79b58f1d0209ef9bc777706846de6b28233d43b6a3e54435b0d1b0335b4790f
-93 1 23 \\x198e770040545b08e23282b584923ed626f74f475e14d9e508619e9c8bf6b4a36b2e854690311fd26229bad23fce48480f85eff7534628f1504dc82c5e5fa205
-94 1 49 \\x45286ac9f9c457bd0dc7c50d94508814b42739b1b0be2533160f52804abc368c26b095b1a0d9a37ef31c37922cd50ca4e536452e305bfe64fa57a8be86ae730f
-95 1 116 \\xf52ecb60b47c110d0ab80bc1ad95563e5c7ebbcedd50e311952bdfa0596bce0e1eb6c9272329719bee663bd82abf0c5040b3d2b4a0ed8aa08efd16b58420d103
-96 1 73 \\x26af7430ac6312408ccdd4a0660b7bddb2d7d313c2900bcadf009c7e74358a7764901ef202875923a28daf0f5868d6ddbbc6e2e1513ac3ce16b1af4ef055eb06
-97 1 220 \\x709dbc5721ce613f9e2de911441877b330114b65ba6295d90f76548362f06ae5232c06f5885cb9767a3d04db433d1859a3bd15aab4fc8edb77af7bc8acdb7c09
-98 1 418 \\x4368ea86aab272a019bc52b51a04a80eefff9a26649023bc74c1255026a81a8ccd282e290590c885b0bc4b38c710d14cb98f59fd1b7a665497a08fc8a9d30a06
-99 1 297 \\x78a20fffbc662ea2902853e41a6ceedeff0415af035f2b5a8ced4590bf9c0784126c7f47f0bfdeaad83fbe3027776c90a0aa5560ccdbd10e911e664c981e7f04
-100 1 317 \\xaef962f85b29f2c84b0662f0a4d57ca9795dad4dacb23771a12de05f083e9c4d246a607fbf05e4e999770220e5542836cd5c0d53ffef937e81ecb1c22e81500d
-101 1 193 \\x0039735829bc2a4496cfa0987ca1432579f0caa2ff3edb85dc65590e0ab8075df8c3fa60573ecda907fb013f987f63112d90205db2e159adc48e76e1e1907f0d
-102 1 299 \\x2f2743acd47956a28481c17293b281438de36f8a9b2e7dfbaaa9f1f970cd22316180309ce9dc91b8cb589d8480b86e22a49cbd5ba3a9edde47297f3c7abd080a
-103 1 419 \\x4b2b7fc4d05505e448611f4604ed9a6221385d562fd2b7caffe73f7787da91afb183b8475e3244f20eb4167240a07919e60a87330365dc36bcf0ca538ec9e401
-104 1 32 \\xcf691f050e712e433832f79b316b881d9841a88571d75bdbb308d9c7ca3f4d2f33b00f619acfb14cd532900015b9a0825a344064fb11e0db96ad9fb4fe420d03
-105 1 33 \\x08910167e0b87026ed89ac2aee3b7d97a815737daa81c90f0432f4cf5cff58d0f1da3ad3e75132c5a65483124e1f5d8767eb84dadc474a840a10bf025b35c106
-106 1 348 \\x3158d4c8c0ab55e4791b2155b17fe7ec4aa1ee5f0bd861d5cfde3bf89dc77766590337bbefa07d1ced508bd247893177e6bdd30a46529d78165e473b8f5f530c
-107 1 88 \\xabcd55bdea3ea5f5f1cc96c9659d7fa3667b06242d8b4fda1ba530c26d6276d1439e19285e6288c4be169053dc00a8fdbb9ef063faf602d391e8485dac76b307
-108 1 332 \\xe24782bddf64527fdab51f0eda61a816d24d0d8d49687cbc9bb9ce38025beb03ab094e94da9fc764fa49e4aac192af59467cc777022540e71c6ca4afe39c840b
-109 1 380 \\xbb1dcb2f5b0c8a2106d4e9760ca35a01a8fc0feae4c056b445d5755de93660686139788392acdc3c6447e9a4355203b6535132a3ccb55f1ef5d634738bb10702
-110 1 219 \\x7e8462ebd2e450bfff04252f3c32b356d0c35e21ff256f383e9ff71cf024c9f08af2116eafb79a187038300dbf98a4f3d5e492fd36dc92edbb2983d02332950d
-111 1 417 \\x26250e5c5e2934ad451f9fd9e8d561c93c817b36560d5bac763af8321e3061a6ee1dd58d9815dc626a43ebf0e37e0f28281ca28e2b4d7bc3c4c38bf71ed54009
-112 1 368 \\x1a0e9f4ec53eb79eeb3d8fba26a28f45d015274d82dd36c1ac0fa9c1ca4de759b07e1d8f8a84bc73edb235c93cc063e5901b8474b3a68bc67d05f3c252d61b0d
-113 1 162 \\xd22d609996b36814f6c799d71767fb6b17922ed04d42fb7dcb4fc67291588f7b41b9e351e1c7e35ff368afc715a3c529a3f16e88a44442f03aedc47289e9ba0a
-114 1 313 \\x20e33611621ac0678b3da4746ab71a94e7c2c77740383cb976c0a3efdb8df9b465be96f721560f784dcf67cbd8ed37957801dfa6d45592cb128566734cb9a004
-115 1 361 \\x9086d2df656441ce8e10aa38f9bbd2fd11ab69d57f68e9fd114817af294aa68422fb68745c2b233a3b9d805343dc85a5a55e274b7e81d6fac39c7f294a432507
-116 1 4 \\x949f45d7f23460d5e2a96d519fb8a1523c2a9444488803f02224640ac1039fe52cc4dcd896f9ebe6a11b81be2b57f965e51c3484af4496806a779674f9b2840a
-117 1 199 \\x3f5d91003544b6653fb2023dac38406f35da72af3cde1c8806b863a5f91f977e03c33bec8efd4e2c0a8ab9e27490860cb449f8f3a170b48c3474f9b70cb4420a
-118 1 408 \\x3d93ce8a508d501750af6661542a71cba460e09c53a4cc7f518f2d1308de4a556b23574bed58674604a40e5800a72a581b3f63f4be753bdcf74eff8485ae0805
-119 1 197 \\x37cd27dc99931f49afe6f1436b4b26c06746fcdbcdf663378f9ccd32b3f1b57037ffd656fd2cb887fdbedb62a7fb2e248de22a74f6b1be5483c14f9499bf200f
-120 1 201 \\x98061ada974f169228e93a8cb31a6233ad85576c89c7ec2bada7193fed883acee6093add2beebf682e78e2776e4a825748e46a9d0f2f9141dd5489046adc7d09
-121 1 298 \\xaecc357403cb611f36d0e72a00668a0fef10bbe35d19bb630b809a1044558a8da2f1dde11c5cee086e981b905e9cf9d373aa4dcb60e5e23957fab392884dc90e
-122 1 283 \\x6bb5232fdfeb6f6682f0397a7a41967ef50e3f0b1fdead1b1d0ec25f3897bde9ead778a1886754fa183f037b44e0e15b079a28df5c7b5d116f5919f20fecdc01
-123 1 254 \\x849d1229fe0ec360350454fea1f41a9760a7ae84e344e74b92702688e64afbe0fa6fa0d3e5da72fe3a8b8ba92400a83f96bf6d27e6a59555aef66cdbc9295e00
-124 1 205 \\x28a351039a52dd41246f6e73250d59981c8dc16fde257a66cc6a2f0e5df5af79ab4e551816fca57c434aff54f2021f856969db7d28346ade15b982c6564fa505
-125 1 60 \\xb1e9ea30218a43d9a1741d8f15174e93ce4d228c38523aeba25a8290e52fd5fa53c170fba8b5db7254be78ecd4132234b76f4d3e16edb9a60c9efcc369ae420b
-126 1 149 \\x655ce9c2d493ad41d7937676eb8d46b7810ff828cd2ed5320abaf26a109abcd7e2089e6f0da5de0df9e8bfd8fdc25798206857bdc83a1a3bf1b70d2ce9b05a0d
-127 1 273 \\xaff1c4065b155928496a052e0e28d149e905c12f2a57aa353f46bd69ed33eaf926a9cc0a74b17b6bb8e5a89bcbd41bb6e064e70c636f487266eb4c5bbc516e00
-128 1 248 \\x93607ea8eba12a52761af178241c838ed2f4c408a11b64cafc5e15558db2ac3e7e00c61d32c01c0eca56571a397bd216c62928349a723b5558b1c0b3e0da460c
-129 1 406 \\xe79f2a8304bed3490e180e0e2f6ce1636569ee88c457d9d7dd0f7cd93ebd96c1230e961df4ac78234e518e1d0a3a7aadd8cc6a5c8ef98b813d8353bccd7a340b
-130 1 278 \\x5910533ad0edc6911c4d19d1f95c0f5d1eddb188a19431082957a439cfbe71bc718f036b28f59f76638aba32e1be168a4dd0aac5d676e8655849fee7ffe0a808
-131 1 226 \\xd905c75956b9e02f4dd6c205b34acbd230c70f4059e286f17249f589b297cebc3ab03de62e161c00e7506eceb2a60209fa1b9916879aad5cccf9fdff806a420e
-132 1 326 \\xd17ac6033a7ba34f1fc36ad236cb3837071380d4a6a6b154584af89aa22e05ca114aab17a1085992a53f44b133a94e01a07c8a2b19c5b71a4dd029e0baaf2802
-133 1 330 \\x6d74f5e262ba01d84895b08ae061737c3729db5bb89892436f1c4f0a1f0b02a0ec82cb809c219c9b8a2fb75f1b550fc1e77e3e28096695f019e39125100ae900
-134 1 146 \\x3b567ef98f70b664813a030417da1a517ccba503eea674fc5af344246450cdac0b7303bd40ed4300d07ce7ee1373d63fb81963eb6aa8e71875293dfd02031000
-135 1 168 \\x107c592fc15ec4a4949213ae8c78ac6b98c91f6f0b2ab4a50a437e48634ed073236ada48ce8c7775cb0969731803e5e9947f11f39f883d4355ea743da12d5601
-136 1 36 \\xc709dfa063719ab3021985f8745f065c69409cf70d47d8d5ffd8e6ce1d05dae9426fab0b9afc311728e7d0c1b5e8ed356eb25b7cd09b666f16faf0a30ecf6d0d
-137 1 59 \\xf9b108e93c96031865716ce1222d5cee69c230eb298b21cdf29ba5915b00f00ba4da3605136922132744a621fc194fd36e3453ece4d32317824036d8425c8501
-138 1 318 \\xb8af6c3f4bd594697cccad83e536ba2d08be6cd0d23a463ad44b164c8564c0f69681be15c0444faf7fd418bc6da00a2609771636f6a0779427ac0d8e57635a08
-139 1 52 \\x333125ba2c0ff3db922d1f4688fe38f581043c353d1505c21c5ba3492aa51112f43695f594a009205a106ddf51d0f3530fbe1b1343a51313dae2ee8c9bb3490e
-140 1 399 \\x7d28f76753832dff819e51db348e843b8100ee3ad2b3c15b183771992e1e0998c19837f68793804f36cc1a42d1bfad580058196126f5ad6a3631593ddd8f760f
-141 1 156 \\xfb0b4e8e9fdf7f8d87ff60a706f407de5a753e5c74659c367d59964172aedb76b68578531fe5ed85aa9e6ed064d5876d77561a523b4fce7d57b80818ac6ad60f
-142 1 172 \\x556318f030078754132ce040c96800ced844bf8d6306cf76ff61a0065880e886b2c7ca098a098c51f6e8bd831c583d814896851e05d96bc34a3c877956e43f09
-143 1 331 \\x0c63cb1c67a11a80451a1c2e00dc5574a9767cab38442c601e051f868fb158e39d6b38dbb230aac5f241d8fa1a2ceaa3adb2e4671d759d9a58264cc70d7dc90a
-144 1 401 \\x300eac0c2041199a65c8bd88b4691cb26048beb9088ecd863609f3b4df234317e700a3d3afcb82c0d3adff08aad11b090ff2225d0eb1f6905560918207bec905
-145 1 111 \\xf914b31b1b8cc61833915c4ed8954fb62f9555163d5b57abc424f97a346f63559edd4435171652580802818c1035e2b27c34171c417dae600f28a551a4faa202
-146 1 228 \\x45f24e13b8179a3c6bfa0b9029878e289431e691d0082d72fc985e89588b861786c109a2b882a7b1b612550418a5be621ecdfe3e912f5de912fa626ba4ee6b04
-147 1 290 \\xdece6a3c204d7699c6698ff915dd4ca5b2e684f01d356bb868973f22d82495a137456472c001748bd2bc7a120c22dfc939eb8a9c0d0bff3171183bdaefe70101
-148 1 154 \\xf3d6e8d5f841749616f4c19325b07d1f7cb16ee1d3bdc0e9863d2ada5fa9260d2ddf25a0c408dd06d169da27f6dc6bff384e04128e680a91db278ad9f7a49a07
-149 1 71 \\x06e20dcf4fd57370c0effe9ac8e431ea4e89d1b119f6589d8d090ee1d4431c06f4acda6381adca562c07bdde7ac79dececc87a31286107297dc3cea228021e0f
-150 1 106 \\xade6c872b1e8febe12be5258f6dd0ef9a21d58c6c7584c30c30681973c0c6bc58ded46e24d422d7d44854ecf99372a8a692cde25773020d933ea2dc95e8c8d05
-151 1 288 \\xc4a5dca834c84639e9446a3b1cb4bcbe4b3b99c37da0a300bff7cc49288659bd25ea5151838349451b9b7da6b0016d5274010f86df2ffd3f6aaa1beea25afb03
-152 1 252 \\x42c45793596a03e34b3b62c2fda3919a8a3aaafc5c05b023a14e5d3c099c3237ff22732ef4d1f62ebcc090277882f441fe30a3ffafcad858fa35855bb0877c00
-153 1 323 \\xdd2b93dcaa4b1a01ff74ee0f48da0873183a3a1b3349e299620a29ab540c9f8177c765d830d404b4f04ff6dde54e6b4ae8f224a892ca7b1918be8081da807709
-154 1 125 \\xe0a2acaae6110fa2dd8454c4ba0f9470580e2ea0dc5f66a03b064089acb3707b38ff6a197fa1d3004cbff2de885d30358aa0bdabc69cafabe50ee29b9672b300
-155 1 282 \\xbca9fdc28e5149a08f9b5ce8ade869197305c714c4eaf4be3d7e026c3d0c41143c978ebe8decea5a32e7e970f1a3e40609dfef8fbb55408543937861646ba503
-156 1 143 \\xc9351e9c26f41e959a2a6cd24705e11c5213fb216b30683df5de7c62a9f65f783bf047904d5814323cef491f044cdefec7130ea386808f8de2434aad667bd708
-157 1 291 \\xccd6765995551b4c6ef3c6c91293caa405fe20842e136532c775eac0987d619f91ff0caf5bcf093c2d013ab5f7dd70aeb6709f57f697b68a85a2ca6b5b33aa06
-158 1 28 \\x1fe39b15ac0f811d4118c08656a81b6fc9d6165277744d163d2c3680bbc1e9b844129615124c0365c2ac9d18ac097a91ec41f75fefb4b929c650fe1d0a1b1606
-159 1 131 \\x3612cf044ddd0c57406c46a78f933b3a1107e7fff6f23711bac3f115cc63855d51bd45d6f5aeeadc7ca76171046fd37391beeab708c75d895c544ed96e6d4609
-160 1 296 \\x6693209a98c5b52c3bb5100d836dd26b005ef45644e392da333d5f185ca30fb499d80788a6ea6da54e6bb4ab1090dd557170db1c83dfeef95d0378be995bc703
-161 1 87 \\xb5b51227ab7fed53e92621efabc9a4b560c1493f9dc56277c8708975506395b53b4d6e28bffdd141bf36e4c6e404bf773df96a62a41ac6072e648862318e4a00
-162 1 275 \\x5540a7da6a1923354ba0230a850a12c345cee8941e4b85015a236f3646912a9ea1bb91db4902d48483553077cc17f5f7497b1c5dd92ba8f80b6397d31bfaa007
-163 1 280 \\x15e9a481e3e0388d3c9739903252b425e1e731081e9bf07a534264e06062446cd8e521b720c8110ad97d4ff4c63bfdb1920190a1c364eb2128cdc62048d0a703
-164 1 415 \\x9d4709f18c81efc17507e9c64300e4b19264d9055617bde86530ecf78b8f63338db0e3f441746db3ee18f8b4b31d7257a05d719f96d7bc0e61f24138fa3c3200
-165 1 325 \\x1fc62b9ad83813a218a170c8b00b0d125fec8fd2640fdebd6a2bc256aec78561188d76ca1d09753252861b6143c48a951c575728809d25392bb28ee88bd88000
-166 1 79 \\x0ec807196ef312e126366f06a7db60b860df9da9a6144cb4d043e64afaaa281e6263df36b56182f0fdbc3830f8ff9d328fb4a6eb6357058e756535ea7dd96a03
-167 1 85 \\x838925cc671f348267395f664b06a505c5b6ddad5476c60dcb588d8547d4255ac6c5eb6f1adbc16ef55058c8eec3bab1e2901d4c39810272011fd9636e6cf00f
-168 1 217 \\x990bb675a278eed58e141bd278b08936bcc3c6f1260bc1f68b76b58466f213ae9b6e25124bc28f4b2c850a5f13fd362c9aba803f89392205315fb2f35d5f2d0d
-169 1 342 \\xfa1d20c0f2b7e815a468761146e344a6dcc5d3a4322c0a4ac742a7e532909f611e7b4118dfab3b911ef2199d5a90b506f294bb9a8dcdf4e5ee9c1acef51cc30d
-170 1 386 \\x7d733548f8754599e80301ced6f597b831c75923e6f59c6798f3bf66d1cd4ef4782167b655bd3aab3ab9c216fa608b89ba1d062d35d736bb0d3413ffb8c7870c
-171 1 100 \\xaa427d1c56d7427db72f4008fba4f8e4c001562babddd2f4785aa239eecc0ac55515685a7354525001df9ed21a2358db94dbda44f7930f4ce4beb72cb5b7ed09
-172 1 22 \\x13b6ad60ebc6443973bbf2f47e4ca606fb88c9f16fb92c8a48882a648c5da3d33205eb4ba5f9bde26e97d5ea064ce2a3e3edb9dc7a48b189279fda191d167709
-173 1 420 \\xff343de1a44c7947f628fb36c8af11ff5acaff0a53ce8e09fbde621b95176d0462405a4493acb4730c33da22842a6e3e693a55eb8f085300f3fa2b28d765070a
-174 1 292 \\x75636c06d81bc43b7d2e0a7f3e88344f976b3b7d69f1cc13caa2e3e6ba529bf0b12dedb345fa3696b04cb59f8d9e0453c4a6741146ad107bb915a15502c7ce04
-175 1 365 \\x8a4f63e55adcd5ef21c06ea364c28c4baa663a11500ed09fee1ed02b444a9386dd4d1c329268758475db0f739a1ae12c905a83ababfe63fab4e8dab5a3f4ab0e
-176 1 108 \\xd467c19a2916bfd5e7d56a628773bd32b8a05d659f87c90b677784aeb2a1e7176c62ae2a2abcd3aca0694cdaaf38c43a4b80d07cb2797f0f25b4411ca5848f0b
-177 1 236 \\x72a862dbb5f2b68773306c47ce1bc44af8dab22e957ed8e9ea353d6e2f2ff767442a24a4e44add68aa398391e97bc953c8442e07e2bcef0b13ebe02a73c92d09
-178 1 180 \\x417e96333289ba7899a0ad80ad4c049643dccf54c87c130d3988819403ca319daebfb79d45c3b4ec743df5fcdebc10ab31f7ad4789cdd10ac73440fb71d2d60b
-179 1 355 \\xd4ba7431cbb3419b3ee2652e0e7def4c61308bc8bebadef084d4604fb350a2adb0aec20e0c7ea0e58692a5566fc8e3c2178508d1d96856c054fcafd0befc400b
-180 1 339 \\xbb4410cd61c9d7614ff50e8184a3e990323e6557222294fb12f93a2b94ea24570b836284f065d612f1716081fa13549c8ef33caa179a1abf9dd72990c897c307
-181 1 369 \\x9512fcf77c985c170f8f3a5006ee1836975df622bf7af7d5cd938221f40a74dc58ac53175dbce9ea8db8f9a0b5bd8260f8fde5be7b2e7f0f9f7265cd41ab880a
-182 1 316 \\xb88b4cccce9367538a6fd538795c9588649d9ace353550b003c8496f6c6eb47cca2f41627bdaccdc5cf2c92a9c2b71ae187618a96f6d08816272c1693ca63c0f
-183 1 396 \\xae394293f8056fcdb634a14b4a235b935f7996556065a2a972c5fa6afd86fe7f8ee05d5ee243809bf1ce9cd69fecae1c29dfa7ab7f075aedb579effec4115f0f
-184 1 166 \\x090462c268850f19c69000aea11a5eef05a52ff38aa04d9a51119ab61ded6d83451086c4471f71b0db56f690a815b703dfa6e1f4d8e40f7a2eea9af026470503
-185 1 315 \\x95749c59f6f54256e7816305d9b214f65447973a31b1076b149f434f6a2b8435fa66ae4b793ec28b7e53c43b6bc00fee4f082ff9dca45f9c2a5682bc052aca0c
-186 1 242 \\xf6ae9a584a4c1a580f12e3eb2dcaa323cc87baf0f08cf3494264c0cc1a3eb9a017c4ffdaf7270eb4a39a515f8dee3853fc50a84796dd9a9383b1522739eb8701
-187 1 114 \\xd79f16573fe46858aaf52084b868118ccd51f451504f6f5901aa7091932e381ceb7df42eeb513c605275c7b1994e8923e8a43d6697e7d0557e2190ff7328820b
-188 1 243 \\xa18060096f7b155c5ef85b334a40f1c078441eee66f02ac3753d95d76008feb0d7dcf41082c0c1d28184833109e0ff1516bc71ba9b56b4877494b6044ca1da0b
-189 1 207 \\x83fcabb13f10128d471eb7749a6f717fc5b083e469f5729df2eaf0e83068429c2946f5d8e3e3bdf2ae0dc2e6fb8ead859d339b043b31491a9f2b9a406c235008
-190 1 121 \\xa67aacca8886dc85215779990bf60928484053c28fbc14259be0fe7541ded7fd95cbd87ba7d43be3769e5eb64abf6b8006e5b139d545d17d5e09c7e2e65e7709
-191 1 177 \\xf5958253f9958409497ec1964e54a73695d8fef2360da05f538544362f23ad7ebc4a1c2fa22221bebe78acc5897f6fc069270ce56cc4e602aeb52bb732b5c708
-192 1 150 \\x67fac3d1bea41f15a24c00b857be4e7085dfa1dd18c37fedd79331c72bf6e802de7ed40ae9f628fa2697081d250fa76f66eb8968d0fff8819a9f89f663ca8d06
-193 1 148 \\x2cab368dc3035ef4f6b35ee432917da659bd94a3374117b4249a3c70f2ca765e1bc5d06fb4bee5ec5ec07a26b7e52b544cb0d16988483df56d0e42201cdb650a
-194 1 27 \\x83669010b0958bb446d6301ec7b1f080eed7275a1a69837d4924525558293b06d6856c2f744a5c8c52379b4bc28ebe375c2c0d294423d7054bd96150a35b4b0d
-195 1 68 \\x29253be068336248ccdf9bd7844fade5bf90935b2f08e5fc0be74b43d50da8127e453c22ff4f7b94c2ebbcf62c9572ef8c9c52b3912d042b30dce7535a039104
-196 1 216 \\xfc702e1c2f6d838b755c28b1bead30e64cb25846d0798c2b8bb0a7ca61822687ff7afbb63d17e4f4db7085f86f9dc977ec0780cff365c0bdc6224b03be30c10b
-197 1 309 \\x33c79e9cf8e7cb034750213a1e3c1ca62b0d3808bdc090ae52720bc6cff870fa103cc66b0a46aec8cda294d9b119b90c41feef2e137d587529aad2bf380edd01
-198 1 31 \\x6c96dd8b748a9d1f8d526f406e1b58bba0e33e22784c521e3a68cc7f2e0dd16a9b926ca4f5cbf455073d41ff9397befbf417d4f38e874843f728f1f4f692dc0c
-199 1 134 \\x7335288d0800b2b40547ff82bcc29d2dee97a94b4b511f08d5c98b0fb5d43792275f274b6cd1ed5ccd4ed14023573c3c8208239f6fc002e473e026c6a6761d09
-200 1 103 \\x37fd4b29cb3e64f81af1b68be23b897f0cfcda3991c1d88fe0f6f858fa3074fdfd3d11e1047301b76e8d941bb121ad0c5b5edd02a2b2c49a3e15adfa1d4b0e01
-201 1 364 \\x8a57e150209ceb778fabd527a7f24e7d9bcc7fbeb336b4228be10e78477656a53acfe6da267e5be11c6a2d91d875d1a86c177b32fb5e5c93f150663d0695890f
-202 1 196 \\x44ca085e7cf10276dd52f17c74de5628fc58c26cd39a238ff7d4f37661512f14122ae9529420e53a33214552254cbc3fc489b2a84f32f1522d28c61b7297d404
-203 1 311 \\x706d4d8e129f9ba9a8da3c4f5beea9d967bc4785788a2faf64334151718d8c4b4af53c039f64f6b78611fbfca3950ebc595a62e0b703ce6f10d081c829dd340e
-204 1 321 \\x797f2fd129d0147b0589fc054d9aaa7c47fcb8114b6d0dea513daac09188c1591626cb2cd6915a3f1dec21a9ac23ed95d3bbb0a0279e7f82569125dbaa38e90b
-205 1 346 \\x6d5b002f45e21bd8f7c31f87d6d59c402815749210c807d1aa47de59e8be714864cc01e2e264e589c2baf2e96061c9bde8b5a8973553f03828a146f037957608
-206 1 56 \\x9590464f553ca82b99cc368befb8944eb727f4bfe8e6f83e8cfba46abeb38c33b41002767009c33003b9bd1be61da9ca9784a1bc6535d8fa92bc4de0042dfb07
-207 1 191 \\xc86312282adacf43750e8a3d144386c74e73d598bc3a7489453c58e7445fb8144677068cc7e1017480049498dbf8ae8ae4f175d1305d0c6ccd4b820c987a4608
-208 1 67 \\x53e7640b0b33c76d500e75ce224149fc99d39709517ec64d8f43fef55edc4e4a16bb1a4ff19360f63354058be6a61d81cb33137062a57fadf01cedce011ca00a
-209 1 157 \\x2a4911f0b99c60f51d0330ad6a79c77803c88a8c27bdccb9f8f603db8267071e7187e48775569cc50f411e5511e4ec8b9dea877ec39eb5c6a2b9ce533f546309
-210 1 338 \\xe82617ae2fe25d454aea473935f87f7402bab1be8ae13ad76699cab4a5b955c5245e3a707acd109965da68a3ef82f314db8c52ade69f913d8ad7a2113707b901
-211 1 18 \\x80af7cec9655028bd2165c1f92c2d3979afe2f4efa55c6ad57327f8d8f00e8b2b37c3490e91acfc985eb648728a3792e82df5bb8b983aa05f4f42be276369a07
-212 1 174 \\xe83a9f388cd4917a07a835db7d72ac75276ca3bf3ea70169e089a208ee61e1541ed5809d0d42f540da0d16cd9b7886332eea691d11d3305eaccacb01055a050d
-213 1 167 \\xb5c6659396f1ea2bdd742a15a6e0f4b4a0e4c5dc6802b5e3dbaa01c465e80f5d225a6b076ba6b4e0c8cff1847e85817291825cbdb79a31deb6316d934b57d60e
-214 1 312 \\x061ae6dd164d7dbbc2708d73a647c243c222b500ac27beb357000f0088fc6378555c6dead1c9fa75d11a6ac983836670547884ec8290c1d9ee33f5ab3dcc3202
-215 1 416 \\xf679c520a93464cfdf10f166e9051c7f9407627134cf3ce0f9c8ec72221d1d53e43f4489a14c089d22b3d7945c109a25f207b7ac7bf99f39e07907898adaaf05
-216 1 245 \\x52d9cea54bf8ffe976ea7eb2cb086477c517d15884d425f78a17159878195858402b6cca5222921fd2f9fea10a476909634b0447bf4e8eb1ef2f716c6b3cfb0e
-217 1 41 \\x018a817132c432b62fc0a36b5a50314aaff00cf1aa279080fa98675d330269d6c11cc77cca98e35e4ed5888aa83ed7cf2563f05db68f85b1f46debfe41438705
-218 1 136 \\x7a9a2c3a7663e1ee27d4b69a1df31eabb50ca8d82a0547167eafc4db4071c683a60020fa3bc6ff24e4f3eb031cea27c44923721f5184676e154f40ae8772cc0f
-219 1 86 \\x687d3a477e56b0b62aae2d870c0e8156d4f01a06b8e90610c035009f5ac75cd387e28ad279a4c11b18867b1f2c87f3a6108ba71de7fc3c0165f431dbfc0f420a
-220 1 147 \\x97a16c59e8f60206fe76e998aba3f72b47b32fda658882b18a4d0f90c362c6e17c38738b9c9049371c5572b487b363e1617bbb28ef7ef75cb7d8c66c9e929700
-221 1 373 \\x28d2506d7c6f0a05f6706031c5b6e7bcb76a1a05c0ff0f149dc5d1b1b531d84bc5e0c0e7cb6020f74b77192bef593dc00b73a15c8f862ab52da1772d63b9d005
-222 1 304 \\x7d6fdbb62456377a3e3209fdf7255a1fe49527823951681d209f1abd00687bf5300a372f17ddf131dd0074194d6e13742f56eacae6d14dc7e0f17affe1ea4c06
-223 1 6 \\xb078ca2093f5307ab5919b2e3e9bcf7317286ca5337fbe2351a96f8ad3c36c58a42075df141b0e38b8336255f63ead04ab23d6eae42001d4e3986088f1f7e303
-224 1 389 \\x7e057a6f1ca3004affa6efa7116b994b8554e74f160ced85f7fd801ec82b0a5e45b272d64994cc8bbd34a6921672ccf346446ae366cc2670af876f3b6dadec0b
-225 1 176 \\x4403dcd58e88c7a10918f3d08d69f9ffab5784cac1c5996a433780994b26c5ed2b0cf6c451d51af3680cf1112acdec978d9c02257b853a7469d885e0ee58320a
-226 1 407 \\x8085a4e34fab7672e9b6b23156576ad9da70c282bce36c5daaafc61f7518303f37a3ef67b5b7325770d6f7f8a1f5ecc56469d9a9cac113b1d3019cf5eb7ab407
-227 1 384 \\x2116da17a8e4998c4afcc17b1035b08d29d4e419968b6ead199e7bc9009cffa346cf5db30529a01a6446de5cb0575905cf5c59507dbc2322032f82a41037d30e
-228 1 229 \\x95946b9da5fee615c21ef7718f66ea449b1ff1ca764a33f96921de09baddcec5ac79910079dc930f233948b1288c2ab45f027ae5ccbefd8c1264a071a7893009
-229 1 81 \\x9515c879a5d3d2f03a8893d1f222f59a5984b8637c7162c6ba2ddec2b6a8f05e0b3111e24511186ced9f063922c4d57bb39709505a63dfa01133cbba34ee8007
-230 1 3 \\x9ff64fa0179de78ae8ce536e3bf3646c6bfc19bf642f69825c9885cabd2e210ef1869e71d93d1aa18b02492104cc02e2644aef25139bd7198266f7d2c5795a08
-231 1 269 \\x61b0ab5cbb831715ba55088286b6831612dd76457dbaad089657f4951d2dbdd72bd82c63c18cc337554a04328c338bd1159c3d34d18e5472861dc72701c6cf0a
-232 1 404 \\xa7612c6e26b4a7b0f267e62385b82ede0e58bf8b424212db530e2d689a405d4acf1e96247f58cfcce202aa3b2ec09dcf7cd66c6780420e6faffcc562e1cf2701
-233 1 47 \\x96d196bbf7a08c301ddd14cbb56652faef49d6d47af7f81ee23faabe4cbbd5da16e8795fddfc109d4038317a58b1adbbc1653692e36c3ff5b92434f322aa3103
-234 1 155 \\xef83da479f26603ca8cf014bb0e0cbd08eeb63971a2bbeafe93a91aa2f08e03157150f54f6c03002e03d35116a2e9c33a5a4db45ece64d2d86594352a017dc0e
-235 1 362 \\x14709df68e0213cce61c6920707d035f43810ac46db955fc58d9583935cfeb94225b703fb4f0d91d9fc41dc94d4bf03defffa39a932acb92c89ed85a5ce23801
-236 1 200 \\xdfe6d890cfb01d1a5bdf228fbcf289ec3846fdea587600f8ebe5cebaf251c4c93a31da69daf7e5a8cf39173b93137526ae6f7e98d1b37277b10175e0b3df9f06
-237 1 119 \\x06582b09175ae97af470bc2d67e462b64efca105a8d01f4ed0d6217585944b6babeaf952ef887c65d7e47804105737fb69a68e80530061ef10844d550bce6003
-238 1 182 \\xbfe3884bc8a6d551af4f9856f106d0be619c22ba911fde4bf71b85bbe72340deda32b03cf86817b684f59ecab61f993dbbb73ba062a6b7c85f95e098a4190700
-239 1 258 \\x8376eea5ac138ebf02095e6f06bbce2f2c00084e33b9d4562fe623af5ba7b992b9285ad131391c1c145385eee7aa809bf496e87393a4222f157452191110e90d
-240 1 10 \\x216db5ea786b6abe61abeb4908d8a908caed37ac93dfb079dea87db8ecb31ec0e8dedf1c443ef7f914cfdd7de92414b8118c4783d5a4c51a299472f69931900b
-241 1 92 \\xd7dbc5c315d4b61906ea10a9830d42cde3889b8dcb7cf584f127220908d4a2dd3e8074104790f90164d38eb8d7caabe5a4e405eb346cdb4e1d5eba6ce2e6a40b
-242 1 409 \\x3fe3350dc22ee85afcbfd0a372664a84eff421665a401ab308b9e2ca299d8c9f55f3cdc9b93480e2b8d969c523f3eb247e89e19c00495e7c1881e677a41ad804
-243 1 222 \\x14f3e5675862f63cf06c5ae1d10ae85c12a5d074b8e8d4425383b61ad9cc905c309b153b15db36f6c743b58b9cb151792a5f77e3ee304e73b1805ff32adba20e
-244 1 1 \\x470a58bb845bcefbcbaa37642694ef49675b56bfc0ea6abe65b5049def8c2d35083537e453d3dfe8ef8bf49d2f77eef2a721969d254412e41f64784e421f980e
-245 1 301 \\xdec7119db20e52b693fc26d8b4f6fd7ef59b9e835c99efcf0446d67604700619b5bb97abbdacb2c99d4532d37935dfd237668aa3b6eb66730a903e1ba6efbf08
-246 1 232 \\xa21246040b5946fd36727aac170d1ecbb7dfff8236f90195734a6f43e0e7a16c8d463c8618c7783a7312534e6920d4f792a531af0afdbddb95993679cde7df01
-247 1 387 \\x8f4b890af99d339442d7bfb25a87b5d81fb57e18897a07076cf858bf71fd00a77f69b1ecf399c27934c9857dd66b0215c38b3b153376343e7ce8d22d62dfc106
-248 1 164 \\xdeab11025f690a27f56d20c27da5a70c41bbdf460ca6187dd004bf5975b6fb6a4e0a7d1182a1dcc8426d32a4bb8808ba5954512df8e5d81fde46869520a4b704
-249 1 261 \\xfe99b66aa890396144ab2d63a2574e40713349672f630907a531777a4c5a0c66de12fdfe591735e5887d4607938026dbd8b69f106d94208d000a5af5299b2e07
-250 1 257 \\x611a27a9385a13f9e4689d0c56810e14e9806e25b9aa7deac37eebdb1ea6312ef225a31a4b4170c6b355be41a5eb56f2a082d83203bca88fafff4b7872a5ad07
-251 1 239 \\xb9948b3200624cca2b0782a3f0cc3c213e2747a66750f603752f7acb7940c0d1d724424f6456cb684efd0b56c4180291f1bbb29acd499808b7e6bb429bb5fe00
-252 1 34 \\x7db5e739c0d8b5d288e89437fd5ac00aacdf67e1c735e96a2111be74aae541a2a34d2318767fd36a98c6ed9919076099145669918916cd093730881b5d02ad09
-253 1 169 \\x17607773d317319e8c06f47d3c0b39ac98407069aa846e3181a394d3944a523df0f0aed018eb4c7f32aa56ab89ec50db21e889521ab0b41ae4034df6d3f76c03
-254 1 145 \\xb6e7cca350ffc5496e50cfcaed55a474b4a22414a1105625ac93e8006b0502eb01378104d884280ca131089472b6a69dd4833325725f8b98710be0d75a2f3603
-255 1 218 \\xcefa4c8ad782fc0092d01b342a951a830f3ad85746a13377fa25ab58517afb432185ce3a74853237c0aa14c9bd6235556e854581b65da66ff7b5a3cb078ac60b
-256 1 107 \\xc5e17d942c9e27b80f7c351d7ba5db039a81b9c09f0c65a5cbb76ecbf586bb2fec2ec3981777ee9d62d1394a2e5e1357993aac6dd80a134224784c01fb1b9a03
-257 1 310 \\x6a13fd700ed5f8ea6b08b16b49f98258e5659852178d14c95e05bfd4dd3f6fd6c526cf1d012dc1e67aa0773d36f5855150cffbf85952ac9e4a9317d72c387700
-258 1 250 \\xf34df6ef291374c4dc49d412bc7437982e3245af3f2bfbea017ac07c63e53bfd8461ccec89c520be04d5a7457cb5360e22912b60eaff5f5425207480f190ca0a
-259 1 65 \\xbc699bf2ff54f98e6d449f1f03a4d57edd7ddbac0afbc469dac7ee7e8cff578dc3b55d6cb1a9fd3a0605c6bdadbf30a689be912d950b103490c833835aeb5505
-260 1 382 \\xd53081aad6b3d1148761ca9923083471d6c0486ed3993e3609036ea660b7bf016f7c304dc3c9d48c9d5c620b2d2d72d63a033dc872fa5b5467191ff1e9e3680d
-261 1 76 \\x0c9c088637e66204ea16b071a8f5f37193d2ee665a7a85e9bf446d187e0ad3470fccd8a3007e1574da3441d772d5109df19234c896f79add997c9cf7f1574303
-262 1 175 \\x369f2bb5a18c483ea2b7359f660eb625aaea2335d135d1bd2cdfbfcf604c8662b85b246684bac62b0a85d7143a954d6a1174cab3514ebde5580ba28a90b58f07
-263 1 410 \\x0b6ce6e8df895cfe7c16d66c9c5e345894b05fa88f5f1406fccdc538b883291c68b36c40d51c893d0f8570848b97c2a5e778131b5cbab30ec4046960e8c81e07
-264 1 127 \\xfc0f90461b685db864c68806fe83301b04d5fea3c5c60406e15bd195b376ee844013ebae233e74ed71b553b35ff8e94913c264605743c7ee7db461f5da763507
-265 1 24 \\x554cd7b184459dab3cdf41283bf565d3f72e14ea1b4cab2ffd537d2cc15122d3b0a162d435faa79d0eb03d53e5e4426a8785fa16370a467de612b4ca53141c0f
-266 1 80 \\xeabfc6d08bcf4e9959b5a5b8d6b686d4c163495ff6d235453bd9cb13b7fc5f107d2a3b9c9ab5c4a9b533e977bc985e6635800540bb31342af9adb3db55387903
-267 1 388 \\xf9cbeb39bdaa6e9d55c9948d3b1d5bdcaa0d918443a6c2078ac11bfcccfb9224441429dbcfe8e36baf56fc54a1a7b92f257b30a9102238017974f1fef70fff0d
-268 1 340 \\x762f91e5960e0431e9263d30cdc963bc3a0efae929231b0220c3eabe7899e42d0970172b0042b2d652fc9e0576745f125df7887af939afb78f71d8ef1a6cd606
-269 1 251 \\x36b2196d048410a1c80ee61d9a7fa410106fe067ed6fc6c16f37920e98846d9d5de11a620f4e5c68f25ac46f9975f302e4d6c44486677b29cbaab01b6881d709
-270 1 129 \\x5cf41465e582dfba33f4bcb0b49f66eab238fb62b3e73b730695b707fdc52213474d6b1bda6c49ae23c8f284b02aa2486593c9b8d0db8bb2a72ff1a380436509
-271 1 7 \\x121fd5b79851802d9623719f8a85678d256479362307b48464c19f4d5c7bd1d98e1e4269090b56e05bd43ff533b376db38ea4505feb97a2acf3a2767a701ca00
-272 1 234 \\x34f484be789dceb179eed1ee12ff947b16707e5c187008aaa505412eb76d2c417810a731b761d85c3cb2fa50c7970968debe2ac22fd044d0a12505fb6327a80e
-273 1 128 \\x22437a02017860e8442b755a7278acc55152e0fd37600c70dfbbcc78d864ff92355ad312c03fd870e743eb49e6b8be457a3ed86eb3462a4f01283308ea334707
-274 1 35 \\xd76258a36712459457211bd876526c8144d618661dcd2791315a7756247bc902e0545074f095eac95fe2ef8fe4d0cc765cc36780c40247b5aff1e2d17e285a03
-275 1 231 \\x481a669456e347c233f54d88d1ba885d33e2e1eab06049f3ba261187d3e68f0adf3f2eb6910610d2b4321168e29021854662a8bc58375ec64ba3e97c4240a705
-276 1 188 \\xda0fd2b63b650be435e868edac0126ceed0847e3d208a35c82237c059aef1e2ed76e9d192de2ddc4bf58ff735ffd9e87831f12a27013d930e42df3a27ed25700
-277 1 181 \\x7844c4f5524b36ebd853f0165c5fcdbb8f1b5d2e432adf72c24d4d94550db7f31dc50289b6902651a0eec7e477d578c34b24805e56af121656dfd54344d49500
-278 1 139 \\x8c105092c6a679fc9bac1d7055834b95739179def6e06e2d4cd154cb7b70b1811a04e34cc25a691854da4a1cbdeb7921f88107387a0677f3d2b7df3d8fe47e05
-279 1 412 \\x4e7d0f2c91aa4adb020bcaee29913f6303f37321e196f7a451eab0d108cf4fa9a5389ad2b9f7c73deba8d1d4cb2bb0419ba0ad9a6eea249989a8a86ff19d590f
-280 1 212 \\x9bd7bd4d3aa5df27ff6554acc07637ade759fa3c1ba5f18c39785216ba00d27c2809cd7089879e62ad186473778451f79c2521057b10e8f8e9fd8723e2f09604
-281 1 96 \\x8224d278232f59e38d13bac6dc8e781172b0ca6b5ebb84256f92a7e374ec2084e23dc2d474ab8869772d63d84b2586a7f7a5383e27cb604da6687b2fec292b03
-282 1 189 \\x1513580065d371b52580fbd4491afe6af5a6764258de5f53b630c7394bf7ab3a325b923df31a1aa554cc9c34392b6a2a955137579d6e019f54734d4e3674ea0e
-283 1 51 \\xb06c5dc907ca9063ae0164c4c3d1a750df7442792abeb61412154bd9cf3793c14336189bfb96001bcc3f5680cc8a17b2f279390eff1254e8b0d22ecac0824401
-284 1 89 \\x6e9da79de5ffae46d66547ea77187e085ecb6c42fa8d088727855562e45c98a4d407b00625840877a161e1fb05ed2bf936545d8781bf56446c8c1c329a617501
-285 1 307 \\x9455e9a13b74cfe93a153d47fd3be0269985f2a1ec884d4d0f38ae63b2a5605ea4c33a201741e28ec266dbc99464d9bf0766e29e6bc7032ff20f5a138165e50b
-286 1 223 \\x4d348609218fcb13526923f49581f7da4845278d281393ab3d6e2db07a7aa0acfba998f0e958a8c52a62d2a52a0ce21c6a602c5acdc49ffe3b3e62f96687050f
-287 1 357 \\x046c47cb06dffe9686d50200a434b5e0909cfe0c8b491780ef3f2592a88ae42736623737379d668448f0d507eac91e157ede8817b58df5f7c73cbc5b9ab1150c
-288 1 306 \\xab1c867048e4d7b2a089a63756307016d1d8b2c27af970300d79e4a99da7f2a0f8c6f956ed363131d68b456db193f45659e04dda69e4e2c0a95299524d2b8f01
-289 1 227 \\xda2324b85c5dc7bc928b528176bf61181caf523aad53d6cae7b5174d98d9a10ef6a56f8e16558957be928d086d3ecf16c4e5e36a269c017b72b60c9e1247aa04
-290 1 347 \\x318eea0ac027d4c5f754c68c05b8ddfaf81284c3ebbedc239b90f12cde9cbd6538be89350e8570e3e5e98fd46c3e4cb163607f5c836f0d9f0b62bfe3ffb4e30f
-291 1 25 \\xeef1efdc54ae5f313fb895afb4a56d363c1b6f4344c32f277e608a2fa08ae3a4448ff19135c53a20a8db4c561c761d7bf5c05810d09c562a8fb59e2d05604705
-292 1 105 \\x543c3b353dcfaddfccd4a28138b102a8032c417e0b32a5828fb2680791b807b51e709466298b8f217264bbc332f3c47aebc4a1f602cd166fd329e2b115ae5b07
-293 1 259 \\xffe52dde22c802290939c69f3f08189f1c01bc433f7cb912cf0e7fc0f7c1644859543bf0869d790c547a3311d61fd54af15e77cdfbb5e120cca5ca6b3a347807
-294 1 281 \\xc9c2411ac602e4ff984c3264b93c410e8ae8626c5d2b2506ef6d02920c83f7709a497ea1104ddfa1d412c87b27b2969d22b17c56afbb2d7f51177bcce3a01409
-295 1 329 \\x5c63c56bde4b54dd703372942b5ec9bb7095cd2516fcd8c220e688fbf09cbf45c6d4bf28553de61dca9acd15a00899917610e2d371b8c64b7c3641d52310aa0f
-296 1 215 \\x021760ac095d328e9f57e10e6bf2c7ee7252879d43d495d00f6c9035bbb5603852723a6439752de0daa3571839200ebb1762710875d3b87f2ca93ded91a3bd03
-297 1 414 \\x5892da75c72f68f344fc5af583b9f8c94f977b5aca73ced52d629cc41b69381b52a0f6778bd431d8db60f33fe37f40550639c153a44d069817422b43cc63920b
-298 1 151 \\x113d0c0e0e76b4ae86ee43d9d11dadcd36a4150dd3d1ab8d75da5748d5978a7ea04ee5b4a11debd0b1a840a7c68ece854291fb1b0aa1800f31577ad147493f00
-299 1 133 \\xf0339d08631dd42046ecc792449132247d1855c2f7e562e2971d71ba9aaa8df2cda8e3922cdad61c33c138f3bcff47be2acaf327d452301844c071b000cc9502
-300 1 11 \\x471b881aba354f4cf08ba18a4646a0cdc026f528c65f55036ce7c5e26c2eed1abfd0b04faab6356442147bc008c1442d6e96161d742682feca1dc44ca6ffe50f
-301 1 171 \\xdec4d9f485bdf5254d7910c28c5d0f2f71fce63bb9a52028bd5b88d136e23095740c8b2f585b4c983e19343a95c7c5463e339d4746e24f52082b7445fa485c0b
-302 1 37 \\x16bae5919ab92bad245f4014cf099e700453c0e14add378b3f03d14f985dc11ed327b652a58d5157cd64eddbaaaf501f86a3dfc1cca7dbbc9dc6d99d46377309
-303 1 101 \\xad0f04c1d832d765c18cb4e9624c41908698e1db4e36c1f8e3a9cf719debe2134bf785a85e03ddbd60156492396c16088b95efdf3b6f12a8f03490a784f60a06
-304 1 211 \\x7aa5dbaa06fe2725f3ec55060e6414d4ceee2b8a4bfc27811147d628ae8e8d895aa21ba7eebd6bae059b2fd2c0b26b4cde46069354cd9ef1f5d6aa8d7fe25706
-305 1 272 \\xb1926042031d39cee008ccd533567b497353b4095bb5b28768329206d4e1ca247dd61ee8b79695dfc8ab288fb07f1bfc1f1120347348debdc3c768caa2a6d507
-306 1 94 \\xe6adc846190b12cee42e03665a35ced027de7f4ee1118afae3d42cae5c3ba4aa94c1df5a4e69c9bb1d352deb565f6d6d9b1a45eb0e038e036d19046e2beb020b
-307 1 246 \\x81eec05b86b59784729209f73db29d04a7062fdcefb05cd80e84ae2f36d8219d3d0134d46e97b7b862f7dc2b7d2964af8352597543a48a354a6206594fd63d03
-308 1 224 \\x5ff1e9aa8a4a2dbb14fdb26a92c82e2ac03d0d640db06e736c0eaaf26941adcf8da91f688f5f3d28017cb6ffab178ec072755a8bdbe05f00604b303ba02fbd02
-309 1 123 \\x70d5649f0fc1d2349fb47e40318d41c54596dbbea898429bd2ed54ba180567f55e61268ca3eb392df85597a5a4d4b2ff9da8dad1d05b3cc27029c3de98c47c09
-310 1 353 \\x1ceb72fec524651e33c52e45d4abaf96090b4a6484800c2e36b0f529406035a3575948d65aa504d38fa83f60da2940b10cc058b48f4de99437542ee3e637730e
-311 1 12 \\x28e560d2225fae499b5621dae0f85add2b6eb87356a483de018ae4bb9b03c3515cb0c6d8d6baf5ae4574fcef18c9322ed7d97fa888e7f5a9df08d9df753ab601
-312 1 400 \\x5280798c22a4876eacb078e84df61171d8f0a2c0d2a1c6af7de6f565a8d71731104e051f99568036f70c29ba0287b0f732feb46bf8f18915760156e0298fb705
-313 1 126 \\xd5e61d2968e208538a28ef514b6eb98fd1e0651dd0fe6b0d15727d7b100319607a131825863d153e35228a511766289b7238b59cb2d51734ee2fe6b59876e108
-314 1 398 \\x89a75a3bbd67420f079b857a667be5ed61e6559e0e1f2bae1b52b0037068d8b6126980776cafbeab19669eb13e53fe1197bf70d83a98dbe832945e92e7d6a90a
-315 1 378 \\xdced4632d087aaefb84cb3d14954ec29b1894223a07c03ebd8958bfa1ca09743f96edd18e493e60109587938cffbafe4d0f572051215e5b0730afbee5d1ef909
-316 1 285 \\xf06ea98cb1df3c0b79daa833745e4609188bb40a954843f09a38a42b1ac39190f1900d629fbf5f9a69012b5d27b45318c4b02e569aadcfd80506887c67006c04
-317 1 84 \\x664ea2a0f04918e2367a53714008418cc20a57bbfdaf03c53fe4bcea20d2b0bffe812bd9de4ee22e093c18a5eb2eccb818d89a76dc1b50d9415d944e54113206
-318 1 375 \\xaee98e9668cc05cccd9edc6391f4ad80228b68ff2ce75db38cd523877efbcc137eedd9dfef4622dfa8d44db98382b9afd9c4e9ddc8e87c6ce20c983217db8409
-319 1 75 \\x9d3f39e9dd2cb174ffdc532e382def2d23db85338c0f868ee9955dbe65a72a8cf4d50afb19afcf957f868a2c71be41d1a298f733aa7cc485d0735c649a34b80f
-320 1 160 \\xfb627251f85e63650582a77e7d43fde72b102a39b04a7b43991b5c87d2cdcc0d359c82125878518dc1b152eb86622244c6edc2eec91feae8c4266e04b2041809
-321 1 165 \\x1b30e3f14b737c0e1738004315a455b82f5a6bcf0f74f67364b80a7a8c204aac719fe44ac43eb0272399c70566aa77d64a15fcb598e8a27a44f0f607cff09902
-322 1 379 \\x93c62301d19d770d2bc0854800c877dfc8835e834b07f8643025602bc06ec19db767ac536a680e4036f9b618f57b82f4b6200d183000e395a5acdc2461b69708
-323 1 366 \\x310b386d31bb0d175c48c686b8d7c654d7934ca59f54173c47fc2de5a9447c163c257ce05e00ca431d67879b043babc387034811da2cf90dcf2667740fd84f09
-324 1 9 \\xae6de753bc6305115689b486bf5e4753e3ba698059ed9addc85dd6d6643c53edf0056e812ff6ccff259003215a93fb8ca06c064ce1cfc1f27d82eac989d7c505
-325 1 235 \\x9678b47dc25dc2e927441101a78b3d746d7887fa9bc416801b4b2abc8de64e6c699a81248209b957df693eb56d153be8b6304a37bd532bb024b98a0fa477fb00
-326 1 271 \\x23938d308a48c0088d42cf1274ce80c6c425650a2c1ee8af5124d51546d65252d7167e64b8196f3e9d3b3a4df65d4b757075521dd781e84a09d7d0fc47661004
-327 1 152 \\x22cde5ec4ee456a859e0fce00423e12f308cabefb2309f3d14972bb537b5ad3e595a7b14971fb9ceb13ad300ae260838a4f77f39f6cb74be934a7f5efce59f04
-328 1 159 \\xd1f4fa97719658c0ae324b8a30d86566ebd1b69e0d4190756d5524770a622aca9a19b5aefaef1e145fc342489d90176b5ae820b3925ec4ecffb5764dfd534e01
-329 1 270 \\x1e2216c40c2ae61713ab8f5b8fb1ea525dc84d28d56898c4e74d0d331d2bf94cd3ff91ecb50e5773eacc08b5454eba8b8f294bd0f2ecbe5ac866038bbb2e050c
-330 1 83 \\xa15911a129f0b46225fcb85f82f4c3f721e6fbc1faf119d9ce4822bceaae13a8185ce24a98e3e402e17559b1765a60310e6ef119df327ab58742efcccc4a5e07
-331 1 424 \\x67777748365e632611e68e47d06922a66ab53e3ff8b01ab990bb540e76c1dae07f01b62de8cae43ecddc350d2906532fff5d569be3a63a7f2f94aa4bb1006201
-332 1 99 \\xd77b65f3bc57f56f21c6e89cdd360ac9c51593347af91db8e88c83006f0bd7a732ed364ec6ce91c79a710e594bb7fcad638b13487993c77c306c834550c32b03
-333 1 277 \\x4ba086f6c1fa9727a2adc6546427f058966222110e1f9c1568572368554a8c931fc57b5851dd4ae1eadeef0393cb406a63e0b4f671a52f893e89ea2d85c8fa0a
-334 1 284 \\xe53c8eb2dec7dae8bc9d9edfa3867ce4c41d247ad6413925b3b2b3f8520c364e235d79971e000e02af7fe9958920db84372219625a371bc3f5e1365ab2638b0d
-335 1 2 \\x2025887d0584d50b9359931d2ddbef5bbc02f250771d52b246a6a265efe3438db7fe47bc1a7844dbfed855820990c61aa5b9c3b0390631f4ecf5ea3cd6510f04
-336 1 324 \\x501dfaa903d0b2bf40287bf838a27914b37b08642382463d6f6984d94f58d6ee4f2ef4adbc9a6a1d24b81278d017dc0a0839d56792e5896bcb72aa4e4ae1f701
-337 1 178 \\x448614854a4c3688c1b5c50e4cc341c8103711d4c988e4ef6447aa24b50c7a81deca6d3927da791e24610db63be205fa90bedae863cea2c79372824e7a7b860c
-338 1 303 \\xb7c5fd1407088a48e3c96160168c0998a3c40a3c74ad41760b0cb10b7feeee4d34bb3e2504d5da1ff009b59672accfb4aee77973243cfd236abeebf1dc32fd0a
-339 1 341 \\x520084769eca8237d035f234f7c76c2e1349f0a2aede1af547ab1e5153c51d07911efd553b7347ba7e2b54980906c8159998efefc7f26280a575a43e65d66d0d
-340 1 394 \\x0df045f5af54fab612aea7e8c1eb33f5e9013f9c57419fb7f962ab56fe55e0eee1a2d2309e040b2dc0922e55ead3846c6bacd85e7820100785790c3b932a9805
-341 1 198 \\x74054d0123d5834d9d4b5055608ac2fc53184bf86ea348b00ebab52b438e86552963ccc8d4363aac0128a0bb8f60287e9961ae21ce5159ece30cf2b6e3213605
-342 1 359 \\x27b49b6d4b65683d88e0c165bf6bc26b9381b3af718dd34c6a59db537c43d4426ba2ba74c96a8a3f96992a3389763c19d6bb95dedcf29a64ffa81d15d6c93709
-343 1 95 \\x973ba1409947cbe0a169dd8b6a611c6a1763a37050d8ee88def26ad8e18e155597d22b94fb2b29cd4be95ea732d8455080d4891b2ddf86c4c241f14c31e0a900
-344 1 62 \\xd653fcf6293b728bf5c71acd98e5d84f16f40927e1c00566eb3deddf2f9edec36cdf2cd7f01ab0e2220ad2516f2173bb84731278f65b03974fcf720bad56cf0f
-345 1 16 \\xde10f04536f0beac3205fff395725f9023959cbc4f365d659c61eb34c71c55b19e25fce524520c22f5fc4dc9f253dc2debfbec5c13e3b254f771b87c13567407
-346 1 356 \\xde2ff0fd6bd4027c3a7a305d60c46251c2566f7d20338a1e41e5c42aca5024778b6eb5d92c54f41ffccb0e77e96fc141951576e0fb02771d5435d7d79924ca02
-347 1 385 \\xbe318c8af7cbad566ae9e588525701ca89441a0664a7cb6ee781dbc790f6e2c175392150581f27a0c7d7ee7031153b3a0c815a54ed4562fbbe1c7c78cb13ae0b
-348 1 77 \\x07bc59bc5dfc05caa111a8c18385e9a0a291b64102f1a7e5bf703876ae94fa3e9e50b51a843f358209a68838be3933fa06f05d4e453aa3f8e45cb352757f4b0f
-349 1 93 \\xadde27499aef67014fcae0a0514f54b05ea6c3e5ff9498aff13d4d347ee7d2566bdf578160b4250598b2867859ed800933e1221837395c974b46437a268f5b05
-350 1 287 \\x2ceaa8116c8f4a73c52ac9a8081d3355b4742be6d1bd21bf1d6e64e4239c133280cf5d62696705186b9005473496e47f993e338372f7478d55d0c93c52b7310f
-351 1 53 \\x682fd1e3ddb7b6717bb952c00665fd59fa873a2d6963f02c6fe36c9f9a6cd8c17186750f4c752292dd03aff43b94c186d21725111bdb36dfee622b76989dab0f
-352 1 328 \\x46d390268d67010d5ded1e52d85f6af2e15620edad65f738d1462ea7feb66d8fe7f244feb01a24f6f519092eccd635676db984ce0e6b39d318a8cb6afb5de106
-353 1 350 \\x72c803060fc84274d9d27acad05340b8b0e062e1f0a749e5b105621b6ae4d900eb9e9ef916e3bbb8a4ef45d0f974bc6a288d89fb55556d168aad9b416a348304
-354 1 183 \\x302fe771fd5bf52d76629ce5e30068990bca9e97880892bfb3f4404ea5b062e8a78f0bf6319e62ec848dbdfe848afb9f35df760d72bb34ab75cc3e3036cf6301
-355 1 130 \\x39b6bf219e7e3214a7930f424a888c4cbd2f251c4e53fd698061ad0fa23ddc1b52d5c8eddb6a59af1171efc21586064b9aada9bfc73794724c074e6c18aa4000
-356 1 138 \\x0e43dbb2646dd2e7a9b36c711d190536327c2305f0eb0075ffc1e27d649a8ce91f47350671a48645dccaf25c1bed264f0922356bac0c1a87203594ad3426ab03
-357 1 163 \\x595ac14fa17843bcdf080bcc3312e7205e3359cf67fad987a2b3abf8d9087504d563e3f67327ae781b58bd67ec5d4978c853c2fc40190be1d292c7839baf4d02
-358 1 184 \\xe641efcf0a08bd6641fd6c5673a11cb55408d13c321374c5d729dd2473e16c7c56fb01069c5d2ea1a34fcace265a98c963bc8a45e5c87aec8fdd2fcb14bd9c00
-359 1 255 \\x9a284d6cd47a6932ef8bcf9e8083d76da5529c85170fa3037106a303752e444f53b59ac5dcae659a7242c9a57837be05d3a3cee5852f38c368df1bad11bb8a01
-360 1 82 \\x261e265e8c0f47175a9416d46802f7fb3aff4648168bab86adfbd4c659fb70322fc69616916df99fb4d9d935fa286ac80577df078a4efc490a3581cc4007a30d
-361 1 351 \\xfab3169ec2ff1572ed7ac74984d90c362783721ff7ae33a9cdd5fadb62c56eee7d9de565824f5422dbfb44f5921046577deeb03751140996d64c340ed1b4fa00
-362 1 302 \\xd0d49e6cd629cf6e7569e3908957c420a1df41ac3dbbbb1e58771a28cd35b924eb726cf4e837973988106457f2f471d62471e5b67cd5567926e0eb84fd66180a
-363 1 69 \\xd2f25066b0445fff824b798496f456b5b149f328ea1aff14786d37b11ed66006194be401f44543673b1df09cb8cfd52a094b90b54f6213514b61cda6a53ddd06
-364 1 308 \\xb2460dff04d0c595195eae5ba8597365177551ed37b3d6afa6083869dba53e90c1e145193da65d98343c26f78dd9c4922c3212e423244a67d00c15f4b07f4b01
-365 1 256 \\xfbfa12af1dc14a0787157f0a053d132a1ee059db21f4fabc7da56df251934ae53ccd40dac54c877a32940dd5399b3f2b66b5869fee20a88da574b3fdc4968d07
-366 1 202 \\x91eeb8d7ad9e8ec4c5e2bed2ba0ad3c7735c888c6f2658b0281920825fc45e70c7b1fe43d6a1cf15e520612b0b07bc68269261c4864ea6175a69c9f51e85b207
-367 1 247 \\x940c6ec85abfce1c3635a847ba9c26a814db88b50b18f701b73b01f51d88f6a6507f15345a7d924eaa9a47debbed2ce31c1a136b828e8ee4c2edcd66c25f8705
-368 1 268 \\x07a9f5c8f60bfcc9911d87f4daa5fa793858a6464f1195d94640da4b02f6153a3595fecc295b87c168cbd82bfa06d181abf682fb2f90cc8dddcdf089ef6a9a06
-369 1 203 \\x0ee8d32d2048fbd8c7f7cf7e175ce1e95e74953d756e2c5b10bec2db12edad27e8072cc1a81f7e286ec4b35fcec2a4961a14528d2beca59ccc9c63ac506bd408
-370 1 241 \\x6232469c00de5b1ec37dd9822dc4d8d07e593b4bc1061f5156fdc2c298b54e7dd29cd70e7c0678c72a80d086e519a4ca7f00d95fd79a0d5e7aab2f04b5cbc006
-371 1 279 \\x5b55b878e7b0c2005ee0b3c811a032b79db217569012d0589f22d58f4eb3ddf92ac1b59e9d3eec85f17769c13ae1f35c259da54544f151d774b3a6e012fbfe05
-372 1 305 \\x5339356381f45167f43811e9aaf1e928345954fdc9ecd9a74dc30068a15500e10cbf12f1ae30d6c2c243d93124629de0912f59102fe1660c2ff6b2efaa834e00
-373 1 185 \\xe86c95ae737d6cc5e17640baa3c2ace700b98f4f14961b99b4f4040a4fdc6a494af4e99bcc61b9dbd2e7defc522cc977cfad6d8c6e0bec1c3ede8483a9877f0e
-374 1 61 \\x282dfe93220af0758961a008304df35b8ebab65796b9f19362cb3c2df8aa03843e1d78088304faabfe266228e04bec36b2b9ae078666bb22e4c5a1ebb9f2ba02
-375 1 383 \\xaee9874f2f7f4ab3ab1d2597dae42996fc8f9f4f4b0d9a2cb4d3d0a2f4f62bd7fff7ac98d143f5ad99cc88150739548e801469443dac88fc02a3e1c4b0d81b06
-376 1 21 \\x7355b57c18a7d81d0f6b6437ad54933ff482114d7d7e29e3def9cf16f5c55321bc304bcb4902318ed9a886e09a7b3a17c8c2d3b9510a15d26239787b46ee820d
-377 1 55 \\x407aef3f1dc0b89d19cff7b9b120486224e8acf5acb9053e499b9204dec23b1044eaf934d70c668ae2a25b363b52d8ef314e842967a430b608660ff22b4a5106
-378 1 44 \\x5d6d800f696aa861b049c62e4b585ec42b241c549bfd1ed2dccec212db551332e470b35e5d9726bde7d35d1e7fa66766d6c344d318d49a5d0fae8946ee49f807
-379 1 349 \\x6b5a64587b0346cee5d2eee84e75104f785846c3325696867d92ead97a2ea9867fa1d289b6835e39f46fadf98353dd4fc3764294fe64dce87deb4aaa00c5ac09
-380 1 14 \\x2eeca4972b3aff2972ef11e0c37a7fad15388f70c73e2c36f6a0ea0ef7774006d6ec2db940407cf00b10f8caf4f6a2ff71c8bcd086436542e99c81f59e528502
-381 1 97 \\x6fb85237a686e508c1d62ba3df102bc1a2e654c960b3e2ca193582c9c82ba6a1f9964da425aa6bec383c20c92cfb6119bdf715d194219075941d7f63bbfe4c07
-382 1 98 \\xe4200e8d747fd0a81cde4e29108a7e57563c09a6660dab802b085535840b44ad3e2ce0839ea8fbb389d09cba34e14151ab2e48ec93d195da012a13561a256f08
-383 1 422 \\xc3f9a005c59a4d9478e775bce1625f241b55b53ef71668b6cc3d0924c95845478c1391f8baadf612b93fe5761890a6139c3c6d7fc7746bdd0bef57d9eb8df30b
-384 1 374 \\x14cd8630f9b55c24865bb63f59af616abf82292492c84304d52dab7f4eaba271ccb1dc7c9c250e1c48a038d021ecc05085806cb81b89b05564e5616c5b2e9a07
-385 1 286 \\x6e575d28b706c23d7ab60c5a9df7971e16cc1061dd92dfa6de3ba540af85979b1ed04dc679604983da5da4da1e984ab14a8e561003f454c298873b8420c51b03
-386 1 153 \\xd7482e991bf3941cfc40fb8e81a4b091583e3b4ab82c74827a09d4b80fb435ff21c1802fe2d910794d3dd4cda4eb8a30ed6677540122054f25fb725b589c6b09
-387 1 158 \\x8c6fe5e3b307520b0a0aa7bcb2bd397512f243ea19b826a69e50505cf80cfb5a9eba56d8dc67c19bd5ecd7d73628ee2dfb63e0b51ee8d3e4ec811e79e0cfda07
-388 1 113 \\xa14421de76e99f0ac91141490cd2ccc511708ba8e2d037922222ded640f9bce9d37e5b70efce2bd6d4cf2d0466772d273d7dda23bccb84b4dc9755e082d4f10c
-389 1 70 \\x0036e8d74b5a0ededfb9d68840d96ab3d8fd424201c69d8fe4d9f90a34f52c9068cf7f185807d2f62fafa829783162d4825de7600f1c154f77a8ae348fa15700
-390 1 186 \\xdf7d9ac6f9d2bb35798fa7b99c2940c7a8f436847fb99ac64f1d9048c34c8ddd65027fae2cae39861698e5a0260c83f68b6f64a542fc97e0cf962ac1f5e6b208
-391 1 190 \\xc4e4dd74439df2bf16f121cef8ee91f2a7e9f1328ed36357917678848b4a755c736372de7d64b268c8da2ea7d5a92fedf13182e322ceb0517e726fee790faa0e
-392 1 66 \\x5c161aa24e102e900fe907fe6926ed1d3674f7156819e97684554e4e1132372ce745a7eb411b44a6da63e95dfce479d965a95ae50514bdc068939d6a690d2e05
-393 1 46 \\x377362eb7da20f1d57acf7e1d493d5cb1930e7d1dc40aa7ca8bb2117e0310a99dcbabf5e9a37e169d3ed2064f3ede1d5d03a0c486bad617911cd25bdaf8dec03
-394 1 132 \\x549b5a330c5f8b8a61a8af0fcb8bdb42b1c022b92490d68b43fb51dd690f02ef3c478b2c9ab79fdb3e4dd78b4e580b726dd9de11034da4e4051587d894d3db00
-395 1 102 \\x19a11e4ce2813daa2f02f3a628e077056103514f933cdc6182f103c965501848b51602ade4d67c69a17b315de1b280e961498e753ebc60bd1e6512b146b17e09
-396 1 57 \\x042067413a92e334b484ba1e4c8a12403a8370dd7423272283f2f0707c2fb5cc52a99428a25a19cee54edd476125deea90e6719ddd1d4a51f43c92825bf24a09
-397 1 74 \\x62cebefd582a5a1f1ebd557009edec392fb8428337911631e8c3937300a8dad953a880999a8d0d631a38659065f634d0fbfca5d713fda0a8a6b77f1a087d1d08
-398 1 336 \\x298b8ed2df53e898e84e5dfafb7174fa63a61150dfe77d418fec16e0a5ead7a0a307cb6036f41fd0ec7eda2e968ab58297e100f62532d2f119bcb04472696107
-399 1 104 \\xc89bc7a1aa7b3938e05caeb42282e5aee39583922d21685c827d20b0dd56a4edfd6f84992ece80557c1a1461955121aeab9c9d315f45d7d947a5b1f862d5020b
-400 1 244 \\xf65e2ae698e275ddcec1ff11f7e1349e88d8c5c46d513bc078ca060c856ba156479cf489cd60b48c688fa8db9688594ea433172919247f5e29b852409edfeb0d
-401 1 238 \\x8502146a68d2c6aa4a49e08b3cc78eee98f2ca093604f5088061219800b32fef99d891d37f5db5f3d27f7b755eb5ffcab991835d66e83fb9e30bf1b510ada601
-402 1 38 \\x1eabdc53fdec37a60440fd5f30672c4db68201bdf2fa4242253b973596139eae32e273d1ccf2c98241d369003828b60e5cb6c0c2be1433be2718ce197cee420f
-403 1 214 \\x57a64c61e1693840728c0a8aa364f21645bcacedd8a3b80d803f5c4f4dd52b27649024c8cfd62945ee2ef9f8cd7366477ab6e935e1eb77c6a6dbda8a9f0d9601
-404 1 344 \\x7a7aee16798f9bd10feb93a0c73ac86bb7142f5db5e1fc10bb7cc4e87be7efc9b212cf0cd95a2af438d60d1cc1c125874bbad282c3d7f568b8bb78b148f3fd02
-405 1 173 \\x93a434be76cb3824ba3421a2f060f4ee08d0c7b7f240bc5600660a272482e12cfe4b8daa8bcd9a5a3238a2305877607b457358bcb674033c55ee83ddabfa3904
-406 1 221 \\x07130bc3dd0b643afa21f92fdf7cea6ce389c2fb5d93caed457718fda5272894acae3e645dd5b916b778539385cce8f43db71fa4605325ef4f27eb8a184a3403
-407 1 381 \\xe699e4d229e001e2f3bc1604751b859f945909f40c87d7ad6c9777297c34b6eef2543e8f18c979754299755b804d13d6e1be5e01c7bcc6765977fa01d0b09f0c
-408 1 337 \\x0bf68e360d2cbdb43beda7d3375c6ca2f5c0342255b32be1f9d6b604491bb0c2b4a905feedbf42c4b618319fd8fecfb7efe455445b1ec50e9689e788b9e62707
-409 1 170 \\x47ce4a636bd8ee312d0ef2cd69b9fa73dc8dce61633ae96c9b4fc573a0e3be0149f3a84bb1ab2ee7c5fbf64c89d684ae9e8f998b0473186b1201bc7363ffd70f
-410 1 5 \\x7f1d6eb37243c18d1a74c44d2286ef72ab21d37d435f331304856aa4ac31b1a253853e589c483f994abc938b9add4eb674e1108afd04d13cf7d18e3662922901
-411 1 372 \\x3c89138423a245212ebd00a46e710693217a6bf33d200cf7d6e1f3a5ecc6d6ce66cc28666ed1cc1b5941aaeed1ab8bb927ca9528a76c683c41f5393b84b1c501
-412 1 405 \\xe6fc1826d095dbdec104fa63f4b506a77eec135694b3c37b47861c00137f8935ad65dd10687bfb41e25b3ac6c4159d2d33e74da531eb70c3ccdf57acaa17df0b
-413 1 109 \\xf78fa8065d498ab1c2c38f465292ff789cc625aeafba28550f0408d344c1cf27d08041254fe95baebd7c6daa1002658d44d8bb5ab796518c67d3d11a02ca9904
-414 1 391 \\xab93e361a7626e7954605a585f645dc96b99338a9ec526b90bf2020974a4a9d85a905bb99c51069e69d6d1950325a53cbaef3b9c48ea05fd41083949329d6a00
-415 1 118 \\x58c82ec22707b2a19a08012b958afb0a709fa4b57f5cb35516aa1f651dbe150c419886a84deb3dfd1d4519ceb5ff8bd79cbc41e9f881b9fab40a0e0c050f330d
-416 1 376 \\xa6c03c2f54373fbb49a3936babe8d63b8a6a7181c73f853a0ba1eb14b6b7e465556b5ef9cdf1337bc1a2f800150a4bb1e83b32808a47f240acb7ec3681aa0701
-417 1 352 \\x253309035a3c3878fa685d4d9840dd487bb7fb2c5a7b8b4c2c205e2f135802f2ce2267ae0438cc055fb8ab3ea68cc32202b637a4633f1d4334c04af3fa190809
-418 1 64 \\x80498205c2a8dce0d00dc67b0b8c68a58471a64313fe1cf2d9de1c4420bf768afe97ce632015e953cce4e0344488c3d7dbda74ee063588281e059662f51a5a06
-419 1 334 \\xfb1e19381cc581bfa46dc85b2b665613a5fb3e83e7a4ea18f9d2901a2e51bf8f9b3586ff6bde67fbf8efe6ec2424f7f4d509ebcbdf1875e6e833e178e76a020b
-420 1 192 \\x8fdf86c3469d3ac9f86e916d1b170a11313487d2f12fcd69220a03a73bd45ce9c9edb93070aa55fa84a655f72e1d8d4686270e750bad7dec0ebbfd37fe6f5c07
-421 1 267 \\xa48e6a85fde483bf47ef5aca571a4be2a245268ced2663e9a7bb0378931f243ce95e20e7ee63ba23f8561dbae2408502ec79eda1e682f8ee9ef58dd60378ce0a
-422 1 206 \\x5c8d9bc7bba7c99b89ae2ec51803eb33101bf3313d23b6444ade80abdf12d79d1db851f4f5d6a19deb30eeced51040333d2bce2fccb51b695fb21a73ab3fc200
-423 1 13 \\xb597846fce0470d3180f7b3b4d0c01be7f241ff595b82dd5e6caf6d366aae5b2b0e96a65aa0f0f81a6718d7ee1a438a266ae90900aed214cf7d740570b615d09
-424 1 237 \\x7449666deae53fbedbc5fa43da62e2ec5fb39cc40b2409f0781b6c1bed49ed31db118aeef872ef54e0fd9467f965bc3b7effb5b6b4f60f2e115f749cad589204
-\.
-
-
---
--- Data for Name: auditor_denomination_pending; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denomination_pending (denom_pub_hash, denom_balance_val, denom_balance_frac, denom_loss_val, denom_loss_frac, num_issued, denom_risk_val, denom_risk_frac, recoup_loss_val, recoup_loss_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_exchange_signkeys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchange_signkeys (master_pub, ep_start, ep_expire, ep_end, exchange_pub, master_sig) FROM stdin;
-\\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 1630849807000000 1638107407000000 1640526607000000 \\xdb449a34be7027e6791ed93aeba92134eba52ba175dd28ef3990e4a11204214b \\x3833a475ae4efa15b172f03f514b50bdee2c5bb55a180606ce698c4725e01f10b5f0d194ee0a56dfbf3283b8640b3741988f6c0133bb13f27be36f5fdc3a810c
-\.
-
-
---
--- Data for Name: auditor_exchanges; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchanges (master_pub, exchange_url) FROM stdin;
-\\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 http://localhost:8081/
-\.
-
-
---
--- Data for Name: auditor_historic_denomination_revenue; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_denomination_revenue (master_pub, denom_pub_hash, revenue_timestamp, revenue_balance_val, revenue_balance_frac, loss_balance_val, loss_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_historic_reserve_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_reserve_summary (master_pub, start_date, end_date, reserve_profits_val, reserve_profits_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_predicted_result; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_predicted_result (master_pub, balance_val, balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_aggregation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_aggregation (master_pub, last_wire_out_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_coin (master_pub, last_withdraw_serial_id, last_deposit_serial_id, last_melt_serial_id, last_refund_serial_id, last_recoup_serial_id, last_recoup_refresh_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_deposit_confirmation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_deposit_confirmation (master_pub, last_deposit_confirmation_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_reserve; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_reserve (master_pub, last_reserve_in_serial_id, last_reserve_out_serial_id, last_reserve_recoup_serial_id, last_reserve_close_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserve_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserve_balance (master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserves (reserve_pub, master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac, expiration_date, auditor_reserves_rowid, origin_account) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_wire_fee_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_wire_fee_balance (master_pub, wire_fee_balance_val, wire_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditors; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditors (auditor_uuid, auditor_pub, auditor_name, auditor_url, is_active, last_change) FROM stdin;
-1 \\xb2e8fa53f97ab2b7c3d8529e3131801349424d0dbd38a9eb280ba998ea054332 TESTKUDOS Auditor http://localhost:8083/ t 1630849813000000
-\.
-
-
---
--- Data for Name: auth_group; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group (id, name) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_group_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group_permissions (id, group_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_permission; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin;
-1 Can add permission 1 add_permission
-2 Can change permission 1 change_permission
-3 Can delete permission 1 delete_permission
-4 Can view permission 1 view_permission
-5 Can add group 2 add_group
-6 Can change group 2 change_group
-7 Can delete group 2 delete_group
-8 Can view group 2 view_group
-9 Can add user 3 add_user
-10 Can change user 3 change_user
-11 Can delete user 3 delete_user
-12 Can view user 3 view_user
-13 Can add content type 4 add_contenttype
-14 Can change content type 4 change_contenttype
-15 Can delete content type 4 delete_contenttype
-16 Can view content type 4 view_contenttype
-17 Can add session 5 add_session
-18 Can change session 5 change_session
-19 Can delete session 5 delete_session
-20 Can view session 5 view_session
-21 Can add bank account 6 add_bankaccount
-22 Can change bank account 6 change_bankaccount
-23 Can delete bank account 6 delete_bankaccount
-24 Can view bank account 6 view_bankaccount
-25 Can add taler withdraw operation 7 add_talerwithdrawoperation
-26 Can change taler withdraw operation 7 change_talerwithdrawoperation
-27 Can delete taler withdraw operation 7 delete_talerwithdrawoperation
-28 Can view taler withdraw operation 7 view_talerwithdrawoperation
-29 Can add bank transaction 8 add_banktransaction
-30 Can change bank transaction 8 change_banktransaction
-31 Can delete bank transaction 8 delete_banktransaction
-32 Can view bank transaction 8 view_banktransaction
-\.
-
-
---
--- Data for Name: auth_user; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user (id, password, last_login, is_superuser, username, first_name, last_name, email, is_staff, is_active, date_joined) FROM stdin;
-1 pbkdf2_sha256$260000$U5C5Arnif4LKtBuNgCI4OG$3/fVMu1R4Y+7/czKqwBkX/HO6onaStOKW6AlCs1d/Tg= \N f Bank f t 2021-09-05 15:50:07.878083+02
-3 pbkdf2_sha256$260000$JNaW9f84CiFLnxlnZv6muk$q2thnwX5vT4Mua5nrvLWoTg70tjBNILarqldPO+U8/Q= \N f blog f t 2021-09-05 15:50:08.071263+02
-4 pbkdf2_sha256$260000$qbKuUCuXH2QgQWIhX1EUZd$ZFXWyLPB4HE3WZCH055TElrAI4yxgsMnuO9N5wjithQ= \N f Tor f t 2021-09-05 15:50:08.16844+02
-5 pbkdf2_sha256$260000$8EZmoZQshyrGDCbgqEEoti$vnVRMnimapdlIhrofxvHEtbYEPE6aa/vqJZwTBYaCQY= \N f GNUnet f t 2021-09-05 15:50:08.264776+02
-6 pbkdf2_sha256$260000$S3jvGkxtuXVFxrlc8fphJf$I84riOu+M5oU9nCWXnmN4XbWQ0DXOkRD2qTXuNAT9jI= \N f Taler f t 2021-09-05 15:50:08.361993+02
-7 pbkdf2_sha256$260000$WgNLuYq3iRjpfbgIpgRPKk$7nucd1uhSMA5TAT+Ipyc7y8CMx4Jog7qY//5TOepPwE= \N f FSF f t 2021-09-05 15:50:08.457153+02
-8 pbkdf2_sha256$260000$x4SZJgKqfpLLQwoyQohezE$knfhgdJqgNbXMi4L4B5PqvVq25MsQ407MGlEOuc62Og= \N f Tutorial f t 2021-09-05 15:50:08.553534+02
-9 pbkdf2_sha256$260000$eoJq2PyMNNEmhSGpXzjcH3$xH1IqSZK8ORwdOpondgKwww0jpRxadRhKKIlYvQFZVk= \N f Survey f t 2021-09-05 15:50:08.648824+02
-10 pbkdf2_sha256$260000$uswCLCdo1AxJXst5zDMuuH$oUxNU6NVi9XiiYrnmzMRY3oOvcrT2I+yyn9yNcTC4mc= \N f 42 f t 2021-09-05 15:50:09.132035+02
-11 pbkdf2_sha256$260000$JyR4Ip9iug0MWkufi4E2vw$A06cRLfr2Hvk5TJrdiJmc8ovRniTtXriUDL2RUiMp4U= \N f 43 f t 2021-09-05 15:50:09.604178+02
-2 pbkdf2_sha256$260000$q3zhF35J0Esb5Ueb2hjP8l$lRGvIpNgTHxTZkc9FzXVfB7b7y08jk6F3Ext44N9wpk= \N f Exchange f t 2021-09-05 15:50:07.975646+02
-12 pbkdf2_sha256$260000$LzdNVV2tZRcj4Up1nRJmX1$LXkT/I5KykR6p4onEqVBF7vJ5MOAmk5xBBdPMJ5LWig= \N f testuser-SeeIXZft f t 2021-09-05 15:50:15.302391+02
-13 pbkdf2_sha256$260000$eHLGJ1WCVmbZgmjwvYBkyl$mNv3+sRbWS1fjz23zNaAAKckVstSTDMgLyntzoRR4w4= \N f testuser-0w9C8Kjf f t 2021-09-05 15:50:26.666257+02
-\.
-
-
---
--- Data for Name: auth_user_groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_groups (id, user_id, group_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_user_user_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_user_permissions (id, user_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: denomination_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denomination_revocations (denom_revocations_serial_id, master_sig, denominations_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: denominations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denominations (denom_pub_hash, denom_pub, master_sig, valid_from, expire_withdraw, expire_deposit, expire_legal, coin_val, coin_frac, fee_withdraw_val, fee_withdraw_frac, fee_deposit_val, fee_deposit_frac, fee_refresh_val, fee_refresh_frac, fee_refund_val, fee_refund_frac, denominations_serial) FROM stdin;
-\\x0c58a20490aa85199ba4a7f052bf9f79c8173893c0721fe9d3d053f48828557727d675194dba38122a18a6e6605d2762bd83148d074adfbb0f337185a05f25c5 \\x0080000399ab35f0d3cda8b5d021691e3b62a464e293d545c21ed2073b90e35d4732a7da8b74845ec160916d66807f16d7df7f602cc4fb67025de7a9308f59719358344e547e7196266f995296ae7c3071da24e42d34abdcb54b19ee6a9dc88d97ce4ada8a1793b14b48359d85837fe2957533b1abefb1d1e34d488ee34d13b9f569bff9010001 \\x7a5d13fe0b10f54c19248faa423f6b032da9dfb9dd862166dab2957ca7abdb901ccf424df285ca683cb95e589993a1502ee9519a8677224aff76a0e6bc7c5309 1644148807000000 1644753607000000 1707825607000000 1802433607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 1
-\\x0efc001c92629cf8aea007c45e3da5bbbcb446df025b41dafdbb29314f9b8d7a3155b755e7595fc06b3665f389ad11fadaeb7775705c57ba1faac51009dd75f0 \\x00800003b98400ecf224d14dcc2def3aca3f926046f95f44f0ea7e5358e02e82691cc530c5c30b1a6ad8fdabb1a3373fe9ae253a6b039cf25a72ba1fe14b76b440f0b41a7265535bc5e7b81df152f42f0ff90e48350a5f394514c6947f3d0d85f74bc537e5578be724f8188aeffe53262aa24cbe1e815f266ea7fb48707505dddee601e1010001 \\x89f54ddc2ea19a5cc170303e267a7a2057eb89597936b530acb629b88881e0cf131c8435e4e7b03c3dd7949661659bdae8f0e289593cc1f6104dc6512457a80c 1637499307000000 1638104107000000 1701176107000000 1795784107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 2
-\\x0f9c6a864286ab183d3ad166ec51d0a3f8efbc0cbce9ce85fc1eac8d592e5660af1e5a755e10dc71203317e126ceab9746dc16e6d1f11e2f63c38b9d314c989f \\x00800003d052b51320b73fb245fc4a1a48f4d63c2230bf5cda5cf9d87d0c030c10f498c7f724f987102ea7d7db632fd74d5372de83c7aaa1505094f8326dafe98111fba69f7990fe8d4dfb6cf691ab1380c359853a531abacbf6df5c95d519a875e48896a03e6ea643edb38a17eb5addeef98b0f34a58f9efb23b80b4e66dcddde5c732f010001 \\x498a9a0e149e3ed85dc7437062d63e7b2e243c5146b43206e767c02aae8b3ddb444b9b67734d77d3e099421a37cef0b29028fbbbbc3b43588c2f72023f3d3b09 1645357807000000 1645962607000000 1709034607000000 1803642607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 3
-\\x10e0dc08cd00ee3621cdf80a3ce736418054ab5a6babc45f0f213a2050377cd7933923cf8924f10ebecedaccc51dc7725d491435faaecaf07be20238187e105b \\x00800003c787a13634fd40c4a1ce5b3a81e3c9d8a714db7c219fa7751f4087118b0f23a66b9edcca9e30eab4c21d18658b2aa6ecca50f92e3a2f390b8b618c60f4afeb6eff543f4ce9777fdd9e75736499cf003fe8bb724232d5ad01170689a911f1026e2e7c616a621c5ff4a9d2e29fd95acb83da04e1429788591cb873cb92c048503f010001 \\x81966e449df5d187854320c55b1fa64fea4621457bd8c211bfcebe4d3cc275587e8ee05bf5cafb8e69402f2075940d9a1216ede39ef95753750e8b6a8ccf5100 1653820807000000 1654425607000000 1717497607000000 1812105607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 4
-\\x11102da8ab8c388074bd0a3fa8146d66cc64caa142af49d608b494af00be8fb448ab77d2a3c588aa2fbee5c965fa471688066b690d35ca230d47d722d3609b88 \\x00800003c3add80779dd1db4106299edc1ecd82501bdd0e8804cf73bc9371c44e729610205edf047e94ecefc722b15590990938f9639aac0dd7ad052f02cc908de40c57a99786eb3757b25ccffb8dcb207f9c1025addc826d5ea8b6679c6644c451a329801e01c309f15cc85a57abfa999b748360f153f39575d62c3051d36027460c04f010001 \\x0a36714a79162f4a1f056b2efd74470978865c389cb3c0c6791662db3a01481c8cdef1a12b5d4bbaea5a7a0fada3b4067a05cb25b801182f8b65ab58fe7cef0d 1631454307000000 1632059107000000 1695131107000000 1789739107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 5
-\\x13d414a2c8920d34b37ca6f22f037a31ce264bf5850e5e9ac554582815283735aeea3b942cc86bd6fd1bc410ab7e6f75dbfb44b7ba02ab8f2e8444064c680b07 \\x00800003cf1c28484603e653d4e8d1045b19b40a555b26a083b40c7752529bfe9d5b39e3c193b9e48281efc3d04343b85496e4c620a6b09bf6eb5cab2f0f9f0d0ebd70c30ed193a6d05e602a4daaa37b158d97ac24ef6227b014be340cf1ef395fffb31ac94c230be686e8e5f5a21e300ccfa2636551c35b136eef9cf90225c4f4674633010001 \\x15a73c57b374a610d0dd370e11089965fafd2ee2af218bff0c07fafaa84a5b94b8c14809d009722d8d6f79b9431ec8564ea5dc632ce37fc5f0cbd0536ac9020d 1645962307000000 1646567107000000 1709639107000000 1804247107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 6
-\\x15c409e230b9070eaa1e377cf7a2ce8ae65e963baff77c08836b3561c58aa3cc2aabd83b3823e90699720464bfa850976f10d36589c4e16719d0336a632cd56f \\x00800003b7cbabc85ad717844290f4f647cf3b73938c24a1ec56e2d380b629d4aae0ca47f245f0c775c9f93765b5eee61d7e0096f91fb6826b4eebfae4ef8401b3f23b5e2bdfd8306ad48895c0c86955bcbc854f9c2313a297723c9176959bfa7e6e16b3531ad2d2e7113b8768ffa7fe86e461e517417e60b325ae95aa2a5a6b74ba3ae7010001 \\xc0706a73327907dd2ad9aa4db0254bdbf95a7b992fda174d8d204829d01e9dca4e764a46cde29de0d5e4a13824840031a8b805c398df7cde15f52e0532333909 1642335307000000 1642940107000000 1706012107000000 1800620107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 7
-\\x17c40adca242ee725e1baf6bf52e73139e1f2fcfd3946b87c9eedd6be53770a44cb45437c7e9d2ebaecad3633dd6667d220e3db648f9698dca8ae86bc99f8e72 \\x00800003c57fae5558f236775397fd09b25aea9474e4b602e1b96d0ebbdf8a11f1964cee47356e71ce6ca9f38644fccbd76010f9e3d9f3376bee3776e61ce8352d70215d693e1745f0c6df452e5166d8e3c6e338638c40454fc1bfb3487923e8caae43aa96e632bd50aa0482f31d0740150d56d7421d092127b0758130d1c6f044164097010001 \\xbe09947de5490e4c6cdb49d9cddd4b891c772c082a7f5a1376c83dd6ae6d5dcbd0dd3535b6f01e88fa6f98c71331f1d44ab3ef1bd74bd68c5055d4269cc7fe0c 1656843307000000 1657448107000000 1720520107000000 1815128107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 8
-\\x1788e069613e0b367abf49425603d953d4a13080a9af46403fca4198fe3f86b18959b30655591d0922b83f5ed831ae6f1fe2b5627072f31e319aea53f123ad22 \\x00800003bcb255a9a2086fda4dd07a8d728aaa2ef17bf4f7db6e16cc4838c483e7fda601ecff97fd8d383d175315e29081e9b6286d369c4d5868c3da8d89ce1cec98849f22f3db04a64d4d45e5a1f1826e7782df9bd36223c65ee6fe9f40449cd838d002a10e9cba83257fff57f6718f8572a5c6cd039e1db641c52d0986d90841c4c467010001 \\x58cf4ea3739960883745324ca14648bdc93113343feaaec381de58283335f1c77d04330dab36c8ab6979de5eabeaf7a5e21a944aa49b64571d5a3ebded5ceb0a 1638103807000000 1638708607000000 1701780607000000 1796388607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 9
-\\x1c2c78e63144059dc0f735fafdce4a0cee5c307473629de3ef59f35e8e96508eb741bfe95989cfef72f96332959e2c16e0c49aafd4b139d2a660ae759bd4baeb \\x00800003cd8619c75db5c99c7aebe4a37efa02d547b688785537145b7854ee6bae40b108ebecfc9bfe882864447de5446b01c6359c0eb6ce621e3bf8f12d8874ccef3fb813fb4231fdb514ff4a95ae066ee076ea52315a5ba28417f4b279a239f531adca300a66257f1dd25c6f4167a6f0e4341c16e6da8119ad91f963fba5be9db62369010001 \\x4a686222d6cb9648e07e311701fb055147b2583db782b4320dc33f8295eec47f4892dd6a8ecd34a4f68e817e7be7debf235e3c1dbd55a811888df79dc0f51104 1644753307000000 1645358107000000 1708430107000000 1803038107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 10
-\\x1f7c74369fdd6fbc5720f63bf2f85eda5329dbc9559e1a31c8aafcaa13bfa77948326fd823fcf05c5ea2795241b97f449beb09ee88bc12daf7aa255ea82e1ec9 \\x00800003be2f82d3b87237c6dc1b8aedecc65e2e80548d19816032c8c06c273d7174baa54e93e44da603f3b2e873d3e6c7e4dfa10b959fcd3ce22b039b14588eb0c4143eace36b53eb9f8a3808f1e54c3e540862a6570b010affb9157b9ef620e59ab50e134ca35f8ac1dc8b1a3f32f89b935e83f5e6220c7336d6a396d9ae40cb0a621d010001 \\xec3b23720c532536f5f0f499599e3e737eccd1f3a98bfedce6d7957654110c024c948387d5d6e56d81bc46c5788676d9b9f8f9c830153480783ad8a37016b60a 1639917307000000 1640522107000000 1703594107000000 1798202107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 11
-\\x2180e22c511d0be44d5055698b4cb50c82db57e84705103b1a2cd347da5c21ef9ad9f4676b27e7b5ebf23454b4d05443f5c4255e8de1c7bb9eb3a07f53e22a94 \\x00800003e8d0011185acb912126a1b580be73fda98394c331476e3091ae44b87b53adc2c299755b7d5f6a7e3001a3ea667d6bbec736737658e59df6da794725b9e068b22ad2370ee59c5e86742b42a332486a4c40da70fc94d0946578316381d475ec231eef1b7e4ba8a7cde2ea458cc4b73c7d0faab2c3c4d9b3d5adc8868a606aa1aeb010001 \\xdeb7b293e0444394868b56f0dc48d6640327a2ebfac021126111679929498bcc7fcdfb26cd3c08a47a9bf911c36b73a671390b168baab9f696859608816a8100 1639312807000000 1639917607000000 1702989607000000 1797597607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 12
-\\x244c270c7c882e17c2f31bb7c61de08258e3a6747b70e0691cab4958ab03e7a715a4e06aae3c04706889ad7a8cb1fb0e928fd73951725b7838b94fa7ad69f29a \\x00800003c373763211f63ca27635f940c212097fac68599bfc560318c8a765250c568fe9aee24d2922edda7428816baa68e304c9cdc8b08e1c98ee20291485577985cffba54b59efe6d162257bbd588f07cf69319db38214822b4f21c4922dc620cb3f90795b46895f2a789ee1295b15be68bbe55b5c8295d02f0217d41f6d1dbcf4d3c7010001 \\xb338fe0d4f975a97b325348ebba23b7b254c6496308b060ce440012dffc730a188d7ad5e0c46840dfc43674b129a25f6d6170a4442346d9c57f6b7f7493afb06 1630849807000000 1631454607000000 1694526607000000 1789134607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 13
-\\x257c29eaf7363e632d64f5dd761721d16115417c7a227170589d5b36bf82fe3ca35fbac4a23956988c05def1a19be95f5fbb49cc55e182f389c8ad137e3bc531 \\x00800003aff6f717e35c8e99b2961829e6b30480da006f3b99cc4271c4d0c11f5e382c7a751762d36e359bd6fc9eefedc44918dbaa9b8722362b8e31699372da6097f53da365fe76833bd36bc58a6b04ebd55d9b9687b85ca3f0cc9f7c34481e7f6373d55aca8922baca3f31a01d26dff6308750a7f785c9a0169e9af9a61023909a02d3010001 \\xd7ce33d69740c6b4cbb520814c4b68d8fce4b9c4fbf401d912f0d5463846a7bf7782a0d6b2bcfd568f4cd97748b1e79517582450ff9543058fc65ea837f4570f 1633872307000000 1634477107000000 1697549107000000 1792157107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 14
-\\x273cf54b7ee0656823e9e85744aff226218896270d2753459ae9badcde32450fefefe54b95cb8444fdbe4fe2a1b73861213b071b9b9f4f3a0bcbeb6dbd0b60a9 \\x00800003e23f64a2e16a2b18791e585ac4b8644e4088321fdc988d3244f5177e92a63b1a2fed47a109d38e55a5e0efe369a2f3f86d8a9aadb1f92b4ba4a59e6d6f697888938abe51982c883dd636e2310e41e374668f07be20fd39821fa8d51a2b8a25a10761775c2f225064dc43073c06da468a214ce8cf89d1f7a960af20560975eebf010001 \\xcc1e4fb536de939d20510d309c7eaee0e701555294252b6ce800c0a8673fb4b15ff902e90ee2ce3aa6dc7e0b14d225a1b7e1ac9e795e816b7f0fd7ac7b35b20f 1658656807000000 1659261607000000 1722333607000000 1816941607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 15
-\\x2a1479fa867b17999f29318d2e4772d86e120e381e6b97bf8cc34d238bd075a29da61682cb374e553818c0a46e825eb636938eee63100b9aa5ae728de6bc8ac0 \\x00800003ad9accd85fe7ba96e79de305ee29c75d59cd258dcd071972d098d4cc1d00028d8fe379376a2514512168728b406e07d37f92b693f87761a6b9cee293c333e4059f3c1789314c89fcad3daa54a50807273ab969127f3c93da6c6f8cde3aa0573fd07acfbab030693ad77d55760d3eb882d6bec4cb9bbc5c813691b0bad22420b7010001 \\xc282e83b2cf4eba7206a96fc40df16713f5d6bb90dbce29640cb45d74cf6baca5652d01aeffbb43df3bc1e46ff1e818f3ad389e50405d25c46872f95c9639607 1636290307000000 1636895107000000 1699967107000000 1794575107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 16
-\\x2c7c548ffb822ef3936641f36a66d658236f82b93637eb56b5411c1c40feae0353aa1f087da8cd4f01b1b372894989bf87c07c47cb628dc01247f3b56c1e813d \\x00800003b7ea57fa169fe7ef8f2b85ee5824416ca81eec16d5bb09843df485237df026c69ecc17ea6fbc02b6ff2195c46c273e703e7a173e4cafa46e41ddf5ec051fe90e4196a2f0a3992332eadca8c680453680262c29d73c66f5d314109a3f7e202dde125ed8c8bd87f70f8ac7f9bcc2e7fd6b7a7948baaa045623a83be0dbe41cb36f010001 \\x2f20ee2c0b30d3f38e4156141cbf96044bbed614fd62c2ece8a1044f0cba9fd543dbee9d707109ed0f35b16f688e029b52843c39f6f5cc263ea61572c065f20e 1660470307000000 1661075107000000 1724147107000000 1818755107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 17
-\\x2ed431b7f068a19c8106459420a06ec621b8bf697b49189409b46cb941fec5af4979b0479e8a9b9a3ba85d5fb6adb3d795da1ebe78f2547717e24a4494bf9a7d \\x00800003c420359bee2a0ec930e0def3b2257639383cdb67fd3b14d7fe835e31004d227ef394718fa1ef54645a34f978bbbf8a278790a44f717bc6a4bf70e7a80d3623bff7b87ab0cc68caf0d982ac7bc9c037011a504c28a861e73afe269c1b1238712defa1b5dee337432a7724a0ebc74fec4920c7f4003bead74037bde6bd6ee48a6b010001 \\x733c16f777efa4805b5d94287b40e3f7942d98aaf630eea195acc5ae5afb217a3c4d7f8bd1d1c03b997e7811014e2614dd332bfe21f96d44e8d93e1a7149440c 1646566807000000 1647171607000000 1710243607000000 1804851607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 18
-\\x2ee001f44d15200800c3ea72b4fd290974ab6dbedcb969ccb6218629158eac74580b6b767893dd69549227a2d1b8c9104ff30c1b60a7c9699c30235aaea41be1 \\x00800003e35047e69a148aa206124f9680ef38db507c511da8c94728907fb74993fc65904074c28e4a5c4e7494ce8070559ad8d4023a7efb2c3c1e173d4e082dcc07b50f4cc21ccb001a8e7c35ef46408dd12b9b0000ec5404379287a093247296e6c72def1ea526bfa8ba1dc3f7113ca88a45f8d4c48284f9fee852d4ddc989005ba88d010001 \\xb3c1fb471f1ca0c2e0ec5bd86f9556ca75baf779443293592dadd28d39fb8d0d66fa6b9354ef2485dee5845c7207477405d8adc6c9bcfdb47177592b61d8c602 1659261307000000 1659866107000000 1722938107000000 1817546107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 19
-\\x3228465c757432f5457e97b92804f72734e16f31a8a8ebde9c2844742e4762b1d154e2cecdc46a9c1295b68e5759da292566833d3f5b7b18033dc535c96e8fdb \\x00800003ae6c1bc43e71b45e875b90b2f9944279d24c1b8aa2dce0ffd0d398e7e905050ec5430f7aa2f73336f1fc3c6d1d1bf2b350874d3fddfd1703ca774da7f7d4964ff3f3268a8d891f00a9d0660decbcef683af6a92ae865f782346d238d23e584097a7d14f26cb398855e8eca01d49ce57350cb407412d280f592e5008cc653766f010001 \\xeac405003660cc5861accc03a567fb901e5bbb95bc25079c3720b099f0ebef2a105b72c58fc902526d1bea177781df01d0acc24ea707cfce4c96f88b0e1b2602 1656843307000000 1657448107000000 1720520107000000 1815128107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 20
-\\x3360d9a064dd100334f9b29fca7e22806af24d4db8e83b64cd70e749d23b332b6d107d101792c6f7c1c3a0ba5846784aae30a797bbca09cd076a635595e74530 \\x00800003b03e7e3028246e3fd7e2a2e2c6447b3ca364884df9314398320ec4813d07addbd2e0c7bf0fa695a55d8051bb77758148e154b71f044dc6f62b07089f1ea9604065e99f2630fb8b618ece481b7f0929a791ab490ee5e75b418bb8c57002d41df90f004713978f0bc551d1cfd7ccb7ddddf8c7e84139faf1a8e27d115ff0100711010001 \\x803658716f5e401d40778b7aadc184231a1d12e2cb490e7e1d7b3446eb8f3f6e0b94d5d7c9497afdec9edee07bf55d6c76cd28b48e468a0f80baae2b8a9b3101 1634476807000000 1635081607000000 1698153607000000 1792761607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 21
-\\x34c00e2f94040c24d6616933bd5e9cb2fd8aecfb4395185b5572645530ef0b0bfb483a06e9f1ffd1b0bed410237f348ff7a1d6087d410c2d3f7522522409bdf9 \\x00800003d2c7075b94d73507fdb96553a2b44cdbda7a4802f034bdd12541ce6da1c21a3ffe783306d74a8828a8d49f12828dc3e11928d2d69624d9a8a01f22035b4dfc5459de2bb5b82f38657fc60a6255f46e3754ec6da269f95250ed06108f5bdac249217ff68c9c5062d97bb92670a60526b6d5b8dcb70c4f4373376492c49b03dbd3010001 \\x5faa462a2974bc5defd8f6d21161206b344e0897dbed8cce7656f69e5664e6e892f9a079765afe3ba71e3efcf6ada03cc6e050f3d68160b33ce9dcdb201ca30a 1649589307000000 1650194107000000 1713266107000000 1807874107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 22
-\\x34845489285480ccedac08e7c6e42930c6c484436d23df225f0a6ec924ccde24e503224312c24a4029029e73ccc96e5ed32a97a279bdb5c28fe92899fda729be \\x008000039f6c0b12062f912fcbcc1a1e9f7eeaa862a4647d1593111f40a49f4d3fe7c5929b65d71566ed218dd5428ea79d3f48c1a30de3163d3a4ce3fae42ede6f4e61ab0fd4c20f41adf32b9f8018e6a7fcdc6847eeeab7faee9bfebbaddbb40e6537b991a22637d66efb69235a829990e3379f07d4075b0a01d196620a1d2a00df9a47010001 \\x3c742ebe07235266d6819a36129d5209b55eec959e71f9a8d2bcd5640debe3076cdfb4d5f55ab1bf7ccc40d2e9a4bfd349aba87186d2709d46dc089c1e5cb504 1655634307000000 1656239107000000 1719311107000000 1813919107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 23
-\\x35f01084c39cadaf3a727d8cd33b8ba8e188b3554eedeb41b2567a83d8cc691c1653001173180a70fbd99ca2d817e3507e4270cc60dc0dbe36a528d25d93388a \\x00800003d2b3b95f50a91d4d30e74794b91cee7781c4f2ff50e8eba098f74172ba2a608359d8314e5ae6278a9f67eac1debb953a2c2e25a42971ac3f32097b8075bf39b7adefac1a9110bc1d763cd229cab543adb415e08a44a16ae49c5101d6fd8008dc0f64012296f36d57e084b4d1b4d03a69291bd5849ec9c1f463dcaf7c9dadd553010001 \\xa0996c9fa206afb0351bfd1a3ef6953483cf073a0425165918d3a2d2635e73e07b9a0adeeebc16dfa8b37bb89be16afbbfa62479152aef2b5be72c1d2397f306 1642335307000000 1642940107000000 1706012107000000 1800620107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 24
-\\x37f4f71166481c0ca18fb036820b0757bb09d7d8c24d62093b0893e975e9e34eba2dbcf7f63f44651c71635c9de9b45aa8bca8496b3913c90f720b95ae145413 \\x00800003a8b17d84508e8393285f95464459d0adebce5787868109b9e3ae2bcbaaf0bc052fa1da0abf8c28e8e805bccfdc7fb3273cbffcb0d4c348c2a3c9953b611cbf0a4c1480b59da37c2fb99d49b8c4d59b151fece9540a6d2c801a6d13ed0f44e38f7f69033573eecb217b0442d2f8cda3ad4cd066e82686c3a598de14423c793e5d010001 \\x39c627e42a3c0f0bd5ea2fc0fd7f88674c5ecc86457453468d5cd424e404e94da7c41624f7b4968a69b54e292a5a01bed39d561d363007ae17e0c5a6aa28ec0a 1640521807000000 1641126607000000 1704198607000000 1798806607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 25
-\\x3e2cabc8a478242e1fcd0550e5af41fac57f4cbe1af245060e8850b0254a5b32597e8407ba085f7aa4745c84749cbcab7bc4568cc6e8c22b0d7ec6bb0119f945 \\x00800003a1aac6817f749c2b7d1fc6087397c61b79bde54c7f1ff2d19ed753ed5ea836f360464968bcfd014815ffdf4ecba5e56de03d5371af83b6adc4ac08b8ca6da0ae555ad8e54324c2fb8eb1effb3c08d78a4a8db20e96f17926cc8a9bca55fc759aeae31195fc65ecc3a70314a8a5e6ebe5cbd0b180b84dfa918e7c8f175be2bd49010001 \\xc9d0d186bdd61855b9a9e2c1a4b98646cc9ef4ed54bcfdb3d7f6389299ddf2bf3e0ce9da79705961925d922f57b90edcff16e369fd0f56266c356a13edba5b09 1658052307000000 1658657107000000 1721729107000000 1816337107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 26
-\\x40a8f9aa031d4ea96043521da1860ea9171ac7b86e77c395ea79d27b0cb8aed4dc847d322711d376a2f5fe64895b5e766d650a5032857488df659e882a3c13f4 \\x00800003b53ebe2b0bf18cb63a703ec3ecd3ed4557780383e2f3f51b97ffab10af3136052ca3fc49cbe4d3ce3f62f0f1a6babc3e67e180961616e27d4a551c72b58a2a30193f1f4d3f37be7c3cc3d010ba4eb7c8c756dfc350a0f8662abf7df873ef202096966bf7e1faeb33a0cd5f675022ceffb9644074a8a9062f8fbb4485824d4859010001 \\xa49c6c20f250043af4c9baad1c06ecd4abebb218ed823a1be4961c7f998aa54aabef3a3f3468c14710be19e7501fc3bc55406ff2f362de660f8cb7a943c0230a 1647775807000000 1648380607000000 1711452607000000 1806060607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 27
-\\x42f0b51c1f746eca4926f4157a079ea4f675be0168c1be9e9420c3bf48b2392721ccc5f4e1e9706c4b3b12b1d37eb7461d9ad738ed6189b8264d9a5dda11173a \\x00800003b453c645712a09ca064ab50775ec7fb3d909e9dd23a351e2b389cfe4dec29e3766fb27a1238103ed653f82c973b0755b2be34faad01434ba1cd7049a66132a1697d0086224c7646ff6d2b9c4cbd151ac0b7a4b9db862f175242309b023fbf688e40167a581de907799bd1b4ae49dd6460e85cab98cc621413b63d2eef2662fa1010001 \\x81fd133d808b857d95860ad796a71875d6e669c3c16e4ac33e9790d506a9353e5b69491a1d903a347b65275490812593cb6f2fc18aea2f9363786369d407300c 1650798307000000 1651403107000000 1714475107000000 1809083107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 28
-\\x44f8929c44a22d85d52b24d03c0aaff5905afa05daf81c5637aad8a3c9d287990eb3407f8b2421a6c3dad9b7455da2d56514bd1a90002eb1ed6f2bd95b4ef1a3 \\x00800003d5056f76a306ea9fedfef538599225191522b5a8db7b5028819f570f48d39bcb27af5bebf33870be25e2b264dd816ea8938b23cdd0137c8eab1dbc54e28bba998c7156981a556eb0cfae32ab1cf63408898a83a8cbd878852e658edffa7b0af67a3f150bb3029962bd2a69cd0751fd58943352c03fbf581652a84580a6b28b5f010001 \\xfb2030fa1dd7d7e603fd29f64eb79d6ca731ac8173fd8c26f3729d6e69827a63eb7c96c106069ba3ce7d1717233e2384c7694c1fa5d4f5c82a83961ac108ee09 1659865807000000 1660470607000000 1723542607000000 1818150607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 29
-\\x44d412f8e68f16e36c3735d1d2653fae64a26776cf78b8a323103c745c59e19a52c909a95437ca22adfb03946f6e374e0498d76e83a170b8171b27e81c694239 \\x00800003c30c795c69c323d06849a6e1e7c20e20968df3f0138fc0103e26582cc6728cf0b274b03a19096e44030f18c69acdfe8943b85d0cad43f4afffdb08f5a3e457fbd687a660386d98743399c0b7c88f2f08410145e7a507b43eabd8aef4e39de36395ccab672360c33c0babe8f604dc28340633151c88f5f607dbc8942a53c1d923010001 \\x7c8e1f37c4006125d5b0511659422f08c2e066c8de33e650a755e168a64737a6caa35b6959d8e80b428ee7d56ad8bcd80a6129826626958488881e620b1b4a03 1661074807000000 1661679607000000 1724751607000000 1819359607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 30
-\\x47b8d687cdeb04d39c1ab01b68bb1473fd5ba2d95a9cc4c7c799c192a99ffd7dd7961472efcb9a289e5e09825435e1993e7aab5e8e80158706781d70fbb12a80 \\x00800003d5d50ab14178c9c75b52c00ccaadd7e19527e5efeb295d076bc8cf307fa140cc779f6afc6581e0d82e48f1eb461f97a26c2e333619e7666905d1fdee7c734cea0e024ac87bfcd3aff4afdaf382ef70314f5c095ff18e214dfea7515b7e2782c998e849ad135da250aad4d6d9695f80366358659d8c705d3b4a3512a5228affd1010001 \\xea4bf296fd721a3522d1adf96dfad0ba9a8563745f12881970f04421ed654919699f109d9a3f6135f49edf112a966b8ffbe60b3c130dea06f0c30265ed0f480e 1647775807000000 1648380607000000 1711452607000000 1806060607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 31
-\\x4eb0be9e036db2b536d08e667bb2736c6b307bf1432fd2f88613e33e4b575a8e479a26528747ed2cddef9eeb34541c28beaf85844094d25f6693ac98338249b7 \\x00800003f0fb7ae063a6540d1e4d54a7368b6955d1f291c7bd1974ca36ad1c10a4e61d26f26f7a1cd9ed60721b002a767af7b105a6d69850bd28480d6cd0a759a9f44f26e325e4cfb4654010272463d651080ca8d52af436a1006a24de062c43c27044e7cd4959e5db24f57ba71f562db9fc9e08e2eb12a0f4ab20cd9060b4d5c8ad86e3010001 \\xd66dd6b465fa3677b88bf26e8a8466cf677799fae2ded09c137a7e00a66a14341f59409ecef3e42508a0d130a81fdbc7a28ed568b70b735e250d79997d315908 1655029807000000 1655634607000000 1718706607000000 1813314607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 32
-\\x4fd846b9c7bdc0a6933a545ca8419a4bb46c2dffa0ce3fc5620b7cb5182e554d530fbc7f061fcebac8f3da73ac139280332eb924f18537bf09d67f7e335287a0 \\x00800003bebdb2f5f00151c699ef939e68457f9463464409fc8587f1ea277bbf3a793deddc02fb34a0d80e6feea29889c648258f983528a83d75214d6bf86e05e5eed088e00c56b089f127e05ae9de614f444d055aafa2a7b22361df31a08bd262b10b8dcfb3ccdbd52361affee724f0567eda5f1b2411916194e3d0e988c6709d854755010001 \\xe46cba3ad3608a5f2df90d00302f060d7ff5572f9c8699bcdfb46a8a7f8540b807cf66c77f0119f54e014b41102e76e224f12e9983793f6b784ba6ac72768805 1654425307000000 1655030107000000 1718102107000000 1812710107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 33
-\\x572c1c4def36298d444a1adbbd47410d6da043e60f2b4a562dd835482762f233de59622c7219b66d923111478d258538289ef0db3c5122c28e641a4b9526c54f \\x00800003c95fbb91def92359df605b0d04a285cb4952fc9c7e0d5e792971ae4fe4ea8c3fb1b81c1a80d5417224a14ef6aaada7882da202e1d705ed0beadfa66d7d5afdc2e9777c7b20d150fea898f8a15542e82d29df89cd9a59c4f3da282a1e81b18888d01703fa5d4efd3ae20e3b42eb1d812d8d837b1f889bfabe1c81e1a22e411a31010001 \\xf297e26689e2b0d0eac318471a390f23ec2707f527a61e43d459ac1f47c2d69ad361e2f2ef544e5ce9f79defc61595424e322dfccc33dde377d8a0b34cb4480c 1643544307000000 1644149107000000 1707221107000000 1801829107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 34
-\\x58ac6739c5218258d0ec082138e407299693979e13a98fc1ced7a1a2aa94c5286ac804b231527b048f08a237ed722950b44629ba5644b5a1f86c7da5eeae17e2 \\x00800003a8576d578439b43d0c9b694ac076a0289f84b6cb6203dc693030609d6c420af76789473c5b5d1650bc8bd768975e02b87fe25b8dffb68a813d0a3af01163975692c5e0d1287b70e6e5d0db1814fce83e31a4f5dcc5ffd18b9958f78c7b11ea7781275ccf2959c5450d8090782a3ce1f20fcecf4746ac481446689b717ddc3a0b010001 \\x66b56fa50c68da99c892fc0a2043e5843077d830257ab8ce58f4f65a5563d237c2eac9b56eb09992e531206e5568c2f6a00eb50df06654e2f8c4325790f8440c 1641730807000000 1642335607000000 1705407607000000 1800015607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 35
-\\x5b98fa808513e4eb65a9c189e67bc88c70981df6e6152b0b5295eed6295e13242eadddc3a933d7818bc4e82e5333fe56087f26c56aa7d5bf9da0ff6bfa84769a \\x00800003c9a0380906792f4c23e32aef0b2c7d81174dd2202af41c966f1bd3ad65839b8a90dbc349919b2ffcf23a4e7a45a3388413e839b64b76088a8b49af2df868e295e83d521a78f43b9c7f2b15fe0c39e6e8d1ded4a6212408fd7f02453a381dbfb71a92c0a4848d1d2eb512c5a321afb961310d7bd5d9d765b990121a7dae284af3010001 \\x18b3203825ba1ce1727c72a4c5f3f60536e42c8678aa70cb6839943f45eeb881baa2002a2a31f7e7551bb02d87fd7b2d7f773d43be43686a5cf34310caf34b01 1652611807000000 1653216607000000 1716288607000000 1810896607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 36
-\\x5c2c046fd953dcdfaa1036369c1b2d2d1b1d47cae9882bddf82e2a279c5c2a0e8a6708cbe534049eea03c20f35ac1b48c57dce2ae6a2529f5ff2c7219e65842a \\x00800003bc4cef8b2c198c15ae6390537ac1b64c20b102337e9bfb9401005e33ffbc614e56de40ad4f20bd262155d5c0b1f33ceb1b1f49f3cd0c5ff500e2d850e45edcf41cfd07858305b5811e074131da207ce5aa6b81290ff93de1051d4617534b7e391b8710ea934c1187f3edd68ebcfff361374228cdda5ae6d3b8c6af3eec4d2457010001 \\x8fc95f85c81edd7c508c693038343763532df4eaf44533df1173332c62f5fff842e3e0d1cc4dcdbdee7dc6ec445f98e9d146c112439d5b72cee7f933a586f905 1639917307000000 1640522107000000 1703594107000000 1798202107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 37
-\\x5e044482ca3ab98093e2f1a7b274966dd29a29d0ee8557485c771552ac35a73fb390537ea49490358384b18f5c79ff8e9929f8acbfc84ff17fe5ff5eec84257b \\x00800003a3970f8e05456558750a3ab364145780e38e1d617e192c40b41d91748fd97559f53a9ba8c2057c550aa29668212cfd98b5f8681aec4a03ba793b6689ada1b46766cec0106c0e5ccb034f01d338d69711a7f67a4ba703e50c3e5f11c2108eba80ec11b11e0ef873d891e4387f0b7f7dad05cd87e9c933b6aed5d1be7b5c8035e3010001 \\x965d34362b51eae0fee1c25f6c1554245c5ddea73264cb3b5a3fb62e83972dcfb13190a9bd8bb248bb3c41a25edb598ce48d7cb9623107d0915562dccf34da07 1632058807000000 1632663607000000 1695735607000000 1790343607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 38
-\\x61d4e23402d0ffd661ba0f0bba82932557e54fbe821f70d8bfa847be3fb96812d9d6556e58407998976c3dc5f312d49376fc824a69490f865990070bc73bc517 \\x00800003994f6ef247f602ad88d66d683c198e9d51f35203f18f1c88a7d753a599a93c2a8ec083d345b113c81a0bfc4df4e8fce7348ea22fbe3b8db690fa2f1034939a1eb02e4e45996cf0f091a4626ca06775f3c93cbe6a93f31cf964e9c4725ec835e30f1afd38111c16059557fc6d251b53e3ec50a413a82e279debba9547be3fb867010001 \\x7f4e9490a57be241299256cdda4a7c9e6437837753235f252b519201a8b08c7e94437285985643d158e12cc7735275804035ae3b99db5acf3f78c04ce7dc5905 1660470307000000 1661075107000000 1724147107000000 1818755107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 39
-\\x612c533be0736e8a9bc9b49679a08d67b58b6872502186cec1fe7e9f6694657881955089617abd1afc38be12e75c44f4994a1b54c8e873415e396d51806f6312 \\x00800003dcfcef9ca3d0e95119009c5cc25e2820d12a635b89cd063c72db7981b6d6c0437e4a7eb6095a0decf9dd846a0a2b55487a2426faa06797fe20ee78622e89d01274f74b1e01be97b61dcd4c6f52618343eb24f910c00b645b4ac739521dd6e5ec3895844df23d414e6edd88ad80948f7843415342f3bd082f223580242bc1bc4f010001 \\x23c16e0e3914b31f24e46c13089359b1d27471aff9c9daa28633a331870deee9347cdb990569a5c0021d18cad85d652ccc22c68605809cd87d6eb7f4f0608a03 1659261307000000 1659866107000000 1722938107000000 1817546107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 40
-\\x616c31d2caade7970d7841abcbf241188a223664be55a6d66c9738c62ccae0bab3bd688f6fd92f68cef68cbfd152664858f5ed0345c10dd9c0b5cef990158949 \\x00800003a775277c494f172413d2fa8d9d6f1d9d1528ec30d79fff7e80dd2fbdadd9a4f0e70018d22a10753bc7683a5822a1516093b70a8103517061bca7b39efc484c6a05fd753dedf57c73df320a840445857536361280fbda54ef76d26cb1730781bdb230f0b23776a6f335a7f82e6ae41004e36034b595d0e296ae56911e42d5763b010001 \\xd786e3f5db8cd4edd895077962a362825b3f7f97297cfd7f56008d086b73c5a94b090d39a4974ae726e030cd896fb743dac42661417cd9806a853e134cf36507 1645962307000000 1646567107000000 1709639107000000 1804247107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 41
-\\x65301ec825280322dea2a74a792b94ee6cddcec89c63eaf28c846aab2410dee7989a056072fe84a741aebce7dd23a10f79b02ea3883c324605ee20687010863d \\x00800003bdd9e874749d437f4f3c3f56ada284213243196e6a333de9d72a02eb79a157c20c58c6d41835d3136290b0d9a3aa60f7518818da1ad8e2b685b306ba6aab5147d1fc58693faa36797176018e45ae9c69aedad356712706cc56c62d5cc65ee47eb5bb624d480570d14ba066f42aac9a89c10fc95180fa255e4298aa10ebd46d3f010001 \\xde8e21c8cf531df794916ed23a1086c4f320ae00adb45724b1e2348540bdaf982ddec032e45a388c55276fc2073db4988391338ebdf79f0dc9b8a4683dbd9706 1658656807000000 1659261607000000 1722333607000000 1816941607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 42
-\\x66f8eabd8b45fa3fefd678aaba38401517351cc17c0e5de5a77871940d1eeb3d88c73c06ecb8a7a4c435a3968dc1c64e1ca810abdbb43e54d49208e8031cc4a9 \\x00800003aa862847b46038cf1e619ee914e8edbd08d32074e4f7c14b24597d7db0d1ea587d64a48f9e2091a4e7043159c8d6250cda9d8b84e410433c8b0f2563cab255eeb68096282ecf04b36aa8ab86e2d45d4ae60e61d871ee9846c4072f608a648cf057072480a9d312db140ee5473253f8ba4851f12e1333a2727116943e6c6a801f010001 \\x4e52a226863c66f821c1bdc2c581eb4346487db3b49cf417eb8015271859b49ebc60bfd09809d155d44d4064b6ff635d7c6bb291a3572251fb2c5689dd984d01 1657447807000000 1658052607000000 1721124607000000 1815732607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 43
-\\x67900a9ad6a6ecb62d5befe422efc2757f9799770913077b740fa2507e790c5807580a0e236e1af8a9cf4a9a30b1463a68ef39186d04a65a5c7eeffa83aafc13 \\x00800003df7084613f5ff3d08cd13fa8aeb38e47bacdd0a5fe50c0bac0d9240219e4533528c4bd5bf310bdc7f60d9a37d2b08009c973bb8367bebf437295c406cf3f4f061f9b998bacf51bc30b47e600538b28dfdb2661c058821ff38c1ed1767103d6521a7897d75d236347016c4ea64ff905ae04258f083295d5b7de6d6ae87ddae935010001 \\x3e7d2e43d4a77a5af7f509da32c0e7c4b745135e237d4635845f28ea8cf576adbc7e7387f5aa2d78f2dfa5bef70ad35820abe5b81bc4c4d7fd016ef82f389903 1633872307000000 1634477107000000 1697549107000000 1792157107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 44
-\\x68c8d04942b1c98f89e3d9134a1a824b2064c2b2cac1d893f943e30323e7f8d317fe56777a40dfc6d31555b49c5fa0f8edba2670d2934a6699855778926d5c93 \\x00800003ca3923719220b5c15f2085d4712633ef0cf293baacec7a42d2d95e61dc4c1554681e889ba7a61fa648543207a0b82e062bb6df2c6e5da8b992dbd1e323640e2a512a59f9f7ae8dfd05ddf4ce914cc3476461aeb0845645252aaed240121fb2d70bfbe99c48d72cc2d95df846925b799073d44874ae6c60c5dd7e3cf39efa264d010001 \\x6a82d971d5bcb49c20de3f1e6d4a10928b0df7f3e182c20aec4cfeb70c604ef07e4563217e3185165ceb1297af98682424744712c69ea7bbdfee68ecf90d1f09 1660470307000000 1661075107000000 1724147107000000 1818755107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 45
-\\x6ba433abf8810afe9d338502b0a6f30889bafa46eb9b93abdeed7a904fa2eb2db99b84950dc349edfcea43e730af5e854ed5c0804748871c254563cf1fe907ea \\x00800003d07f87c186dd86f07abdfa65db35014dd92436858e69777e8bfa690f27be1264b5ad467400019894e2c3da7ab8fc3977dce8ad3b339f4367add05125715edda7660efb8d15263a5f2263baf0c8cce97077550b3fc1b83ed4f8800ab0d3c4ec3262e0ffb7550c55bc4edd6953466c72019b8db636bcaf6f0553881d75996ce0e1010001 \\x6a8f1515ef817bc3a33af7d3c9abeaff772895831bdfd56ac0dcfcf52a1f15cef34d27ad12b6405283c69ad255579fc308a2e1025576c55fc5e684ca4018230c 1632663307000000 1633268107000000 1696340107000000 1790948107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 46
-\\x7270c78b0d81e8de03e3b55e9e2fa309b62e995cb08ea0b3bee47b79672cd019382cedc8e156fbbf825ce33f09f06c92c694b83074ea5d04b9780923d6b4b0ae \\x008000039d4a9e174cc3ff2b3c2c94dd24cd0c9b512a0b0fd51f22bee4d23dc7c6ac897cbe0dd26834d0412259d980606189d3cb0c04d8328771d0149caf3cb39b9c0f17c7e9e1695424808d1a26b5bad1751b547076101818ad9747353f5516d40587179aeb83f588e055f430a1afd09e2fd3b968160f057d375786e96fdda17171d2fd010001 \\x5ea78b2388adb1a9d4a5cd5a44ade0193f1395692f26df96ae8cc74b6b3b25ea2a26011d1388bd0b48effa4df981262acacd36e0ff2827552fb2415dc07a670c 1644753307000000 1645358107000000 1708430107000000 1803038107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 47
-\\x73a463c319fce45c11b55815f15f0f07aada1148f4fed91f3b60a241cf0f4d7ec598f4f5263e9304fe10ca9e2631fc4e3445aa78b85a31a47be8fa48056416cb \\x00800003b6eb33bfc3dc73d00b7af82acc43085602bdeae4161544163c6a4eacb9b839e153e18fde0fc4ae0505230b48ecf608d629d4937cab9efa84a1d5ca7056c20f1aa5496965550e65a6e5b1a3c79e1391ad35231fdc3f381ce022b037a0a7b819c58f916b47a87962d3c1f60549360a86fd8277a7c39395c3f08b37142917a4173d010001 \\x1eaafcb1cf3872e834e71c859c4deb54ed28abaacb69d8726b70692f8129477e787af5e4cf5ff4562a9e508a10b4b7f7ade2305b8b04f0cb12274b1407e5080d 1655634307000000 1656239107000000 1719311107000000 1813919107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 48
-\\x777c3f453cdec285151f557c2cfe496dbeda804dd097f2fbfbf94dd665e3f396a3baafb741fa96d6abbeb75b8956f2148652a2142cee1a468d3e50245e2c734e \\x00800003b49b7b8186ef6e3a6bb1600c94e72b4ff518c1bb53b56262fc4b4a231e6223d12e45420b072dd462e494334884ca7b0662f3d56cb26deb194eb2927324cb565082b73908e956cf579186d0edf31c1ded640829daa61fc6a8e20d3fb163ce34e961d1a38c81020086c0f7edc4a3fe2aa8fec1560aa00411e59b06ada2fd414cdb010001 \\xf6fab0fc9d074b05c7e2c7fdfa28335565aa2d076817e725ffd0b766c1629549ce217dcfe94a4e8b7887b805e897a1e904a7a7f2783d367556f3ad36cb69df06 1655634307000000 1656239107000000 1719311107000000 1813919107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 49
-\\x7bf496515d3a9397a4fef0274542cc865d2af860f5792d8f7aa7e19731bdd643ddbda49d571e1377961e23eab69baa07c9bdd1b513cce424b9b15d2756267c8d \\x00800003b6617b3ab2998dd01d2be5c04ab428e6f0323c55d56b78c3269cc7509ee6600e977164c78b6171d2b829681ab34bb6c5ec8b010e3581cf0907878cac39334bface005f6f4f502ee9b9f81f151deb371dbed3639286f95c4bc9dcd148094bcb1d0f7554cb51a378811d7cbf3a23ae9797269b675c568180c2d7e49f40968dee65010001 \\xe8d4db570a7e6a94ad91d99a3f16b28517d681395acc49e1e45ce24d15d8b8f3ee7c58633beccf896728ce8f7c165fc8c88d93f7ae91bc0b4ec3329ceeb6c609 1658052307000000 1658657107000000 1721729107000000 1816337107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 50
-\\x7b50e60bb096aedc38bc9087ad6741f2c8f4238f4f7f57688b846a4f6b914bff4e57010557424e3787ecd65f0d1b8e5bb17fec3adb22f03aac5c87ae30e7b055 \\x00800003af1e8e93a4bea7a57f1dd359b6e07761e18a2f6e033c8490edfff5b587b77d115f86e1a4af507427cb991e7a3e06a4caa9bbad6166dffebabbe79669f92e0bb16c85aab5343278633396b4198c061011c2ec944aad181b8fee79127f8af3c4757f28f66e62876c3bd6573c265c8cba02f22010ab5c950111915cc5c3eec76b95010001 \\xf7ff0bc2efef0e6aeb64f31426f20afd6d3df751ff45d01c196934eca7fd47e1a9f6d21dde2b09544564a14c9b4efd5b98acce46705716e845fbd33e4847d807 1641126307000000 1641731107000000 1704803107000000 1799411107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 51
-\\x7b28942e799a2f37c7d612e2bb438f181cd446abe66957cd19b03186f00674623e5a001be79940f637a3cc59e1afb88a9daf3240a6adb1df5401b49e20f9ae6a \\x00800003d33fe5db3350ada88d2fd9dc4caac031846e5e02f2845029fc9145fec31d12d632057dec122a1b9147f73eea25697732bf47193d66aaf6b86cce3ca36e3d0d431e869cc61dfdbe4a4e035acbe66ffe13ee679a396ce2166ca58e0484d32511df9684cd34ddf78e1f746c656a9e3d2a20683783be0d18410c3549bfea7600f281010001 \\x8dec9c0a4a11f455bd729d63a3d907e9b358372129c73af2fb7752aef89dc7178e45344be6111f9793d49cfda7ce7e27b44da41c238d9f3275916da82048010f 1652007307000000 1652612107000000 1715684107000000 1810292107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 52
-\\x7e70f50a519be768cae4dfea91012bbffff2aa930dff9dc7f244d56cfaaeb15cd1a403e0933ca8c41fc52dff4a341a05f86a7c3ee98cd0de830588e4c8c5e532 \\x00800003bd941f15a53a8984f287715fa16d8f0ba5ce904f922338b36a9c1cd8108659dfd3b8e1357b1ba733ce3b8e8a6446838e4c620c07347a7e2ded0c830885c6a5d05b978e11a6cad0a81a6b980ed9025c98095486de5a92c5a64f47500a6f14fb2f93d70f5ec4fa391f8424173c8ad6b5e25926e23b58862d664eef8c1567ba9f21010001 \\x26f7d1a4e38062d666f3297b5a9ab33c41e0aa23b9384ef8f78db2bff095ec2d39086aa2dfa2b53aa7d4d27ce4dfe6c51206919f94b949668ba304d50f47ec0d 1636290307000000 1636895107000000 1699967107000000 1794575107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 53
-\\x8130bd72f94031b4f1dca8362e53d4cff13580f81605da6b05a28bc459f20a7f313762b76264c0200047218ad2612e4bce1336c0e941f1d3d3e37babf22c30d9 \\x00800003bca05c2b18d0b97a8a157aa821f261ace3b1da58ca45db4fbe1a12af6c011bd734710fdca14d7d9277821227b85f0628e1c1a9280efddb2fea32a493063c03465ba19e79bca761a1d484772971d94dbd964b7217c9adf4edf63e0f98b22adc88274994aa65aea23b51d8d6831ee677982ea82b6e28c02d1b633c08ea5bbbd683010001 \\xf2ebece6d920256f753ca60e82eb23e371fb3e1079700b580b1c49b95c616b92b01958f6781610b8520813a41caf7157dd1e5c051fa2b9b08488737905c38c05 1659865807000000 1660470607000000 1723542607000000 1818150607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 54
-\\x84ecc0f3c3ba3f62670cadc517af43786cdb68ccc173223b22bf26fbf6005c80c8ebe49cccbb4a334383144fd8018db975bf700abe7c20e61910cd8100c7b98e \\x00800003ccfb351ebc3d68dc92ddbca33157af659b01e91f142a0fd6a8824873187c7988299de97ecab5ee4350b690139dea57b6f29b67873cda5e4ab2ba7082f27f07501a22b7a8d6b5e9f4cab26b8a01d8e4327c3e6a62374fad6ad30e58bbd700fa07861fd30519b27ee4847d87873fb133416e4371e1f0f07a07f0addee177a9a569010001 \\x35243599b93f1a13e7c2ae3751837f1762d719659083a50edc044cc3ce506ab9f6b622481ce51c24093ba4780983a4faf325af9c37c5c8e80c7481ab96644c03 1633872307000000 1634477107000000 1697549107000000 1792157107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 55
-\\x88e800039c9f8fbfdaaa145b6302844ef62ba75d8a9b419cdd0bfd4c639eedc00448afee016d50591ab212c813304c08e71b13496f1232520d606090004709ff \\x00800003a60dc50490d04fb111e9ee11ca7807b6654fff59a1e3b5b52f7c54749968026b23027b88b9c40ed3c9d3a32ddfe0be8334145ccb19d91e7ebb020b1e5f34491ce2b76885cc9e409869e6c45896b5324fd45505ec0c44b40d22d4ff8b0ddb05f7d138fa09ff6b1f264df635f0a0b1e4badd810b7683cdd4d51597ba034e9a3063010001 \\x83fcf1f24a3cf078222fdcf7929c9ba808ed208491d3532f013fa1023a1a29c00adb81f6c2ceeaea1131f8dc343611e88b4f829e0ceffd8e65623ec053c73e01 1647171307000000 1647776107000000 1710848107000000 1805456107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 56
-\\x88e01d096bafb82f64dedc96f5b8e7952b27ec3f74d5fd5065d94f93bb665e35893a84ed72181d8e90648ed257817b22c4da89e9f6749f3be5ac12b00dfe3ee4 \\x00800003dfe601eb8dab3c89b73f63b2b308ac1533ac10b02880ccc978e01b0553a67a04fd262fbaee203238f9100549ab266ebcedd130bbcbac85cc29af5bec614be7a28e034fb590dc47b49d463771c271badf2ba6102b1c9c7a89fa35aa6fc9b1eac82d1ced0b9f4edf9cdff863b52b9cfee9693b9ffa018b684bb999070f1b0e4adb010001 \\xf33d0c54c76dc87cf9e28afa92dd3a572f7d71e57a0ccc7c47114b5e694d7d0d93ea6b7352aa79f7cc0b00656572a65506cf98b47999f3af96b037cfb8b05904 1632663307000000 1633268107000000 1696340107000000 1790948107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 57
-\\x89bc8fe465c3995f176ef3c376538c554bf66ed1446fc524759c6091fe66a462859bbc6e9b56703a336d3993a3b497b459c3d2767cbfeaf6bfb8ce69edfe680e \\x00800003aa7202843fb20af865d9fafb4ec9f34304b74d698a57e0bba27c651b643bfebd28964cf808a686decb75e826f75cc6155d7e41782aea499d93f8dad82ee48560eb64a9e103cf52f6b37e4c3fa8f850e59b5a95bd766dc0af7e78645509d329fc74d77d5cb485667152549524f36a9b0c4bde3f1bbf5746126e39f531efab3ccf010001 \\x4d2ec064a43c358b335e50e10aa1543e45542296bb37f843540aed5ca39442c79f2256124bcca0314a9a21a13640cdf7065adc034ba4abf813f500d81a314100 1662283807000000 1662888607000000 1725960607000000 1820568607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 58
-\\x8b5c6e8d7613a96f483d2231e15a4401d019833cf888e2a0c34c334cc00127d9628db10e013e9a1729f8ae9edf74b542f353cae4764014af496ba83f195ba2f0 \\x00800003c76f2300e2393b100662d1c01ccaeab651c1440fa1f0d664ad1f9d7ae5e890d143adfa5e2e5c882864cf1bfb014d5a9ae041df305965c2b27a5e7bc9ed63b7e116dedfac16677fc6fda7977879e07deff10da6157d1dfcb2643dd46c300660b3c46cacef0eacdcb9b0b70b03a2184307ec9e1bdc20875fa81ec69da262f3935b010001 \\x15d439fe44ab0c8f44ecb7bf5bd7c16cf1c923501991f5df5c62f820afa9bbac119fec1cdb37c5d47eeed3ad320f4096b84ba6c0cf3f81875f0edc9b61b8410e 1652007307000000 1652612107000000 1715684107000000 1810292107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 59
-\\x8df0625308db083b31852bcc10c15706b53d32d9411109245ae44e632c88388e30dc6ed8347001d65c321572569ceed915e1bc4953983b13de9e2376fcad3a87 \\x00800003cf3898ad361fdf3707e878319557425fec7c11160284fc7988c17457448c3f2bd4b33c85df88c3c788ccab88941b3d64d1011f8634f6f86d548611a955b757c1f09831b95b965ae2c9317ce5a9e7c37c4b304de7e3aa8a9e3690598c69f4a9cbf0d7b2d25ed1e6110282209e67046dd38b57bec6c853ddd88ebda09e50771e73010001 \\x0017a3d7380e42ae8506b6e9a661d4c6b4d5ac852d0134223651a99e78fcd320ecf6043e24577d405ee00bb69358f04fed707a3a8d67657c93947d8cb36bdc0f 1653216307000000 1653821107000000 1716893107000000 1811501107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 60
-\\x8f1cf63f6dd6a608d4c1c0e6e6c608fa956c6556b68655e0b6b233ec7ca303e88f153af348ada68b0a6ec85b436419efc876608ff854aba95ad65aaf60b98544 \\x00800003c1000cbeba5cd166f3eae0e604df2d42865f4d8fdf5c41ec47b312b875d6ac95b643127e69ce1e941d5336b73bf9e6d0ed960343ebd4491737e20b1103dfcde58959fa37ddd49d00ddd2d6024111643e981da5db49617d8966327c0abf623fbcac23677c01ef47ce1739a54045f339d3782da6ed1ac1b5b891c4c19948d86b3b010001 \\xf868fedca406f197efbc98a586c0df66f2d4456c333ff371d121db089c82987ab42c5dc97d2418a428d2e5d3060b1f03a5e39649f9cbce178491b4c789f2be06 1634476807000000 1635081607000000 1698153607000000 1792761607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 61
-\\x93a4ac30143135bc6a5b56c1101bc1bf52fa77edece6abc1661b24d16d0428df4d84c4b7a69aae1a8e62ee31c16bce6e33d487fb9fa871ddc2916b8311fd914c \\x00800003c2563e7ece764373b75edd890b42e79b1d2eace517ea5d169b2485ce57593feba9fcc6286a4e41b3cf2c9a82456222dfa5eca72812540787309105280fcfe2cc54c0fff6db1a3729c711240c8b7d922548149ca56730a5f42f02b9c2251887c62997160f0b91d9db53c51205be5f08154e5444ae89f0b95a7b2a52ebd6dc5773010001 \\x340021b6737d3e4595314efa555976a80ac323fda04f583ac620afa410107536608064b930e00983f75067029bbf953ef0ee45862037481c8307c988ab83f90a 1636894807000000 1637499607000000 1700571607000000 1795179607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 62
-\\x954441187cb78923017515499ad7880b287968b5d2c3ecbcfdc101eba9741e4ee99ec168d9462ee5fcd072a3648784cc63ba6f4ea7e1799cdb6ee1ed7870ffc4 \\x00800003d4e81a1869e45c31ba99fffb59420315be63965ee4653f9750b05e1dea0ca33e5baad249f00690e13f9dcd2bfe71e198328bdf8ff21213e7790923d9d1f37bff770f0614efcd5c4b85033659fc62fe53cad24361630ae0b52a16ad17880aa13df0d5368a53214c52c25296fbe7976472918a5b756e4b0554316b128f03af7fbb010001 \\x9497bd573251d1fa5586f36bad9c17495964b75ecb41f7950f2e997da348ccfb74e37282c9083cc2d5b45c85d64ca033d30b3f3b4a569600e503ed5fb9a0ce04 1656238807000000 1656843607000000 1719915607000000 1814523607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 63
-\\x9618b8b80ad1b008f210c7e6859de2888e4e6531b4a10535cf35a492846049812a5b6d17e0304fdbbeca3c275d6903638e509b4df65205f71d1c5b8b3cf5ebda \\x00800003c2e82101dbc3ae62d64518c09c794e16cff33a663461d28d5d2fac734f336b29c2d137ccf941cd6c827be44783df8de1024d60067765485ba9be897676808016e52331e8bbe754316c73ad3143a68b5c90147063a81e94b0b8a408d126f7aadea78428f96420594bc02d37871b798f1c846edcf3b6c28e39ce7ca813bff294c5010001 \\xa159cd9a87de4ec19d310f434801df8a5bedc4418027afcd752d0f8119ef4cb66423a2d4cd3301f742b33d0a50236b23ba879303107f83633aab210e647ff502 1630849807000000 1631454607000000 1694526607000000 1789134607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 64
-\\x9fb851cee6a5f83495008c5e55b0192b6b80b07b5216b81a2315f0101f2fa03fac9e014b0c32e8b7a987ec9dc33b5fdf5421f318576821f688c85ff9ab2f3f53 \\x00800003c975856780d3a2d36f73bfc4f61b6c937143fd328ac1faeefa57c878e46c2cbf7d92bbb49fff30fedb88f39f8c1af7ca6d0a373d12016d4c1223b002243c140f062136a7ff5b06d04cdcb69becf6327aa199443d452a61e325bc995d7d2f7150e710dcd87bab79e27dc65f008ab383bd2c7a88988daa5d65423dbd869d7492bb010001 \\x697a935aeaf7b492e17520cba46505a7f1d44122adc05d938bb7b1ccf0878dcb0dc8bf57aeddde86724cf32aef18211c0b7e610109f8b70806deac3e7834ca00 1642939807000000 1643544607000000 1706616607000000 1801224607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 65
-\\xa1bc54b4e9f535019c27025ba42e8b9be395e0834de4f6bb7acdf45daacc712207e0f15f90747da7b5567b948a653da2059845578e2b9da61966e61f9d76588a \\x00800003c2b208890df807dafdf1baf8a7ee4e62ee950edaaabedd5ac318cc9c6e7bc9c8cab57ec921ddcdc6854b062887cb8eebf303b5dce274c73216b0b9a1d544b9ec2dca134ca206ff9427f337788358e5b289790cd8ad9da1212bd7d0fdae78498ae20c947f5a22584936cbd6b5ccd4484fba304735ecdef5d650bc33cb3b994387010001 \\x4e11b547620ca30070c0208455cd356bf51a5578d32a7820e04325c3539d52e3b0ca854f6e0e90c9a8916bf3efe2262c6387f6f222ca50473ca6f9293332240c 1633267807000000 1633872607000000 1696944607000000 1791552607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 66
-\\xa3645ba55b81e7cbec9b12e756bbf3f432dddeb57edf5ef9ee39ef63a173ef140ff39279024310c6505738816a2783c94c5a8efb8ad81606ef6963c274eb55c2 \\x008000039cf22682c9e7448101ea33e0f7ea249c4198a65ecaa859ce850b4fd3f796c395344ca95308c92fda5a219c81561b0cce4754a8d75b4ddc035d9eb26fce924361ef45641cb8327e2b49bf83e4eb448cd5edee2c4edad42d88335283a59c6a3ee71afc94933f12990528b4122eed931f52540971d92587a3f390653918bd26ed13010001 \\x6707408a5e2a9b6e03335eccb37e994f3bca8a2a457a4535efdd65e4aa142da8cd1fcbd141111a6183a025b7bcad1f436125f4089fc7362389e8e19644f53c00 1647171307000000 1647776107000000 1710848107000000 1805456107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 67
-\\xa448f198c5161582898b8fe17a06c20fec0d5a2a93c0221e177a56d237ba2ee6bb4c9ff52b66f5148a4380f51a76b463486c2ec4434afa6adeec6d5373e3b134 \\x00800003c537961e7122197f85e1dc25477b7e19cd85095f3aa67782217c99a30d7d7ca81b1dacf9f96e57843255d2bb25ac77d95c850b2739f551c20b2073471ccf9b0e84ac83130826e1b9218e07b9cfe3d6ed76f963cbd2a2da3493ecead6ef754e1cf391d886f773f42065a3423ba8af1b59e7f92f27b763bce7ecb65626954ea5b3010001 \\x52b3f6e00e6e342cb1758e31f75d379943ea79a962abcdbb81ac521736be3dbe1df10a8cbb564def6e0f9f1e54c8b3d5ca34f607d2085b0dac3e83f0bd856402 1647775807000000 1648380607000000 1711452607000000 1806060607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 68
-\\xa8a49c4e4efc24b8e10ae70d5bc2216b65102e0d672a75333b23d4ee004e4ed2e3472ef20a075da00511c0a2ff8321c2bc9244f729dd3159a8bc375969a4e6ff \\x00800003ad108235898bd7f3104b849c1123ae5a6e63f77818283b2d92ca96c43802f413abc7f602bd37ee319093ae717adea2c91664873e09f595eeea0d809547767e9b226f4f0b24e2fd230e23d423c833df25236dc2ac260f8fceb13bca516d46d09fc750f7b58d7d81e7f5fc14742dc2589e11d944696f3455a24651bb79de35e08d010001 \\x18ff4abfb1a78df3c845b8a818032899854c3e133b0746d182de950faf901d357c3cdb8d3d6690e7802bcb00683750fde0511aaf0fe9d611e35a2a0df5e5350e 1635081307000000 1635686107000000 1698758107000000 1793366107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 69
-\\xab8817edc3ca7e71376eb0b728cdf90af63121cf17ec20e12e3f75299c7f1dbafdfb113250afe2bc1487aec6dd574d63dc0cc8840393b7cb671f2f3dc300101f \\x00800003b0d694a7af43610bf08084ef4a71b59602fe5760a352e19bd21b505495e95ae72155cf1e813c635000daa6e3e784fb6c583273cd6e549cda5029e817fe3c36fdc4c7d104a67a364af7b65da59c40d5b915625222bc88bef5c2ea2fadf6cc2a46cf844a7739221ed2cb56e44b045f10a707a4be8165e3ccb3ce457e26a96a43cf010001 \\x697babea4721a4ec638753d0e25f571c2d256d906c4ccd84aec74ef71428648d97a414fe99d1006673e79fe8e6ccdad67bdffa65ec3dad25d23d880ae3312d0f 1633267807000000 1633872607000000 1696944607000000 1791552607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 70
-\\xac185e8eacf9e296aeedc99d5a17b813fbab2a128ec6fbbb9c1994729aff0dfd01b2ff870c05cdabf75e51085a4b728b273c859a9b63f84656f95de4b15ee7f5 \\x0080000395aa3223ef8dd8d6e212e9c2f15a2fa6bfcde4a8c0537e0484ad6f4f4345aaa74ca5cfb1c3bd335bc0308a6c8647d8562f6210bf900f1cf149a832a85a7535482ffa5991d9af12f5a3075980952327e692e0f0e889b0d84288095be84bcbcc1d8f645be62755739a326f9c37cf31104525076b9db99216d1d15ee3b49a5568ef010001 \\x5f6220776e5c3f80f0cd229c3433723d856af2c3fd3c8d6bcf8315674ab37f21f800e51e1a17d728f02d14421f9ce470e0d8029c41e0140d5e461867dc08fe04 1651402807000000 1652007607000000 1715079607000000 1809687607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 71
-\\xadf4a130f485cf890e4950c8c404bf7a71d5118d5e1051de7db79418473e1b280739fe1e4f48535a14f39b35774ed0daae7c74be6f7e9e7b7f6c64053ab5806e \\x00800003af46caabc37b96911556be574fe24245e6c1034e0d0a6baa4df40503d8e6d21526436f91c0e586a0cd5a39aa3edf06869376c3c60d98edb9dfc517571942783c6b2ad5d9b6bff968e1c868c7358daab48fd8a0e4a836a1f959aabcfb514b3cb234ba2f815ce880fd5c7d33863890e3ce97ca73bc8a4d4566882d5e1fe0a674d5010001 \\x9d9e366a61dec03ba405f3648da7bb0b65b5acea5c17bf8a3dc70ee0714fecec68d4dd75f97b8e194f10a9b2227d13f18873179d7371d3d580deb055c3e33005 1659865807000000 1660470607000000 1723542607000000 1818150607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 72
-\\xaee85e12f59c8c5b4255671d8670c9a937d7fa3c5905f099b76ea74f13e0a6fc53180ee7ba1a0039129b043eb5fb038c5f363aaa4de50e75d26ee3b07a9c3bd8 \\x00800003f01d8f60738aef41184b7a177d761cf1c5fa4a1e37f2c4d50c3e9468e9fc09e07bb229450fb1af0ff039403ecaf3e8b5cd79c0cd953ffd17dc18f70fe6d23e6fcb81e31a35cd3b69f8997874746b23463150f77c235bccef9d218b9b29ba4b5d25ec8ad472e7b1e4679b8c8c1d9701d6c9d1b162d82e06405f47f235ba8dfad9010001 \\xda9cd0ad4d08073a8295b3a158e014dfeff05c39d7681e2591f4b241ca4c3be09297c1b7ce051d0040a3ef45cb5e34293a4c673bd61ef0c2d37d8a8e31dc6d0e 1655634307000000 1656239107000000 1719311107000000 1813919107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 73
-\\xb1bc5fc3d3b03f91a3d5b69bdb9f9fd4d6975d358449cf966d4db46e78913ca8f17329ff31d36c9ec71b57f1d8f5815a49a2e83b8c1c55e09444448fb14601dc \\x00800003d18f11e44ae931d25fa41d792f58183e2f26d1082ce31e9c48027ee91dada0cf3838bdf40cad6f23a0a885fd24680c7541ecd0151b8d704996ab4825398ccc4c02fdabb975731cd6f7e1c345fbb45f1e9dc6065223db0b1c9d7c31eb3591f1647e8dfe116733c2f22cb6a1fa4906ef57a1eb435cdc3dfe8395a8f455d7a838e7010001 \\x8bdf8d77a77bfff0fcf23b3471812d3aa64efce87ae32faf81ba9a26534db3205933688bd8df73bfac4648cba0b624d43e51c798b24f71591b906ac480b47c0c 1632663307000000 1633268107000000 1696340107000000 1790948107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 74
-\\xb6d0f001a514cac7cb2edc9d4c15a58e201231251c6b19413d48b67ba35f9ad3707aee59b0021406a92f01979eb21df0379179a1ccddca5018a08b08821e7627 \\x00800003b974ea0a82a32003127e2b8ccac3243155cbf46d53efd5ee605f93fcfd331ae55888e88e67f0e5b3248673e3b16178247d7aab79e21bd9c5f3843ecbf8b6531fc1951a8fc3477a770315df6a1f46298a375eaeb3fbf638d7a3a5d71edba9b15f6b896936d74edf97c789497e3e201edebe3ccec21bcab760487c934f5493ea97010001 \\x008f7be1cc86af94b23a43f6b627489d9ba10567aca4f7bc22ada177a2e3cf0eb126c415ff9631804d59c888932c1442b7e9cca3273f35ea942edc087ff60c08 1638708307000000 1639313107000000 1702385107000000 1796993107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 75
-\\xb9e022018d40605a7da5321d76575e985a8b4630825f3008a7c697422a79089d2f5ebafadc702cbb6b2c36d18b31bf80ba331b7d473b4f8b13f498959cc5bcb1 \\x00800003af34502f5c0e96fc82f5417896ec3d745786c414a62effb7106e21985cd473320e9a5ec33285cb6b7955b83428068033888155c830289761d2d89d9d1e3e7ce7641e0a6a21080585fdaf56515e8f869831fe9d799a92d11f7c03ab41c9b91c738597b8c0b082dcbe64c6a5b05a3ebd30942b3330e8ece2d42491ec22b666d599010001 \\xac079457314a080a1e438f493a9ddd4f761d15c59f3c4bf1456e6d4b8d812def683619fac0538efffbd1676e9798620d2399e63c9fb3f0e6b930536f3834cf01 1642939807000000 1643544607000000 1706616607000000 1801224607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 76
-\\xbdd46e4706e93e2182211ea4d51985f925f850649d56dfe62039baa7c7b9971a1223fd5a48d1ad98476cd5f1e0b654b97000a205ce1aac64cb35bdd2ec78e61c \\x00800003d0c50fd8c0f9083a1c74ac5af4131f26a31919913d4b36fc528a728b77ab10fd94524a886026788b1dca3a6b141a3c1717167c9ac67521772c8279281dba8a582d021acb103b8c11175120816b038ebe90e718f756f9616e45d7a3177139516c15f74247a3a66c2f0151b51f2818bbf21c31f56e7e6b4fe825833886ba574d0f010001 \\x8639499db270d48cd53db653a508f3ee9739a3d0c29bb2e0dda9af76759dca21884597eb1b8bd5d532195b356f3cf59bc1923c9b3ca733a786ef602abd103105 1636290307000000 1636895107000000 1699967107000000 1794575107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 77
-\\xc0d8924944e28ba3496a147dbf7715a997349b53e99fc331abbf262bc5645b62f54b813683fff012114d4aeb49cf48dd0c37e331e2687cd6ff69f008b7fa5e4f \\x00800003b94fe9f2ea1db144de57cc9ee961398076b8e6d8a0be59c51a74b7148ee80e74a4f55b70a0a1469145d48f90a657f32ce49454a628641052ada3284173e0667c7b241f6381db852a52865396c75c2ca61d404d5fb1f321f5efb29ed3e525f4173f1dd4eb42b196aaf24a4f250c85d916c6cb33f4e6d38a72c2cca9958c86b63f010001 \\x42ab7757c335eee6d491778b6840ea5bc54acafb0fb3030c9a035a9cdca10d8f55f42a3a09d31a68c6506392ee1afb1810d6d5ed248b4db86915dde64589ae0a 1658052307000000 1658657107000000 1721729107000000 1816337107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 78
-\\xc4f02117492e7882da1c2754deed0b3b27fb5dde60db90f143d4a5bb016952958a015abec162c14120303f4100319ea9f6823354504d2e3a3f96c46244085d38 \\x00800003e8aa0b5bb737ef4fb79a242f6fcd9ef706220f41b1d7fd780baa9039310335498a116394f2b91d2a55a5a5562c6287a534336e575e9c3981214cb00bfac48f3ece0982ef4f29c056577cad00f06282e27e636b1c6ad305f0e1ef79fe2a2f4ba37f52fccd39b6062486c609a35fcff2e0f8858917d952f7e4c26decd32d3e48eb010001 \\xe8b2944c28e4fcb6b02ce035b48c5d94dae789409c933d54da1660ca0cf8d3e7bcddcef3064d19203a17654375c74a18abfdddbc2e84da72c51f2181c9ba9405 1650193807000000 1650798607000000 1713870607000000 1808478607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 79
-\\xc6488c7ef649d08e1a193a61f65d7166fb243fe3f3d1fb7df70e76c278e7c61aaddbe11eced3b6fdb94a582ddd0582154f6eefbeb54c9b7ca68dfca3d7c60ac3 \\x008000039ab70f038be5bb95c012f5503808a1eccd7905f79b6990138344895741dfb6b4f03d2955ffaaa5318ee4e0f3d634ba40a4dab7d50d90da3116a4441e8cd93d0677ac02ae1b4214982fad310b63c8e3f48c7dda469674542880bfb975fc973cb6f41c1c7b1a3f8ac273d134d4241ff666b21b219e7a67656420779692a43946cf010001 \\x3404500a31c045af9e075d8fef91a25900d6b622339329db6f1906472186ef15f87ed710ea15fbd0c120ad13202c26a808d2fc93213f964abc0855dd6c998e0a 1642335307000000 1642940107000000 1706012107000000 1800620107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 80
-\\xc6748d646105524d6c435ceafddedd5811d9c43ed3c5c8ff5fbe1156a0cac87e0adf1eb6d50f09c5bee648631fe6b1a2dd0e372ebfea5e662b3139e186ea04fc \\x00800003bddbbaf9c93ee393c2a74c25159ce893ceeaae15efa26d644545cf42223311c977fce176af7651e4b9ca3dc7b6845faad0506880bd492babcdd097228b237fcfe3bac20852a35bccf06f0279afddd47ab04857f6d9074302c32737f7e24215be8b25adae43fdb6a87e15863330961ca7b5361fe44e1f8f39975b2f57708627cd010001 \\xd962c66c6970402b4cc5fe30c38d425a59f5fd30f748c9ab2e8ee2dee7fde43d09f588e7ccb6ee24ca15a77767b0e711cb179014820362bd9e3565d7a173ae07 1645357807000000 1645962607000000 1709034607000000 1803642607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 81
-\\xc7446bc5438e39eccf3d7a61a5b8aaba74e214bd15312df89990f0800827009fd25f5c3fc0d7962088ddf19c354009a59bbaa0844d757ed231daba736967e90d \\x00800003e6acd5c7c5a4ad28d944c82acf0e865f34c6c44861f7bf4df8ac160a73fad9fa541ffd711afdb88eaeff54334a801b32f0dddada2d2a3d9844c92f3913642d7a134b9bfa169268566dd7a39e5f298b90600c760adf3f7f00f290c2c17cec45635f4b2719bbe705db6453dc0e7a20a0ba2daf9fa85f6fa3a9cd3e1fa4006368a1010001 \\x0662cedb03db62d72f3c5f5afb1ca609e8edcea1c0ee7e491c546fff213479766df124057dbb0b9b9e92df3e1a26b4dcb4a5c7be41b6a34c9e1ae2d991e0a705 1635685807000000 1636290607000000 1699362607000000 1793970607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 82
-\\xccb041096e1516ea11dd4adeacce86cbc751b36bef4285741c722f7e4cc225fe6cdfeab9e6586c9566076c37947be18698989c127367deca51f313818ff10d23 \\x00800003c191000abcf84af6c09e8441c2f45b45f9c9129728e32fa745f6c34e0854226d1699b8f169a77f5923e0d1d78de098a9f880c49baba23d1b8706ce56e07a7aadb222b36e7c0f94dd077ca0050e10129320eb71becad0599364d6353be72416ad575ad7e585c330bad690200906911e4b75104b49829cfbd6d80c35d5ee31ab0b010001 \\x86ab1add59dac32cdad6e9888f6111feec8f4382db51b28cdc16070ffff38e7797e9199ab6f9b2efb225f220df74d6d5d1d7cae057865fcc464079f9fb2ed507 1637499307000000 1638104107000000 1701176107000000 1795784107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 83
-\\xd1a0911bd611eee08859616c20538c27546039d55d251863214e6aff904156c6f0194b71dc1ad98788aaf7969c4321d3f1b19b24440a4acb848c3d66f0ad63a4 \\x00800003ccd0fb1ec6341481097f94ec913802a93f26393a8f52fddf7bb7bf7916ed50d2a9e9893a13b2bb1258c44e9330c3a27509effefa8b7e29f3570a489f04fea0186482b58e5d2a06bc4d8b0ad93d3f225dc5dee08b09d9cdeb37c575603327e3e5fd8d0057b9a471ff577a0c399c0929d13131242faee241933d2f05f81ee3c603010001 \\xea82859efd60711b6f448d75fec02bef86a5e29a4445bd32d31949bc59bc1f89e5c007f390f41b75693446d476be438d3b691412a271189461b7e10a9bc3b50e 1638708307000000 1639313107000000 1702385107000000 1796993107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 84
-\\xd490504d90cf1115145e116bcfd5223085cde35b2d9c5ea5b8f5d094fea1214a46153ee9744dcfba23a04fd97d47f07058c570e4e8f93149ca1db829fc158e88 \\x00800003c06741f9a6f82db6a99f22f3da73f1a46d21c4e1c2472b2d77bd61fbf5e86681e02106a819a5770f22c6d3659a0751e38996d4e760ae4a0e1563e9345c5a9284f9eef7e7c388a63f2eae7d715cb02a68b963173f91649a65b4b8f9f5601cbd5cb2a83e462d44140714b448f9a6ae6a2bfd48b1ac387163c55f23e17875e869e3010001 \\x42e012b835fced6e3eb2bc481be00f6a717d2f01ce27cde8082444537f7031ae92ff41da3e23f6f4c7cac1ded4a7528ade9088f1aba8c167ede5637e2a5aa30d 1650193807000000 1650798607000000 1713870607000000 1808478607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 85
-\\xd4889daea12fb80930b76e45971226e0c3bd43018b155aa10a53c803400fff88247b5ee5fdb7b99e1ebe13f503de5a01b7f3bb3515d0da6028a36eb2c9c5a897 \\x00800003c43a4959ea7bd4d50aaf6363681ff57c2e2e587286a37eb57d11ef250771d2756607f4824f4deff304b3e97709e39176f6a56d8052bf422398ad8d9ca0c365fdf39ea3c4ca4aa633ffc39b109f096bf8938503e51ead73477ff923af67c9d31e30dd118fdd7e65f7b90a0770f572f92e4af1be7208d9cdfe10073e60597f7293010001 \\x7da65effbdae9fbe12920a16f33c9f632042d5d14b1186b47c051f52241c143f7c514a09cf51edaf523390ccc45ab550aafbfa766609bf6ca6f4f18cf5046f0e 1645962307000000 1646567107000000 1709639107000000 1804247107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 86
-\\xd6300cb0d03365e4fc6745c25426dcfa364bcf7f8e3f1ebb8874838a969080ac3c750c403b5e85a0f39eae75a25d6a3ce375f0125c0fb57d5b7185d9e6a1c6e5 \\x00800003c1d40e9a018b6011ea0558eafa1ea52a2280a7cdde402be462dae51a34c7b390546dbe3b1f5c8828b3bd7c8b23d7dc8a06cbc5cad6c138074f4ef25ddcb0a197833686c995f85d2b51773c5f7b0e78c6ffdbad33d356df6dc3cd8093d7e484e155631dd75a2baf3f727a3cffcb874a7be4edcba721328ccdae3aabe21252419d010001 \\x64d593074e19f5ccbca15666de12ed107a6b089734077f66d8326a6ad4dac2e231ac0ed6af99b5b12e4582fdb3265c5f6eac3213632da58fbc40b708666f0409 1650193807000000 1650798607000000 1713870607000000 1808478607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 87
-\\xd880ed5fff546d7ae4e62f659032f7265eead113f6d5184dcb2b08f4ce33d114b5dc16a7817592eb7533742bf4db4aedb1fb55eefb5480073be41a5ad1528a18 \\x00800003abe685d085b2ce3fe060bbd1fa04fd8d6c0201d71d025a53616243488f84506456ea4527762310888407f693fdda0c01cb7855019aec28a13a6bed3d30cae202c2d0178bc4f0c56924a11808bc98f07f5067bbef3e139398fca94b6287df0e4ddb40a85c22cd2f9a59ece3142ce18ffc618a36d352ad907e7c4429dc91774eb7010001 \\x9382e2c9b11d8018eb3add1f7a16e0f1eb987fc499fff9be86f3e9e9d68b5e048ed1725d8143916ae1e81fe335e56fc9558d89c45c8ddc3f41369d19d8361104 1654425307000000 1655030107000000 1718102107000000 1812710107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 88
-\\xd9b4671d5e643f6a402911ab567ef4b786e806143cbe5496a2f879196845d0360469ebd9c4396ec7072be420807f9ebaf0ea8e9258bd4d0106e858894133adc6 \\x00800003b88d08f47ed9755d8d3ef2e8c4ccabdc38e3b3643c16a4e23bfa374ddad094f79c8092d29d84877b855895ac9ab18c74067ba933988e8c4addb49f0dfb1d30e079c687763b7fe803826ab53bea031ac6c757c18b097b5326266eb58fb315f42c62d4f51ade038b9dc5187e2f9e3b0546b45c2c6509b69d82ee01a2559dbc7ca5010001 \\x7b1e0faa3409020b111a1d97574bd66a463b94d6c62de02a54fc05b1f358158154c6a5711218ea862cfdab674045d531fd84b50d4fc58afa109302a73da9f005 1641126307000000 1641731107000000 1704803107000000 1799411107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 89
-\\xd96475da1a35fab1e411d6bb51a0f4566675a38b883a779fc019ff568064bca7bdb360ae2322ee446407456c82ede1e4a7af1a96f13da5c75ecb10c9c02631ae \\x00800003c90e7e5ea5b7670b89c8842855f5bd8e3135f247141d96821cbd06233c2737340bee43aa21e4e1b90e2aa1c85e2576c6f7f3f7729ad0f134cdc6cfa5b21ec05fd538c322d807346cba1f11df8ea5c041d3d8545a9cd4d2bdb76aa8af07eb8462ca161cddb64033c7fad98e4f53d32b65befd8a68c40a907bf2f26da7e0808f69010001 \\x26a91e95a20e5d19a880ebf5c254e45a130f0021a24f444805e9b1d70a1968c92a24517d0f8047a03d041ac2bfa73a02b3eabe154b051ebbb069eb4fd3cc7e0c 1660470307000000 1661075107000000 1724147107000000 1818755107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 90
-\\xdb88d33bed1fde371ebc9b3f3ecb829e2f79016c5b3acfb97e4bd448b84b37cde44eff31cadb8fa99293b2faef1b7d6c51c12b23c98b0760969d308bba5786a5 \\x00800003bb2ae76c4d56e115439c3a1fe12ac2a2b0e4960e72a2c829cee1a633b5b9b6e3cea71bcd0011403fb8b197e74c0c5a6762deb58f5ca75699f42b06229e8d41afcd79214e2cac05d6a7428c2e9be65a223b1e18405885ec53db25e6cf74b64286d305def6ed9b7ed91abdb09dfbb196f0f614ff613148616ab44b9f2cc769f793010001 \\x589bf2d8892617b4724199e51a94903482db1303f0ab52bf695d7c16e2487dbe02b5c2634c327a04c876489a97ec1a3ba4230253f97da97eb8e8ff912da8790f 1657447807000000 1658052607000000 1721124607000000 1815732607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 91
-\\xddd8d8d3d5ca45dd10a1e70a2a1fa1db0ce360d05536bf8f656b8d02bc147abf465118bd6f3a791bc08b738e94300ce39d64c8a57bb98c39879ca0310ffbc5cf \\x00800003db7377ecf1df982b6c2d42e183670adc68d41eadba85306f0b976f0d0e272ad5771513069cd5b62286b1e10153e12c1084679e42510f8e1c98c6d5bf7a00ed5b41a730dabd8f46ee988e6c832c22a034a72d1726aae6122b464d298739cd6a9915cf87d9ed0d36ed7151c7b4cc2224833c5eab911bd21ddff61f9d2b2be59903010001 \\xab30fa1184df60a047db5e0943932fad04621bf0d97db7f33735469daf727c7c9cb199d6971c0df2049213f180ddb3ae97ad3c06f81658bda03042cbc2c0a60f 1644148807000000 1644753607000000 1707825607000000 1802433607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 92
-\\xdf78c3c7224a62a963275d70f6d58fb638b3694de02d4c094d5fc373a46423a51f3790beb55f8344e2dc3bf646906aeb64b9e306be9ece011056752cae167f22 \\x008000039b95bbe78b83ebb71de87c8bdb6f07e3d3003a76290335ece5d88802e13be66528be7c4ffe8e97e0b627f726691e53aad68b97d795bfa31cf787403514bdb372f5bbed652cd00c08b71180109a3d249b0c3e42039f795ccbde192e3c450d00b1c9efaa0cc9f675f661a4e964cd75e52ba283b51c5f0c31afdfcca7250f10a181010001 \\x363f42dd956a1b3dcd7fd7e22bcb019d372141c3bb39786785a6e76f7be4e3b97a65aa1bb642800020d31934636eb0d8c64466b1fb3cd28b1022680c4507fd02 1636290307000000 1636895107000000 1699967107000000 1794575107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 93
-\\xe1684e68b54bb96431d483ab7469f21cb0cb189c1232dbf27a52e6997967914fc82bada4405add8a0018daa7fd7fd256c2446ac330eb0ea000e955185e026fa1 \\x00800003e1860bc0126c9b57656e97b04f96f965757803017928b7b4eb8d9730d94228b7b58962cf6aa41a6c1215e652898c6af67f44a192183bd7e2db4ca1fa3f3f73f0c448a652a3b56a47a88064fd3d147076de10ef98087a4f73390c56da1a9fe297d35b9217331b65b552541c327e3dc27796fcac44b271042d21c4fbd0fdb82a45010001 \\xcac3537b3c3aacb28352a5c603ddeaa4a2436b8e080de15a3e1e7cf281b93d42512c3dff84f7b9e78e362c7c61dec81e23bedad9cc3bc6c54bb4aea59859f809 1639312807000000 1639917607000000 1702989607000000 1797597607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 94
-\\xe190c02f949319e8c4652616cdcd26c25be3f779e431f1b9e604c98bd4ac3a2ce925db4c81d9e27f36d63e14eb1ba1aa36e508ea574fa55f1f3bad6071fa209b \\x00800003c8e03f54114d0a246b063cfec39ec836e84a7882abc8547bd07f9d42fe11c98015537a514c33cea12d4960d8d5e58a433010a27dc7b8cd1e42b607e48e8ed4517e9f67c30993c38d93256bf5d017da03762502546c60a0b3cdd2ceebb544b6daa3a50749374337875998114773ad6826cdb49b2e27af0baca656ef689c60774b010001 \\x89b692d14564c22d533cee5611a4da9ced326480a166e21a6c2385aaf34b9223f3252d0e9c6030bda2532e8f11486cbade6a3467c47441d8ab15466a3836670f 1636894807000000 1637499607000000 1700571607000000 1795179607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 95
-\\xe3cc493cb774461d4696f6bd99bb9218b4f4cd0c8720997eb96751053ddf55f0f8431fa8bd247fd213ee043853a235deefc09dbeaf0b5d130577ad4107b5525b \\x00800003be1424ab67bcb6980b0829e6d0a4349a39c9c851795180bdf87220e335771d03ec6ba06f1aecda87086900858ed25f3d8ce22630255146c0e242609680cf7237197b8ca96926d8b8fde359d311f5bb27fba9c1b9baf308a19038e596d98ab7883d8bbd7758fa3f4eb7197e90852941d939c8c7ec76ce4e430e80fee0c7cf87ed010001 \\xaf675454f79042b9539c9947320f0d1e40b3001f6da135287cc10afbf746eab9511195a5a6241f4b8ce5acc19d12b2f058e4e560a547f00b4e854bfeb032bc0c 1641126307000000 1641731107000000 1704803107000000 1799411107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 96
-\\xe32490f94b12bc720ac2e83a2c96dfc0f07adcc2663d9b4f1be05e2434c0fd5f6d3d9b1947c89aff0d4b746b67d5c0fd2e049d3a8bd3a293d24b7db98cb0d684 \\x00800003bffe7b7321868f81b47dee1fa90aabd7115e6d5f19a6f219e9ab953dadfe0f53047ee0c1eb4a0f1faf5ce1e8cdec1f20bc00c5407de8af1c234a7f3b661ebd05954620a22abf6bb1dde03514c6eaee33715619ab9167a4e6025953ec603295419f51cc8dd2f3ea0d068b1e2370304a23d99feefc0babf91b2aba6a02d62a53ef010001 \\x4608c79cda622c2afa633df33890718be55c218d32dcdd43c8b4af16bef4e2247ab6f1d8de582ccfc44461a6e50d2384eecf2244432e4074cc09e844e5bd370b 1633872307000000 1634477107000000 1697549107000000 1792157107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 97
-\\xe9b40212bb3cf8ff9d7efaae2e21e053c864ab5897bfa1c3a8b0024e6faa4d7bb9846b766504b180fe45a861507d527c54ed42a78167503e4fd1124f16249c36 \\x00800003e976fe60e63663b8bc8ad8eaa11c33e2c407abc74cf4f2fecd28dfa45b7cc6de9ea7bc71b4b63e50b821cdf9c2a472302ea62aa1a267962d5f5096a550794013c2823a30ff8d009eff2c1a63f0226a16e1a941a2ca43b37746b68ed70238b536b63ebed904be5627d6327ae05bb73ce2a1eedf0a7aa13978951aec66866a5303010001 \\x3de3cb3d19030463d43abfbea4faece9fcb8a39ad448eca1f26c4472ccbea13aa9ba6eb6f423f923bd1b23b4fd708d2a1a2d8478d2a03580fb31698e5d289b01 1633872307000000 1634477107000000 1697549107000000 1792157107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 98
-\\xee1c6a4e9ce0406bbf4b0ae04ed3d16b8363baddf4839ced079882654420a39df2a8f7e1d6d8b5b79cf5e5003000cff255abd85f99dc394c20276aa2f7e18fc8 \\x00800003e5c7328cfb937b90ad8349d8b94b9f1dc0ae914f3a62016f549488f482054b227abedb7e0401fbe85dd512eb9ed7ba6bda1b85caa45b70e3a19d8bf3b10d2a8c13090ada1e617d465c62cbead21e078a5453a4f2130383fdc57bf95b5f3900eb45704680147df4c24f525d4fbee26310ccd5da72e5ab5594497096ac820dbc33010001 \\x3647c6098040dfaeb7a0a4587a1e8e619e43bbacfc71563400cdab46de1d047d3295c885088585bfa5af6959641c1dc396095f39cba2d2f20d2cdd294d031700 1637499307000000 1638104107000000 1701176107000000 1795784107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 99
-\\xf0288b8f3c121f4abb69f7b184005c320778eb0fc7cd6788e2d05f148c0e1023d924f81ff061c8600795078952aa6fe15b0fe93b4f663f8d3608168175d405be \\x00800003a8a29159f6be155f65acc2e2864fe072b631eb78b35df2a826a74f5a587dcdc78f172232b418b0a1f31e4279b17f675f6f72ac4970e2c6b40fe68d12218e8d899eef282d5267b87b59093ce131951beebec96680e0c87684cf565218965898ae8ec86d5cf47aa2124794f9ea5305b741d7ccbb0c54329c39617a0a60e8bf8845010001 \\xf1ca7a1441e4cb2a1854014f222c713c75142c4cd811dd7e884eb5523393f24f584e0e863cccaa25519da017be3fa9b2a137b12711bd257f15e4fced6906c605 1649589307000000 1650194107000000 1713266107000000 1807874107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 100
-\\xf08c9ffeb4b7c1a9b086c1f6d2adf8d5dee5788244763e8bbab6e00fa3c3f2857c0e67df1349b5c1c33723a6aaf4bc73251f30a4bc17f7b9d984d54b3e8e36b6 \\x00800003bec79ad43c5414169a9b382c74e75ce697b5facb7cceb5846ce0a58861bd41b101e01635f3f07548589296ef3de9e3bc0a53fc13c151d655e71986124ea0fc1a666680c1e4d52d4e5ec2456773f57126cfc26da6933d892be10f3b3052111754134682a8ecef9b2e316d0bcf8a3c2ac8e84c47850e486b02d2cfd7f1856caae3010001 \\xb7ecd66b82eaa0cf0820fe98d0df0b379bafd5b026ab6ee18a0786664c479a19958d821b05fd66a647581596ece2c9bf5d0b92071e0a3a22bfbfcfee53aedd02 1639917307000000 1640522107000000 1703594107000000 1798202107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 101
-\\xf2e8469d1ddfbbe2b37dfda3bf0dec3baa14f4f43beb09a287bce5b5bc248ecfa56b994e7ebf4ee9df0e7dc901d0376ba757e7ef4530ec146744554aacac362b \\x00800003b927063853e5deaedaec0c250ec4d0aa625c1529fabf8a1bfb6539ad8e6144988dff7844874e8985ee4a7ecbeccaf808d5c18db12882db517b0fd2f24bf435cab8f85344c487bc24168fc93fc380398785933a462fd7b00af1d4d785dc12a5c77149f1b9f51f0fdd4451b98a6aa886a9ec0ae815da3d04c72334afb023e28b8b010001 \\x30ce6e299234f239a185cc47f61c4f277f45876cc73eedf25554479354afb38c319879c3e49b4c3f5ad1a812f81175b180b52a5be81b901b5005153d708ed108 1632663307000000 1633268107000000 1696340107000000 1790948107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 102
-\\xf46c7f4d17719f422040dfb6b9d10e0c2fdaf09c37a0991a1037623e276448c7f8d614e68293bd7148c33da509ca27aa60ea2add08c0f9d819b435ef21824b72 \\x00800003c45dece3d2954fcd23625e677602f2d4a17c48dd9b47ce2a19dfac3050a0608502c1dcf76cfa84e45abe31541b26849ef6bdfc3e03db5d6047f668c30ac63db3cb81ce613c8ff4605be3dd444050cda193308f3d3bdb662c344cf8452c498c86b6f00ee29ca88a4fb20d10957ef099fded52e1783a3ab51e4c150cb0f654fd55010001 \\x2a7778e828d93d2b621ee4466cf06ea8c76c84d66ca9b570978e07283336e9154e9de94753c98b4844e1b0eda7663195b3234b0a34f7a4c77bc369b0adaa750a 1647775807000000 1648380607000000 1711452607000000 1806060607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 103
-\\xf668743fadc90f665ae4a99a6709fba8f20a0d5b9c7c1c1a5d746a96daf8a5760cfbf7e2215e308aa073ea17fced457cf4756389ce6f144ed82cf2d5d9603064 \\x00800003eb89e0eea75b74a95cb8a78c2ec7dd1506e336e0569e170f89bc4d9b777050c967bb87e2ab75ead4299878a5d43302b3cba5812ce76ef3ed5631686b52bdc85810f415b8903b672915f5679eeceedc34927f5f2834c65afebea725366ce2845177dc8a7a37a93d457c312880924fd7bfa033315214a298562e512dd925e91c57010001 \\xa31c5a612faf836874767305786a2bcc525d1d4628cd4d58272685fa26ca1e0be2b98d5faf39e656315d50aa47b9b0f9aea0ec39250e32ba6ae4a2d75235e50a 1632663307000000 1633268107000000 1696340107000000 1790948107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 104
-\\xf70c9029646ffd70515200cbb74fad1706915ad2bf3c8d0837bbcf3ec6d2dd780166398d7259fc7d5977a23bda1d6fd9fdb561f5d65b78fe8a7e3c6ba8e300b5 \\x00800003b82430a8f02c4bd17fe049979a004f978424b37ec3526a567832e4c29f01b1bf32fde276549c1ef1f8962c7c6bf82bf2c20dc87df4616bb6ab3ecde11055f2a4225fb871bed6e6f3259b5a62c200642a752231ffb6613a65416bfae3318711ceb4162554649058bcb5dc210b4860802674edf14ddb55a898a4302a8dc58fbcf3010001 \\x8d271379a071b18e2d2bff1cf78fba0b2b51faa8bff8e965d380d0da2db57ea1305a1ea4f1e3ff00ea9b2fd5138d7226842e74f037d7170fa5ebf4fb17466900 1640521807000000 1641126607000000 1704198607000000 1798806607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 105
-\\xfab038bf38afde6e445390e16c79884b9e8799cae7ce98719f28d7f6b7aee33449f20db04f69bd72fa8c9c62dfbe2a73da3f7ab4d976684717ca704a45c3ce98 \\x008000039eb77a903e4b1dbdf821005e37162937b600d8c83e3e5722a17b6ea213a45de779cd7f37d528d01a494642581651b3d05c6dd41839672d7190bf12f2427390f22f7aff96a8f1f998be55e3e5bc72598e8b634f81599e23ae84ce3c3905ef92670b86274d88bfb58f071b7c1b60da8b840eef25eca135dbe6def591c13cebcdcb010001 \\xfb52c7d5b118b87ee1b53534a5460417fde29bfb41fa09fab517bdcef87c14b9bf5958482abea6085c7e0c46bd35be77e92c6340de3d7ee61986a88156d31800 1651402807000000 1652007607000000 1715079607000000 1809687607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 106
-\\xfc58c276484d48595e50b731bf4f1f9af020daecbb61052b1629f8a8d45d784595f2afdf03b93d486e8f6437830560b1e098ef66b064bb3c3b03afc2f52c5d3a \\x00800003c47bb48dad2ee355742d11bc779e6eddd421a130ff6bc24312998697a7b466cfaad908cd6ed603048e3b21e838f64e0cea1d4329ae3a3c4e7093ba13e9d7cf0256089f7e62730126f51bbc3763ae333f68cf7f14adaf0edae001915b523834dc8c59bbbf079887eb443e3923bc551270e1d8bfee6d21ed04222ca589e4382741010001 \\x7e43eeb4e418734d4eecd9dfe1ec27cf753aea1be5104bb6502df4586859b85a808cc59b1685d8c1d6670eeb07d35c2dbc97d466173fcc1279c24e0999ba5a0e 1643544307000000 1644149107000000 1707221107000000 1801829107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 107
-\\xfef88eaf152fdbc16f1ac7adcb6945de75c8a0b77f603643b44a52bfd57d082487f26dcf765999cfe998ef4254309f6489096bddf53874ca5078ae201a7acd14 \\x00800003d9a9735df307d415f1dc248ad2991ac2fb551f67d161773d268b69ace9a30ef2c95b0c8e3e7369b397c46014fba54e3c869e0e7bd1524cb090077409b1a3067a787105268171dfa007cd2e9266e4b44b60d33158164d0ffe47c85a65f233679bdfc158041c15190fa667db419a55f5dd0c0c16213df95e469c9ecd0057718e41010001 \\xa1c537d0c31d203f672e1fc3ebb29e56d5425644acb24fb4ba090cd8735646e18f0b03ff1641e1e0d6afc0305ef2d3740a766a065587958b811ff837f056140b 1649589307000000 1650194107000000 1713266107000000 1807874107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 108
-\\xfe7ccc9d3723bd300d7be296dac0ad1fac4cb94b30e4ea74b86d611bfe2037015931b4843ca66f028995a56352e7b4e33389ea5f455967cfd84f0be5e3f87263 \\x00800003f24189c93e7ec36cb1ba3ba8b2a5a8d153eee21be26b8220f707051902145c5868946c5db3c7769ba25b2806d51c07354117465c5807a790abb1790b7d941dc082d3e5207c8d8bf746c26df3a3f7b2a30728c7a723c7a65ac818cbae1de32848f1976d229bb71c315d6785ca336f49a601792921f8913a8e5b7d29754821d37b010001 \\x158413ff3eae0c37d69d978beae22b9ca8f01bc7c7b6b2b76ec42d7be64bf0b55ef0e6734c85e3bae9f0c1158ca481c3aca32e728931fd4fafa4b9562f709101 1631454307000000 1632059107000000 1695131107000000 1789739107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 109
-\\xff303723c8afb6f250bf9942479213a130284bab14aa419eb223451a237dfbe5778d95f274c5be62db74a0a931c79158f6a44b3ff97155b860c8696ae1da92ff \\x00800003b6ce0d8bd8c976973ad0d401e6caec753af37c9ef96cc6e97330b55dc21805be3025d500255f156ae7b19a0eb18c32226e65c673b550384872219303a8b36706a52d8a25e8c8e95ad44c589c01030dafa84a94697422174bbbb6b740a19d6521629ab2fb3f58ea4f82def1c24699cc624455fbcad8ed7b1e84f4e2dfc6ce1193010001 \\x97ea87ff72d718ecce94725f686a6997aa5bc6caa451b0d54d4d6cbea0a4bee5c90e26b6c492ab8f00bf722b84a5b1ef74881c2f3779c461a20da92a2a25390a 1657447807000000 1658052607000000 1721124607000000 1815732607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 110
-\\x00bddfb7fbe5b1cb35de1dd7e67484bbf5dd7a4bd15ce0da7986700c65ed793fd715ff6ff6b863739e2795fe907faf1970778bca3b9044c2ca276f015b1daff2 \\x00800003bbc233d8e7825c70f84b057666df83d77748791ffe1bdcc1d411a759eb5c47f2ca16f32ab7ec8149b7faa0c096d566523db929ca73923aa9bff8d61936ccb8324f28ef64b7d87dd94a5eb2affa7ed9485a9f3782fd2da9c167df9c1dd7224621adcd32222c9a6e23eaf93e66348aabdcd67b6179620879db8f7948420c548e27010001 \\x229ca224c61e33dea78310095e9c94f4a280827e8782d7729ab4fcdb054ad80aed1e926c379e33e197fae355cfb56ad26f856d96eef4159333c3ff9ed8089205 1651402807000000 1652007607000000 1715079607000000 1809687607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 111
-\\x02bd46fa1df54b08441e502cd5c407dd7347741869629fd779dea1a72448018a4a41a105f017c403fa90d4f0195d5c7a9c0a5b029c1e61254a700d9334802969 \\x00800003c12fc739f357c9d1a0ad94e448898ea9a5f47a4d6cd95fce4edb39cbc8e0c514ab07e8256975074be9f5076917f9d038879eb8d7e385058f10398dd33e9be74ed5f7f846c8267a1ed650e14ffaaf7c602edfa3ec6f41596c2aa18ce79caa4f19de4cdbb4a8effeb6d6811296b1a06cd6541f0b10d100ef2f5aa0ff2604763d61010001 \\x604efcdae00794fe48db9c2fd91b6a67be9122001ee65263122aea3437399ea58cf029bd60ea3a5e05ed9a3e76e830b73200253bdc1fa5f19cf1ae91331daa08 1657447807000000 1658052607000000 1721124607000000 1815732607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 112
-\\x0419ba4efb4c9cd3c2ec6538ed4e0e5179a42b254afb181236f22754316134bc9587a7531875dbca75f9b77a0bb6ff0a3d5d9d511544962a3d4f52f19b010908 \\x00800003c208b9e054b0f77ec39eeb6a473c4ea6831ae9760196c5f964a6256f6190ff06792ed6fec032d04e7fb516e7117f2f08f40446decf8f9f25a2af93d84fd12fc446af6eca5bb16fea77a9aebcb53e78aafcc9d2d465a662f2e257f345918e0c2061292799074181610fcea63963d579b081030e83518b88c1144e605fd8419495010001 \\xee2700d6424322182bb92b47acbadc9e694a01cf570f166065bdd6428b86d74b1605ed2ca218123748df1673b66f13e6b2856ec6b3ccd70ef7b84b6d19fce40c 1633267807000000 1633872607000000 1696944607000000 1791552607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 113
-\\x0475446a8c6ab57cfb8fd032ccc59fbd5873dfc88b54dfa7d55e3ca02eb688bf6b5f4fa2bf7a7b37018e98687f87fda722b1baf847c77dc557658dca57e7dffc \\x00800003d44e7291f134c49a5945368b3920f3b934437bc8e32f7c9266f18e8d459fd3147a33fbc3895423536bcf44d2822e2776db2eae627ec138894385e9b6a81a9cd1840644154a24386e5b95163dc2c6e035d30e8267be53ada07434dd95a31339b6521f6fb42c4070c5148c06b5afb020f4018d355a648141d0ba5fb2e8fd16ad7b010001 \\x2d72204f8fc4a87b1ccdfd65765485a4f791bd87f50b23046e810dbb3269bb72c19233627231c037e8b608eaa69d34e04f8bb0fa00a2fb3f7bc2a6c1b4020b0a 1648380307000000 1648985107000000 1712057107000000 1806665107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 114
-\\x079542fd61c319d4a2dc92c4f7096655cc2a897a0ecad08fd2138526db8cde9be3885556b5bf42728ea9178ad53e811a8bddcb147692365cd1fe76e0f74de251 \\x00800003d53eb40f46fa78c43a4a6f1b1014845ebf694455642420bc9053ab6aa17e9f5139b65e8b76b657622f36dffb8d27aacdf1322b9d82728a9bee8cac7af696950563183bdc7b688da2f82a38f7631d5a005eda2eb30434606c4175364868402c959f33255461f3cb5e4aabb66a53d9332514184e4d03b8f50199fed7573e13de97010001 \\x4f75bd742918745bf8e9bfca07ee634a524f0ab1aef9223fca51a5440085e343b5e2978b49f660fc8cd421aed605c26515344b0853ea3bd01517833e033e920b 1661679307000000 1662284107000000 1725356107000000 1819964107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 115
-\\x07a9313b33eda3c9307638c334e422bd1cf0f92ad1cd9c1982409b7cd2f7f77c5ab2d5c63f394a2e8b2b7ba077e289c1bf069d93e1fd27215a1f0682e90fe558 \\x00800003b6660b65ee3d16aa72487570cec1c99760278dc17728ce11fbfaeddedb85917bcc486af72f333c09c677411e5abb9733ac7aaea87e0118e22d639987f19ae13e5228caa1980e6acfaa6639d920b952cf879551ad02b288483be7460b78bda0e21bd1940e9eb6df9fd37883b5ee754b06f4154d569ce49e5f36cd1e369c985359010001 \\xdccea3e2348824fdb024dacff5cfc2a1c8d1b9e2ad267a7392b18f9f3410cb8b9b5a2ab416824eab0b3e763213a2bafd4c4f69af40dc8fb97e4960ff9cdbad0f 1655634307000000 1656239107000000 1719311107000000 1813919107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 116
-\\x0a4d5aa524475bac354e3445d5eedb7b283098811a9d39e10dfc2bb5af9c2a7678ce066c647a497afed1b9d697403094648a2b9dc8f6267c9fac1de5f5a2f2cb \\x00800003c33a1054c02817501041f0e7bbabc63c6a81aa37f6e6f4153b5f4aa4593e84cbb64189d6aa2893b02448e8534e6cc1efe323c468b0d574f563074e900167540c7b4ec68e7cf3e76696e2d31d1585a90bfb4c0a8031a252ccb6f73ce27f1f2896cff53373722fe6b7442b5cc0609956747b5985188a323e1e9dd0a07f31f72813010001 \\xcf5d3c522dc495c51cedddc109fc35570a3d3b81f0a75b662c26684fdbc49a4a5cc1b2bf59c82e565f998b6bcee7ca3268b143b781530dcd089117ecb85aae0b 1660470307000000 1661075107000000 1724147107000000 1818755107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 117
-\\x0d315f9a4564bdba8ae75c0442349322489f84ebb371edacb7acb196b22c7497fbda325a27c0317ea6a3b81819b6c5448db1ea54f42f030dfb2d2ba9c5a81854 \\x00800003cdb4e9f70bec6738332f1d71b3b015408a2548de79267be9a60e1917868a6c01f9af67fd303cd4653014f6f676a8440f4e648177d6e91d758791005460ddcc23a0159c08255a4c7c3e9c1f039b63afa1ae971550a99e277ad5169343e78a26d52eed40826f662f80ed0977a6ba28d1724e3e70c33846849bd7232a5f35a104a7010001 \\x35da117c76abf68f953d47bb82fbfb9da65d0c797d2816bb7de509992057d03581864da0458499805bba1bdfa76d73352c0880a33a69c3930db7f98d4cc5a605 1631454307000000 1632059107000000 1695131107000000 1789739107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 118
-\\x117924ddc7d5da2eb792b7bedaee4be16364991db69e79942e945b430c04105604c160a9bda9e509768b8dcc6adc36896875c3f6790ca63371a48dd9bef77ec8 \\x00800003c4717713e012d8e9eedd70f4204cf7657a9f96e1e708b8f835ac153f5785d8bc51a2542d5f133134ee5e4ecac0c3ee2133da6efaf3b5af5abaf21d4ef1ee34a0ae7e90a7fc0a49b1010b2d5b4124b0641898f4d7a2a0b186dec0bec77a92c478e6a0a94ff1d49c60acb8a6d1d683892c6343c4e115a0df6602fef736eadfdff1010001 \\x92343f474660043cc1bc0b1fbeb2c9232f062003e9b3fbd4ddb65e4d94635b65d9fdecbac1f1071859665f296a8741a7e66577ad17c871c210a3b25e9403530d 1644753307000000 1645358107000000 1708430107000000 1803038107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 119
-\\x16453a92a277edba0b86fc0bae6658d6d7f4132a71549c8e9d33b52ad090e67cdee1661c30742c5f110908569be5a7557740d23e83aafb4da1c4bd520a24bbb0 \\x00800003b0b5cadf44d50e7fe9d76e897f935d4021f6ba9eedca07e80d52eb4cab358b10c21340fa2e56677d1e89fd0a09dedea38213c2523231d3d09fcd0120472ce236cb9ff600040d76be9e68241076bc154f37ff4261517bddfdea0b8069b52e680faf37d88be66cf43434220ac3323a4feaeb3c99db4910a01b680dafd8c483c343010001 \\x410ebe0c4e14727b14a4c38f557fd069b93c0a72f38352bdf5404421e2ed0f6c20920325d30691908ab117e3e0c8b37c5a76c4cfdbb024d6432f043d76a90903 1656238807000000 1656843607000000 1719915607000000 1814523607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 120
-\\x1a8da117d5027c7fedf5f29576b09bd7aac072b51e7b0ecb1b7c68b1202408078c9dcf466da99c5733124a85f6ae68d3e46d0afa38c23064f6569f4286187680 \\x00800003a2c8559af03ea0cc3007048cfaab465a0f157fe28138bb37ab0ef965233e6fb651d539c80fb7ce107b987c8f384d7f1337227cd3ea1e79dcc1a24e33565fc4faab0757e8088795a51f9960a5554637c783bc3799c3a00ee15d1a090a07e93692894fb1d25071fd7ce34c0c61d3c4268d6ae9f5216c8bafca7c72e5f5d9987f91010001 \\xa7c76f5a43a93a1f80d0977c9041924d424ae4adef44252ea92b2def8394556bc53da507c63710098ca3c4dccd481fe559057a35e53d4c089f10927d0dba8e03 1648380307000000 1648985107000000 1712057107000000 1806665107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 121
-\\x1ab910d7b49c9708a91f936485c9515fee8fac2319c795fa636f3ef892c483fab91222beecdd2633d9dedd6a5725a1666d9da15c21c2a2094e628294dc885a89 \\x00800003b41bd8a050e35fb535dc1878a1e95b3ac2e0cf27619037d63cc90f68d619047f8f96e8a18ad9b2d2800da93ab0d4d83435092329e3abbfd6a91c034fc7344cfbdb7fe382e17e1b5055b4aa6db461df46684c4d2e6a7990a22e7a8d0b2817dd9168e0d85c621f7045785fad2e6120525b7720677493b39b88de60810125999cdf010001 \\x3b8b5ed967be1a68b25d47bf0262a8c15d268d248d9ae00700413db86abdd3c9942bbec805d71f6e30716abb886e795bd56841cf3582738350339fd7fafb6803 1657447807000000 1658052607000000 1721124607000000 1815732607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 122
-\\x1b512f80ded764ec387d78d3a3656bd7b3942ea83bb17fd3622be022ccebeee5e5d4ea703fe5be9005250d3944340a0fc7a882ee1b6f696493684ae35126a63f \\x00800003cbd1fafe87cd79de28782683b89c53232d17ab1d97503c7851c9b37ff42dd4ad2e6f24764f5a88ee844e93424b36dfa899f39e7419b1126340e912d632f3f15cdbdbe550b7ad5350a13ab4c4ac6c50f0fedb04959eba536b7f1de1ef51bfb390b1fcfb3eb40b417475663a2a08be60381d7891371d074d1e52510e20e781030b010001 \\x73319ed338b311885d4c740869978d2feacdb49cc1875bf86cc653f8d6583a11174777a90678c824210bdc03b42ac24f0794116e53581646b4d5e1acd0033904 1639312807000000 1639917607000000 1702989607000000 1797597607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 123
-\\x24f17fb616b865e171f6d677cb652fdffc59778af0572d897feba38af776d6bbcce7fb0f6ce07f15a27187ec2022d8a6cc0d603959ca0d844791f3d7b6cf9274 \\x00800003c7df1d506c95725ac1e7e0ec7233ed99133e0b964fac01d6ac2b924ef537b399f5e1c090a342c663a71ccd0c4bf493c70afc7a950b4f69b2ad12d61f069c8a4809873246453359a5b2e74bffa69455563ddbd0bebf26615e3d2d226bcd80b6cf6fec30d0dbef373ce02e87b138e687d2a11728479c0bc3d69c320683b5d02dc1010001 \\x86e2902f8ca7a19419fd0ea235580a30270084fa5a5fee0734d303574c96fab499f40c14a7e17f91355aac7f45fa679621a9163ee1b4bdd0e0841a035493e600 1655634307000000 1656239107000000 1719311107000000 1813919107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 124
-\\x269154fc7afa3b08c055692797ad9515bbe933a365db72186d392f8c0cef7307f67c57806d7196df94dbdaf6a88c1b1417dec06ebb2aabde83087f2a6ee2ae85 \\x00800003c5229c52b27b929bb7ea770d28f5d0b3e116385c3ac77ca6c6b9bce6854c73528ab7a50502728010ce03424dd12ab2ac1e1a2014d3c990964328af734b619e9c802ee2e4d21c6cd5856b515bb1b61182dfb173eba14f837e252e2e54902173e654f95c03c1b54fa0be48a3881f758c27eab34d5990a81870fb9c7c9709747b51010001 \\xbae9c3bc9d1b6198094a9af1dcf04456066c102a637cccdbb90ee49ee55d3eb87c491e5eb3cbf903e6579453e424c7f1e3c6a370855c378521b5393844c4950c 1650798307000000 1651403107000000 1714475107000000 1809083107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 125
-\\x26a1804ed7d8aae43eaaf4eb1d121ab013f27b334a3031257e310030ef0acf427d93a1da7d24540538744f62c4de898ef98129033af635c6a0bbc6281388147e \\x00800003d27caadc84925747b1ccdffba2a1f13c87daeeae5fc43f3ab0c1e7aa673a2df94a283b3c325e93c8d13a70c24316f18935b63e988f5df7d4d402961dc95401ac76cd47a5e0e4de6822e6a004ab96d557aaff94cf8b385b004e6a3d60a88b4deb5674ae1a16843af876ba3dd6a05c02e28bed1ea40b31f091fa6890963471213b010001 \\x2c5e422cc089879d78cea8ee05b0bd15a1658920fa10d536407f39711eea607c4ee36963a8acdf8a67ef9260fcf5f5081cb9f7c0480f0a74ee4ab13471380803 1638708307000000 1639313107000000 1702385107000000 1796993107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 126
-\\x2875c4d4c11b3a3c2d53a0e1f8740fc13082786b46051108641f062ef74d2cdb1ad9180333a8a12b99ef4c7de885952346fdffe95d791f0fd46653f32fd82f92 \\x0080000391b1e831a17f5c8f3ec47d4a71278972ea159ae8ed27e0fcd210e2c131161c32a38ef64e1247b7c1b15270405c7e3261774d9233ac7a1e5eec4fb5485c320cc5439160a728a40b06faf6c5fd2c98712edd7a9397b02fa33ad3ed32fe6efd4a1134e92bfd24e624400b69a575f80a6e482be28650f800911c37e2aa35c813f6b9010001 \\x3bc9046ff07094a7b4f5791da3b0d17058d7cff99e9e0c5eaab840d8269841620a3000190b2aec351f8aaf7e398a05c6d16d73311a26943d1406798bf9abf606 1642939807000000 1643544607000000 1706616607000000 1801224607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 127
-\\x2af5538dcb50e3fb7d13d00bec6c1e364fab00bd65ff171b73fbf7f8be136913954142fcf59ee41582cfd5d1ca79a3b7db55c8a233d1416c147951b08392558a \\x00800003abd993c692ef56d81dc22c6d9755ccc02c8f9adf2a59825406cc982dd7f978a947fa8c287a84a2a0cb0d56127f178557314e890a22b2ce5b41812dd46f15dee1ad06388642bbffb7428e96ca7da254c9d4b0028110fee0c72a53dfbe3abfbaf6d0a73e2c30e6a413258642604b2df7e85a1d6669ea8455399c9b71fdf9f020b5010001 \\xf41b1d27565c124dc7121e0ee19e16fd625c955ad069a936573223ebe6a39897b4e2b77d59e72aabd9a56031f2c0428c0c3d462d74236790fbf1476249dcc40d 1641730807000000 1642335607000000 1705407607000000 1800015607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 128
-\\x2b013a87c20e8ba3e1647f51211d70c465f767920636371285bfc5b86f3d0a8ceb048d77b0cd7347c0e9d92286a2407661cf68569a39cb8a73d6bcf5281e49f4 \\x00800003ae35758e67b45af090bd611280c9a4c736b5bd97af28fbeaf660b71c58143689b2262d1575fc46217c70ec8c083e3158f7a7e6372b9307d48bc21ed3abe30bd65119576603ff551e5aeb0eea8b102a03691b955fa87ca660eb4e55b22659f61330fe237fdea819ff267103af5d00b528038f0b789b769784a657f1b4ce43f597010001 \\xfaba817502db4dd92058abf9f713235871ba791cfc5b5fb87fc7e0dae4cdf4ee2637ffac263f7cc8cda9edbc8ad1124931c7a9c94dbbd65230db11b5d1ae5204 1642335307000000 1642940107000000 1706012107000000 1800620107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 129
-\\x2f25cfabd6705a4bf36b7a8812d62790ae226e1eed4638fc9ce6848fb50cd38d8bf25b1eef6f03b2d237486244e9873ea401ced904f5c5cedc865ac18ad3fce9 \\x00800003dd488c9de89edcfe8c2147497a118aec4119f01223f0c185ffd37dd802899805398ad4f38426a1f2323b5e2ace41b10e006317ae8e6ecf2bba9dbebb8750077bc7a8a4c3792127cb686e48066a7fd3b72808ebbcfdc255983b51e96e6d7dd85168bf13faa5cf7ac878690df6134704ea7aff475fba75a0102ed1bc623494ea4b010001 \\xb30f2cbea8296461a49633cd6aaa2610767c0956a4bbb76fe7225c6ee48090bfa3e60d6a9a01ce3bb047522bd7c344076f56640f0c4e73a18054848a7521320b 1635685807000000 1636290607000000 1699362607000000 1793970607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 130
-\\x301587669eeda6394ab0c82948d8b976469b6ad0b5e950b2d2c71214ef794b68f0af47cdd554debd76a110f78123ee5fe16c38f66303140e4177beb10121a8a3 \\x00800003b6b97fc060b95bb933a29e051eff2420387eb586fcfe1413309d8f376a79c5b4c3f34569225a5b2e099e368a748db33cf6640279979ac0d93ace307bc9b0092540d4593bda1ed3abf947b81ea1f1a364f8c3572bd2da4d1ecc3bbbac2cce63f945b5345b71c7e9b47e46ced413a807e07339f94f9fcf72a59f59250040f5eb81010001 \\x9a82b0e285c235b949bd62715bea83e5447c34d1ebd9e0769ee6e6676d98cec63c470e9455b5ada4465bec0b23499dd3ab2831e143dccb0fd3081879f183710a 1650798307000000 1651403107000000 1714475107000000 1809083107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 131
-\\x31f9e18154b60dc81dfea7dd41836da55e78d1d23162c2323aefd5fcd4a776c4febb4e0bfe7b2fe65a59cf1e98c93fbc907a0c2fd463d235af88b8c38b468b9c \\x00800003d070f7671d454346f32ba0e3da28ac93ce1d4c011a29d7dbf9e20091b07a6c59d9d9e5483f3cebedc9b6c3bbe05daecf00125c171b0620bbf06e34152bc13ad50156423644c8b43ff8c87dd7e663337eb4bbe16029d8e48cc6ae0225549dae6a0d1b14701a6241cd33f83f7034a8671edf63cbe8adc8c377b4c51f156d98a417010001 \\xee679ee1bd22748a92d51610a23f522e24a49a15bde1322dce6f48a9fd24c1f934e5be98f38839507c5e773112ca9c481033d9de0f7c3d8f0d8adac472f88909 1632663307000000 1633268107000000 1696340107000000 1790948107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 132
-\\x3501fec5127ee497d8e25f0247d8ae98140533a694479e492a952a93a585bf94d11643abcba6240b798bbefc267842cc7b6f5084e57d3dc37136d36d3b992700 \\x00800003fe0f5ef8a7bca83d6b1787c03df3c8d5c1ca8a2b593677e54f0d4db06b4c722dcad0f9e9f6e9279f5b01624e72e2e00657a22593a1679780398cea75227487aedd9ddc5387fafd56f475cbb3400f370a00ad083846a611050f106e5f52c91f61291d82b355fd54f5d2dcab5bb530c99bfd56e8a7c6e645be00f0f6f9e10564dd010001 \\x97d9971ce0c4590fafeab565dbec85de20d66d99de66e7d2caf10ac5446dd5a0f018a923cf6ec00ca935a02e3ec4f394ff5ac2b7a0c8bf8d89a6ab10d943b206 1639917307000000 1640522107000000 1703594107000000 1798202107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 133
-\\x37ad17b9afce7d8525c3bb2faa4228ea1cdf8629974a15d3d4673c9a6d8f666dfff0a4d693c663dbd3dd30fb2b4c40413dce4ab4976f57d0a6cf7d4af9c1b6f5 \\x00800003d750ca63286192eb819aa3ae1e6edffcbf0512047f9ff3b99635699cdb3d438a787e7a3fcd5341ceae39652afab3260473ef59643a36f942676849ff91feabaa1661213732859b2686252721c8825ebc4d095134f6b36a01b9003dd90e77e3e2c1c19983d0e9dfe3d667b233ad6efa9bb8d29fef6d702ecb75c92de88d551f63010001 \\x08e646b99b7ebc06e07691cc4c9fc619afc5dd7b997ae74817b10a86cf38fd444b95d71e8fc40c8d3541ea1557c5ce8d4e3634d65deaa2b71087ee32e00edb06 1647775807000000 1648380607000000 1711452607000000 1806060607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 134
-\\x3b29bf59ac6c0b94acd21abedb4add7d81dcc41340cfa5b84ea6ea6c5914214d95f8052da745c6611ee81056dd6b648b02f1eab1cf63625ae0a2c4e8b5a9b181 \\x00800003b38f50334e5ac8d4cbcb00409e27d5e713a079b92407a31daa37254ab07a031387529fd58b9f2efac120053c5c6cdba276cdb910f0fab81acd34962b980bb3b1796e03bec42604a25bfc5680b9a9d6606bbc7140a5d9262716ff1bf267fde6ac6332a4a8a2f6212221af1b4143e46a85831d0906edcc34fea0236215cdda1b0d010001 \\x94b10fb6933d611666cc722e9b34c1f892939acdd1fcbeef048e82ddff4222b0b7d869343bab48b36f73e82cf61e8fe825e38d6ee0eb1a9320933f27295cf708 1659865807000000 1660470607000000 1723542607000000 1818150607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 135
-\\x4129360b46ce9da97df46813d7e8abede08e6a18f8e34362f8c5953ec21412d7ca61c5f54676b3a6fe60d4a868f69a6808a57888a8df9610388822cfdad021d3 \\x00800003aa204e5e89d8550a117370f74560bae5551880ce0dd47f8322833f206597839133f37c61c559362558545960b9d021650479564664ab1c0a902dbb54639d173b0b1da60d43a259276ab9f9d7efbf3799252a54667b3b2495c19f1be83b0556ccb074d00bff3bbbcde6a23fc7bbd8464f90f1d0ef3f88d716273668699d009287010001 \\xc295a07ebed2d761a07cf3651a4bded2a04d60eb9673ba9fd63a63a37f2c3932296602acc2d54e3df8921d8fb230b68a08acc1c171e185608452defac410e90b 1645962307000000 1646567107000000 1709639107000000 1804247107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 136
-\\x4abd9a950028b71b9d98fa925904d347d2673abd72c88a39b18487a8f5471fb1d1ed37559c21ffeff79a74602e208348c617e4d2f6480f9ef4edd26e54fe05bc \\x00800003dfa538703a49e0af2f05a3de5cf5b182023bc15fc6fd84de285465545f912681d31ba22caf31b23263f47db74bada10c95e143d8d37504d827c9dbc6dae09b55163653f4b183ca0b00df5286adcbf0affa7ef25ad73985609eae8e2883f370aef01b2a52016b3576356a41eeccbb355b0a98f930743780e49a212bb87cea0a55010001 \\xf0b2de3341d40c4eab2abf92c72a7550b67091bf1833071df9a689af148918f5410233f50dc44b2b6326e8d6d2c08592d711fada0bc655c08ba394c0c5d2940b 1661074807000000 1661679607000000 1724751607000000 1819359607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 137
-\\x4aed71b3a84fd1485ecc8bb6a95127b608b10451c4af7a2566f3019fa149575ada3173abb5940b51bebdc8ed39563819fd43a56da2c95ab150f878fe09a7ce7a \\x00800003f17b98a717f2b44baa7af15500fc1120ea083fc5506d579f60d46cddeb206d8c74a455b5c04ec00a6f3ce1e3f9a94907991b4be02922dc549ff88506179012b521f89a7614e9634fa4e425d2a3f861e40b21f0bfeefb114569cfd582386326b907d64d26bfbedaa742224fa73e07c8301dae52fae6a4487cc9828ca3dcc9969f010001 \\xcb720616d6a41194d7bdc6a9353e12324ae1694473ee2e66c25cf959486a027ed106fcc2b7501a49451f0e77616611286b6f6b92ad9b94f29d5bb45bc7d60904 1635685807000000 1636290607000000 1699362607000000 1793970607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 138
-\\x4bbdc353c0ac4ee2aec2300aba3cb7edee7013dfadaf2e1447162a8403bd50e519f204379d9e4c4a36d65f8c2691560a4c35e7ce9190ff706093b188426d5b88 \\x00800003e35460d68aaf7eac68bfd2a71780705999531046629957be0cfeb4aae9c449c6cbc0fca9db43c334ed3d19721902ff613f041818d39e3141898100d62fbccc099370cdd2283fd1489652d12a96ff7689788d774e387c38025a1e5d4a66b010123ac580194a80273fa8522297be498f774bd6f05a495b439089f63c7fa6cac455010001 \\x1e5d088b144b7b2a5a1e704708dac1c8736e5be56c0351fea93ae52dec98c9e358a59ff9b633c2ebf39196a4cd8413cab863d6cf33c28177590cc632986a9200 1641730807000000 1642335607000000 1705407607000000 1800015607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 139
-\\x4be96f0b68326eb7922e21369a273674780174ed8296efb72c84531058e3a184ae204b0c09ea6630e001511183b0895227ad3f50345a583f4323287741df924a \\x00800003d30693672cb92ad444107a49157c9fbb031f24b87d13fd82ae720db9bd701c4a5d4024c7857e2794c840c429b5328b07833e7b2b5ca07f9ab8cc42d0dbf4dfb51e8ecea848d89615e81076b04b45562d4691b40843d7ff8651feb166bc7140733be10466b1456f98e2c244df81ede3970331a0689db9535e36c458e4d6985c09010001 \\x6e39324cbe77699547033f5320fcfd7e31abd8000c96d323b45301c64a3e56328ea29621d5db5f84693cfaf2c26f262d02627b34a35b0d72cb003ca5c7be8709 1661679307000000 1662284107000000 1725356107000000 1819964107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 140
-\\x4b05d3d2881108089f20623af2d87a1c4f90c451f922b8539cf86cae2a237cfb4ed674c4286d5363c2ebe6fa1ac6b18d42ea333b13d7f9c0ffb86491d6498a08 \\x00800003de640c1f7894a7835a356524222ca9f915218a97bf306dc990b360f91668c68767aa1fc3264d0ad0cf771e807ccc5c353d2033149348bf6ca1ff0b50ea67e6cd80f6c976d9f397ce644b33c67aba2afe430ba3d5d9125097fef61fe13b5b1feeaaa2a1d7d22c37317bb29412235172867766b4f2277c36bc1f6008e63bf5067f010001 \\xfb7b43d472004165b21a125b995e668bc1c94fdf3d3ce9bdeabafc9e0ff9536e22d58274875d4edc15e1eddd773e995d4477a9d3cc5b4f5e00a6d18473893b02 1658656807000000 1659261607000000 1722333607000000 1816941607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 141
-\\x4bb9f4be2e9d78a3b716ed074bf13b9658bc520e00296aa5b2046574b77c6b8216571e4235ed543e6d859f5ddd420cc54a516cac9c451627fdfb5fb7dc8f0bb5 \\x00800003c08058165cfc67482049c802bcdd2694f0b88b8afa0b0d630c9c2a96662fcc58f0c92decce1827dd8854ca0ec9ea7ee318f5282568a738b8304b1272c4e09e0f8c23c578a8cc616382ec3b68541e0c308e1dedd5f3b3157bc5a03e749a0e63ccadb0f513c6f4384d3dc775d12e0f8763dcb72432a3434d960669e43e76aad833010001 \\xd9ef9e180dc7c568213f14b99f011440351f84d77ed640e318a91707d51fe633318175cf29b4fa51d0c4361ea3e7f87d8152e682aa81c0bc5660c16f2312d106 1656843307000000 1657448107000000 1720520107000000 1815128107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 142
-\\x4bf19f012d61606d0de8180c12be73aa080128a163d74c9ab810f0e61eecf582e6c644b1e9f268c53942f7b4ea28d1cd968c1ce6c46677fcd04e0e0613e55dc2 \\x00800003bb9210cb0d900b19c48f4a53b54b526865e32d48ec4e42cb72f443cc834fb556a7206645b8863e8b56291a8b6cc6023f835f215eb7d8466802448ec0a7972e8674f48d93362717d49e10b6cca4c0fcc1a00543c88f81a3797c95c634e7ce1f002740e4fb8ec38f87adb6b8ce7600a8c44e15634af52b152bd91fbab618b77e89010001 \\x1cd627d34c0bb9d78257332bcb1e8c5e54f570501cae4246a02b43fa167d3950ab0debbea910864955ca058ec4b13afac164c8163982a1d61c97e0737a685c02 1650798307000000 1651403107000000 1714475107000000 1809083107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 143
-\\x4c65f267b54e44d1f222cf54a671106d8a9b553c0fc0af6c15cd349ed819971b3c571e146fbf7ee225ae9a3c476b42c718bf72b70c119a4bc2da3a5cbc3cbbde \\x00800003b3fc38f1edc72756fe32636fee113b8fb147bf1ffb9bb7032ba6094978b84cc4b27d27d0807ad9413252e7c2171f51caffac8592be6ce9e4534564d0a57b200d1639dfaabf461e48847173090673b604a6d299441acc92bfcb303e1fe8f15f8b636cedf41ebaff41ef67201b73fc820f37464f506cab6a6fc811a1e77b34e44b010001 \\x785486285d01e79109f9c8ff456298c190d7ae334db6c2c4282c6fc4c279ee1e65752fcc2c2badf29f95881a5473b8a9ffd4f79f857cd2fdc09a2b5826926b04 1661074807000000 1661679607000000 1724751607000000 1819359607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 144
-\\x4d35fdad67d01f76f86541e617c58e442e5f7c1a013e172c747989a900b261b57f7c3fafa96ce92e5a83edd0aebb5f4407402c3c6f6646b505465b0c38c62f51 \\x00800003be754894559cf68f4c501db91cad7af6acdd75c91d7f3f11e4e0c2162c786e12a05362ba315bbcc977056b3bd300d7b73d5907f62f2843eb85c1efcb93d84b148c2f07d45cad77b5e6465e800b6c37f513a6a865d17330ea67ad6ee2bd7eafdb8021470d60ad23d0770a0948b099b9a971918cefbafecca0b127fa5d8550c465010001 \\x8da19f26c36b122f791861e4e8ccc831a10a0615920014774cd8dd2540c5714ba17cbbfda42202dcc90e12b4de99787a86e389eaa139f664f529fbe6debcc806 1643544307000000 1644149107000000 1707221107000000 1801829107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 145
-\\x4f5d320367cd5ab2059d84fc80bf65b9855eed8391d237edbbb0a1f2ad0c3fd4f9752e6c6db3789d6971abab838c3c59e1b5fc3eaba8ca8f35d1611d17042547 \\x00800003bff06bfd27bbd713f8e00d3658694f1e85c1557df17ca61b40e7be2143b183600d6b50978e77a2ed0b8cf61ae5d730c201257977bd73818f6117e3a8dadc13567cbf93e6118e78f823c2f6df6718a382ae246dd823ec28acf791b9632a1bea4b51c54e3f532fd5c5bdc787ccda68ba06791e35abe70a83f0e69a3790f1ff1d1f010001 \\xede24d3a4845547f01a3c5746d3b858362f46124c264eca3e6984d0884de550ca56dc318fd4ac87c5544400f6ad535614da5833d468557caa65c9bc11db3e80a 1652611807000000 1653216607000000 1716288607000000 1810896607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 146
-\\x53ad0867462efa5c38248c93e31460e3d7d9a9645787b36d4d203993ea4d281f3d693f92dc8f8c2239dbc28143aff7dc2919292642eb28ed6a34181deee97c0e \\x00800003d76f59d86095fc0bd2a4d78270f4b786a9363eea38cf67a61b918111eef9afad2befbc2d5ab7e7c46cb2e4d781d447f424c8f154a5d747fbc17a6d7e380efa1836da9c3b4e108bbe248863c0bc7fd40b9b8b4e94f790fe631141d032a00185e75e247cff2ee99078b3497fb8c27368aa1c8bf03d55c55d02eddb9158b73a01d3010001 \\xa3709e789b79fe6d41eeaaccdb85faae105af39831fd17233a51f9eaa2483f0eb68e844d618b26168302a78efa88dae6cf97963dc98bf8ad8e7e3c723e44bf06 1645962307000000 1646567107000000 1709639107000000 1804247107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 147
-\\x54a9289e6e2a4f9b3ee54706749ad9c7b87eee5ab9452903c08fbcbb5bafb58fce10d441f1e086e92082a09de9b077ffd843f23c6afe6f20d27dd78e075cb203 \\x00800003c4504f0538c1374982b7d543c401c6bb9466508ad1acd5688fa3d29d344a802047bfaad0401b9359267e7af860de9b01c31e4281257bd05f193ba28f28aafb86b8b80493ffd404367136d1df858fd5a7cfe4f33bd254961df44154649aad1b516be78a2ddc654d74109595384c48b66e19e01cc59c6ebf06d0259e79dea73bbf010001 \\xe07224d22c4141bf6757bc6ed493d1a144636b5cdba188c4a9ab4bc633d1eeff5e0442c8ecc442509ff8b20597423adba7e2d2cdf4ff760f67bf652813066f0b 1647775807000000 1648380607000000 1711452607000000 1806060607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 148
-\\x58edeecdb2086d5b6505b12025286d5cff4aff32ba05e2bde5a515677687573d121655ed89299f2c14d508ebc5678bf9bf42f39780c1ca3e5d64401a17d710c5 \\x00800003b266b2c33e5dc206445ab9e5cc9d977d97020d18fb149323f3a9686f52689e8930c7a41ddb019712a5ecf51050234314f426568e5fcdebf11c0db89b4fb8e12629f31ed09882a0f08b16ec60118cc8a519315379d5aa84fdc20fcb052724978b36492f1160c2509111ec51eadea07ee1f46ebd059a041ef20cb4a0e5a21e7e6d010001 \\x01da7ecb4ef08909a75d9c7abe6f342d1b8d7daf5d5bf207dfbade7a4b4a54a82fa7bac504460655938f2db3aac1e896ef419d53b0638680227ba84ffb2a5b0b 1653216307000000 1653821107000000 1716893107000000 1811501107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 149
-\\x5f013a084e7b504461814d14f8157fd7c6f8c20d26059bc74ebbc6872c755b6b47c5ff4f3e9009272c06e6c4e9822800039700e11eb80b2ad8aace60ec398c73 \\x00800003da7ef70f16c67dc03b2ae5b55eb350fb30274d5e2c92b8e474ab1d8bf6e44dfa6872f98536b2fa1abf621ca51e2b6c061a37daf7d436836c8135d0586d0142dfbbdb58d440100f4a68773244f78a7e3d5465f06450f83c1015292fc75c628a7ed1415c83ce5071875bed6b2ddbb9c153c994d63d3c4c00a296fcb068f4f6c96d010001 \\x7f4036e121df1f858be10b63746a3501837da70b14b6739e6efdf45d62e210d448d3a09070bcb26172a6b70675161e964ca5f0342ca7525fbec8c9eb7324ef09 1648380307000000 1648985107000000 1712057107000000 1806665107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 150
-\\x6239ba67c4bee74a9ac514631fd108580de9e9b6daa8edd7176551aec46534529cbf8501f2110135933a7beec891f9b32e069967b73ac70dc60d8c0be69c8474 \\x00800003eb8569a08471af9470d73b5cd2c61333c6b662fd9cebda8c8d816c99cde5330600b33f2a30a36dd559251a5e5106ab45299cf67c7b9e30c2654d4119604a0c4687f64a39e6a0a74ee3a1dbc3d97ca970f89596dc0a10099afc1bdda5ade2b0ddbdf22af91575f500827bb14ffd1523b69876aee3559bdcf62d7ce08c6badad43010001 \\x0920d5ba7d7524b01976b7dfdf004d74269ebd35a7bdc549ac572ef19b05774d61be988eccb547c93675476eb0128927171da0af7c1001ce24eca9a0dfeec104 1639917307000000 1640522107000000 1703594107000000 1798202107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 151
-\\x62310c924dd8528747d0ad914703263fde7e5872d8811fcf13e21069de81c49eaa507e5f542ff80c9a8f677244958190936aca91bfffc7a104a14fe8e44fd529 \\x00800003d9db5a45ab656c067a2a36b7c7a7ca50dab151a49a74832f55529c2e4551c5780a7f5b691988edd8cd30054290457a6cc4fdbc76520673d1d2c6d5297c9a4447ffeb9e8eaafce740fe83588f5b217f10353c933b52e53782e3907bcd98f46568c93e2a89ebb140885183c22bcf839d2b6226a61c83d992bcfb137e440b4a7177010001 \\x2af04d566648345c59be599c364824cb2a4d86b678f6c382d9063bc5e2e854ab5a852202bd024c51719db588741f258c83ee61ed945fec0b56babaa4a4702701 1638103807000000 1638708607000000 1701780607000000 1796388607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 152
-\\x65b1830b7f7c588d605ee1053947d6d576fb8523cb8d5cff74b2738c0f4b88aa035e549792f5ac1aa1a770cdd5c7b2dcc89db2291a4cd6aff39e13a098a53032 \\x00800003c9602a0e938dbd957eab57d9581f511f91042bdcb36b986a6fc08c127568e28001d5e9128b10ca335a690a3759f767f35d6fac0222f920d0af786b210756bc043311c44369b959cc468ce21a64020e7779614441aa546b558b4248a96212c0cd4bb42c6e6af1cfd1d096f31109621d307e1aa3e139f04485cf201ebaedcf92dd010001 \\x9404c73bf6fe4a707168be329007bd625b5aa00bbf0fd0fb25c22ddcf545bc91a289748f968586bad7ace908391820188aa3533074e43c474f38342fd6d54107 1633267807000000 1633872607000000 1696944607000000 1791552607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 153
-\\x6dd11aa4676ff67568af1f7ac2f599dd479bf87ae9bef5a824ac4a008c687019b73ddc89560eb7eb62d268b41f5608ebd54a16fcc9cca14c400721ee743f9384 \\x00800003ce3a01245155fda5e4425fb392d3a8fdfdd5099f99116af22a28ee4fe1eff99c877e3f03f0c454598fa131062b38027aaf8f604865aa7e9155fd7196f4065b9a35798be89e86beea8da18855232960f65f217522ea88b59ad94c884280a54e6be5df2bb0fa0ae100e1752c2f0905d23c471bedfd3a42486cbab55786e050b319010001 \\xdd992b8c724e0e93d63f4e3a3328139fc4c358b1ee17f93b07738d804a067dae16fe69e63476779854cd185b759b8551edcfa153ddf3544f62eb221b4e1f0b0e 1651402807000000 1652007607000000 1715079607000000 1809687607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 154
-\\x6e311f8f606d77ef71995fdcd8b4d44b23743fd5966a2cb6616c79b3eda273facd235a699ca2e520eecb88a47fc97cdd6d846eb75e44ca113bc8a195d1d5d73a \\x00800003ad0d8c1e794ae93cbebde92de3eac6956bf526d3f79c0fe833b4ec5079a3e2c300ec5f3435770a4301f41885beca956d07fdab8ca6a19500620045ab2e5d28393a4806b2538ca52a94f83c2f2da55435dd074d92d9e0158632be41e4ce96b215d3f0ae9eaeddf08e4576fbc6ed8cdfb9e67581ae6c9432aaf74e65562e955ba1010001 \\x12f038251fb9fd3a2fe37db985902c758c0acf47ee50d96e4bb260ef65d90bb436225edd6fad1bb1ff9f472ef5ed6f4dabe1c55ae4511a710b5b99ed26ad8909 1644753307000000 1645358107000000 1708430107000000 1803038107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 155
-\\x703d226943e9769ee6fb00e1972295b4d3f633290f3aaa1cd69f44185c8b87d13edbf208ea3383dd1498df985abf2606b1ebab874434f6addfc43b8506ca7d5d \\x00800003c09d33300e403cfd3a0f7671f6bdcb179ebb61df3b3a95218f85e900bae7cc6ea840af9366f47e8273c2126c83d79dc5ee20c5589e5bb48d2ab3dd33055da9b65044a7a0365cd41970ea8020406dc74274e1b4a45fc60aaa6b58c4641501d629aa3bd1677d19cc6613570c880cb63e2a46ac40388baf6242f2fe2e6d3b042147010001 \\x8deb519297cb518d815513fd50a3e4812ddfff19291991dc3b93d2a29e152012d20aede7cd4577d74d51d10055544881b3fb8d8cfdc04218cbeef9bd63bba20a 1652007307000000 1652612107000000 1715684107000000 1810292107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 156
-\\x71bd6ec71fca187dbff0b3f7351d0b4e974d3da0cdf2ef9ea165720e8f250e53935cb619817b7136f9bbd346da6c445498889aea0efb9bf4236b109d77d91175 \\x00800003b7ca0f6c5611f089fcbdd0c0306258fa5064cee0a43c9210aad52b6b56654072f56c9509ae209ea29182f0f1a19d54e959fde39b2f7242fef80d36b3d63b2d16ef87da5a4f6b6e7a8d72d6dd1108b088069426f619199a598b6d76aa56a7cbbe6539b0ad518ab73323f66e3f1627c2d746bf65605843c3c8736b6e5b02410ffd010001 \\xf64c408e11aaaed01cee339e557ecb6e31a1f76b64372391b08c01139df1428e7d780104cea15816cfc6d28c5fed27deaa1983bf9b42b01956aa511be70c4705 1646566807000000 1647171607000000 1710243607000000 1804851607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 157
-\\x72e5a1cfe423b488bf88aad6212d7f48db88daf3d8625fd827f1093b4d15fa47f419f0743e044ed06114275f2ea87dac066a3f389b1b2355719a6abd480bcf5a \\x00800003c29e24d838060049af3bdbc169a36890aeddfb391f4a8ef911d2bb0cf3a137ab9ddc7f1df489fce7f7f9846a510ff89a7f7ef617192e3e72acfb3297744c94b60dee801df1f049cfd9b064b174779c884a4d7b102749fa1846f1d8756f6de432ca7639076e4e5d9b223b18545fe3870359a5fda46f0ee68f2593dca4c1dae989010001 \\x496f2355ba16843c33cc2c85d987da35e31ab58c9974f33b07cefe5be7d8fcee60432e0511fdffafa6bda706e22d5154d5dcb3a92863b2d897aaa4f7d28c4f00 1633267807000000 1633872607000000 1696944607000000 1791552607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 158
-\\x7565e2659a6c52e01ed9a4a069c7470979500328875e05d714550cb2e642b519ef1d26e206ef8122ebc8d1ed8a48039c67f668769c993f996cae441f735c7275 \\x00800003afa38b133b540213e13b51736256610d0c7a66f5240d3c2f3719c801080b7550736c6c5f72412bdd762ffccf651af226aadc72751328da8ffabed74047c9086238f631718c7bc6f6cb4803d5fe447d8cbe745bf3484ab9c731cb9ea57020afd8dd11dc3cba32429012fccf7598b114570e586b5466fc939c7d591508e76bb39d010001 \\x8a38e25f338d553216eee4d4edf1c712a71588b770f361ce3d188da9764ac8df903c85692156e899b4290cfd02293f4849b19f40fd0b1e9fbd6f44455f85cf0a 1638103807000000 1638708607000000 1701780607000000 1796388607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 159
-\\x77e5677b77948fec66a07c9b1831b2267387d7625b10e412341335fa15e666753623b59177ede797c3576a34e859387d7fdd6376e61e4aa7aee3d1cc39f1a336 \\x00800003ec22e47522f3a76335f7c27d5f6ea5d716061a14d855d7908dbd3f989b9e4c40d7cef755f4674d8af1e60faae9f247895bf9e23b62fc6eccd1bacd8630dbd5c51f696f393e9ba9bd324a00ae8e49dca5da2c7759c743a0717a665abb8d814b15d47c53ff15b86f7a1e40102c3c982a6cfdd25556ff0e5d68cf78ed7537fe010b010001 \\xcf5d3016a31b9311a661a4de8e8f94db785be9cec590c6765e25d10b6ef6378c65c3f8af8c07cbc4d393b4e172db7d0b3c3d41a3ab68e04c3b31c23ac9d0fe06 1638708307000000 1639313107000000 1702385107000000 1796993107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 160
-\\x7c8954e2c59fbd51f8cb8cfe077e887712338f372b043e7a042f496605ec9b9b6129dee627ce5de7c453defc2454dcddbe122440150d37bfd6768216a7d8fbc3 \\x00800003a7baba87de1dd8ecc4bf50b448d60e207396bcb2504821068623d5c3fb87ac32fea5030cb76a6548aacb95fd50a7f4eccf2a05540e83b02d6d638c4976aba90eaa003f9bfcb08b655c233f45e43be007e0b97976587ed25948dc111f57b17f855baa38fc0f7307fd005bd3f55c8c0632a4760d18b96e53f9096f57de5e2e933d010001 \\xf39f2d3802b8b59f86793501a2e2462b5a78a80eaaaa7ea63412e99ee1541ae3a28b9941b01ac81af22bb895b03fe0e0fa11a66910cf3cffdd89df8dfe7c230a 1656843307000000 1657448107000000 1720520107000000 1815128107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 161
-\\x82954b66bf42b22ea6d04da94180f95b3ce6cc099232285a265f2bd1123ac9828ea1dfb1a19072a44bcfae647253239348491e59a9f5a63a303a0b01c41978f8 \\x00800003c26c321a8dc5afcddc40ee82feff8de95b19bd8e9ffa171077f7169c452cdf982f1406b04b2b85bccf0c6647bef80e7d4a567ee209f4f1fe1653d41a4f27fb0b19e290aa817de85a3ac330c0290792cbf7646cf3ce7576a13c2b73e4194bee043a7ebf77a3b6e53d8bbd5fff30a03aec3610837f3416d9dd4d818f4aa8833229010001 \\xefb614f9a6f3704f084b16b20e391a2133d6925a527fde3e84b4fc7fecb68537ff1ff78a9eadfadbfc482383132afdf31053a99d00e2fc1f7cf5e50d44a4a60a 1653820807000000 1654425607000000 1717497607000000 1812105607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 162
-\\x83616dace43d85164133c7c9d589f7cce64a8eecb0e0917df051514e9d8c8dfc7c55c3a1fbcd8c37b1b5bb2c1930a9dc38ce02318c61111538ddd4e99e342b0f \\x00800003dbf5726d4e87e375af43e861e41f88208f1c611f80b336ce2107949dc51fc96c7b4335cf409b1c511df2e1792f078014ea607de9cacc69b64e1c2d6a077b1457914d94f516714b17863f0b91f01cb0ba34e07af9a104867a342aba008f249937d9c77432307f1cadcc6342d8674e786923a5d8a802ad90633b04a08adb27f7e5010001 \\x8d2e5f9fcaf8fc35bb62d9b83c7d1db26a4d8fb73e0ae56a0c816c16de009973c82bbfddb0093b7def4032cf4bc77667d0fd66d5346a7022432712767ae7ae0d 1635685807000000 1636290607000000 1699362607000000 1793970607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 163
-\\x83558ea4a7d3ef3aa11eb99f69e94d3203b5ed95eb37cd4e2d56e7347df05a3cac8fdb2b9a1589a092bd8d4aba10d663959e1777bc82564e236853d3aab88814 \\x008000039a158c20a3d34fbbed469586447d1cfbb7164c9c14b96b8907ece02815a3a8b4d2e4b5d3919b8e3c604e1aac71548d507002deb7982b70e358c6043b6fed8c31210d619b9cfaa668cb8c134ee16cd26b22a4f570d394efb9f966d66b51cfcb7d96effe43ff4f3b71944f782bd86849853b6aecf6e10a6e69336469d87fb09145010001 \\x10f812f0ae4a541cc8bf94a0330289a6b18d6ef93d2341a147160c48fc8b0d4a3c778e4173d84ee81b909a92616e5511ceda7a8d51074d9ac8fcb437a945e20c 1644148807000000 1644753607000000 1707825607000000 1802433607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 164
-\\x8729943f6dfb082a42be742abc84dac98bbd7251d1f8274fcbb438876332ebff3b29eb72d0bab19d8c73da3f22a00e11e575e5d82e22d5a9e7e737828687c7f5 \\x00800003c4caa75e405552d30aaa605d83cb0c1a00634c23f0e40b25653b925ab15e514dc4616c054253d9818c00d6557609443b12fe65fb7fe685da195ec3326e59e3a124394550b651f9107c08e0c3f0cd2d6b59cb798d9303e4b9512c285f7e63176cdfdb29114d4e70380a28bb60f3747ad6424db2d183c8dcbc7ddfce1d59e61b97010001 \\x6b9b62964c31b09d087e57da80e653dd168ca75ea7e63c1ef08ffabe5180293f44edfeb9c730558ae8a93ad13fcef1bf39a7568c7e928ea759aed2fd242e9405 1638103807000000 1638708607000000 1701780607000000 1796388607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 165
-\\x876d12c9a0c2c92d653d555021b20b6a76d227756168e38b52952b5aa107b88600366b88a9c2823eebd7a992ecee55e5f382d4c864f37e1f0e88d60b07614c8b \\x00800003d1f49fa435439fffd51e5d081d1f6b9e6d1984ce5b64dc3b547bd09d83dffb77997625a8df8f851b644c73f38b387e2a81889320d7f999a6196c8003d3954c0b25a0b70d8b696c201cd06d81fb06fa749a353252f6979c5f83ecea4cf6726ed833a0f605640a6446bc2fa14e869993ff8630020a9688f5cf97f4cfdd2937b99f010001 \\x7654a83068166c4b67594407494b6dd40d6d94028e4239e735e9e51373c0d854ff2dbf696e5a958349b76a29cd5b7de8f23c76ebc3330d4d89351aedb426ed02 1648984807000000 1649589607000000 1712661607000000 1807269607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 166
-\\x8cf5e2e1c1c06769d9d966709954a9f909f0442917259bf87ea573bed2593c52a8eca3b8342998c593fe1e29e55e0fe3aa568020861d2819aeadb75b5950a648 \\x00800003c2cd2a2a01a221d6428ffa3cdbc9b36e4a70838c0271e2cc342f829f12b5c4860e47b764a09836d34449adb89ffc197c90990779fe20ab027675f07fa5a984f66700e2b12b1745703267b989d6881d3c80ef352ba3ad073c00180bfaef8098fab5113c85465dff16769506c3eb4ef6ec503bcd9f3c2cd843fc20993ceb4d191b010001 \\x37c7c18a5a368a06e8b805e0769593ff0de0385fb228cb2724e7dac20900b512aab4d74c62f8e6d89f1de7c306920127f773a86fca36f28314b04214f525220f 1646566807000000 1647171607000000 1710243607000000 1804851607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 167
-\\x8c49f5ee31ae7a6a7f31fc8db514bf0ee354b7723399291abfb53340d9739f03d83ad94ce64b56782ac6fe6fa59ab6922a3fd0c5ed0c37dc6f23e0356425d7d1 \\x00800003e4396a64546b63d88e351d2aff6242d1675c65f077528d27b11e384c44cf52b4a83605da9c76e611dab565d27c29f295ee02c9f4225801b6184d1706be2aeb957581571a4b746a56fa334c973413aaaa15d1e3d6f14aebaa6887d628c22e086adb83f5a55a006fb153e62315690e0f98f6e5932914050b265f6a7f29ea97d4f1010001 \\xb1ec745a60e5a31ed7a95f15c52c74aba152fd8d5142368e8df3ce75c78d1a0cac82a25763b75141bb1757399d1b5aeb354b35d7a71270b9e6bb56e0314b8507 1652611807000000 1653216607000000 1716288607000000 1810896607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 168
-\\x8ed566ebc8a17ea920cd7dd4bd99c6d2d1bb446753022957590d596d9632f7aa3ed98861a7975659e37f9be23b55b21d7e2e93173ca0666879ddcc955f814d46 \\x00800003a4056fd1b80e8d232bee629d7860798912a1d2be0c01792ed2a413a32f81abf9dbd0eb199bf89b22385484329e103ec3e5ca4af1cf0854fb63c7a471c1df92f52c053f5e7be96d6f170450739cb620df6d9830ddda97b0b79c5c3d975e32a8ee636060aeaa8a3f4066e92fee851fdfa2c274213236df62b7ff5cad71d9f3015b010001 \\x4c502685a4404222d905e1761562e2f8f6ab54f636bebcab97e84547d88ca9a0876c4c851a4f5264593c894247638b2787a749d17ef6c10a29565ad7c6949407 1643544307000000 1644149107000000 1707221107000000 1801829107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 169
-\\x9049871e3c00cb1afcfe9844292912fcd9d34ae7da38d650d23f974398001d740c0e28faee9e7b1605cbd667fc2d7dd579c0add9a3452bcf977809270d8c549d \\x00800003f44b101eea7402ac9754b2abb65fc2629bf8c077fbe7011870bcde560cfd305989fb693f8b601946133c4dc4bf920fa5a5dd93aa866d26c8fb4704b29bfd345f6e7cebcbd6fe1ea7e9ec16b0529998e8c7a20a6d2b3db3b1174e8b67e0003c92eab823aba721f36f8e548f246e0bd816394cfea1944a193cfa9057fd7a202e49010001 \\xd22a38f0e54ae3a1de786a33b70932e46e9cd5fa0aaee3a91b381da4f88ff6c03fcd1219b00230428b9371b67c98da4f553014370c3b3cddb371102780c7ff0e 1631454307000000 1632059107000000 1695131107000000 1789739107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 170
-\\x90251185d0cb95e8c97826a9af06bc6f2b08e301cb17936f5f68ac38a2d04fb62270923aee9b615c94739a9b73e8848a6f474fa0d0d5d4f9bfd2a7271a030e82 \\x00800003a7950f66a13e7c0cdac6aed6d5260c50c665ca042b9184f50a02e876d7bda0ddce4e327fe3bc205366314e99fc7b5f85279e2ea4c58b94f2f33712e16a9689678a76d5c1b678dc2c52278c1de48ca586c90e533ad8b06cc24448c62ea42a2e87d83fe787418042f1e4478ddf572763ea446460e9eef147efbe081af7d98704f3010001 \\x7617973ee2be91caf133e597b404c53684912956c3bee6b017c0fb1330c3afdf9b8253728d4e2513a887e705b73eef8c4597d3525ba8ee495e3f35bc02cbbd06 1639917307000000 1640522107000000 1703594107000000 1798202107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 171
-\\x94e5c218a0d4c8b416d51e9c6ed758824548e66d9361eb4919017da01627b3645755bb6d5113f787221f258e4a28ac73d52970a07b406298c88b32a2d5cd0ce1 \\x00800003b396a9dad3b095c273ca6b80dde4fbfd63ea401710f1773cb4d6220ec711d6b3aa5884184a2efb1160722fe8b33314e2e4232ced278fdfed507103ebb14caf1f72c437019a89d236d53c45e12fbd43a33ae3f545f08a65720251f43aefbd342f8a365ffb6d0bd4a732609798f51e69dc46b4cf73ce3856f39017917395109829010001 \\x00bffae324125e27db9b760e03fdb78c8950aea17c193c19fa76bdc5d68370ba4ee961dc7a1a5198bbf70f0aeb21331b611f4acb0426657e6d5a7326babb4704 1652007307000000 1652612107000000 1715684107000000 1810292107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 172
-\\x943939bdca71710459cdfdaac018612f75d97bf6a4fd33a1f11e6d1549038fafb092a365e21445c66f0745690d7bfd6f8f014c0ce758e444677c4daa96dcbbef \\x00800003f2fad10b2b5f9d1de0900a915dabe83c378bc13a868cc9ed2f3ce972826f3e87c80609cc8d5c19d3f7dfdd1022e4ce206cc4f2dd7f1746537a4c859beb33156965a36666c7ae9fdaac1e635bed5aaf56145da6414077dc0f14efaa4ff345861c49d446ad79b97c2bb505d2faef446c3345ebd6896bfdcbd2772b7df7dfeaaef7010001 \\x4e5f9f56a63342a35daa719d4f1c6a5571f5d1caec9618e93ccdf3a58718fad7f5005f598335874687a0e2430a631a0c2c96d6953dad9b478c9591e998508907 1632058807000000 1632663607000000 1695735607000000 1790343607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 173
-\\x971dcaf60676cca02a8cb1399062ddb23c50712d9a913ede4794c4104914c9fb27d1e3f83c9e0a8b6d8f1f721f1ed928e9d2b695278eb99d65023b83b97249ed \\x00800003b2238105c1c334db799e0530f8822f8c21f02673d31133d1e33f1b0a4cc9205634069cafb1b4434802d5fb25ea43c6dcb3eb7869f9e38fac37a46c866ef3abbb5427f5089c7ed6401d2de658190646581aa056f65067a197ebd13bc1b3e10c4d6095c20aebf05be09fe5072096447a6724edac96431443aced461d0890f6c437010001 \\x18cc3ac072907d481e5d8d969e922bbfd88a96a0a6b447fb8992b5c886a4b69bab2f82e322b5f370a56e6f666ce804aba3ad4daef4ce7252b33b16b4729d0305 1646566807000000 1647171607000000 1710243607000000 1804851607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 174
-\\x9b3d9319a86b535139af3c203ab45c1bafd899354606ff9bdcc5f4a75bf986272aa48e43f87ebaf93eaaff71f352e3aa8d96f43a03d04b09813d8debeb6824e4 \\x00800003d184ef5ebc360619c91d8c0b53d03f97e264c5fdc1ccfcbd3dffc7edbed3f307e30b4ee781a34a198e0b8ac9d28ec98cc142d749796249795b474048b828495cb98900d41accbe358f2d5a629cc6b9f57589867c49b9f13cee39e87c5b5153bf239e2de6c22161061015e40329e2b65dac7494bb3f7b5de03c44bfb37a5311c3010001 \\xc1097f39974f8b80bc228feaef58e4bff81392d82cbc3dd6a1a94f17d6b351c80537dcf80dc0cc7feec328187b6ba209df321bc3a75993d71a969aeef51f340d 1642939807000000 1643544607000000 1706616607000000 1801224607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 175
-\\x9b293c3ad918630b2a7d522e460c63025041a317c977bd12ecb58914da777d7eba6f15dadc91e337b9f8ad2a8c63f6c944b800abe8bbb1938f69bfef0269d119 \\x00800003e233e5ed1dc1a1e763bb6aa4dfc2378fd5740d6e55493dc58b5bf467c51f1734a5ed66663e1eab7bba14db278f4f86f2ecfa44d443a818f0ef0be17f63e94cf5e56659b3eddd5393432ae780119fa79dfe4f13f64ad5744749a39912aa9f2a1a0c30c5d27426d9866f95c25c5a329648eab5965a4a7a18de75add34abe4f306b010001 \\x952d50f60269c6257a8e7fb274c004378796a68f3b1eeae4b24bf26842d954a8acc2576d6e03713062aad00cb5033d8adec8787597b4e630b4463a3cf5ea100e 1645357807000000 1645962607000000 1709034607000000 1803642607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 176
-\\x9cf9d6fc9015e8d7685266895332132dd23b9ee6211d54fbd5057222e7ce393abb37165674dc1604f8f139240daaff837849d5e1bca46bdd3f6e61bd696b395a \\x00800003cfb691c65ee0c0b56f563cbb76ac154405991b68bc21ee1e31cc7efad2206c2b7ddf63d3d5ca9ace4282738883e0a28cd5bb6dbb3a12858b2734cbe8210c8660af1a7ef53b16deb10adfbcd02bfae124f853c453c9c761116d3ef234c951cdc33908f10d91f04fc9b816c6403709a839540778fe1c31564531b20d01a457a949010001 \\xcce4c01496e9592876e416cda5711fcc4351ec5d72db9669987340e4ebbe938bff35aebdc21b6c6d5673fe723c6a5d1eecc06b6cc150a8be0e1ef193052ce10f 1648380307000000 1648985107000000 1712057107000000 1806665107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 177
-\\xa2a54badaa6fa8d82b370ab885cca781344366eba21278dc1f7818cc55d4a6fd37cb146bbc1ab9eaed103599ed48fe2df2811584336d8ce0f184beaff6405c68 \\x00800003aae12d5eec1fe57136c0ec4962b3b3529b74a523c31e58d5eee7d44d1b02e2ec277b6010e5f2a860f6b6170cd11790e403f5627ea8992c93f1aaff159c6c75965591a2228b37d894077ea140d8c9a531ddd9f42644d0be48ac353851b477686c9ce4f11baf96dcf3e011be046cf8413e768e57a968f86136f361480f5c5a30c9010001 \\x69dfe68344a90002776ce9d3838d1d369753551af12db5bcc4000e832f1e3a05b5bdfb77f9a77bc94d265f055dade13b7756a943a513c8c5fee1eeacf866cc06 1636894807000000 1637499607000000 1700571607000000 1795179607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 178
-\\xad2de4c725688d768ca385520df303c4d324c54d5b7f1d821074eecb88eb6e75f1e92066e5661594b106c059afad72625e226e1a531ac9d8aed437ba520d1a3d \\x00800003b3cd2d4b26cba07c3568e0c9deb051880cccef47cf6d2f8f143f5933d3ae2b872661566e1aa11ca8e22c4ce08740aca2cbb771368add5e8786e6906cdf8d81d2925840f7e62bd17d2da80794c5d96cbcca0d711ef7e4465db53a6a2150665109b19397916235ffb709eaf7c187a9251b2ef8e52ae5d515917f17706a12f80645010001 \\xbc6bb6b7627ccc6a4be177906574b05ea9dc2dbc0b5a9ad01a934a18a336be368d7223475778dba675f311ca2d3bd4507e9af0cc246480ddc52f8f27fde34501 1662283807000000 1662888607000000 1725960607000000 1820568607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 179
-\\xad81ce64cb29310b0229d1873b58e469cad1bb6026569b3184682b70a363bae87d0765d3d96218645b5ba63850f05cac6db744cd26672cc92577edc9a51a5726 \\x00800003d20b1da9a778babe9e68de15b228836cca5ae451be3698796383f1fb002f2e1b038f4f0451ff73ed71e444805d693c7f1c093239107c52c4236bc6686d051396d8e371d32291da761819424be834f5eccc50a8a1f5bee6d4323df90ccfa8f3be458cad8ea2f43893373e81ec1aec99ef395dd693ac6e0126f1b41fb7c7bd6315010001 \\xcba4a6e8e4b07d375bb50341a148ab650dbc5d9aaff1556ba6b47d6eab0237c808c053594d6e20f7f950687e17240403cb8ee44c113c33db488e070b8ad84402 1648984807000000 1649589607000000 1712661607000000 1807269607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 180
-\\xae892d90bec80d7059bc7e206538d89531a163f865d9beb931c5b9f3d3f0100587c02007c901fd335228386baec8ad9f072c9a7a6412caccd8cddf48fe6c4fb5 \\x00800003d722afb1dc31204f234f6a23ebdaf742395e3115dd1ec07c16fe961ac57868060ae4718440fa57f917b3c9e07178a7ecdc95e85d49f8b9ddbdc715a7fe960c45dae05e011bfbdef974fe4f1ac01aea063917b6ed59ffc9cd38f60c751a135160bcf4c1a9c9e41b64f57e46a7cbebc927c58c42d553db2f5f1ee8282bab3a2521010001 \\x9b1d480a5b71bfc877355694018de3c59cc46b66fc1fcd7ab8ac706720f7e54027502b9ed4f0a4d5fe27c23c57fc10bd8dc5f044fc58e5f63b7b8de1f9ea000d 1641730807000000 1642335607000000 1705407607000000 1800015607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 181
-\\xaf31050f36e040c09823e0394eaa1b1c273d4ef5faf2dccf6d1d1e3d309d5d20e994a304d39caef8e7aced0c7edbc433ac48f6ac2aeb2390c67d0325e3d56b3c \\x00800003c6ef868c4a64f65a742c815ceb3d88db9a4642dfd6610beea04e3d8355d2250eeb8458b595370c02172a48f597c6cc08cc716bb7800dc869c0dd55138aa287bbb739ea2ee656d2c1e3c98db491a6851ea9e88b2cc7a57a0359dcfe5cbfc8f832acdb64345eacfa46dd54633690d4fbbc360a995bfc327802910cd2a214f119ef010001 \\x7a86569789e51d790051148b7a9025d21a512d45e0f122fdf82fde657173db18066ff2457ad6ea1ef114cf552d1815f46db66ac8d7d8ecf80aabcc5b2c0dd608 1644753307000000 1645358107000000 1708430107000000 1803038107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 182
-\\xb399a3d2f034e5e29ee23806ec1021021030e82b57ee0d2776411738edecbd57c14f2b9598e7ede89d532cf883bc22798af066e6af8935fff88f71296a72e04f \\x00800003cc65198f50654ad9507eb5db1b15ef8d0806fb0f630854c5051b10fd09d23f1e4731aa99d1908c2c6aa4fb3daac2ec255085cbb97c2ed829988a042b6bb1d1aa4882e55c709c562f531cebf5e8eb1a092e8d1803e9fb3e3e31bdb0973df10805161d9f3e959668e05c5d84e4deffb4e7c9944e3340f3323ff655b222d8950539010001 \\x53268cac71c27057748341312b25247b22070c988e3be8362e65b93656ae90280c411f7a61ad4f08ad62fb1a85ed433de4dba7819b347359069db51cdae1910d 1635685807000000 1636290607000000 1699362607000000 1793970607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 183
-\\xb3bda15fba2951141f8e443cf41771112d38879e114f93b2cc3d96defe8e038c019c6f8bf3ce5295ee00175b339ffc12ae2f19cfdd2466864ddf0ff5afcb4adf \\x00800003c6080f325438511134a393cfbe27b1511420bde8f03a43e8980483f338c8f57580284eff5a91ff19cb22cdfe51f4049b46423075dbaa658c65de8a4358b0727950270b5118cc7193fcfe88b5b1ee3ece59a59e58f8b2d72cc80ab6c019dc3dec22a4580fdc7ad65c6193b50857a2234a4920abd7bb546f3879b72420fa06f1a5010001 \\xdc0c9a69f35410831aa8d55d223303403bd81441ce77fcae79a706c57018780947bf60c8495aa6d31f198568b8f4732674e480cf685786202538d48980d1340c 1635685807000000 1636290607000000 1699362607000000 1793970607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 184
-\\xb40971cd6053baeb55781e0101e966915299d6f75abb2793e8b4e3c3666275fee745e3a256ce0d912145f6f8393d41fff662c067255acf2d039d96fb71f021be \\x00800003f364b9ec89ce70c6a2eddfb69f2156538746d4b6754e6107c372fbf82502b52d64245fee4dabfc9c41ef38ef08516869dc072b6d77808988b01152e02b268c2b03fda0475f84c2fa1297e0a67f119e4150187680ac6982a11acdf0a63a9fc85bf8f31f93dd863b51a87db0cccd278d3508e34a34c3f41fce28b2fba34206aa67010001 \\xfc571496f5c2b58ca393792f4817b771122d2b21e35f9ba467e8cc74df275c48202e5e823f8037288238308aa8f0e5549362182ade785115524f30faa15c1b08 1634476807000000 1635081607000000 1698153607000000 1792761607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 185
-\\xb4099da81ad9b90d3f80f494406b4146bb0d9769b9824249a6392cd74081bac41d3b8d27f6ae60acf73230e87c92f1095d0005232c263ae864b3772060b34b6c \\x00800003fae5c55eee248d3fc37e9125cf3110aa0138de260235185940d1683055465443ca8116cd7eade107247a8abadc337b7cb6fa170dc600c7068fd49668a73fcef06cf45d29d1809bb98d5d45b8ec3f4c3ff47d13f761c5a5034a8a94e8922990d583d42e0bc956e1a04b0ebd38cce6a73d8ca3e6b3934f811ae5e6688b762996d3010001 \\x3a44e3da095e006581fe1806de48ce5f90211182343585dd25ae4cd408f265e6ef880d2e22e0afb0c188612f9138ebd5f63c7b33c29a4c1867873803bf912001 1633267807000000 1633872607000000 1696944607000000 1791552607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 186
-\\xb6bdadb9fda2c8a591ef130d66214863febe81d2509f419e69a63778a97284f0a6e4e9f5ddf9ce2c94048aa7dbcea3228472094ed554ab7691a43f81681152c3 \\x00800003ec9f81888301719cab9c0f09e05bfaead83a38ac5bba76ce0482f262414ce185dffbc83f9c6ec7c9931eb9c34935ed96f4b18c70c0fbeece995818a289a222686624f7b82101fb691af4b80125673729b35b427a7bbe7e753253f6316898378178c3c72b22246964fef37e209ed69ee5c11436f8995ebecc291e23db96757b31010001 \\x2dd4e695407475b0e67c06d3d5f23701d91a589f2dc25b5c3b56c9957c13237baa22bfe84e9c36388bb123a3c43e0fcb08139789858f36fa98dbcba5850ae40f 1659865807000000 1660470607000000 1723542607000000 1818150607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 187
-\\xba4def331b4733f8ff1646850d080023079aa46be2abe1cd603a876a314a2e3dde8a410987fb3215e492aaf1c7480d4375741e66ef6d1df648f73586d28f9f0a \\x00800003d63a4b0cbacff8e5862a97e4a3d11dfa2515e18a6f291578bc3753d91d7a9417a1b89bcc14800a85cbffe9a2248b02dc8b96d11d1f8c74f3e9b4979e28066644f290f94014adf4c71c42295f8611fe513b37e1e7fff22d055e20f1ba7d87900fac502e8c8cf257094bb2baa0b4522d2a0c2ac24f89f40c9f116d040fdb9cfee7010001 \\x9e9a87989c247bb288124c42f320a83e67320aac54baffd1c79f6b8d12a8f2a059df5981172af910355b8278fc1a5ba76f7522ce28c7b0582f2d65609e85a309 1641730807000000 1642335607000000 1705407607000000 1800015607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 188
-\\xbab11533eba509880997a35a79f9fe65644cd666acbbf05d37cb21fb5f2a2c5f9c661d2324033bc0740fddaf5f15ad5ffe750c126088f7d2a0b63774f61e3bd3 \\x00800003c8a7c0c18f6498b05a9eb831dd5a48dde2b2d385e6a801944a8b5a0fcd799893cef49ac0c0c0036361d483c4e93d511652eb50fd9f8d5b51fbe8668b5d085eb20036ad14bec5d8e73c9412a38f8c9c150aa97467032d9801df6784c60914afbfc2eedbe696de918794ac717b0c3442a4da3282c239199b041bd2d9e48ce135c1010001 \\xf5f66ec59ef0888be9f177fd559f24cbaefa7641ef130aaa60daf59e48dfbeb55ff2b284d612482e723c92acb9509fe67138f6e0076c220795f2dc9d66c8c209 1641126307000000 1641731107000000 1704803107000000 1799411107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 189
-\\xbc7d9dc4e88ca97bf109abf845ae26faf9897e305380938bd469c241a1fe71ec223730b1e944ffcc045436b6bd1f03cffbe5acfd340432a9e4c47a6a3d8e9d4d \\x00800003c4c16ebc4c15ec33716cffddca4884fa558f90ad6b41df2cf8158d554013ec3ffc31464b1a573445a0ea58f8bbf87290e086335ae4cd95f1e302e96c91f96c05051d2dfde4260bad78d741ab1087f777939c8c12d19c275a658a03005fefde033007a289b893663c3e49b5f850f9a91bf78c664e51b34402ea84c8519a2b1839010001 \\x45b6dc46eb784b92f18d6ae46197c7500b92c4a7b289cd2efd0922a3ea6ade30c002cf7f0298529db8f8e81a4a525487a0d62a70d24d8cc6eb731b1846117507 1633267807000000 1633872607000000 1696944607000000 1791552607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 190
-\\xbe555ca46bab4c2161c59998f8527eefc202ff72f8bd90944c3323f331f167c9d948d13fa73333f3eaadacb44fe05d36c08cc615fe6620e1bb4bf6b19acabd43 \\x00800003b57806ba924ea55acdc05cc32d5e1ca815a7bb76659139566507dc0a84dc772e5bb16740731cc2ab25c572b0dfe69380b21b2a3387a13f146ef61aac4d18744f6c98c93c3706041c608c70f1fd66f0798bcb6e0867675b6539232261bda30ae6c2839045f5eea37cb2a59a4b707071b309497b6c6fb02cc60a6d73a14a2837cd010001 \\xf1eec842008b08055a447e05668dbf918ff06a06432cb03e24dd6425751e447a0620845e070e7d045f1aab8376ef00ab2b20ae2107071a70afd53e1d58da3c0a 1647171307000000 1647776107000000 1710848107000000 1805456107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 191
-\\xbee9a5c7b5382a5f3fc0c1b0b21de746d935e98bddda567d93395d3d9363d0cb03091189a10799b09c1f11a609d1fb6938933ddb3034b0de138ec640f81809c7 \\x00800003ab59482118f819ff44f010693808ed0a07c615313db31bee11638d2c85f3ef066bbf9e978bbd8314f5a15852c5439c2d21220bc7399d340fa07256bb62d7618fe1177f4052b6644c218386790d3f3277e0a798eb7651602822b97331eb0f04d6f2ac6f71d49799ff5309f732d37f23078ef05a9cae06dd927082a9608931a721010001 \\x3dfe4da09d20dba553e33470cebcefe2b623f4e9dc96fb87263e8d0b9de32880dbeec2dafb9aaf32f1bf973baf89b5740b595b6224b91ca5454dd72d691fd00c 1630849807000000 1631454607000000 1694526607000000 1789134607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 192
-\\xc85d9b2e05c380a2d5dbfd99b20d8d6679a4e07a490dd975275e82d5c1577d2896eb0cba4ab8f5695044cf51ecdca3f0739d00ab61a47f83fe03f2ec137c6b9e \\x00800003c37bbd8815807e6839903801e197fbdf0c4c3eee113ad5c93a60343dfda2bf0b1d441c4674cc47ba128c9e69bb96e8a383257e41c0705e463c5a5bded30e7d88daad6d71e6900b37bfb01ee2fc5ba339e321c3e17f3eda83434aec129a9dacce5c53dc60940f27f9cd99ccdb6d902fa4100f0678b44510b729954a8c16ab2647010001 \\xcef96de7721800819cded6bc9a8b5923a1cb75b1321e38d33fe89291d0dd4ac594d19d3942202841bd9a46403dea9af574e76728c7c3f49199564d9cb321b308 1655029807000000 1655634607000000 1718706607000000 1813314607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 193
-\\xc901bbadfd9edd48a1cc8f39ede9a221672f9dddcfdce8439a4034825611936141fba6891ac208ae8ae3a27f12d0e7d457b38b794b665a34bc34adb5c74241e9 \\x00800003c5effe692e57fd59243f37ad60ecfecd1663cee27976e6f7685e98681beed0fa34d460fc57d402a8466f05773359465b2e0be847a18f7c8d3cafbb9e37ee9c416046879180eae05c0da2a48a027744af49467439f4917c321ff7fc05c82a879eb4bb5a8bc0eed7f521cc6b8c321d0e945ede6b16a9304246866431e48950c8d1010001 \\x9bb2ed448e2406eba784300a5cace92e480c796ec2b9a3c5e59cda8aad762f50c64587154c2ab927806da79b26021861f44c934b51a4e5fd851dd56d2af0a706 1661074807000000 1661679607000000 1724751607000000 1819359607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 194
-\\xca51fc27294add2129a710be49e320942966b128204e550fea1aa59dafe6113d257df0ddd5f57867390369bed36b90f1af06292e5322a3864229780ade2774db \\x00800003ccf07f99daa8a16752eb490fad50826072da816bca157aa68cc84eed645b40ec83bbd095c5aa5d27771b1b48e083dad47a172c2b2b7fb3c3ba5794faa41603ee91d28af799aa613bb1274b374f01097b4473ebafb72d0cfdda1f4fbd0ba0bff356c7b7b20a64ae763f3da778ebc0f897230889a656d821e576f6754289d44f29010001 \\x3ef88406b50796c70f372c515faa8fc5c2bdae13f77d7756cc34724e67d434b66f00b4428ffc0d1f69328d3097b12edde5780fddd8c3ffc98a85aa83ec493d06 1661679307000000 1662284107000000 1725356107000000 1819964107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 195
-\\xcba14813fbb76319e644c7e00a15827024f4a6ca00e73726365d57e5e07d68e14aada652523de7d1336b3bffbf1f0095f63b2e45f9f79d0e8d9b5731d75d997a \\x00800003d25feed35a8e321ae985b56243ade896a9ca367ba7c7f15a303f4928c35cdb6c561491be961600eae5c624a60c7c2d1a943c2dcec72739094dfaccb0393e9a9e34951c254647bd3d5bedeb661774cdd076529dd811b7f366b8adfc1c2e7555b6cc46a8e24e35311a72b1a8a7412dfcaadf39296a9654f0c09cabfdbd30a9b633010001 \\x0006efe06b6decacae0b61d7b46732e9b306efd169d995e41ef487f3c6e5ecd41927bcd537a5395a0c80e9fc6151f53dc147e0fcbe28818e93b6ae0223be0905 1647171307000000 1647776107000000 1710848107000000 1805456107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 196
-\\xd0c16d0c1dd380fca26f038119182d57e0b1368a82a32227a1efa133c799483b366abed565417efb87e12470a7a71535fc39d4f84def37e2e21c75ccc75fb295 \\x00800003aadaeb4472d910498f5a6d1471e30e3340354bff84243a399138e9697727d0b0788002c8c72859654bc62834c459b8eb2b1fa0f978a93a2f85b34f127f60e185a67d1330d0c01e5dc157272a8d07fd29c9897cbb247419c75aa22d250f6ba80d68eab305b073728f0e691954740875aadb1181ece7249685d42eeb43413825cd010001 \\x5bd0f6f83ace2a4790be757d47cf0daf803f1e585f25a7b97c86ff297eac0c726d8a05457e0742f2467eda44a092dd8488ff1ecd0690cf4c0783abafb0d83a01 1653820807000000 1654425607000000 1717497607000000 1812105607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 197
-\\xd10d0ab52bfd3cb16ac9cba76eaf71a425d395ca1f87d5c1bd63730ee90c9754609858e4f896429918686490d45def822b30450bb3d2340585957eb48c113be3 \\x00800003f624f59516e29ea9632482f8e667e4e79cda162404f0fd18f17f5d3d2133c08d54970f9f87fe3fc4a44380db3939dfa389286d9af1889c4688226fc0c594c772653c53b9fd5ac29e7c54e9d86e1b356734cbac6029925c3790d071162fbce4e04ceab6c18e31b19ce330336beefb4a94f99b1ca720eff2c8417c526ede4b6faf010001 \\xcf5c786c28ac29f1f52f0252b9d6c5794287bf6ba77efeb9b26306894eb861022a102db64fa2f276f14093079d90a5188c1ff5ab5479388aee2aad78a91c2709 1636894807000000 1637499607000000 1700571607000000 1795179607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 198
-\\xd27196664034e317bb551a4eb50ea58e55aa70c355cc191b3a62ca0651da745b181b38ab315d05a4f3e70f8a02a8279fd5404a36a8e65e5b27deeeac5143e13c \\x00800003c777ae9a90cecd3d44976871e0d77eee42445078e3fb19b469456d4601dc5f15014fb2b13d654351b64d38b8826d91c73bf2d21fc9d4b520ca44d0906453473013a789c92ac7c64524a9b0dee7c1242241156e9e1113cca2b0cd32413763e1df0560b8243cf5f34d62cd025b68c9aaa1ce7b978d758f5d957e89c6748e75666d010001 \\x7a55e32ce6d385c6647b8470f4eca4380e7c7663f62e2eb4f421c6585a9344aa4b1fdf5cdf6b2d4f5bc81a2b46ee8887b1955117a50849b931bd57458fae9f0c 1653820807000000 1654425607000000 1717497607000000 1812105607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 199
-\\xd2c182c9b41d56c9b0c82e370a2b76871dbfb1b862b355475b731953298ad74ade81ddfe324d1624bd5f9a3f8e51d6be91549e628f949642dc6fa3f8b7f05af8 \\x00800003d41fe8266b09100710e6474f16233e6b2e3e37c716f12b467bdd53caa64071c857235de4a453f3694163b2bc709c81ed4f859a433b1d505079b08928283165aa03b09275d7c2e01ebb67862cf219a2d09c991ad2a96aeb412fdd5727bcb98ed5436646a8ce8368e3df98faa69962c0a89b288ee22138cc1f956f64c467ed18f9010001 \\xbb100c5a368ddb25a6972d6d31ce84405991038e88da327e09a528bf64551ae6013947f5db0f966dd9ce4630d37e6b51e2f0d2fea1ad694a639b75fe06f08301 1644753307000000 1645358107000000 1708430107000000 1803038107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 200
-\\xd33deda2a3617b557e43722af660514336c3e75e362ab1186e0d8eb9399e497eb960598e334006bf5193eba3a9a32801c6595909c3c3530b4ec6778d97c55f54 \\x00800003cff34e1256570a147abc4c5036b3fd0466894437e27d219b6832bda93c4a748fb8e0cef6502353094dd4b3bc540b6ab79b1f576ba296026d805694144036d9f57559b67e5b63f885fee32b2fe616b78bac8a5964b2c2b339680d4522f9aec5e2c903a43c97d98f2dfd6c37e27388fbffb84307112665f5c00d57d03de51fe5db010001 \\x25df2c14f153f2cfc9dfdc048237ed7a4b7c8b57d2fffbbbb2bbe9b14ad6b3c5719b54fec40274044bbd1b75d42ec06537ccad13cb8211985ccc7dcf81aeaf02 1653820807000000 1654425607000000 1717497607000000 1812105607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 201
-\\xd5791ca4be8a4ef55c399568f5090a3b8dc281f50ca3760d7b4a8251d784a4cc62d567cdc3cb1c77ee5c525c399eb2e6843b9a37298eb6e69232e22a2fcfc0bf \\x00800003ad32947ac8b96d353e02f49ae7d706e514920f5351239d26ba2d6ad460016bc31eaaca51b6e1e90ea690bfd22abefedc2105a6c5e3c30f3a814075e24a2bf3f65f4cc3630dbb9dd03cb696f7d327bd75ada0e7459a101415876b80577a5624c86c5c726bc55f1d1863f766190961f02f677e1ac37f420bbe4f193c78efd011bf010001 \\xd9899cece94dcbedecb24db90f2e5b18a7cca5d21a8f84f5d958ad1567e7bb50388dcf723f3638e78c1f2d54be2b7f96432fe63ab45676dc7a72f0f056b7bb0c 1635081307000000 1635686107000000 1698758107000000 1793366107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 202
-\\xd73d85d578124330479359f8f3099a68e0ecf1fd4c253598fac154be40f0bd0219a3b70a8b1a3d909d13480d599eb9cb689ec22fa25e00a1c605b9d602306b13 \\x00800003db110047c9ed1933a9bda6de346fe71a278ef8afc0c659dff01a18435a2c16f57b428e1745e81e5c526e03a045ae9ba98149c6f6dfe8701c52f41319796f390cfd5d4f6bf45f42008d0e46ff6e1363819f35a825f734e3d2e5e70aafb5255e76f993c05593e6d5fdee528b610f91ad4344fcc19ffe7846b507787964f7b65db7010001 \\xdcbd8f5bfde3198cf2afb840ce796353dfaf9026cf3a3bbf049bbd11031ceb1dfe186fb51991507b52057f80dfd3a24a5fe866b8ebd74f17d93a623e2de9000a 1634476807000000 1635081607000000 1698153607000000 1792761607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 203
-\\xd9d5fe5dba4fea136ad28de188a7d93f0932ab35131963324fc8f9fa1b66271b0a4a1dab5ba5a81bf96ee8591478519767e6bcd24e5547eefd461cd5767457c3 \\x00800003b8edf72ff33a9564c6e4a96cb24005f761dc89841d3994409c2e3ee73243632ac386b42368a48c55df191c2d15d08d252f5fa3299d95dc07b974cb8916c3f01c0e84f850909ab30d4cde556e0f4c11ad20f755ca7fa3b93c4501e8b0a336a4a2a3d651f0c4b3b6d2463a926332ca53459662c833fc35fffc06b302844e216f13010001 \\x56cf60244d5ae2dfd347760ed6fd5ffab4f9a21fff38cdfe10155c6512a1fa49b97de6270346739016bfd6448d85a9e31f7104eba69a8e97d4ec2fd7f0fd670d 1656238807000000 1656843607000000 1719915607000000 1814523607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 204
-\\xdb59e013103fdff860f1047a242fd068a1d3554d2aecdced1ba6c0e02bf51f254439804556b5560b0006454e2f3b3b8423fd7fa27d37d53f0097ba6cf5cdc047 \\x00800003bc3379097c7b3a9e1b6c89d8445759aab68811720fabd5cc1c832b4e8a8545586f5fbbc5f0acbb628786f9546e0cd1bed6ef8f44e3d677906a2b8dadf47f19a928669aa13dc3e634b2bf05ac521c38e5138b6eb495fa84b36840ffc50357b05c9add371b4d625563b6261bb491eb28d9ddf651b167142ed099ebd49ac96138c7010001 \\x20dcff2dd672ef09bd52a0a3ca28f2365285e16e2e91424a579585c4700805bdcfd94d0a07cfa927838ae8f32ede5f408100563cfd256a0dbfd013144bb5060c 1653216307000000 1653821107000000 1716893107000000 1811501107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 205
-\\xdd555b6188dfcadd888059c86f84e36abfa68d731338f3e4f6c1f47f716ec03361bfab1564356c4e7b6cfb252a9e3747658c7e4fe1c375e2e5a1bd42e8dab944 \\x00800003cf5cf349d3ff8222d75c0922c29e68e0ca8bdf4e6fb26062284ecac992f21cf967201df4036d3b978793248520a2b7b67f7b54af4e41206ac4280ef0b995fffc365d305db1fe5012c4fba32e0094d7def3bc2fe4f1b1568d2714f63879e519c1de3b5f8a9b4db35c8df1be4d5b44fe788e93739f868f9a0b1329b240c3f5c631010001 \\x14b0648debb1a7caa71eb7bea2395f0ea2b6d34aedcda3354ee93d84417d25de4b6b450491b14dea068a40eeb048511aec9a19e3700280d303117c1a6524400f 1630849807000000 1631454607000000 1694526607000000 1789134607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 206
-\\xea1112cdc85034e2298496e931a3348cd9e1a609bc2ea16f5f1e8d2a0bd3ababdbdb108ab38c412333d381fce9a055c1263ea92484bcac0fe345d193b3a1df4f \\x00800003c0fee66a31077ecea94fe52b697c27c43b9e2ba6b2128c9f16c79d0ded6b7e6cbb8269e89bfa13e2c0af0240985f42a4268d72b4478fb8e2b9d1fc030b18b2230755e2bc55599682ba0f0c8bd013f98632e02dfeaa56e8a046939e8b0d34a3a08875fa81c4352c640a3e58c98e7a92120da300234439a963e09e64d7da5134d3010001 \\x7c8c46dcef2590b1aa720b680ed6951b3075a36e045407cb9bff66b3658645dcd93e971566bc0d8e5370d19a4e41a9f0e21d6a59d0886b10b2d233fce2b0ea08 1648380307000000 1648985107000000 1712057107000000 1806665107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 207
-\\xeec1a1ce0235c9f36e917e09d24a580c99cd164a53a7972d08aa2ad97fc9bd37c16b25c01a567079b1c15c985349d66e5e77c258039c2b329b85df2924fc20b4 \\x00800003c3484ba3797c365a211700da7e1df3421d88170a40d18ed73d4a3a10e168fb266251d2c76b7da35d2f5b8a256a70eb5e72dc6acffb0afe363c4da1896673031b5a8548a2a8182fabc2e36842956dacf3f7d3183533849d91a48b3cd369c96bfbb16ab3f346aa01781db0abbe4bcbe2e5e87689119daba6f0fc0087994331b6eb010001 \\x6ba2ff50ddf48d66b407d69083c08bb7abad367b9e11362c80bd5b2b1eafe76af4fc786eb7a9691890a2c73c27690c3f2eb344fec48d4fd64abfcdf4d5cad40d 1656843307000000 1657448107000000 1720520107000000 1815128107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 208
-\\xf155af2d6961327622a821b4a4facd8afab44c82974443d21e8a58831c8ec5c5add478ac8849a2d82099e9c231b33e7a5a89a42a5d251f540c124cfca1955fbb \\x008000039e31c664e1115a781338b81455c1d9c14202a6c46bc66f64a6fcaf278f7074540b81cc7d62bdea40b86448594daeda6629dad6b93b2e662b59aa358b709d4ce303580af6ffbcda7857494b6f2958c6f8af6c6f2672677c2b02a2ab16e537162e4579f88570b55c222053daa8271375acfffb260f9872035fc5ceaf9d650ab769010001 \\x9bb29ce490d17399768d761aef008a9fd738e87c740a730d1c3cb0343cda5eea50211d590df678f13f394ae57f63be5b15aba9366b0226d7214481c8cd956c0e 1661074807000000 1661679607000000 1724751607000000 1819359607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 209
-\\xf3e5c8dd0c6858ef279b2dcb236763f08f3b028f51315f308d68084c731b1e77d433e51a0a5e3e3fe5d4ffa64724d5c61d02b8c6460ef72abda1ab0032916074 \\x00800003b0adf32eec7d41ff074fe864e21b2a0c0dfb9825bb25afdb2e8a309965bb194f2439b7929ac14318844254495dffa00b14e0d8cdd3f35dcccdd35a55e13b212cbbdc1c66de9c61bdd18633ec1f9eda8c6429baa0f1173d09425fe36c0fc3737328b9f61c878540199968c98a590689cf5520cc08022dd4c7903e44381d26f2e3010001 \\xc92f9ab17e8f07688109abd0c40c42d146483b9bde575856e656bd09995b26499ca04276baa0a5e966f171a6c8f07990b5767dd20cf0542d80a9f55fead00908 1662283807000000 1662888607000000 1725960607000000 1820568607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 210
-\\xf4a133caab323fbabbea60efed5a5794ea770a97d90edf17a3ac5d858b5fbd3dfa3a2cb95548ceeab5dbe41b811825aa0e7c9682fc6bda16b062995eafbf6745 \\x00800003abb4ded8fd5ee8adb1476757955471a505b9102de1986aa2af47d4a5c09b09ba08c25068467b2f0f31a64e20e2454f8e6bf34b09700564e8b6c83514e8597e187c85d73afcdd4a3b10084da51578a203898fb7781d09decd72a0e3b8f9876233dfae20ca809c07ee8001c33ec4e92262e4c47039894697eb9dd103e0cc945ec9010001 \\xd58524b0313af8b5f8033c63a1bcc0ebcf85e07c6a2dc21e4eb464b2d41a47732fc8e6c8f508bc51cb780de49b2266179aee12e9c8492c82c013749c03590504 1639917307000000 1640522107000000 1703594107000000 1798202107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 211
-\\xf99127c7b176953f13a319c35a22581062a37b8abca61faf8c75e44992eb38c01d4d3670aaa2cda13064a3ef9dce64661ae7ac684e5cb96b51ed02b460d522f3 \\x00800003cea8dfa89508b7f4288c7843a218399474901d1f695b7f49c1eba19cb4faa4b5ce43a3d399a4bcc21cef02adb3ef1070c30a922dbab0e2ebd4bf7005798131343a161511fb1744a14289eca66b5dff13d25b182e54277553577ee1c3c6663ef3a665873ad1f1f4329f5b89b035052253e3fdc248ab4baddf41935686bd004cb1010001 \\x1b74cfb23bfc6c9358627428e94ddac1280eb4c5aeec7c4b973454c7fa738df5fa55cee57ca0669aec960287b65aaec02eae1e601d4583ee6edb93731f99360f 1641730807000000 1642335607000000 1705407607000000 1800015607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 212
-\\xfbb19e98031031496967f4f5e0b8422ab445a8100ac90d7f3cff0b27248240ad989396cc2177bfba8007a9c00cc84ec89f43a900d067ba34b6764281fff0ac04 \\x00800003dcfddd7c28a9a6e6671bd945c5555296d325f2a228c87208c104dcc9b230316722f22d7ed5cab7b2d5ba5adcc39e5db48068b6d89452575b978d52bf04138548ceba94c101f6a4d2ebb89a64d896cb608ca183c68b60baf8e85fd9ee3aabada71c27562b300e5eaec7ae740ee5a8136a591d3fc7ecd9f9c954d8995a2bd58dbf010001 \\x5868a65dee09ab42033526c3e54cbec95be977393fdbf8739cf8ae4af1b140da7b480a46c36748ef9412e199531d7150458b31eecfad0c946870dda0340bd403 1655634307000000 1656239107000000 1719311107000000 1813919107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 213
-\\x0416759a606716e2fc8bd869ecb528acecbc4326805ee21f90a89845ed44c825ab7a57b98744a8f54ede0392a3eadaf80c4501430eada329a72da8fd7b307d5c \\x00800003c73ac90e187ef47cf1cfa7d8ff2423736899e7f4392782deea53d0b39763b52aaf44e10e8abe9f15f92561ffb41686a9cdefb8beebaa30da7b36c7cd53026b78e4f45530caf4f514a0f800bcfc1ce8f2bfd8007581463c1a66544e50e3b6be2a6c54a34857c59fb49b74743b4658d2b56608924052f879739ca487768a934ea5010001 \\x2d83841b09342da7133074495943b63ca30d84e455a506d20316ba1973889224b7c3216cbfcaf5fdd9062fcca3486b76530a266ceb754273b94d3993bfb25308 1632058807000000 1632663607000000 1695735607000000 1790343607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 214
-\\x054294dd5a0ab3a7b4761bc28bacbcde9a59b00d5b1c6a4c5ab484f641027f3cce97e25541fb43104d83b3b4b8eb4ea58d92208f35c2632332e23538715ec24d \\x00800003b63aa8a71aed86c68ce27eac7ead41be41ef15b30efa369f5b665acbb556da06fbf2125ec020a3bf8aa5a25cc17476070d94bd8c1561a95ece39c79338b9c4a599d102d9347942d651c74cc3b1cf13ea3870c86c2b6407e02c728e5770da112af947ae3c05cd37d0d319750567966b3ab7ccbf85db4bc496edf70b7fcf828471010001 \\xb853a49ac0ccd6dfb4339d62fb8992ef7fd60e86a752c6bc8860cc7b48df1f3600b842bd67c8cdb5c3a6d525db5f3dbdffcc4eb2e7b27c50b01827e06debb205 1640521807000000 1641126607000000 1704198607000000 1798806607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 215
-\\x072625279d4fac566f495f5dc1159a1655c1bf24d39dd6978efc8a3e32134d648d02f89d030c77550b8876d1c73088e2417cb034d01d2e5d96da0776b1d54672 \\x00800003e1e7bb6090d6a2f9fef4e009c9f61bca9139d35ea03264032043c9c0fa2ec440e612fa452b4f616f98e504b1744892cca537775cae35ee661d495405f6362c75ac23605cb06286c053d7025b707e930acc746ae727cea356951e73308b9433bd41d8073c05fe81396ddf44ab021110f5212b3f62793fc82cb2088066966910e3010001 \\x967efd1964dabad53482508e7321158e154368f6b8e3b659096cb2cce13ef48fff1efd17b1282e5f439355e6dfb6e321f61b62bfce6de75567b61f06335b7f0b 1647775807000000 1648380607000000 1711452607000000 1806060607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 216
-\\x0f7e35d8778bb90a9c11d846faafec875278513b1b7d98677cd634844664aed735e90dc516559cca4b96e401a5d3a0e3e2607cb9288cee39ee0162683c82d9f7 \\x00800003c755a68b58f149cd23661983f2ae7ade92cc067af944b680ad0ed014e52631e584db282d75b7fe41e9a9d51f0f204fa9c479235b5e87ca3a58da71a458b4a0e97c7547ae56159b26e5884be59f9e1adc8d0b3e42a6a69c12fcfec23d26040f5320fbb74809cea20f79f60ce7ca161d8d3b15f1e49b6d04b135755ddf14d309c5010001 \\xf5fee6a3cd35beefe784e2bce19b52adf8af379a0cdc35d29b2626cd194540208ad10c25e5e39f29c51c90d364b6aed341881f5ac38377ef48b12b7835f94e0c 1650193807000000 1650798607000000 1713870607000000 1808478607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 217
-\\x17da21ff3c3942941032a4dd34764f3bd7448e1ce31755684ff26eef6b211cc8f85e93b34f9253fc88cb21fb1285b26c7b6ff27de3640f01c9ea07be634ff1e3 \\x00800003d3e53ca924b838d181cdc096677f8771c3b834427fb72b76f47ed4acd3edd0d993d3a8e2abe8cc2d099e4adf48a11f5404f333c6722b0e1c3e3c27a04484fa199b85b0f73bd9beabacb0f53908761884a3a6630923e16e4e0546364febfa5b64c9e7f58206ab65d393b29c39065291d3d66a6a81498a3ff2749870376ab27319010001 \\x5d50fff0265b927eee906f42306123877ff376077d2548b37f99a39d19cb24553393e84c20a9ca1d753452d7cb88230c8a7a044696c83d474f92c0852275e400 1643544307000000 1644149107000000 1707221107000000 1801829107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 218
-\\x189e1e524e8d90acb6b731343013ea8369b69afdaec9c714cff8abf0df181c398871d47520437b3640acd2a8f058101c76572f950d0c5d0e5f5514f4cb135a8c \\x00800003e1a7f90da24c7f9dd55fb0d290a861c83bdab797782fceb6a1955ab2a6f62acf8c27ef577fc41fe668fb9904b3df95773c62fbce461a7cafab33b805093beecfcc013d00ef7dcb07e24bec7ce2444162423d3000641fa157c801732b47e24a482b77007829ad54152899ae1a1986cf2913944e6c2e61ca5a1ffb70838785ff85010001 \\xcad48997aa5c151f544df4eca99f3490bbb978240158247979c14478b5b5b36fc104e44977b68ea8ced65ef009c4b5d203cee94a52f707878570ec28bf429e09 1654425307000000 1655030107000000 1718102107000000 1812710107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 219
-\\x2856c7d83102e4a83a1a6e16220c54e4a9c2af430e70182e16eda625e2d1576c512232c4dbedf4394d203697919621c9ba997fa7670dd1f0ad70ea71429616ca \\x00800003c02130fa628dd636d9f025432a19198674c0821c0031ddab3db057fc9cdd470397e74efecb57f4859df9b3e67ede7ad7968ce0cf3c2dfff25397a07e4f77e592bddc74d790599332cfcab53fff953623d2ad7d48f3a2aa0155f587e69db551cb7d4f78ff5fa781b0cdab28eaa17ded44a51b3ecf9892dc9322fa1aa59b4df871010001 \\x855ce8d550074c7978590a2f5d8d2b3d4a90195e2d5026495f53d938f4ca40e3201bcf2a0ed633e25e61652fba9487a6b380010cd93d78472e8d8e0b3a0f3501 1655029807000000 1655634607000000 1718706607000000 1813314607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 220
-\\x28eec5061481a8e19621a5ffdcd38b78a42d44783629869b86c46d1aefb933b4c0646f08c5a11b7959044e4b9dc82d14606542f42bf58d74ae3684a60cf2cd2e \\x00800003c3ff6860ba9827c237a8a2dbe22d72dc78886f2d88620ca8543ed48af5c5a93c6da033543d972c216136c28fdca61845bcf6b4fa845fb13eef6c52a456cbcc637f5dfb3e359c8e751df32915601a727841bad37a18006bf50eb31dc0f4d2a7e7b08a64ae471fad785406ca7b3c73ae83d60d398c96bfbc6b2f542a0f4e93c6d5010001 \\x452caf5c2a8eafa958b607a43e13228876a66459e95c239a14e6dc1899a1e1834418957b0810927b6a7856c42b5524f545477a18f7320c36fb3cc896597e3f00 1632058807000000 1632663607000000 1695735607000000 1790343607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 221
-\\x2bb29dcb88372cc117a2bbfd22c5504769f1a19d23b0bc3b8217239406e51c2f61de1c76ed38c6c2b75bb26c0b9c63e97e6f6dfe39941e81ecb44ee7f0d8a45a \\x00800003ecddc6a938f3945c2f19b13167c8477dfd7e727727ec6e6a066308bab0f56e3799d424ca31391a5ebeb77cfc81ef532a85dce90d01b3dd51504d96c1327931b86ab14a51d98411b8a0952b18299a58c7dc3e7fea89593edb86b5c12183730b331f6b7ebddb7158a5f0112e7798e249031d6da1e5e72996a7a6892ab25528b963010001 \\x4af1d119a561f50b73de93e6eceb41c7c7dac4b65220c39c7e21bfec17f943b6ab8664dc2f51b114b2af5b1c69f633e8a9473c43191cd60e071ab1a634de990a 1644148807000000 1644753607000000 1707825607000000 1802433607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 222
-\\x2dbedc9297066a54c163b1de8f292d6c95d289c0bd011f2ac8ee699b9250402bb0cc53169a5422be918bbd1d8d099ca7fac895df653c11f71b1f0d3483403a1f \\x00800003aed38ec60e66303ec8026a695974c7637d99f4a4a3d158e520a03d2035e177447f4f06b742875e7917de7c42439ee2aa52f682627c4deaf744b1f89c0f7c013562168ff6b9ce998c92b0e9eb387f68ef3f5b1ce57fb60e228517b379ca3e5407930bcbb3f9d9a0e27c20bb9d72847c1537a2b3c6e003c827348fa1efe783d2eb010001 \\x7b88f2588eacf458bbf2d4c4a22a0dd4a39a3026a3ea116f4d6ae5140ee00a4feb96e7f7fc75262367d02559b300ee7cf12f760e6e90d833a442210b8f94fc06 1641126307000000 1641731107000000 1704803107000000 1799411107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 223
-\\x2fb6e9b4c73f5360d22f433adb4a4e19587304cf7408c6f36c209c6bbf4ace9f28bcf230525e8f1818853d7731732aa2b15b07ede48a7a837722684b7e4d82a4 \\x00800003df7560a863328a2cd80499b87609a3e0aad98b05dfd6b405fa3f153af4e6fdddf080c4e77342c409bd1d066db74cd3ed0c7231677740baf9bc3c804b1a50cdad9096a5c792961ec59a7e128396fe454c4e172090e576170b70c85cfb3dcea965d3bbfa893ecf27b5e46d9d148e601d622d185b24ede8f246aa13dbcd700e1629010001 \\x3b0befb4f8799ec38b205cfae8723c2d62346a224ddedc974e969d61e9262739bcee184bb79fe2de0c370764005b3a48f87e6a826103a3ae8e4ee59a2608fa00 1639312807000000 1639917607000000 1702989607000000 1797597607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 224
-\\x2fcac248df4e9a78a5fcae8778a21a291a46c4adeddbb1b9770a2c50010ce02dc068146d6c736c6f0bea25a011385749af2b149a92789e54be2cbbeeff87a878 \\x00800003c4ca70197ca7aa25708d5b41ac300323939516fbefd22018a2942f2c4b53831af32b2a9fdfcab2cd45ebe62b8f3b0a1c029ecc4dce3c435fc41ca6bbe95caec122734be165cddbb10ddf1487778051bffa9915f6bd8bdf41bd4d55441f8d49263a72403b9c6daca58eabb6938fc51082eb94c7cb84f03997b42914500f23ba5d010001 \\x4b99f6381f9ad803ab7c0dcde6a71ffaf57a407d76f3025c587eaa23c280855a9d255467cad71e5da7b2203b06cbea3faccce907d729e713c7f03171d3f91604 1658656807000000 1659261607000000 1722333607000000 1816941607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 225
-\\x2f82ee12c4c47698100207c43eef2f04f66749add4f3d56d664f23262e2749fa04af46b664166422127e11c65c22a1903ffbbf601412e53cb27a7e633f711055 \\x00800003e4a892a92c7c36a0511e04262f0a86e925b324fdcdcd0d48a66eca7cb69d014470e6ba48af135f9751aecf26d3698147f9e7284d07d266f5b45829ce4a4d8625d3d2a6826aaff8ce44b590ae85f5129c1d9e396432f5d16f14eb6d452df95010038f5ef4ed5d4103b70b15dc1d37677edc9d95ee88d84e4eaaa0300d956e9b6b010001 \\x512301f7a559ca60dc99fc8758017e0aaf717d6ac19bbc94604a02703336fb252fc05c62ac0f13089730ab042e83fd3d5b1238ce6de8c83ebe39dc8d689a030b 1652611807000000 1653216607000000 1716288607000000 1810896607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 226
-\\x3042d956e3d655473ee26612d06795a34220efb7f1a5ccb2340cb098ab210b3a03bf60a2438a4410b21d4a0611c156159b3d54b01bbb1ccee3643260781169cf \\x008000039b030690da897e23cd0d0eba46fbbbdd0a0e03305873d85b550acb468dc4d04ee9f9be02051656f9a67c5694145d5d40066a54d6b2e5f0ab9270eadc07720100926763456da3d2ab6f4627542dcc30f255f11af002bd537153cf3a7d005591696240c796261f08a61985db9e7bc625d2efd9e7cbfad7883c0bd531f418152427010001 \\x9410096008c338164d2f82c68b24db1ee78ce7e46f8a2ca25ee267f2a56d1a6d5e7c7292d79b24d8a179b062bf41fd2340f0e76a76c7054712de36adcc65bd09 1640521807000000 1641126607000000 1704198607000000 1798806607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 227
-\\x3296f8448f5eabbeecc0a9877c9443e744a0c168ea9759ea8358903393f6784b69815f5cc9859f2904d6a390195df8aaa9fc17e609083eef9991b45c31d67b66 \\x00800003c3ee312e23d2a800ba0f2e08462fca68fab222242c89b5df816f9892c7536572639287ae4fd04f6aeeaea514f432ee032d8a46a1f7d8f0ad75c37cf0d476165b0061d5b286e099eac42ae8ca38574c0952640e1428e2bcdd8df7ff81c2f5b7c6c46b1f938a4d783afb7b1381799ee2f2f70731229605febca82138f3371840e9010001 \\xd8f327da9ab7eed5ef531b9eb0a98019d7ecb39a53577f91bf9c5c633c00d536330980ee1f4bcbffc694ea299a14549ee83cbd920db2cb8d2cd84762548caa0f 1651402807000000 1652007607000000 1715079607000000 1809687607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 228
-\\x32f67029ed2713a066ef6f96e7ef364b8818310b4bacd4afe047467233edc407ec9b3af6409b516c542ad1def1b26323c9ad24f3b3b69959a8cc3e166d80d59f \\x00800003b82a5fda787759d03a529af3dbf395af48299195fbfb4b04d5ff202fe144c9004c8871dbaaf3573f4117db726636af0578edade2d160cb1d997a38007300c53167c8e92a1ef83a84457852c4e1bc9dfa3867ea84eca0655693c529e3d6188249473ec50279dd3b93c767140bc3f247489d2406d64eb239512223d76d7196b3c5010001 \\x9f345368c57a0c1ffd1daf8b447159e0a60f9a244a850e80ecf0ac13ac1b370b72af68ea469eecf2e920f6f92a3d7fb55f208344a2ece12ca666efdaf4659902 1645357807000000 1645962607000000 1709034607000000 1803642607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 229
-\\x34be1bc0c9f81097d7b03afe69d5590a5d48ebe6ba634b403ad62e1e0c5c8f842fabae5fef75cd23ef1dd136c860d66c6cb170428ddeaee95405730cbc13513f \\x00800003e73391fe1a8af9a6061a82007231d9b12d94260a572393bdce115e0a6cf3be87dba29ead9ee0eb9b18d19fe13d6cc773d8cd4439bc0565e554014192dc343b0948228ae1ee0837b799b6826bdf5c34751c2c7ae561b75ee228d80101d32ff052dd4607a468102a093071ed9dc4b38c86dd091aa3a714c40f90a6deb38ed66adb010001 \\x5f5770e1691307fd31e4b8c1be799730b7d53636bbe5dfbf9f55f127dc913cde32ed5b148b14298b0f62ebf499af8d0482d514632c969ca908ab21da41f54706 1660470307000000 1661075107000000 1724147107000000 1818755107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 230
-\\x35aa7e821847a9105cffcce37923523ac31614d6aca5f5440b5fc643543be430ae6109b1fc06abad936d0b6250a51ba56bebd48e8ab36e7366375ad628ac025f \\x00800003df9310790eaad0e4dd6902bc8400479ab95457ed660b65f052164c8b639c53f5de3635f82be122d5c23649e8a173500f0fdec778407f2b8ec6bcdd405d5608c7cf6f355b51c168aa550892a3f41d22f06898a1f9b917e12a09368fe054e93db86db7fedfefe2d00d141e6f6c47233dc139a0bf2f1486cc604462dd238dfdaf9d010001 \\x5b953e05c174e4979a54626ef03a7a69d2fcb00062981f395539277db6bdbf51b744ad63765f3e00984b1273e870b069f4980c8d7c5ca5a88d7aa99b0948b805 1641730807000000 1642335607000000 1705407607000000 1800015607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 231
-\\x368add4b0d13a4d2e7ef34db9a504ffc5b22420d667a1ff74e727cd2ad048eec8d45ca2a5bea7b6fbe622e54a0033f0b703e069489424dcf45207b9cd0173b82 \\x00800003d67733a96e43c0dfc773c0f4ee73904dd702ba80115ad6aa40ffb9e58ffd1a37f44820311348e85dddf1f05af74c81f41f4b42e47033339fbc24bf472bbff9ad968e2f880ce78ac980c571179715b28a2949b16ae2f6474b42b036ce1ee2b158cea481c0a459e445814a939c2319a9c822a60cf45d2b6d377b73f5db79dbbd23010001 \\x14c601ea5c73e689a82eb4146b67f8644cd505958d16089a2ac9123173a1263a536bc5cb5986678afc6b36d42570519e8f39cbe726d7eb54435eb75bba448a0e 1644148807000000 1644753607000000 1707825607000000 1802433607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 232
-\\x361e38a126b3c5e982e32fbfdf3aa9a3c24365480f40e4945ed92d6e75f7dddf05ef518c41f25e23804211829863d771773d6fcc1d1314fa5724bcfdfe7d9e67 \\x00800003b4f0b4918290bed1dd8bada30e52e319c426c17fe2d5169e9b9d34f1417ddacb1a5d37c364682fb8a8231d7bf29f68426a00f40f95610981d6aafa1a42d58e8197eaba5c91f080c014f5992d5bbaf313ce6ae9b228a331824d9f3c049a8a3270d74f0b022bb28845dbf79a92cd7963c0049e4f04f99a375ba92bf956aed0caa3010001 \\xc943ebe11af3c83a7e7b89328979b3e72a4926200185d95e4b1164d1a3de13c6e44654d5bde4da202634868240512393e019863c9f5a6252a2f4e9cc032d9405 1659261307000000 1659866107000000 1722938107000000 1817546107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 233
-\\x3abaff1ddc5330fa1e70795023b4297171490d071c790d95c7e8b011ee5c20dbfc7fbe26e018f02b5dfc72c59eb431f099a695cc411a1591d52964a3ce52a108 \\x00800003caa3b6da45371e4a12910433309c773fcb4ce14a652b16ecc6d8009ac6cdbe35d77847c7bc7fdae3b85836cfd2aeeb595b0b331d0cf475aec538076fb2d866fdf2d47ff023fbb41d5729db777e7861f016b1bdd8d5501eda72c569d1820ceb739c759b5cdf3762fe37ff51d896841c587cdb2255280476a2d3d2d9adc268ba59010001 \\x46a795a68979d5df31041235e05359a5ab6954f0e55d924322f871a2ac08f6bb05720ed7a0a52c41c9ed2b157e3f2961260a8527ac2289538dd94febe6a4f002 1642335307000000 1642940107000000 1706012107000000 1800620107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 234
-\\x3ad2de65589ac7e7aebd9eb74379016f0459bf54036add63f237aa5797b4598d0f3a8da76287cc02f96ae1bca874e4fbb26c8ed8ad68271b4e557e5a1d120cfc \\x00800003c4bb9c34cdb9710b314964d075060ef4d293e67d63f17870663702e78b8a2de4353fc40dc8abd28278e379c44aaa2e0842075405a99ecbe4b0ea6a2f234c2d86f1387a4bc9b0ea3064912030657bcc6e18adb5f1dc01108704af15d895ba0223d273a17040760f484a212566425133d6eec6cb887bd2d88d650f5dd7be64a9a7010001 \\x4620bb138210a20332cadb547583234d8c0b784a20666e5fe36c7fddd8cec597fc32642a67d5e29fd0aa943961a49830cec48ba7258ad154c30ded271ad43a00 1638103807000000 1638708607000000 1701780607000000 1796388607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 235
-\\x3d5ecaddbe4cda82ffaff162c5edd012585c2a29de7cd463fd34f2bbc837e230532c22a8c04d6478dc160d47b1932d13540fa3aa1f976992087f24bdc529e108 \\x00800003ecd7c709b2e63a217939c8f619d01fe00f97ea4746a74f3f134790d3ad818f37e7383b4dfa88f36607cac4e5b5136fce8b98678410c4dd85d9dae40174c8fa720c292a7fd18d7ae9f0fbef53ec932bfeb61a83e7c46aa7e402ca5ca4fccb07604ed4f376ca1375a8cf80bd46f236d4a56c44a100ec1f10bda3686efc2e6380df010001 \\xf46f63c204614b6a8b8c4b15be42f565f9f47732e325140773d359ecbe5ce6181ce7376050d54d2d08c592e2f96275adb6086017fb1b80be9832a93999993701 1648984807000000 1649589607000000 1712661607000000 1807269607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 236
-\\x3d2e03f662dbb6c7f9f1607e9811ceb82dfb88eb422b35c578a2fa6f0b8af96ad047f825d434f57b0976d3d4c11cb8c259f3be7f14a5f51c5615f7af1c83cd66 \\x00800003e5476069b20a87b61725274be07d84c3d97b3e23a891ae1e89ca9ec5d426809d699b99e46dcd6d40304c4d9339d308247e51967afbbf01041f9121ed956e817b25ae43d45607e29c36bc807d1213e7baaef2f62bc5575f80b394b3c5cc9d4d441e3119dee7fba634ba116ae2ccda17d9976d2df966ede98485c98d66096c2405010001 \\xe80cf237b21fb6a34c274fd8b2ee4734a7eb9c9f5a574d380e5324e8069d13438e2f111f37ec722a9161153540cfb6da229b644a1aa7fcff7a8a33eb49159e05 1630849807000000 1631454607000000 1694526607000000 1789134607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 237
-\\x421a2c643fa67d6d08991fe8cba981b079da16f756ceaba9e907588084017863574adb7c29360ede1b5e77625e91096432e5d27d2d564f716adfb92a357c97f3 \\x00800003d941e398bd968e6485b5d031eb23a077cbea0fe17feeb04ea792a360d85821ff6153540523947516d4210a3b8e41df56030d0248b39cceae81d352349bd99f0fe142e68a6e6a726fcf84f6f4b7394bb6b0b6e5b2a5cbe42bf570ed0b435cd9a4171659ec3da19f19032edb0762253c87918b6d8d4177c3ab0dee7131be32d0eb010001 \\xc76dbbe77a23207b7a7be923d733ba56a9f2f31f5a0e6742c9c06d6bae7ced931eed6100a4fddd864c5edc4b1255f4ff54a8a54338c6b2cba2dee69177a4f50d 1632058807000000 1632663607000000 1695735607000000 1790343607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 238
-\\x458e8c7cd7bcdab2543a7a0d0f8301311460c88c7336d1d4ff1b929830fb9341b13b609de37dd4a58996bd78e22a3ad0efe94a43d01ffe6b8b4bd5a409b217c1 \\x00800003b54ab9f26ff310b2238016b4655f8eeeda11509f44183778f7cec1510645e809a776ed2e303f80e3d2a2e72f8a7e2a8cb8267634c6c23483717ab6af96331c52436fbdfc04c06c32a44adfd15556a68e09d5936cff4ef088d6d09e58e3fec9a161377aab425d7cc3f319383524327692494713fea37a10d67106c5c5a28c25f5010001 \\x17c4b21f8a7dc7321415492e96de69895829f7494438f745f224c8d1e00d02ea6c31dd2a0e6c2d1a17dd799c2f607b18c82a8cbd28a16a05a35ff96796be600a 1643544307000000 1644149107000000 1707221107000000 1801829107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 239
-\\x46ae9100a4fa0d8d208b0e0dada76a85a5647a92507e82780d958fce8f5ad406d064981e804585218c550ee89623927a4fe0567e5f62bdc69f71286f81c5f0a7 \\x00800003ab91c6bb4614bbaef693ced56545cd07f899c76fb5425ac863a199ec318d7d3322a11b8d5815b739f0986df254586f4eaed6d368e4634bdf1d5999807b25a45449cfaee774d8ae6ffe4cf79681c5490cd4a677d621b34f21f6cde91b02536c99be9605b9e062e235cca4e40dddb121b54274888990aa95a4e60843c7a4388b25010001 \\x65118f4cd246a8b47eff751eae1780459b0751e0fb9b1f3878392fd73981a81fc832e6004287c7490406e376d88c075e1ffdbb20687aade6f82c303451fe8005 1658656807000000 1659261607000000 1722333607000000 1816941607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 240
-\\x4606f2cb9eedd936e556ceae7e87a4e69daf91f3bbc9993544dcf68c2ad4b19c0a07ed2310bdc16e078f7f53548b01917de13e5ea48ed7069e814db561d2f99f \\x00800003ce59437c6a332f7a438cfbcb8dfa7e96bc8b2d265f92bd8561545f3f4f5db1eff14bdf1681301a330081a80acd08e5508975ed6bb290bae828d973b02faaa58c75d63c4732d4271ede61bd6fc762c0e62770db4605249d8834c9c68d6744b3e4db4cea0829c8d82d5c73c4ff4a0a6de89cefc28c065e75abc9b164d212ae7a3f010001 \\xb8d1298f621f678971e01a6bb0262354c14444e788dd063f3efcf40c839da1891a5637fa9b86fe137e1294414d1ad00f6d0e36c6ee9a3b92265ac5a1719e1b0f 1634476807000000 1635081607000000 1698153607000000 1792761607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 241
-\\x46123b61b5f24a5e98647a02855cbd3ac4372f12b8825fa7f404016c8e9210889d70ffbff76dafa856cc99bc52aee9a809d5420139bd777738b3fd6d3dd21588 \\x008000039dc47f305063e5625e0c0430423977070889c29e97a67ad3f926d38e6d5634a7d742659c4b2e25e57b021a594afbc571638ef1b56181fa69d99e81fb1442367f6dfd6b00e3cc3abd15f59a547afefb4f64ffc8b8e986d594b1fc9746eca2d1456a4078de499e33463ace75fecfd5fe4c22b6d630775c6b7c6c59176b290d67d5010001 \\xaba370085d4e89f905d4ee40d8f921efdf14624857f066b4277d9374d24965b9bcfa849b87b96698fc6927373daa8807a7540408146b1c382dee6ea2d91b3b0b 1648380307000000 1648985107000000 1712057107000000 1806665107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 242
-\\x481205d6f04f39ec982108bc3c13030eccb1d58602ecdf68c6ed49a9adfbe8125af2581448999687313fc7964e783c80be6caf2dbe7e1e9f6a232afc827c42e8 \\x00800003c35261040551546efbe1bbd873c3dcd01b86f2199aa727617d2ea5900f30a25518b6477ada5b2fd35040286237cb61a9045c5366d7d12bf30a579bcc902e382da4e876e2d606b9ed7709a2269044a54a532f9c516477d083589829055451c2fc2349500f377015927e2bbd2be91d06ea95d6f0cc999a10293e520adccfdefab9010001 \\x65cbf82f614ac6e01a4321860e479f9bb1032a797180a570963a5a1e5010ab16eef102b3e69e2b03d55d9952ac2db073129f42156be5027fe6748fb485920e0d 1648380307000000 1648985107000000 1712057107000000 1806665107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 243
-\\x49667933d825904bd491b0a41e7dd634a48c0978f50cff126364b862ac567f8e60ef80ea4697a63938b6327276a18dc18cef71d1fe80ee4ce141197d59044279 \\x00800003b6218ee417f9d423cb5737ad14f959db1330be4725776ded4b82e0925c76d8d2c16df0b9a369bfd2ab802a90af9efcc2f0e2d831f5d5f258a325f4f27734d691b8d13879620e30b84daa2516f04fa172362fced3562b303e476a627c75eaacc1f4368729fddf93c91e5c5f5bb083ff6e337036a8e44fef77eee4d4c6ffc2528f010001 \\x9b55675643719146a3e1d3749ab8884f12f8ebf110ed88b818adc0d0ae61924bea9f3acf782b2df7e3275f5073dcccf8f7f3659974ab72155ebfe58be6c23b06 1632663307000000 1633268107000000 1696340107000000 1790948107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 244
-\\x4d660009f7ad982e95925b0244ff575ad3b7c8bb1c23bf8b6877e982dcb726f99d50458768b32bffd38b5cf72254e07332875eac296a4c312f9db7bf11ba967d \\x00800003bb1042ce63e33738f90eec007685ae90a9017c38a9a484e3d01ce0cd017d9cb409e7a5798c1fa8bcadb622f869d26151adaea211b925bc289bbbd2c18aaa90b2d76647f57f3e656889cb94268326671cf1d3297ad6c3ac79928cf15926ba1df130a66a6fc1f78d8c838b92ced056020ea916f9f10be97e920431359d809fa0d5010001 \\x226de729c912c57b2b6f85cc1d3443372a8ca659834a21dac73a346bf7217bb6cac3a6200543edc9bbb9aaf6d3f118e82d9f5f8d2499559bb5a5836e15751009 1646566807000000 1647171607000000 1710243607000000 1804851607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 245
-\\x4e8e248d4138884994a9ef9d279290ad6b08b5eb368583ad548bb3933d5b59e20431c1699998e9ffc149c50cc279770735c45ff7d57f24d3382d0f9b2f8c20a5 \\x00800003b91878f5a32f2bc9da534914013d2809840d6a72c18f2fd951c0462133051984f9bc55117d6f732e137d54480b9f6fae6315495c093bd63f986259c622d54fd19e53d032d331319a758b1bb257c507f1a4664ecbbb81a585cc0e171b74c8070ee626d6003a50c9eaa9473df96a5e9c40e851173985747cb3e9dc3b1f0623ebf1010001 \\x017198690f38950018baf94dc7ef4b9ae55c6b72c85b389a31b2ea7fda1061aa5d4dfe49126187881a50eb83a44e20be9233d7cadec2efe3464fe39cea05950e 1639312807000000 1639917607000000 1702989607000000 1797597607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 246
-\\x513ef5bf07f1e24fe33399534078769af2515bb9d0d8746d164e2604c78842a671793512593674dce27e007785229460653bec1c9cd1b81344299eed2129558b \\x00800003ca32f4abd9bc41bdb166929d97c0d6ec931c8900e18cd46a24646a5f1c7b0a041041ba8ba5b4a1c5d348f3a9dd2dbecbeb719006f9e90abf329203d6fd2bc55e914ae2449c43073c2cab6153ff142924ee8c48db8c3715567a226f6af8a816c8eee3a5aaa552a5576c63653ce43b1571df29dae44ed1fb08fa253279afa9d659010001 \\xdba1a939a7ef864ccf39d73d8005291859e91e1d9e89bdb2cb6ba35739b4e44a240be1c71e737010af34b3dfcb34464dd0bdb834a9d4c921769921d6111d6d01 1635081307000000 1635686107000000 1698758107000000 1793366107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 247
-\\x54b2ad1d1dd883bb44f39e074ff9eeaf0ed5e3e73c2b385400dbc6991c76224456094c44cf3015ca93442feef135dd64e7fc6e0a9ace5ede99bb760c84255131 \\x00800003d3c87213cc2c92b78ece142263bec0bc7a75370bd90932dae43e3430e50234bdfe85ea1551dd66e6e4e539a4b701a970690badc2c511a96940ab1f5f4683715f45aef8ea7ae10b649c8ddfc63c071f6b70d7d1bfe588e3dd83a82ea3dec50ef9367c918770ffdaa8fb692665e4af6856a25a71d4de02a44d25ed5e3739fabfa7010001 \\x84cfc5daab95e66fbc6af972cad24a6311a9ccafff3f53a832e8884f4e21f5a7a1f797d2da9fb3c80afed46531ae7af97d0687f764679d3c0ae8af5e747ac003 1653216307000000 1653821107000000 1716893107000000 1811501107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 248
-\\x553604b23931ec57aff402ff61f4a8bfb417e42a0e93365b045ad9372e253b7e65da68d72a1081ad4a83decc3e0baa271a204cb2524e47b37afed2a8d5b34950 \\x00800003d06ad39b0b7b1bb4a4ad1c36e09b403d11ac5e0f488ef69b38b393251af57d675f99bbdfb2c16354a79d2cf3c56c072e545c3bbdf8292352f534a0f7e9469b5161cf1d8fce7b794859757e63db00699140e6dc8bd4ef3a231fb4ae2ffc9d27cc399308ec8e319b3e86ac5613d145673659e695e7b9e90bff1460257bb83a4ed9010001 \\x151726c5fb0371f306ab991bb38745c515ef1651774d8bb75a77dec3f56071c357761346358b503d23ed5194729e25ef85cc5fc33800855d5618a6373189530e 1658052307000000 1658657107000000 1721729107000000 1816337107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 249
-\\x5b7e9e34e221a1b7ef6c2c921d367229883b90ba35a718324fb03d85a0c6754ec9edf15f53cf765efc95dbdc38608783508efd64f8f2c1cfb27dfe34f8928618 \\x00800003ddbda7c6c88e93dd356f1ab966712bd137ec50b49a9ca18ab92a3423bf0aceb15e6e86eb39b57f88f8f116250a2c5e419ec8c58dce93c590860d749ee8169d2c4ffd5be92c370868c9f4643d5b613ee80f6807598acea8b05259e227226a6e94ac22d2175775aac40d63f60d6bb4e27e8b6f71151183e4ed02e471dd1ce6c5fd010001 \\xfd7eec9472915559e2137fdeae8a19ae34c8c65f0bd81d7dc6e07c7de39cb04c89adf5ab118bb23ffa8d22a9b7cbf14fe0d710a739dfb52cebc41096bbde4d06 1642939807000000 1643544607000000 1706616607000000 1801224607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 250
-\\x5caabbc7456754706301d76715bbedb6b73a3ad7f6d168683c656bddadaa0ddf580b78a754f34038024cb2feca49779634f3093bda3d8fa4895f01d4af7e2084 \\x00800003c907ba056b0df79d7dcfc0d10d660c5d8ed18ec12f70f995a26251360b88117cc7cf7acb55294e73af5610552243bc85c2d4354bf6c1ad9364d65acfc92e32f3554ea259d3df1b3d147ccdde2b6ecba4473cdc5e0162091a198b0c7ab4cb83bb8fa38d63a4c892e4543a049c9ee7fa0341d1b093c56c8a2976ef3be67ff3d44f010001 \\x1ac81298afa705d456ef9ac10bf7ff63094bd5b05726cd8fd97d7b2f0a5a3bdd1f7aecc77cadb8a704c5273c15375a5d3faef41ae918095dad72459b91f2c80c 1642335307000000 1642940107000000 1706012107000000 1800620107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 251
-\\x5dce44410478f2334d28c5138d44d194922486b934040abe8a73e13aaa2c0d65bf1de1c3439f093289635c9f2fa351d7b639b59bd59c586c704411140b4f8d98 \\x0080000394134ad9433fc62345629cd4316ecce17c353a63afa11de4145e94a74ac8854504c9f8a8b41351d5891098553cf885694edf5198c1bf6b070a35bc562e1dd4456f52d359fe930ab9b271370a7c876fb52bd84651abccc1a2dee7eee9220f02902e6a5d488497a8573acd2e844b654f949360c042e69d5dafc7d7e8f989f7510f010001 \\xb0023d6787301c4c1bbaf711efac99a68351eee0b5bdc6deda595b2cde4bd962a1931252b670d822384165ae1104484d29d2a8d9206b7b1f883c203dde313002 1651402807000000 1652007607000000 1715079607000000 1809687607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 252
-\\x6002b4e9051b9c3a803882354052cbdc430268f0f392e596968e8c00b090ccbd2bccd22e7602cc619025c350abb39efea5ab3a55b905f22e117834db0e3c2b03 \\x00800003c1ff1355991fbd76293f5447afe2b2c4bf9b60de777faf8db656a968dbc77169a861fc9c6e390ca406a42c141f01d6d11e3f66d3066f04d50cc7840f3b5f9511302cb7af65483987bab2f3f710d4df6bf8738c0c43da1a55eb9730f0149bc7babf7b5f9f7ce3f1c185439fcafc7630873be436e647424e6ce749d1584bd3c7b5010001 \\x6098c8df115af97153b956209591d900b6365a200e251a41fb602fc2350c8791d9556160985b924dd1a29875b09a3377d7188196cfefe7755b01959d5b32dc0d 1659865807000000 1660470607000000 1723542607000000 1818150607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 253
-\\x63c6d1cf83a9aaae07a1f296f57978d41dd40a731fa6323f01e6967de7341e888395a5b61fcf30b3de64fdb3359c8d40aefdadeb209c1b7c34a2b9608a7f3730 \\x00800003ea0c664fef551325cf61d680935db8de3c51b857c041a797a70ce2ab930e8481ed5e2d3750d991abd65b9551bce28d6c36a31b7c34242c799ea9c81a443ebbf55d1a551395f2c77a8f731ef0f2edab21daa573a608c142d909dacc970abc03349048ba14d8a71a9405abcd2edc40bf49635b3212758802085632535842b3700b010001 \\x87d7e904729e457d1f4804d953bffe96a7ee47aa2efe5228b01b7b628361a46c94061d08291b069e3300b904f252fac5c44b0acb45cb824fc3415418fcf09708 1653216307000000 1653821107000000 1716893107000000 1811501107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 254
-\\x6526eace191be9992f3e42fc3cd816963ced51f2e45eff5295835faac46a9b164ece661aad19615fe20f5be20b1927f29781a6af7b694017942210513a310f7d \\x00800003da7956545311e30f84f7d712c43ee11feb6e5e79489f1e41f41fa553f1bee27793c37ef8418e07843e947034563a55b519a9b73f004f64ad46d944d6dc3be61d858923f25221bf3e8da82090a5369f27f0c1aa6ea52bf02df3c106f55e2383016fac17ca24aba60e30323db11c2f00139b811ce026a81c1527d064a109401fb7010001 \\x8a588f4532e0a79a7d981d95115bed8c112091f87a9cda6a56c07d258a3ea37298147545e6a2bbb8784474cd56c630505e73b7f133678e07c88696cc1e191f03 1635685807000000 1636290607000000 1699362607000000 1793970607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 255
-\\x682628803431ae5b9ac2b69eaf9acf8ef728335ebc87ad007351292d40a0570e3940343e008e50d62d5b0487f50b1cff03c247f4324d5353997ed41482f3c396 \\x00800003d1a71a10471b79db5da2210c05cd7f205f9aa12731d7bc12334d4f84e605594b5a203f9375027d3b4c0eba83d1f08adc3e188a112ef2fd176d2b6fc23c5742fa0ba381f954795f6dc0f2c25bea6bf595a0bb697d68431ae1f2837f718584dc7f739c8ff24ac49af6596d5c13734bb6c18d80e5e09a9209fba4f7edc079c595c3010001 \\x1b5bbe1c9187b62a4ff57871bdfc3c3a8831db28cacbbb9a621390740a717f8d236c6086955db55884f36cf4019cc509463fb250304b1183aa90f81b3242bc01 1635081307000000 1635686107000000 1698758107000000 1793366107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 256
-\\x6816e7fa432519995dbdd087e5a0c9d1ff837e19ce00b24ae6c92098f59d19258baf7a044a8a83a8b650add8bcb743ca3e39895f42286c13ebb01d53a8bd5b07 \\x00800003dd775fb4679af7a62db9b1e1be98eb07fa2e8131f74c64267defd99a02af68b978b8f835ac60e0116834bed1761dfae237d5c09f917519478e909bbdfd255c6e3efbb82400d9d543eb7515cec9af0ca47427c8fc1a250d9e35d159c72dd11c5375744e178b3e0e5302b6779e4828d1c21259b14a6a42e18df53a6cf5e07e2d77010001 \\x43981c1d34c4b322f7a45f4491123d0eb2700159a6737ff1d92cf39bcda9f9897fe65ecd47e3f5e804e5bb1bb84657cf35ce1ddfb768687c9a47be9260d88e09 1643544307000000 1644149107000000 1707221107000000 1801829107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 257
-\\x69ea971383b1cbfb7293e79280c6ecc9cdd8be0ee991843e9954ae0d9e2579cff5359dd7235c21daead7bbfecc558d450872947a2a65a6eae8c29a22fb835ccc \\x00800003e4f04f82ace050c2d293f03623fdd913af44fd8b3b01743b14bf0116c3ec71941da99ed35286dfb9b8bcff3a7e795f1fcac82ede5afae7f399360aa0a30f0aa8017dbc267e4ebf14fe24554bb9b061f0e5706c9305746c7734050f86c7448c3a684e9fe1dc1f8d0b5b3df8bc1b8caa6eb54df0dad0e689a2668baf775f3bdc1d010001 \\xe207b95222867789cad04459a762e5ec16aa17b46e09646daabadf31089968af998f43aa0308c3317555a2ab2172e83d0bdf209eacdbcd27a42a6776e6bdc008 1644753307000000 1645358107000000 1708430107000000 1803038107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 258
-\\x6afa939ff1befb2f79fef8b087e311905620d7b8c1bd839357a32045280cedceb4815d39b759ea4ce13d0cc5443a5283cc87f612f0ec3104be2c11e66153d0ba \\x00800003b95cbd76046c6a0696da8e90a59cd56bcc0952aa9d37b550eda56f66f33208ef55deabdb82fb21b813ff4c7f46e7f6c9810585f43a17ad685e0e1c9651b96f803790e25a8bf69ea04d2f942c977da89d7d314f95d676a64166edc3cce2a5ccfbb1d0974bd201933388d42fb44dbe9fc187063b5ab947a01718f1b7f519a8cba5010001 \\xee5e3d87e0b3b31a4488ddb412079a1bd04f27ad1582bfafe3d1561bbe33bdc667039c66806c76be6fb41eddacd7a8bd891748f32c864bbce25dfcfed8346605 1640521807000000 1641126607000000 1704198607000000 1798806607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 259
-\\x6b56e36abca314603d37ce509dc6b1d7a4619f31c1e62b2537faf711fbed81611f988cdde3757e5f65e50b9e700cee61f2594a16421dbf4e2bd8f48bbd8f0b20 \\x00800003c226c793c87ebc09ed07e9b8aea89e7c7be65350675fea1d7151832419193b6fee58e3805e9e899478ea34cfd00899c7a1d48be4ce7e4164fa0fbd2205c7cbb18f35a92081b8d7ea22fa6be4d71da3c0cd68ac16a7c979059f7d65945aed15f03496582077caefcedce83f2854f66ad14d34ef63f479a69460fd7939d2efd71d010001 \\xb8cba2c7c8e509d78f67398e982603985b2dc7add9ddfb6a06842219a89a96d54ef79e9f422a4deec03fbe892e56996d7ee16ea02dbd96b00c8c4d4ec75f3509 1657447807000000 1658052607000000 1721124607000000 1815732607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 260
-\\x7c924b8a4b97304b860bdfef9946d64a7f894bbe90c9a98769cd32ba9d511b2e2649e0d51f8b7ab2f202fd69249f4677aa6a522a588f212780c68475d61cb847 \\x00800003c1780b5bb71cf130f25907bf07366ca111b383a2aa2759a59e5620f90c7ff46a563c3d9f6c5c27283f6dbe13521cd1d9a307f445999c4da20180a465af61fe746ce27222047198a0be166686c7b4f42b3491925616370b38b604adac56a035a62ba45e7ff1bfe74484c4bfb5ec0e7765972238cecbebcb0f29f5ae759e561a11010001 \\xc294a0cb12d587de364c94e209e7107fdddabb2974b651fac46b142b3f55be25aeb449e3ab04e49f86decbb9821fe264ef343c2fd375aa03043ae28fa4d4820f 1643544307000000 1644149107000000 1707221107000000 1801829107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 261
-\\x7ccee57f7b969beea0499b50d920e2f9d25556d1bc3c80e08494fefa2b048a0c070e21c88c61bd91b7a4c95e93e57c72e248e2d05232618835428b174dd5d7d4 \\x00800003d51a6e1f1b8619a172e1a4abaa866a85b35e53a4650e3990dbeffefb796195fda1189698d5766e6e6dfaf2bbff694a765cb086304ac0c19ab20acf69f0ffc438d1da411c2df7315fb0780711e9422b0e05c8ac38bfb8cdcc66ded3c82f67ccafd3043c42569561f076c5ec31d5dbc68c51d000a0ab4aa4f32b70620a42ff90ab010001 \\x0ce9ca14290bdf7a48628468f6cc7549c17cf32f14f18ac2607310e0f67108d7d90dd873a336635bcd637e50749fafd80676dcf1cdada6bbd0952f732e2c0a07 1658052307000000 1658657107000000 1721729107000000 1816337107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 262
-\\x7d5a8bb5a17ba68628c6ea229ec10df4cc8a01aad85f6a09e71e69aee7837f20a031e22fed717f10cc67905eb61d88c6e43df43fdcce39430d737f409c52e081 \\x0080000394f385b743b8c910a2c9ad8f39d294973b464954d41b4f96a19ded2f2fae778a0a451308f76d20f2a8196ee7394fbd6db90120baf3d7b89b4f956c26e96d0cfed23dd85b7767db0d8825382cbb674a3c172ae508d72d85aec8c02bf5e15c89647c8de3f2f1d64d295b93ab99ca3068375e71a188bbf2ff977f52f55ee015a969010001 \\x0d5aa35ad343d207c776e7821a323d3cbf536c0f96dec2ba02e7ce19d0503e149aa4a8c4a80440957fc6152ce8ed3ae60f1209b55451b32c14064c52c6acfd0c 1656238807000000 1656843607000000 1719915607000000 1814523607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 263
-\\x7f9a23196478141aea02ca86da28f89ef008ed75459a2a65cc6302a192ab847a72a37202183813959acd90ffcf0c66c57e6f0e8cd64252daa4b704064bec0663 \\x00800003c052c9de4b806541443d84cce67f43c90276369e354d2672b475d91d8e901e4ff5106e02ae46826e4492a2a14fa9b01cca3051f6a0fceb334778cfba88e0a1a26dc3ff05c83084c572731bd60d27d2dff8d2091cfaf26e19d8331c458c0b9e87415a1d1a023d1730e859e4dbfb3aa6d72f7e35fe720e93da10f9d17703cd965f010001 \\x5e37942d24aacd25867d9acda80ee6440d95cf48ac847255fd7e8a22a45c137e34bdf97d12734544b5f21c88a03656efe66b615c4c95a7450ca02c0a14423602 1662283807000000 1662888607000000 1725960607000000 1820568607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 264
-\\x828a6e50e93e6bea84e14caee2c4038f297dddd2b92f368b77616a856f2f62a3f8ec6f66ce74b969ee0f5a195c554941b956a7e4d4410c33161eb2f9644ab817 \\x008000039c4ea01af184282f2f96ca96a0dc843bf94c7b2c678f6cab965a660c43f0fc5a42b25643615ef96884b2443df5e8cbcd580345e2eb6810f64a7418ef590241be92d2f0643f481ac63ecccb3d57f3e8e2471de15a82ab292439d0e0cf7136106dac52cdea98e225fd58710186c2e24ea988521b5d33c9ab8fa7be5f08d8dabcd1010001 \\x47597294372afda0656a093a0a7cd5f51f033235ce84289dd0cdba95c010e50437325fcf5034a0dcccf2f8fe9780844845ea02b177ae76ec21a91689966e0605 1659865807000000 1660470607000000 1723542607000000 1818150607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 265
-\\x835aa2b6ad836f8c1476300507802b37522c2749e33f39a8b38dbe09001231ac779d36f3247457e1797d04d8d73a1c988755b8049eaf5df0523fda502c08a7c6 \\x00800003e5c44358d61146954b6b01cfc9046c455b83c6f04f65ca94b3f06ab795a534e26c909eec172fc705122dbedad7fc077e16e188b20e5f9a9e1738d75fbbbeddaa35e0f4299880c73aa9bfd4e998aa987ace5d4bb428946a366a1beb2d3ff46cac3f564319fb80e692aa1bc657b4891f101a72919bf0cec00555535b1bafa468e7010001 \\xe76ad79125c1d504cda368cb5823d7a302a085bd618c53955cf374759c31eccd6e32cd7e9de138727250eadb3807bcc9a07e470dd532e863ce38951d6e5ef807 1658052307000000 1658657107000000 1721729107000000 1816337107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 266
-\\x871258b8111d7092acf983ba8926d8ff69771159b3400c9179a3ab15a9ce45004cba2b696106414f3b5b961893d2a19e0d53b2061e928ecd25286e870ce1a4d9 \\x00800003e7131c21f0676d60ef0f1a06da5c107385471155edc86fabf082ed7319443056032d1f98af823c645c3cbfb1f4ea83890187ba23a90324ccc72a3f2e4c527dca93c08d70f6aa2f841db27a6e96b3528dba4fedfb500d91f34ac35532e205b9ef0ef0ada94265632d5298548ccddb94d01005b7bb343311cef3bc983c58da8e03010001 \\x550bab280640e4dc6e664c1ac3700faa59785e8c25015ffefaf6b1038dcd3a3f9f109bd7c21e06c6e5b9eedb5f4becf77e82cbb6626d7c437919966bb2fdcd08 1630849807000000 1631454607000000 1694526607000000 1789134607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 267
-\\x887631ae182e9e7186b7b0efabc5c357d9c3a35ad522df6a70df9a2b57a759edb7950f58769ba604cfc919e2a14fd1633cad4f9a09eb8fd9410d664669a14588 \\x00800003a524fc3b961fa2e5993822100cb86c20f51d56490563114296e725153a6503f785138e8255cabed9223c2bc89427130dcde44e25c31904b62b4704e872684f0b09b0c96e0334fca756b71f6a458e3f31071fe23cda31ccde1ee99ca90b712a72042d15e5e35b3c227c6ccd9db8a52e454b40b9162e8f67f9451b7b6529adbf83010001 \\x73357406f717b2bbae477e864c945f8f4eb3bc61788b77af4d7a96ab559778c5c3486c8c172ce1b7231f042f2c08a2ac85b99ff9548287bdb8631d2e39db4e01 1635081307000000 1635686107000000 1698758107000000 1793366107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 268
-\\x8ec26fdf825bf2a84cc02642f9d95be3e82703c1c49ab032d40747be482bbaae090ee4c5b0863b36f5aa990be44a664c9b603ee9b7564574af536f6215ce6560 \\x00800003eddae91bf9dfc32cb0fe94012f2f4f07962f2e125e6a2b9a151bc126af450ac15944ff039ad51e6be89ef961671820953ec8eac1ae0a0596371d2e0583a163b0262ac2791d4bdda559afa58bca4936366eeb25a257add14cc0d5a310e608f45ffcdd465f8bcd2bdb4eb5b0c922257dd3e344f26f2341c37d2d3533b294c59d1b010001 \\x485eb88a8d2092d7d4dfca5ff60b3901384c36ecce21226fe710c103c4fc8572fdd07321d10089da9c664d048bcc230be39dc941861c9f3fa56b2e24890f170e 1645357807000000 1645962607000000 1709034607000000 1803642607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 269
-\\x90e60de767015d3f30dad9284d5b0ff843252f1e29328d6f33a5a775bf73c5e88ca0a1fcee9f29bd14ce35908e073354ef577fecd416ff3d3ee4e134c0825716 \\x00800003f8b3eaa12a683ea8fc8948f613d1432c9d237de588a62f5662f3d03ce234871e03e199c0e66464e3eaadc8e190518d9d4b83dc70d69405660a59ac248e5bc2f4648e074905271ba143b5074300e680b36c319eb25f676dd7678d07f0972bbab49cc7973bd096dfc26bd98521855b93b4ded8941a98bfac528fe3ae6583b3fb01010001 \\x8072d0f944b1098e1448eceea3a4780a4b1b9fbaad6b81f9052707e820e6edf1bf96dacca50698a4544d39660cd6f39bbe77a3b2edd19187e65f76d2faa94404 1637499307000000 1638104107000000 1701176107000000 1795784107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 270
-\\x916e506c430c0ac4a2336b14ff7b3147b5b263da7228e5d00dc2d40f6ef2290340332eead41c86bd6cd9d7b5ff6e7b0d88796e851db7da748351301867116389 \\x00800003bd0c480b32073c524a1d3ec3f47fa71b17b3c644321d53d55f80b6a873374bc02e8817b1121fabf7e52ce46c9051c24e5895bdbe968962d8cb2448748fe7f8be3ca8db6ee7feb4829932d6a3b92d9a4d58dfb3a47ab31029d37a5e0adde9eab788dd89f791f980efaae6f50966c58b7e1ea9922aba317ccc7b5d2f5d5b304c0b010001 \\x5cd1c6b2298167e28b044e5af44c3280a6647a0e21e6766bb87d4c1240be092a2a76436677bdbed9db193b87c684dcf1791b2b5829d5a7e35ae264da81ed9f03 1638103807000000 1638708607000000 1701780607000000 1796388607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 271
-\\x9252050bb91db3338de89fa76f080bef56d786f95fe25c6e9a765dc5d549d4df520ca5c696a8f2b42cc861ff80643ef6e6bf54a8f550c9aec5e69172c2e1386c \\x00800003df34392a60e7b058dae1c68ae02823cba0b39e64b5ceeeacdbabe71b7420d73dc4a978f2bd1ca2201940c00025f56179a3e16561eb3414632eb9b760f0bc46637766862570964f9286d6aafcba58a59c6def1c9a311ba4d74b584c4f1abad2ddbc193334c838d5acd6d4ac0dfc00688ad8298853ddd456467b4da7da2ab1069d010001 \\xce6776fe9022fe13a49bb5beca871911a39d943631ade62775e3d350ebf771274097c6aea0923077ffd9b2ea5f54d984166a6942510121a3aaa70a004ded6b0b 1639312807000000 1639917607000000 1702989607000000 1797597607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 272
-\\x94261b7cffbb566a23bac93fa25c0d3489a713ba6b20d6c3c1a5ebe8b87b40795a1ca97e44cf3c5fa17b13d2e398e288e54c1587d60d01fb7be107afd1c96102 \\x00800003cd801c38debe507c8fa8a136a983c6021959f094ecbd426fc9c0feb7c06718663d2ee27a5d1b5e1659a14e66f106d8ff3cdf7b2560fe7c9c4dbeca952711cf5fbaa5aa4a6874d16ad9b7c63118527c3a63fa7b38602f4773488aafd130941b5d210f19db27bdf68f8c728deffdc909edb46fb7a20039c3431df91f27e9492a1d010001 \\xe2cdac7cbf06652c3fb4a0946c7fa13437abf74d8c0f4b91745cbf51f6fdd15f9977751dd8dad228c82135394ca2bfcbd85065fbbd76c9fdd4c04e1ae6397a0a 1653216307000000 1653821107000000 1716893107000000 1811501107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 273
-\\x977eb93d4b797292b3a38dc7e1c41c5ef4daff1deaaa249318f654791144910250aebc3d0b1dbb0d22a594162ed9c6f16ecbb00fa1dec87644ca435e7ddc044c \\x00800003d83dc77e9faa0c2211c189ea526d40f4b5767bfa92d3c183c3a49433f55ef47f26f24d5a02e4d66873c07ddb8fb6e75d0d4072c2091a2628ab34ba0794552c0f87297d547d21c3670cb142454d8f370154c7f098fc047edd8830f408e67b539cd09da9532da8e834c1e4cdf7336b445d02092e8968bb8a35ba65608a34262813010001 \\x86fc9efb8f78e59ede0a20a5cb53695c0adea616c3302aa90e5870900a300ba73f9a25e92131cd067cbd734c99bf86a953133da583affb43abb2c35f92fb3b08 1661679307000000 1662284107000000 1725356107000000 1819964107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 274
-\\x9abaab404cf1ad5943c497aa6366e7a89f55abe0f3db8cab273f41053c6f2903b7143c73712c3cd6ff3bbef455331253f0dddbf3aa539fc566fe61af5c47007f \\x00800003c9931ea6b9a8775a6ddcd2dcca188a576b6735f2ed5ce024a9bb6e77ff4cdc3aa10fdc72e20bf550bf08d825924d715897ff3f1253fd76ff4c962cc1843daaccd844233b7c55b975247c9a430cba08e3649dd9b377aa0d36d3b6fa246d048c3515414fba392b146ae48e4bfe2262891dddc81e045682261f3bd4bd65da10203f010001 \\x2b57c8a8fe0c6d7e75009f68513b180d6b2d1fb653d572ff1c6681c5d4628659afc2813d80f9e6c49f22f78b40dcdfc00069fd81c0a957d64b251c3ac044180b 1650193807000000 1650798607000000 1713870607000000 1808478607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 275
-\\x9f9a65fa3688a00172b9dbce55449427b23675e324fc2c3a9ee62308a9e64ee565d8abb769022052866dcd92ffb3e58b5013e51ac2fb0a7f338d05cc2bb26491 \\x00800003daba1b1ebe45c280202a423d83af81dfdbf37276018ae4d82bc129cedfb041ebf1e3686fc8d4da29e4094e0e7072a6f3b702fae9ac71206c9df9a62b3f7cae54eb2329d61a3a326bbcb855b851423714634ae3a2c1fc65044eea5778e1a6eaa7cd7dfeeb3c1944167572d2ef63a62fda2e4007be528c9409902ebffcfffbd729010001 \\x7f5a9724e25b7ad71b1c3b063355cf5448c0e49b23d510f7536971d9cac6aef56b3caad0cf4be2adff2dede97558c7f78b0b1bce70a951eeaacf701f6002ba0d 1659261307000000 1659866107000000 1722938107000000 1817546107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 276
-\\x9ff2edc6e079b36be5936496c8461329495594bf8de4cb7e178a74690ab4f03b4638f8de5db69d25d32680fcba08f5fa9f44ea6db617e0f1ac1007ab3d5256ca \\x00800003d1a74da85eefc9169ca79268d523dc23a8db2de4b2e2a59f021a565a36735014e2b6f4e4b49d6b6f9ad529eb328441e807ad46fb8f21215401a2427bcc0311588da9217fc5e2654ae96afcbdece24a63eab61e72e7511c325477329d13e0e49afc01aed83e3ec819ced6e9f5db07c3f77673872b0636395ce5aeac69c34144ff010001 \\x6d2f7d6898828ea7c91f57b76963fc4c7bbf71926655289fc7d09ff09f7b70428cc4b8cb48710b22383f816cdf0136142c64436a1f62ea43635c1282b5337306 1637499307000000 1638104107000000 1701176107000000 1795784107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 277
-\\x9f66f6bbec78c3b960988309ec40b3b69876864fe8502e1fecbb0710527dec0c13da5517ced62ac259a1c3224d53f2076f31c59367782a11ab18f14116f7efad \\x00800003bcad0b4d206ae89eedbee02274820bc267ee74e34c343eb8b4e9172448c3f146209631236bb395cdf7117c5f0c63ebcda84a536789dbd4386f90deb11dfe915016448832e321bfea201b03922352b638eb379c200380e0c770e8a2d120ed2459934a628ef0b561ce8a9fde77c06dda2d8791e3322efdeb9c296100b98ce096bf010001 \\x431c96e7d18e318dbce398104a8d3d2ab72d6b5711217ab0a270b71c6d15f7a81d530d6d1e252495760eb61859ef499fd5c6e894558bf85592b01d36bc1ffb03 1652611807000000 1653216607000000 1716288607000000 1810896607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 278
-\\xa146a8ccde11156df0f30d0d098b5cc33be50fb70ce0b1a4b6bb87ce73870beefcdfb00c9e571e1ef0c54f53bb585a5e907ce38ea28528a6e1682985e60221cf \\x00800003c82e198357e0f7731d76e31bcf77e1f3d0f7ee4218f0ac34941ff6b574c30e310e2e50df9bafb5b746c06a49d1c8165298c6fc54efe6bccdccd1f2445c4a589a7172b9492ba0f2fba1a364bc493d7efce892b2f59457c0d570386e0b2bd9c09c306761e3ee967cc891e47b1591d12ced517e67b7c1bb07b2e00fce7adc2b7249010001 \\x32d7309dbd7d13b9785cb1b216163f5f9ebb4ac47fc09551e7598a1251c4a6953da82ca1e31f74e61a4bcb47ae41af7a8cb8b7c59ac353ee4dc7a79728a76c07 1634476807000000 1635081607000000 1698153607000000 1792761607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 279
-\\xa29ea2eda348bb9b77b4aa09872e6c116905a87b1c58f14dce39d86df330f09297b45255b3f35d577883bb9ca81c48a35b364471d00a45ba46801c7ca67722b4 \\x00800003ea969debb26f51043614ff1d4daa8bdf47f9a06f73628108e7c1bbf923731ae65186f69eaca999afc42173e4cbc3aa3fc0eb53104b489980cf8cb319c8ec65b16d13bafec3b8bccfec1a18f7ccb8d3f77f8c349be061682c53e66f15a6cd53a4b8cc6f1a1ba201f7e02f1297fd55d06ca526e50c82e1c2c02c31d512a2c00487010001 \\x8fd0c1cfae7053a4464d7a45d3a1579bd99e15a44857c7e59b72445dd6adb94fc9f34c009dde29b85ee24f2a56b4f31806e2e4a01ab30ad5afcfe00d2bb1dc0f 1650193807000000 1650798607000000 1713870607000000 1808478607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 280
-\\xa7bece825788cb224b9618fa1d085078d18f067b2e177fd0d42db61660367e39c0b3ccf545c06aa5cac3a9d8c16cd418f379a4a2ef80fc23d060da9cdc5e568b \\x00800003ae327792b11990bbd1ad9addd02591b087e7c0bc6a4ddd771a1015feef4774fff7feb8297e8a2dcd88265b924395359f305227b94f21dec10bd397913befd8d14c2d7b3dc6291f82a4daadc77edc38a2809805d1b4396d1246304c362f609d0182200e82d300748b7c23c9d03e01fa8ea8572a3194f7acab0a677bdfc171b469010001 \\x87e691ab5b5aba67faa5f8ace3500328cee7c4427c76c54ae9b8e1087065e9c5e08ae4e4f2437870b9f74f59591a5cdbaabdc5171e48732c54a2b5bf09238600 1640521807000000 1641126607000000 1704198607000000 1798806607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 281
-\\xabc2ca263522d4e1f6469fa7fb648bd96dce3dbc3ac928459a850b4abba89adf02442479f37328dca35e5f0f564201af5fed1ef92ef16a28b966a2f6ee2ca85d \\x00800003ab58d61b68099a7d87f5dfe98f562c77f89a3f4882203b268009485f345a74729d38051a2e39cff1d358c20d300c87e26638e8dec7fcae26c418d4015645edd703445bc7496a475a2509ef1d644a63bf3f7db063b8242769a5cd9393ce9cf3cb7e0c3e8c8cadf6295683a635f6406d236010256ac6cbd09a81b87b96921cf19d010001 \\x4d8eec4707811893b349009a143f4483d41ef6c8b105e253797af66aa8defe0b6598df44a28e5fc3290187cd3743a00ec87d21f5ba0229a145f8c8357e55b70d 1650798307000000 1651403107000000 1714475107000000 1809083107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 282
-\\xadae2f6fc02279cf48283b2ca1851a668d29e45b36cf0a906db8f137b14a2c9b517d4ca0615945e1caf1f18987714a2d450f0422acbffff85c15595556c96309 \\x00800003af1a83e76720737ff96a072336aa0f8851bebb55a5b93b76b9c3da3a29174fad0b011dc384694027260b5998479b9522dc0acabd9116f5623b9001a47ef1c478321ee78e31bcebcbddf3743f2a5cdaf2f4014d3a952862fc9593a8f70db1ae724c1133b8570fb40b411e4ea8ce2aa6f8d77e15b952ffe5caa71d72102c67e6e9010001 \\x4642278f4465d24662809bc4f56fc8c40e8692b16870adccd03362e52db3c0aacc2f8acf9992a4b6ee2e49230408ee048a15fdab48e0edcf040c3bf15db8ff0a 1653216307000000 1653821107000000 1716893107000000 1811501107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 283
-\\xadfef6d1d4e2c70fe73ca4a8b2594ca56ec67764f9cca28f80fdf17fc9d17c55d4ba6c92e9e7091f92cff1941d8402ca02b1c2f46c923ec211959cd30d9acaa2 \\x00800003c60f32ef42fe1cb72410248cc5d308e38a34a872f1da37c4fb819772efe46309fd5807857fd098593896c0b0e0776fa78b2990c86b73cfde59cb259db4054f81a8aa49474fdeb971bc035c7b1f25d0f293528e8eef187d1b89f140a9739c8f71bb2fd99b742b790c7b6eba14a51aee40054f2c2569c7c6fb4bd8522cd95d235f010001 \\xd50516c50fd41d1900481968194fece047c13bd998ebdc59fce5d5ecc740a13a690aa35c134b5b4b289e650d1e708538e75a861a9769a220b8163256fe1dc50a 1637499307000000 1638104107000000 1701176107000000 1795784107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 284
-\\xaf9adfa4046c174d17a6cf12933b9147dca97862f9b568ef643a1cb901d42984d7e51358fd44162424c66cfe6ac211280399f3a693760f61507b67990c8ac183 \\x00800003a5376101291663218fcaa28c420b2ae2f985fb88acdc0e305e4e600a78200b9ab3e14a01a8e8c04d7aad0b66bcaef3584029a49cf2335cbc4923e9e6f39701b0003536959a3eae1f178cccd94a4de945ed6257b911e9a27a198ea798b6f2cffdc3ce91c1d1c123d180ab48b1104820b13e3f060d2988b0dd3119542a182b1889010001 \\xf4bfd76e9cb9505cc123a365da1d0a1edbb49b93eb85e2cb86630f794afb658817553dee2b2e29a53afc4a34f2ef43bd555f2155ce81c9b1e840d4601487260b 1638708307000000 1639313107000000 1702385107000000 1796993107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 285
-\\xaf469ec7e522125794d062f086804c402fb285d5fab13163270c7a57fba5fc8d2340382d8a0aa97127e9dc67e2f87d6ed1939aff5a90a7e5834d10ef872a00a8 \\x00800003c8a06f818b50f4708a3165a99e6406271992467cb57f833520f45e968314ec482441cf1b4b16dc6a9248feb3f4cbab1b8deefd1e0f945d9127e66632c1df562f4150093056c25ba24aa1589fcca774557164824b4461f5bc3b73b3bed5aee0bd418d4e56d924718f2550bb123376cdbc5a2a1b20e91e4f883e420298b8784b61010001 \\xd143e22c6d515600ed527a0eb7dd3eb1e772b3ee5e86db83dadd3375f06d544b2b79727b42e6553e701c0cd2a646757532b410c34908f63a17c73282e6ec6100 1633267807000000 1633872607000000 1696944607000000 1791552607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 286
-\\xaf56056bc40757730b033f619f3fc92e0c5eef3cacc408719dd14c818b73c34742905fa8b93beb0e0510ee0d10fcca72054cf98a418177045ff5c007f7d4cbc5 \\x00800003bc73bc6ea8582d6c8ebe740a835a63456f12d972d9e66eff02b877cbe15219090183d7235357f0a609be3c24e093c20b7629fc96c40dd5934df99fc44726b8fedc71edba371b48fed7ac5196ffa045909e3fd36df64a967dfdb8b12a7d0799b4ec0a91739a0253d2c751ac89836520e627a5923a8408c837244f22d558350ef3010001 \\x98c90b1fc6ee8fae3826c900e24ff0333834d0b0291b457eb38686911cd20966faea38fc0fb77e29819b7b1c79f2dc1612317e6d620809acc52a7eeefd940f01 1636290307000000 1636895107000000 1699967107000000 1794575107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 287
-\\xb14aeec53ce934c6d32becf30ecf7507f19109dee4e78efd0df2ec407da5e500e50c35ce52a3dba3e991f038d74858e2c7ddac43c221f3b098de48e7275c09d8 \\x00800003ad3fdf9c489c05d86e080a8980a23918d104e778675db0a7467df874121886033ce1ed0acce59bd134b72279cb03adb3b9e8f0e8e9e5893e328351475686eb646c6d5bb549bf435ba581aeefea369c2522f063fdb11198bc6cb432845ddc36c8488308c59a1c50fa56080694e453b4875fb5fcf4990b35bc8668a3163c747f37010001 \\xb76b746382c6102afbbaa9ab1ea901fa38ece434b8ac5d6478e33bf21b2312509041d85f0f62b4a7acf50756d82656ebc9e31d52638318177b1045e1d04d3b0f 1651402807000000 1652007607000000 1715079607000000 1809687607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 288
-\\xb15a82f2a89951f813f48e0c4fc983763acb9453a8b821545eda2287112f7aab929cccf6a70574dd80d285a04071ad8aa85cfc5f7a5db9f65302c9167484d561 \\x00800003ceaab167c137692b8af2af852b8c31c0292e498eb03f4c096166ac8d4935df82dbf799dcfd71fd3e2e9409658efc0ba4ad54b29ab84d080d7ccf27d21c44e5a9d6472de177271206152f801a922a7bd6e987cb7beb5a37a03b125d609614adafabc811d21bc3393b0dd484e38ad9976287afd1cd8f53a93f3ec7406f6a0c8025010001 \\x21b9e3a174707e5123516971f1f1d350fa0e8b18d31695f8a52801d31fa499230ddc5c3c5a01da38de4d895623ee7ffabd562ff199a37ff7e32990e176fa3609 1661074807000000 1661679607000000 1724751607000000 1819359607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 289
-\\xb266aeaef4989322f66cc73a6e9d71e82b25b6a07dfef50414fe337e69158307407452f651e603fb330d05a28dc2dee9c389a3f2f0a8f42c0f5392654e2e802d \\x00800003cd110bda7aec5cce9bbcb0061c9c3a97eb4d785ba78eb39b1261b54269b0ec9843baaaa606a1f8fda5499006a814c0e3f2ebb1b325a6069572bf82cdca9928426969be5b10342c64af578f03780f1aaf04b0678c789314b2694de1b8329f3568045647e944887fcc1ba63c051f542267d7b39154a3c23139067395abc0ffde17010001 \\xfb5e48b571d3e0ff7f212d715d6fd01aec4bc8088311b3a34d3286f61386cc8fa1db19bdd146a7f48fd8e0193775bc15df3152c5a2a0b5dcc61630fe9ba9fe0f 1651402807000000 1652007607000000 1715079607000000 1809687607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 290
-\\xb852a882560b7940b7ce729d41dff70312b297bcfdfea4c8f2426946dad2cab8168564255f89b7a0fe0ad10ef4a24a55b5fc6a4b4e61157c600d45c0c653657a \\x00800003b888c50af0a62f4bc01e93522b1bf54d910c1dbe019e98fd022f89e8fce3549618b1cbbba09056d359453883743127d03633f559c4f48c7ed49eb41a204befb61426cbf080c7cf82368aad0e072347b2da9113c68d718f0e11fd48e474168d6e28c592e8801af9ce44c5e71a31e4367a9a647029b11d1fd8f0fc599dfed8a5af010001 \\xc91181286e5f34c33f12f9034230efe1ef528cb7761c16a51de6fa2e3550a320f6bf976853ae975a89aa2bff73aa7cc2f6e565031e0c5de7e00da983ebce7c01 1650798307000000 1651403107000000 1714475107000000 1809083107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 291
-\\xb9aee51773cc6030f672efb0b6dbc7663233dbf1f47711c323909d7125cf38d9fc2f541bd8fa74da6929f8edc85211ebfd979f75fa02fb6678a3fbd4c36bd6c3 \\x00800003d7b66b41214d21d2968bb615b4cc490539b3e23dd96f161bee9a5be175ae341ae04c73873238289c295b2e06983aefae38d9274cc64c13b214f0389fb03b4834bc1c61d8cb7a12c277de8448c7c1a5026d57d1c5ff0c0034ce6ae332c41bc92726b6a8b6935457efada85155f6bcdc31a8ab9fd3498b80cf5fe89b6ad63bfb8f010001 \\x929091a41a406635594e3eb1fe1b58ed3891dd9370b08816a0f31a7e2fb189ba2c0f41a96490f05e6d55ee799caa530e6d851a69d97064ed496bc237a3203609 1649589307000000 1650194107000000 1713266107000000 1807874107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 292
-\\xba42f8f7a5349e6c98eff385a3579229db477577c67c16bf1dce8099011be583561366ae0b9f80109d3b5a83aef2240fb8be64614542cbc29c71338dca556554 \\x00800003c3aea30b854945fdf6ffc473bd34d3e5f674e038e03c7c3d191184cee526d04fea6a920eafc259d24d9a0b2116f9d15457b464145442ef0395078abfff812d529436a0f74b39adfc0da3e4e2357cc1c1db92cb844eac3dde45a7875b7a8cd3ae552e8a9323f2af7ab5a1d7383e53abb01766dd6c2957fe4708f45bfa72e42769010001 \\xb04c98510bfcda12485819148b62201264fee9e66d7f8da5614856f5e1cfeb1fc5b345ed1c9098fc1e9a62de34df9b1209dad47f77bf130f792954ebdb536804 1656843307000000 1657448107000000 1720520107000000 1815128107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 293
-\\xc486bd643122346d7c73961321488778a5ac9dadd38f727ced0c60bb62468ddefb90fe85c1dee6ca69efbea3f5c794a6656b2ef99dccc323e20b2647a9af39b6 \\x00800003a2d24cd10081d1e7174ad651968c36e4be73f347f0d5b4212c7a501f74504a889ea082a6bbc4a1bda4b6c6a6a8bf1776a040071a7e44b7f715d4d0b53dfbfd990f5d15f4b6b9f034909ae3d144908dc2cdb08c7e093dd976e4ebcdb97e1309bb5d535f1808c31b6238805956112cfd0a39c5f5fa4fb624d63faa09177de3d875010001 \\xefe7a2e87ae0e6d2d875f866914e3b958755c3553330a0053fc6c58e5cb2169b71edf2039c835c730a62ee85a40676f549ae87acfa19641ce8d01db26c396407 1657447807000000 1658052607000000 1721124607000000 1815732607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 294
-\\xc636d25bb91f0ad929a3f20d49561d9b60abd7103912c7f97beb8a926244d8f8c9c456342d66cfa89042f11079c80792fd9ecf8291d71c5f7764beda37d6603d \\x00800003d7a8b2d3ade72d44ab76d3373ce3240c804b2d99e5acd3bf68bb8a6b034cbe2869ff7451ef230a121d78ab8c690488cdcca37e3d32f7f238297b6d31991b18d5c2de835715c2d80c4e3a3c57243d088f366c76bd841f279da1eac701db3b175924d6d7237b7dc654a64ecd9a37015eb1af67c64f80633c8023581f0f357c67d9010001 \\x6aedab710441f120756c16d5eef10ef44869f9e4ddd841cfc4f43bfd35742cdec856be0e8242f8b9909918a6bef58e77b7f8880e1b0da98332bb915645378e0c 1661074807000000 1661679607000000 1724751607000000 1819359607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 295
-\\xc7badcc6257b3278c1cc2cae07feb86ed047ed20db38f4742c4bcbe1cceec8ce326ff9e1fef88b5f790bd30420a429d5fd47b11393403549d7a516aea57547f2 \\x00800003c12f7b96b1675ea01dd2bb41245059a4ea5a0e8c340f8a9a35c273a5c0c0850e284c5e5610f9acec988f8a589d368ca98c06fa91e62ea43e78718bbe3d7db9e9472779ef2bccb16a769c1c27dfdcc1739c12d3eba86a682d84749014d49fbdc156a8de2140806c2894b1836280f33ec837ac519c5ef860409163a969dbdd21eb010001 \\x7104e6add06274c50198aa3cec29a4b471403e94c00ae9bcf7cb304870532fab8de4f07ae09f05aef317e2f590e9df27a3cd9aa510d295a65d04d2b1d6142904 1650798307000000 1651403107000000 1714475107000000 1809083107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 296
-\\xc912e87dbf3b9de8cb6a95da72410c1e51f6262e22c9107ad17cb6e4acec4354bcf6f225a3584f91fe13a7bcf17c8cc1811bea6d1e84469ba5544eaff347a371 \\x00800003acd57f60b0dc61a69acf78db3ad6f5b23c988c3229b95266270a19bff241c409fa5b215a79099e27cd2d2a402101c8ecb52deda1fcdb18f4b28ab734755fc2a0ea1aaf53d490fec9f4a6d19067273a8475d762e86def4083c9be0c654c01a28b13c740f748279c771209e8a713ba142a82d1b578bc0f065765793f6f0cab491d010001 \\x08056d27a7374dacb935cb84d7a07d2c28bb9066bc1ff9ec72d485a15d63d2ff2af545e4cb403968e18145aa1c61e84d9565dcfcde786715dcbd0722e6586a0f 1655029807000000 1655634607000000 1718706607000000 1813314607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 297
-\\xcf166dec7a12a6d37a5aa154247c84a5ec78f766c9fb3e7fa8dbb3000b978b0575bb1217ed59dd01e61cf3aeaf47be0cffd629e2512077e7a7dc423d26750904 \\x00800003c891d401c9be58194277d96d69a91a7774972ebda175880473297c52996c4df5107a37c55b8c49cf14a80c7a9aef4963f04c2e798ce1dbae4417bf7404275127cc6a1da8e6b681d96face9e99e4c45abe2b39270d15bd69fc4ebee6264eb3547ded0a3e8ec96f0b5792b54563d8dccb1b5a77a2153d4effadaeee668ed061865010001 \\xbc6db9c510fbb49b3e225cb06e99b720ed3a241f02a5481bc116e968e789755de2fe7a7595ab9f7d967c58d5c80429dcf0d1b4c20a848a5f5c2ebf2e7d78ed01 1653216307000000 1653821107000000 1716893107000000 1811501107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 298
-\\xd17efed7826452dab8aa4006f1d03de32272778b32ccf89d39b2ab35c4cc34d1e5965036a5e0825890efc55d726d33726cef00fadc3367930a5efe652cffa440 \\x00800003f8118ea17022ce2b6a46ed20da5b4dcaa008c1367da151343bbd8155136501820fab34fcd05175672ddcd1ba113cb5dcd8d0b080b54f5670829a364dd782d31c4194c24af48ba8edd9752198ff587e385916aeff60e6f0e2567134f1f7cbf2ff25c2f32013307528c5d886d4ca7df408e6000f186a7927d17dcd1a797f25a37b010001 \\x039ad2996ac5afa0e72ee14159c3eab7193ba3fd8f9a75f97482620a8aaf025f86f1d5e17d4fac04a825be8abadd1f16aa61f7f11fe993b3432ca98907986e05 1655029807000000 1655634607000000 1718706607000000 1813314607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 299
-\\xd4c60701e3b55b8148f051e6899a1f69045350d5368156958bbcbb282fc301c627eabdc1760ebd1dbeaa21427203c9966e032dfa387062d35fd713ef45d60b31 \\x00800003aca9989d0e3907cda5a17b6fea949bb88677257fdc68e61493b07dcde632a0e08d0247c9b345258baa0c2991f8edccaa289b016ad1b38348efd551370f1ab71b076944216fd5cc092cbdd61ebdbe4bb8bde6fd5eb8e7c63c90a06f5fde5832fcb87439e97443dc8343893ac8e265c26a016e8aa54ad3dd858a0f48b1fe883165010001 \\xb504856d5d5820267f690478fe11caa53f540935c06f3c60b2f3edf2377c4b6980d21ea64531864112ab5359f362c03676332f21ee588b8ddaaf77b11472970a 1661679307000000 1662284107000000 1725356107000000 1819964107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 300
-\\xd5727b05d7ac78c5cf9f24b47166431949d93d23e66a1d7647f918277538b6cdc641dfc5d39e903ed1a242672a84c516634f0ee650ae820312b187ff8eefafa5 \\x00800003ba8827e1b1b68f8dfd7437be2416d0d0834e54e87f896c73eb7a54df92448c3b3082ebafa0e82d866147dcdb186dbeee0557ef4033f6610651b7127b0d48a899cf1606e10c06039e4312c19249e844d59e063864246c110f3283f7a9ed23bfe75ea59596dcdcac5772a66f51aa42f079c360d66ef3b2a5750797e0f3914bf261010001 \\x85234d5089f9eb26c55eeeda22fff25601e00fa6dc4d4db554ac41352f070c6bf2b20e8d934ac5e04f41c8e59ab1aafcb9f2caf7a27a6e9914bf8e11062d9b02 1644148807000000 1644753607000000 1707825607000000 1802433607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 301
-\\xd69a6aef87f8ce2f12e39250aa1a75176727da7d2eb500402a7bc5121dbffcfb5b24d5db9db84836655e091b3bc577721415075d7c42ca3b03066c5ea98ee0ef \\x00800003e34ef617e8d17701e1fd034d73b827b7dd13b67d81af6e4074a56b4480095e3177e49c899a3c6d36deb73a9228e330972ea9bf3e73089e212ad3bf54b489f2c1395e0c2fa26b8ecea4f7c5e7cc03e822ff5b93bb9ca0b3b9a63eeaa564e57cb0981b9957db1bef4137b37f4b6d09132dbafeccca85fbaf05d357af461815a11f010001 \\xcf596de57ac3712ff6ce06f4f01c379752bde16b57c3baef0a89f13abcb4238d0418dc772f00cbb13c227d9818692d44b1e3cece255e86e58c1eca36f50f9705 1635081307000000 1635686107000000 1698758107000000 1793366107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 302
-\\xd8e25843114c5fce92d161a70a15a17751521b0ea1655ca9bc4b67d93fa368307554519eee16fc7e4d5d877a98db048c0b19b8f47f98d28c67f32f043515787c \\x00800003c6df6a2c3420de1d713e01e564193d32424a5fdc0b2ae9d6ab916ed797933eaaf01c5c2ed4dac21d3e92addf851ed02a35a99ee4a294062e5ea391f33cf0edcf0657d033be5f297e55963779ef8048e3427a01375bc4ef1e58194f54e39939dbcc672a33dea8bbef50162a616672e0ccd0ee8685c4777151fe9326e661be9b6b010001 \\x7ff4c918e1e188f7044aeb04b6dc52783bf960254cf7710c7f2af401eda7fa3743740fc6994740cf63e31735424802f50cc427676e7e37b8b7c9ce2051202903 1636894807000000 1637499607000000 1700571607000000 1795179607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 303
-\\xda3ed4038d52107a0815b11094480c4a8523a46613a1ddfae4c8190076f7703a1a3ba659983143d3b1772637d5f73ac1a42bf4a31316242653bff73dcb2dfbe7 \\x00800003bb0daaff6a6ac34b4da2bcf899a92a1ff260f9398c7643442b6d3d4bd2f928ca3dedc439d721267f2e2fa1d66a2f5a261e2db164b2d9445e7128d3bc788f597ce841b43ecc8ff83cd92d278c6f6621c2ee66aa8e7a52e00699d510e2e91d3490be0766467df80edfe6e5dd59d1e68279f2d0e23cd2e80e5aaa8ff1643de5eb87010001 \\x4f212e7c8418caf95b53871d0b2daabeae911c81e0632e17a9ada3d75e2ee7e3111f3740576a6d4ad8ed458d0af1cd6dfebcc1fd1fc06edc331daa8396db0209 1645962307000000 1646567107000000 1709639107000000 1804247107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 304
-\\xdb7635586671e8f7658a146303214d32077d3bf135b992886b4498f4728aa2a363d45c39cadea49deb18556c72aa0b3cf0786e62e755adeeaed6b5e1515a71a3 \\x00800003d8cd14d99cdfa0b2bb384aa51ba45939453f7f16fdf0d0eb7522bae2493925cfd2d4293377dd0e407a9bfde2fc8ce67579c6d8ff1e73c4154320c08acb2d65a2a6c00225e0e4e5ec1385876acc6cfa2dd6df519b4ddc46f76e85dae2a9ff241a92e5a1db2c4e6b4e694b1b8c5f5877e32875a697840100edb8c414e27ea604e3010001 \\xacaa4975774905f67ab1182a9b8050779b4cd13e62123d258bf423c5d0f75099b710c9bb15e1ecfc30c8b5ced3dd998a3766539f8495c10dfebd7f53a2901203 1634476807000000 1635081607000000 1698153607000000 1792761607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 305
-\\xdd6a7f87ad64b0b1a3fb60dff1a08033d3fd5e2fa06bb0fc5c0c3429b7eef40ccfe3e8ef5e52dc9451ce455bb49c9fe9873bfcee0fd23fd9e63e5c80c4b96178 \\x00800003cefb95f7e16caa5815d5cb9952f03a9e2142612bb7e24ddca7ad07cd7076793db0346fa25196e2f9e80ccbad60903f19ec5bbe2435c311ed2aa98752d0f08d44bbd3bdf299ebc13746c2245da5a0c1b41d8efa033dd7d5fddb798a9cad77e9941ca499cebc8b4fb6696c72f4ed0dd4335971378a8b0939923fad627fc39d8157010001 \\x09d60384e1479d17bbe3520e029c8cdbe2f8b8a701ed4b356fbba6cbe6678cf282657d61169746a282f64d67beb1148d4de960db863feafe1ee5cba2fca3ce00 1641126307000000 1641731107000000 1704803107000000 1799411107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 306
-\\xe1a28d641926671fc647754dbcb6297a12fe9731c0e7a1561191804727689033f0786377edc0723c844d8cfcd00150fc5b06f2499c4c79eb800ed0a1ef89ac52 \\x00800003b405521e4bb65fd0c726ff250c843443c05c2f88be82397f1904054015fa76546593c32c41983729db02111f27e2bc51c03ccac2bc7ff90b3a17b0f33c67f145acf7ec303657d142d51268a8f079220a391339dec76016197fdf51bd23ec9b93b7da6094999fe31108be0e82fd19df98cc77776f47843e60306e27001c86bd8b010001 \\x29d38ba0c957761a3e13a0033ff4a74b8e265d12abdd19c11376e2bb40ea05cc61a51b67445b951732ad5d4d243353edcdd30c240371f09aad2d209a4a92f201 1641126307000000 1641731107000000 1704803107000000 1799411107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 307
-\\xe5b207ff6cce2daeb4eeaf954fb46e039c56dd90d08ae72dd1966ac5be33e487af4650a751307612b4781c59a41d45a374e20a4a4314e735df6f4bd75908729c \\x00800003d77d64587242db7fa1001073fdc73aba40e4350041c648987fc23753464e8fc2a5855bc7b6ef5fa8d2c95487a9a9bda7efd9a04ce7cf1b035a2bb24181f9a877052649e3e71fb6f2743847beda53a933e0826ef3a42ab728ccae04ad3083094e7477016bd9f8850271860f89ce615e734cbb3851afcb7a0f80e90cd40c3a3211010001 \\x100e835a440580483ec1f7779eba95a6ec887ee8242b4c85a79574f3095c871b3d2f841033a3acddc1b283bbf33120f0daf017a1de7a123360d4b32cb3008207 1635081307000000 1635686107000000 1698758107000000 1793366107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 308
-\\xe57e88bd273f187d284593e4930afe6e6945a8d3b3f66194d47e51083458303ab3113af9dca6dd99bea36686b2a031f748757a949766c3d55c1aca85a544629c \\x00800003c636766964db7b273593721e4985416e0f508ca41aa96f718c3918badbceeb63bc5116477e75ff5bcb5cb9aa8b87c5af1fd3ed791f78361c50ef5ef1db294180604dc43723648dd12ba605847f617845a57f29e8836c5a6fb2a4de8864bfca1e900e85ef369e0a75ead67b5eb8a39b10ee4f0e85b1f36fc9ef2e5cbf75e69ec3010001 \\xfac31abf086e1b1d7d39496de159c9a6fdf47974253a9d30b1539189963d58992b334c7b3f327dcd11e76273b14a9bec8478f73061f0db9141376cb1ebcd6802 1647775807000000 1648380607000000 1711452607000000 1806060607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 309
-\\xe6323a7fd24c29b364029d07d3219f1a968089ff1b616aabf4341108887124afab74b63f5433b39545d2eca73f1b63e4e527139c5e0fad22d4f6cf599322edf4 \\x00800003c31746b7cdcd4f1020b45e14f24d72185a21b91fbf2a2c3aa0e201d8a1a9007f13d89ed52897f9c05f5ed125116a84588bd2c6f4820139f5a0203d8886fdc6f94911a8fd06ad9005abd1cadfda87fd65718d39f495f56e20c903b19bf6e86e4c06f6299c67b0aeb19c26a090ef6928de0e7e3b4c87a2f849899ba7fc9030afa9010001 \\x0869490f2482db426c6cc85703bdf3d9013a2713b4ec161072b8ec521fadfaedf90cd82fb4dcd8b2b310ec20e921ad62dfb749e3a4636a93207e055e26144800 1642939807000000 1643544607000000 1706616607000000 1801224607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 310
-\\xe75688de9eceeadbaa60b5df976fe8cb14ebf913f6e17359b3279750799c60c4ddffcf2a5511122fd073debfa92ad3b9120b1e5a3ab13479e148a2943acec6d4 \\x00800003b0f176ef2b13a4e018b45d1a17042067d47ba8189d28a9078d1bf877f3fbd6a475d31af98457f69767948b3b189d82f1eb1e5de05dfc1d7c5928c2c15242b6d484d7eb7aac4ba3695bb53416ae63ce158c9ffe47d62d4f59d7edb4c89916007625dfc011a38e64ebcd57a9847304b5d5205178b92858b15540f34eade61f3081010001 \\xf51d9c9a594644abef0c831462ec7d184adb9ddda8966053e7d54c29042cd53a2823588935394875514b1fca3121246467676093557652543489e278dae31301 1647171307000000 1647776107000000 1710848107000000 1805456107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 311
-\\xe71adb28aeb1dcc5a596da4c666b1e57fa95f612a1378a2c6798ab694d72383f1138fa48a6b4452c6e0e385897742005306cba3a542ed55a0e1d7665110d54d5 \\x00800003dfe9e7950494179282f5dab5c3b98927a32cb211ab155f476d0ad9d38e5079e40afe4fa3fa845da06b5dd003d243e91f141a11187b8e748c472093bc9410656c890cf63dd1468ae0249b0b40b59fda41133ab0b92dccf2b2b9f12e8ebfed3ba188b8eefe1ae44b55110c15b1ebeebb36bd51fdf42007c96df2af9aa98efccb93010001 \\x888eb95287a244b493cbf98ac36444a377bc098fa844a71fd6b4356a3b603e60f30c22c05ede35a9b356c648c98c4e0e6af9a8f46d2d6be987544ecf3f77130e 1646566807000000 1647171607000000 1710243607000000 1804851607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 312
-\\xedfaf95ad6432a4a27b83b07a5aca3b19729f9ac327af657199b24931f4b39a9463d08ab9f39a21d390e0e237adaab910e1528c84540a27707441b3061131a1b \\x00800003b0016f16c3ea9ef795b4f85128c20eade25707fe9694a73738b1d53354eb40c813bbb5867e065382cae5e1070994fbeaee28e7692300fcbae4cb40206ee26d1b886403d616ca0f3d6dd5689b9853a55145e8308f95b4e5dffa8f65db87cfc5a4b66075d56f6fa9f27d7be45ebc1e50b347f1fe890496bc695dcac4ef288a49a7010001 \\x7f21b63fca7693b17bf590f2b6e1f23798aa2c1d9a6dbccf3e9f0cbc0a255e0c8a848b97c72f9d7c44a48d82b377ef724ed5abe7a3b273b438242f96371eb007 1653820807000000 1654425607000000 1717497607000000 1812105607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 313
-\\xeefa23360eaf1ec94b9b2f69d8cc3c8cbb6daca06889df0553208b2749b5897b863699e61deaa76623ec1a6191c789a978f1bb3e94cd256e2d403d6bee265dbc \\x00800003e4d7a269c8ec008fda9c395e29514bd3ab540cd71d891489d5315e6ac4ff8a3266a65753d11f230bb5af9c792138a250d6e093bcece3738fb93496fa1545693fb5815742bfdba72ba473c7a3665ef385ed28b4c38956d59e9b53c80850d4c0c2fae4e0a15b36cc187c170dc2940e947ac30942239a4c699ebe2c5b05069f083b010001 \\xee9394aafc066472090668ac261760d988625bbef9b42c47eaefdf7b42a67c6ebbf6ee4e39c219fa2535dca512cc000fb90b0ff8b40117e037b17ccf80ef4406 1658052307000000 1658657107000000 1721729107000000 1816337107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 314
-\\xeeb6f9b9d421587bde9c6a3a62fdc8d43d18cf120c352a40b9908526fa1eaec6f7eea8c8c9444662cf8ded885ad12728c31fd2a38c0cb98188d23405aa4e3195 \\x00800003d52b73a2aa2266d04c3fee74b77eecc49f809f17d89583ec4fbf37c00c5a6a1da8ab1fcdb0bced9a58169989c98baf5597490dde8ed907b5314b3e158661c8ef3fc187ab07ab61472587008014c8f82e7f4e2bc0f00720560b1a61d5a892144ad6e7f4d0f00ada7ea659a27d9a9a79225b969bf07024637cbc7bc7177d271a07010001 \\x8836905076cb2bbd4882b07f0cd133ba6d2c41728402fb134f96e594bc65821d16d751142246d3ac0b9e60e3a438ed693a8de8109c05514a25c2ee08521ab606 1648380307000000 1648985107000000 1712057107000000 1806665107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 315
-\\xef3e136287e6e55d6eb120a5c2f8599533206c867153369b38594882f8fe26ab0d867758eed9126324a73025218ab951d3549f2572209da9cc8bd5cd54e4e143 \\x00800003af16b037ba9d383498b8803374b3deb79f615db34ec293f2e66171a4796f40d3903e8a35257de9050c96aef5c2fcad1a4b4becff89b984c88155ddfa0e4c5d612a2f4f46c8852959086a2c963681640f839f53cb83071147012c8b34194ae242ac1901f46acb763cfa741b32011a9052d882fb98924446fee55a8f8bc5d85c15010001 \\x9d5b3b3997c1be31ad4734f77c108ef81bf1681f1a52b031467d889e7682cc23aaa7af130790634bd9fab0c6639ce807426cf11374fae811bfd4408b74d5a709 1648984807000000 1649589607000000 1712661607000000 1807269607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 316
-\\xf2c6b736132315b2e1eeb905168de5ab6f614209d575571c8729a82d4206576399cf8ffdfdebf245cd18d24b469d1c3b532257eb6a462a02bc88c40116ae6add \\x00800003c05c59e023932e1850754e83acd4d0e5030e623ed1d749bbd08aaff743aac3ebfcfe11c274e7b7d4f39d2e357958f3d91d1f132ddfb99c6803d87f82807a2f75b0b446b0205d806dc4963b2e71e0ed73a226d3a1dd6c7528fd85b6f35557c552ce84e87dc9dac0dfc16e50150d063eb49f30a315fde794e817b5af21a6e6ff13010001 \\x810cfa1a5af1c761bb43e81edbed270bb4464612e3845915726242ffda27612aff67c1759ef45422a1d705ef452bcfc2ba3645a43ace7edcee3137a28d7d9800 1655029807000000 1655634607000000 1718706607000000 1813314607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 317
-\\xf2e667017b35d44ba0c1486a39d991b5edd776e300349e0900cab95312d0339fc094247a202566cf05f01a5954b57d5bdcaf86fffa1989bc6b2a19e201c92112 \\x00800003c92c2f9e8ce077a3aa45aacc1efbce0a678094b7b482818f013ac20b1dcd4f11dad632f95d364fe5bdbf391fe1ab1ff7f09d63444ca71c729e3bda4ccc2003ef47988ee1fea499407fab3d74aa0d090f83e1982a506f6d8566592d03c1a8ae55e178f1bd5cea19a7209b7106ddd5fd09dee82e7f9160469af673d16e79f37999010001 \\x6c02387e08ac8257680173dca8916444c6fd8596bd65ef9a09a3f8a33943f6cb43c325ed1d5a1cb67eb6c65af881e2dd7ce817b781c80170304b024d46304806 1652007307000000 1652612107000000 1715684107000000 1810292107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 318
-\\xf3b21b32c24d6eb69291d20dcf551f616a1be6cf986af542612524fd7463d9eda9283fafbb2bdd6aa049d627e945f0c3f7972c17d06246826da75fdf3a35c202 \\x00800003cb31b6232dcb8567e738a2f35a29466bda8f8c8e7dc8a417f1a1975bb55f33c9ec075efd2955aeaa1e70807f66ba81e8ad9b374985df9b8433615c17625c18d0930a4ea9ba6bc6daab45f40060c1c13645d92c9faf9e0d0bd8f0eebcd4c09a9f2ab04314e5a6ab85fa1240ad208b47f9149071564b7017fec938eb1c303a51bd010001 \\x9a7c5e9b0a2724618a50533d702850ecce9be39fce5e302fbf39781a24b09fed57b57c297e80c7f7aa0574b99dbe6879c14b89052dc55e6f722e520426c33d08 1662283807000000 1662888607000000 1725960607000000 1820568607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 319
-\\xfd8a80aade69fe1f658ecfd029c828bf589d336d891fbd9e93b707985ab9312e3cbdd5777fd41771687bacf8805f4eb513b00743f471772494edbc7a885e200b \\x00800003b969b5236212788049609dbd9b8f62ed59794dec77eaad774fcc521a58e25e2f7d80b98f0fe1c30b2e8100de8baaf57aeebe9260c8da6f65302848b39bc7705949b1b5675f69ae6ac6ead4576fed60db9ed1ade7f049f6953373af45574a8b46240ad32bd6a847e06889641e0fefe1601009cb972b97cf8ec9c3d49aa4cb144b010001 \\x378194ce0a6e3e8f11d3b709ca349892f1da9cdb375e148083db1a68a18f768c976ee802da791a62cbab48487a4334f8aabe56acd142f40470fdbf4d8033990f 1662283807000000 1662888607000000 1725960607000000 1820568607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 320
-\\xfdf69847e8e119418141b86c6ae358b89d7b42fdfe1099c0a098721253f3c5079c2ace898c57ab67594c3ce79a09ad694784cd8ccbbf7e591ed68119409919d5 \\x00800003ec51288d652e9c811681d0f3f729f3e2b6f6778a3365f084ef38b471c599edc0debe71b495e7460f51f7a550940aaefe5c787eca1cdd99b7cd8680bb58f9fb4473ab02589c1bfe4d573fa3eb283c8e5b6245c6d75fe5e48da6c311940589c931aa4d42f55fdb4891ccf35eda7d2ce400de7b83e5d3c1325f2010f75a22934fb1010001 \\x50a1f8ef6aacf491f5cc36c939c1282d6843e5681a867638f76245e18c49f58e841944994394973e51e68891eb9ff97baff1b2b014c8e26e5d669d8c9b153c06 1647171307000000 1647776107000000 1710848107000000 1805456107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 321
-\\x00f794ff8a42e9d18567ac9a3c37465641741699433e4ac80c85daa485ade7b7cb8ab28084db2cde709cecda50aa9863d135dd7f5c56e581d3756bafd1da6db5 \\x00800003f4ea0ba8607c47c9e5cbcd975deb857d4dcccca03d22c4764067cb9986e03be87e26ce69dd49464680671458369bc8ecdfe5297bfae04e0cf3f9d9c8f32868ebfb627c88bea609e0496477715c08e371bbec0006f199f990e1ab0759b873dc07bc0979ed5a4a7194fefe764eb426dfe1a4c9c4167bf1c0e419019410e8dfb6d9010001 \\xee40267854aae06a8affcade46768028a8e79f1893fe54384d302b1fdc0d4bde4b63a04347fd46d800558708e3b4f55d84470e3d4812d0d204cf29610e18e50c 1656843307000000 1657448107000000 1720520107000000 1815128107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 322
-\\x036706742917eb863d3322303613e21bc5bf5708c15fafde8822a4f94d190bd9e2dfb384facd92994599889e1bd8ac521c53628afc5f2a4612ef783d2264b733 \\x00800003be23b524caa3258c02b0d9aae64179370910e7464611172205b48e9463cca323fade79ee652fd1969ba0df01cbe1cded4cec9dab56b62a446f593060c64c6af39366359f97be42a58d5957591af7364adc9e9e8c02caa62027d6ffa61d3555e56711376a9b61568b128dedc23b136f79b3532b45fab26e769ccb2c081b1e3547010001 \\x1b58229e269969e19db26b6e175f0934cc2f6e1643f9dc6c07e598e82b09b4a473453b2bc36c84cbbc7519eb877e62ce22e251663c3c3a54118fbc4b5d135301 1650798307000000 1651403107000000 1714475107000000 1809083107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 323
-\\x048b1080d9fdf5649695315fd6fe9bd1d382edc9d250db66911287a0baf85221b20b0a4b78a99469885f3d1cd25457ba340929af048849f9b35dda6bd482bdfc \\x00800003d5404064cc5fe03b99d02efee303f9499b47bc61e91c77cfdbf2e8a1fcbfd50aeae81963a2755b0dd01db46b38c4f43a6140195bf15e81df502c509bd87e1600c3d311f231133b9615fc2a3ac58fe9741393d12350c5bf4b7047d485d26692f668fa8570e5eec4474c02a45016d7ce4b366efe800ceaa895a42155a94bf3e927010001 \\x3bcd6ac6cfe9186977a04fda5235def2eb9e093cfa8d441466056d4e65028ca06eb2349cc1b631efdce5d3201abd67bfaf0dc7568ced7c1dbb3b3c50711e4708 1637499307000000 1638104107000000 1701176107000000 1795784107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 324
-\\x04675dd5a1a0bc22206a941e90ac71d5e627d630ec22f6624f9299b6e1a891894af6a9a94f1763914936e56f3c408232576eb7027af79e9ba15b733f7b35af5d \\x00800003a57dadb2a7e12a5dbdfdfdc58b396b9e901bfbe4075e51b0c443ce1a94f0d04b8433763e50b6df38d0fdd515aebae6f8361968f97339893987099437223575ccd836a05a7fb64b14e2598ed206b09dea6a98301908264d1aa6bd98fcb7f6f14414116880f4c19a5747cff6bb7e6f7db1c9ed4a8cd54783a233d815a38f26791b010001 \\xd90ff7b192589e3d53d9b7a3e9a4adcc0209fa9e4f3866352027643af33cbe8e91b40a7106f400caed43137c3a89752ed6745dfd76a73c4e23646a4186dafb0d 1650193807000000 1650798607000000 1713870607000000 1808478607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 325
-\\x0ab744a17801888e83f08d33fff0ac47eff8b02a6f7df0691085668817064b7d6c5cc9d619f8d6001937d5b04b729533bb1819507e865595139170e4da832dde \\x00800003f03ac7901ad10a63a76d1e1cdb69d83a3901f9ef4de90c9fe81d92d3d103f68cc9c7463393fa01209dc3a379904a17612c7f09b8ee9fcd175c5cca0e356c511687205a0137c4f0853745ff1252a01a8b0aae9d4973fcfe43c12bf05857387d4192e6044a9aba2c73fdd8a5456778e9392204610b1d526a865e49298f5f8cd0b9010001 \\xd8e17449f226b3629b4a50b99a8adf1d0bbe7b579c4b1097a44333c0412e60302b7296c06878381cb02b81de145c38d0d3f6bc7aed506caf66548dde19b53c02 1652611807000000 1653216607000000 1716288607000000 1810896607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 326
-\\x0c931b254108b907dce5d6d0d2a11f0e9b01bb1de6d7e3d1e485ef318e6d7dc0cd09ccf7a8beee4460fea62a02ab8efb81b182c08b4a4af1c22b0abbe39cbdce \\x00800003ec49c00c4d71ab8f03787c0b6bcf3fa08eb5980faccd877814c4b6a9efa783404e5153053330b7d1311c560eec0a9e9aa2d6ff4fbfe86155c41a16d3f188e1625ecab148cb098f3e72df5761206cfffde23ee1b9f9459183902f05941d77de9cbfadb6deda0256110aa36dab2043339598985f7ea489ee73db5fa633bae18b49010001 \\x16424dcf393ae9461660b0776bc6c3f1b8ae7bd6a7718b6a99a64ebae4f7286e8de6afb5a31b91a958c6acbb805c8a78755a6806002535af87ee9c5b4d6a0507 1656238807000000 1656843607000000 1719915607000000 1814523607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 327
-\\x0c7b59068a6a7b73493b0fce010f9454aba0760ed8203d175321193eadc5c6146dd9270f540c2e5bbda4f158eb35ba2d9b8a5e84e17eccd40a0705183af1f6d4 \\x008000039b9d687635d0e8d23e83db98066688d398bb8ef720a20635edbb86265b192be3024f398f1212043949de509a1c91e2e7cd40aa290792c8c632316345934ce9a5be91bbdc37228fa0be236b47b0a069bc9c9ef4edfdbc9c286e8b8a5901b1619b3db7b1055aecf9f52d7f86c1f644d27ce6bf9ed142e5d67e3f67d54867109afd010001 \\xc3cf07280c6d71badba89ca11aefc83086b87c483b174989e6c0958ed8b27c3d779612f99238b7f85588f99ff623eb2239ab229ca77e60526f6ba09f207fee01 1636290307000000 1636895107000000 1699967107000000 1794575107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 328
-\\x0dc3091031dc1cc8b676e1eebd3fec7d66b3ba4cdad815e975462a015258db42ebb7af272fb80619a2d976b139eb9a54f5a759ad6e4d8ff51acdf13400714465 \\x00800003c839f972bdd2904e0cda3f7bf701e7bf18707b10f7d846d3440218545905bb3a867305507d28ed65e2d3f56d8e74ed52b505a69f2fa2812085b36cca3802364b3ec13573e7c1455e552d6e902e37e54a38c9e09d651307f231ea51da5ab4e3d7954dca66583480efddc1ac22f8cc758a8d56c8a57660da7daf82623d7a06ce15010001 \\x862fc4613df545ced269d27d4b557670c3e2104c02b837d28e8be6e542de8d81fe91d09f9b8a73d59fc1be6f92d7092d2f7dd52702f2ed61dbb2fbd8103bbd0a 1640521807000000 1641126607000000 1704198607000000 1798806607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 329
-\\x0f4f6384c0c67d81a46d2a2ff4722f90bcf201932d0b9168dffc8022cb0dde6fe7c56c101de45f2bf13ac46aae022eb67161066e7f11af406d2c4b6fafb8bd2f \\x008000039c1b198b4c7f1bf0c400a9477c292bcf5a7a2d6b27b53eb0db6e696b1a2e51e11bcbbc547f829d8319de37d932568668ea74117cc21daf08795aa7c503f0ed8b324c96f169a2c3af3ef49f26f7f2bf6c4737e16dbe48dd9486ae206d4d570a55bdadaa1109e1567fe92d793cf860218dd177b98f234da65b27404ad9e2451b83010001 \\x107ed773e63163d7a00f6d2f6e29a30b69dcbccedcb15f785dae4a2e34cb733ce17ee68fff23f9ff6cc0bb144402732bd55a003b2813759bad2fd90544346608 1652611807000000 1653216607000000 1716288607000000 1810896607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 330
-\\x104715693493bb102b4749f4d0e76e8fee9fd277240e62e62180a980d1fef5eeb5c63338cb080ed14dd70d603ff671e1a40381ecfc84f2c592a0dffcb677ce3c \\x00800003add4cbb77e8cae198b07ca8146d45ccfb3a0d96fce44639cfd0eaded5fbcc915ce9a3be51cef8635b15ab71f881a9c4e7b5c0ddb1a64022306d616f5e7866cfaf9fe6ae11a2dce0000e6d9c21dc762aefd7baa64a10dfefc55173d0d9ee3be1a06b808093bbb748553b228b2bafe52be9fd8d77ae3489edd5bcd41c132413da1010001 \\xf40d7080734ee39d0f7c4bef919b599802827fc8133fa55ebc00cd76278abdf2cecea358aded3af7fe14f3a6e2cde9ff97683396f19bd79b28178ea2dca54604 1652007307000000 1652612107000000 1715684107000000 1810292107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 331
-\\x119f75e1ab6024ff2fc12123bea94db778dd1511d93b64665ea7af62228a8a1320355d250eb5af0fe0b552b84e0dd588569bb6bcae00c2fba39d72c4d7cce2c4 \\x00800003a7e1a4b69407f247b479251f8020426288c06968e8f1a20cb45489ef65de79745ec63e646a9644b0e6a1673236df48006c1cbdd380b3862b4912a6b78725ca37245c42e145511ba1fca9b955d104f9c10887e6bab495bcd2cddac1dd2be9c1e17d9f9cec282251492b32aff159dc06e54c292f1c69336ac540a6c0698b703699010001 \\x3a9ca06a99ba8ba074fa84dc8bf8498446a26b89f8af9bcdf93d62f3f804d8e57adf753d93ceeacff8f7a565f3b9c42c2b34f5347d75ae29dee5dcf87e29e005 1654425307000000 1655030107000000 1718102107000000 1812710107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 332
-\\x128b8f9db85f8ce086bdf524959913e427fc6be102982aec443f8b67567509080f0cc7e54b76fc6833de6e1d78f1fe9e94908e715a36a759192f506235d39540 \\x00800003e3a06771d6e82fb6c70be19c3370e58409cfa3546f3c956113f67553dc433165ca96f96e0bab06f3f8f38050f07b3b9632504a0764864c93dd5d9fcba2c5a58e40c8bc3090a136e4f4ce772381443e24ac69680d7414a6010897b45be3be88cd1fb49f5b9fdf691c41ecacee74a79264e5b31c1d902763c1d2e739ad0c6cc69d010001 \\x1450800819120e0c9ea68eed02916a9e5d31e923a205c4d8e9f7dc794b59c5f4bc9c964c53ce0c6614e1717d7b64c37cfb208d728a814c68c7aced1ece1aaf05 1660470307000000 1661075107000000 1724147107000000 1818755107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 333
-\\x182382565f5468c96fd5e8e8a49b1a717a55c22133a8bf7ec5f69dcfaa7772099d87b653a6181c24adf6ce79db7091c69e2eec9246bf2d53e59c6f2a561e7aa0 \\x00800003c0dae55b6baca9e4efe07ac36aa282c5630c019a200bb95f4ea4ff2784a201fa590c0e227f64134d5b5f2d559136f150acdb7f30ee74e4296d868d98bba5673df1690149f6dfa16837fe32c39fb64091eccd2f0ce06304af5d3845c68770032e403cc4a2b5635a5736f4a5ab48ced3695b6d24298e8b174a98377113049b8391010001 \\x2d2dcf5113e2f8da0c64dca16f70578c334fae66a509e6bd3eff590c21d576af794ba15f986d975a67555af1c0faec2c63922a8a8d7376d9dfc36c8a03336602 1630849807000000 1631454607000000 1694526607000000 1789134607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 334
-\\x1abb2c1926d6b8a8d7e5d0b05a761c312aea0e4339e51f3e81e1ae87d8ead376a8b888ef82ed1d6ea611ab91d880bac054a815ca3809463fcfe5a28b85052a56 \\x00800003c97623a2f8022b56c532f0ba819554f72e4a687ca78b192acfbc42b49f2264ab59da66718dd014f77954d079492197b7e9629cb23036d950cfb04cdec18b2140049daaf7e5177916512269688949ee5f191934c0c61f5f4fb87546c8a7ec6157ae32edb3708f33f5b7dcf2aa3023f728749de85ff72640989ffdef57b6b89831010001 \\xf6fdc1451e5ea6cca8699bdce366f2ad5a823b990d688d996169a2cbc5de0e1abb19eef727542b95ac87fc62341ef3d84597247b7c3e643af89a388f6774ec0e 1659865807000000 1660470607000000 1723542607000000 1818150607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 335
-\\x1ca7d64b38e5830c24a55aa5484e21525e93fee19f384f98ac4d16f20f7bc7638cea784f0fa74f17c403d69f9cb795f37c245a347814f50cf43143ad8bd0be29 \\x00800003b2d20fc9d852c7b4279884187f5acc1f4d90c4c5fc69e55f6a48bd7be928d945ee36f598292dd3a5345b6050acc2374cd7340dc96be7b6d05f7ddecef80685e2a6fc3f149bde6f54bf6a348d83ccd8dc1678a5c58fc5c3c1b2985dc0d68556cd8777944c307a6d01e98095e465bdf6503920104e60d980a46a6f6d1457a3019b010001 \\xe8373857fe4f87db3cd6a846fec0e8740a97b614362fe5771795999d6debb43cf9069f9d518e854a4849e2707d3f6e00f7f9fb3a15bf30da271d447aeb5ee00a 1632663307000000 1633268107000000 1696340107000000 1790948107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 336
-\\x1cdb3c4ebdb026a929998362d0c89d2897b862d72685a926300f579709baced16ecec2f008703d1fd4b2148414aade9e725eb8eb615fe085d624718d8bb212ba \\x00800003c8bb127e407c424c6f30a183a514b8a0bfc978d947f7ce7f7a0327d67f1520149376109e55ca815091ed9556872be6b82b103fdf164d493db39f0c842e38e00bfa56854b85bd10674f5f35b3843936173d6bcba5ebbeda409df016dd1d77d0222736a1e3ea5daddcae067a462212e4fd1fbc108eb82f811b36cbe704cfa29351010001 \\x691c5e36d111376967b078feaeb7ac67e6ed79e17810ffda980e45e8769a613396780c8e12e02e4f8c547c5277c5478544337fde979b69eca79be412ffeda10d 1632058807000000 1632663607000000 1695735607000000 1790343607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 337
-\\x2af3bfa78ba9093c65c643fb2dea4d8214c60b46da71afeb1a20d00b33b8cb6829379052cbfae090d02f5ef6034d74a28fa272c35cefe68fc1ad960ee0309d77 \\x008000039f068b26406fe9a0607e99a32631f3fb1f55f14dd45cfe81000fe4e51a353bf39c0a69a1d42e667cbcfb9b5406179d37d91870ccddd4b22328185ddfcc86bad86a9538379c3dabedaf0104dcef744594dccdd086ce74aa23a6a5edeb87d1a8d9c7bf2963570e215f4b82fd89b6a82fcd3cb2d8b3e10f563ab6d2e33c88521ba5010001 \\xa9bb7033c33938e8ac4a1b1dac20c88b931f817364cc38be542c6d64b335ba978e47ee9d0838e063375a88505b829b741571d004b12ad88eb3aa4057c00d7102 1646566807000000 1647171607000000 1710243607000000 1804851607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 338
-\\x35a3abe5bf17011ec4922d1dcc06e2c10064b3480a9c8a7b2482f4323c25f218d9cb9fa3ebeed113239eff7ab47a0c53cd7d1ef22869a750bc8859a35eba7de1 \\x00800003bda18195cf90c92e4abc3ab89381bb6ca535658603b1483554eb047cd6c1806f55268ca5b810c6cd1df6ff6545ec192b9490fb09671fe8e7861e4d29516f945f50a70f5c2f44b731abc8723ec8e1f4e57086639d1045a802061c99b18cd05115a4bc3519137459c0ee42469a27b6a136e9a0f8ccd7494d6bfca75ca17bf602b7010001 \\x5a8bc8f1810e59348f902ab75b1917404e6b74c14b5710c28dec2b92c68674828c15308b631c3f42bbf4c851bfb581b664429f2648f8e916e3bdbf29889a3e07 1648984807000000 1649589607000000 1712661607000000 1807269607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 339
-\\x357f8e74cd8a24aa5baf486c334a7b847c463de3b62e64ed0aec60f8caed71c0ab76f55616d7d229ae4b0da196439a9bddfa2a2d554d5a69365fe729c4338d43 \\x00800003bd424cc767150a7ec778d0237b514e5e939009ca13db876641ec57167986559be5cb49c967f0f2eab563649a402e5aadfc79878467ef3d6d327ff25604ba5c74ffde1c256bb736a484e1aaa5ae3bf7ead4ff4a5951bc14ab6e97066805ba6caf1e398c46f1091dd6f507854669c6c7a8ea9aad9fe81488294520194ec0ae594d010001 \\xbd52476c348811a529bf3a1447fa836f65b0d09858fd5d4f787e74d49c7ce01ab362035018f2a2d8eb414e97403f1aa8e0c466f4ae65b3dfb5c91313f93ea603 1642335307000000 1642940107000000 1706012107000000 1800620107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 340
-\\x35332c22da04b21e581ad5fd606698850ce9e3c42426d339b1abbe6c62e93cd13c43c7cd5960cceb3f719b71b0651d5753daf8fc1918f04153db0bd73cb978f2 \\x00800003d43d850f85766a68123799bb48720696b68634908cfe9d247259cf938ca49728c2eb256f2f29d11c48f24bafc8350489329daba806f1dc2790c76b880d8fab78ca0f762d3451eb519f27f49ae4cf944b70dad8b99e322bc0025ec9a06963286ced2c1b2d7146f8cf3c80fa9d8cd686403ec3130eef2188f16463bc3a621c978d010001 \\xaff0ecfd77e4b547c5945010f8eb025dd2a81659bd60d1bdea8d8456474b53e571018c9f83f8850625c882f88dd8c31b2528aa1ea32a44f790671b45707f0a0d 1636894807000000 1637499607000000 1700571607000000 1795179607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 341
-\\x3ca73c050f0d537e959d72c5c38f1909300ad93968eb02eb1f4c4bfed6532b5229e77dad9296ba31e645b969e0fcb6c8d993ec8b1f256a884848aeccfa11b2b6 \\x00800003cde6213436d23688e9271d8c83abaf291e28ecfffc4eabe05e0c18a93ac5475db8898141bc5c13015dce9a5cd87843c10cd85ef46765f8e542609c19fb468ba1582d3489198650cc40b9d12433b86071c06ba1b6ae2cfc25a89a4e65a2b4f0248e484ce4f274eaea26b07e4ed2febfc0cc06b3428a1ecf62e4822cba6c6a8f83010001 \\xf4ab4254755753f78b8758dceaab6f870359d71c2276a7987e3614e31ca51de86600bf9ad95ec94d639d25fc6df09055fe25fcfd6e248164c82c69c7c361f103 1649589307000000 1650194107000000 1713266107000000 1807874107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 342
-\\x3f274fb8ed8f78791d8cf2e4b4a5dffb7dd6cb4edf197ab56e1cf0ff4a4e5a00be69766481be67d165b5b23ca9f35b5bdd3dd6ba198da43876392d444240bf56 \\x00800003b0b3dc43f6707777e0bb4d2e0b89677efa05395dd495593bc1b2d08aceb995b0bdf815ef7c83fdde3f6c9f4815c5ee1089429e6fa5f30b4a1700289f352f532077d480265f6c5099f21cd472696e3286667d6602af1c8ecdc79c28d68806e76db83941f6301426bb6b2a3bc12310c04db1e170a0b632278d43f1ba165ef5250d010001 \\x29580aa854887bb45ba19633fbbc635352ddcb8d28029dab205d66387ed321db15186688147700db2cd57634fcfd4964643f5df67ee0ba91963e5d05ba4b6706 1661679307000000 1662284107000000 1725356107000000 1819964107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 343
-\\x3f1bc4439fc8796a0b51e151e17e97f6ae728e1b9dc60327d90ee9c547f38bbb0fcfab7247315b47038ec7f190661f93493524758c1b65e33ba8ec5639b8fe66 \\x00800003c6d8b95520e70e1d4e6cf0825f09502acf8ada978f8cbf1466f1e4a542630fa8fbc49b0f52c9f26e61050887702d0c648048bd45075479de1321bb98056afee27c562fc78fc0469cb2825e80fd7864e3956302f9e60bce2cfa8b043d64358f8a7d6de07a3616f974b3af9eb9ed4735cbba9d7175ff4e7227e8501366b3739cad010001 \\x882a369a33b71ac1ccfbeba60b5674e3d46bf134c51e0583e4a64dcf74a5546c43a4f38a2b2d945c8bd18556790bb422f5d7c369561ae974484dd23d1201550d 1632058807000000 1632663607000000 1695735607000000 1790343607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 344
-\\x489bda667628e63d87a64182e10f2ec48495eca5e8610184e1f5249517bd053f58595ad74af219e30b893233186734c5ca8ccca3d854a0c761cf50f1e9bc9760 \\x00800003c8e478ac3f08a2e017b7548fa1a936c9b1d01e66ef80adb2f4ea372ffbe339f2ea52f8c797616dc2025cf1102c15dd69be23c94c76dc1771c86b15318b6a418add92f72e34f7cd6fedaa252c12491af8a58e7fb8c43c098a35138cca0bbae05f1c942da647cce88f9cfb988c005fc401a99bf36c2bccec8b3589889a38ce14c1010001 \\x5ff5ef440272f03baec12e885ac7ec6077744ee2d9a2d7c38a4ea6fdf8d8288a7ea4585b77f8fd1805d5ffe5d8f58384f7bc1e455f4090e29981460efaf6af0e 1659261307000000 1659866107000000 1722938107000000 1817546107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 345
-\\x482fc343827ab39f202d609a57afd23ccac39c3918a6bd5f66a979a216b09220cf9a9a825bbe827400440dd57140f4c43fe9d35fe718c3ca17e4543d2de577ce \\x00800003c44f5cabe83a17a867729561e8c5cb4f403ab59e0551936f02536e254c914b0fa69531a567f5788dd6aea67b26578eddfc3db6e3214c78ea3380a48f1c9f6df9487b85eb1a6a28f500310fda05541789fdc0b1d333008b07723b8f2d0d381b48422a1abd45900d8dae43605e6b1b619a388142ef4d1de2a1deca39d1cb3f43ab010001 \\x71c8b70ab911e87454c9e36652f775e1cd1ab074f36d5f71f6a24407fb9954a640224d6b3ff3cd2569196ec1ba602907190672a99ebc7bd5ef7f4e874038dc07 1647171307000000 1647776107000000 1710848107000000 1805456107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 346
-\\x4a9bf856f8a053fdd555ab1aee85d9f43eb87b7627477ccb82384f6b4204f538a5c08bb92f04e3f68727aabbfabdb2ec0cb027dc90c0f50fd8d2458e2a0fd7ff \\x00800003bc0f3b49f614f297d7d036dbe24e833a15136c3c46be1fce97ab261b98b93ee2ad99f9d4286bb7f2c04b12ae02ca4ec5aa0945e5903967ece6192b13310d0782bf245ba4eba433e89b4e880a4493d0302f43aaaaac06fbc25e1fd6c504ead2f1e62e389e667abf644ff23a734981e6da6331855e44e582877cf2fad2bbf9b169010001 \\x2c510e7ad8aa173a2a2d25d875110a2e0d02b03eea870083059f6012cf31e54e4e1481e97dfbb1d9d6e88b083e651264a480d27bae55f669a5c278c7fabf9603 1640521807000000 1641126607000000 1704198607000000 1798806607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 347
-\\x4bbb5b0784a02cdbe6fce364c96cd7996a76c58fdc4e060bce3984c06f7eeed28f4ed784764837eb4c3e2eddf0c2556d51d263ad188732f48c767653976cc7e8 \\x00800003d0f18c4cee93da8b2dc42e5e9135fd0adde4d12b3d7a3bb7119dede68012a256a490ec09963be670dd6bd04d1b473033fdfa9943a261d0c6a7a8628546180c442ffa5edef873985f60f783f70a2fb367eaef1970b982d27af344a346f694c7ab0ef4cb44d5ef0e1e8f7de521849c2cd0c28e0cddab9e9ac8582d76856c3af4fb010001 \\x3d6a8f6d1dc51641248ace273c7ea45d19370ad2c7bf1cfabc775504e7be19361ad4cc94c4b7395e2a912ea59cd30f84f2e9671fffc78365e14f1f6326b6fc06 1654425307000000 1655030107000000 1718102107000000 1812710107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 348
-\\x4b4bd34b6c72e2ead47a1537918cabc8d360d89216660a7f1b8af0503235160f5edce82e8f8c4d3606155fab1d70e4094bc73d5f44f6f612b15a14709539581f \\x00800003c26af30a3ac929b5883565e14390eea0454992db7cda93af7ad99c50edcfa05f0b0bac5580842ce0fa4c9e5b9567c913e7500891074408ff212942be899b7e283bd738ab3b043e98d57375bc7a74d0b3d83968c3d90952e7f315b37c18d89de84e1bca5f736aebd8bb953abd0300c8fc57e3cde3f94ce7ad96956f381e013829010001 \\x8bc951248ee943c4933dcb96df1e296834219edb30764306f6cbdc75205d39782e4ff79032851798dea589e2e829626486ee4f5faa2c25656892e69c14be6d0c 1633872307000000 1634477107000000 1697549107000000 1792157107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 349
-\\x4d0f9609ebd530c0187251e6fc8cc4533f7200df3ddc6352165e136e03dbfbab52cd0c04701bd2eca60d18ed359648cd8a2f8beb921d9159e798222463a9f142 \\x00800003bc07cb86d73f22dacdcbf4247d57c3cad0c33afadc1676ca15294413c7c2e68f27b576e6496ba8ab984b95422190738fd0ca0c80a5c38e81a6ee323e3ad38571df177513b0784878ed2a13510e13a04d55de209f6ad4566996c4477a0a866b95130ff8faf1a8323f7ee5c756a39dbecea3905385afffffa08420595fc21aed93010001 \\x034382b56fedb83e2aa34488f2411e6d03a796f93251eb494d1c3d89c73f6ad94f8d799ba81aca3f91c0064f44bff5607c8a29fe75dea4ce97ff992578519707 1635685807000000 1636290607000000 1699362607000000 1793970607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 350
-\\x4d57cddf67d3b97b35ee045536c416c5526e1a63e1e05d75ca5b6c98bb51d3111233347ad191cad06742fcd04f55b0c67b7ccd37f948e9c6a5cd9a38d10021a8 \\x0080000397ed20e5ba835935d05596f12592202ec29e90b1de599f3f55e5df737f007a7b7d6bc17ecb7691c1bbc48fbf2e6e1d2f5aeaec28dbdb0ff100bf84ee6154c11bd652e25e76317ad0f3cbfeb80ec2f9d64671d31597c4f32d3404ee44aa170a07413cd2ac5af058d46d0188d5e880a2dbe1dc90a49092c0d45253778ceebc05a7010001 \\xb66155634e8a7636fe411b42e158c274eeaffcf054be4439290550edb46edc9d9e9dbb9173e87c356f0a4e2bfd42a946be26adb92343a3c07cfc3daf1770250c 1635081307000000 1635686107000000 1698758107000000 1793366107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 351
-\\x512f52a406e7a8475fd332a6df1077ed99f6c6857811694538623cb19ad1ef724df1046208ae2e89292c68873dd3b8e3557fc853d34366de05b978cbe08dc652 \\x00800003bf72ffbd5ee519e9130f41940e11d3f6905c01e280adfaf72ee80ef9760c9372663f12839fa2e438acd7203098fb6c4b5cb84001e58ea17015b67fe35ba3909b76707a14d798319405b4785ff38e69ef584d4e20379f7cc244f9e1fd8204a30fa7aea564fa4a171bf77b258f8380cbec275797fdaa76d43e7e1fbb301b44270d010001 \\x9ed6ed850558ce4f86e23da271073ff64aefdfc916aae6a7e25d01d9e5d3a7d02b93ea1ae3b5c24cd858092df31fff1d4f6ef090379e34ef6876b601c840b005 1630849807000000 1631454607000000 1694526607000000 1789134607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 352
-\\x565b348db52af66775c4a5596272365f21c789185e8c74f30e3e3c85df7047baaec5e538b8708cc52f19e5d65738aac41bc103eeee8ae83773c51214988ef6f6 \\x00800003fa76893eeec52ed867b3d6c126ee6a44d9ee1bb4632c0e5554e2e7c65a73e1366b1e940a7f48e5ac022af2605431636f9471c7521924433fd0eec3a25bc4a3964013055ace5b10e7dc7327333ea97226c9da81f2dc69ea7db4d5d64d760646ca69330cd9b1627bf5669c98d0ed67e3938f12cb2ef833c524ed6d890c607445ef010001 \\xfcef5950d8e3a5eb450eacf2b2d5431c8bd99090361a78629f3a8a03179ed046ce58969a67b106d8ee7a5cf3acf662f9f14d56dfd66b0fc985ac81cfced9060e 1639312807000000 1639917607000000 1702989607000000 1797597607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 353
-\\x57437a0a59d231814b9eef6e12daf4782c9231c76fdeec027cdcd1615e5f6f2b542b54168c0d9b816ba4ce6f8195558766718373769ce4b00f2fbf79d7747d7d \\x00800003d002d0fd3fb770fff1b47076a5c63d584c9aca1b0337f442dc3e4b6efedfe41593788412dd270588a37631f4289c67f82d2fa80e13ee210bef41f3aa1491f3a8ec3efe23e1b050adc230f35142ce76295b17780ca33f212784ab17aeea4124855887f625c0a3f73cb1f80a532adead5ad107a7ed02439920f6df15bef9ec6187010001 \\x4ae15cfdcb71facad52de5c100f4e60463413b15c25cde9aafdcc7387f74548aabae5359d2531c4213d154aaf5af1c33fd23a2cd38dee7fa7c84e45da236dc00 1659261307000000 1659866107000000 1722938107000000 1817546107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 354
-\\x58676168463aa6ec276ce185e86f9db0fe894f890cd91e469133d3001b9a98443fb7f444dcdb0fc06e6058d3b47dbb8138a84110017ab403a38b10401b6a60d0 \\x00800003c9f88e16c4e4cc0046095bbdc606e9929e1dc676726126655356e6d0b0d27d53117e93eb5da542ff63196fb77a14d5e40f4d08edea391c507ecc76e64ef3f517da79442b3ef6d70241d7291c8ac4dfbbdd4a3059f768dcb5f39a8d7bb282dcedba5698fba7f57afe828a612f12fe377dc60584e23ec6913b892deda962c8cddf010001 \\x3d9e35715d75ad419f4b76f335c4bd9b0d7b8c8f15b5c300f4fd0d5502ad0243056203db65fb252115d680dbea12237c1bd467ab72238f0a6aca9ab8bb9bed08 1648984807000000 1649589607000000 1712661607000000 1807269607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 355
-\\x5c5fa5a74a159ef3b3bf7b6ba669079071d127e6d36da2e7c135fa1b89de2f9ae75ca83b5fa8407fca15034fa17ef4e79ffc44d2d56199fa45235306bd0cddab \\x00800003dca73a85b513e1df89c1a2ec9dd6b607324d91a534e03ceba89869b7c9e81f62cc80570547053c3dd76f4bc7ec14dd65c42787d791069a5056d0dc3c63daeff168ef7214334c071abc24d6de537eac6041b7b1fe628c1e564e862990b399a115ff2e7125aef21c2d8165d3f606dc37e9c68b90752d24164ccd838498fba8af7d010001 \\x7deefcbc70d8a8dca9505ef517671ff15c0749bce3e05b18b2009bc203a41fc90cf354415ee7ee5a400ff7cce269abe1b2256210094e4589cbb34328ccb8cc0b 1636290307000000 1636895107000000 1699967107000000 1794575107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 356
-\\x5d1f9a117e136a38e407d6ec090fc7a09b5657b9e6b4e3a5cac1394d4c84034313c09eeab7f06cb6460b32aa054683d724981b53f25912fd926a701453761fca \\x00800003c1aa72239c5cac631deeaff89603aa88e73f33d039b5fed5ec82b6dc73fc359b8692ac1b7340bc86d22dbd6022a2276049a627a19ae00c9da8468716ab9cd0d9bdc9c86dfd69c78d93b127582517a56c348a1e7b1bc02ed67777b2daa3d240e4a5e0b5c6c831a111cf5add6a96bdc9b12ee5e902ae38129c5688761a897e5571010001 \\x12d47447e131da2b6c0d4433f953a1768bb7ad7f77d5977b8d62ff74ec0c86f806160f603c98597113ea6e9ed6c72d4b1103889ebe1ae71c34f793113a099002 1641126307000000 1641731107000000 1704803107000000 1799411107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 357
-\\x5ee7181c4ae9a27cb7f352bd3255d4163f1879457a19d5da9e9e18de8f335a1a9b6ff5c40b08857c567c9a1791b9213545d79b7e18dd2316d9ab19639c6d1460 \\x00800003d7f6876df8c1201c8166aa45219b71774fe2ce7b21426b7222a8e153d18670abc0e1cdc6d835ca1caceb9f890fa4d99dfacf332fa2adb2358d28ea663ba674da2be1fb80e36a167e0ed3bdea7afd24aa56730bceb8d3d86ffd4d85c90385e7c7047fe97c2254f459cb482e5040abd1c548a464c5e2134f06f80854bd18ab5ef9010001 \\x48c3f40aeade50744f82024cabe9a7b5c912b233f0f4e86e041e4d03703d9fdfaa64242088cf9f644a2be9ba1fd4ad967d4a4e960b43ad448cc00409732cb40c 1658656807000000 1659261607000000 1722333607000000 1816941607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 358
-\\x5fc7da35f3a3c3b571529d7ff012f0408ac861586f2cfcbb69c802b3846ab18f1842733c23108f599821d466bee58ac35ce6f5d2b32d479c7f36e6895e305b9a \\x00800003a879c2c305e9371d87139c318e3389d9c39195356b087d6cd686c63fd725895b0099a49b103103530316e1f9ebdcd0303eeaf39c3343a2a9b35fd5d25bda9e0d671822e37d212bb4df864806fc39bce11e2c872c3372852bf0fb77458d0f12fd9ad39b6168126aded3ad48013f5bed00c27559817a9bc5c279a79fe018c48e71010001 \\x72ede2c8b2e1d940fa28939272563c139dd5460ec615303c02868749141a291deac0af79fa6ecce3c8ed2707a22963a4bc641e19c172f39e420f770329574203 1636894807000000 1637499607000000 1700571607000000 1795179607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 359
-\\x60136355ef3e40ffe8a01d025245886c68599189192a479f3d3854b346a023cdbaa4654fc0d764c1ba105342bc6fee91209c23a2ea79e69cda43397f374a615a \\x00800003c32eb65f427e4374c7e95d1ee71e36102b9baa7315f54baa43cf163926988858d04f9aaed2d50a9f2b79a9de86569e3d555fc59fc610079340f533e9a3ac4cad6c233355dec337ec396466b8dd94a20f43ea9dfafc6f99db55361d2eab8eeea094147f288aca489ab2cad09c719e40ee4485d38210e306efd5a47d0f09aa1375010001 \\x04fd8c71ca6a7824fcbd3abfb32ace99b74e302e0725f54b827ed5f2da3f8b59f95edab78694c43968f822c72a319dcf44ba6f5ea85779efad93845a70b28b06 1662283807000000 1662888607000000 1725960607000000 1820568607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 360
-\\x602708465be53cbc4e951a366ea4a7eadcf6fc3c13956be7fdf90aac67846428d34b4d404c68f775244061789f8c383fc148814b4ec7a44ec460c57b26525d35 \\x00800003bca2e5dd1c7da10defda58e4283944ac464f698e4073d44d39db471c6d705fb9ce9261385c11a93692632d7f5f2e0f3979adfb6baeddd06468fe580e25259685fab5190fd8b49c47d8b5ab39c293ff89cd219352523486b9ef219a7ef1943b9c0b8094c99a2929eb6978de344e786665d9ff2801b3c92b95b7f73128b8bc3b41010001 \\x96341ddca08f2e073924869723af30abba93495742e8b0f378bf158490cc09875889bbd0fbb5afbf09c15308b885a75f8b2c5ca0d60d9c17c3b2e2cb2c662807 1653820807000000 1654425607000000 1717497607000000 1812105607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 361
-\\x61df581698e26105480318d86121893bd5a0bf613421dae53b4d2ea5dd4ae4f4233da92f883e0f5e0da8fc9e6aed96bc68c55e28cb04b215b388f03cdb58e359 \\x00800003ab811264fd472d0c7d725b00d8606dc8d8a5e94a0cbca6a6904262e362d4045eb5e21f34e2b6a9d87bf5b42080be5c26091149a2812db5f9cf18266b1ce70b8a4a25ecd8cc8f0306c8335d678b805609d82ed0e209f7e41598a84826126cf6ecbd99900a9c9e982249fc658e7ba9a2289da08e188f2cca278f3f1be75bb1da41010001 \\xbd1029908e48cad6ff7af1395bd7aeaff260f4e67dbf2fe7458b35f4571b83ce3f2e84b447189143f03a1f8c0fe118f3cd1645a306abbf37070a8052081f6608 1644753307000000 1645358107000000 1708430107000000 1803038107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 362
-\\x6507d81c4915d3b01f6124aa643fa586310d1c839464c0ba04b0de21871c24028dbaf326a55894c6b362da8f8ef7be3938b95ab21a84043c3f86db3231929479 \\x00800003ed3d4d6e3fc8106124fbb0cc9ba909d2b1189de90e04ed696680136e183cd8a82b48ced46569846d5988d445224a937d9e327b1b8c55be2dd842168e8f4c3467df2d346263bf69df154ef34949cf3292d99cc8f955bdb8d8b37fecb2839c974a9a323e20733c43165d61ef36de967b2d8c57f8128d2249a29c144b187c121801010001 \\x1ff0b7da6dcfa5d14e476e7a6e4d995e7ababf5fb85b8b9cfaa7a675167ba9801f2396181734dba828effd9924b60b2027f34544d1c58317575aec204626f10d 1658656807000000 1659261607000000 1722333607000000 1816941607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 363
-\\x67ff28f83475495eddca4ba8a1454b2a4a90337ffd58fbb004c2636f8ca9fc6c37214c8938840ff593512087f68e43567af87e90cd8d17b3b6d43ec4b6d50264 \\x00800003c3b07e3a95e07e8d176d33c8573395e2ca0c155fddb8bf4c9965003229c92694ef53ac7b530ea62708ec74a2e26af1a71d5b5b33e51ff041f0f7a06e8b2f183fed982e477aa5a3f836dc130913417ab6124df2cdcd3be31840e750e0493548e71db34d5a9e33d98d287e5a671aab8fd2dacb301f4bb7e545af356c82cdebdc99010001 \\x307758ea5044c441292f83f53f935e6cd3155733c4c21cbd01b9b9d007728dd49c5f5a9c3f1f35a66573eed99588e97f005ce4192a8d0afa58babec2dc10820c 1647171307000000 1647776107000000 1710848107000000 1805456107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 364
-\\x6a634b79da263cf0d8ff2c855a4f86452aaf6d40ba055ee9aa5b5d145acc6747c96ad6c866052102b132e16585539d6a99666189b7b8623f8cac5793a8b2edc0 \\x00800003b25a2edc44e08b279f169bfac989a7fa873511101d5474ce1c34e1832f68cef57625d7f03e50aad77f2273079a51e254fcb0e872142883197350ef4a378fa35f414ccd5e686a26113a25aeb4aca5519ba5f2bb8e465b7eff8c1e8809f014dac30683c536532cdb99e969369984dfd73ec42640472330e9756d480deeccb6c0bf010001 \\x3add420bef1b7e3c4e868a2b626184ecfa9256de8e9f8638a2fc6f3c994938377c8a3731970e0289f5dc4d7a8680589a0dc42edb111ee232eebe19b5463cb20a 1649589307000000 1650194107000000 1713266107000000 1807874107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 365
-\\x6c1374e0a735cb49ff77e253c5db384970d9acdf9f929f184354923741996d6f5d18f3ad1aae49be79683493953a1a99248e8c7d820dc831a8faffb0b47cba00 \\x00800003d10cc5c93ed39302bda0a1a075d8fffc613682f1f0ce14bac6cce3761dc6eccc311d677d7df8dbcdfdafe4b66a6cacd57e5a10b5cffdba995f0d5ef791281448611f74428870bb41f24a5e0af6fa373c73a19c95c0797ebd677fb585d029b7c863a8de7a9079ffc98b1784d295e572473d5b9714ac8daac7cb17f9a94136d7b5010001 \\x325bac52bf86c71742cec5eddd33c485149ff3e213e1fc087d18e38b68d4d41fd2fd07d7bc01a8bea9e4dde51b4683232f10adc7170b667b585600a0d7396402 1638103807000000 1638708607000000 1701780607000000 1796388607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 366
-\\x720b4c48bd8f7f83e148342de8739cf10fc357c56c7039cb99b1492d3b054ef5537e50473678b512749af4a0f3d3f33537c44b849b0c8546fcfd03c843101803 \\x00800003ba5f4fd0f4c5648cae82c133bfec1b243ff863a567aa340e3a25bc7ea4cfe19d3e50b18d2bd24458d25cbff7ab03163e7da09e157582c8b8f1c050f05c846295e7a87703fc2a809e45a5d4c12e4a25220b03782f54e3bf4f50adff2ec5df0fc39753f0822d4be31554d13047809a7eb33fcce712c7a5637cd1ee311beba138fb010001 \\xe44df8e212fb572fb320208c5c44c78b141c76f2a7b53b9c79919d708f3fc55cf7e7b52d3124102b47807066b975ce71c5b8d044389bb88d58e01a1f0364be06 1658052307000000 1658657107000000 1721729107000000 1816337107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 367
-\\x7227c9fd1e6b3e8edb43645ad58424061d133a19dcdaace9f619c7c51bc52121c298d799edfe97bf382a1f893c7731897a86d094aebad88beff271803cd40515 \\x00800003a5ca47eb2ba1785dbfe615d65d0327270a4feae33414f46e5a4b1ff5dd378d602781d47f507bc3c2b8a853c00493c123ae9f4d7d6ac17fa05cd07245eff1f5ff8c1c1ef25b5fa059e98e703bd9383165ece3130d1a95505b1893e611bb4edc28f7b337144ceefca3a78231ecbe5f79958ef97293df9991380ef66427215f87f1010001 \\x5666310064435f5b503bab7b69c51db88ee56c9af2d182462b28739c0cd777194a6fbc096eac860f4fe63e534c273818c41feb64f35e72561428a6c18871b205 1654425307000000 1655030107000000 1718102107000000 1812710107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 368
-\\x7607c3e337759e23f4600274818548d577117df8edc55158d1e7d408a57f758d4ba27191c484ae5849992663373f322d21605169caf664b93c7bad85ceaf7c87 \\x00800003f53a37159c99860c681ad31f76f5200ee793a58dff8e4ba11a393f97baa1b710bdcea879969aab05b5de437de65aa9e9f61f0e615f17bf8690fee6b42263736850ce0e2def0855069ed816ef5301dc3e27a6784bc26ba4b8b9df1be11a51b8ab553eadf999f7fba3eb441aad85e0c7ce6a9fb9d72b5b9623ec70aa82d67dfd8d010001 \\xc88513cdba0b75a4abc6a44851ea638ca8cca9d82e04f30832bfd82408bffa435d7b42d8f8e5827c481853355f6aaa58b7290d9b95f88355ba1ae36708df5f0d 1648984807000000 1649589607000000 1712661607000000 1807269607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 369
-\\x780f1c41749dd5d05125959ac290bfd93526e4021ac6211ceadc954a842607a0f97edd03b9a398b25f1e60334f2692312c7f9a213257ed4a46bee61813d33d7a \\x00800003c429a4959e4ea079c8adff97d3527a2fd7f589ec35ca4061e7366ca843446556b65f7429fd31ebc5666913d4238b82a5554fc3340919da3659f90869c8d0c4b1fb55d83c9bc1b903719036dbfb386e8845a6908c726fbea3b6b6b472e14e1c450b39fade0c0ee9974cbe91313c9df78d07349765c4a18647ebf992271801ace1010001 \\x89c82f3b890c9ff48089a1612d9934f1fd0b12f5f12193d9b33db62370fcfd5003272d3fa5dc8f04268edd0fa024c5b60ccf38a1e224befc6360f57b5c006400 1656238807000000 1656843607000000 1719915607000000 1814523607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 370
-\\x7817d224d9cbe37c4fed3f1834b4fe4744a2891eb43a5dfa9260bf797af76f4793c7829b01128af2f243b8c2358d3c6229e730f207e24e206e35115c969b893a \\x00800003c4b9e36652b3718cfe07b0aee2b3c57b35fb5f47c313307c9b7defdd96b12cc040c5b2943948fe509f3ded73d0faa5a9e01b845f4d095f3c3bebadb80e9995179e7e78e1bc76a323af05c44b5712226433761763ef3f1ef78546666e29e0028d5bf1dbeccd6e2a2afff2f600584ec5992c1912eea7a1445694860a4ff92486b7010001 \\x52f4a277d7bebc062c2b22b84fa0168ffd7ea83829e5b4560858b4c09820e7a785a62ae0233bde53dc7515769bac69f08516abbe02e8ce6e21b4e0caa7485809 1659261307000000 1659866107000000 1722938107000000 1817546107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 371
-\\x79e70c510f46b5e42efc9f8fb4ce48e947f4a61ed7a6710bf5ec568072bc4adfc85e6d3543ce469c755b85479e8791e6d477c5a7f5357a34df20d2753088406e \\x00800003d14be8b02c4dbb22db376980bcfb4135bee43419df1a878e576e63a1ede4feedeb3982155189eff8c9c205a7914dfd2f2b8195abb48bdcea0f22463f84c4854d1ca5eaa9bdc638fd6c2806bd0796fedb9d8a44e574fc4abf106299118f0173613d8776040d4e0f00aeb1603f803953961788ffdec2ada8c7835136a6536f38f9010001 \\x942dfad355b9b9bc27d69256acd9730834ef9acd556e364c5346fadd6f2f492a34f8328f6a88562a0282d2ee8377249fe3def3dd6179f30ea9a8fffcd0800c01 1631454307000000 1632059107000000 1695131107000000 1789739107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 372
-\\x7a93083a6bbe0b7513d754a19ffcafd085dd5c879cc59906e3a2b4d84a51d44e76347ba733fd324d4bd9bed5e7fdba65655440b5b2618676ad6e079bc13c1373 \\x00800003c62c52da4abea6b60800bbf727ecb8e9bf2245a998c75e85e60b2a27794c09528ccdc2fcef4e83f06f76afe2cc782e7a4bd754dfe58bbdd065ffb0dda486f990f570af9d1cd4b8e3f5eee1c20f712381ff49e5af2be015552fa0e0c18d73691bb7b4ba66e8421bb8d9f71d099341a25510dd888250fb9ba7a45b67d517d811ad010001 \\x1153a4a0520cdce0b7227152e71d8929f7fec50ec25eb486de34a3ff91a484861eebb8ed7f64a080587f3a27d4934c14a919058caaadea600493b990b0edfc07 1645962307000000 1646567107000000 1709639107000000 1804247107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 373
-\\x80d36d890ae6e945c1d1299e4b7de626f2a58ec40bcbfd6e7e81f553b9ce177805c1a7424dd5863560f72a093d69348a88fd49e3c8d03f32e4cfd30c6f1921a9 \\x00800003c15bfec6f71fade23cd744208c351826630f8f10b1da6e943c750f3733a8b73a16ede70b6411b36c15a0b235de1edb2b68a981de3946040c134af31b20e45a5e9f9de60ee10fd6c6f30147af8d45c0338afb83e6a4a861b6461a3ed125d59e38328255ab6217829c0e2d79fd7f631befae7adbbaecdd55324795b69e3657b421010001 \\x5222e0468e73cbf5107dc6cd88b643ae75d4880eb22d7af9009e2448c955bebe074275f1a669518c3a62c3ccf78e18c6ffe0ba12e1b5b788ab375c450d29de02 1633872307000000 1634477107000000 1697549107000000 1792157107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 374
-\\x85cb7d7ea6e6911076c996ac478b1afe82e527edb89f6d2ee9a6f44b1e5ecc9de5510f09cb8817ab6a9f71bba9eeb543ea7fb05d6b5816cf7508222c9a6d31a9 \\x00800003dfd1f5672dc3f5f66dfd44a3da4c5d763fe6668a9dd9a54a157a25170bb9b3d74c85924de9be01085a74f709a49a42ed6e07027603d71be6cdc630f873c4aa9d49df946d1571604bbf838acd0f641e34fe2ce78672f6f72d100b2fbdf386854db9105fc6277dcbff0e0f7c0c4b8defc1b3227816f74c8dd2455b71d0b445220f010001 \\x9c516b829ace4991ebbed3656d90912ec9f7f0743164456a9cfedd3528a9b54a8a4da415e9454b263912206bf98a5c1690e25c65f5d7ff5ce922c525c13f310b 1638708307000000 1639313107000000 1702385107000000 1796993107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 375
-\\x87ab7549ba58dad47106867a24c504e5b0da4e3942d12595914a30a45385b0be320a162145c18f0e35c10cbe9f94988dab240d60a822273d374c18ad97df2412 \\x00800003a33af4df243bca4e022397fc45185e6a0dbf749b5b6e585a6b749a3f366e048ad7caa2bba1b0deb6975f91156a870b6e3735e8df244d5e2821cbf245aa093f42b5430917eb6fb26c0ea74fc02c2140f7dbde56ec801e3e9057c27bb74efa7a1cedf55975750408818f2293370ec2d9044b1983398805849dac200bfe60a14a6f010001 \\xe3e0d02b09bbdcd6425b7aef74624af8c01bec03f513d231dcf1d0357012f11ce12d7ab01d90d6a5bb0d84fbc55d1f892e45c12d5f2686df180e1b49b291cc03 1631454307000000 1632059107000000 1695131107000000 1789739107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 376
-\\x899fe3ca2ae61a43857e8846ec162d6105f2b069625ee1d05c26e45f9746847f756920dc91266665831b744b1cc2329894d5c28ccb0186e7cc0481208534ec80 \\x00800003ca3d7062a72728424909b8ff3727d2a74503a501b8fe5e8d4183f44cff32fd3d24fa528147efa7b3dc9ea2f9f58598ecc97a3f3a444369df57374f24b45de21dbf8b52bef63435c1f73f5b649b993eebac1f3ba7860f29addb9b63f2bba80a05939a5f1dd70d2354790138471ad1b033baefe04309b9cc2ad8a4bf405a8ef95f010001 \\xdfa9a31c419b23965da19d7034719f56df8fd6ae11bc7f6a826d7ae3ba8d1b57e26eb76d15d76f0638ff6a41b346b62c31513938624bc9cd30e91c1834db600d 1656238807000000 1656843607000000 1719915607000000 1814523607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 377
-\\x9087dbb9904eceb1ab873a96d052087951df95b97f99d241a196ede92a4081ab80f6d97e7562cd74e68ca09580cf30e89de6ebd57757929ab0d003e54085c561 \\x00800003d9eb309a375640dce11be17f02750f26f6b565b7745f720849c5e2ffa67750703847f68bd2c3ec40ee761afe5b11d6c570b835fd30e113c3cf6db30b687b2759a433b22f485c918b661c1bb9dd7e604600f4b2073d0392abe951b3e3ef1db77f8c71b06298ec0c2e6fe843a5cb88c8505bbb682d5e873968ce1a559f4c89aa8b010001 \\xa9fe99e0dbf95394afc8ff997407f6bc16e3554e94f73f498009b2d2145a19b35f6d9517302d797e2e7f2366a647b70cc9445e13e0a7049d305fa65af5d12400 1638708307000000 1639313107000000 1702385107000000 1796993107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 378
-\\x9397fb18919c1927073bbadb3ecc24efd8fdc224e14d18d60a7ad5582f89bfba232bef27935a0debeab61c1b7deec9f423a0616d0476fcf280d19a1491d1fe00 \\x00800003c35d09dab629e6e74a6de46c063492e3bfeea61e83b9b2c9194db5568d2ef4814b6d1912d1007b47cdcd0861178fc460993323d5be1d866b27f92da73d05aa5b0eb8be97d483e98a74ad5aa4b9b1362848f681f0988a2f19d4c932946a917b4912ef02dfae8946be2f4da331e41a7542161974afd008b03fe6c9bcd24d3f8bcf010001 \\xeb740ee390cfadf56be2d26c212da9c2715c8e20166d5f02be9cd0c58ec432967cb42c1d055d3d87dcf4cdcef0b2f6631ca0b76c8b4901862ddda990bf2ce80b 1638103807000000 1638708607000000 1701780607000000 1796388607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 379
-\\x9717ac10c8617d60c52875334881118139eaa8cc07c36eaa95134addecbf6b28bb0efb369d95231bf94a9ed128fca0e03bb7cf9b511684479b0660c7323bb3bd \\x00800003c104aba25b608e4ccf324e76c362d686fce2f1a00558549784e36601d2b730902e98909436c828ff9ee0b1c3765a8243b47f96e7a8e791ade855f5ea3ce3141888fedffbca6cb316de7f31497ad66e7716c3f271fa606e4e1eb5edb96951b440bfe31e0b0072de3334d9e8e56ffd8f7057c2f85ad7cfa09dd6b3ed25e9b4102f010001 \\x1ab6f755966d6ea8e950ab4ee2e116dffabc90b387989ae31938507bba32284dba3520da6103724c8e66ae04c4d6acfd36e589064f1b181c485a667333ecd30a 1654425307000000 1655030107000000 1718102107000000 1812710107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 380
-\\x975f3d942a93133d836cd8b7da70fad7daa553c7742b33650e91dda1c60511ea9b80067b9058342a57f1970b43b44f7f471d88acf7c0cb27d5d38c40f6017ff7 \\x00800003d00809b7b27836ff4272f932331c2c6ed1633e6e12456784ec86e033662e9c2a985b3be1c807809e26a0377af1b23a3a9385f80c379766a3e64a62592d3d40922ff08b3b003ddbbadc0b8a36cedfe4cd9bda156195f8876e5b237aeaadf14370708487f1a87f95fc58465233901739330aaa0e43c4a8f85f2d3f4f25803d8579010001 \\xf7cd74d16fab5ec8e789390b5097d35e018a3bf271290449e83ad3e975eed564dd5587148164a7b160c983d0eb9519ba456f35120a69a0ee6414e9f38fde3a0c 1632058807000000 1632663607000000 1695735607000000 1790343607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 381
-\\x9d3be29f9cd11eff65aa9310dab63dae7458801dd2e97953bcc46c696acc9ccbc3547223c51a672e001bc3061aa4a5b53af13d9e8e4e1c5c6d54687148a68b0c \\x008000039931aa622fa6228ef4349979ec079627bd647f5d93fd046539c044270d60f0c974ad125693081440838a47a707e818da0d6e634224d45f70e969e6583dc309abd8cbc6c015ed2911aaaf84368ce00b56f19cc18bff71d280b8da9de8bdba5038616b5e2670acfa65fd376113754921a6b72808cdcbc7e92ccaac3ae4a7bdd1c3010001 \\x9ddf0eb6df7883c66962b132a9c5a0a9bfa170cd4efca1a6b27d768b20b59d7b31141023993404b7e69c931c266f7720f87dd7d138cb0b47b2d2162aa8b6640b 1642939807000000 1643544607000000 1706616607000000 1801224607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 382
-\\x9e0f055bf5d0d82e4afa488e6e8971023d2f705ec3ab6a7e089d6fcfb1b086762fff6d40e0ff4c275131bf7928fea48967e2ca4fa178622a4714cb9fd901aeda \\x00800003b7fe4067645c6bdbbcf4b46fa88f7e1f1b1c2bd5d120fb018a753d198a4f0f1a842285c6a74e3ff00619b1c877d6149385f502278d487b4ab81228a63ad72589805d8f6fa5438b02cd27ead6c3a29509e26d031602341b7f07dd8fadac154b588827be402033a5f1015ff00c41e535e55841eba8da5e8b525711150b8535de57010001 \\x611be4aea92c66dce640381a296e83b84699af6899cf7bcd5f9b86c64bb220a55b8a494fba59e471b1069999e90057339245bfaa66909d8d8ae0c04293c0f106 1634476807000000 1635081607000000 1698153607000000 1792761607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 383
-\\xa0a387a461d762e2897474b09f7f6efb785ceb4a8bb3dc972a1443658223148b6bca7f6389200f1bea651a2b0753d4e536ec6577330d89dabd8ca07c4088adb1 \\x00800003c95c53a4b13f29a3b97c77b0108ed5ad45eb5abad785a575d8854d63777a7f6be21e4f0fd56a1a24deac798dde18bf7195d235c2b4eea1a328aba224ef3811a1d6fd52cf6420ab0e838368d93157d58fac307eae06a2b8a8723aa1cb5813cc440aa422e677a27f885f7414b1e3b0d3d2d9e1f9bae5b9a9d88eadbb81a87dfe15010001 \\x864bb65b5285544e813807d97b91f909b2c48c0fa25f218865a555effe9a8d363ed361b4d2226d0f5b2c36780191b6a31cc357c9621d19c85d7ce0bd3d991505 1645357807000000 1645962607000000 1709034607000000 1803642607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 384
-\\xa0478e5a34876fe9c18d04657a44139d783e761bd7a62670a7d856d9b5d244544cfc9743ddb1533ef4482270d9c6e1ce54e76dfb85bb42532b20b8dbd953d750 \\x00800003a74a174b334b9ba8bff307138a39351f391822fd4577cb277bad675bd9e61831b293d33f1065caec1c454227e4eef626ffe8936aaa77267933ef1deb26a46b9d83e5e8c193ecc202e551f225f30caf5070e4e1970a3e3cb2da7f89e9c97b6513550e3df5fb11c0eaacaaa777bb2ca3850aa63b0472c1e9e76f66c7de0a0bafab010001 \\xfc724c790f90423070755018020d2778d48a2e20647a6ac9e8da62dc4f18a99df524be50c8d997e658485ee55fcb0bfa7f8d1e0106c6e49f6ab18fad33432707 1636290307000000 1636895107000000 1699967107000000 1794575107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 385
-\\xa4bb7c65458a654b8a0b51dd6cd9a7db2891b4d721b86d20d49978d57023b5d64841acf209a3c28a37844434344198c7fe2c2f20a96ee3a4a7031eea88839048 \\x00800003c59254ac5571306817e6eb914b6919245ec7a0a62f571974d46e41551ce289566bff379cf831412769e08a8ac89d5e3be030e24c9599afcaabc09a3b9bb3894bba7a81932bf647bb8fbf59ddde80004b6641e5ceca71ad72b620a58ea59885cc1f9d717d676f4d6b171441af39e1eb04a4c2071c3781ed8fb0ec61f5a8bc3335010001 \\x2f030e58cc95402d322fac67a7a1df3902d921c9ccc545ab9621d16de9cc957b39d6c6b5e138bdc60e48b775392434464172f1fe25ad92c78b30cfafdca5e505 1649589307000000 1650194107000000 1713266107000000 1807874107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 386
-\\xa6832b60dac3a481cff01b1460a9ee39eb29a0d46a4021c6455b5b7b325f59bcf8822c0234f1ac9f90bd4b1279d141c344913b0da626ef3462f170f1d4729d60 \\x00800003abfe262bc94563396f526e1d766231b6814fa2a0e3be5ca62c10f18a4358791fd88adb6ea291a0c4461288435b4d49a0488c6321f590ae306a97464422d8027437af9c066a158a617850f08a8172123d17884582bfe28e60b8499205039d96b6073dfd4c546d4b6b0510a1dad56cf7f5e4772bc2224d2e3a8ca7468af58381ff010001 \\xff5cbf662e6c1d97d723fba379cb1e4341ff18253d3c8051d0bf5a50c2d814e28882d8376f6e7b35f765d29cd83525c7805b023f15a519cf75c26ba1fa7fd400 1644148807000000 1644753607000000 1707825607000000 1802433607000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 387
-\\xa64753c0976961b1ffe221ecd15eddb9a47d174d7d409f001331530e7eee6c8eb883466bab9fd1a3ca199796c9f5ddedb7de1404c819c31d3c140cbf8cd5723e \\x00800003a2f771b421c425922c6d52b05a04702072d9b50679dd912d74269f75394e9d2898bd5683645e09cfe3edce87ddfb0c8ed5b8dcac689f47485c80d1c8166634f8a9052f32aed2659d461d91c339dc31631d647e82b57370c40a1e58331f4c92ce5b42123ef2c3d7cf5e1852d49d88d70c8ccfa89d605377ef0058a05ad60a4c67010001 \\xff2fe2a59c0940d4a96b8fb17c76c27b6be3601aac9a94287f21cbde67938790a9d392cd97417434925730435d792c389e587b0168398610211634c153bdc30e 1642335307000000 1642940107000000 1706012107000000 1800620107000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 388
-\\xa97705a48ac924c87ebe18ebc37315b7720c529eac02b25729d715ecfd2b00ade020b79fd8bda438579d4a2c9045c60697c9349773f0926eaeb6ef452944de36 \\x00800003d243897d7186709525386e135997911d5d74adddf51421d5f6987e42bcb055280cbf8a4f356c15966b05fdd94edc1f0df9608be52c246cc0dcf7cb2c58089e2009646b1a472e146d334bd9af740a26fd9ecafc12f489f5982339222612f9ebe915b94031efe96330c97f76bbd419aa7fdcc573bc1f3549cdad0df1ea0ad0b0e1010001 \\xcdf96f8d305ef2f843371feab342b62d7bb9919486035d90e90a696d05449ee97df10d0b1c7e1bc739c1a38d16d7a006a80a77b2d7993d6e4ae941b869a4400f 1645962307000000 1646567107000000 1709639107000000 1804247107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 389
-\\xada36834b677c8ba4705636fb5ca99828cdd210c1c2989749fba2e5d4dc3caca3f4167fa41ac7f7a3ef2b884fe11f782d4dbe60fa093b292729e517faa364164 \\x00800003f97d615846804dde22aca8a950c6185add7148ce5e919f8f635af708ce02aa0354bb0776818cb1651343e3537366b869fb745de4fb1e96cd8a4e13cd2541ecf978a18c43c032f4f35b1d83580e95b5be681653b8376dc4f0ef4b2863e726b3afb97147de71bff057b0a88896e96086b99660cff49099218aa538164cd7e34cdd010001 \\x73281da571baf5b1d8d69ee38986ed4c3da3dbb422ffe23f669c313c6d41479595dfa47346b199e84e102c1f0e0af8d2279bf3e6e2ab190d9cd50c7991c64904 1656238807000000 1656843607000000 1719915607000000 1814523607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 390
-\\xad47097f462200313030dfef1dadea4ee784d322aed61894177607d537ca9c1b43f1a202d3f9d411b12ebc713c645692e5913eaaaa162b0143c185811ee49fd5 \\x00800003d78f9d685b296de2740300e3a2f05cf7349ea287d2147c03751ed151b161bcde8c4ef22250249281d94e2974c6f9686bb134d24f0ed714bed4354668efc60994c64d48f9ca0aa7aa213548333400741075bf9c57682445fcae3f1363def54fcf82f3ce8ccc6721280ea0acaf47806eba6d85b1729805e1a10031725eedcd4417010001 \\xe7c09b5609e8191d42cb8eddf640f47e2d1ef33cffef727e8d45a2fec8f81cf1290a76474f3cd926741d41dc50889f2d91bdb8e95975441bf231d72df5087d02 1631454307000000 1632059107000000 1695131107000000 1789739107000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 391
-\\xb3bfc81342fc5d8dc3ecea0fa7af8a9bc7de5e8362863e9ffa0d63277e611ca386f402e9bf93be3e844ea7b9a961cbdc6036bdd7dcd1e0abab1cc12b86076fd2 \\x00800003babc7eec3fd9659cb5f11e0495530c2d5c08fd094f5c995e394abfdd879ece58bac2d266395910a6898e9714ee8e86a285ae582ea7b87ca359c242862fd47b91daec3f83d3cf8ae905c9a1ac4b1a710caf6fe8abb8a6405d1c11c929021c8965d17adf18f95a2e024bfe40caf0acfa740ac1966daef043c23539697e66869b77010001 \\x82b77540945b8c5f3783d9b66575ce6c543df27bd76b05c6a47f8a294b4ad5eebf831408b61a9802533c7adad5065588f02cb2344ed65e6326218af88001d503 1661679307000000 1662284107000000 1725356107000000 1819964107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 392
-\\xb577249952a2ab1a0a54ec91deb23b6da513e6630e93e49e13a1186f32b2075407293b107b219cf9b3a1bb553c5738ce75784bac73d8fd060957043fdf1cf9b1 \\x00800003b873173a41fcbf6e287a07f3b8177f31ad25d72da697e20c2a07b3c89038b5cc81d4041931f118536c8f10d44d72bdd3d3bb428162fcda8b6df4188bcfc83b2b891d3b950844e2740010c900895a7142d9fc0e5bf4fc5fc4cb12507cc23613c13552541f9c463e448342990e00ebc2807c202bbebcf925354acc37e4fe63fc95010001 \\x43572f12d2934ba5bd5f2ffed3951612207e8213a7bf6d92c22aec688f5c9ca057825c9728f1acc57ca00f0666abe47cb2633650a603432774de85ffc084a405 1655634307000000 1656239107000000 1719311107000000 1813919107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 393
-\\xb72baf2a5ff6a39101994227a5f06f16e12e9de214ed2853af90f8c21ab888b90b0d751a0af2cdea498de6d62135e5f194a951fadcec469c0a446dafb11fc189 \\x00800003cddea9a2a4c0444f79d40c4ca8afa8d999fdc6dbfbc67e34c8429aba36c958fe8c5693deb8a4b3c213f7cd52e21f36fda8c27163dcf31c09186accd6f7d23fac0c486cb1bcb0249106f6eb8f7c1a2b78a8c400579812b7ead106cb8c2177afa66ced50261d9eb89544bd29326819faf556614631fa5238954aaa2f0ba6e3830d010001 \\x5c1c8f01c7d6262a85a66cd8cd46e80322aaebb91e36a23f238f019eaadef70eca95c1a7f54e69ea688ba78ca91b55a6f1210b0f8398606acdf9479dedeb1802 1636894807000000 1637499607000000 1700571607000000 1795179607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 394
-\\xbdcf8dfc22405465520ac857e6104687a1c8a4e7ffb00e3537bb95fb65837eddf9d4e644c0ab3c860bfeccd6664051369a98e594d603156e592595883f89a536 \\x00800003c584ab52aa76924408d230ef04bdea20d4fcb7aab78d6e4e029369ae41bd95da0a9a9584444bba2beec749d416ca8ac3505fe4f168f55ed44e6ddd3a8e2f7134a76ad106e5d3fc589207d0038c2f8433e4960bcea85dd14cb3a1ede2145b56ea1c7c03f8a166bff0479a395bec36a6e3914d1b7b1d3f1d3f8b77389e44de8833010001 \\x6d15a9f5e5ab80079362f019baba3842e9db4a38752b339581637b664e6e694394b1f7915a06cd022919f4116761280049fd942bcd6f78f786a950d36100f009 1656843307000000 1657448107000000 1720520107000000 1815128107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 395
-\\xbe1f335ad8ecc301808f3704c3f8510deb9c16fe7ecf1394c0d6e39f4dd74d467413a510c8cc96317e438e7818360b93cc4c832bd5f543fe9620d4476b18f6b1 \\x00800003c6681fce8dffc0b9e78e3c2b0f9494d4eeeb63fc85c023facecc69a0ed88fb7319518a7387809ad215203466de79ac9151e37949132e9fd77be818a770fada7726d657baf056f772e16a2a9d9a70b930643867aaba569f87634c2fe5fc40d37722f116c22e5c04bfec997367ed75344353a39270d50317602eb53dbaa7964635010001 \\xee2751382030cb101578fa4e7b71723dcf112c3f82d7387c47ca48a50dcd231f44d7469a16123575413a1605737fbc53760638187d1668a4ea23fa40c4d76504 1648984807000000 1649589607000000 1712661607000000 1807269607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 396
-\\xbfd75f100092390dc8a66c9b87b67da3d366d37d10afabffd6f844eb376dfb31991ce9d550634673bf30534917d4d9cf58ed4235ea1d839ffeb2a01fec1859a1 \\x00800003b37611f8a5592b1bc4d727e2b6c284b243a2b41157280b49f6df86f33801fc08b3e00996f5a2e2d76601fec5b4c5aa99cece1059a15f9fcefe475c0ce165ef2cf6667b45557b890e193ac95465c38b221ffaec4485967545b300b06a10dee8b7e9362918fc728e562b73ebf1497425e9fad214578b308a865a209e46aa4743df010001 \\x17f232ea2afff2d56fca1a71ce4a59295b5c19ff3f47fd1b72877446a75d02a7baf31dcf7fa325568dba7c88e9943adacd15cfcad9b10ef01ec3eebffa16c409 1658656807000000 1659261607000000 1722333607000000 1816941607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 397
-\\xc0af22e388c6b5729eac5161788792d3d6cd5fcc50cd580bd97b9375f2a25f8a8d8d571f10f8c85cf76d65513020228102f157dd604bfd954ac801f13e7021d3 \\x008000039ab0161cce18b08a28d22938d87a6167f8547942d7c71e9e284b5a6ba6018cc5eb7bb403a7cccf9698aa7ce4f6909fd4664bce0a86e1c2d1c8c24d96512cef4ad6603efdca5e6e977d4189401e87ba7054909cd73de9a134650fbe10cd540f05eba5b409879c4d6c3f87f77a358ae0199ddcc78538266efd7dfcad2e5465539d010001 \\x9e8e259d835f661970ef598281d6b361b1db63d4f0ca796ab1e4b9fefdc6d7d68e2e1d72a1dbcc626370880c8622d2ab3d6425b2f57ef89f3cc73339e1955d05 1638708307000000 1639313107000000 1702385107000000 1796993107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 398
-\\xc20be45385029864a75ff0fd8c1e7bd2541cde3ef7d1ade53102d5fa4f99e17d31d992a904706f274016924e1b6f90e2601a8bea04135f36f8c61ddeb08a9b08 \\x00800003cb409e2511db07a91e2347358fa7b01c9882c59d5026f49062a9bcb8ec60ca47bf81bb2d42d554b1f5e80c52c8fb808c43b65877620159db48eb9840e361ba0a7e531aa830929351b2ebc0b2f8a4d7e9459fa8b4eb41a5d066594c14e813e29429373c677fb9eee57b1585894457b9de6e083534ed55abe7e298ce0fb3704eb3010001 \\xa03b5e2b48700d5e3789fb718ebb6bf449d7eb111ee363dcc98a7238296d7e40df6e3d48f25c5d3ad349ce60eae92d6381cf397dbf3dea4dc1fd296692161e0f 1652007307000000 1652612107000000 1715684107000000 1810292107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 399
-\\xc24f4110306c89e325a98da72738566761413ed466d777a51aee5a6a2845c4d3f8b028d465dac5347b65b8ebcbc1783377884411730335d6ea5cf0ac3195b46a \\x00800003dbcf4fdbf64fbad768c7066f640741a5b463241045491660a8a61a516ddb4c925a6ba53badf5a453562e109e9725f5b2165f46ec37e5586f2489355b05cfaf44611fe3bfb2a1c75c83c987dce2c3042fb3e7f046b24ddc28d23fae2d44ba77f4a5122d218bbc0b058706dcdff7d5cb1aa4f54e1e07ae4dca1fe5442519d2e917010001 \\x36327d619ec5c1e91a875d76e48bc1e0f028fee297b52bad4df02acd576077c3ac91f9a2da98b85ac37cd760c8699cf3b8f1256b2ddf07f7984c9b9298f0590a 1639312807000000 1639917607000000 1702989607000000 1797597607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 400
-\\xc35f0a157e2b66f8fa9c2146800f68076e84959143005d63ce4bfe77a10e19d1779ff8b3b46ca7f7109032abace9dfc9d7ca229c89649af6df1eaf236adc4298 \\x00800003d1e1d9a29c446bccad8862b37069c94030080501fc1bd29ad81243f54d2dbd72bb335b3d7215738a401ef8e83ad804024cf445778b59cffacf1f29289321d5e364630110002a02e5b96d086744572041bd27c2248aeba6974c69539a2930db976f38c66cbf9e9621bf45cb05a27a612d5c17c26ab80e9b71f8aa9506d1d391b7010001 \\x98f0273be80da60ca056e74a34985a3f4c3ceb81f4eea8bdf788d95c711a3008bc6b42ea09640719b3b07a3df922c1c0248311cbb00418388a1324afc29e5b05 1652007307000000 1652612107000000 1715684107000000 1810292107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 401
-\\xc4bbc87c49c7a024b00a6f398c00a6ce4776eb621723c25f1b626c24160c0c1b421ad81696baf019846a9212c4b2371ef489e0c4acc73c9c051a70328c04e42f \\x00800003cbb6b868ac4aafa8a4b5404cd76ef942895f7af54fbf3e7fb05432b7f71c81c2ba9635d24d3dde05f1b3222050d663186db8aa59b707e18430f42353461d45080f5b086c8dd6abcaf7d18fe8eb96e1adec51a01882f8da1123ad85d05643ded58de6851b3748efd0dc3c74dcc71a5602aefe106ff7300d3ad89b2dcc24afd015010001 \\x0371243176b4a9801bf730c4c86716c45fa695f62e037e0fce7cb2e6bcf54b0842787607b540b22ff98f89011829f0212cb71240ccbd3d5bbbcc2b7f5fdd2f01 1661074807000000 1661679607000000 1724751607000000 1819359607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 402
-\\xc6bf5a3b8f76a8796fa376822a275d417db2c59e67fee3bd68b90091010638602d2bea22126e25aa824d6b1f6a643b0ceeee9add3a8892b7675a3ebe521f87bf \\x00800003ccb3eb988f0ee8c5ddf223a9ce96ce6fd68a5320f628fab0c46f4e3868618aed2408b0a568531632cbb9a5cd4129b399796d87c5eea4195ec966d9bee6cf38dfe24454dab2e4d155a42fad43fbcb8890f734d761b11522666e828c6baa20521a84b56bdf4e8f8d70a74a2d26d66fc2386a7b2bb38e036b4f1c493ad992018b09010001 \\xd0b063df1f4447886eb70cbbbc22e858c219bd1cf8d841a2c6f51a967883f405a2737a875d85b2e2f78026f998101b74ade0fd6f24d23e82b04ab6c4ea463d04 1660470307000000 1661075107000000 1724147107000000 1818755107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 403
-\\xcbab679e77788bc9d8f4132ba1b9db32bf3a814a4c74503b6a696e1188c6903552c3659a567518e48f8e9757c654921b5d4d7efb45c5598a338b5b439e9d7f99 \\x00800003f312a014551453e3cd229913debaf2595438bf4dcd112dca8cbcb859fb4d432d0defc1cca04cde1b5184aeb8fa853683e0bd9aff8753034b8a0972dddb82dc770da7946f9d9afa5d0a86d177bf86460a79fb4266040393007e9bbedc98c8de6fd4d81ca76c3688dddee2b32ae1161c887b4bac7fc9e12c3bf64129758f6b20df010001 \\xeb621f6d94bf3ec00c6344df4af839cc57cd9394145d8689ec2159601c8672ae761395c56fdd35bec22ddf10b08072e626a369910abce1d3667620c6300b2e04 1645357807000000 1645962607000000 1709034607000000 1803642607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 404
-\\xcb0b233c4deeee7c045f0350493ef88c3db28c142c063cd1f8467882ce589fe3f35daa84e28eb12e1654f1188fa9e6965d25a2983f7e2ffcd7aedba761a3a4b0 \\x00800003aac76108c8f7208a45dca9c8d2ee21182b9b73c8d106be4c7a6c8173da13886a0da4aff01b0e376a93a53c21c4c90ac6eee3b05664d6c5d30dbd25781d21a9a436097d93f1d3c48e399efdd5a15b6e82373399ae3f1b097f636afee9fe68c9b646792e4b10663c624b27b8bc0c92f3188edba6c29a48c4306d9df7b5f3697389010001 \\x1ab0af96e061ad7b03f38df1ca9ce76640aecd44da43d1840c10c50d0112cb613fb96e9ea4eb2a9d155ef24db404bfbb9c9d9af92313072f9e8a4e37e8c6c40e 1631454307000000 1632059107000000 1695131107000000 1789739107000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 405
-\\xce6fb61ffc2b582367af29a8cbf937c1515ba058e2bfbafcb06781a0dc6b9f0becf6b0dc2dbbc7d495491d1f7721133d2272803dd4c661728bedcee968e729a7 \\x00800003aefe1ac01d1be86d5bd931d3c477638550bd0b532acdc54bcb3124e92d8ecd397a1135a5231bdda9d86abe704ff4e566a94444c41668b2910a00aa6d01deb66a16996cf82e89635ec7f6f7b419f368b712b56f3ddf9489d87cf4bd5df2046bbc32b999837fe61463ae4a8deee0d4274d927ff64000ead60b087bdd73fe660d4b010001 \\xcd498e6dec53ccf74fcc754550c8f88e6cab8bec514a27c67133fc90acd024e637f21079b8f75b848df09b38bb25e195a9dcac3773ce695b0c1115887fa3bd0e 1652611807000000 1653216607000000 1716288607000000 1810896607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 406
-\\xcf0bb8eada3a5ab863f7546de5071438ed854ea53fe2046f108d8a147bd0e6e00fdd3ccde180b158257d4413983210acd8b8e1b073a3ea8de975a9cc51b8a1df \\x00800003d4c1eaf4491e1e1f3e90e2bb8231a020a0b1b8deaa9ff423b15ca0ccbf85133eefe8ed52ee3aa982d03aee13ad03c46cd54e8d82e9e56fb7f7a7ac6d81a13f32147ffd03c0dac54c2f9d9b4de57ab0c07e72f3430b9d232f766acd135d36d2eb820218b000708afd14e5eed424b99e50c7453b26fc5ded9b33171a267933a691010001 \\x1a36a9cd4362f9c96c4b733787f7a63f72468f957e7a6ac6ab65811c7e4eaa28df8cfb7100cacf9ea3417d8fda95c939b9ca2be5a4b9dd6955bdf43e8cd9f00f 1645357807000000 1645962607000000 1709034607000000 1803642607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 407
-\\xcf231e0eca3df9b78249272801f6320e2b19d65bd3641ce8059c7320a1557645c138996b5f55eb68b6e311ba3c2fe3d6dcebdf8f85b1c13e88e5637cd30d08b0 \\x00800003aa2585b969f72f2d74348d9a4c18e3c95108789fd84bab2ac4387cacfe8c469ce76845031ab13887117d77778f2c88fc7cd3e00416706c21da0af213e632c1bc3679e387cf375ceed1b6e17b147c25f3ae38cdeab71022d270b338fd0dfdaaa8db29c25c2fce3b6e06cecb76f570d2120d7152c49e54a9377df95f3245abce13010001 \\xcbc2c3aef271d3f78d66fe67563af59aff9e3971bee8d4e321bac8bfdb0d9a071297c3810c4d55984559c98fdf33f010616315d23779e204ecdfc02d83887d0c 1653820807000000 1654425607000000 1717497607000000 1812105607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 408
-\\xd00f3c3a35b8befd1d38eca76ac6d13f6e81a07b3df3fc6e8a5b723bb4f34ace657529c4bbb298bb40fe47a4b3a7228b65c45c00fbfe5194604f619062609b86 \\x00800003cd85ca910a50bc04afa309368c5cfea807810e8f0362cb4198f8b7dfa823a263f274b099bb1fef60a0e14605c0b617d2c9d294e32ed41006624e4ce1f061bf87d7960a39e8ff0edd1d84265d9b8ab728a43472f707df24b2ad56eb1f7faec65cb295522507635a3df6a14b1026096ab7ec088a423eb19e5147289083f2c0c70f010001 \\x8aa4ccdb02c1d1e2f1eb30cc256237bfd6d4d64099f7d721c0d2a2b3fb378e6898e94ef52cb626923ef716b3ca1bd630c4c55e35b4a985687d55e0b84aade208 1644148807000000 1644753607000000 1707825607000000 1802433607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 409
-\\xd3874ff6d64a867542e2c1025563c79e648eb82e44a1f73707c1b533f80f8c3c8756a79f7ae494b0f4c3179758b720d7e391f1f4e5274be5cd38619b168ed4b4 \\x00800003cb87b7010189d11480d07d28046098261294e70bb3629d1944e55bcf37a4c15468a0b205e42677534db2ec8f9ea4de28ef29be2c1b6c77e445b2d1acf87d35bfdef9cfe82535ca47ddb9a2ec7540df68ccdb622c1afcd09ea25d35a535d5d813db5bebb570327a3b0a21a40849212f0f38fedda13a1de44048124e038f41952b010001 \\x67e1395b10e8d65f1f57ecc52460e804fce124a10f9725eb682703cae8f048d8ab98c2bb10b82532dad5a8db9bdc81b8e23b6af1a156aeba65702e08d7e9920f 1642939807000000 1643544607000000 1706616607000000 1801224607000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 410
-\\xd8277172842bd5886b403d542887f6aedb4962751922094626d97b1346998c2247f21910687f72db0e4d6b5c38e73cac0553dd73726f2969ff434b65a19d596d \\x00800003b28db45baf35bf6fe0d5024492dcb333461e80e986b3a6c3845ea34bffb98f3c85c4a1fdf17d0ef0884a631f225bec574d4ffd6de4c72f0fa5ec47bd6c6b997511a6224c86fdbbb11e664b770b725dba00a6ccf4229c3eb490c85c6777caf44872e7c9d0a60b732a30243d3c8fd15c89972aa97a1174e235f07d58772031e59d010001 \\x03aac3b00898d9e34dc3186631d1e6c2819037ee26b1bb0de22edb25ae0514e8a97a519dfa560ebf4785f36e1fccb8cf54ad3e4aabd79ba018a4b79caa7f740c 1659261307000000 1659866107000000 1722938107000000 1817546107000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 411
-\\xdb3b43176634c52bb16fa2339b1d8ba0b137324b0613533a3476faa2783919627798ab5962e405596e13d749b245a225a11a5a625fc8dd29fd054c869018d9a2 \\x00800003c7180fa93a4fc314ae0dc84cef25588439ef5a5070c804b230d1800b5556a11ffde0992938575ea40e1c153c3e823ba56efde8818a10c7a2f023fb40a63bfd3b2a88013ab7b7a9b078d1ce514253c8d9d3e9d7da2e34892d6925dec149e3c793f9fb5f85c8dbb72d210a6ff28e51cf1e47d2905e1f49f2f4f10c9ad406f3b9e7010001 \\xd5950b1f6ae371a3f901b2ec6dfe5e1fec1d8c9e1eaaac1c80a4d9bd8cb319706cd302e3fa52c46e1a0db1d061df526e7709e45cca2dcdf9696243ca8fe81f00 1641730807000000 1642335607000000 1705407607000000 1800015607000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 412
-\\xdd235a2f0ffbdf528fe628545610fd6d795138db4a37efdbcca2e6d8f3a175a86cb4b5f11c6feba638e81287653a2da054218c024c5c73dc609c9c5925e32120 \\x00800003b5d2c181326ba15eb72176413d083eec2c9b345c073b0e2c7dfed8e5a5870e5c25c3260e98c2915b173af710e13cb34aa9f4ef62d677bd1afc5ff540cf7d3fae2abc9306a2c950e2fd2267733461f60aba5a4e28ee56f2c040e9cd0bfd8cd3acf03456724ed84d4ab53115feccf6bfe8f7829b30efa873045c69509757a1598d010001 \\xba1db2faf09a4a8df407eebbd9a680a6767b52911c1ede86c7e80a08257c836d8fa979d41e0f426c8a56e0287d5eacc7ab6aa232ec2960d424fdd30e66619709 1657447807000000 1658052607000000 1721124607000000 1815732607000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 413
-\\xdf0bf25904606393f6df0875c2b0554427bd7f4ed4a7bddb0f78ed0ea28b87a02e012c77911e1f80387471dea5b4edeecd69d9ea819a877156defb54d25dfeb8 \\x00800003caef1593554d8affee5ad04951b6a7dcd569d13a4dc22a085cc3a800a88569aa493d09f5ea1b1ccd37c1a44c2f105a0bfb8baad7beb9bfa28a6c6bc6328e6997787b375e63224471dd1b727166c52bc71e9cce84224d575fc47f0e76f8978b9df5cb127f6bfeda2516fb9257603669ed654400a6433e68f7d04b9df8816ec4a7010001 \\x9735fbb7e46207ca8a1066385a0f4f52ef42f236e626b00f3e90865fa73c286f938ddb39a1624f9537dfe58229072d758e5e480e6584dc4eeebf9487424a7104 1639917307000000 1640522107000000 1703594107000000 1798202107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 414
-\\xe2d7c8e9a9028ef45703cfde3a8dcf1758efe209ff9cabfd44dd73fc2c8d60761bbc24bf2b5c4cac5c4bd6d504e5dc25aaf5ceccccbfb1bee89b15e114b6e526 \\x00800003a695c9868b4577ff5c6c696d8f430de9da22b24c2f424c12910ab28b0a8505d4beb7b0d326d677f764d768873dbf05666a9f458f045e3fb211cabe1da67133986d608714bb60a1332fe0da7e6833d8b01bf4736e94ba48d2fc44696903ca9aa2bf3ec4eef9decad25e553717306578b86948ea7b45ecb7cbd9742fef0d0d7551010001 \\xf395a2f5f45b98fe5259a04591fe0a4b29aff49481f2a3061eb30b5c6b2f32e199513f09da3811eb9ba5aead9792b05806b37135610ae8e0395a5893270de906 1650193807000000 1650798607000000 1713870607000000 1808478607000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 415
-\\xe26782f39c3171bff50f6cf1949813a45eccad5478281bb726c27b5162c09224b808e31a0edb06fd8dfe57cc7c61fd42f95fcc986c504ee254eba0664bb00ef9 \\x00800003bd6fa1a672603162fcfc83c96b31a2df810a7addb5265433d4662f51db75bc48967f7387c9abd1379053203ac92690bfd9bb096bec7a7d60f688357dd8b4972df5f45dfa31c34c24e74acad2b36b2afc651207d83e0662567f8bd3ca239d66c280443de8fa615c18b558a1dea5dbc4e5bc0d73061d52582fd6869fd9ebf8dc31010001 \\xadc6ecfca41560bb6bf2a6551b30b1c2247cd44bb9fa4bff4fa90334c1863776ad566c1f3a0345755eac361b4ceff9349596be0ad150c1b26890dd1c41750d02 1646566807000000 1647171607000000 1710243607000000 1804851607000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 416
-\\xeeabc1f5ebddf8be32492e93eedfdc24760c67f0407a78f925f05eeb4f3b52724e0074ee42f9f583c0ae4a2002c4fc2783c878194e811cb77a781dbb9b8477ef \\x00800003ab9309a4fa09a3647df65c11ed5333cea2123fb69b6dd2ac041a58ceb413ee9db27a0f81bb68be59796ec1ca4a34cad831c5d67942e285ae73a875c8d81fa781fe68802b9964fec86caf4b48bf1266bb38d137d4df2dc824f63ab5ce5f4faed31f5e0600c666faa6498f61781c961456533d3d7e39ff5c1be5d6dc42042b333f010001 \\xf36be6962cbe990f5958090facea5f1fc732760c40620611098b0a9da1178d5d74056d81086c328f3d50d8f02fbe38f88b932cdd4a83676a6ac2c0d65c56b000 1654425307000000 1655030107000000 1718102107000000 1812710107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 417
-\\xef7f5bedbc6be22c79ed09168a03b6fe281da24fb0b7264bbdc9afa36f95bfd386918bdff6b5b1daa370d3027c63ed2d71244fd256ae40dddb9a9239a5e9a680 \\x00800003c49a1f6dc903a8688276ff6777b5e53f3b06e3bab521e9767ea5f3a235106775097a334b1fc3e74a87ed2c7e3799131d66679c9e401e66a2f3073c5e6bd383988d5439dde34bfcf2f96ccc4185dc9c4a20279069a1a5f1a6066f8c90705f6cff1a0453acad92d7043bc5b4d6401488ea8c405f0b1ccdf497367e7aef4d4d8b01010001 \\x91e5992ca90ac57a07f429d0ec56d6989003fc2d9522c4cd6f3346813d2c4cafb5ad2772b7195bdbeef338a1c4542446e6b5f2fe49e18d42efdc458fa975f100 1655029807000000 1655634607000000 1718706607000000 1813314607000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 418
-\\xf383aae9d7a240ebaec8869e03d74b338cc73e80baf6ae97e93831da071d2fb9b0e780e15b187cae47cb8711494bfe0796163686bec8b1e1c5ef975f85f3fca9 \\x00800003cc2b63fd319b86421b4831e714969bdce3c1fda920816e2ad19e1c4fcf2ecfb3fc6000e48ae5ca2191c7cd899052da2664dc439e629e22e848354f954cf99b190146c15b1d64d0417eea831e4941bbd9fcd5216cfc088e6a1822a98b249010270e733e15a702bf59927ce45e2a1da8a40066be61da0e4370086eca217756533b010001 \\x1d019d9d74527c36ad54239ebeb98cd31b6d70ca4cc2bccd2b9f8782d8b80de73492a3e6eb95a49dbfd8448fa72cfbaad6c496383a8cd0df13c00de30b5c200e 1655029807000000 1655634607000000 1718706607000000 1813314607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 419
-\\xf4bbb414b3ad92173c31fc3726f29097016592350e93828c4ee183e9cf429cf5f6b95db6642bea45336ebdbf2d05562bbc2a75dd5daf834b9bb36f2fa929f051 \\x00800003ce8ae387038f5a9226f97b80634d8386bfc8dfb7ce72e70a37c2884eba6dbc41bf1d5f4f699a2cbdbd49c186b0cfbc535d6d13c4e9ddbb88664f4a15d72520c7602062c4c5e679f4ecb72ff2822033fec66713019fa7de282fff35cd268a08d004556e70b037e12ca2b0f1ff48085477c54d907f34d849a878cfe579f62d9861010001 \\x472c9c010f6eb5815013bd2bc52113ab473c5fca57b959f1355cb5de6aca9e7d9c4c49022213f25f3a27efd0de232f078ded19c119ca928f0a272c1a8936ee04 1649589307000000 1650194107000000 1713266107000000 1807874107000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 420
-\\xf99b24db3a408c75c86f2bf8c34d6b8be364d31ab674edf4ac4815acab506735d0381bae2953e2edf018574af7f15584c272472f5d80c8e8289c0d21d0dc09af \\x00800003dbcbe94ef4eb2a37b049796fcc2825f171b0b58cd674fe7b480eb74e6f5bc7220525ea619c1daba81c3f7ee94681596304a923d107b294eaedeb1533e3bf773a664d7921316959df4971c43bbec6d65834cee8caec3c2dfb53e2ecb808ee6a217bbe10838787a18905dd8426ff7caad02b38360eb99133e43d733a94a99b9059010001 \\xa0ab3df50442670fbd8f39be8de6752ca444fa29b85c7ebc128a6479219c11136c6508befef5976501d44667d53dcd3a24387db2ecdd6dd80eb33f2b722b2b0b 1661679307000000 1662284107000000 1725356107000000 1819964107000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 421
-\\xfb0f4e92d6a1326cb41ef2d6be60184decb87b8d570b779952de163974099af2a5ebc0aa3f76f7ea06e6e6315942a7549776923fe2896e51d66c6fb3d8cc159a \\x00800003abcbc2f77c56b997e6e27457cc25b01b6614bc039be3187d64181719e50d76ebec6a8c3ef78f2c3a1a14234cf0395b3198378cb8573244f6c087066099defec215182cc5807af2c0a74927b85d25f5b98f956434879505cbb6c887daacb06dcc6d9aed47aaa881e2c3b212baeb527bb15e0336deb9185b91b15403553c282529010001 \\xaf62851c78991cb83a4917dc919a4d378d6f5ddba0caab70783f9a8cdec7e25fc69c6a850214fd3df32c94755345ea2f03519aa1cdf6b3d58715069f00541308 1633872307000000 1634477107000000 1697549107000000 1792157107000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 422
-\\xfeeb23301168a05f78e9f339147f76eb5b3ea7a8546998b508d6643d9a8ffd757a3508a6d2c4a9ed791b97eaeb45a7eeb580c52440ba97bbff852a732ceec0a1 \\x008000039f68021c16d581e77573d8b54a6fb552c20603558e4286f31e6c2296820e9a545c7f02d7bb54c16920abb77c63779654cde117750ef5cb5fe9c8f550376676c89384f3e27733dd36001fb52f489825deea24822b76b41ebf508f2ab84bdf3039f05a0abb9e6798f26b1d55d666dde99de3b494b3de41f609d9564fecf8ad13c9010001 \\x5031ef28da4425011b8761dc9c8c092d0e8685d98783dc3160549ce97a2faa882a8c5ac1c93aa859981d487c8669a94c77d853fd36feb411e80b540ed10eb50c 1662283807000000 1662888607000000 1725960607000000 1820568607000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 423
-\\xffd75dc036999023bf88bb91b3e79f425e5b0cd0682a2be40175bbe9b0ef5706e4c8ebfcf92647edba37ccffd22a2424512b024c2b9bf44c9b955a65aa5fbfbd \\x00800003c8ed56f1331fd7b39aa2da29719dcf4ce8d7de2796f12809184959d29399f1a9d2ca5a0a56ec1a147170fe134fda6c3ec88a7532633af425f663d345e8b6d5acf4d0437bf6277b5df2199f693884b3340d19584df3387ad0477c4460d40e34f8fe1c285b988c1134ccd1d52078fa399fa348e097f686971565601b5105ea42ef010001 \\x538bcfc51cfd0b95abca00378393c4dd7d5a4f3cd80550754e166b36eb1cdb9423fab65883921cecd03198faa66766a9468ab7d50a6c25e941df8a559c0e3301 1637499307000000 1638104107000000 1701176107000000 1795784107000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 424
-\.
-
-
---
--- Data for Name: deposit_confirmations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposit_confirmations (master_pub, serial_id, h_contract_terms, h_wire, exchange_timestamp, refund_deadline, amount_without_fee_val, amount_without_fee_frac, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig) FROM stdin;
-\\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 1 \\xedeb184c42d516520abeb6863d208dd62498828a6a6f68303c12505be8c521fea5012675cbff9d464a87779d2c491b027182f8adb34cb7e1e613beb84546cb1c \\x9894ed87dfcc4c9c40782c78762a1c94ecde63e1c3727f062881c7ea1b4a159e283e6de481ea26cc7dd5271dc71b3c7e2b38fb719918de7e652ec78306b6c84c 1630849824000000 1630850722000000 3 98000000 \\x78a0c45e38c0c25568e0e4b30f1df7a597ebffc9a4a30193053ba07002b0fdba \\x9648abfbf616e5d82f9b8e0101de785f5f91a805c477b4f42d32e6c0528e751d \\xc20faf906cb0abd7172b474d26034eed9782b82fa43d9e81ac58e98c472216d6d94464fa8f34a5013d4c62ba8ad1b17cc2636244d3bbf782077a5570ce4a870b \\xdb449a34be7027e6791ed93aeba92134eba52ba175dd28ef3990e4a11204214b \\x816cb71f01000000005fbfe4fc7f00000000000000000000808ebe1f1a7f0000b094091000560000000000000000000000000000000000000000000000000000
-\\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 2 \\x6d471b4d534bd033bdbd2ed5da71c52324281fd4d3f01d75fa540560aef62afe056b3e19298ad7d668784418714cb3523089c15f846abb52e04c45e56bf48883 \\x9894ed87dfcc4c9c40782c78762a1c94ecde63e1c3727f062881c7ea1b4a159e283e6de481ea26cc7dd5271dc71b3c7e2b38fb719918de7e652ec78306b6c84c 1630849832000000 1630850730000000 6 99000000 \\xf9ab3653d05c917cdb0936e5d250532a19cbc0dc37ae31c96cee0955dadfa5d4 \\x9648abfbf616e5d82f9b8e0101de785f5f91a805c477b4f42d32e6c0528e751d \\x901cd72b866e01242b07c800c4f86a31ca10f889d5d9eb7153d3e17e1ba136e583328284771cbd49568f3da52d8a93e4c29b9acdb2f7b6ecb3b7554bfbc75c09 \\xdb449a34be7027e6791ed93aeba92134eba52ba175dd28ef3990e4a11204214b \\x816cb71f01000000005fbfe4fc7f00000000000000000000808ebe1f1a7f0000b094091000560000000000000000000000000000000000000000000000000000
-\\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 3 \\x4316e1112dd1c7a3583172d07a77d5a9a42645f48d506f4a5406477f5c77afd336269bba67e43940ed294d9764ad3b4887147816b70b6995ab6fe89746ab4cab \\x9894ed87dfcc4c9c40782c78762a1c94ecde63e1c3727f062881c7ea1b4a159e283e6de481ea26cc7dd5271dc71b3c7e2b38fb719918de7e652ec78306b6c84c 1630849839000000 1630850736000000 2 99000000 \\x7a329a4fe5e1bff6346e8b7af27e28c3abfc3a1261354d9c8c349492f4b7199b \\x9648abfbf616e5d82f9b8e0101de785f5f91a805c477b4f42d32e6c0528e751d \\xe18dc61c45f38a9fb1aee684fed20aff1f3c01e69c9738aec3268dabe2528ff9a0867d534d9427ad24305657987a81962db44ca83e01f5ba6b1e9662ef4a720e \\xdb449a34be7027e6791ed93aeba92134eba52ba175dd28ef3990e4a11204214b \\x816cb71f01000000005fbfe4fc7f00000000000000000000808ebe1f1a7f0000b094091000560000000000000000000000000000000000000000000000000000
-\.
-
-
---
--- Data for Name: deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits (deposit_serial_id, amount_with_fee_val, amount_with_fee_frac, wallet_timestamp, exchange_timestamp, refund_deadline, wire_deadline, merchant_pub, h_contract_terms, h_wire, coin_sig, wire, tiny, done, known_coin_id, shard) FROM stdin;
-1 4 0 1630849822000000 1630849824000000 1630850722000000 1630850722000000 \\x9648abfbf616e5d82f9b8e0101de785f5f91a805c477b4f42d32e6c0528e751d \\xedeb184c42d516520abeb6863d208dd62498828a6a6f68303c12505be8c521fea5012675cbff9d464a87779d2c491b027182f8adb34cb7e1e613beb84546cb1c \\x9894ed87dfcc4c9c40782c78762a1c94ecde63e1c3727f062881c7ea1b4a159e283e6de481ea26cc7dd5271dc71b3c7e2b38fb719918de7e652ec78306b6c84c \\x6c9322a5d0d579304d2f95e4326272c907009b083ef518a23c69c98e529cf31c87227f91041beaa33816780981c41edb71184e0aabbd8430240d520b1dd4d905 {"payto_uri":"payto://x-taler-bank/localhost/43","salt":"9PE256FT5N3YX8H3F1QCHXVNGWAGG3MHDN4J360TSVWTA6WSSMNB8MY4GN5HQAP89TDZH8ANKEG1FB1FJZMN7ZC6NH6QRB0CDDR4TJ8"} f f 1 915725870
-2 7 0 1630849830000000 1630849832000000 1630850730000000 1630850730000000 \\x9648abfbf616e5d82f9b8e0101de785f5f91a805c477b4f42d32e6c0528e751d \\x6d471b4d534bd033bdbd2ed5da71c52324281fd4d3f01d75fa540560aef62afe056b3e19298ad7d668784418714cb3523089c15f846abb52e04c45e56bf48883 \\x9894ed87dfcc4c9c40782c78762a1c94ecde63e1c3727f062881c7ea1b4a159e283e6de481ea26cc7dd5271dc71b3c7e2b38fb719918de7e652ec78306b6c84c \\xa5541783706bd451aec81bf91ee491eb0a222a128754332f3a8a02d1489fd65b48177b638230f4cd0adc8acde8a9d8d1ae1ca67bce16d675685d5906cccd3909 {"payto_uri":"payto://x-taler-bank/localhost/43","salt":"9PE256FT5N3YX8H3F1QCHXVNGWAGG3MHDN4J360TSVWTA6WSSMNB8MY4GN5HQAP89TDZH8ANKEG1FB1FJZMN7ZC6NH6QRB0CDDR4TJ8"} f f 2 915725870
-3 3 0 1630849836000000 1630849839000000 1630850736000000 1630850736000000 \\x9648abfbf616e5d82f9b8e0101de785f5f91a805c477b4f42d32e6c0528e751d \\x4316e1112dd1c7a3583172d07a77d5a9a42645f48d506f4a5406477f5c77afd336269bba67e43940ed294d9764ad3b4887147816b70b6995ab6fe89746ab4cab \\x9894ed87dfcc4c9c40782c78762a1c94ecde63e1c3727f062881c7ea1b4a159e283e6de481ea26cc7dd5271dc71b3c7e2b38fb719918de7e652ec78306b6c84c \\x0326aae6d0977d9c71bd97f60c2d1c38bcdd2f331485a65bb91f289dfbedf669c886a24a17e19a0c30595d9a738cf23166ddfdf1421e58a653d060be35c4580e {"payto_uri":"payto://x-taler-bank/localhost/43","salt":"9PE256FT5N3YX8H3F1QCHXVNGWAGG3MHDN4J360TSVWTA6WSSMNB8MY4GN5HQAP89TDZH8ANKEG1FB1FJZMN7ZC6NH6QRB0CDDR4TJ8"} f f 3 915725870
-\.
-
-
---
--- Data for Name: django_content_type; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_content_type (id, app_label, model) FROM stdin;
-1 auth permission
-2 auth group
-3 auth user
-4 contenttypes contenttype
-5 sessions session
-6 app bankaccount
-7 app talerwithdrawoperation
-8 app banktransaction
-\.
-
-
---
--- Data for Name: django_migrations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_migrations (id, app, name, applied) FROM stdin;
-1 contenttypes 0001_initial 2021-09-05 15:50:07.603237+02
-2 auth 0001_initial 2021-09-05 15:50:07.664178+02
-3 app 0001_initial 2021-09-05 15:50:07.705779+02
-4 contenttypes 0002_remove_content_type_name 2021-09-05 15:50:07.721215+02
-5 auth 0002_alter_permission_name_max_length 2021-09-05 15:50:07.728437+02
-6 auth 0003_alter_user_email_max_length 2021-09-05 15:50:07.737842+02
-7 auth 0004_alter_user_username_opts 2021-09-05 15:50:07.743669+02
-8 auth 0005_alter_user_last_login_null 2021-09-05 15:50:07.749838+02
-9 auth 0006_require_contenttypes_0002 2021-09-05 15:50:07.751315+02
-10 auth 0007_alter_validators_add_error_messages 2021-09-05 15:50:07.756768+02
-11 auth 0008_alter_user_username_max_length 2021-09-05 15:50:07.766803+02
-12 auth 0009_alter_user_last_name_max_length 2021-09-05 15:50:07.772834+02
-13 auth 0010_alter_group_name_max_length 2021-09-05 15:50:07.783851+02
-14 auth 0011_update_proxy_permissions 2021-09-05 15:50:07.790305+02
-15 auth 0012_alter_user_first_name_max_length 2021-09-05 15:50:07.799901+02
-16 sessions 0001_initial 2021-09-05 15:50:07.806475+02
-\.
-
-
---
--- Data for Name: django_session; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_session (session_key, session_data, expire_date) FROM stdin;
-\.
-
-
---
--- Data for Name: exchange_sign_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.exchange_sign_keys (esk_serial, exchange_pub, master_sig, valid_from, expire_sign, expire_legal) FROM stdin;
-1 \\x8e27725889563b53104fcca3d77de9febca01c2b03d56585ed32b224d0defe0e \\xe20d66097a0e592ab2529c33e02ae829717cedb04333c1c79fe5344f4f4e16775e323c2daa0c93b14b823c3f61447f21ae6aab19edb34f7114f08bcb20e7a209 1652621707000000 1659879307000000 1662298507000000
-2 \\xf39c2b0c142eb2b75b84dd7ce08eaa6a6fd52ddfc76bb380713305650733b49c \\x89bf4ccc59b90c458235100b4d09175adc3aa23b8bad19b4dcef83938765d69dd02734a595d68793fd49d1bc406040069d6a019244d37164a4f3eb866a211207 1638107107000000 1645364707000000 1647783907000000
-3 \\xf6a313e6eb5e0744d82104ab37d616df1c4f6e3708279aae34a9919004eddd47 \\xfe2a6e9214878c27a134a57e48097b6a5cc20aee7d5e4f5c6d95ed9ab6471dc18670ddfde9d8f9de1ac87a42eafecd6f3cf9776dc0f78382ee04286a2dc51e08 1659879007000000 1667136607000000 1669555807000000
-4 \\xdb449a34be7027e6791ed93aeba92134eba52ba175dd28ef3990e4a11204214b \\x3833a475ae4efa15b172f03f514b50bdee2c5bb55a180606ce698c4725e01f10b5f0d194ee0a56dfbf3283b8640b3741988f6c0133bb13f27be36f5fdc3a810c 1630849807000000 1638107407000000 1640526607000000
-5 \\x5da103c7425fe2926c96cdb7eca731ec3f6dc91c0bf550aa714918be8768d993 \\x769ecd06fffae45f20f247a9f1a5019e29709966ae546f58ab53e122f8213cf8326bc0269af78a161af9ea120280d399ad3b3c55364bb4564d7513545a17160a 1645364407000000 1652622007000000 1655041207000000
-\.
-
-
---
--- Data for Name: known_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.known_coins (known_coin_id, coin_pub, denom_sig, denominations_serial) FROM stdin;
-1 \\x78a0c45e38c0c25568e0e4b30f1df7a597ebffc9a4a30193053ba07002b0fdba \\x607850ef9c1673dc2e65e52ca37aa5ce575f664018b444b76ed1ce61ebf911e2e23724042a9b49f649355c5b5c0e56fda011f1f89fd3a6d62eb56cb373cdb57f07fd3b2ce74552ff508754aa732651efd22edd4e56d4a1e19880e6ad48b86bec37c62a4f16f2977320aa65d1e87b9f91e8868b523914edc58ae7dd009daa89c5 206
-2 \\xf9ab3653d05c917cdb0936e5d250532a19cbc0dc37ae31c96cee0955dadfa5d4 \\x6ebe2f19fe37da73191317358ac1779a54df025a0e46e105ee2b30b64aa14d659aae56f2566da320f541d7e652e418c7925d06cfdef423e54908a0d24dc749ea5699f8143c7ea0dd8fb81fd53260b7f5fd1a65c9be3b0382a38f8fb3bdbcf67a7f2007a19ef05c9595381ca9c9a4dc3e931006fd80b0665f4b472a5c51f71df7 237
-3 \\x7a329a4fe5e1bff6346e8b7af27e28c3abfc3a1261354d9c8c349492f4b7199b \\x8a71b7e3803f6fc0ea2dd978e0bcbbeeeebd7fee9ac71925b5e6624da48b48e12013c7057ca225c6bfc3755cb382880efae542388c450d7b840119f2bbdf721e3dee259a25c9ad83e66183631e3429a540be44ade5cf5754c4b3d2adf6a89589e86a61188394f9dba28f11e9929682c816dc37aa4ffad19a93a6e0aeba2d0fed 267
-\.
-
-
---
--- Data for Name: merchant_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_accounts (account_serial, merchant_serial, h_wire, salt, payto_uri, active) FROM stdin;
-1 1 \\x9894ed87dfcc4c9c40782c78762a1c94ecde63e1c3727f062881c7ea1b4a159e283e6de481ea26cc7dd5271dc71b3c7e2b38fb719918de7e652ec78306b6c84c \\x4d9c2299fa2d47eea223786ec8f7758715080e916d4921981acef9a51b99cd2ab453c4854b1baac84e9bf8a1559ba017ac2f97e953fd86ac4d7c2c0c6b704d49 payto://x-taler-bank/localhost/43 t
-\.
-
-
---
--- Data for Name: merchant_contract_terms; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_contract_terms (order_serial, merchant_serial, order_id, contract_terms, h_contract_terms, creation_time, pay_deadline, refund_deadline, paid, wired, fulfillment_url, session_id, claim_token) FROM stdin;
-1 1 2021.248-02J7D252A8XM8 \\x7b22616d6f756e74223a22544553544b55444f533a34222c2273756d6d617279223a2268656c6c6f20776f726c64222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633303835303732323030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633303835303732323030307d2c2270726f6475637473223a5b5d2c22685f77697265223a224b3241455631595a534836395247335235485737434147574a4b504457525a315244533759314838473733594d3654413250463247464b44574a30594d3950434651414a4537453733435937574153525a4452534a36365946534a4a5848573330545643474b30222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3234382d30324a37443235324138584d38222c2274696d657374616d70223a7b22745f6d73223a313633303834393832323030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633303835333432323030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a224b3958514b37313736463243564650585141574338454d595a4a4e56535730313145314d46395251453751544745314b4a584130227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a224a53344151595a5032564a58474257564852304733514b524258465333413035524856563958314436424b43304d4d45454d4547222c226e6f6e6365223a2241564130584d5831344546535843395a4a4b364236454a5038573658334139484639324b4d51464b3659564859444b3651394a30227d \\xedeb184c42d516520abeb6863d208dd62498828a6a6f68303c12505be8c521fea5012675cbff9d464a87779d2c491b027182f8adb34cb7e1e613beb84546cb1c 1630849822000000 1630853422000000 1630850722000000 t f taler://fulfillment-success/thx \\x8ab6168e21caddae548d37e75a3ced7c
-2 1 2021.248-00H1EXG2J45KP \\x7b22616d6f756e74223a22544553544b55444f533a37222c2273756d6d617279223a226f7264657220746861742077696c6c20626520726566756e646564222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633303835303733303030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633303835303733303030307d2c2270726f6475637473223a5b5d2c22685f77697265223a224b3241455631595a534836395247335235485737434147574a4b504457525a315244533759314838473733594d3654413250463247464b44574a30594d3950434651414a4537453733435937574153525a4452534a36365946534a4a5848573330545643474b30222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3234382d30304831455847324a34354b50222c2274696d657374616d70223a7b22745f6d73223a313633303834393833303030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633303835333433303030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a224b3958514b37313736463243564650585141574338454d595a4a4e56535730313145314d46395251453751544745314b4a584130227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a224a53344151595a5032564a58474257564852304733514b524258465333413035524856563958314436424b43304d4d45454d4547222c226e6f6e6365223a22574638374e594836393953584546514d4353544e413144374b3837565446483939474442325746474a4d5732314b395937594a47227d \\x6d471b4d534bd033bdbd2ed5da71c52324281fd4d3f01d75fa540560aef62afe056b3e19298ad7d668784418714cb3523089c15f846abb52e04c45e56bf48883 1630849830000000 1630853430000000 1630850730000000 t f taler://fulfillment-success/thx \\xfd1260f90def43c7de64068a12cfdf19
-3 1 2021.248-W12B01BP4BC04 \\x7b22616d6f756e74223a22544553544b55444f533a33222c2273756d6d617279223a227061796d656e7420616674657220726566756e64222c2266756c66696c6c6d656e745f75726c223a2274616c65723a2f2f66756c66696c6c6d656e742d737563636573732f746878222c22726566756e645f646561646c696e65223a7b22745f6d73223a313633303835303733363030307d2c22776972655f7472616e736665725f646561646c696e65223a7b22745f6d73223a313633303835303733363030307d2c2270726f6475637473223a5b5d2c22685f77697265223a224b3241455631595a534836395247335235485737434147574a4b504457525a315244533759314838473733594d3654413250463247464b44574a30594d3950434651414a4537453733435937574153525a4452534a36365946534a4a5848573330545643474b30222c22776972655f6d6574686f64223a22782d74616c65722d62616e6b222c226f726465725f6964223a22323032312e3234382d57313242303142503442433034222c2274696d657374616d70223a7b22745f6d73223a313633303834393833363030307d2c227061795f646561646c696e65223a7b22745f6d73223a313633303835333433363030307d2c226d61785f776972655f666565223a22544553544b55444f533a31222c226d61785f666565223a22544553544b55444f533a31222c22776972655f6665655f616d6f7274697a6174696f6e223a312c226d65726368616e745f626173655f75726c223a22687474703a2f2f6c6f63616c686f73743a393936362f222c226d65726368616e74223a7b226e616d65223a2264656661756c74222c2261646472657373223a7b7d2c226a7572697364696374696f6e223a7b7d7d2c2265786368616e676573223a5b7b2275726c223a22687474703a2f2f6c6f63616c686f73743a383038312f222c226d61737465725f707562223a224b3958514b37313736463243564650585141574338454d595a4a4e56535730313145314d46395251453751544745314b4a584130227d5d2c2261756469746f7273223a5b5d2c226d65726368616e745f707562223a224a53344151595a5032564a58474257564852304733514b524258465333413035524856563958314436424b43304d4d45454d4547222c226e6f6e6365223a224d574a4b584a4b4e4733394e3950584d56583656384e5159593542544e5756324531504a423346305139504a57584b5347323847227d \\x4316e1112dd1c7a3583172d07a77d5a9a42645f48d506f4a5406477f5c77afd336269bba67e43940ed294d9764ad3b4887147816b70b6995ab6fe89746ab4cab 1630849836000000 1630853436000000 1630850736000000 t f taler://fulfillment-success/thx \\x012169c02011e28cd10293a3d2bc0b32
-\.
-
-
---
--- Data for Name: merchant_deposit_to_transfer; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposit_to_transfer (deposit_serial, coin_contribution_value_val, coin_contribution_value_frac, credit_serial, execution_time, signkey_serial, exchange_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposits (deposit_serial, order_serial, deposit_timestamp, coin_pub, exchange_url, amount_with_fee_val, amount_with_fee_frac, deposit_fee_val, deposit_fee_frac, refund_fee_val, refund_fee_frac, wire_fee_val, wire_fee_frac, signkey_serial, exchange_sig, account_serial) FROM stdin;
-1 1 1630849824000000 \\x78a0c45e38c0c25568e0e4b30f1df7a597ebffc9a4a30193053ba07002b0fdba http://localhost:8081/ 4 0 0 2000000 0 4000000 0 1000000 4 \\xc20faf906cb0abd7172b474d26034eed9782b82fa43d9e81ac58e98c472216d6d94464fa8f34a5013d4c62ba8ad1b17cc2636244d3bbf782077a5570ce4a870b 1
-2 2 1630849832000000 \\xf9ab3653d05c917cdb0936e5d250532a19cbc0dc37ae31c96cee0955dadfa5d4 http://localhost:8081/ 7 0 0 1000000 0 1000000 0 1000000 4 \\x901cd72b866e01242b07c800c4f86a31ca10f889d5d9eb7153d3e17e1ba136e583328284771cbd49568f3da52d8a93e4c29b9acdb2f7b6ecb3b7554bfbc75c09 1
-3 3 1630849839000000 \\x7a329a4fe5e1bff6346e8b7af27e28c3abfc3a1261354d9c8c349492f4b7199b http://localhost:8081/ 3 0 0 1000000 0 1000000 0 1000000 4 \\xe18dc61c45f38a9fb1aee684fed20aff1f3c01e69c9738aec3268dabe2528ff9a0867d534d9427ad24305657987a81962db44ca83e01f5ba6b1e9662ef4a720e 1
-\.
-
-
---
--- Data for Name: merchant_exchange_signing_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_signing_keys (signkey_serial, master_pub, exchange_pub, start_date, expire_date, end_date, master_sig) FROM stdin;
-1 \\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 \\x8e27725889563b53104fcca3d77de9febca01c2b03d56585ed32b224d0defe0e 1652621707000000 1659879307000000 1662298507000000 \\xe20d66097a0e592ab2529c33e02ae829717cedb04333c1c79fe5344f4f4e16775e323c2daa0c93b14b823c3f61447f21ae6aab19edb34f7114f08bcb20e7a209
-2 \\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 \\xf39c2b0c142eb2b75b84dd7ce08eaa6a6fd52ddfc76bb380713305650733b49c 1638107107000000 1645364707000000 1647783907000000 \\x89bf4ccc59b90c458235100b4d09175adc3aa23b8bad19b4dcef83938765d69dd02734a595d68793fd49d1bc406040069d6a019244d37164a4f3eb866a211207
-3 \\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 \\xf6a313e6eb5e0744d82104ab37d616df1c4f6e3708279aae34a9919004eddd47 1659879007000000 1667136607000000 1669555807000000 \\xfe2a6e9214878c27a134a57e48097b6a5cc20aee7d5e4f5c6d95ed9ab6471dc18670ddfde9d8f9de1ac87a42eafecd6f3cf9776dc0f78382ee04286a2dc51e08
-4 \\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 \\xdb449a34be7027e6791ed93aeba92134eba52ba175dd28ef3990e4a11204214b 1630849807000000 1638107407000000 1640526607000000 \\x3833a475ae4efa15b172f03f514b50bdee2c5bb55a180606ce698c4725e01f10b5f0d194ee0a56dfbf3283b8640b3741988f6c0133bb13f27be36f5fdc3a810c
-5 \\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 \\x5da103c7425fe2926c96cdb7eca731ec3f6dc91c0bf550aa714918be8768d993 1645364407000000 1652622007000000 1655041207000000 \\x769ecd06fffae45f20f247a9f1a5019e29709966ae546f58ab53e122f8213cf8326bc0269af78a161af9ea120280d399ad3b3c55364bb4564d7513545a17160a
-\.
-
-
---
--- Data for Name: merchant_exchange_wire_fees; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_wire_fees (wirefee_serial, master_pub, h_wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, master_sig) FROM stdin;
-1 \\x9a7b799c2733c4cdbeddbab8c43a9efcabbcf0010b8347a71771efa838339754 \\xf9099467bd884e86871559a62a7f23b6e876bf084a30371891b5129ce4440d3cbe27afe387d39b2ce8d9625abd388517c81bfc8da9f2e0f8c9471bff65a802b2 1609459200000000 1640995200000000 0 1000000 0 1000000 \\x496925bc0b8f1173348c45e67318c282fb4e0524407f5f808cae617cca25d9db1723d7b0628aaac5e47c58f7eef7f6d2bd25c2120b7f581007d7b27fd2b3fb0f
-\.
-
-
---
--- Data for Name: merchant_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_instances (merchant_serial, merchant_pub, merchant_id, merchant_name, address, jurisdiction, default_max_deposit_fee_val, default_max_deposit_fee_frac, default_max_wire_fee_val, default_max_wire_fee_frac, default_wire_fee_amortization, default_wire_transfer_delay, default_pay_delay, auth_hash, auth_salt) FROM stdin;
-1 \\x9648abfbf616e5d82f9b8e0101de785f5f91a805c477b4f42d32e6c0528e751d default default \\x7b7d \\x7b7d 1 0 1 0 1 3600000000 3600000000 \\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \\x0000000000000000000000000000000000000000000000000000000000000000
-\.
-
-
---
--- Data for Name: merchant_inventory; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory (product_serial, merchant_serial, product_id, description, description_i18n, unit, image, taxes, price_val, price_frac, total_stock, total_sold, total_lost, address, next_restock) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_inventory_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory_locks (product_serial, lock_uuid, total_locked, expiration) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_keys (merchant_priv, merchant_serial) FROM stdin;
-\\x686422ee2a610ca159e191ca80771200f640d067181bf9c5c49443bed4a26e22 1
-\.
-
-
---
--- Data for Name: merchant_order_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_order_locks (product_serial, total_locked, order_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_orders; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_orders (order_serial, merchant_serial, order_id, claim_token, h_post_data, pay_deadline, creation_time, contract_terms) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_refund_proofs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refund_proofs (refund_serial, exchange_sig, signkey_serial) FROM stdin;
-1 \\xb997d8b179aaeeb8ea841020e4dac3234fd4e49cddde59f1f2c2d59cb1266b781840cf0238ae5623b4b7fdeb505df331e703eda278376a241e34a81ec4c58b08 4
-\.
-
-
---
--- Data for Name: merchant_refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refunds (refund_serial, order_serial, rtransaction_id, refund_timestamp, coin_pub, reason, refund_amount_val, refund_amount_frac) FROM stdin;
-1 2 1 1630849833000000 \\xf9ab3653d05c917cdb0936e5d250532a19cbc0dc37ae31c96cee0955dadfa5d4 test refund 6 0
-\.
-
-
---
--- Data for Name: merchant_tip_pickup_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickup_signatures (pickup_serial, coin_offset, blind_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_pickups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickups (pickup_serial, tip_serial, pickup_id, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserve_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserve_keys (reserve_serial, reserve_priv, exchange_url, payto_uri) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserves (reserve_serial, reserve_pub, merchant_serial, creation_time, expiration, merchant_initial_balance_val, merchant_initial_balance_frac, exchange_initial_balance_val, exchange_initial_balance_frac, tips_committed_val, tips_committed_frac, tips_picked_up_val, tips_picked_up_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tips; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tips (tip_serial, reserve_serial, tip_id, justification, next_url, expiration, amount_val, amount_frac, picked_up_val, picked_up_frac, was_picked_up) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_signatures (credit_serial, signkey_serial, wire_fee_val, wire_fee_frac, execution_time, exchange_sig, credit_amount_val, credit_amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_to_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_to_coin (deposit_serial, credit_serial, offset_in_exchange_list, exchange_deposit_value_val, exchange_deposit_value_frac, exchange_deposit_fee_val, exchange_deposit_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfers; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfers (credit_serial, exchange_url, wtid, credit_amount_val, credit_amount_frac, account_serial, verified, confirmed) FROM stdin;
-\.
-
-
---
--- Data for Name: prewire; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.prewire (prewire_uuid, type, finished, buf, failed) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup (recoup_uuid, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", known_coin_id, reserve_out_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup_refresh; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_refresh (recoup_refresh_uuid, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", known_coin_id, rrc_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: refresh_commitments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_commitments (melt_serial_id, rc, old_coin_sig, amount_with_fee_val, amount_with_fee_frac, noreveal_index, old_known_coin_id) FROM stdin;
-1 \\xda47b5c20678cb547477f47193705bbe46e2b39071e9ffb264ab86b4d4ca750672c1e177bb1c52493730f26330714b7608521f525d1afaa87979f47dd8bd1da3 \\x7ca91115d85fd223a92f751778b42a81ba9be213ad10f3b25ed060a7dee1a6290b097b3ea5ec963b199db073201983fdc7d8c9c8d65c3171ca05fc3961726106 4 0 0 1
-2 \\x88e37a582fb7fc30bfeae5692ae399b0e4e10e605ba09c15cde7ccd3b7d533933e8d2252acb73cf92d61311dd42936b51f4a2947fab09397ee4634ef6cbc27b4 \\xc376a42abbf21ac9b76be81472a6ae43588b6b1624ad9748b6c7bd7bad67a5f5f54efcbc88a9ae70d640e6ca4bc2ec9bca07ce2f3a52f7310d67d6362c7ff001 3 0 0 2
-3 \\xceb4ae1956710a33ea9b6b378629d8fc944133f6d70871c45ff01c0ef0b31a71cd9da99fed50405170541994baba02d3ef8f318ca7eb02aa2cef43492db3c2f1 \\x52946ce421c3f9c89e72b78b7f67b59d81e28fc0bdda3521181e4cf083168650299988cbe0e5351ebe8430657a592dd32b97c7d8bee29c1276763ad10f890109 5 98000000 1 2
-4 \\x63b5c28d1375dabe94760e64182058574c776b9ff8d65813e3c5313c66f5814aace2db9d564549930c38210d4f69c1e70258d4f3876767fd9efed67780736b34 \\x15b40295732519a97142a92ca15b2230cbb1ac59c540f280e8c0b3fe9c81f6d97e0ca1f3d8c4623450b90416b16c946889dd0814587fabf75ba20d5744f4a703 1 99000000 1 3
-\.
-
-
---
--- Data for Name: refresh_revealed_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_revealed_coins (freshcoin_index, link_sig, coin_ev, h_coin_ev, ev_sig, rrc_serial, denominations_serial, melt_serial_id) FROM stdin;
-0 \\xe5b57c988534c49cc53899c8867fbaf6b62e59ab8e85073ccaa3f4c22937fc70aba78ffd4d7848e427e31078d11144d2889f0f947fb58981a4cd4a9b095db70f \\x4aa6896ccc5d23d5017533eed8e36686c3d4f7c40e600baf48ee842ad8c896fce5c09ac3ebd77193a7deca99f829bf5d142bfa6d9c6ff1c0b9922c5d19fcba81b55d3904fda7a66ffe84025f7ef66b7c0894b2de92607b1dec99c87cbf89cd4a16c0bcfbfa4d637dbf17c147bd262d3e1a419b31c7eadce6488d13b596e4b5e8 \\x8b24e4b44a0cfccbe2ea866df7e8d544689dabea0e455844b46ed93a62a50ce67835aa5cc3ca712526c015cd22e0575da6d3e43ef5264c7141396499df523ed7 \\x41a163a2f32ddd7e7692269039607fe4c152e525be4c2a749d0afe77a1c5ed6f02affa6c50523cb554419127dc36a41b8f9581ee6e4e49060e7a7573fdb4f104dd9fdaea82128b2744e5de792c5ec5e00cdea3d4927c0f73059ed0d2a8795eb91880e4aa24ea47e72087b5a88144c3e015c6f6faccf422631b352fb0a8f2ca7e 1 352 1
-1 \\x02dbd53bee54bccf9f165be816b1f6edad64c057565dff7263517548d5025b9235d93df6b81161d11f5716662b44f39e27fedf96bb24ecf43232b30d15902f0b \\x337b489a45b1f901b537a9daaccb091f907f90b81e6fd89083e466de69d24e168dacaa3bb66e62048c2ccea09ab8090737b1ebe0661bb5380816eb8baa5c0ca0afe68992241b7dd00ca725fcdfc426a00dfc7b733a04dff4a4c569b16837b6bfbce987c41e292d5fff34ee9cd463f4528159734bcdee5429c02245eb3489b563 \\xd0f200cb1605a5edf01ff06dd0e0d96a2621310eb4a786dc109d0d554e17be384c5a39dc9e7dc9454058a19eafd47cfe0a810283324f5f9860030d767d6518f3 \\x466642165c364d532a811bc344ffb9ba21860a37673ad299d7015fb8f0030432208869e718bdeb7a5f5402d0b588b20b245ec79f0d9858db2fac3e352eb0439bdb49cc58b6e9115651eb85fe92154d17e34e0315d95285b26ce4204b105d7c504431fc39d9d9aba6de08bad4b7b208e84df177b45a151fb817d064c3a8d4c7ba 2 192 1
-2 \\xd6c0b2c7900553377de16f0c909d4cbe05b23b3d57b1ed1d737806c68e1b1b8fa867866f6a9fb1e460f7929ef3fcea6bd1f5ebd6eb2156bb636b273271285e06 \\x572cbf764994902e185382c1d25c0d5e5ee4bf94f24a14fd98643fd4b8ce4ddd7ed705c061d8d585ea10b2976b4e47957b5ca7d3244cea90f22ec2ee2112e8b507249614063154483530f71845b9e27ebbfd4f68291a52241f5b264156127635d4473e747d8fbd31fee47fedb623c7702f455879203ffab189fb38131d2c9f41 \\x5179205393dfb46e848fc69ac84237f00d2d8da087e6e9b9f9fffc5fcbd384d7d980d06b71701e996a0fc64f61215978931d499485504603ac09d5293f299782 \\x508a2cdd2d6c0b974ea52bb74e81c79afc6ccea146d44347a4cfabca6953a2285528b0d831b6f317216114c519d5c7892127a07e34fabfa4077a655329b0fd68f64b6a6fdc4a87019d0c2a114ed7010c53c6052e57550966ad55fe95a4cdf0f9ca36076b1e294f74ce8a2a4ff322af64f78fafb8036ca7f82ed2af72c4f4061e 3 13 1
-3 \\x4160cc92f5398838d1db600721991c003026590c59bac36a63a40da978631aefbe24b27ed179bdee0029e11e97268ee18b6f5d512300d9664eb4c8bb8597b30f \\x3619ee3b8ce0b9dc75db2f738ef10a7bacf1599e25840db569ace697b82b7cf9453d835a24127c37f884dd156eb586c1d70a1935b3a3728331a20ffc249ca4f7a8b66cf536b74ced68ea69d68c1532bb55f78b56f3ce3c5fbb43e3f3cf1de241c44c38f59b578662bbd2bbe1ed0ea6867ec53085f988fad9be641b2b94269665 \\xbb907ca20d519443ce10c9c7b1990ed6dd59f760ae96ff5fb199c65eb1a6ceb1597b598d973b3810e54f2c28fe2e848ad060c676f2b3bf2a777e907d7a6f1c5b \\x6edae85ae34f7085c24e22e5c93a255fe247ab6cbb15f8d4a902b8b58b54c93c8a7307326f4bca71bbd1973a3627091cd2772b12846334a543fc0d0d5ead8d9e150a6ca4f4eaaf0ee9ac43b71a42207ad3149682174443bb27f7988fc9395e435e842ab9efb52771e42a503017932417c007784f805d4b7a866199343c2ff14a 4 13 1
-4 \\x96688111edb73aab1d3f3ec98e59355c5928755a793c8fb9acc74a23abe3d04fc62e8bd6ef1d42bd551e4cddff91cda66b402604ee9038acfc35bdd77495640a \\x41959644d4d0cd809671789a3aeae41f5178ba4a4f07948b2e2e79ba19d6b15ba5c20765c5cc551bfb1f491c794ddd7dcf8028b4c90f24fcd5662d29278f694f9e62206eeb5a3173cac1f7f450809eeec327ccab0838cdbdcbcb821b03ccb2bd51442a7d7e0956be3c2e0284ea1447850f7df8ec343df84c9a5cc047eebdab61 \\x97b41887cec7a26815b95162b454c6a7f58578d69e59f951711b9be5e910231985872ccb314149892aa97e007fce3429ea2d7663d2b96cc650f0cfa9765a0d24 \\x2fa1b875613b49ad0cc342ae09717a053bc762368ffbd7e6207d1bec50bfbf11da0fdba1a57e418018aef41ec1d1250161f8ec3cd9a41c7534339d128b08598c2e2747e67913bb62b64e72a8158bd11bb76e3f872c242736cb322d4fdbaf4b82baee3d727bc0d6fa54a37d1bb7409f9bea86d76d0ce118e026acadd114419134 5 13 1
-5 \\x94ceb3cf89e26be6f1bede67a5d4f7f72e7ae8e6a061b1e0e85cd40e82c6e99f7f3073125964ba5b8fb07d5f7ad39b31d87cefb755f62a6972cdbfca8c2e7a02 \\x863830bdb71aaf7a2f549c7a6ac0510689c3a10340618d14ebe04fac0b6421cb111d389b8c3f31b186662c214d6d4807fe3852d3d59536de17a941670991d4a4dc2e0804f02d2e63e5de09f517581c572a301a827ee6933595a679723445337541df065269961a6a11f6bcd671037e4be9846a9880730e989188cc979ffa80e8 \\xfe7cebf48c7871b33ee465e79e7be276e788a26bc6eda2e5cb8f234e7eb4bebd72ef0892c47a486c7e838f7462d6bb16312c5d77992361a1030878acef5d9679 \\x89c22bfa60e81d13423be1853c2a8743dc259b67eb809b0cc16665bfb1737ac6b58686ddfeb7a16b4d9dd364f5f8387d7e95458794e4e9eb8c03b95ebcaa7afa038055abff127ea23f719e8b89afab2f0023441cc5bb830aae8f022215226d8afedbd2d3887c74e08c6330d5ea1efb3a4485a8f4c12465ffb28028616a58c883 6 13 1
-6 \\x9a101060dcb9d2b9f9252e13def8b23b8d4f41d541939a7d9a0ce95f26149c8556376d68f66fa4e4976308702e5a030011eaba1e35152e2423cdd1b22bd76709 \\x9ba0b2a26edd2adee77514c796711602dda409281d735458f00766c8d07a8e4ec2d7bf5b5f296e25a716ba5b0f6a51404f5b1ea1a8ba4e4e490f79b002970e9ccefb5599493262d3ca51da6b083a73b6bc9ad34b319ffa53db42a8f73a5ede789bab260284893fd40e8caeba6b349175343b9a23bff35a9e4895be305ee1fdb4 \\x86ee7f8100548bf6398ae9a2b30affda254fea8bb428e06bf6ae4d6bfafe7583c650eb325ec8b4a188ecbf911100a18143a9234ade820130a2d981f79647da95 \\x0c42d07874bfb5b85306dc80d2eabb0f07cd8d1080d6582aa8edc2c4dad716f6181f114c7706d241471f1c6d7095ee897ca27d20db630ceb9307a6277ac8f64e89695ab2ebc8681a64eb0ea562506a55f30f7ed005e98763bd331f00b7cc6048f53a6bda2ae07f6e7f0825ab056067cd7e1fcb7771befd0e38b8f8a9370a8d6d 7 13 1
-7 \\x7607dbc220e82a256218d701b80c0c7f3c9af1b588c1ae0f4505a3f9633a3d711985f9c8fe66ccf213b084fe91ede418461c079f7c250d08b3bdb30c697a2700 \\x8db2934b6ff767f8f513e9a206fbb1053aee4fdf65ccd944059792506c5785701ee8a8f8dc69975061d87822d5dbf5082f517eaf5431e2e869d781dabb5f3694e766d3fc92e199a535192bf302cf382364b79fcd9d17d937f13e72cf9a4873001095dd5b58daa6e292a91e3b4121bd846e59c57f0e2a518643ed4451c3b48aed \\xa81a9111366e03ae96937e5f9ac3d20f2baf4fde2405e7928b908ac1f62615297609651d976a8bb4f3554081ab88386ef3fd7aab3f5f3ec9cb428b41ee75ee23 \\x7efc3c7fa80d98154a468f147e23cef302604a69ec9a5cd0bf4545eac70931b1424e5f9989022cf12c2093820e5ad97c226e106dc5379772305e15561084923ded90f0fe5661d88bad443352c0f78f50f2f3eed485e6ebc1d377707eff0c5b473cad06808bf111bf7469cccd4c5c60615de126b3c2710fa1f150b909724013b8 8 13 1
-8 \\xbd5ef7602a580748a23fafdcf450ea473b9067c6550d8f2312d51fb59d610f3ee521e19c29777360d68c75ad6d5f05898dbafc2b99496a8f31b5bf7c30ba380e \\x86d4c49f3e1eaf6c610f2e81b68d09b49459917706da6c683de4d6aee07255ec23c5dbd2bf947c73e43a295246613bd3fd1458cb437c3e1d58f4daaf369180d71e1968e7d0079e36d8983e29532dded4a4895161ddf70882e0abe8c290f2589156b383a8fe1dcfff60b3c38637c7e25ceb1f86f756941e52b208fbd331126234 \\x1d1acbbdabf34077070c9b002a9c1d93c1b986c72e8d5ebd86c06e5732725f00c6962fd037df62e3d41382ce32e22034ab0d22c4f8ed589bf8d4712135be0d2d \\x5f560b81e2cb2ef66dcb8c663d8b349217859a337653ebffea615d157c42ac35a36026f5baf765b805c5a6f8846bc03b1f794dd1b2fdb31bbe6acc5e6dbb0dc633e35fa46bd85a551b0b32346eea0f8c2221a26b23e32bf67652c6643ba330622de6ad29fa5c234675fa47223cf9e7aa742ebfd764ffb58c0d06b180b71d0fc0 9 13 1
-9 \\xc0dd27349d46c161677506adc2f1e049f24dbbcda7cbe44fb853488a405d1d0bc6887becd135dc1707ee8c25bea061c3511314d3704ba872c9bd61c9bb02aa0e \\xbaed0e1edfd1a644d0d429942f002a9d8283d1b37838a47b14def7d4885a374fbdf084f54e3d8bde8664c01d3a930b8cc8d5f9c3c128b32e1d0ec100646c4b6ec1f842f5214c95504d0fc4bb48b5b7c61799ed9abe0bbe4d04f5a067bccdeb118485cd2f7e6c9363376942164e9ba5c6146742f6585a9109436a1dc9fd2a74e4 \\xde578357399bfe35dae2b8fed2971949f9d07876460f27ddfe3799a49b019f5a77ada872bc81700e343e5929a8661a05dcebf0b327e4de393aee39316246f820 \\xb742454cefe9a2f5b02dba840f7a16f91cc0b69cfab513bb3a8a0509f2765e95db106234d0d92135485b4826b0b4c4c48ee03f560fe4d248955495959df716ba6155b2cda42cbe3f4151d38c701b938073cc808cb84c43c40927570d0795a179e3a18f1dc2f53b93bc840eb0ec737f060813270c80144673fd25b1aee0ffa584 10 13 1
-10 \\xe0ba61c0fcc09136809dd621abfd8385cd2940c58132d604160aaab29e2df42ee1bf79fdd777239d7fd16f620ab4037124a89d33ed56f35c42e2d95c7e511d06 \\x1043e2e40acaab79240367d99f8df5778f3b5e8b424cd8d1dff62b784ee9933505438e23db6d7cdd825fbff3658661f341bdf1f6295f41a96a5fe5e227639b775c9e5cd050db391a1639e9a88fc0265e9caad10f6a425f92d531f0bcefe60ad66477d9b7e0bec6181ff836475cbc0d6773ad8765c049fc207014d6f8032360f8 \\xe02c3e03caa6aaab094ba58ec2043bc49ea18e32aac6594db12d49991de69e1a9458593359a483593d932e8976b8c1d2c758113ed551e2627d99f4a55e9cdfaa \\x38ac7459654de6022344746f0eec54dc23d13dcb9602758d01352f83bbb897241b4bced05c01636c40a2d941fef572a1f839141d7a3f4863d285c45f32231fad9d3fd888023041e102b990b798393c91a8028c6eb2ce96463bbb298d914780a4b61c619ce3f8088a17203e4dbc35f8dab767d65d4b612cfd3127e89e6011624f 11 334 1
-11 \\x2bfa1d86f31e681b7298f494561ca423aa147c80749df665d509044a2ef4f9dcfeed7e473d46739aec1649dca61f89a7078bdc8165e4973785e8880e2bb2900a \\xae9a46df0830c3330b8ae241abcfa96e4fba1e15ea8244dbc42e4691c187b83f2a902cba9236d38fbd4f858ac8154b3866fb5c7c2d5a1ce7191c098a2474fad0621659bc9be8b0fd791b7682b479074d079d016c5ced39d9a81b02328a40dcd278ce122ff0c222981fb7295f6dc8a3258d2d6b95b72fce2fea3cec42aefd4d92 \\xfbe4eb1adfb3da09cf3cf88c2ef1bb0b8de9885bde238b7c9b4e038ffdd326a13cedf8d113695ce4229183c8f9b9547da2ca1e386ea379ea888ee8c9f5f03777 \\x3dea638e1f624845e5a3606825849a8e15be0fde876dd5574502b9b3c09ff7be3ae1c23c4425dbfa2588bd944c4c7de9dc77507ab91d1e49079f5a77620c8a1bf8cd6c6cd3d709ea2dd6cdc03dfaa56c8dd162254842d8fedcbcf315647bb99e9c927e612608b2bab06a3d1df77c3609b2d729b59fc696b46f110b5e1a8dfaed 12 334 1
-0 \\x8c07ec7f915212937482c1768c15e11c4ac7594529c8021fbc0eb10379897289fa10709151fd7d2d75b3dc34b96001253d19a7b55726287a4f758e5e32c0ef03 \\x0d4f2b6acc69380b6cc76bacc47bb9d58f0bd71595b29bb42c9240b79804ec022836df40b9c007658b833082df74950e6fdf90ebbf9767ffa89504b9feb4f332e8cebce39190491d04e230b1432c4b1835098dcac6bd090040f45257ec0a9573da4970e469b109cdcc5fc28b78205a99c649578fc10edccb740bbc6d9b26c689 \\x3fb670a8059e8413c0d1a66193bc9df570227f3e9267e418ee6392908917720c16acd05dcc998f6821212345ccc498da2923a1db4dd88a95945aa00ccdaff7ba \\x420de4687f939f2bf6685f1525f5eb824e69e1d09a6e2f42f723cff45e3f5ee61549d33fc00cd49aba730248d4ba015d9be6e59d4663a43bebcedca0760375b1841103159bbb3110e6bd77fc07faff20b520ebf650f6e6122f99db68ae270fb7c50ff50a0d23b89f5cd291c01ddee70a4ccfe9e5ec3f3d9e7b77786c8220f564 13 352 2
-1 \\x8ac8bce6c1aa2acc7f750e5181a9301d32f5f50e207750829df88e22e5113b7b6d316eb8f9e8e7cb98329bac6b245f80af2ac813445f4af7fe85a639bf33130a \\xbba4b027a6909fd9db35697b5e204ca2dc443ae49e8a9ff6202d5bf342e442a590955836cae17867972dc6f3cbba7f61ce052181f9ea14ce72d65b0830eaaf18d479807e0e0af9e2fb2b8e8ae763ccbd34663c797767c1869e60135c5f5b44e2575ce77e725ace12bb9e4d139279a33901658677d3a6bdc3e55aa0504cdc6573 \\xd38c457e91a35400a2ac3dbbdcd4f0b4cc5f5aa6df820f51dcdf8027dbbf6e83e2196bc4fb54887807e03cf53ba6972ceaa8763ab12e51f23734fadfb0fdb654 \\x55a0ab7897ea0b8e5b06e48ef7aab329844e6d2fcce51afebcab59738007646638852088ff146f132b60edb23160245e53fd919f25a66d812ddad0831f02140eb7c89023ce3ca32775c7adc11f82bb3290b1ac45cf72f8f424a232f8e583a6e9e33d66948deab908b2a7476e14c75827d384be1bc612b4492b2445c8fbd0eedf 14 13 2
-2 \\x959ae3a6c94c0081a0037d6aa4a683350ad0e1f8702510d1a7cf72f1b8de6c4fe85c0d996a5765356399ee1fb012a57791e9d25620fc4eee6f6895f2fe931d0c \\x0ed9ed62347068afd42cf21029f70c04541b6d2735fcc270e77437b0d602e173edf087312e46a4a2223bee9e8eb8cc1a52fccfd4f25f3518cb819085ec39037e91480c20861300c47f6014b15b871f3bec6fb82660962140d8f28d035f18146faa5ca60e5b9b52d262381672aef8b48e0191394324922075599d81d7160aa479 \\x22d03e2c2a07ff27b20e429a2c1bac189139486b84e0ca0b1dadb79e5fa90747676f7e3a70a8325ecaf32f68cda117e39c6808989e1bc97641b1681d14eb9b73 \\x4a93baab33be99ef7bc907ac1d122e9ae162f6bf68e0913c58f5fe4ac90a932b9fe20a4d6b673d70c446cc985d4a657144964e148d851ce58a58f3b2c13831b6381c5d896dc3fe535f60c0f4752068a15330d4451d8f0db64dc1e81912ff0ede8d27d7c58f35356cab89e1a15a4179706ed3c3bd72517541e5cbc08a20f836d3 15 13 2
-3 \\x68166bbf0c302485377bc6d5fbf23221d5809bdbcbb2083e91bb3612d0d2286b3ca9b5b9ab60d419d2a99544a0a9fd6ef8c1fb687fa67068dbbe231438d08a00 \\x2dc68aed9bf9579954fd115f334672340dc587cdf4c7452c7098cbe5e7072216a4045281d904507adfeda3ce781df001ea88da830bf5c306af9990f52b635597cdab5a100edc85427bda0022442038b3b06721c46df3512ac9dbecb21d053d25abe7a63897adbc794cf3e242aa9b7f47761a8243b44685538cad983a0a4a2d1d \\x2d6be5e2f3ca1b2ab4540ec655ac29479a8ec39efa62d848d99c9958f427eb286fff2079c434a7ff9e6f4f71500c5a0de125ab13510bac23e73bbaf029818e45 \\x357835d8e69a0223de552c77c2943909834975967daf8942993c6b4bda7a06cb48af4122f590fed9724dfb20dd8fa2e3cde93b950f5a5911a8cfa5e49000103594b1254dd85707795ebbfffef9c13caaad22aebc347b1d98937f7005997c5f1c69d32e45ae7e16c76eb828a91174d44ee4b9fc61071aca818a9ed3b46577824d 16 13 2
-4 \\xf28aac60db4679e863902763737f530f936d96891546c0bd79551e117d41829149b12d2433001414a949637d994f2dd00db72dc73c828c9f8f7bfda5ab1f3b06 \\xb9f74079c61f9be4fc088e29e231b39a4cf5e53a81693a6eb754b975f23c03b4739c558315fc5c9b14a4f20faf1f3ca6dfcafe6f51ac79d8f8246171d93a76347a1dc3b909c67764179ca72c00f15f07ec3f579d3958ca86ffcfca3abd0346ddea96aec7eb8badfa830b48ede2a0f970edd67df88601a1227d87e4b36dbecd46 \\x13c4d1e83826a0c2021b8776200e421a0fa2de9a3e16e06e03b159de86dfaa17d557a0485c2e07791a36b30114beade7fa03dafe9928e3500e081ce0c4e8bcc4 \\x50b8fe6ef88e5c2c8f6ce611130ea3d12ed5db3d00b5b733d2fdb85bdade42dea6f77eb98a3bce28ab18b0a5c0fe2264d3eeda27fbe3ba208306882e91a297e47aca72bd9e91eff1e15392b481cb5e4df17156e4a396af8c1545b7e71da3c707ab1b294933d6d43514feab6a419e925b71017bfe6cc08d76abe27572d06a076a 17 13 2
-5 \\x606f9edd546e7d19f0600ab113c47e3cc3e255c5e7908fd9233188e91d5a2b6989a6b1cb0cac94d207ca0b051bebc928d8468470391a0484235d96f03f00ad00 \\x09503f4d99510717d4b777d8ff38bb86ff2789eda87b13d1d2c6c7b4198e78420140e251a578af8b06983659e8e86a43d342c28957ccc5df68b7b15f806521850ea15fe24bf2a63f4a2c9a4be7720ff83604ee8e9b85156f0057628e874ec72ff0457607470e882e974f2de47dcf424ffdb0ddfecdeb98ede537e07fdc664bd1 \\x2ec4662e7aef8b7c9792938330ea17d657c1f785be29490b90f1ff14dd9d93a184ef82ecf9c0c7734fbf806055d9822b2bcb00a596a23cc9db6fc0cac65ee801 \\xbfffad899ba5b0feeb257566bccb0a7735de3bb572e57583b41dec333a1b64b6d5852b1e3e1d9415c569328fafbf07553d2335f9906f509ef2de62e728ccd440b0fc682ec3aab5bb4dfeb58bc69cf876c51eb68a6d715c55e22cfd466a456da22521dcac2d1187304146b08f550b78a543cdd2997976034c34a06fd26c3f4ded 18 13 2
-6 \\x9970343d047d38150670ccc22c4fd1be0579ffa9860579a0e5117261cf9542d314c376fa629f27d53826b8465a804c6970ed35d92f6e10749ad853cee1ede204 \\x0f4bb3487af0686dc80db1063909b7b3e15c9cc926dd075cc2b81e4b02d0fa8df3ec9fa076d084a1a924c6cc282d7a730b83b4b33afd776e59c79b6f9cb2231ea108753e28a908dc852c32cedeeb21e5188f4682c9fff4db535885d704fd277ce732501a1ac885b11c043af9f86bb3694522234fb0a4f21ce8d4ea5ff19c9379 \\x0e5d970159068b74dc74e607b2c202229f9b4ceef36f0e9693f70d63836f9674d3313eb22cac058de1556eaa5259d96626e1f43f9f415aff060f12988ee5ce7d \\x9da321f2f83934a4d9eb3f860b49bde435eaa51bc248d36589c4fb4f125bc015128ac61cbb42fdfe2730194a93b42f4c025c6137c00c67fbeb9feb886eddc3fb5c4744d4e39cb10cc47136c1c8a8e1d67f755c251b0dc3aba7dd261eb5e49d141fae6618bce9cf221f7ed429b6a94651e0b4ebe4f4f632f214438fa9a7afaab9 19 13 2
-7 \\x90e06592cc6ab804c7e0c842995fcf1b916cd602aee05c77f4b8e9ef24a8902f271ca39b5ae75389a3464c1431a3a0f5a182df126117bf3117bc31bd8149060f \\x3d0204e14c0f184bb9eb6a3d6b8a530dc8de3dbce5318ab74f9d993a52e0b71d717fb66297a1b5b3553c15ce0bcbebd4560bd0a5574640dd46b0d35f9c4d0af5971294d4f0c3dbfc2fe57e583abb2b16622b5f6de8b524cf37a24f6c9e71c31ec3993ab7e7f4b182b8f935c288de0e9db0a992cf3e9d065043e01b722375b565 \\xe3f6ba5251f9e90607c4983f1d02b8ad737cdb25a236385d46b615ec65919b4063310d0fea6baa92ffe695068b56e659cae18e7982c7c2eaf721a40ab8ae5411 \\x64663a78bcf4f90de918553b2c265174849aaece285488f7bb051da20c55669eeb2a7bb26cbd2279e665fc6d02a51cfaa33e1b13249cd7ca81b8a6a640181b3b8b9187fac7fe660e0c376ac00a50aec653a879e9a5026c0d69dcf13f320a25638130036f046f004b5586ad86f9d0b5294749ff2832ffa42b5ae1afc443330560 20 13 2
-8 \\xd1dd5f69a521e43fe0965a1fbf0327f205124aca036ad1fdcfa5a91a649427c4c54c8a84b6d1636f4a51afc22875fe13a9fc12741b7d9693bac87d637faa5d0d \\x7eabb949f1d21dfd9931ceccf72e2f1134646e97c2fac2faeeffd27008599e05bb4d1dfb41cda5b941e2552e0ad13c7a27d734a95021227a4e40868defbe1888741ac6f3b0428fc2dd619403bf767100f4c3c5cf4b76984132f319f1606b641d3fad8925c9486e8e10b59e2c04694c3ed00cf651be817e70e4860ebbc6d44f02 \\x529c1e0fa7fa07392863e6a3e0868afb6a4d8fb1e9319ad6a03dba85bcbceca7cf2ac3fdb7f33d6b6cecba16630d96cff212db611fb99d4a6d49f7261179bb3e \\xa8bdd6364c52a5d78a995fde184ad5e346eb7273e494c90b3ca77c2c0114f1a664227ed2df9f4e4634608d0b3983acb18db729ce0532df5962cebb0d3a85d05e9f83ae780266089cccd79ec565eb4d6d525c136543df82e632deb72d260da254f8a2c1ffcb16e54933eb4401e92d55a88eb1868941b7792a71dc866ae3bf8d06 21 13 2
-9 \\xaf47a7b8a14f626275e5ce0a11cbbeaa03dda4a41e114c53e17e116d6502f9b5b5531f5220b329b0124bcc0dd5382afae332ee2ae247c71c80da6e699ab31306 \\x5d2c29840e6b848456378e711298ae6c6e516d4868a168ef0449a8093b726093bc03a4f61019d18d1dce7889a44f3833ccc35bfdc7ab2f8a7c1e9c49e0bbc4f4258c8dd5ff53c94e1092c7b9d11931f7b324fccdfd75df27b89de99c7451048c3c9e37c5a695042c4c0d4982c4b5a14aaa2fe50dfe1ca57f27436b6dc8e6dd4b \\x75271384fb34482a438d50f99220502ed19bca78e9e3a8a9f7be8d49332ce6b8853380a9d6e9fe74f1429438301b2186c32efc8fa53d967940d9bb27e53b8eb8 \\x9655aa340bcbbcc011b95ddb33c5bef92fecb6a9fa4203ba79429ac6a1ffbdab835a3744d0ecd419e9c81b22ed43d9f9f54960ae9051c0f1df54ca639bdf79a67919327d9f3e08283049e908d9138fea4f732eb16622e38ee3457c7c1d596e2972ad41ae0fdccad25c9162230f706bc80330effc7df75213bde484231ab5eef4 22 334 2
-10 \\xf48a8c7983180638f87ef68e42845b898b0a16dfa254dba62d5b60aaa644b51dcfb423a370d8f611ca7e45b831a2c818685538b8f1bddbfaed3c7cc690fcc80a \\xae3f1752239bace4dad866fb49dde93f0be44d2646e614ad2da9445fb8749014122b67acb0290929e17d554fdf6935826e5f5f0359c2b27a57e59b86923d2cd17a47fb3e133c4c6e3c7c9572d041cd16fac6e351065f2a672a4b3fe9077303bef3b79fc489540a581075d65dcd0e05e2b75f3bc5c66a941624338236c5e42a36 \\x5aefe9b16f6d6159ecf8debb42425ca0ec17f091606696ea99f146974908b0018f225f528735f3edcb63e448fa46cc5933600d63221a5a92dc1c123e36a9f06e \\x0f0114ae6f90e38a8c0ce36a97e9cbb1d907d80b9f67a10b942c7036a7d95ca31cab0653f7ef2aab0390c22c327c5918e3cc5fa58f3d3a539def76dec1496acb837f0d73a07f86c2b1e889bc6e939a7fe6e3fc5e37eb570102449bea37bf9d2efd5b71fa85292417314abd3c38831a5b3f89f77bdf00b87ac99a87b4a60a2666 23 334 2
-11 \\x3f85c6642e55de5d66d6f63e2f87daaea37ecb01603f0a87a517706300431f7ddf1b66f8610ef8575d98e7d4395795e88ddd4de86d081aeec92368547d971905 \\x70b89d99dbe9fdf5aa9a2ee8a5caf6c9d6cf52c326c0b1684effba2549880772369025a0a28415699d641d4394d4c063834f28bf19d7ea0439d37a048972b30e1168cc4cfb42d387aa5bd220dab6eaf5130f1679f3a6adb101ae5dbd9cbba82421bf6347271274c2b57ae4750af7eeb95709a5013422f2679132919b620fd473 \\xdc28616e645f81412f4618f48b1e0ed4a74bd1630554a9e8f85133f29444c4248be1b7bba9651f94f2675654eda4df9679f7727514dc9d190a0d8eccb8b05d7c \\x6ba07bf76277a1c57b41b57938791f12be221f3535031cc6b54dc6b477ec48b441c10066b2d8995bcd8ddccfdaa6e7202071cd6e95bfbbadb66303f264d4d72217a80f87168ff51ac1f87d26b53ee735a6ff744e563a7fa7603958227849a6fde706ef156c23f0b03121fb27b6d194e431432024b4c998057e766a5788f05662 24 334 2
-0 \\xbc06f0a246c82bc939746e266de5e14904ad5a6b0e43c38feff2e642b667982070450a3f7c4718100aa8a9c5ba3b895acfd0c118470fc3372d89956ac3c6030f \\xa95ed58ec9ba1f4c8d50f9f399b0dc2b1f1d7c0ef3676a02bd02ae131a934725aebe06a6d920f7a2807df7996ad1dccdd507967be39ef7f1150304b1650170a88c458b0cb5d46c6b0a7e86bb3dd6a9edb72e7eff5239c7b7524210c1f15a7ad552af2a319a447e1facfe993bfaff637b0b5c63bb1134acfdd75dd914883ea82c \\x8887ebb07fd3757c0ba205f6b6cf6da888c91b4109acbb77438eaefa8cce811efc3226970a89eff8121af65a01247d83b2b40b4a2188182b79736497fd88c790 \\x84888d274b506adfcfa69128147e89add03988adc1defeaba71b38eec75bca2b75629aacd0f9d8d6f7fb28992b66fa0b0a75bffaccf5dca00e9a02914ff725f2c0f41323a37176c57dd2c5d092e5c64dda6e16fcc18e3e9dbef86cee51d04ac19aea8e7248317fc0c0abc0199364c069ec777c048f20bb5a18a90b8204e200c2 25 267 3
-1 \\x088e799d5f57b50fa27b8267ad08ed28076b9589b5687ee28f4c65551bf304af007734dcea907a2f392c9f564a2b19e251f719809116b197d91e9d57364cf40a \\x6227c61c3466d4241236febb6cf4ed30ff387298793e71117e7f372aa9a3825d2e16e448d9cc1b7979038b152d0a72a4ba89d527d9d73ecba9da0bd6e09ec4be97e8bb698de926dc0cfca99ed7ef646d2491d2c9d5af34eb353ca8c0b7880ac18ead9495a1eab5c50280c5b418df9275b516aaa1427b6ba3fb22d47440860b6d \\xc93c3b12e82158b30a96385558f354bc9b44ff862da2bd133f2bf51bd23451a0b9d813edfafc8a870ecdcbe439998e98eb4e228f91a442e79b95222008ff2eef \\x6417f02a13b963a570c7fbcedd3839e10e2b89a0afec54b7978deea88c7d0859f11e91c9d28ec3bef4c406e2e8999323b19035dc94671818b9fe2ca8ff7b7e9cb2b50001dadfa1bf8af1126e87933eded8a7e47494468cc7a059729b2b56a704522091690b331a928e6717cd4cdad0f1078490876afd50bec757852861408462 26 13 3
-2 \\xd87257bd8e197e38b2e35cc2c6e455c85a44445e5d218161f47c379dd0082525afe6b476f9c0e5e1d42d30048fad87d8e9711bffc6a55b42fdb4aa3b9d6e3f00 \\x0b601122053d4d32b5a7ea65f570a5c7610fa686acb0b7407fa0cac083d203bb44a647ec82eeed7194d07dac85428b457915b10b554480190b2670a3872987948dfaa11cdf4d0037febe8fb3ca83a9c954918492dbc4528ad3ee16d824cbe176a676700cb2c17d52203b1b8856d1152ec040b88bb0dc72f2b5766f08a2be16ac \\x7c7563c512ab2bd790237b4deada4d9ad303036e2dffe3b6b035ef702bd272767b2a2faff68f3771548208e52cc4f817a821e1e33c21396b04a001d31b35c3fa \\x95cfe58fa8e28e95c531bec18d5355382bf41d61d04c3a983c6afffe67600d599829d56e228bed2e3a4922ed3599aaebd7aaaa244397d0f435a70bbb4966342b93c408821f07cd874ffe1d1cf5f2608d43ea72fff16574e91516627d0c898c8ba3d330c2221e23b5f32193f53658a6de087f599bbaa008fe65f3e54f4da2ceb8 27 13 3
-3 \\x568a980179613dae959deb3f8e947b37cff37edd4e20cd0fb3d05efbaf434a407a6d90870f1fba8a7bc9f833ba8fed1123f6d49a9616137ee999f4a5c1145d07 \\x32ce7eafeadfb1d23f19447a6eb41226d2f6e4356c0943f6334e4b397ee12a6e292e5c3c212dbb8454f03faa07d304004ea65ad7159047edb1208b3303620dc668781c7a1ba9093d54ae3b02bf28b21b751d15a6c1729bf9f681a111fdd5550319cf46320a27c7a844179ec02bd30505a984f320c0a790ed927b194e657f5416 \\xdd2906c50a64d26b5f867aa09d240b22272b571df849f1a9c2344c39c0ad56e953f9627cd8a4c624da586fd3e7f1dccffe69393af5be9c322c306dcc0d19b842 \\xa87fb8f523ccfeb4ac43097c3c110c068588156fdfcfda753fef878c30d5b6858280232d128b1e8d7d79a6e6dee08f6b4136bcd42b9317a35b62bdb0a8f6bbe6c06af9858b519030af9a72a3d0fbc20e2a31dded83cc9658d07073bb0b1c2da950f6c57381692e3def0e9f0c347b87802c5d460347bca37add19c1f67d583a00 28 13 3
-4 \\xe02ff15fe014c3bf96a1273536bff88a21c79b21781ff91f04c0b42f9183339b904ca8dd97d67666ddba6341ec0bf390d137256da9f2b76ca1d1a84d24e6e60d \\x1833549ca7102da29807e208e690539a6aef7d401de9f9d7198f2157937f779189cc4e4b57592dc17af9cffc605662a85f4e1738f733b0d4c19046e0a4e77b32238e9d47b03ed76f537c53fe26845f1af9afa49c29e2be7be43940616cc52152a914909cdd468c587fa95536a6cda40551a210ff52dca5a62765b2ba42d96d7a \\x0a85994676becccc7cebb22620c88dbec25f69d5c90a293cc19b9db4ddf8a2b6af7e58c19cc978aea4e0ce0e7b8bf57bcc92d09c83f4ec851d534b921e139730 \\x01e7d7a471cdc2ff74db7c69b02b9a7a5e4d7ddaa3e08a63a3e78e8026851a190b50e08f80389526c6544af40ead9956d7351f967969239fff4c3d8611a803667759a431b0e0f08d68cb2156ec9f998142aa296e822f86c54f2d9a6fb7d7773915f0529fe8613bec0db6b573a524642bdd420eb5f272b850f2a8e900a4276a4e 29 13 3
-5 \\xd86624ebbcc9327a36836f8fd3964ba759b42b89b145e30d23a7ec76207661022a7fda51f6d8f75247ba26cbb49ff31ca55525777370bb1a0f94702a7c66490f \\x1dc6a937b8c3c4d085a3421bf1c73117c60361b3bca783147a55baa0402de6ea75bad04369ac7c56cdcde567c14056d3a1f44db34dfc9b1b2577a36689b91b5b793dc1159b3866698c5a3be61d5daf7ec1703aeed34bd768e6b8775793e24bba36464fb1f1500f2bb3d4db857aea0e5182450191e296e9b6bc19b8f28bdec7c4 \\x6851f9c0b1c01dda6c06def306169bd05bfea168bec242e731b425c466a2b0736bd347de27e1eff2e6a59915afdd469ea08c19f1b62b040d19e2de8f9010c899 \\x34bec45e5d48b9b60cea4262e87e1752f3a229627701e808a9dbc403a93dce03fcc8eb92dfc9817fac1d76151f1b3b5bfc16310f4e69151d5ded1c4b73b48a279eafb50cab08c8e03eee2731bb22aa453329f0b11411e14df82ed86a3d7b2c29002df60665c75584e5cda32ab8a815f4ae7f115ea7c061c00c82b480556b8c7c 30 13 3
-6 \\x0aa3338e1d7d6b44b8da8107de465e4d204e746eaf7b5ab7ba528f673ee375e1aa6c26c049b281ca0fcd30b0934646b496a334a0e1c97113d4b5e784ffe2e605 \\xa1061c89d1afe425d11014425560c44363225f6a30a14a2297f330e12717a15bd29f203c76770b0cd9a9e1ac3bd7b886d7b8aff674b63ffd80f7dd712cacd1f3fc904784a80fb8f84ffa7e454b5dfc62cde28b4094f6ae208830b3502e6e0b80b0b49d046d7afcf02da338ec6f78ad36cd72ee07aa0d21f6f13d3df5c51db3d8 \\x51269e7a39918466798810397c28124edf5265264b3bbb3e137aaa65719ffeaf5cf4293ca9ff6a6b1b8f157d9fac3f949e2096496b34906edc6b498be596fb77 \\x4866280cb3d87ae26b195ce200b872a8db5e52b408785abc7735577ffef3c3469f1c7b9d2580c90a70b17e8237608bbbdea713d2fc81a4505e3d152401370b3ec2a202134984f7b296054140ca961ece9688c0efb6b2c3232ae1e67c57e972f4d199fbfec9b8a911efb6399eea3b16153aa389e039ff4f65a53d2264f52c8b37 31 13 3
-7 \\xc9f6848c2bfe5fe2773c6d417dc4f045fb22bf43d31c21cd887cdcd4bf6a65ec56a539b53d28ea70105a14262334b6c260e6864c55f53ccea316f95dfa967a06 \\x0e52f03c96888aac100de9abb0cd539f4873a81ad6b8a65e615437825f29be8467e2bbecb44afff1a7ed973e73b01f86f61e3db66c6bfbf56aa30a3d53d9789f9178bba75e84ef529614fbcb81bb4eadea9d00211afd5e01e5ccdca337a41dd0f2620a6d975bebc57ecf25194da296f7790ff7abd4a27a070315d8063f7fa6da \\xefaa13eb753422d6303a3db867eea80428ae1fe28f615dfc07bf1996277511d87a1efe99e7381a137e6f639192cfdcaca2fa6d28d77af39cf95d503870ae01cf \\x5b062968aec1100da68d440b761f68feae1adb5feebb078c304ad01230c5fcf4561f0b897cd739b9461b65e6f00970958176928858b569316944aa7db999c61b886acef54a0fc66a06376c3061dd80b1f777784874d31b2476cc4de977caaa8596d1e4677908840e92587480a533a1222527968ebb7ac9ef49f45aad615346b8 32 13 3
-8 \\xf9b8108e26a6653e42305c89661505453dcb0639612404b0c5a3c09b4afa169ad7553a091a404206513cac7f6b9831ccd6824a257b516089c31321bcf3898002 \\x44e4c187b9b54de38850c7427945c5ede9e292af239dcc586c76897f3d9dcbee154d13eab1a14204d08c9ea6686a6fe25217e56b6c4086f8df20fa87a482b326aceb71b60329344cbe4514e52256ee2e4d1c108e9b29d458e9fc7464a95ff1366334e7d1e5fe38426a0b64516f7d096391837b379c90b883f82f7bb2058e1101 \\xcd35e255e3df6a53c8a94d1c24563f7f46728a116da76ab28f0c5f9c86b4ca7d7d51f9b77ca1a3d08373a80033bde03351d5d2799892c5f08e0790a3f7a3e675 \\xc34ec692b120afe5f3582217fac65d5974d0f184536db1cee4ca11e1e2df18eb8a98bcce2601a3d57b1d0aea8944ed0eedadf2a8cfb7aa49973e5cfc0667d78df751b78fe1c5604b0f64c80676c6fe7e24dfcea329762d52999aed8386537e00149a79f4d7261d0676fb6e5f68b933a58f20c86b132c4a6b424b46141ef1a9cd 33 13 3
-9 \\x8172cb62f58a05893bd56c4c09d9b3eda98a2ff49c83e80bedef723d9d00091e8cb43cc8ca4237ed94648f714248cf42fd35becaee0dbde0bba945e2083f320c \\x71a957a9baa2729d4cd420d28d0531228f5e51804d8544730bc09dda0390d490c94143ab50b058ed5f6dbf01e373065e4c3755e965ec1b809f5bb1d4188c12261dcf70a083bdc46304a39c9fd323847ac93bc9c6cc25c2f85801ede0c1517536b8fbfcf3490d1015c0a4300decd77cfef5822bb7fee313bd2765ce13de797814 \\xe1815073d0c0507fe243493982f5e0f366c97183a0cacb11f967672785a6d046c1480748de6aad2d6dbdc7bec756436f9d876c2fba44c52030e8dd39d3af9bd6 \\x61d4cef52b507442a5268d66f49f3a87648484bcdb347bf41b53de234980ce5f8b6bc953acd5e12a30adda8af8b549a47497f597bb0f719bb8287d753d10fb3d4bb4b1df7c7f5e3ac0718b1c4434fa13c4d467e649593d81c66e24b1383ebc6d8269437987031812f0883c75df7c8ad15225d7f5c1a9628647de14a9ff272779 34 334 3
-10 \\x6b0efd307a40a17facd56a3d0178bb960733db23749f96bdc7f70bd8b0aac6b6a572547a43c9b6a3e9c5453e9f3a117167049cf0b5bb58279c866d420ced3600 \\x45ebfe302e0f489074bbc645d4b54d14b8f84867dcb4c160c9e83c4c6e810cf69894d8c4d904577963e16b2031b8806083f5c40a7153e33ad3ebc5b10d5bda1d04b109fbc62d6614dacec693fcc5b4bfbce3afabbbf841e2db806a7bf1066abe1514e7d81d40a97f01c278dd484e92e397f8f4d757edeca9c53c21f521b0c56d \\xc33aeb0f865b8808bf8e7b053850fb1a9f18035c27b7a6665124f3c6b2c390f8a569882ec7db99626afb78955a2b8484618b0e8e776c38ef996882eb40e5642f \\x7965c18a2f157af4fcf5da72190a84e174954fb12a85605e1baf5270313c1f4a8616cc3ac98fb76fb48fbc85f8edd1f69df19ddf295d5a74c644e4b838ee1ad21010dace252129f23928e8af9ffce8b4b909e8e3af35e6983229fed67cf363164600e4e9685d3f602fcf03902477a85b9f5124a3d8f56ac3ef2d304e53cf180a 35 334 3
-11 \\xce79338c4e1c389e2e51c550aa075fd70e25e17ccab4ed3deee8c0bf4cf09b516e6841f4063e48ff934456afb05b1cd13fcf77d2b01f4b5f13d1293663935507 \\x79949db61513c413976090f37562555c8a4248fe5c3d4791909cf57c522f1da1076f277fa4d12cfae5e39796dc02f83d854dfb6e69a641126439beadcfcc71de1f51f1f31960900514f4d7231da5a0243d0585b5fd9b6710d1306c925c96a267d00595f553a694ea69006a0d50469260db7954aeeedee23255645e1b34ff7e22 \\x9255c274d81d48d8118c62b799017023f939e176722d9bec8dcfbba7db6df5f0057d3eb461b38bab3af15377b285e4460118d24be034473326e51139852a6ab9 \\x2f1de358c53b12491d7e29643f45945ff414c9e9a91f005eb93d97a877632cd567e94bc3d01269419a5ba22771c5dd11b747d33ee61cdcbe733678077237a2b32fe1f1b5f90e33e9f242455a924de4300d5b06a22ef0bb5edfbf2698147f081f84c87a4a06c349fd80f20e97641c98a5519d94ebc0879a068e3100a2c91688d9 36 334 3
-0 \\x9ea832cec3c2061c16f3a40f07dbbc7f1bc41f2f69433353309cc778b5e93e8fdba2362c20a9fa2bad5b6c8a9c05080dfba7e078be5d1217c99810adf5907e09 \\x9e0f1a68a5f230eba62021aaa7f57c7e445365075b03b67f67730bdcbc263f68080aed8ebf29cdcb4042878503942c59b78e50ca9a128f4748bb74696d4ab6bf2ccd7043f1b29e341cb9ec5bc3c71772a2331a722a70561c172b017dbec5f8b13eae1f616c00e17b9b2c62e0d0416884133556d1a3c8dce6f0a1475b4ee0ad7d \\x2179984e0bc039d92243683044b8711859b5793973e1ab466e9641e1a06766185432f3122e80c2f268deeb7fcc1a27cd734a10ce6f6dee459f5af3838f4b194c \\xa7f2bb163422986c16bb6b0a49698dfae5ac5ea424187003f241dcdcd3ced7d7246b5e02555b9688b384315a54b51a67411e8237780ad78e6f2c6ac6c237ba54f2d227fd3ed76ec24f208f45871cec5b3e29aef1cbce5f7a4b413de113cfcc7f11b9b79b86dc03f104f27bcec9b093fe3920fcf22d7664a589a3b8ae3a63a2bd 37 192 4
-1 \\x28dc20bf68647294e71456dbdbbfea50d057dc2310e4c71d89c74d32884f3c74a65aa6f2ba8a3c717283ed7d57580d8b89da9ea0cfa2eaf366b4d74d384eb80b \\x8560d6e5f82ddc8b0c6516aebb2752350d2a79e822edc8ec5ae27906e3521f12d8eb12dd745739d216af1f1a6cae72c9e106f380a47de9b4b7d833a97b347618f2bd7129b6143308b8adee5d34c4669caf6f4a3edf0afe85a3db6de9ea0518be1a3402875ed036a57496318376bec39dc231d8978692d9a35e7e7cdafd913172 \\x1b9034e3f739955f7b0ef5d76808c9f66c4a70b5c124822356bba736718ac40cb749a2041ed9dc5358bed596f4a53526d8a132bb1ff9b43605f8f9c5c694d3e2 \\x63d425b1283906317605d2a0408f87a7d7fd846953df282520e3cc210a8aba488a8e3c5b426758cc0810d6c5d5820d9c6ffbf4dc9c1d5b14fd7ed577ee0eb0e50d1c86b2b083813828da0f4334c26df097cddcf329bf1e587351371c652bf62386344cb5579407c7534c7d4fe69b8f4b97df9d464085522ffbf3c06bd9d5da6d 38 13 4
-2 \\x2558a92183f03a4cba530742ec0d372289257ba019af837ce86fef6f005b9b228241af62c62e741fd9c827541ba895747ae42e47ff79eae1c70f21a2833be208 \\x76fe4b6f8ca00ea378696603fc23642abeb70d5b54bb52523d9553a5e98037621b9f5fcf5a91a3839500e8fee5072c1d5beda91216967baed3a2c29662fdfcb7525591b973834c9cdb1ecd4c4ff8304b3855a8058c0c247ba0618fabb6af475a592e1512b87c66b3c955040ff13f02ed2a68daa1f2494dfefef3b54bcfae4c89 \\xcccac4679eb58e6d251d917640771fb2b8d05c8ed4e0c76520a616da43301bdc365f4440bed440b51474633a03450cc7db7231bc16ee79c9457468f885a826e7 \\xb32b8761c9d33fb75388388141513cff9780a6c36c3260c4e69dcccf60297f891246cbe5ecabb3b25eff1237a52a439a70f2e0deba7dd44a169513e589b11ff5ea6fa0914df2955a9e743ccdedcffaf0828e9055e67f64484ddc7ef84abbf1361e9371ddeab4c1e1effff8f4b807536350ff47d18cade9500f81b6e6b3e03d5c 39 13 4
-3 \\x9a66a58b0d055f915a71de222a1b4b073939d79ff4c60b9985e708d5e60185a0a20f243906d0dd6863486527489328ad81d13bfe9a24cdd355cb04870421df08 \\x1c6c28cf47185459e6d8a1816044a46eb90b3693daffb654392ea986173a63baef2aa18e4264a95e6d4032ae0c338a135fb09b884bb1354e0da079d002dadfbe99b7b38ffa0b8ce2626b0dabbac12069969a1f7b57675b31af50057bcf4ea981c234a2dd69588ba382d7a88e9746122b2e3789cd96fbb2c9be6adc02511ed7fc \\x17208ac4c5880da0020a521ee6d01edba438ddfd6a9dd9382d761219790e562d22bd82cbc1a86952ce69ff94ddd93d8585411ae74b555ef37db095fdcf5a07a5 \\x194278754133c5b24ff729b864bf0269d7a2a7f42b5d37eee3157bf06b94d23de461988aa0bb7b9c0c9af1891e3bcdb03370490d7709df433c88a512bd06ae799cb65a1d78a9c20524f14ee4a3674eb7b6261c10b56358f9b0c6a86514c1ee9b50823fa57166f540221f7ce6631d4772cea23b32bc71cbb6b22c97fefacccd50 40 13 4
-4 \\xbdb0752334bf23d6c0dd318762d746897369429005e14a5ea60dc1357bb46f9c32c75d747269fa9835426a7d0cf3ae38e0e70a83ea222aa978cc88f71c57a906 \\x3f158d8a4f4bcc5b2597bbae99abf4cac21ae8996feb4336c723f66001731f50094b41882ad7d8d91c12d37a30acaf99209c1dd7b8488b33d95a1fbedc7ebb67e87ffa7087985b3fc2083bdcf9d7f77667a77c1ca7c5f80ff0362a6d7ed55b7f3ae6377219423d3a14efacca7d5a453975e876b3cbee242ab09c426fcd1ab875 \\xb8b4bc8e46bbbd069fc2793f2fd235c3202c657c1be79f4b245179768091e67ac11e3c32668e39c182c03d47fe5f720644e7da75bb96d133273d7195e8edf47e \\x9ffbd8865ff74a2e60edd4e1fe67630434b59607be18a18bf2660630a931c3facd51cc3fd0a46eab1054208070da5a8124ca1e652ef65391519896e219f0a6abc58fa0d9b490b3869b80e2622db2b1693808aeb8bb9c9f047f89b56843e4ff71e718832a2541c40a0947d2d64d1b43c219e0c8eab5747ac35f11d2df30c55925 41 13 4
-5 \\xbaf071bc74c3c4792d16561bd5e9223e43deb6b6368f78145dcae7bc3ef6b820278069ba42a28c3df43eee7d6f52bcd7d57a91ef39d274c1d26ac61b3890840e \\x65d2fe9c3673291dfd5506255d79625e97839da1d7451be4c8fde9824fbab445c5d41324312652985c6dc4cde8805e0af71c7c497bebc5894e1ede51c4183c4ce03df63804e55cae1e34f0d700e0fe8ae3c178a8036dc36bc72dcd4a815de2c2fa0667a4a4cdaa5b7c3cd6f9e31ce9e2addb807b913a14602ab7e88ea3b082c5 \\xfccdf94176f25e609ce255a0249ffe8b09bd91f292156ca77a84bdf4f2bd0b216ea7e4b519d0b93aa144ba8d65ecbef1e0b337c946d85ffc557fb722ea583dd3 \\xbb31e054fcdd1da90996433b150fb5bc75f59b1408028e5da8cd470c80b74f44eaa9d36468a8f57d6ec468fe28dc8229196e01c835ef2269b3cce171a5a5696913a80bfba3844bce8bea9b1beb3722a8f2122b9e5fbbe7f96ff7ccce0854aedc9c88f7e78a33988384fe38724293f07dee937e5dfa4536af34c82bef7958d7c9 42 13 4
-6 \\xd07cf2ce2f1eaa433d3e8f90a9e5a9be90feecd662fa347c7c35707ba67dbae14828e87df4c14b167cca0ea4601510d9a52f9543a55ca37120ebf4d6068f0000 \\xb006ed0cce25938836cc067a6829de9b23ca949caad68db72061261462d9ebd88478291e1e1061365fdf9ea06851105d7cec7c75f3e9c7df59451898b8f61e10a13389435522d61bbf8b022d6a5430a68a3d7440864458a4029bd1b163bc3e847170483dff2be285108eacdc9f720e58852b7c59ebc1869b232dc19677e06bab \\x1586a5e3952046de496cc6a07c0da8f4090a1a48612c04fec5478232a2de73bb2ea9c36473d8ef8617743daecec4a255bbbfd26b770dbc1e4386c9c337ed57bb \\x8c1b775215120512cac626a7aa2f0b43731c98da4a3705a3cfd664955b515dc235339ba731f60dd47c88df983b8282a231e6fab9db5dc84ffbd5bd2e02df6aec97ef0c4e7babb053244189dfb2d6e8d0d98e6a11c3d3446c4ec47f5a640abda87c2ea74d65e99f136d38e96feeb1859b9e4b2e081da9731a0aeb18be2ead8967 43 13 4
-7 \\x87e355f965e3154372245103f7557dc05ad33711ff657581da8b82a7e0dc8fc5d9f04052c7201cd01aea2be39d4612c99c2642ace8496117c98faccbb76f7c0e \\xa23c9b96595d75ade85331a355e41fc2410ff1af4394c8a1d7e42d1904552f87fc797c0d04c2c4f5bc32ce7881a3bae7bb028cd04bfd85936e9542b6c5640a577aa878dd5542c078d5cb4093a4cae4c2ef82eff77fba7f434ab61677ae04c12bd6207c5b0fbdbfe23c4ba8b684eb04d35d1ecb42aa244e207d0692350dd10500 \\x9383b741dc87180733dfae731ab630e4301ba6d5f635f6f40c4b4260faf63f296a858c65c723205fc12b322baee1f7dbaa4e3ad40edbc6fb1a8205652b68a662 \\x5dc668902e8a768950856d4a5fe404cfabf1c26380e6528e8ed2042206abed10bb0753b80782ab172d1ed96d6b51fc4b8d76446f21d0e9704d769f9978ec840c6abc22ae940e0a455df6597227e6448abe91cd0fc559bfc29a2d9fb6406fe38dbfa4aff24721370df59109b0c593cd26cabbd6c8ba2fce93bc091adcdd33fc9f 44 13 4
-8 \\x9d7f743b04fae400158e2b9f585f43b3ab09ab419f365531ce15371488df63670b0f0c28a2df78b57704b6892eb6ff79f7ea3c065daf1641c0f149d372dee50d \\x07097224474441500f98c846e95405d87b7a4015e4eb3d86abf237144a3194c8148cc014eaa0aafb6604bbd3d1a1cc66a566f25b3f29e237f88a79df6b76e470afb84d6c898962af1298932de8a36c88bb0129f372d88840fa1d2d11f6bbc315bbf3ebe036ec3c91046b025cfe0d8cbedb454e857726b6fc3eb6c3c5c5b68f6f \\xda026ba773e67d55849cc03d01b87dc9ec0d34920ede47bd0c97c9764f48e2662a697f86c730a532e0a38ff0c042215102e6d76c5c96961e0f4235bbd8dfdb0d \\x69024209cee5567eef42bf6f9572740cc2c53c6faad52b090bd94ceb1676911e085ff901945087699813c88421bcbedb6b3f52e631e4b587529820bce9f522f050dad9c32e1265ca75dc077f77347b5889726444b63acd42751d00f86a6bfbe8a73af5595159843ec812c84010d3aa7dc1ad0dac7d4e2e892a7fb62f1dfae989 45 13 4
-9 \\x9961e4dfc5089af21d509da79069d471b7f1bcaa486b0944c1c683ce9391374f7bf638dadca6611c05caa4a8e8ba730cf75d5b0e7af42b0a822b28501479d00a \\x798f6c4a30be812cef09a0e9bbb6e017a5766a491d0e9b8e8c8819ad7149afd46cfa06448675968c3d36bc840dc6ec83ac4968225dd83551a9947354656fc2b221fd36d803b0f0d41edb8b95656c13abe32d3fe5cdf35aa8df72516ff03950b779a543f9220ce56a46543d574cd1de2722debe3c9ebf2ed05c1b7036a1265bfe \\xa227c173d27539e5dd9c253db9745fab4d25fc7c0396b89a0d9090ae76c794e5efeb2b804f1fc736bf900718fab12c5973e1690ba41112f59aff550d3439eb9e \\x98f1cb240461cf9a8700115e8d93852a5784a9b11fe079a1c572c854119adaa1f1914670aed0308cf9ded7b5048681cb216a52cc74f0ac382ee26d5e65912b4c16195d40e58179a861f232650826d160ed349828ad4ef224e9582381bbb2720fa86d0d9ad8d9586b4e2fe493c321f02761c95cdc1592217e583d9a5dc004286b 46 334 4
-10 \\x4a032e76fc4e293fd2ccb2f8eb94003671ada08de8aa7cc5b96764441ec56bee94e7bf68209edaa9443a71caa1bdcd210cd55f40451b8fea4a3e774eeedcec0f \\x2b30c0674806226d3eb2f45d99cdb5d71db1d4411dd87489e01280344c17e507ecdf9dad86eb8128c42b505d2ecb7bf7050fa3efb657bd79b9c5e4ccd7742d5ab82e9368366210238787d78a17f71d7332fc4f4fc0d09f7e529b381bd29f7984a193567b6dc6ef4473d1d53a5a068428cda6c7c8fa8713e843840f8c2b282a11 \\xc5d0dd674a527df5e010c3e8036d686705c3c88fa2cc6726e094e7217d24aace12325319a0d19428f2d5564b42b939adec0334525c80fef8134b74f6be22bfe9 \\x42d6b725f7ac41d5446aa19a28e1d3265f10375970f7fa0c710c3522beee5c4baa25d365a53d488b00ee0c26bbf4bea84beedff496ec5e5f225d45a5aab577ad9084949dafdbdc5a37f282e4c9accce59065cb3d0c2e871171be56731dbd1b5cbfa6f5a816b64e74b7ce81a0e692c3ac212df3eda7a4b80b3213867c6d5adb1a 47 334 4
-11 \\x8a4dcd3582d69777a63cbdafb9c31456235d716dc9b7bdb007ff4b86556157a2ac847986877f77e7fa20b08ceab54b4d89072a1e4c967627c2b1d31a9fd50f0f \\x3a6620da1d3c416cee7eb680bfd925be5b51ae7e36c0bfbf89886a35f3065c1d2f1b15c3a32108d8aa751efa1e3175037c11d0d6a95736afa75f51f97bca468b6a8fb2ee74ef69d855fece9450ce2ca77ae8205c4b9e5b54f67455fc2dbf5b04300aa07266dc5502cf6fa7d1d685f092ab928d7214438165941dfba643c0046b \\x836cb37678c73c817edf699acd5a6d52209a7cbe79afc650849639271d2051122ed0755cc0aab45f876e37a56e750e66f49a73d6c5a442e3c8badac9e19549ee \\xa4b2418c67e1843908282653a0202e7b6f2a76313b6f70a541cdfb84d67c70566611efdbf7083790dfbb9811a31fe8bbb9dadae7b60a285efb50f27177b98fee7feb62bbc5cda1cc9db1de1ffd3dc1ee2f768b9fb94ee6e9ef23105db74b72c22c6d33b8d40f7fc68c839d5824aeb1818454cd60b79eb951a6ffb2f459edc74d 48 334 4
-\.
-
-
---
--- Data for Name: refresh_transfer_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_transfer_keys (transfer_pub, transfer_privs, rtc_serial, melt_serial_id) FROM stdin;
-\\x07f3c9ddb409d3ed43bdd68926f2e107eb52b26e4c627c8b951cb5648d16b233 \\xb471b5b2c1cda049b82eaf01474666f3950d8c47a8aa1a04201732328baccd400e73c2ca6f994f17ee995142a07d0d812f941a5dca37b745e2d3377022861540 1 1
-\\xa48ee0e1b841bc2f7309d95b7ea9fe5beca3bc060c45c1c40738b792e0a98959 \\x54f988457226e0b002f762303f877bfc96f34bdf8017ad0fd12c482049fefe2739d43e2fa568247e52e0c675e8eb1081d6d94a6c1499e5e5b681a4b9558950c7 2 2
-\\xc99d54afa90b6cf628ac0b093b18c3bed06e71369ae95cbe074c364dae544b46 \\xf68b6760b72aca3c190769ef58be8bd387038845ece19e9ba0c93eda74809ffb24ba580b60b24ae45208a7e822aee6fac55add1e21dfd792acbe948f4825156b 3 3
-\\x80f9d4799d16c0236c753e43526e07f2e4915cf879f749d1d706eaacf689865c \\xbb4f9223688a0a8f4433aa26b4b5864661d95d3eb4d98979c2848a458bf03456022192909b4224038dfd11f32b1149aa8003e1005aa6e7c8e59d81e025b592f0 4 4
-\.
-
-
---
--- Data for Name: refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refunds (refund_serial_id, merchant_sig, rtransaction_id, amount_with_fee_val, amount_with_fee_frac, deposit_serial_id) FROM stdin;
-1 \\xbc404e2a594d23d0d6593c3e8dd39c9432f50452b17315a7746f533f0f4f5fd06aab5e3df91dfdaad52f4234eaea53aa01fab3ea7eb7e83be9983e63b8c3100d 1 6 0 2
-\.
-
-
---
--- Data for Name: reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves (reserve_pub, account_details, current_balance_val, current_balance_frac, expiration_date, gc_date, reserve_uuid) FROM stdin;
-\\x3d2240672ae808283b6062ec3fc9a929a645fcdf4cebf253d513be105885b268 payto://x-taler-bank/localhost/testuser-SeeIXZft 0 1000000 1633269019000000 1851601822000000 1
-\\x6ee2a7e6fdca30fa198bf654339f36c3a87be13a873e9bb17dfed9b0725593a4 payto://x-taler-bank/localhost/testuser-0w9C8Kjf 0 1000000 1633269027000000 1851601830000000 2
-\.
-
-
---
--- Data for Name: reserves_close; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_close (close_uuid, execution_date, wtid, receiver_account, amount_val, amount_frac, closing_fee_val, closing_fee_frac, reserve_uuid) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves_in; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_in (reserve_in_serial_id, wire_reference, credit_val, credit_frac, sender_account_details, exchange_account_section, execution_date, reserve_uuid) FROM stdin;
-1 2 10 0 payto://x-taler-bank/localhost/testuser-SeeIXZft exchange-account-1 1630849819000000 1
-2 4 18 0 payto://x-taler-bank/localhost/testuser-0w9C8Kjf exchange-account-1 1630849827000000 2
-\.
-
-
---
--- Data for Name: reserves_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out (reserve_out_serial_id, h_blind_ev, denom_sig, reserve_sig, execution_date, amount_with_fee_val, amount_with_fee_frac, reserve_uuid, denominations_serial) FROM stdin;
-1 \\x018e75cc158b38285808068e7e727ad7a51eafc0b174189f696e72c4511339ec1f8367f3bb78f2f8a0d08bce73797165c86f8f0bea189e15f6a5268e5f26d6a2 \\x380ba9ae328a3dd1fa9a8fbfbc19e5c97e2571793dca652a2940ae82f000225dfb554d242a5fdc078493655bf1ea4ebf7c288ce42b70b0b973c5de807526fe3acd1bf259097fc5c6d74f1286cfddc884c0c0eef91788f974dd86a7e609ffcb96e787aebc39d76afcb34ba9b17c53e07d37a6401cac8d6e5676a94770e189d494 \\x2d1aac082d6351fef17bb30a5e23fedd83c0328d01f6e985f129a0793ed1a209f5c1211e058d5313d036c2432b5f746fb229f8e660f06991994243c739b27b0e 1630849821000000 8 5000000 1 206
-2 \\xc1f009dae555f8683c9b0441a28b385faa3993713bb3fa1bf37a8e6b175cd02eb763022ca5c71d3b23749e0ef40b79da3a4e7cb1dcb0e96033bd15b1e727edd0 \\x76037c9f49c193757c391454358304b31a5d5603cc9d1a44cbe819665f54851b78120181c8e4de330bda0a0912a7694980df396b0197fe336e384a074e6b7378a179e6ed37814a5cfa65549c607cca1441f5b9a0fef3f976e1c70f40cec0792e62d7a4b6f7752bea7e69ca58a08c16fb07173201e5a2b8763d3e65ae1f29cfa7 \\x3917de0d77e1a1fc54804cb408665a94d95ee3a58302a82b0b3e10bcc42b3759763b53ca5e79076be016b0d447bd8fc916babf2f62c8f030cfafbb6c3f90d90d 1630849821000000 1 2000000 1 192
-3 \\x027229591426a8f09c3dda386243e54732e477c39a90aa2770fb4d2ca67c66dfda8a9afcc42c2d2b26d57a465894f71a96f4df4c0c7223b57f0b735e494b23fd \\x518639d9a0cb5b9e8cf7d2a5fe32463996a40ebbf89d3a89aec8020df24e6f625e07a2d38b2b259b80a1ff22caca13eb19ab35cca00c776408c5155b68cc07423b06fbbeed7ae442fa54500830251252ade614b49ca682ff40086851fbd1a4fb7846a20ae36df3beb2d92d56e5e38fff2229039f5dcdd7d0b66401e303cbd98c \\xc6657d7529b5f9d99335e653045c5f3f5f664292ebd70d1f7b3cab0cd901052c020bc6771ebb6030b8e50c2e157b68dfa946751dbdfac85e0af51bbaad0f910c 1630849822000000 0 11000000 1 13
-4 \\x7d88076a5330c37814f32587a1badb340a4928597be47e9b053d172714afaed4f0ed403f8c39dd6022437bb43970f2de308729087e613d2b9f43b067dbf56139 \\x72e1e6156b1c29a46ba7486118a20c624faedb2628658e1d6c3a04ec4062d753c26451574bf850719dc8679ffc5c3d8c7dae36b73744fbfa1d3b42a7635a8cfd53878d15399da576f2ac7640ed56bbc7bc8f85de36be8b51037a4910b41e78b41bc3b3867630c6b57656600a7a73c6d1cfe9f61b9931997baed8298d34cdfafd \\xe21a501fe3e0aac93da650e9ea810750f8b71e7e60c3f2579c37609efee0ab19f91dea931745e11837d9f0f7e72ac0587bd2a3449e183d8391b026c49963df07 1630849822000000 0 11000000 1 13
-5 \\x6e78880e85d5b0201564dbdf424988f0e0b3f8d96a34df9471b8b13725ed1671f51f03e8e85cbb288fff45de996101a124f0c897a20fb36b82c1318aa30145de \\x381901453182c4b39100e9905fcd691b91165620e34e3c6c057079caf07ffe8e6923b2a631037b935ac39f006d6acb535d14b3a749dba43132c5cbd4759e8c2179f7bf46f2438983458d8b5d60a925b53f1238e27ed9c00a88e5a332436c74cb00b5372ab2b0a92271490d1287d68e854627c4225d7b7bf849d872aa27d89f0b \\xdfe20dc1b9cf62f268fc2b548aa0fa21a1dc789d7082c343d4b6019aaaf24a612952f0cb7094a57fa726cbf6dd0bdfad667145a36ec72ff73a1b8334c4e43107 1630849822000000 0 11000000 1 13
-6 \\x394c9e1f11b6648f43731f844c3865411e658a659361ad0aeef0387697861f641536f2f5ab983293df75ea1c83d864e2125b1c584330139d5feb062f0330c60f \\x0f4aed8db02e47a00560d875a4807a8d87250658299d927db0da51ed6a0dcb67cab4ab08183385bc52b4eb39656e76e99c5a8cfe659c69d1eefc640607c7bd724c1348846c456196780ab162e1c5f51485ed664d95425ba2d6a484406639b77efec7cd13d3281562d1b406ca604dca5c481363a38734d0c5f3e5f0c59d8db0a2 \\x9fdbe11bed971a92a6f1fe2268822deedfeeee876a1f4206ca0c6e17f15614bbd4e8e7643e4cf9f6a56ac1b715904e573326ef417e4e97e660ae71b976b89a0d 1630849822000000 0 11000000 1 13
-7 \\x9ab3d0257579715676287e98a8217590fbab42c6d27062b1b53082d789ac4ba418baca5ec9f21dcacfe0aabbc0d8804e3fecdaedeb020827ef3417ba8dc0d941 \\x34371a2982c2bbf7fb38ed285c7762c58dd8d3139bd710e4d0a51a8c6ce22ac3397950ea6d2ed7ea1e181058a8edef9e6c1dae4b6f0b50419e35ec898af9d1f1208723cf547a40d0edf2cab57d7c6d5ee900e3bf927817fe5959ecf143647f9f022eaa6bfff1a269046f092b28202f93d0607935228efb36dbe27e7a4a9ba017 \\xef861129399bebe9f4310a1d2d26afe9db568e2a693759c4f87a358ba479c8ff785709e2f09e27d2b95c32e9cbd18bac1e469604b7978c93ab2ac664b0f70003 1630849822000000 0 11000000 1 13
-8 \\x6a2c39ce94c61c9280a4dceb7833458d95e02cafecd9b7eddd3b7fbb3a3a209807da73ef289aa798b3cc7f120a37ceb54d55e87f3721eddcf9c7197be5c23e06 \\x9451d80d55d2894a51e9f1262deea9f0fc798ccc0c685b685448871a46722baec8bcb8d6c922b014e608e1786ff955e32b4958bbd305024d23f2d9a55929f13400c781d233fd93929a55c6fa8875b3b106471d1079652a1502ca8741f907546182d64408681933c77598bc6457ee89b200707692eec459dff8cef5b77f763bb8 \\x12987326988eb54c426b60392cc9ff0db91ddcc4333d9de2a8eace7ccb3e46e3200c144ece5f0b51e0ed3e60fdfa6a03edc76a1c9d666b157f10c6d650ee8c09 1630849822000000 0 11000000 1 13
-9 \\xe45389b6cbedeab5eaf101fe302a6b9d1f508ca9316dc7458450d3ba821e1dd3871024396c5b53474bb9fdc3c4044ff08359fd636c2cb6871443cc40c158be22 \\x391a696c1b717d81c21eb7b7b57b9ebc0b430aa116f7cffba3793993b7cdc8228e0e16fcd60da3f0f12ad4d83618cf5c8b5a2638a64748fbbdd9a48646b5c8328c8144f0737b078e7d75aeed71230487dde3819a096f525c3dc55edd32718249044a592e3f6000d87d8430738852dada1e193ed5c5db9152f44ec5eb4582721f \\x04eba35e7b62b4fc0f3b0fc758e4b9609ce7993fb8516e8ea65ea6d9232ae12650d0984ef8805c0deccb18746f2694f1a2d2645dbfbcb4e167b7ca666af3330d 1630849822000000 0 11000000 1 13
-10 \\x6146d95547f0528af9e079ba2b2c5e0da8a91729cd43257e81d5c68c77e70c1adcf819cc515fed29c3100489097742a488d74a2fd489e55ec619bb0f79608561 \\x77199753932ff36d7def801e538199007573bbe45b85b44e5110e9d2d5b42560f8ceb56c8e4af8320ebf63517a5fc3229f2a900558691914362a8c62cd21a834ddc1c77027de24d0e026f761f60d9e65f9d67b89580588150328d5a4d286ee3ae7297a41532d9a2c737beaf4b3c5fd92eeaf6eb7222e1da3dd7c1d46a2d0c5c6 \\xe91132a18ffb474f7ab81c49544e7c7aa01d29674ccd5311229468cc5b6a542972ef91ac85c0169bc5ce0b978581c835679e1a34687b07829c3f3b399527100c 1630849822000000 0 11000000 1 13
-11 \\x336e8aacfde7e16265c957655b5c0e84441dabce3fa02ef274fd7720fbde15291663a81bffadd2d5778b7c4b16ccb5e84d9953bf95a1997ff3d37d5d6dbba06d \\x22c0162e406c5e1b055b3310f22affed44b90c74787359fb37e8776c45355b48bb24c91aee8c002e6a2176631270e80251c21d2a47f1eb12fe2c32eb942f01cc72cb85cac2532dd03e2c2b4804b47360d2e2258aba7418c8cedeb8d4b4f5a1eec330501fa1afd98b509b1d69426a64d775746c53b0d9e1468a28e1e9aea6e1c8 \\xa6e740c4a202312a758ac931d5a48d94bb98bfee60a5d2a86bb35e05248a5661325230885ed7aab210d67282e1ac777340d875b1eacf04feb8b91246c81bc004 1630849822000000 0 2000000 1 334
-12 \\x0766f29fe88a9bf77ab1bc269d8d0d81102403f42c0336038a34e8b9ca36ffc2a23c3342f7093a62c5ca2bed3d6e082b8a65f4d50ef6f778eafd2b778292f76e \\x636a8f1cf257b3fe25caf7730f4c44af6d2a3c7d5f1f319a731b0f1b5232e2979f5a47e92402bb34ee233ab54d0e13055b198c6e4bc05fe0eadfdc4dedb447a70a53ccd0a5c5652c8a1f37581c971d60911058630060aa64840ae9a27d9c2004585b3d69253e0d615f37110cde0ac1840a2c49608c991a864758c2cfeb9e6587 \\x24ce038e613f537fd7c4a218922b8b29af3225abe2ce2cd6084755749d437bcf28c3b25e8ac6285532b27bbd78493b1b0d4ff5e380af2831c4baf4da3b538e09 1630849822000000 0 2000000 1 334
-13 \\x4c211ce9534b2269d643e22383b1b354cd5e4096f3ca7d79c2f3b688eedbbd9c4aa4a2c9bffe8e80fd8af7f4133ba774f5ab6d0955fda573f14d2495f954da70 \\xbf5e4e97940913eb16cabb3ea3ec0de3204dfff07c20e68e7f2b20a0230c4bdd6db5a8c7525e7066e5c57bbc0999b239a792a21738ff4e30d8f49fa2790e215becfa2e93308dbef392650a608639be3d458f76d54aa6718805586754bdf64b9bcecb805b5c6d29246663897d4c27654ace970f5e47f64d4a4986e30901cf9462 \\x0946b82557789693ee0c03f9daf726c04bb0ea288fd916debbcda5a82fa7d72c0afa366bbadda9e58d916320184f631bdb785a4b597b17f0489007ea682e3801 1630849829000000 10 1000000 2 237
-14 \\xb1f0e63e8a901cfd837fc36b2c7f02116734d231e5a3fc10116e0f1625884fc7e733ce150925525b62b6d1994a5f60e8b4d7a57e3476eb64e0342334f2775727 \\x4a345630c693db4f6dd54a4358aa45aeba0a986953987dec38475b17754961b9057bd20aba3643f6fe2040937ec9547616819ec4c292ac45c2f4019cd67917d4dc06b3f923f28a27328b3a0dbfb71cea06ef0de151b44f816c3d1fb46674a9db865f16e1c8339dd5f292d3e637029e5f3b68c7fbcf927675f73fc6a8d3801e7b \\xb0377ac78ee98f79d1994be735e99476ec91abb57f3273ddbc6f958f6d8e4ee2c0df96610dd6410a1ea47559cf442203ced3fe3f665c64026abbae22fe8ff90e 1630849829000000 5 1000000 2 267
-15 \\xb975c84a795b513ff1230b0ff3fadc61c7d18fe8475dcc0f034176b42f6772389ade5eedc23aa75a3642653a698fc999b1645698d3c97b29e1f00d2a970bf0dc \\x7874f0bcc0c7b48585693317c8dc9739b1bb2b77b942100889841be179606d16881904758cf4b3ba76a6f826bf6ab26293d168cf075172ccab0a6b628d130611837b688a9f99cf2433ab8f4b4de30bc62d40e342640ec8c62d2d546c91943a5f438ade16819ad0e548bf5d5e0a70ad04929391012778e5167c70518d789c85ea \\xea4c30ebfa65902c0c77c75c9c11fc13c2b6fea4a7055ebb17e34430c2c0106bb706bbb2eb7eb90926c3bd75940ceaeb8d485ec29f46c5ae4964a5593bff2507 1630849829000000 2 3000000 2 352
-16 \\x33123a31734a016741d7f10e88e31e83062c465ab421a760d635e775ba8539639db815e5d5322b8fe012d620ba6899fd7f78402e101848983fef72dfa50432a2 \\xa63686c052d90a22a61506f48c70b79078d4a1d7aa0c5888f7e6c376c8e9416800a4f9321f9922af2fce60574a969eabe573c6f63d6e08709eb03f777a38eb738ee232c2d20014e19e1407f7cc64f0e6e57556b33f8a171cfaf4196b6bcbab9ec5a9492a8c7ade67255216fe51c48f859b8ad2c63d7d8fb876e009526f0dec27 \\x017b27202342fcbd1365073f6e0609eeb370c4b5dae2e8dcbaeecdb84668d0356dee11f029960f70956024fa4e6deb5d571577c8e53a2d9e060ddfe0a6a47306 1630849829000000 0 11000000 2 13
-17 \\xe47efc38969dc79a365bede39d68007e3f358123f14a7cea5ac3099044ce885988743ab187e718a6f69a25bf877b05433e3477f8500f64384ae23d3f09e97558 \\xb3714b52a01a3f56c8f0044271168ff7d5589e227fc1b234456e0d05879e5149dd9f33734c38aebb257c4908a74113290e51f56fc301056cba50eb655c6fd1d1aa5d4c57aac73a7c925a664ddcedebd6197c720ff67ac9ad4a62e808e71515f60825662b7c5330e32e626c4ee846e3b931590f0a41b4afe1cc2541e3419c8718 \\x9a2683a16b83c57121acd0902b9fb29fe1a79358b31a9cff8aa6de755373846229c4f357bd2750203175f0121d9d96dc848a72e6a3e64dfca11e1de6c476dd09 1630849829000000 0 11000000 2 13
-18 \\x7f1fc07ef8e31ec3956fcda42de23477c009da2954ec3c44240cec1e9e25590d1598e3c328cfd848d817b2de72c6310ca968e17a875ec41ed501153a36f71df6 \\x8490ca513498851acc59f80c0d181a44f99b6fe129da564a2b257f69fcccc307f6b122383ddca7b14e425d49a51bcf1aed2b9f0ca835c7fefefbadc3f851c155071e70472e6f383801edd59261ce1be2ccb0cb339eea477839aaac8ce41f00b884d752ba28ea2bcdfd1f02f47ddc1f3cc97336487c43316b81e768f0e39152ea \\x079be36d8b2420064e64ef36f919d3dce6cbd2fae2c1b7c38e50d0e630d956dfa41c72ca0d4cb8bd35fa26560eb195d7620a679f968c4a7ced81d3830ace2204 1630849829000000 0 11000000 2 13
-19 \\x52cbda76f894055fd43b073c4e32144ed9b8d3adeef19b95c9f8835661636a25ad6d73a9426ea83bf8404ef415781b58e34d437a75d4fd96aa0dc35a05745248 \\x7d9cc6562859c61d83d1b5252f3eb944226729185c095656b62f204d596be4cab898c8eef480f9a4c6b1eb3f1d5aa25e8635542aaf5f877b6537a2c997ff5d6cc0e5da6139aca15706edc8f0ce1e94debae2f7ec73db3358071e9777a2c0549638a10715769af5def60f8253efcbe85f5ed05d3f5140787c621905fe5c7b9621 \\x28e7235882ab810f293366f760a684c16c7828ff783ba5bd3cc49ec2d63f6198ebfc7e4ddb5b738c2f9dca703fb3bea492a090e0681ea06ec293b12d42398203 1630849829000000 0 11000000 2 13
-20 \\xa0564c89762ab1c08c12afda9527ec8c845b4718157f2a3aaea47dbfc43a1d9a44544425715a2f4369cc9d7d5fc90274fe6d3ec15d8f9bcefcd390cd2f85c3a7 \\x402f442bbb0505990ebe477e66bc0aae4d9f8bc1bd339bef7975f649c5505c540fcbbc33206649933b442c499bebefc0307c0833a3dc15b1c3db3a2e22b0ff698b9a6b8c5f2b97dfea2d8493bb7e0940cd1b20552c29ebdcd4a6e24a0c152c50cf4af7745ebc190fde40790353d358d5bfa6b031e04186e2596f240e0417c338 \\x5a03f6bb9022ca42409f7284e697ac3519ddffb27780dcb76219c9e1e9041c2c841e09065f33f97e681e45c3d0696895c86031c9aac6ca9657962ebd7657700f 1630849830000000 0 11000000 2 13
-21 \\xb33f32fe0388226da70e9c1aa9f1291f1f16bdb7bc08f358e972f90204d8f22dad62a3c719f65d2bc63738eebe2bf3f51e31c6a16f52ab4ce01e8ad126ece4e5 \\x023fd8df6cc40b45c87772a46eb4638c9c93421d732e778011ede42a28083a944333e74e7c29788db780f083ffb130b8379730105c371bf7babc40a33588913fbdd0e2a946f331beff9865ffefe7ff2ea8214efb8c43731909a202d167e6dcd5c96e75a4c63e532474618f806f0055913c61c953f8426d9f3e4058e9b20a80dc \\xd448926d27e689c6320ed2b7ae63dfb62807ea95773a0a6b6b1229853b21cac8a5011770071cfd05a6768f131d66ea546a45f119d9f6d8b229d5b05feb2c8c0e 1630849830000000 0 11000000 2 13
-22 \\x075ed9ab9eb7c2a63c21fbe5c6886c171117fba7762d19d7c8acced37b7d10149fdfd00dc5cda86594b0bc91f0a78218262208f881f35289bfba0a58b83129c1 \\x4c8eb0173a1f070e5e4c49bbccf5d1354624aadd13280f3c6ae930c5f8625c5b91fa731db178249d7533415d621a2456067d071aadb16a30eb5bdf15f9f2f55f0cdb931095be3f843e2ed63346afd9ea8706e724c438c24d18804628f368e8332eee8c075351bc4d6e4f891c2259ec6dc26c284e48c99c36f8fa2a7286f878a1 \\xcbdbfac320c2abf4412f4599433d29e09ec60fd1933e25ab8637903fe61191b8bf3f9478d418a150c97aa95aefae35582e960ee04e4cbc0f54a6d8a0ae746b0c 1630849830000000 0 11000000 2 13
-23 \\xa3f8d50d7f08e006855c7eb8de0f195e14e55c827a08b9c5712f1c834807437b5211dac931c30973dd383be165339cd22ea20362065f8130080a7f4e467faff2 \\xbec6aa6191240efd9a9cfa8be9b0fc7d9d41407bde5fb53798b7cbb621306decd17d37be01e439db367fac5cd6085a55a3fc4b790af5cc3676f00a8cee47099af5babadea504b2a3b96b8c0ac2fdbaa6b831513b14a41363aa822f56e05842b3d2fbe4ecbcca44c46c1fac5b9c57185d6d5ead2d3821d3029b00c0b97cbcd32d \\xfd713040fbc6861cc36186681a758df56ccfc79a543693f166a79ffd715795825d52b6297bae0645ea33dc78723fc074bc1fa59d451b88b080d42118122dd805 1630849830000000 0 11000000 2 13
-24 \\x609d878d782ea7ac23462d1d62426a440c34159a510cc31ed60bf097a2ec3fbad0bb55bc41b3e35301d8f3daa935412532764c1598b89e86a1225488c79b7900 \\xa6e003b3de80a7326e8894829bf71edb7fe8ec6d2f2395f54c2cecdec2068a8e5c02fc4686c0924646e73689f12f9ee5a25f8a050ed7a8505f563f7a63fa7848d5100be0f41e7dcd270170b1bcaa5d1df4b0d4df4db1df3c5cff32bdd284265c75cffb9f6603ae624ad989e2a4cbec6d78e88c1fd27f908a0a200cbefc2a1c31 \\x9f6b02f85f3d46b28b4af8c5a0148963ba9a0bd31ac75fb9166e895acad4478010a3af8aaedc61fde10e7083a3a7b10b13687c21b484c80ac4af32fe6a805c09 1630849830000000 0 2000000 2 334
-25 \\xe318f5c1f69d13949ef5b7730d882771950688ad939460c9f5077a713ae3a6d18539010658b4bdfc8e7b9c1f52a84348f4839a398b4ed82fbe7f7eaa429fd88f \\xaecdfb205b358ea102e47344c46df2366a16724437dbe27940f80b9d65faa8fd6a3ad54a38fb947a13521a452a1a40d3e1a91df67594c108ed238d3854fbc778e69fd4a8e8a75c96f61a041aa2650b682ff6a350d8ae558f458584eaf90072aefe5cda1aeb64aa04c18353bafeefeea3b29fb778840c466b78ef2b816fe9fb8e \\xdb7daf6925d4489a4f4524f1fcf2b5ff2c90c3788bf2ab08c4a089324a27e34213e2bc184723ba998bad6ada48419f313ccdc79a76bf49f94307575dc079ff01 1630849830000000 0 2000000 2 334
-26 \\xf6e5ab3291ec031b9d663c083297e8ccc5847d915592209d6c5b2e828afbf0bca927ec5d58da628a578930ae258cad0f179a98c7047f45198e72c79bdc4f5426 \\x258e1d31d524cddc00837eedc64891f9a95159bbdc8dfca5dbe4a5ebf6768e908ac0e5f960f99880878dad461feb547e9b2366ba9ed5bc0cc28152ff5e064f622a3b6422c72e50a033fe9760e6d30ea448eb104d4b270493cf3c35c0edc0b0948acf59b3030fefef95f1d75c0d73cc18f6ce056e674d2a85187c18c2aef01307 \\x71068ad39706c14dbaba121aa88f543895b025d8d52775f70e0316e81ad1c6ea27073cf7f8447a198425b5dbcc103092fd18035389989437ed3348176345c301 1630849830000000 0 2000000 2 334
-\.
-
-
---
--- Data for Name: revolving_work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.revolving_work_shards (shard_serial_id, last_attempt, start_row, end_row, active, job_name) FROM stdin;
-\.
-
-
---
--- Data for Name: signkey_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.signkey_revocations (signkey_revocations_serial_id, esk_serial, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_accounts (payto_uri, master_sig, is_active, last_change) FROM stdin;
-payto://x-taler-bank/localhost/Exchange \\x9d17d81a1520ff0502661285bd9baca84627d104658c2560ada377adcb3d3eb9269c74640a271593e710302577b4be7a59f618d9aeab976a36f2c9f155a4f301 t 1630849813000000
-\.
-
-
---
--- Data for Name: wire_auditor_account_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_account_progress (master_pub, account_name, last_wire_reserve_in_serial_id, last_wire_wire_out_serial_id, wire_in_off, wire_out_off) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_auditor_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_progress (master_pub, last_timestamp, last_reserve_close_uuid) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_fee; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_fee (wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, master_sig, wire_fee_serial) FROM stdin;
-x-taler-bank 1609459200000000 1640995200000000 0 1000000 0 1000000 \\x496925bc0b8f1173348c45e67318c282fb4e0524407f5f808cae617cca25d9db1723d7b0628aaac5e47c58f7eef7f6d2bd25c2120b7f581007d7b27fd2b3fb0f 1
-\.
-
-
---
--- Data for Name: wire_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_out (wireout_uuid, execution_date, wtid_raw, wire_target, exchange_account_section, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.work_shards (shard_serial_id, last_attempt, start_row, end_row, completed, job_name) FROM stdin;
-1 1630849807512269 0 1024 f wirewatch-exchange-account-1
-\.
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.aggregation_tracking_aggregation_serial_id_seq', 1, false);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_bankaccount_account_no_seq', 13, true);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_banktransaction_id_seq', 4, true);
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_denom_sigs_auditor_denom_serial_seq', 424, true);
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_reserves_auditor_reserves_rowid_seq', 1, false);
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditors_auditor_uuid_seq', 1, true);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_id_seq', 1, false);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_permissions_id_seq', 1, false);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_permission_id_seq', 32, true);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_groups_id_seq', 1, false);
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_id_seq', 13, true);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_user_permissions_id_seq', 1, false);
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denomination_revocations_denom_revocations_serial_id_seq', 1, false);
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denominations_denominations_serial_seq', 424, true);
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposit_confirmations_serial_id_seq', 3, true);
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposits_deposit_serial_id_seq', 3, true);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_content_type_id_seq', 8, true);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_migrations_id_seq', 16, true);
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.exchange_sign_keys_esk_serial_seq', 5, true);
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.known_coins_known_coin_id_seq', 3, true);
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_accounts_account_serial_seq', 1, true);
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_deposits_deposit_serial_seq', 3, true);
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_signing_keys_signkey_serial_seq', 5, true);
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_wire_fees_wirefee_serial_seq', 1, true);
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_instances_merchant_serial_seq', 1, true);
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_inventory_product_serial_seq', 1, false);
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_orders_order_serial_seq', 3, true);
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_refunds_refund_serial_seq', 1, true);
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_pickups_pickup_serial_seq', 1, false);
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_reserves_reserve_serial_seq', 1, false);
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tips_tip_serial_seq', 1, false);
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_transfers_credit_serial_seq', 1, false);
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.prewire_prewire_uuid_seq', 1, false);
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_recoup_uuid_seq', 1, false);
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_refresh_recoup_refresh_uuid_seq', 1, false);
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_commitments_melt_serial_id_seq', 4, true);
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_revealed_coins_rrc_serial_seq', 48, true);
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_transfer_keys_rtc_serial_seq', 4, true);
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refunds_refund_serial_id_seq', 1, true);
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_close_close_uuid_seq', 1, false);
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_in_reserve_in_serial_id_seq', 2, true);
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_out_reserve_out_serial_id_seq', 26, true);
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_reserve_uuid_seq', 2, true);
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.revolving_work_shards_shard_serial_id_seq', 1, false);
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.signkey_revocations_signkey_revocations_serial_id_seq', 1, false);
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_fee_wire_fee_serial_seq', 1, true);
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_out_wireout_uuid_seq', 1, false);
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.work_shards_shard_serial_id_seq', 1, true);
-
-
---
--- Name: patches patches_pkey; Type: CONSTRAINT; Schema: _v; Owner: -
---
-
-ALTER TABLE ONLY _v.patches
- ADD CONSTRAINT patches_pkey PRIMARY KEY (patch_name);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_aggregation_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_aggregation_serial_id_key UNIQUE (aggregation_serial_id);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: app_bankaccount app_bankaccount_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_pkey PRIMARY KEY (account_no);
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_key UNIQUE (user_id);
-
-
---
--- Name: app_banktransaction app_banktransaction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_pkey PRIMARY KEY (id);
-
-
---
--- Name: app_banktransaction app_banktransaction_request_uid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_request_uid_key UNIQUE (request_uid);
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawoperation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawoperation_pkey PRIMARY KEY (withdraw_id);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_denom_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_denom_serial_key UNIQUE (auditor_denom_serial);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_pkey PRIMARY KEY (denominations_serial, auditor_uuid);
-
-
---
--- Name: auditor_denomination_pending auditor_denomination_pending_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denomination_pending
- ADD CONSTRAINT auditor_denomination_pending_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_exchanges auditor_exchanges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchanges
- ADD CONSTRAINT auditor_exchanges_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_historic_denomination_revenue auditor_historic_denomination_revenue_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT auditor_historic_denomination_revenue_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_progress_aggregation auditor_progress_aggregation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT auditor_progress_aggregation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_coin auditor_progress_coin_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT auditor_progress_coin_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_deposit_confirmation auditor_progress_deposit_confirmation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT auditor_progress_deposit_confirmation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_reserve auditor_progress_reserve_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT auditor_progress_reserve_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_reserves auditor_reserves_auditor_reserves_rowid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT auditor_reserves_auditor_reserves_rowid_key UNIQUE (auditor_reserves_rowid);
-
-
---
--- Name: auditors auditors_auditor_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_auditor_uuid_key UNIQUE (auditor_uuid);
-
-
---
--- Name: auditors auditors_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_pkey PRIMARY KEY (auditor_pub);
-
-
---
--- Name: auth_group auth_group_name_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_name_key UNIQUE (name);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_permission_id_0cd325b0_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq UNIQUE (group_id, permission_id);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_group auth_group_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_permission auth_permission_content_type_id_codename_01ab375a_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq UNIQUE (content_type_id, codename);
-
-
---
--- Name: auth_permission auth_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_group_id_94350c0c_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_group_id_94350c0c_uniq UNIQUE (user_id, group_id);
-
-
---
--- Name: auth_user auth_user_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_permission_id_14a6b632_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_permission_id_14a6b632_uniq UNIQUE (user_id, permission_id);
-
-
---
--- Name: auth_user auth_user_username_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_username_key UNIQUE (username);
-
-
---
--- Name: denomination_revocations denomination_revocations_denom_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denom_revocations_serial_id_key UNIQUE (denom_revocations_serial_id);
-
-
---
--- Name: denominations denominations_denominations_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_denominations_serial_key UNIQUE (denominations_serial);
-
-
---
--- Name: denominations denominations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: denomination_revocations denominations_serial_pk; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denominations_serial_pk PRIMARY KEY (denominations_serial);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_pkey PRIMARY KEY (h_contract_terms, h_wire, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_serial_id_key UNIQUE (serial_id);
-
-
---
--- Name: deposits deposit_unique; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposit_unique UNIQUE (known_coin_id, merchant_pub, h_contract_terms);
-
-
---
--- Name: deposits deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: django_content_type django_content_type_app_label_model_76bd3d3b_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_app_label_model_76bd3d3b_uniq UNIQUE (app_label, model);
-
-
---
--- Name: django_content_type django_content_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_migrations django_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations
- ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_session django_session_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_session
- ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_esk_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_esk_serial_key UNIQUE (esk_serial);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_pkey PRIMARY KEY (exchange_pub);
-
-
---
--- Name: known_coins known_coins_known_coin_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_known_coin_id_key UNIQUE (known_coin_id);
-
-
---
--- Name: known_coins known_coins_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_pkey PRIMARY KEY (coin_pub);
-
-
---
--- Name: merchant_accounts merchant_accounts_h_wire_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_h_wire_key UNIQUE (h_wire);
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_payto_uri_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_payto_uri_key UNIQUE (merchant_serial, payto_uri);
-
-
---
--- Name: merchant_accounts merchant_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_pkey PRIMARY KEY (account_serial);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_h_contract_terms_key UNIQUE (merchant_serial, h_contract_terms);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_credit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_credit_serial_key UNIQUE (deposit_serial, credit_serial);
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_coin_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_coin_pub_key UNIQUE (order_serial, coin_pub);
-
-
---
--- Name: merchant_deposits merchant_deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_pkey PRIMARY KEY (deposit_serial);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_key_exchange_pub_start_date_maste_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_key_exchange_pub_start_date_maste_key UNIQUE (exchange_pub, start_date, master_pub);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_keys_pkey PRIMARY KEY (signkey_serial);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_master_pub_h_wire_method_start__key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_master_pub_h_wire_method_start__key UNIQUE (master_pub, h_wire_method, start_date);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_pkey PRIMARY KEY (wirefee_serial);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_id_key UNIQUE (merchant_id);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_pub_key UNIQUE (merchant_pub);
-
-
---
--- Name: merchant_instances merchant_instances_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_product_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_product_id_key UNIQUE (merchant_serial, product_id);
-
-
---
--- Name: merchant_inventory merchant_inventory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_pkey PRIMARY KEY (product_serial);
-
-
---
--- Name: merchant_keys merchant_keys_merchant_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_priv_key UNIQUE (merchant_priv);
-
-
---
--- Name: merchant_keys merchant_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_orders merchant_orders_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_coin_pub_rtransaction_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_coin_pub_rtransaction_id_key UNIQUE (order_serial, coin_pub, rtransaction_id);
-
-
---
--- Name: merchant_refunds merchant_refunds_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pkey PRIMARY KEY (pickup_serial, coin_offset);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pickup_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pickup_id_key UNIQUE (pickup_id);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pkey PRIMARY KEY (pickup_serial);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_priv_key UNIQUE (reserve_priv);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_key UNIQUE (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_pkey PRIMARY KEY (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_reserve_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_reserve_pub_key UNIQUE (reserve_pub);
-
-
---
--- Name: merchant_tips merchant_tips_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_pkey PRIMARY KEY (tip_serial);
-
-
---
--- Name: merchant_tips merchant_tips_tip_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_tip_id_key UNIQUE (tip_id);
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_key UNIQUE (deposit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_wtid_exchange_url_account_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_wtid_exchange_url_account_serial_key UNIQUE (wtid, exchange_url, account_serial);
-
-
---
--- Name: prewire prewire_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire
- ADD CONSTRAINT prewire_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: recoup recoup_recoup_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_recoup_uuid_key UNIQUE (recoup_uuid);
-
-
---
--- Name: recoup_refresh recoup_refresh_recoup_refresh_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_recoup_refresh_uuid_key UNIQUE (recoup_refresh_uuid);
-
-
---
--- Name: recoup_refresh recoup_unique; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_unique UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_commitments refresh_commitments_melt_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_melt_serial_id_key UNIQUE (melt_serial_id);
-
-
---
--- Name: refresh_commitments refresh_commitments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_pkey PRIMARY KEY (rc);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_coin_ev_key UNIQUE (coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_h_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_h_coin_ev_key UNIQUE (h_coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_rrc_serial_key UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_rtc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_rtc_serial_key UNIQUE (rtc_serial);
-
-
---
--- Name: refunds refunds_primary_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_primary_key PRIMARY KEY (deposit_serial_id, rtransaction_id);
-
-
---
--- Name: refunds refunds_refund_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_refund_serial_id_key UNIQUE (refund_serial_id);
-
-
---
--- Name: reserves_close reserves_close_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_pkey PRIMARY KEY (close_uuid);
-
-
---
--- Name: reserves_in reserves_in_reserve_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_in_serial_id_key UNIQUE (reserve_in_serial_id);
-
-
---
--- Name: reserves_out reserves_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_pkey PRIMARY KEY (h_blind_ev);
-
-
---
--- Name: reserves_out reserves_out_reserve_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_out_serial_id_key UNIQUE (reserve_out_serial_id);
-
-
---
--- Name: reserves reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves reserves_reserve_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_reserve_uuid_key UNIQUE (reserve_uuid);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: signkey_revocations signkey_revocations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_pkey PRIMARY KEY (esk_serial);
-
-
---
--- Name: signkey_revocations signkey_revocations_signkey_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_signkey_revocations_serial_id_key UNIQUE (signkey_revocations_serial_id);
-
-
---
--- Name: reserves_in unique_in; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT unique_in PRIMARY KEY (reserve_uuid, wire_reference);
-
-
---
--- Name: wire_accounts wire_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_accounts
- ADD CONSTRAINT wire_accounts_pkey PRIMARY KEY (payto_uri);
-
-
---
--- Name: wire_auditor_account_progress wire_auditor_account_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT wire_auditor_account_progress_pkey PRIMARY KEY (master_pub, account_name);
-
-
---
--- Name: wire_auditor_progress wire_auditor_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT wire_auditor_progress_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: wire_fee wire_fee_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_pkey PRIMARY KEY (wire_method, start_date);
-
-
---
--- Name: wire_fee wire_fee_wire_fee_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_wire_fee_serial_key UNIQUE (wire_fee_serial);
-
-
---
--- Name: wire_out wire_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_pkey PRIMARY KEY (wireout_uuid);
-
-
---
--- Name: wire_out wire_out_wtid_raw_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_wtid_raw_key UNIQUE (wtid_raw);
-
-
---
--- Name: work_shards work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: work_shards work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: aggregation_tracking_wtid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_wtid_index ON public.aggregation_tracking USING btree (wtid_raw);
-
-
---
--- Name: INDEX aggregation_tracking_wtid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.aggregation_tracking_wtid_index IS 'for lookup_transactions';
-
-
---
--- Name: app_banktransaction_credit_account_id_a8ba05ac; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_credit_account_id_a8ba05ac ON public.app_banktransaction USING btree (credit_account_id);
-
-
---
--- Name: app_banktransaction_date_f72bcad6; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_date_f72bcad6 ON public.app_banktransaction USING btree (date);
-
-
---
--- Name: app_banktransaction_debit_account_id_5b1f7528; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_debit_account_id_5b1f7528 ON public.app_banktransaction USING btree (debit_account_id);
-
-
---
--- Name: app_banktransaction_request_uid_b7d06af5_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_request_uid_b7d06af5_like ON public.app_banktransaction USING btree (request_uid varchar_pattern_ops);
-
-
---
--- Name: app_talerwithdrawoperation_selected_exchange_account__6c8b96cf; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_selected_exchange_account__6c8b96cf ON public.app_talerwithdrawoperation USING btree (selected_exchange_account_id);
-
-
---
--- Name: app_talerwithdrawoperation_withdraw_account_id_992dc5b3; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_withdraw_account_id_992dc5b3 ON public.app_talerwithdrawoperation USING btree (withdraw_account_id);
-
-
---
--- Name: auditor_historic_reserve_summary_by_master_pub_start_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_historic_reserve_summary_by_master_pub_start_date ON public.auditor_historic_reserve_summary USING btree (master_pub, start_date);
-
-
---
--- Name: auditor_reserves_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_reserves_by_reserve_pub ON public.auditor_reserves USING btree (reserve_pub);
-
-
---
--- Name: auth_group_name_a6ea08ec_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_name_a6ea08ec_like ON public.auth_group USING btree (name varchar_pattern_ops);
-
-
---
--- Name: auth_group_permissions_group_id_b120cbf9; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON public.auth_group_permissions USING btree (group_id);
-
-
---
--- Name: auth_group_permissions_permission_id_84c5c92e; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_permission_id_84c5c92e ON public.auth_group_permissions USING btree (permission_id);
-
-
---
--- Name: auth_permission_content_type_id_2f476e4b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_permission_content_type_id_2f476e4b ON public.auth_permission USING btree (content_type_id);
-
-
---
--- Name: auth_user_groups_group_id_97559544; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_group_id_97559544 ON public.auth_user_groups USING btree (group_id);
-
-
---
--- Name: auth_user_groups_user_id_6a12ed8b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_user_id_6a12ed8b ON public.auth_user_groups USING btree (user_id);
-
-
---
--- Name: auth_user_user_permissions_permission_id_1fbb5f2c; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_permission_id_1fbb5f2c ON public.auth_user_user_permissions USING btree (permission_id);
-
-
---
--- Name: auth_user_user_permissions_user_id_a95ead1b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_user_id_a95ead1b ON public.auth_user_user_permissions USING btree (user_id);
-
-
---
--- Name: auth_user_username_6821ab7c_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_username_6821ab7c_like ON public.auth_user USING btree (username varchar_pattern_ops);
-
-
---
--- Name: denomination_revocations_by_denomination; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denomination_revocations_by_denomination ON public.denomination_revocations USING btree (denominations_serial);
-
-
---
--- Name: denominations_expire_legal_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denominations_expire_legal_index ON public.denominations USING btree (expire_legal);
-
-
---
--- Name: deposits_get_ready_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_get_ready_index ON public.deposits USING btree (shard, tiny, done, wire_deadline, refund_deadline);
-
-
---
--- Name: INDEX deposits_get_ready_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_get_ready_index IS 'for deposits_get_ready';
-
-
---
--- Name: deposits_iterate_matching_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_iterate_matching_index ON public.deposits USING btree (merchant_pub, h_wire, done, wire_deadline);
-
-
---
--- Name: INDEX deposits_iterate_matching_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_iterate_matching_index IS 'for deposits_iterate_matching';
-
-
---
--- Name: django_session_expire_date_a5c62663; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_expire_date_a5c62663 ON public.django_session USING btree (expire_date);
-
-
---
--- Name: django_session_session_key_c0390e0f_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_session_key_c0390e0f_like ON public.django_session USING btree (session_key varchar_pattern_ops);
-
-
---
--- Name: known_coins_by_denomination; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_denomination ON public.known_coins USING btree (denominations_serial);
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_expiration ON public.merchant_contract_terms USING btree (merchant_serial, pay_deadline);
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_payment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_payment ON public.merchant_contract_terms USING btree (merchant_serial, paid);
-
-
---
--- Name: merchant_contract_terms_by_merchant_session_and_fulfillment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_session_and_fulfillment ON public.merchant_contract_terms USING btree (merchant_serial, fulfillment_url, session_id);
-
-
---
--- Name: merchant_inventory_locks_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_expiration ON public.merchant_inventory_locks USING btree (expiration);
-
-
---
--- Name: merchant_inventory_locks_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_uuid ON public.merchant_inventory_locks USING btree (lock_uuid);
-
-
---
--- Name: merchant_orders_by_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_creation_time ON public.merchant_orders USING btree (creation_time);
-
-
---
--- Name: merchant_orders_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_expiration ON public.merchant_orders USING btree (pay_deadline);
-
-
---
--- Name: merchant_orders_locks_by_order_and_product; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_locks_by_order_and_product ON public.merchant_order_locks USING btree (order_serial, product_serial);
-
-
---
--- Name: merchant_refunds_by_coin_and_order; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_refunds_by_coin_and_order ON public.merchant_refunds USING btree (coin_pub, order_serial);
-
-
---
--- Name: merchant_tip_reserves_by_exchange_balance; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_exchange_balance ON public.merchant_tip_reserves USING btree (exchange_initial_balance_val, exchange_initial_balance_frac);
-
-
---
--- Name: merchant_tip_reserves_by_merchant_serial_and_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_merchant_serial_and_creation_time ON public.merchant_tip_reserves USING btree (merchant_serial, creation_time);
-
-
---
--- Name: merchant_tip_reserves_by_reserve_pub_and_merchant_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_reserve_pub_and_merchant_serial ON public.merchant_tip_reserves USING btree (reserve_pub, merchant_serial, creation_time);
-
-
---
--- Name: merchant_tips_by_pickup_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tips_by_pickup_and_expiration ON public.merchant_tips USING btree (was_picked_up, expiration);
-
-
---
--- Name: merchant_transfers_by_credit; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_transfers_by_credit ON public.merchant_transfer_to_coin USING btree (credit_serial);
-
-
---
--- Name: prepare_get_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_get_index ON public.prewire USING btree (failed, finished);
-
-
---
--- Name: INDEX prepare_get_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_get_index IS 'for wire_prepare_data_get';
-
-
---
--- Name: prepare_iteration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_iteration_index ON public.prewire USING btree (finished);
-
-
---
--- Name: INDEX prepare_iteration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_iteration_index IS 'for gc_prewire';
-
-
---
--- Name: recoup_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_h_blind_ev ON public.recoup USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_for_by_reserve ON public.recoup USING btree (known_coin_id, reserve_out_serial_id);
-
-
---
--- Name: recoup_refresh_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_h_blind_ev ON public.recoup_refresh USING btree (rrc_serial);
-
-
---
--- Name: recoup_refresh_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_for_by_reserve ON public.recoup_refresh USING btree (known_coin_id, rrc_serial);
-
-
---
--- Name: refresh_commitments_old_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_old_coin_pub_index ON public.refresh_commitments USING btree (old_known_coin_id);
-
-
---
--- Name: refresh_revealed_coins_denominations_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_denominations_index ON public.refresh_revealed_coins USING btree (denominations_serial);
-
-
---
--- Name: refresh_transfer_keys_coin_tpub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_transfer_keys_coin_tpub ON public.refresh_transfer_keys USING btree (melt_serial_id, transfer_pub);
-
-
---
--- Name: INDEX refresh_transfer_keys_coin_tpub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.refresh_transfer_keys_coin_tpub IS 'for get_link (unsure if this helps or hurts for performance as there should be very few transfer public keys per rc, but at least in theory this helps the ORDER BY clause)';
-
-
---
--- Name: reserves_close_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_uuid ON public.reserves_close USING btree (reserve_uuid);
-
-
---
--- Name: reserves_expiration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_expiration_index ON public.reserves USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: INDEX reserves_expiration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_expiration_index IS 'used in get_expired_reserves';
-
-
---
--- Name: reserves_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_gc_index ON public.reserves USING btree (gc_date);
-
-
---
--- Name: INDEX reserves_gc_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_gc_index IS 'for reserve garbage collection';
-
-
---
--- Name: reserves_in_exchange_account_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_exchange_account_serial ON public.reserves_in USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_execution_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_execution_index ON public.reserves_in USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_out_execution_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_execution_date ON public.reserves_out USING btree (execution_date);
-
-
---
--- Name: reserves_out_for_get_withdraw_info; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_for_get_withdraw_info ON public.reserves_out USING btree (denominations_serial, h_blind_ev);
-
-
---
--- Name: reserves_out_reserve_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_reserve_uuid_index ON public.reserves_out USING btree (reserve_uuid);
-
-
---
--- Name: INDEX reserves_out_reserve_uuid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_out_reserve_uuid_index IS 'for get_reserves_out';
-
-
---
--- Name: revolving_work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX revolving_work_shards_index ON public.revolving_work_shards USING btree (job_name, active, last_attempt);
-
-
---
--- Name: wire_fee_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_fee_gc_index ON public.wire_fee USING btree (end_date);
-
-
---
--- Name: work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX work_shards_index ON public.work_shards USING btree (job_name, completed, last_attempt);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_2722a34f_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_2722a34f_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka FOREIGN KEY (credit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_debit_account_id_5b1f7528_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_debit_account_id_5b1f7528_fk_app_banka FOREIGN KEY (debit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka FOREIGN KEY (selected_exchange_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka FOREIGN KEY (withdraw_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_uuid_fkey FOREIGN KEY (auditor_uuid) REFERENCES public.auditors(auditor_uuid) ON DELETE CASCADE;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auth_group_permissions auth_group_permissio_permission_id_84c5c92e_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissio_permission_id_84c5c92e_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_b120cbf9_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_permission auth_permission_content_type_id_2f476e4b_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_group_id_97559544_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_group_id_97559544_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_6a12ed8b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_6a12ed8b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: denomination_revocations denomination_revocations_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: deposits deposits_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: known_coins known_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auditor_exchange_signkeys master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchange_signkeys
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_reserve master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_aggregation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_deposit_confirmation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_coin master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_account_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserves master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserve_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserve_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_wire_fee_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_wire_fee_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_balance_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_balance_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_denomination_revenue master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_reserve_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_reserve_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: deposit_confirmations master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_predicted_result master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_predicted_result
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_inventory_locks merchant_inventory_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory_locks
- ADD CONSTRAINT merchant_inventory_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_keys merchant_keys_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_orders(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_refund_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_refund_serial_fkey FOREIGN KEY (refund_serial) REFERENCES public.merchant_refunds(refund_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pickup_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pickup_serial_fkey FOREIGN KEY (pickup_serial) REFERENCES public.merchant_tip_pickups(pickup_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_tip_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_tip_serial_fkey FOREIGN KEY (tip_serial) REFERENCES public.merchant_tips(tip_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tips merchant_tips_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfers merchant_transfers_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: recoup recoup_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: recoup_refresh recoup_refresh_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: recoup_refresh recoup_refresh_rrc_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_rrc_serial_fkey FOREIGN KEY (rrc_serial) REFERENCES public.refresh_revealed_coins(rrc_serial) ON DELETE CASCADE;
-
-
---
--- Name: recoup recoup_reserve_out_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_reserve_out_serial_id_fkey FOREIGN KEY (reserve_out_serial_id) REFERENCES public.reserves_out(reserve_out_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_commitments refresh_commitments_old_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_old_known_coin_id_fkey FOREIGN KEY (old_known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refunds refunds_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: reserves_close reserves_close_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_in reserves_in_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_out reserves_out_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: reserves_out reserves_out_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: signkey_revocations signkey_revocations_esk_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_esk_serial_fkey FOREIGN KEY (esk_serial) REFERENCES public.exchange_sign_keys(esk_serial) ON DELETE CASCADE;
-
-
---
--- Name: aggregation_tracking wire_out_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT wire_out_ref FOREIGN KEY (wtid_raw) REFERENCES public.wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/src/auditor/auditor.conf b/src/auditor/auditor.conf
index 270836283..3c04d196f 100644
--- a/src/auditor/auditor.conf
+++ b/src/auditor/auditor.conf
@@ -9,7 +9,7 @@ DB = postgres
#TINY_AMOUNT = KUDOS:0.01
# Where do we store the auditor's private key?
-AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
+AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}auditor/offline-keys/auditor.priv
# What is the public key of this auditor? Used for processes that
# verify auditor's signatures but have no access to the private key.
@@ -17,7 +17,7 @@ AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
# What is the Web site of the auditor (i.e. to file complaints about
# a misbehaving exchange)?
-# BASE_URL = https://auditor.taler.net/
+BASE_URL = http://localhost:8083/
# Network configuration for the normal API/service HTTP server
@@ -26,7 +26,7 @@ SERVE = tcp
# Unix domain socket to listen on,
# only effective with "SERVE = unix"
-UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
+UNIXPATH = ${TALER_RUNTIME_DIR}exchange.http
UNIXPATH_MODE = 660
# HTTP port the auditor listens to
diff --git a/src/auditor/batch.conf b/src/auditor/batch.conf
new file mode 100644
index 000000000..cd8c64b8e
--- /dev/null
+++ b/src/auditor/batch.conf
@@ -0,0 +1,183 @@
+[benchmark]
+MERCHANT_DETAILS = merchant_details.json
+BANK_DETAILS = bank_details.json
+
+[coin_kudos_10]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.03
+fee_deposit = TESTKUDOS:0.01
+fee_withdraw = TESTKUDOS:0.01
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:10
+
+[coin_kudos_8]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.04
+fee_refresh = TESTKUDOS:0.03
+fee_deposit = TESTKUDOS:0.02
+fee_withdraw = TESTKUDOS:0.05
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:8
+
+[coin_kudos_5]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.03
+fee_deposit = TESTKUDOS:0.01
+fee_withdraw = TESTKUDOS:0.01
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:5
+
+[coin_kudos_4]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.02
+fee_refresh = TESTKUDOS:0.04
+fee_deposit = TESTKUDOS:0.03
+fee_withdraw = TESTKUDOS:0.03
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:4
+
+[coin_kudos_2]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.02
+fee_refresh = TESTKUDOS:0.04
+fee_deposit = TESTKUDOS:0.03
+fee_withdraw = TESTKUDOS:0.03
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:2
+
+[coin_kudos_1]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.03
+fee_deposit = TESTKUDOS:0.02
+fee_withdraw = TESTKUDOS:0.02
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:1
+
+[coin_kudos_ct_10]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.03
+fee_deposit = TESTKUDOS:0.01
+fee_withdraw = TESTKUDOS:0.01
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:0.10
+
+[coin_kudos_ct_1]
+rsa_keysize = 1024
+CIPHER = RSA
+fee_refund = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.01
+fee_deposit = TESTKUDOS:0.01
+fee_withdraw = TESTKUDOS:0.01
+duration_legal = 3 years
+duration_spend = 2 years
+duration_withdraw = 7 days
+value = TESTKUDOS:0.01
+
+[payments-generator]
+exchange = http://localhost:8081/
+exchange-admin = http://localhost:18080/
+exchange_admin = http://localhost:18080/
+merchant = http://localhost:9966/
+bank = http://localhost:8082/
+instance = default
+currency = TESTKUDOS
+
+[merchant-exchange-default]
+CURRENCY = TESTKUDOS
+EXCHANGE_BASE_URL = http://localhost:8081/
+MASTER_KEY = 2XPQZ7B7EERWT7GR0MF30HPFG4TA1J0CWCQ3XBD48PA4K7GVDBK0
+
+[merchant-account-merchant]
+ACTIVE_default = YES
+HONOR_default = YES
+PAYTO_URI = payto://x-taler-bank/localhost/42
+
+[exchange-accountcredentials-1]
+PASSWORD = x
+USERNAME = Exchange
+WIRE_GATEWAY_AUTH_METHOD = basic
+WIRE_GATEWAY_URL = http://localhost:8082/accounts/Exchange/taler-wire-gateway/
+
+[exchange-account-1]
+enable_credit = yes
+enable_debit = yes
+PAYTO_URI = payto://x-taler-bank/localhost/Exchange
+
+[instance-default]
+NAME = Merchant Inc.
+KEYFILE = ${TALER_DATA_HOME}/merchant/default.priv
+
+[taler]
+CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
+CURRENCY = TESTKUDOS
+
+[merchantdb-postgres]
+CONFIG = postgres:///batch
+
+[merchant]
+DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10
+KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv
+DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1
+WIREFORMAT = default
+WIRE_TRANSFER_DELAY = 1 minute
+FORCE_AUDIT = YES
+UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http
+
+[exchangedb-postgres]
+CONFIG = postgres:///batch
+
+[exchange]
+LOOKAHEAD_SIGN = 32 weeks 1 day
+SIGNKEY_DURATION = 4 weeks
+MASTER_PUBLIC_KEY = 2XPQZ7B7EERWT7GR0MF30HPFG4TA1J0CWCQ3XBD48PA4K7GVDBK0
+SIGNKEY_LEGAL_DURATION = 4 weeks
+UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
+
+[bank]
+SERVE = http
+ALLOW_REGISTRATIONS = YES
+SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost:8082/2
+SUGGESTED_EXCHANGE = http://localhost:8081/
+HTTP_PORT = 8082
+MAX_DEBT_BANK = TESTKUDOS:100000.0
+MAX_DEBT = TESTKUDOS:50.0
+DATABASE = postgres:///batch
+
+[auditordb-postgres]
+CONFIG = postgres:///batch
+
+[auditor]
+PUBLIC_KEY = JG9QFRG7R7BH9701420BD6M38NZW21MV9AR3QHYJEAHZ4S26B3HG
+TINY_AMOUNT = TESTKUDOS:0.01
+BASE_URL = http://localhost:8083/
+
+[PATHS]
+TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
+TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
+TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
+TALER_HOME = ${PWD}/generate_auditordb_home/
diff --git a/src/auditor/batch.sh b/src/auditor/batch.sh
new file mode 100755
index 000000000..bbe1be0ba
--- /dev/null
+++ b/src/auditor/batch.sh
@@ -0,0 +1,235 @@
+#!/bin/bash
+set -eu
+
+# Cleanup to run whenever we exit
+function cleanup()
+{
+ for n in `jobs -p`
+ do
+ kill $n 2> /dev/null || true
+ done
+ wait
+}
+
+# Install cleanup handler (except for kill -9)
+trap cleanup EXIT
+
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+ echo $1
+ exit 77
+}
+
+# Where do we write the result?
+BASEDB=${1:-"batch"}
+
+# Name of the Postgres database we will use for the script.
+# Will be dropped, do NOT use anything that might be used
+# elsewhere
+export TARGET_DB=`basename ${BASEDB}`
+
+export WALLET_DB=${BASEDB:-"wallet"}.wdb
+
+# delete existing wallet database
+rm -f $WALLET_DB
+
+
+# Configuration file will be edited, so we create one
+# from the template.
+CONF=${BASEDB}.conf
+cp generate-auditor-basedb.conf $CONF
+
+
+echo -n "Testing for taler-fakebank-run"
+taler-fakebank-run -h >/dev/null </dev/null || exit_skip " MISSING"
+echo " FOUND"
+echo -n "Testing for taler-wallet-cli"
+taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING"
+echo " FOUND"
+echo -n "Testing for curl"
+curl --help >/dev/null </dev/null || exit_skip " MISSING"
+echo " FOUND"
+
+
+pwd
+# Clean up
+
+DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME`
+rm -rf $DATA_DIR || true
+
+# reset database
+dropdb $TARGET_DB >/dev/null 2>/dev/null || true
+createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
+
+
+# obtain key configuration data
+MASTER_PRIV_FILE=$(taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE)
+MASTER_PRIV_DIR=$(dirname $MASTER_PRIV_FILE)
+mkdir -p $MASTER_PRIV_DIR
+gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null
+MASTER_PUB=$(gnunet-ecc -p $MASTER_PRIV_FILE)
+EXCHANGE_URL=$(taler-config -c $CONF -s EXCHANGE -o BASE_URL)
+MERCHANT_PORT=$(taler-config -c $CONF -s MERCHANT -o PORT)
+MERCHANT_URL=http://localhost:${MERCHANT_PORT}/
+BANK_PORT=$(taler-config -c $CONF -s BANK -o HTTP_PORT)
+BANK_URL=http://localhost:${BANK_PORT}/
+AUDITOR_URL=http://localhost:8083/
+AUDITOR_PRIV_FILE=$(taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE)
+AUDITOR_PRIV_DIR=$(dirname $AUDITOR_PRIV_FILE)
+mkdir -p $AUDITOR_PRIV_DIR
+gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null
+AUDITOR_PUB=$(gnunet-ecc -p $AUDITOR_PRIV_FILE)
+
+echo "AUDITOR PUB is $AUDITOR_PUB using file $AUDITOR_PRIV_FILE"
+
+# patch configuration
+taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB
+taler-config -c $CONF -s auditor -o PUBLIC_KEY -V $AUDITOR_PUB
+taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB
+taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB
+taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB
+taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB
+taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB
+
+# setup exchange
+echo "Setting up exchange"
+taler-exchange-dbinit -c $CONF
+
+echo "Setting up merchant"
+taler-merchant-dbinit -c $CONF
+
+# setup auditor
+echo "Setting up auditor"
+taler-auditor-dbinit -c $CONF || exit_skip "Failed to initialize auditor DB"
+taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL || exit_skip "Failed to add exchange to auditor"
+
+# Launch services
+echo "Launching services"
+taler-fakebank-run -c $CONF &> taler-bank.log &
+TFN=`which taler-exchange-httpd`
+TBINPFX=`dirname $TFN`
+TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
+taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
+taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
+taler-exchange-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log &
+taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
+taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
+taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log &
+taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log &
+
+# Wait for all bank to be available (usually the slowest)
+for n in `seq 1 50`
+do
+ echo -n "."
+ sleep 0.2
+ OK=0
+ # bank
+ wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue
+ OK=1
+ break
+done
+
+if [ 1 != $OK ]
+then
+ exit_skip "Failed to launch services"
+fi
+
+# Wait for all services to be available
+for n in `seq 1 50`
+do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # exchange
+ wget http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue
+ # merchant
+ wget http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue
+ # Auditor
+ wget http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue
+ OK=1
+ break
+done
+
+if [ 1 != $OK ]
+then
+ exit_skip "Failed to launch services"
+fi
+echo " DONE"
+
+echo -n "Setting up keys"
+taler-exchange-offline -c $CONF \
+ download sign \
+ enable-account payto://x-taler-bank/localhost/Exchange \
+ enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \
+ wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 \
+ global-fee now TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 1h 1h 1year 5 \
+ upload &> taler-exchange-offline.log
+
+echo -n "."
+
+for n in `seq 1 2`
+do
+ echo -n "."
+ OK=0
+ wget --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue
+ OK=1
+ break
+done
+
+if [ 1 != $OK ]
+then
+ exit_skip "Failed to setup keys"
+fi
+
+echo " DONE"
+echo -n "Adding auditor signatures ..."
+
+taler-auditor-offline -c $CONF \
+ download sign upload &> taler-auditor-offline.log
+
+echo " DONE"
+# Setup merchant
+
+echo -n "Setting up merchant"
+
+curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' http://localhost:9966/management/instances
+
+
+echo " DONE"
+
+# run wallet CLI
+echo "Ready to run wallet"
+export WALLET_DB
+export EXCHANGE_URL
+export MERCHANT_URL
+export BANK_URL
+unset TALER_WALLET_INSECURE_TRUST_EXCHANGE
+export TALER_WALLET_BATCH_WITHDRAWAL=1
+echo 'taler-wallet-cli --wallet-db=$WALLET_DB -L TRACE advanced bench1 --config-json "{ \"exchange\": \"$EXCHANGE_URL\", \"bank\": \"${BANK_URL}\", \"currency\": \"TESTKUDOS\", \"payto\": \"payto://x-taler-bank/localhost/foo\", \"iterations\": 100000, \"deposits\": 10, \"restartAfter\": 2 }"'
+bash
+
+#taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'runIntegrationTest' \
+# "$(jq -n '
+# {
+# amountToSpend: "TESTKUDOS:4",
+# amountToWithdraw: "TESTKUDOS:10",
+# corebankApiBaseUrl: $BANK_URL,
+# exchangeBaseUrl: $EXCHANGE_URL,
+# merchantBaseUrl: $MERCHANT_URL,
+# }' \
+# --arg MERCHANT_URL "$MERCHANT_URL" \
+# --arg EXCHANGE_URL "$EXCHANGE_URL" \
+# --arg BANK_URL "$BANK_URL"
+# )" &> taler-wallet-cli.log
+
+
+echo "Shutting down services"
+cleanup
+
+# clean up
+echo "Final clean up"
+dropdb $TARGET_DB
+
+rm -rf $DATA_DIR || true
+exit 0
diff --git a/src/auditor/generate-auditor-basedb-template.conf b/src/auditor/generate-auditor-basedb-template.conf
deleted file mode 100644
index 1d18740c7..000000000
--- a/src/auditor/generate-auditor-basedb-template.conf
+++ /dev/null
@@ -1 +0,0 @@
-@INLINE@ generate-auditor-basedb.conf
diff --git a/src/auditor/generate-auditor-basedb.conf b/src/auditor/generate-auditor-basedb.conf
index e5de0b592..8cf63fbba 100644
--- a/src/auditor/generate-auditor-basedb.conf
+++ b/src/auditor/generate-auditor-basedb.conf
@@ -1,101 +1,123 @@
+[PATHS]
+TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
+TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
+TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
+TALER_HOME = ${PWD}/generate_auditordb_home/
+[taler]
+CURRENCY = TESTKUDOS
+CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
+
[exchange]
-MAX_KEYS_CACHING = forever
-DB = postgres
-SERVE = tcp
-UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
-UNIXPATH_MODE = 660
-PORT = 8081
-BASE_URL = http://localhost:8081/
+MASTER_PUBLIC_KEY = M4FGP18EQFXFGGFQ1AWXHACN2JX0SMVK9CNF6459Z1WG18JSN0BG
SIGNKEY_DURATION = 4 weeks
-SIGNKEY_LEGAL_DURATION = 4 weeks
LOOKAHEAD_SIGN = 32 weeks 1 day
+SIGNKEY_LEGAL_DURATION = 4 weeks
+AML_THRESHOLD = TESTKUDOS:1000000
+db = postgres
+BASE_URL = http://localhost:8081/
+IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
+LEGAL_RESERVE_EXPIRATION_TIME = 4 weeks
-[merchant]
-SERVE = tcp
-PORT = 9966
-UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http
-UNIXPATH_MODE = 660
-DEFAULT_WIRE_FEE_AMORTIZATION = 1
-DB = postgres
-WIREFORMAT = default
-# Set very low, so we can be sure that the database generated
-# will contain wire transfers "ready" for the aggregator.
-WIRE_TRANSFER_DELAY = 1 minute
-DEFAULT_PAY_DEADLINE = 1 day
-DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1
-KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv
-DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10
-
-# Ensure that merchant reports EVERY deposit confirmation to auditor
-FORCE_AUDIT = YES
-
-[instance-default]
-KEYFILE = ${TALER_DATA_HOME}/merchant/default.priv
-NAME = Merchant Inc.
+[exchangedb]
+IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
+LEGAL_RESERVE_EXPIRATION_TIME = 4 weeks
+AGGREGATOR_SHIFT = 1 s
+DEFAULT_PURSE_LIMIT = 1
-[auditor]
-DB = postgres
-AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
+[libeufin-bank]
+CURRENCY = TESTKUDOS
+DEFAULT_CUSTOMER_DEBT_LIMIT = TESTKUDOS:200
+DEFAULT_ADMIN_DEBT_LIMIT = TESTKUDOS:2000
+ALLOW_REGISTRATION = yes
+REGISTRATION_BONUS_ENABLED = yes
+REGISTRATION_BONUS = TESTKUDOS:100
+SUGGESTED_WITHDRAWAL_EXCHANGE = http://localhost:8081/
+WIRE_TYPE = iban
+IBAN_PAYTO_BIC = SANDBOXX
SERVE = tcp
-UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
-UNIXPATH_MODE = 660
-PORT = 8083
-BASE_URL = http://localhost:8083/
-TINY_AMOUNT = TESTKUDOS:0.01
+PORT = 8082
-[PATHS]
-TALER_HOME = ${PWD}/generate_auditordb_home/
-TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
-TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
-TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
-TALER_RUNTIME_DIR = ${TMPDIR:-${TMP:-/tmp}}/taler-system-runtime/
+[libeufin-bankdb-postgres]
+CONFIG = postgresql:///auditor-basedb
-[bank]
-DATABASE = postgres:///taler-auditor-basedb
-MAX_DEBT = TESTKUDOS:50.0
-MAX_DEBT_BANK = TESTKUDOS:100000.0
-HTTP_PORT = 8082
-SUGGESTED_EXCHANGE = http://localhost:8081/
-SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2
-ALLOW_REGISTRATIONS = YES
-SERVE = http
-
-[exchangedb]
+[exchangedb-postgres]
+CONFIG = postgres:///auditor-basedb
+SQL_DIR = $DATADIR/sql/exchange/
IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
-LEGAL_RESERVE_EXPIRATION_TIME = 7 years
-
-[taler]
-CURRENCY = TESTKUDOS
-CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
+LEGAL_RESERVE_EXPIRATION_TIME = 4 weeks
[exchange-account-1]
-PAYTO_URI = payto://x-taler-bank/localhost/Exchange
-enable_debit = yes
-enable_credit = yes
+PAYTO_URI = payto://iban/SANDBOXX/DE989651?receiver-name=Exchange+Company
+ENABLE_DEBIT = YES
+ENABLE_CREDIT = YES
[exchange-accountcredentials-1]
-WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/"
+WIRE_GATEWAY_URL = http://localhost:8082/accounts/exchange/taler-wire-gateway/
+WIRE_GATEWAY_AUTH_METHOD = basic
+USERNAME = exchange
+PASSWORD = x
+
+[exchange-account-2]
+PAYTO_URI = "payto://x-taler-bank/localhost/2?receiver-name=2"
+ENABLE_DEBIT = YES
+ENABLE_CREDIT = YES
+
+[exchange-accountcredentials-2]
+WIRE_GATEWAY_AUTH_METHOD = basic
+USERNAME = Exchange
+PASSWORD = x
+WIRE_GATEWAY_URL = "http://localhost:8082/accounts/2/taler-wire-gateway/"
+
+[admin-accountcredentials-2]
WIRE_GATEWAY_AUTH_METHOD = basic
+# For now, fakebank still checks against the Exchange account...
USERNAME = Exchange
PASSWORD = x
+WIRE_GATEWAY_URL = "http://localhost:8082/accounts/2/taler-wire-gateway/"
-[merchant-account-merchant]
-PAYTO_URI = payto://x-taler-bank/localhost/42
-HONOR_default = YES
-ACTIVE_default = YES
+
+[merchant]
+FORCE_AUDIT = YES
+SERVE = TCP
+PORT = 8888
+
+[merchantdb-postgres]
+CONFIG = postgres:///auditor-basedb
+SQL_DIR = $DATADIR/sql/merchant/
[merchant-exchange-default]
+MASTER_KEY = M4FGP18EQFXFGGFQ1AWXHACN2JX0SMVK9CNF6459Z1WG18JSN0BG
EXCHANGE_BASE_URL = http://localhost:8081/
CURRENCY = TESTKUDOS
-[payments-generator]
-currency = TESTKUDOS
-instance = default
-bank = http://localhost:8082/
-merchant = http://localhost:9966/
-exchange_admin = http://localhost:18080/
-exchange-admin = http://localhost:18080/
-exchange = http://localhost:8081/
+[bank]
+HTTP_PORT = 8082
+
+[libeufin-nexus]
+DB_CONNECTION="postgresql:///auditor-basedb"
+
+[libeufin-sandbox]
+DB_CONNECTION="postgresql:///auditor-basedb"
+
+[libeufin-bank]
+CURRENCY = TESTKUDOS
+DEFAULT_CUSTOMER_DEBT_LIMIT = TESTKUDOS:200 # dead
+DEFAULT_ADMIN_DEBT_LIMIT = TESTKUDOS:2000
+REGISTRATION_BONUS_ENABLED = yes
+REGISTRATION_BONUS = TESTKUDOS:100
+SUGGESTED_WITHDRAWAL_EXCHANGE = http://localhost:8081/
+SERVE = tcp
+PORT = 8082
+
+[auditor]
+BASE_URL = http://localhost:8083/
+TINY_AMOUNT = TESTKUDOS:0.01
+PUBLIC_KEY = 0EHPW5WEKHXPPN4MPJNGA7Z6D29JP21GKVNV8ARFB1YW7WWJX20G
+db = postgres
+
+[auditordb-postgres]
+CONFIG = postgres:///auditor-basedb
+SQL_DIR = $DATADIR/sql/auditor/
[coin_kudos_ct_1]
value = TESTKUDOS:0.01
@@ -106,6 +128,7 @@ fee_withdraw = TESTKUDOS:0.01
fee_deposit = TESTKUDOS:0.01
fee_refresh = TESTKUDOS:0.01
fee_refund = TESTKUDOS:0.01
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_ct_10]
@@ -117,6 +140,7 @@ fee_withdraw = TESTKUDOS:0.01
fee_deposit = TESTKUDOS:0.01
fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.01
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_1]
@@ -128,6 +152,7 @@ fee_withdraw = TESTKUDOS:0.02
fee_deposit = TESTKUDOS:0.02
fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.01
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_2]
@@ -139,6 +164,7 @@ fee_withdraw = TESTKUDOS:0.03
fee_deposit = TESTKUDOS:0.03
fee_refresh = TESTKUDOS:0.04
fee_refund = TESTKUDOS:0.02
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_4]
@@ -150,6 +176,7 @@ fee_withdraw = TESTKUDOS:0.03
fee_deposit = TESTKUDOS:0.03
fee_refresh = TESTKUDOS:0.04
fee_refund = TESTKUDOS:0.02
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_5]
@@ -161,6 +188,7 @@ fee_withdraw = TESTKUDOS:0.01
fee_deposit = TESTKUDOS:0.01
fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.01
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_8]
@@ -172,6 +200,7 @@ fee_withdraw = TESTKUDOS:0.05
fee_deposit = TESTKUDOS:0.02
fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.04
+CIPHER = RSA
rsa_keysize = 1024
[coin_kudos_10]
@@ -183,8 +212,5 @@ fee_withdraw = TESTKUDOS:0.01
fee_deposit = TESTKUDOS:0.01
fee_refresh = TESTKUDOS:0.03
fee_refund = TESTKUDOS:0.01
+CIPHER = RSA
rsa_keysize = 1024
-
-[benchmark]
-BANK_DETAILS = bank_details.json
-MERCHANT_DETAILS = merchant_details.json
diff --git a/src/auditor/generate-auditor-basedb.sh b/src/auditor/generate-auditor-basedb.sh
index 140c6237e..bbce37cdc 100755
--- a/src/auditor/generate-auditor-basedb.sh
+++ b/src/auditor/generate-auditor-basedb.sh
@@ -1,217 +1,114 @@
#!/bin/bash
-# Script to generate the basic database for auditor
-# testing from a 'correct' interaction between exchange,
-# wallet and merchant.
+# This file is in the public domain.
#
-# Creates $BASEDB.sql, $BASEDB.fees, $BASEDB.mpub and
-# $BASEDB.age.
-# Default $BASEDB is "auditor-basedb", override via $1.
+# Script to generate the basic database for auditor testing from a 'correct'
+# interaction between exchange, wallet and merchant.
#
-# Currently must be run online as it interacts with
-# bank.test.taler.net; also requires the wallet CLI
-# to be installed and in the path. Furthermore, the
-# user running this script must be Postgres superuser
-# and be allowed to create/drop databases.
+# Creates "$1.sql".
+#
+# Requires the wallet CLI to be installed and in the path. Furthermore, the
+# user running this script must be Postgres superuser and be allowed to
+# create/drop databases.
#
set -eu
-# Cleanup to run whenever we exit
-function cleanup()
-{
- for n in `jobs -p`
- do
- kill $n 2> /dev/null || true
- done
- wait
-}
-
-# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
-
-
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+. setup.sh
+
+CONF="generate-auditor-basedb.conf"
+# Parse command-line options
+while getopts ':c:d:h' OPTION; do
+ case "$OPTION" in
+ c)
+ CONF="$OPTARG"
+ ;;
+ d)
+ BASEDB="$OPTARG"
+ ;;
+ h)
+ echo 'Supported options:'
+# shellcheck disable=SC2016
+ echo ' -c $CONF -- set configuration'
+# shellcheck disable=SC2016
+ echo ' -d $DB -- set database name'
+ ;;
+ ?)
+ exit_fail "Unrecognized command line option"
+ ;;
+ esac
+done
# Where do we write the result?
-BASEDB=${1:-"auditor-basedb"}
-
-# Name of the Postgres database we will use for the script.
-# Will be dropped, do NOT use anything that might be used
-# elsewhere
-TARGET_DB=taler-auditor-basedb
-
-WALLET_DB=${BASEDB:-"wallet"}.wdb
-
-# delete existing wallet database
-rm -f $WALLET_DB
-
-
-# Configuration file will be edited, so we create one
-# from the template.
-CONF=generate-auditor-basedb-prod.conf
-cp generate-auditor-basedb-template.conf $CONF
-
+if [ ! -v BASEDB ]
+then
+ exit_fail "-d option required"
+fi
-echo -n "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip " MISSING"
-echo " FOUND"
-echo -n "Testing for taler-wallet-cli"
-taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING"
+echo -n "Testing for curl ..."
+curl --help >/dev/null </dev/null || exit_skip " MISSING"
echo " FOUND"
-
-
-# Clean up
-
-DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME`
-rm -rf $DATA_DIR || true
-
# reset database
-dropdb $TARGET_DB >/dev/null 2>/dev/null || true
-createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
+echo -n "Reset 'auditor-basedb' database at $PGHOST ..."
+dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB' at $PGHOST"
+echo " DONE"
+# Launch exchange, merchant and bank.
+setup -c "$CONF" \
+ -abemw \
+ -d "iban"
# obtain key configuration data
-MASTER_PRIV_FILE=`taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE`
-MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE`
-mkdir -p $MASTER_PRIV_DIR
-gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null
-MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE`
-EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL`
-MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT`
-MERCHANT_URL=http://localhost:${MERCHANT_PORT}/
-BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT`
-BANK_URL=http://localhost:${BANK_PORT}/
-AUDITOR_URL=http://localhost:8083/
-AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE`
-AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE`
-mkdir -p $AUDITOR_PRIV_DIR
-gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null
-AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE`
-
-# patch configuration
-taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB
-taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB
-taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB
-
-# setup exchange
-echo "Setting up exchange"
-taler-exchange-dbinit -c $CONF
-
-echo "Setting up merchant"
-taler-merchant-dbinit -c $CONF
-
-# setup auditor
-echo "Setting up auditor"
-taler-auditor-dbinit -c $CONF || exit_skip "Failed to initialize auditor DB"
-taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL || exit_skip "Failed to add exchange to auditor"
-
-# Launch services
-echo "Launching services"
-taler-bank-manage-testing $CONF postgres:///$TARGET_DB serve &> taler-bank.log &
-TFN=`which taler-exchange-httpd`
-TBINPFX=`dirname $TFN`
-TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
-taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
-taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
-taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
-taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
-taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log &
-taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log &
-
-# Wait for all bank to be available (usually the slowest)
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.2
- OK=0
- # bank
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to launch services"
-fi
-
-# Wait for all services to be available
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.1
- OK=0
- # exchange
- wget http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue
- # merchant
- wget http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue
- # Auditor
- wget http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to launch services"
-fi
+EXCHANGE_URL=$(taler-config -c "$CONF" -s EXCHANGE -o BASE_URL)
+MERCHANT_PORT=$(taler-config -c "$CONF" -s MERCHANT -o PORT)
+MERCHANT_URL="http://localhost:${MERCHANT_PORT}/"
+BANK_PORT=$(taler-config -c "$CONF" -s BANK -o HTTP_PORT)
+BANK_URL="http://localhost:${BANK_PORT}"
+
+echo -n "Checking setup worked ..."
+wget \
+ --tries=1 \
+ --timeout=1 \
+ "${EXCHANGE_URL}config" \
+ -o /dev/null \
+ -O /dev/null >/dev/null
+echo "DONE"
+
+export MERCHANT_URL
+echo -n "Setting up merchant ..."
+
+curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000},"use_stefan":false}' "${MERCHANT_URL}management/instances"
echo " DONE"
-echo -n "Setting up keys"
-taler-exchange-offline -c $CONF \
- download sign \
- enable-account payto://x-taler-bank/localhost/Exchange \
- enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \
- wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 \
- upload &> taler-exchange-offline.log
-
-echo -n "."
-
-for n in `seq 1 2`
-do
- echo -n "."
- OK=0
- # bank
- wget --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
+echo -n "Setting up merchant account ..."
+FORTYTHREE="payto://iban/SANDBOXX/DE474361?receiver-name=Merchant43"
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ "${MERCHANT_URL}private/accounts" \
+ -d '{"payto_uri":"'"$FORTYTHREE"'"}' \
+ -w "%{http_code}" -s -o /dev/null)
-if [ 1 != $OK ]
+if [ "$STATUS" != "200" ]
then
- exit_skip "Failed to setup keys"
+ exit_fail "Expected 200 OK. Got: $STATUS"
fi
-
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
-
-echo " DONE"
-# Setup merchant
-
-echo -n "Setting up merchant"
-
-curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/management/instances
-
-
echo " DONE"
-# run wallet CLI
-echo "Running wallet"
-
-
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'runIntegrationTest' \
+# delete existing wallet database
+export WALLET_DB="wallet.wdb"
+rm -f "$WALLET_DB"
+
+echo -n "Running wallet ..."
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ api \
+ --expect-success \
+ 'runIntegrationTest' \
"$(jq -n '
{
amountToSpend: "TESTKUDOS:4",
amountToWithdraw: "TESTKUDOS:10",
- bankBaseUrl: $BANK_URL,
+ corebankApiBaseUrl: $BANK_URL,
exchangeBaseUrl: $EXCHANGE_URL,
merchantBaseUrl: $MERCHANT_URL,
}' \
@@ -219,28 +116,28 @@ taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'runIntegrationTest' \
--arg EXCHANGE_URL "$EXCHANGE_URL" \
--arg BANK_URL "$BANK_URL"
)" &> taler-wallet-cli.log
+echo " DONE"
-
-echo "Shutting down services"
-cleanup
+taler-wallet-cli --wallet-db="$WALLET_DB" run-until-done
# Dump database
-echo "Dumping database"
-pg_dump -O $TARGET_DB | sed -e '/AS integer/d' > ${BASEDB}.sql
-
-echo $MASTER_PUB > ${BASEDB}.mpub
+mkdir -p "$(dirname "$BASEDB")"
-date +%s > ${BASEDB}.age
+echo "Dumping database ${BASEDB}.sql"
+pg_dump -O "auditor-basedb" | sed -e '/AS integer/d' > "${BASEDB}.sql"
+cp "${CONF}.edited" "${BASEDB}.conf"
+cp "$(taler-config -c "${CONF}.edited" -s exchange-offline -o MASTER_PRIV_FILE -f)" "${BASEDB}.mpriv"
# clean up
-echo "Final clean up"
-dropdb $TARGET_DB
-
-rm -rf $DATA_DIR || true
-rm $CONF
+echo -n "Final clean up ..."
+kill -TERM "$SETUP_PID"
+wait
+unset SETUP_PID
+dropdb "auditor-basedb"
+echo " DONE"
echo "====================================="
-echo " Finished generation of $BASEDB"
+echo "Finished generation of ${BASEDB}.sql"
echo "====================================="
exit 0
diff --git a/src/auditor/generate-kyc-basedb.conf b/src/auditor/generate-kyc-basedb.conf
new file mode 100644
index 000000000..7f4a55cee
--- /dev/null
+++ b/src/auditor/generate-kyc-basedb.conf
@@ -0,0 +1,4 @@
+# This file is in the public domain.
+@INLINE@ generate-auditor-basedb.conf
+
+# FIXME: add options for KYC here! \ No newline at end of file
diff --git a/src/auditor/generate-revoke-basedb.sh b/src/auditor/generate-revoke-basedb.sh
index b7499c846..29aa74b27 100755
--- a/src/auditor/generate-revoke-basedb.sh
+++ b/src/auditor/generate-revoke-basedb.sh
@@ -6,257 +6,138 @@
# create/drop databases.
#
set -eu
+# set -x
-# Cleanup to run whenever we exit
-function cleanup()
-{
- for n in `jobs -p`
- do
- kill $n 2> /dev/null || true
- done
- wait
-}
-
-# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
-
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+. setup.sh
-# Where do we write the result?
-export BASEDB=${1:-"revoke-basedb"}
-
-# Name of the Postgres database we will use for the script.
-# Will be dropped, do NOT use anything that might be used
-# elsewhere
-export TARGET_DB=taler-auditor-revokedb
-TMP_DIR=`mktemp -d revocation-tmp-XXXXXX`
-export WALLET_DB=wallet-revocation.json
-rm -f $WALLET_DB
-
-# Configuration file will be edited, so we create one
-# from the template.
-export CONF=generate-auditor-basedb-revocation.conf
-cp generate-auditor-basedb-template.conf $CONF
-
-
-echo -n "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip " MISSING"
+echo -n "Testing for curl ..."
+curl --help >/dev/null </dev/null || exit_skip " MISSING"
echo " FOUND"
-echo -n "Testing for taler-wallet-cli"
-taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING"
-echo " FOUND"
-
-
-# Clean up
-DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME`
-rm -rf $DATA_DIR || true
+CONF="generate-auditor-basedb.conf"
# reset database
-dropdb $TARGET_DB >/dev/null 2>/dev/null || true
-createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
-
-# obtain key configuration data
-MASTER_PRIV_FILE=`taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE`
-MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE`
-mkdir -p $MASTER_PRIV_DIR
-gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null
-export MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE`
-export EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL`
-MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT`
-export MERCHANT_URL=http://localhost:${MERCHANT_PORT}/
-BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT`
-export BANK_URL=http://localhost:${BANK_PORT}/
-export AUDITOR_URL=http://localhost:8083/
-AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE`
-AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE`
-mkdir -p $AUDITOR_PRIV_DIR
-gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null
-AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE`
-
-# patch configuration
-taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB
-taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB
-taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB
-taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB
-taler-config -c $CONF -s exchange -o KEYDIR -V "${TMP_DIR}/keydir/"
-taler-config -c $CONF -s exchange -o REVOCATION_DIR -V "${TMP_DIR}/revdir/"
-
-# setup exchange
-echo "Setting up exchange"
-taler-exchange-dbinit -c $CONF
-
-echo "Setting up merchant"
-taler-merchant-dbinit -c $CONF
-
-# setup auditor
-echo "Setting up auditor"
-taler-auditor-dbinit -c $CONF
-taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL
-
-# Launch services
-echo "Launching services"
-taler-bank-manage-testing $CONF postgres:///$TARGET_DB serve &> revocation-bank.log &
-TFN=`which taler-exchange-httpd`
-TBINPFX=`dirname $TFN`
-TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
-taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
-SIGNKEY_HELPER_PID=$!
-taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
-DENOM_HELPER_PID=$!
-taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
-EXCHANGE_PID=$!
-taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
-MERCHANT_PID=$!
-taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log &
-taler-auditor-httpd -c $CONF 2> taler-auditor-httpd.log &
-
-# Wait for all bank to be available (usually the slowest)
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.2
- OK=0
- # bank
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to launch services"
-fi
-
-# Wait for all other services to be available
-for n in `seq 1 50`
-do
- echo -n "."
- sleep 0.1
- OK=0
- # exchange
- wget http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue
- # merchant
- wget http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue
- # Auditor
- wget http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- cleanup
- exit_skip "Failed to launch services"
-fi
+echo -n "Reset 'auditor-basedb' database ..."
+dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB'"
echo " DONE"
-echo -n "Setting up keys"
-
-taler-exchange-offline -c $CONF \
- download sign \
- enable-account payto://x-taler-bank/localhost/Exchange \
- enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \
- wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 \
- upload &> taler-exchange-offline.log
-
-echo -n "."
-
-for n in `seq 1 2`
-do
- echo -n "."
- OK=0
- # bank
- wget --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue
- OK=1
- break
-done
-
-if [ 1 != $OK ]
-then
- exit_skip "Failed to setup keys"
-fi
-
+# Launch exchange, merchant and bank.
+setup -c "$CONF" \
+ -abemw \
+ -d "iban"
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
+# obtain key configuration data
+EXCHANGE_URL=$(taler-config -c "$CONF" -s EXCHANGE -o BASE_URL)
+MERCHANT_PORT=$(taler-config -c "$CONF" -s MERCHANT -o PORT)
+MERCHANT_URL="http://localhost:${MERCHANT_PORT}/"
+BANK_PORT=$(taler-config -c "$CONF" -s BANK -o HTTP_PORT)
+BANK_URL="http://localhost:${BANK_PORT}"
-echo " DONE"
# Setup merchant
-echo -n "Setting up merchant"
-
-curl -H "Content-Type: application/json" -X POST -d '{"payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/management/instances
+echo -n "Setting up merchant ..."
+curl -H "Content-Type: application/json" -X POST -d '{"auth": {"method": "external"}, "accounts":[{"payto_uri":"payto://iban/SANDBOXX/DE474361?receiver-name=Merchant43"}],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000},"use_stefan":true}' "${MERCHANT_URL}management/instances"
+echo " DONE"
# run wallet CLI
echo "Running wallet"
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'withdrawTestBalance' \
+export WALLET_DB="wallet.wdb"
+rm -f "$WALLET_DB"
+
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ api \
+ --expect-success 'withdrawTestBalance' \
"$(jq -n '
{
amount: "TESTKUDOS:8",
- bankBaseUrl: $BANK_URL,
+ corebankApiBaseUrl: $BANK_URL,
exchangeBaseUrl: $EXCHANGE_URL,
}' \
- --arg BANK_URL $BANK_URL \
- --arg EXCHANGE_URL $EXCHANGE_URL
- )"
+ --arg BANK_URL "$BANK_URL" \
+ --arg EXCHANGE_URL "$EXCHANGE_URL"
+ )" &> taler-wallet-cli-withdraw.log
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ run-until-done \
+ &> taler-wallet-cli-withdraw-finish.log
-export coins=$(taler-wallet-cli --wallet-db=$WALLET_DB advanced dump-coins)
+export COINS=$(taler-wallet-cli --wallet-db="$WALLET_DB" advanced dump-coins)
echo -n "COINS are:"
-echo $coins
+echo "$COINS"
# Find coin we want to revoke
-export rc=$(echo "$coins" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .coin_pub')
+export rc=$(echo "$COINS" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .coin_pub')
# Find the denom
-export rd=$(echo "$coins" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .denom_pub_hash')
-echo "Revoking denomination ${rd} (to affect coin ${rc})"
+export rd=$(echo "$COINS" | jq -r '[.coins[] | select((.denom_value == "TESTKUDOS:2"))][0] | .denom_pub_hash')
+echo -n "Revoking denomination ${rd} (to affect coin ${rc}) ..."
# Find all other coins, which will be suspended
-export susp=$(echo "$coins" | jq --arg rc "$rc" '[.coins[] | select(.coin_pub != $rc) | .coin_pub]')
+export susp=$(echo "$COINS" | jq --arg rc "$rc" '[.coins[] | select(.coin_pub != $rc) | .coin_pub]')
# Do the revocation
-taler-exchange-offline -c $CONF \
- revoke-denomination "${rd}" upload &> taler-exchange-offline-revoke.log
-
+taler-exchange-offline \
+ -c $CONF \
+ revoke-denomination "${rd}" \
+ upload \
+ &> taler-exchange-offline-revoke.log
+echo "DONE"
+
+echo -n "Signing replacement keys ..."
sleep 1 # Give exchange time to create replacmenent key
# Re-sign replacement keys
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
+taler-auditor-offline \
+ -c $CONF \
+ download \
+ sign \
+ upload \
+ &> taler-auditor-offline-reinit.log
+echo " DONE"
# Now we suspend the other coins, so later we will pay with the recouped coin
-taler-wallet-cli --wallet-db=$WALLET_DB advanced suspend-coins "$susp"
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB" \
+ advanced \
+ suspend-coins "$susp"
# Update exchange /keys so recoup gets scheduled
-taler-wallet-cli --wallet-db=$WALLET_DB exchanges update \
- -f $EXCHANGE_URL
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB" \
+ exchanges \
+ update \
+ -f "$EXCHANGE_URL"
# Block until scheduled operations are done
-taler-wallet-cli --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB"\
+ run-until-done
-# Now we buy something, only the coins resulting from recouped will be
+# Now we buy something, only the coins resulting from recoup will be
# used, as other ones are suspended
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'testPay' \
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ api \
+ 'testPay' \
"$(jq -n '
{
amount: "TESTKUDOS:1",
merchantBaseUrl: $MERCHANT_URL,
summary: "foo",
}' \
- --arg MERCHANT_URL $MERCHANT_URL
+ --arg MERCHANT_URL "$MERCHANT_URL"
)"
-taler-wallet-cli --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
echo "Purchase with recoup'ed coin (via reserve) done"
@@ -269,21 +150,21 @@ echo "Will refresh coin ${rrc} of denomination ${zombie_denom}"
# Find all other coins, which will be suspended
export susp=$(echo "$coins" | jq --arg rrc "$rrc" '[.coins[] | select(.coin_pub != $rrc) | .coin_pub]')
-export rrc
-export zombie_denom
-
# Travel into the future! (must match DURATION_WITHDRAW option)
export TIMETRAVEL="--timetravel=604800000000"
echo "Launching exchange 1 week in the future"
kill -TERM $EXCHANGE_PID
-kill -TERM $DENOM_HELPER_PID
+kill -TERM $RSA_DENOM_HELPER_PID
+kill -TERM $CS_DENOM_HELPER_PID
kill -TERM $SIGNKEY_HELPER_PID
-taler-exchange-secmod-eddsa $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-eddsa.log &
+taler-exchange-secmod-eddsa $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-secmod-eddsa.log &
SIGNKEY_HELPER_PID=$!
-taler-exchange-secmod-rsa $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-rsa.log &
-DENOM_HELPER_PID=$!
-taler-exchange-httpd $TIMETRAVEL -c $CONF 2> taler-exchange-httpd.log &
+taler-exchange-secmod-rsa $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-secmod-rsa.log &
+RSA_DENOM_HELPER_PID=$!
+taler-exchange-secmod-cs $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-secmod-cs.log &
+CS_DENOM_HELPER_PID=$!
+taler-exchange-httpd $TIMETRAVEL -c $CONF 2> ${MY_TMP_DIR}/taler-exchange-httpd.log &
export EXCHANGE_PID=$!
# Wait for exchange to be available
@@ -299,8 +180,15 @@ do
done
echo "Refreshing coin $rrc"
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB advanced force-refresh "$rrc"
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ advanced force-refresh \
+ "$rrc"
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
# Update our list of the coins
export coins=$(taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB advanced dump-coins)
@@ -323,29 +211,49 @@ export susp=$(echo "$coins" | jq --arg freshc "$freshc" '[.coins[] | select(.coi
# Do the revocation of freshc
echo "Revoking ${fresh_denom} (to affect coin ${freshc})"
-taler-exchange-offline -c $CONF \
- revoke-denomination "${fresh_denom}" upload &> taler-exchange-offline-revoke-2.log
+taler-exchange-offline \
+ -c "$CONF" \
+ revoke-denomination \
+ "${fresh_denom}" \
+ upload &> taler-exchange-offline-revoke-2.log
sleep 1 # Give exchange time to create replacmenent key
# Re-sign replacement keys
-taler-auditor-offline -c $CONF \
- download sign upload &> taler-auditor-offline.log
+taler-auditor-offline \
+ -c "$CONF" \
+ download \
+ sign \
+ upload &> taler-auditor-offline.log
# Now we suspend the other coins, so later we will pay with the recouped coin
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB advanced suspend-coins "$susp"
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ advanced \
+ suspend-coins "$susp"
# Update exchange /keys so recoup gets scheduled
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB exchanges update \
- -f $EXCHANGE_URL
+taler-wallet-cli \
+ "$TIMETRAVEL"\
+ --wallet-db="$WALLET_DB" \
+ exchanges update \
+ -f "$EXCHANGE_URL"
# Block until scheduled operations are done
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
echo "Restarting merchant (so new keys are known)"
kill -TERM $MERCHANT_PID
-taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
+taler-merchant-httpd \
+ -c "$CONF" \
+ -L INFO \
+ 2> ${MY_TMP_DIR}/taler-merchant-httpd.log &
MERCHANT_PID=$!
+
# Wait for merchant to be again available
for n in `seq 1 50`
do
@@ -369,30 +277,35 @@ taler-wallet-cli $TIMETRAVEL --no-throttle --wallet-db=$WALLET_DB api 'testPay'
}' \
--arg MERCHANT_URL $MERCHANT_URL
)"
-taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB run-until-done
+taler-wallet-cli \
+ "$TIMETRAVEL" \
+ --wallet-db="$WALLET_DB" \
+ run-until-done
echo "Bought something with refresh-recouped coin"
echo "Shutting down services"
-cleanup
+exit_cleanup
-# Dump database
-echo "Dumping database"
-pg_dump -O $TARGET_DB | sed -e '/AS integer/d' > ${BASEDB}.sql
+# Where do we write the result?
+export BASEDB=${1:-"revoke-basedb"}
-echo $MASTER_PUB > ${BASEDB}.mpub
-date +%s > ${BASEDB}.age
+
+# Dump database
+echo "Dumping database ${BASEDB}.sql"
+pg_dump -O "auditor-basedb" | sed -e '/AS integer/d' > "${BASEDB}.sql"
# clean up
-echo "Final clean up"
-dropdb $TARGET_DB
-rm -rf $DATA_DIR || true
-rm -f $CONF
-rm -r $TMP_DIR
+echo -n "Final clean up ..."
+kill -TERM "$SETUP_PID"
+wait
+unset SETUP_PID
+dropdb "auditor-basedb"
+echo " DONE"
echo "====================================="
-echo " Finished revocation DB generation "
+echo "Finished generation of ${BASEDB}.sql"
echo "====================================="
exit 0
diff --git a/src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv b/src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv
new file mode 100644
index 000000000..85195dd8f
--- /dev/null
+++ b/src/auditor/generate_auditordb_home/.local/share/taler/exchange-offline/master.priv
@@ -0,0 +1 @@
+%I7qYÿ®ÜX˜2@–šò%'1†”ÂOàÔæJ³Ô¦‘ \ No newline at end of file
diff --git a/src/auditor/report-lib.c b/src/auditor/report-lib.c
index 4addce9e2..d0e1325ea 100644
--- a/src/auditor/report-lib.c
+++ b/src/auditor/report-lib.c
@@ -62,13 +62,18 @@ struct TALER_AuditorPublicKeyP TALER_ARL_auditor_pub;
char *TALER_ARL_auditor_url;
/**
+ * REST API endpoint of the exchange.
+ */
+char *TALER_ARL_exchange_url;
+
+/**
* At what time did the auditor process start?
*/
struct GNUNET_TIME_Absolute start_time;
/**
* Results about denominations, cached per-transaction, maps denomination pub hashes
- * to `struct TALER_DenominationKeyValidityPS`.
+ * to `const struct TALER_EXCHANGEDB_DenominationKeyInformation`.
*/
static struct GNUNET_CONTAINER_MultiHashMap *denominations;
@@ -89,13 +94,6 @@ static struct GNUNET_SIGNAL_Context *sig_int;
static struct GNUNET_SIGNAL_Context *sig_term;
-/**
- * Test if the audit should be aborted because the user
- * pressed CTRL-C.
- *
- * @return false to continue the audit, true to terminate
- * cleanly as soon as possible
- */
bool
TALER_ARL_do_abort (void)
{
@@ -103,12 +101,6 @@ TALER_ARL_do_abort (void)
}
-/**
- * Add @a object to the report @a array. Fail hard if this fails.
- *
- * @param array report array to append @a object to
- * @param object object to append, should be check that it is not NULL
- */
void
TALER_ARL_report (json_t *array,
json_t *object)
@@ -127,74 +119,55 @@ TALER_ARL_report (json_t *array,
*
* @param cls closure, NULL
* @param denom_pub public key, sometimes NULL (!)
- * @param validity issuing information with value, fees and other info about the denomination.
+ * @param issue issuing information with value, fees and other info about the denomination.
*/
static void
add_denomination (
void *cls,
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_EXCHANGEDB_DenominationKeyInformationP *validity)
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue)
{
- const struct TALER_DenominationKeyValidityPS *issue = &validity->properties;
-
(void) cls;
(void) denom_pub;
if (NULL !=
GNUNET_CONTAINER_multihashmap_get (denominations,
- &issue->denom_hash))
+ &issue->denom_hash.hash))
return; /* value already known */
#if GNUNET_EXTRA_LOGGING >= 1
{
- struct TALER_Amount value;
-
- TALER_amount_ntoh (&value,
- &issue->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Tracking denomination `%s' (%s)\n",
- GNUNET_h2s (&issue->denom_hash),
- TALER_amount2s (&value));
- TALER_amount_ntoh (&value,
- &issue->fee_withdraw);
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (&issue->value));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Withdraw fee is %s\n",
- TALER_amount2s (&value));
+ TALER_amount2s (&issue->fees.withdraw));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Start time is %s\n",
- GNUNET_STRINGS_absolute_time_to_string
- (GNUNET_TIME_absolute_ntoh (issue->start)));
+ GNUNET_TIME_timestamp2s (issue->start));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Expire deposit time is %s\n",
- GNUNET_STRINGS_absolute_time_to_string
- (GNUNET_TIME_absolute_ntoh (issue->expire_deposit)));
+ GNUNET_TIME_timestamp2s (issue->expire_deposit));
}
#endif
{
- struct TALER_DenominationKeyValidityPS *i;
+ struct TALER_EXCHANGEDB_DenominationKeyInformation *i;
- i = GNUNET_new (struct TALER_DenominationKeyValidityPS);
+ i = GNUNET_new (struct TALER_EXCHANGEDB_DenominationKeyInformation);
*i = *issue;
- i->master = TALER_ARL_master_pub;
GNUNET_assert (GNUNET_OK ==
GNUNET_CONTAINER_multihashmap_put (denominations,
- &issue->denom_hash,
+ &issue->denom_hash.hash,
i,
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
}
}
-/**
- * Obtain information about a @a denom_pub.
- *
- * @param dh hash of the denomination public key to look up
- * @param[out] issue set to detailed information about @a denom_pub, NULL if not found, must
- * NOT be freed by caller
- * @return transaction status code
- */
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info_by_hash (
- const struct GNUNET_HashCode *dh,
- const struct TALER_DenominationKeyValidityPS **issue)
+ const struct TALER_DenominationHashP *dh,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue)
{
enum GNUNET_DB_QueryStatus qs;
@@ -207,15 +180,16 @@ TALER_ARL_get_denomination_info_by_hash (
NULL);
if (0 > qs)
{
+ GNUNET_break (0);
*issue = NULL;
return qs;
}
}
{
- const struct TALER_DenominationKeyValidityPS *i;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *i;
i = GNUNET_CONTAINER_multihashmap_get (denominations,
- dh);
+ &dh->hash);
if (NULL != i)
{
/* cache hit */
@@ -225,13 +199,14 @@ TALER_ARL_get_denomination_info_by_hash (
}
/* maybe database changed since we last iterated, give it one more shot */
{
- struct TALER_EXCHANGEDB_DenominationKeyInformationP issue;
+ struct TALER_EXCHANGEDB_DenominationKeyInformation issue;
qs = TALER_ARL_edb->get_denomination_info (TALER_ARL_edb->cls,
dh,
&issue);
if (qs <= 0)
{
+ GNUNET_break (qs >= 0);
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Denomination %s not found\n",
@@ -243,10 +218,10 @@ TALER_ARL_get_denomination_info_by_hash (
&issue);
}
{
- const struct TALER_DenominationKeyValidityPS *i;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *i;
i = GNUNET_CONTAINER_multihashmap_get (denominations,
- dh);
+ &dh->hash);
if (NULL != i)
{
/* cache hit */
@@ -262,27 +237,18 @@ TALER_ARL_get_denomination_info_by_hash (
}
-/**
- * Obtain information about a @a denom_pub.
- *
- * @param denom_pub key to look up
- * @param[out] issue set to detailed information about @a denom_pub, NULL if not found, must
- * NOT be freed by caller
- * @param[out] dh set to the hash of @a denom_pub, may be NULL
- * @return transaction status code
- */
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info (
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DenominationKeyValidityPS **issue,
- struct GNUNET_HashCode *dh)
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue,
+ struct TALER_DenominationHashP *dh)
{
- struct GNUNET_HashCode hc;
+ struct TALER_DenominationHashP hc;
if (NULL == dh)
dh = &hc;
- GNUNET_CRYPTO_rsa_public_key_hash (denom_pub->rsa_public_key,
- dh);
+ TALER_denom_pub_hash (denom_pub,
+ dh);
return TALER_ARL_get_denomination_info_by_hash (dh,
issue);
}
@@ -294,11 +260,11 @@ TALER_ARL_get_denomination_info (
*
* @param analysis analysis to run
* @param analysis_cls closure for @a analysis
- * @return #GNUNET_OK if @a analysis succeessfully committed,
+ * @return #GNUNET_OK if @a analysis successfully committed,
* #GNUNET_NO if we had an error on commit (retry may help)
* #GNUNET_SYSERR on hard errors
*/
-static int
+static enum GNUNET_GenericReturnValue
transact (TALER_ARL_Analysis analysis,
void *analysis_cls)
{
@@ -369,14 +335,7 @@ transact (TALER_ARL_Analysis analysis,
}
-/**
- * Initialize DB sessions and run the analysis.
- *
- * @param ana analysis to run
- * @param ana_cls closure for @a ana
- * @return #GNUNET_OK on success
- */
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_setup_sessions_and_run (TALER_ARL_Analysis ana,
void *ana_cls)
{
@@ -402,41 +361,6 @@ TALER_ARL_setup_sessions_and_run (TALER_ARL_Analysis ana,
}
-/**
- * Test if the given @a mpub matches the #TALER_ARL_master_pub.
- * If so, set "found" to GNUNET_YES.
- *
- * @param cls a `int *` pointing to "found"
- * @param mpub exchange master public key to compare
- * @param exchange_url URL of the exchange (ignored)
- */
-static void
-test_master_present (void *cls,
- const struct TALER_MasterPublicKeyP *mpub,
- const char *exchange_url)
-{
- int *found = cls;
-
- (void) exchange_url;
- if (0 == GNUNET_memcmp (mpub,
- &TALER_ARL_master_pub))
- *found = GNUNET_YES;
-}
-
-
-/**
- * Perform addition of amounts. If the addition fails, logs
- * a detailed error and calls exit() to terminate the process (!).
- *
- * Do not call this function directly, use #TALER_ARL_amount_add().
- *
- * @param[out] sum where to store @a a1 + @a a2, set to "invalid" on overflow
- * @param a1 first amount to add
- * @param a2 second amount to add
- * @param filename where is the addition called
- * @param functionname name of the function where the addition is called
- * @param line line number of the addition
- */
void
TALER_ARL_amount_add_ (struct TALER_Amount *sum,
const struct TALER_Amount *a1,
@@ -485,19 +409,6 @@ TALER_ARL_amount_add_ (struct TALER_Amount *sum,
}
-/**
- * Perform subtraction of amounts. If the subtraction fails, logs
- * a detailed error and calls exit() to terminate the process (!).
- *
- * Do not call this function directly, use #TALER_ARL_amount_subtract().
- *
- * @param[out] diff where to store (@a a1 - @a a2)
- * @param a1 amount to subtract from
- * @param a2 amount to subtract
- * @param filename where is the addition called
- * @param functionname name of the function where the addition is called
- * @param line line number of the addition
- */
void
TALER_ARL_amount_subtract_ (struct TALER_Amount *diff,
const struct TALER_Amount *a1,
@@ -546,24 +457,6 @@ TALER_ARL_amount_subtract_ (struct TALER_Amount *diff,
}
-/**
- * Perform subtraction of amounts. Negative results should be signalled by the
- * return value (leaving @a diff set to 'invalid'). If the subtraction fails
- * for other reasons (currency mismatch, normalization failure), logs a
- * detailed error and calls exit() to terminate the process (!).
- *
- * Do not call this function directly, use #TALER_ARL_amount_subtract_neg().
- *
- * @param[out] diff where to store (@a a1 - @a a2)
- * @param a1 amount to subtract from
- * @param a2 amount to subtract
- * @param filename where is the addition called
- * @param functionname name of the function where the addition is called
- * @param line line number of the addition
- * @return #TALER_ARL_SR_INVALID_NEGATIVE if the result was negative (and @a diff is now invalid),
- * #TALER_ARL_SR_ZERO if the result was zero,
- * #TALER_ARL_SR_POSITIVE if the result is positive
- */
enum TALER_ARL_SubtractionResult
TALER_ARL_amount_subtract_neg_ (struct TALER_Amount *diff,
const struct TALER_Amount *a1,
@@ -622,13 +515,7 @@ handle_sigint (void)
}
-/**
- * Setup global variables based on configuration.
- *
- * @param c configuration to use
- * @return #GNUNET_OK on success
- */
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
{
TALER_ARL_cfg = c;
@@ -645,7 +532,19 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
"BASE_URL");
return GNUNET_SYSERR;
}
- if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_master_pub))
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_string (TALER_ARL_cfg,
+ "exchange",
+ "BASE_URL",
+ &TALER_ARL_exchange_url))
+ {
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "exchange",
+ "BASE_URL");
+ return GNUNET_SYSERR;
+ }
+
+ if (GNUNET_is_zero (&TALER_ARL_master_pub))
{
/* -m option not given, try configuration */
char *master_public_key_str;
@@ -676,6 +575,9 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
GNUNET_free (master_public_key_str);
return GNUNET_SYSERR;
}
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Running auditor against exchange master public key `%s'\n",
+ master_public_key_str);
GNUNET_free (master_public_key_str);
} /* end of -m not given */
@@ -683,8 +585,36 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
"Taler auditor running for exchange master public key %s\n",
TALER_B2S (&TALER_ARL_master_pub));
- if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_auditor_pub))
+ if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
{
+ char *auditor_public_key_str;
+
+ if (GNUNET_OK ==
+ GNUNET_CONFIGURATION_get_value_string (c,
+ "auditor",
+ "PUBLIC_KEY",
+ &auditor_public_key_str))
+ {
+ if (GNUNET_OK !=
+ GNUNET_CRYPTO_eddsa_public_key_from_string (
+ auditor_public_key_str,
+ strlen (auditor_public_key_str),
+ &TALER_ARL_auditor_pub.eddsa_pub))
+ {
+ GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
+ "auditor",
+ "PUBLIC_KEY",
+ "invalid key");
+ GNUNET_free (auditor_public_key_str);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_free (auditor_public_key_str);
+ }
+ }
+
+ if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
+ {
+ /* public key not configured */
/* try loading private key and deriving public key */
char *fn;
@@ -696,6 +626,9 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
{
struct TALER_AuditorPrivateKeyP auditor_priv;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Loading offline private key from `%s' to get auditor public key\n",
+ fn);
if (GNUNET_OK ==
GNUNET_CRYPTO_eddsa_key_from_file (fn,
GNUNET_NO, /* do NOT create it! */
@@ -708,36 +641,12 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
}
}
- if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_auditor_pub))
+ if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
{
- /* private key not available, try configuration for public key */
- char *auditor_public_key_str;
-
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (c,
- "auditor",
- "PUBLIC_KEY",
- &auditor_public_key_str))
- {
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
- "auditor",
- "PUBLIC_KEY");
- return GNUNET_SYSERR;
- }
- if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_public_key_from_string (
- auditor_public_key_str,
- strlen (auditor_public_key_str),
- &TALER_ARL_auditor_pub.eddsa_pub))
- {
- GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
- "auditor",
- "PUBLIC_KEY",
- "invalid key");
- GNUNET_free (auditor_public_key_str);
- return GNUNET_SYSERR;
- }
- GNUNET_free (auditor_public_key_str);
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_INFO,
+ "auditor",
+ "PUBLIC_KEY/AUDITOR_PRIV_FILE");
+ return GNUNET_SYSERR;
}
if (GNUNET_OK !=
@@ -794,39 +703,18 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
TALER_ARL_done (NULL);
return GNUNET_SYSERR;
}
+ if (GNUNET_SYSERR ==
+ TALER_ARL_adb->preflight (TALER_ARL_adb->cls))
{
- int found;
-
- if (GNUNET_SYSERR ==
- TALER_ARL_adb->preflight (TALER_ARL_adb->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to start session with auditor database.\n");
- TALER_ARL_done (NULL);
- return GNUNET_SYSERR;
- }
- found = GNUNET_NO;
- (void) TALER_ARL_adb->list_exchanges (TALER_ARL_adb->cls,
- &test_master_present,
- &found);
- if (GNUNET_NO == found)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Exchange's master public key `%s' not known to auditor DB. Did you forget to run `taler-auditor-exchange`?\n",
- GNUNET_p2s (&TALER_ARL_master_pub.eddsa_pub));
- TALER_ARL_done (NULL);
- return GNUNET_SYSERR;
- }
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to start session with auditor database.\n");
+ TALER_ARL_done (NULL);
+ return GNUNET_SYSERR;
}
return GNUNET_OK;
}
-/**
- * Generate the report and close connectios to the database.
- *
- * @param report the report to output, may be NULL for no report
- */
void
TALER_ARL_done (json_t *report)
{
@@ -859,6 +747,7 @@ TALER_ARL_done (json_t *report)
JSON_INDENT (2));
json_decref (report);
}
+ GNUNET_free (TALER_ARL_exchange_url);
GNUNET_free (TALER_ARL_auditor_url);
}
diff --git a/src/auditor/report-lib.h b/src/auditor/report-lib.h
index 7c01b1685..db29abc3a 100644
--- a/src/auditor/report-lib.h
+++ b/src/auditor/report-lib.h
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2020 Taler Systems SA
+ Copyright (C) 2016-2024 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -28,6 +28,52 @@
#include "taler_bank_service.h"
#include "taler_signatures.h"
+/**
+ * Macro to use to access progress point value @a name.
+ */
+#define TALER_ARL_USE_PP(name) TAC_ ## name
+
+/**
+ * Macro to use to declare progress point value @a name.
+ */
+#define TALER_ARL_DEF_PP(name) \
+ uint64_t TALER_ARL_USE_PP (name) = 0
+
+/**
+ * Macro to use to GET progress point value @a name from DB.
+ */
+#define TALER_ARL_GET_PP(name) \
+ TALER_S (name), &TALER_ARL_USE_PP (name)
+
+/**
+ * Macro to use to SET progress point value @a name in DB.
+ */
+#define TALER_ARL_SET_PP(name) \
+ TALER_S (name), TALER_ARL_USE_PP (name)
+
+/**
+ * Macro to use to access amount balance @a name.
+ */
+#define TALER_ARL_USE_AB(name) TAC_ ## name
+
+/**
+ * Macro to use to declare amount balance @a name.
+ */
+#define TALER_ARL_DEF_AB(name) \
+ struct TALER_Amount TALER_ARL_USE_AB (name)
+
+/**
+ * Macro to use to GET amount balance @a name from DB.
+ */
+#define TALER_ARL_GET_AB(name) \
+ TALER_S (name), &TALER_ARL_USE_AB (name)
+
+/**
+ * Macro to use to SET amount balance @a name in DB.
+ */
+#define TALER_ARL_SET_AB(name) \
+ TALER_S (name), &TALER_ARL_USE_AB (name)
+
/**
* Command-line option "-r": restart audit from scratch
@@ -75,6 +121,11 @@ extern struct TALER_AuditorPublicKeyP TALER_ARL_auditor_pub;
extern char *TALER_ARL_auditor_url;
/**
+ * REST API endpoint of the exchange.
+ */
+extern char *TALER_ARL_exchange_url;
+
+/**
* At what time did the auditor process start?
*/
extern struct GNUNET_TIME_Absolute start_time;
@@ -101,8 +152,8 @@ TALER_ARL_report (json_t *array,
*/
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info_by_hash (
- const struct GNUNET_HashCode *dh,
- const struct TALER_DenominationKeyValidityPS **issue);
+ const struct TALER_DenominationHashP *dh,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue);
/**
@@ -117,8 +168,8 @@ TALER_ARL_get_denomination_info_by_hash (
enum GNUNET_DB_QueryStatus
TALER_ARL_get_denomination_info (
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DenominationKeyValidityPS **issue,
- struct GNUNET_HashCode *dh);
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **issue,
+ struct TALER_DenominationHashP *dh);
/**
@@ -276,7 +327,7 @@ TALER_ARL_amount_subtract_neg_ (struct TALER_Amount *diff,
* @param ana_cls closure for @a ana
* @return #GNUNET_OK on success
*/
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_setup_sessions_and_run (TALER_ARL_Analysis ana,
void *ana_cls);
@@ -298,7 +349,7 @@ TALER_ARL_do_abort (void);
* @param c configuration to use
* @return #GNUNET_OK on success
*/
-int
+enum GNUNET_GenericReturnValue
TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c);
diff --git a/src/auditor/revoke-basedb.age b/src/auditor/revoke-basedb.age
deleted file mode 100644
index ba4d077c3..000000000
--- a/src/auditor/revoke-basedb.age
+++ /dev/null
@@ -1 +0,0 @@
-1630849954
diff --git a/src/auditor/test-auditor.conf b/src/auditor/revoke-basedb.conf
index da440c60a..706f97347 100644
--- a/src/auditor/test-auditor.conf
+++ b/src/auditor/revoke-basedb.conf
@@ -1,34 +1,34 @@
[auditor]
-DB = postgres
+PUBLIC_KEY = CK4P6P5VXR82B1A4C3PY5DCHG8HDZA1HSZR76Z8D6FD57MASFT70
TINY_AMOUNT = TESTKUDOS:0.01
BASE_URL = http://localhost:8083/
[exchange-account-1]
-PAYTO_URI = payto://x-taler-bank/localhost/Exchange
+PAYTO_URI = payto://iban/SANDBOXX/DE717324?receiver-name=Exchange+Company
enable_debit = yes
enable_credit = yes
[exchange-accountcredentials-1]
-WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/"
+WIRE_GATEWAY_URL = "http://localhost:8082/accounts/exchange/taler-wire-gateway/"
WIRE_GATEWAY_AUTH_METHOD = basic
-USERNAME = Exchange
+USERNAME = exchange
PASSWORD = x
[exchangedb]
WIREFEE_BASE_DIR = ${PWD}/wirefees/
[auditordb-postgres]
-CONFIG = postgres:///taler-auditor-test
+CONFIG = postgres:///revoke-basedb
[exchangedb-postgres]
-CONFIG = postgres:///taler-auditor-test
+CONFIG = postgres:///revoke-basedb
[taler]
CURRENCY = TESTKUDOS
CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
[bank]
-DATABASE = postgres:///taler-auditor-test
+DATABASE = postgres:///revoke-basedb
MAX_DEBT = TESTKUDOS:50.0
MAX_DEBT_BANK = TESTKUDOS:100000.0
HTTP_PORT = 8082
diff --git a/src/auditor/revoke-basedb.fees b/src/auditor/revoke-basedb.fees
deleted file mode 100644
index d9b45a374..000000000
--- a/src/auditor/revoke-basedb.fees
+++ /dev/null
Binary files differ
diff --git a/src/auditor/revoke-basedb.mpub b/src/auditor/revoke-basedb.mpub
deleted file mode 100644
index eead40833..000000000
--- a/src/auditor/revoke-basedb.mpub
+++ /dev/null
@@ -1 +0,0 @@
-0DKW2AR37E3MBYM895RPF1VKM1P078KP9AQ6K97QHVSWH2WG3A80
diff --git a/src/auditor/revoke-basedb.sql b/src/auditor/revoke-basedb.sql
deleted file mode 100644
index c1365eee7..000000000
--- a/src/auditor/revoke-basedb.sql
+++ /dev/null
@@ -1,8078 +0,0 @@
---
--- PostgreSQL database dump
---
-
--- Dumped from database version 13.4 (Debian 13.4-3)
--- Dumped by pg_dump version 13.4 (Debian 13.4-3)
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
-
---
--- Name: _v; Type: SCHEMA; Schema: -; Owner: -
---
-
-CREATE SCHEMA _v;
-
-
---
--- Name: SCHEMA _v; Type: COMMENT; Schema: -; Owner: -
---
-
-COMMENT ON SCHEMA _v IS 'Schema for versioning data and functionality.';
-
-
---
--- Name: assert_patch_is_applied(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_patch_is_applied(in_patch_name text) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
-BEGIN
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF NOT FOUND THEN
- RAISE EXCEPTION 'Patch % is not applied!', in_patch_name;
- END IF;
- RETURN format('Patch %s is applied.', in_patch_name);
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_patch_is_applied(in_patch_name text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_patch_is_applied(in_patch_name text) IS 'Function that can be used to make sure that patch has been applied.';
-
-
---
--- Name: assert_user_is_not_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_not_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RAISE EXCEPTION 'Current user is superuser - cannot continue.';
- END IF;
- RETURN 'assert_user_is_not_superuser: OK';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_not_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_not_superuser() IS 'Function that can be used to make sure that patch is being applied using normal (not superuser) account.';
-
-
---
--- Name: assert_user_is_one_of(text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
-BEGIN
- IF current_user = any( p_acceptable_users ) THEN
- RETURN 'assert_user_is_one_of: OK';
- END IF;
- RAISE EXCEPTION 'User is not one of: % - cannot continue.', p_acceptable_users;
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_one_of(VARIADIC p_acceptable_users text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_one_of(VARIADIC p_acceptable_users text[]) IS 'Function that can be used to make sure that patch is being applied by one of defined users.';
-
-
---
--- Name: assert_user_is_superuser(); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.assert_user_is_superuser() RETURNS text
- LANGUAGE plpgsql
- AS $$
-DECLARE
- v_super bool;
-BEGIN
- SELECT usesuper INTO v_super FROM pg_user WHERE usename = current_user;
- IF v_super THEN
- RETURN 'assert_user_is_superuser: OK';
- END IF;
- RAISE EXCEPTION 'Current user is not superuser - cannot continue.';
-END;
-$$;
-
-
---
--- Name: FUNCTION assert_user_is_superuser(); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.assert_user_is_superuser() IS 'Function that can be used to make sure that patch is being applied using superuser account.';
-
-
---
--- Name: register_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, NULL, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text) IS 'Wrapper to allow registration of patches without requirements and conflicts.';
-
-
---
--- Name: register_patch(text, text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(text, text[]) RETURNS SETOF integer
- LANGUAGE sql
- AS $_$
- SELECT _v.register_patch( $1, $2, NULL );
-$_$;
-
-
---
--- Name: FUNCTION register_patch(text, text[]); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(text, text[]) IS 'Wrapper to allow registration of patches without conflicts.';
-
-
---
--- Name: register_patch(text, text[], text[]); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- t_text TEXT;
- t_text_a TEXT[];
- i INT4;
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_patch_name;
- IF FOUND THEN
- RAISE EXCEPTION 'Patch % is already applied!', in_patch_name;
- END IF;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE patch_name = any( in_conflicts ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Versioning patches conflict. Conflicting patche(s) installed: %.', array_to_string( t_text_a, ', ' );
- END IF;
-
- IF array_upper( in_requirements, 1 ) IS NOT NULL THEN
- t_text_a := '{}';
- FOR i IN array_lower( in_requirements, 1 ) .. array_upper( in_requirements, 1 ) LOOP
- SELECT patch_name INTO t_text FROM _v.patches WHERE patch_name = in_requirements[i];
- IF NOT FOUND THEN
- t_text_a := t_text_a || in_requirements[i];
- END IF;
- END LOOP;
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Missing prerequisite(s): %.', array_to_string( t_text_a, ', ' );
- END IF;
- END IF;
-
- INSERT INTO _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts ) VALUES ( in_patch_name, now(), current_user, coalesce( in_requirements, '{}' ), coalesce( in_conflicts, '{}' ) );
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.register_patch(in_patch_name text, in_requirements text[], in_conflicts text[], OUT versioning integer) IS 'Function to register patches in database. Raises exception if there are conflicts, prerequisites are not installed or the migration has already been installed.';
-
-
---
--- Name: unregister_patch(text); Type: FUNCTION; Schema: _v; Owner: -
---
-
-CREATE FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) RETURNS SETOF integer
- LANGUAGE plpgsql
- AS $$
-DECLARE
- i INT4;
- t_text_a TEXT[];
-BEGIN
- -- Thanks to this we know only one patch will be applied at a time
- LOCK TABLE _v.patches IN EXCLUSIVE MODE;
-
- t_text_a := ARRAY( SELECT patch_name FROM _v.patches WHERE in_patch_name = ANY( requires ) );
- IF array_upper( t_text_a, 1 ) IS NOT NULL THEN
- RAISE EXCEPTION 'Cannot uninstall %, as it is required by: %.', in_patch_name, array_to_string( t_text_a, ', ' );
- END IF;
-
- DELETE FROM _v.patches WHERE patch_name = in_patch_name;
- GET DIAGNOSTICS i = ROW_COUNT;
- IF i < 1 THEN
- RAISE EXCEPTION 'Patch % is not installed, so it can''t be uninstalled!', in_patch_name;
- END IF;
-
- RETURN;
-END;
-$$;
-
-
---
--- Name: FUNCTION unregister_patch(in_patch_name text, OUT versioning integer); Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON FUNCTION _v.unregister_patch(in_patch_name text, OUT versioning integer) IS 'Function to unregister patches in database. Dies if the patch is not registered, or if unregistering it would break dependencies.';
-
-
-SET default_tablespace = '';
-
-SET default_table_access_method = heap;
-
---
--- Name: patches; Type: TABLE; Schema: _v; Owner: -
---
-
-CREATE TABLE _v.patches (
- patch_name text NOT NULL,
- applied_tsz timestamp with time zone DEFAULT now() NOT NULL,
- applied_by text NOT NULL,
- requires text[],
- conflicts text[]
-);
-
-
---
--- Name: TABLE patches; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON TABLE _v.patches IS 'Contains information about what patches are currently applied on database.';
-
-
---
--- Name: COLUMN patches.patch_name; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.patch_name IS 'Name of patch, has to be unique for every patch.';
-
-
---
--- Name: COLUMN patches.applied_tsz; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_tsz IS 'When the patch was applied.';
-
-
---
--- Name: COLUMN patches.applied_by; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.applied_by IS 'Who applied this patch (PostgreSQL username)';
-
-
---
--- Name: COLUMN patches.requires; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.requires IS 'List of patches that are required for given patch.';
-
-
---
--- Name: COLUMN patches.conflicts; Type: COMMENT; Schema: _v; Owner: -
---
-
-COMMENT ON COLUMN _v.patches.conflicts IS 'List of patches that conflict with given patch.';
-
-
---
--- Name: aggregation_tracking; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.aggregation_tracking (
- aggregation_serial_id bigint NOT NULL,
- deposit_serial_id bigint NOT NULL,
- wtid_raw bytea
-);
-
-
---
--- Name: TABLE aggregation_tracking; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.aggregation_tracking IS 'mapping from wire transfer identifiers (WTID) to deposits (and back)';
-
-
---
--- Name: COLUMN aggregation_tracking.wtid_raw; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.aggregation_tracking.wtid_raw IS 'We first create entries in the aggregation_tracking table and then finally the wire_out entry once we know the total amount. Hence the constraint must be deferrable and we cannot use a wireout_uuid here, because we do not have it when these rows are created. Changing the logic to first INSERT a dummy row into wire_out and then UPDATEing that row in the same transaction would theoretically reduce per-deposit storage costs by 5 percent (24/~460 bytes).';
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.aggregation_tracking_aggregation_serial_id_seq OWNED BY public.aggregation_tracking.aggregation_serial_id;
-
-
---
--- Name: app_bankaccount; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_bankaccount (
- is_public boolean NOT NULL,
- account_no integer NOT NULL,
- balance character varying NOT NULL,
- user_id integer NOT NULL
-);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_bankaccount_account_no_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_bankaccount_account_no_seq OWNED BY public.app_bankaccount.account_no;
-
-
---
--- Name: app_banktransaction; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_banktransaction (
- id integer NOT NULL,
- amount character varying NOT NULL,
- subject character varying(200) NOT NULL,
- date timestamp with time zone NOT NULL,
- cancelled boolean NOT NULL,
- request_uid character varying(128) NOT NULL,
- credit_account_id integer NOT NULL,
- debit_account_id integer NOT NULL
-);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.app_banktransaction_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.app_banktransaction_id_seq OWNED BY public.app_banktransaction.id;
-
-
---
--- Name: app_talerwithdrawoperation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.app_talerwithdrawoperation (
- withdraw_id uuid NOT NULL,
- amount character varying NOT NULL,
- selection_done boolean NOT NULL,
- confirmation_done boolean NOT NULL,
- aborted boolean NOT NULL,
- selected_reserve_pub text,
- selected_exchange_account_id integer,
- withdraw_account_id integer NOT NULL
-);
-
-
---
--- Name: auditor_balance_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_balance_summary (
- master_pub bytea,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- deposit_fee_balance_val bigint NOT NULL,
- deposit_fee_balance_frac integer NOT NULL,
- melt_fee_balance_val bigint NOT NULL,
- melt_fee_balance_frac integer NOT NULL,
- refund_fee_balance_val bigint NOT NULL,
- refund_fee_balance_frac integer NOT NULL,
- risk_val bigint NOT NULL,
- risk_frac integer NOT NULL,
- loss_val bigint NOT NULL,
- loss_frac integer NOT NULL,
- irregular_recoup_val bigint NOT NULL,
- irregular_recoup_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_balance_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_balance_summary IS 'the sum of the outstanding coins from auditor_denomination_pending (denom_pubs must belong to the respectives exchange master public key); it represents the auditor_balance_summary of the exchange at this point (modulo unexpected historic_loss-style events where denomination keys are compromised)';
-
-
---
--- Name: auditor_denom_sigs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denom_sigs (
- auditor_denom_serial bigint NOT NULL,
- auditor_uuid bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- auditor_sig bytea,
- CONSTRAINT auditor_denom_sigs_auditor_sig_check CHECK ((length(auditor_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_denom_sigs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denom_sigs IS 'Table with auditor signatures on exchange denomination keys.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_uuid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_uuid IS 'Identifies the auditor.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.denominations_serial IS 'Denomination the signature is for.';
-
-
---
--- Name: COLUMN auditor_denom_sigs.auditor_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denom_sigs.auditor_sig IS 'Signature of the auditor, of purpose TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS.';
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_denom_sigs_auditor_denom_serial_seq OWNED BY public.auditor_denom_sigs.auditor_denom_serial;
-
-
---
--- Name: auditor_denomination_pending; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_denomination_pending (
- denom_pub_hash bytea NOT NULL,
- denom_balance_val bigint NOT NULL,
- denom_balance_frac integer NOT NULL,
- denom_loss_val bigint NOT NULL,
- denom_loss_frac integer NOT NULL,
- num_issued bigint NOT NULL,
- denom_risk_val bigint NOT NULL,
- denom_risk_frac integer NOT NULL,
- recoup_loss_val bigint NOT NULL,
- recoup_loss_frac integer NOT NULL,
- CONSTRAINT auditor_denomination_pending_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_denomination_pending; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_denomination_pending IS 'outstanding denomination coins that the exchange is aware of and what the respective balances are (outstanding as well as issued overall which implies the maximum value at risk).';
-
-
---
--- Name: COLUMN auditor_denomination_pending.num_issued; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.num_issued IS 'counts the number of coins issued (withdraw, refresh) of this denomination';
-
-
---
--- Name: COLUMN auditor_denomination_pending.denom_risk_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.denom_risk_val IS 'amount that could theoretically be lost in the future due to recoup operations';
-
-
---
--- Name: COLUMN auditor_denomination_pending.recoup_loss_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_denomination_pending.recoup_loss_val IS 'amount actually lost due to recoup operations past revocation';
-
-
---
--- Name: auditor_exchange_signkeys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchange_signkeys (
- master_pub bytea,
- ep_start bigint NOT NULL,
- ep_expire bigint NOT NULL,
- ep_end bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT auditor_exchange_signkeys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT auditor_exchange_signkeys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE auditor_exchange_signkeys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchange_signkeys IS 'list of the online signing keys of exchanges we are auditing';
-
-
---
--- Name: auditor_exchanges; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_exchanges (
- master_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- CONSTRAINT auditor_exchanges_master_pub_check CHECK ((length(master_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_exchanges; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_exchanges IS 'list of the exchanges we are auditing';
-
-
---
--- Name: auditor_historic_denomination_revenue; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_denomination_revenue (
- master_pub bytea,
- denom_pub_hash bytea NOT NULL,
- revenue_timestamp bigint NOT NULL,
- revenue_balance_val bigint NOT NULL,
- revenue_balance_frac integer NOT NULL,
- loss_balance_val bigint NOT NULL,
- loss_balance_frac integer NOT NULL,
- CONSTRAINT auditor_historic_denomination_revenue_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64))
-);
-
-
---
--- Name: TABLE auditor_historic_denomination_revenue; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_denomination_revenue IS 'Table with historic profits; basically, when a denom_pub has expired and everything associated with it is garbage collected, the final profits end up in here; note that the denom_pub here is not a foreign key, we just keep it as a reference point.';
-
-
---
--- Name: COLUMN auditor_historic_denomination_revenue.revenue_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditor_historic_denomination_revenue.revenue_balance_val IS 'the sum of all of the profits we made on the coin except for withdraw fees (which are in historic_reserve_revenue); so this includes the deposit, melt and refund fees';
-
-
---
--- Name: auditor_historic_reserve_summary; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_historic_reserve_summary (
- master_pub bytea,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- reserve_profits_val bigint NOT NULL,
- reserve_profits_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_historic_reserve_summary; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_historic_reserve_summary IS 'historic profits from reserves; we eventually GC auditor_historic_reserve_revenue, and then store the totals in here (by time intervals).';
-
-
---
--- Name: auditor_predicted_result; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_predicted_result (
- master_pub bytea,
- balance_val bigint NOT NULL,
- balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_predicted_result; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_predicted_result IS 'Table with the sum of the ledger, auditor_historic_revenue and the auditor_reserve_balance. This is the final amount that the exchange should have in its bank account right now.';
-
-
---
--- Name: auditor_progress_aggregation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_aggregation (
- master_pub bytea NOT NULL,
- last_wire_out_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_aggregation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_aggregation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_coin (
- master_pub bytea NOT NULL,
- last_withdraw_serial_id bigint DEFAULT 0 NOT NULL,
- last_deposit_serial_id bigint DEFAULT 0 NOT NULL,
- last_melt_serial_id bigint DEFAULT 0 NOT NULL,
- last_refund_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_recoup_refresh_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_coin IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_deposit_confirmation; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_deposit_confirmation (
- master_pub bytea NOT NULL,
- last_deposit_confirmation_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_deposit_confirmation; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_deposit_confirmation IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_progress_reserve; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_progress_reserve (
- master_pub bytea NOT NULL,
- last_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_out_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_recoup_serial_id bigint DEFAULT 0 NOT NULL,
- last_reserve_close_serial_id bigint DEFAULT 0 NOT NULL
-);
-
-
---
--- Name: TABLE auditor_progress_reserve; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_progress_reserve IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: auditor_reserve_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserve_balance (
- master_pub bytea,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_reserve_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserve_balance IS 'sum of the balances of all customer reserves (by exchange master public key)';
-
-
---
--- Name: auditor_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_reserves (
- reserve_pub bytea NOT NULL,
- master_pub bytea,
- reserve_balance_val bigint NOT NULL,
- reserve_balance_frac integer NOT NULL,
- withdraw_fee_balance_val bigint NOT NULL,
- withdraw_fee_balance_frac integer NOT NULL,
- expiration_date bigint NOT NULL,
- auditor_reserves_rowid bigint NOT NULL,
- origin_account text,
- CONSTRAINT auditor_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE auditor_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_reserves IS 'all of the customer reserves and their respective balances that the auditor is aware of';
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditor_reserves_auditor_reserves_rowid_seq OWNED BY public.auditor_reserves.auditor_reserves_rowid;
-
-
---
--- Name: auditor_wire_fee_balance; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditor_wire_fee_balance (
- master_pub bytea,
- wire_fee_balance_val bigint NOT NULL,
- wire_fee_balance_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE auditor_wire_fee_balance; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditor_wire_fee_balance IS 'sum of the balances of all wire fees (by exchange master public key)';
-
-
---
--- Name: auditors; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auditors (
- auditor_uuid bigint NOT NULL,
- auditor_pub bytea NOT NULL,
- auditor_name character varying NOT NULL,
- auditor_url character varying NOT NULL,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT auditors_auditor_pub_check CHECK ((length(auditor_pub) = 32))
-);
-
-
---
--- Name: TABLE auditors; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.auditors IS 'Table with auditors the exchange uses or has used in the past. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN auditors.auditor_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_pub IS 'Public key of the auditor.';
-
-
---
--- Name: COLUMN auditors.auditor_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.auditor_url IS 'The base URL of the auditor.';
-
-
---
--- Name: COLUMN auditors.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.is_active IS 'true if we are currently supporting the use of this auditor.';
-
-
---
--- Name: COLUMN auditors.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.auditors.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auditors_auditor_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auditors_auditor_uuid_seq OWNED BY public.auditors.auditor_uuid;
-
-
---
--- Name: auth_group; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group (
- id integer NOT NULL,
- name character varying(150) NOT NULL
-);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_id_seq OWNED BY public.auth_group.id;
-
-
---
--- Name: auth_group_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_group_permissions (
- id bigint NOT NULL,
- group_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_group_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_group_permissions_id_seq OWNED BY public.auth_group_permissions.id;
-
-
---
--- Name: auth_permission; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_permission (
- id integer NOT NULL,
- name character varying(255) NOT NULL,
- content_type_id integer NOT NULL,
- codename character varying(100) NOT NULL
-);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_permission_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_permission_id_seq OWNED BY public.auth_permission.id;
-
-
---
--- Name: auth_user; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user (
- id integer NOT NULL,
- password character varying(128) NOT NULL,
- last_login timestamp with time zone,
- is_superuser boolean NOT NULL,
- username character varying(150) NOT NULL,
- first_name character varying(150) NOT NULL,
- last_name character varying(150) NOT NULL,
- email character varying(254) NOT NULL,
- is_staff boolean NOT NULL,
- is_active boolean NOT NULL,
- date_joined timestamp with time zone NOT NULL
-);
-
-
---
--- Name: auth_user_groups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_groups (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- group_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_groups_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_groups_id_seq OWNED BY public.auth_user_groups.id;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_id_seq OWNED BY public.auth_user.id;
-
-
---
--- Name: auth_user_user_permissions; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.auth_user_user_permissions (
- id bigint NOT NULL,
- user_id integer NOT NULL,
- permission_id integer NOT NULL
-);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.auth_user_user_permissions_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.auth_user_user_permissions_id_seq OWNED BY public.auth_user_user_permissions.id;
-
-
---
--- Name: denomination_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denomination_revocations (
- denom_revocations_serial_id bigint NOT NULL,
- master_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT denomination_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denomination_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denomination_revocations IS 'remembering which denomination keys have been revoked';
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denomination_revocations_denom_revocations_serial_id_seq OWNED BY public.denomination_revocations.denom_revocations_serial_id;
-
-
---
--- Name: denominations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.denominations (
- denom_pub_hash bytea NOT NULL,
- denom_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_withdraw bigint NOT NULL,
- expire_deposit bigint NOT NULL,
- expire_legal bigint NOT NULL,
- coin_val bigint NOT NULL,
- coin_frac integer NOT NULL,
- fee_withdraw_val bigint NOT NULL,
- fee_withdraw_frac integer NOT NULL,
- fee_deposit_val bigint NOT NULL,
- fee_deposit_frac integer NOT NULL,
- fee_refresh_val bigint NOT NULL,
- fee_refresh_frac integer NOT NULL,
- fee_refund_val bigint NOT NULL,
- fee_refund_frac integer NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT denominations_denom_pub_hash_check CHECK ((length(denom_pub_hash) = 64)),
- CONSTRAINT denominations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE denominations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.denominations IS 'Main denominations table. All the valid denominations the exchange knows about.';
-
-
---
--- Name: COLUMN denominations.denominations_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.denominations.denominations_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.denominations_denominations_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.denominations_denominations_serial_seq OWNED BY public.denominations.denominations_serial;
-
-
---
--- Name: deposit_confirmations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposit_confirmations (
- master_pub bytea,
- serial_id bigint NOT NULL,
- h_contract_terms bytea NOT NULL,
- h_wire bytea NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- amount_without_fee_val bigint NOT NULL,
- amount_without_fee_frac integer NOT NULL,
- coin_pub bytea NOT NULL,
- merchant_pub bytea NOT NULL,
- exchange_sig bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT deposit_confirmations_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT deposit_confirmations_exchange_sig_check CHECK ((length(exchange_sig) = 64)),
- CONSTRAINT deposit_confirmations_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposit_confirmations_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT deposit_confirmations_master_sig_check CHECK ((length(master_sig) = 64)),
- CONSTRAINT deposit_confirmations_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE deposit_confirmations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposit_confirmations IS 'deposit confirmation sent to us by merchants; we must check that the exchange reported these properly.';
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposit_confirmations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposit_confirmations_serial_id_seq OWNED BY public.deposit_confirmations.serial_id;
-
-
---
--- Name: deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.deposits (
- deposit_serial_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- wallet_timestamp bigint NOT NULL,
- exchange_timestamp bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- wire_deadline bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- h_wire bytea NOT NULL,
- coin_sig bytea NOT NULL,
- wire text NOT NULL,
- tiny boolean DEFAULT false NOT NULL,
- done boolean DEFAULT false NOT NULL,
- known_coin_id bigint NOT NULL,
- shard integer DEFAULT 0 NOT NULL,
- CONSTRAINT deposits_coin_sig_check CHECK ((length(coin_sig) = 64)),
- CONSTRAINT deposits_h_contract_terms_check CHECK ((length(h_contract_terms) = 64)),
- CONSTRAINT deposits_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT deposits_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.deposits IS 'Deposits we have received and for which we need to make (aggregate) wire transfers (and manage refunds).';
-
-
---
--- Name: COLUMN deposits.tiny; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.tiny IS 'Set to TRUE if we decided that the amount is too small to ever trigger a wire transfer by itself (requires real aggregation)';
-
-
---
--- Name: COLUMN deposits.done; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.done IS 'Set to TRUE once we have included this deposit in some aggregate wire transfer to the merchant';
-
-
---
--- Name: COLUMN deposits.shard; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.deposits.shard IS 'Used for load sharding. Should be set based on h_wire, merchant_pub and a service salt. Default of 0 onlyapplies for columns migrated from a previous version without sharding support. 64-bit value because we need an *unsigned* 32-bit value.';
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.deposits_deposit_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.deposits_deposit_serial_id_seq OWNED BY public.deposits.deposit_serial_id;
-
-
---
--- Name: django_content_type; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_content_type (
- id integer NOT NULL,
- app_label character varying(100) NOT NULL,
- model character varying(100) NOT NULL
-);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_content_type_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_content_type_id_seq OWNED BY public.django_content_type.id;
-
-
---
--- Name: django_migrations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_migrations (
- id bigint NOT NULL,
- app character varying(255) NOT NULL,
- name character varying(255) NOT NULL,
- applied timestamp with time zone NOT NULL
-);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.django_migrations_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.django_migrations_id_seq OWNED BY public.django_migrations.id;
-
-
---
--- Name: django_session; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.django_session (
- session_key character varying(40) NOT NULL,
- session_data text NOT NULL,
- expire_date timestamp with time zone NOT NULL
-);
-
-
---
--- Name: exchange_sign_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.exchange_sign_keys (
- esk_serial bigint NOT NULL,
- exchange_pub bytea NOT NULL,
- master_sig bytea NOT NULL,
- valid_from bigint NOT NULL,
- expire_sign bigint NOT NULL,
- expire_legal bigint NOT NULL,
- CONSTRAINT exchange_sign_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT exchange_sign_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE exchange_sign_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.exchange_sign_keys IS 'Table with master public key signatures on exchange online signing keys.';
-
-
---
--- Name: COLUMN exchange_sign_keys.exchange_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.exchange_pub IS 'Public online signing key of the exchange.';
-
-
---
--- Name: COLUMN exchange_sign_keys.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.master_sig IS 'Signature affirming the validity of the signing key of purpose TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.';
-
-
---
--- Name: COLUMN exchange_sign_keys.valid_from; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.valid_from IS 'Time when this online signing key will first be used to sign messages.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_sign; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_sign IS 'Time when this online signing key will no longer be used to sign.';
-
-
---
--- Name: COLUMN exchange_sign_keys.expire_legal; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.exchange_sign_keys.expire_legal IS 'Time when this online signing key legally expires.';
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.exchange_sign_keys_esk_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.exchange_sign_keys_esk_serial_seq OWNED BY public.exchange_sign_keys.esk_serial;
-
-
---
--- Name: known_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.known_coins (
- known_coin_id bigint NOT NULL,
- coin_pub bytea NOT NULL,
- denom_sig bytea NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT known_coins_coin_pub_check CHECK ((length(coin_pub) = 32))
-);
-
-
---
--- Name: TABLE known_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.known_coins IS 'information about coins and their signatures, so we do not have to store the signatures more than once if a coin is involved in multiple operations';
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.known_coins_known_coin_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.known_coins_known_coin_id_seq OWNED BY public.known_coins.known_coin_id;
-
-
---
--- Name: merchant_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_accounts (
- account_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- h_wire bytea NOT NULL,
- salt bytea NOT NULL,
- payto_uri character varying NOT NULL,
- active boolean NOT NULL,
- CONSTRAINT merchant_accounts_h_wire_check CHECK ((length(h_wire) = 64)),
- CONSTRAINT merchant_accounts_salt_check CHECK ((length(salt) = 64))
-);
-
-
---
--- Name: TABLE merchant_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_accounts IS 'bank accounts of the instances';
-
-
---
--- Name: COLUMN merchant_accounts.h_wire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.h_wire IS 'salted hash of payto_uri';
-
-
---
--- Name: COLUMN merchant_accounts.salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.salt IS 'salt used when hashing payto_uri into h_wire';
-
-
---
--- Name: COLUMN merchant_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.payto_uri IS 'payto URI of a merchant bank account';
-
-
---
--- Name: COLUMN merchant_accounts.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_accounts.active IS 'true if we actively use this bank account, false if it is just kept around for older contracts to refer to';
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_accounts_account_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_accounts_account_serial_seq OWNED BY public.merchant_accounts.account_serial;
-
-
---
--- Name: merchant_contract_terms; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_contract_terms (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- contract_terms bytea NOT NULL,
- h_contract_terms bytea NOT NULL,
- creation_time bigint NOT NULL,
- pay_deadline bigint NOT NULL,
- refund_deadline bigint NOT NULL,
- paid boolean DEFAULT false NOT NULL,
- wired boolean DEFAULT false NOT NULL,
- fulfillment_url character varying,
- session_id character varying DEFAULT ''::character varying NOT NULL,
- claim_token bytea NOT NULL,
- CONSTRAINT merchant_contract_terms_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_contract_terms_h_contract_terms_check CHECK ((length(h_contract_terms) = 64))
-);
-
-
---
--- Name: TABLE merchant_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_contract_terms IS 'Contracts are orders that have been claimed by a wallet';
-
-
---
--- Name: COLUMN merchant_contract_terms.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.order_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.order_id IS 'Not a foreign key into merchant_orders because paid contracts persist after expiration';
-
-
---
--- Name: COLUMN merchant_contract_terms.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.contract_terms IS 'These contract terms include the wallet nonce';
-
-
---
--- Name: COLUMN merchant_contract_terms.h_contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.h_contract_terms IS 'Hash over contract_terms';
-
-
---
--- Name: COLUMN merchant_contract_terms.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_contract_terms.refund_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.refund_deadline IS 'By what times do refunds have to be approved (useful to reject refund requests)';
-
-
---
--- Name: COLUMN merchant_contract_terms.paid; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.paid IS 'true implies the customer paid for this contract; order should be DELETEd from merchant_orders once paid is set to release merchant_order_locks; paid remains true even if the payment was later refunded';
-
-
---
--- Name: COLUMN merchant_contract_terms.wired; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.wired IS 'true implies the exchange wired us the full amount for all non-refunded payments under this contract';
-
-
---
--- Name: COLUMN merchant_contract_terms.fulfillment_url; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.fulfillment_url IS 'also included in contract_terms, but we need it here to SELECT on it during repurchase detection; can be NULL if the contract has no fulfillment URL';
-
-
---
--- Name: COLUMN merchant_contract_terms.session_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.session_id IS 'last session_id from we confirmed the paying client to use, empty string for none';
-
-
---
--- Name: COLUMN merchant_contract_terms.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_contract_terms.claim_token IS 'Token optionally used to access the status of the order. All zeros (not NULL) if not used';
-
-
---
--- Name: merchant_deposit_to_transfer; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposit_to_transfer (
- deposit_serial bigint NOT NULL,
- coin_contribution_value_val bigint NOT NULL,
- coin_contribution_value_frac integer NOT NULL,
- credit_serial bigint NOT NULL,
- execution_time bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- CONSTRAINT merchant_deposit_to_transfer_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposit_to_transfer; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposit_to_transfer IS 'Mapping of deposits to (possibly unconfirmed) wire transfers; NOTE: not used yet';
-
-
---
--- Name: COLUMN merchant_deposit_to_transfer.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposit_to_transfer.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_deposits; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_deposits (
- deposit_serial bigint NOT NULL,
- order_serial bigint,
- deposit_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- exchange_url character varying NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- deposit_fee_val bigint NOT NULL,
- deposit_fee_frac integer NOT NULL,
- refund_fee_val bigint NOT NULL,
- refund_fee_frac integer NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- signkey_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- account_serial bigint NOT NULL,
- CONSTRAINT merchant_deposits_coin_pub_check CHECK ((length(coin_pub) = 32)),
- CONSTRAINT merchant_deposits_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_deposits; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_deposits IS 'Refunds approved by the merchant (backoffice) logic, excludes abort refunds';
-
-
---
--- Name: COLUMN merchant_deposits.deposit_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.deposit_timestamp IS 'Time when the exchange generated the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.wire_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.wire_fee_val IS 'We MAY want to see if we should try to get this via merchant_exchange_wire_fees (not sure, may be too complicated with the date range, etc.)';
-
-
---
--- Name: COLUMN merchant_deposits.signkey_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.signkey_serial IS 'Online signing key of the exchange on the deposit confirmation';
-
-
---
--- Name: COLUMN merchant_deposits.exchange_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_deposits.exchange_sig IS 'Signature of the exchange over the deposit confirmation';
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_deposits_deposit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_deposits_deposit_serial_seq OWNED BY public.merchant_deposits.deposit_serial;
-
-
---
--- Name: merchant_exchange_signing_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_signing_keys (
- signkey_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- exchange_pub bytea NOT NULL,
- start_date bigint NOT NULL,
- expire_date bigint NOT NULL,
- end_date bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_signing_keys_exchange_pub_check CHECK ((length(exchange_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_signing_keys_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_signing_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_signing_keys IS 'Here we store proofs of the exchange online signing keys being signed by the exchange master key';
-
-
---
--- Name: COLUMN merchant_exchange_signing_keys.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_signing_keys.master_pub IS 'Master public key of the exchange with these online signing keys';
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_signing_keys_signkey_serial_seq OWNED BY public.merchant_exchange_signing_keys.signkey_serial;
-
-
---
--- Name: merchant_exchange_wire_fees; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_exchange_wire_fees (
- wirefee_serial bigint NOT NULL,
- master_pub bytea NOT NULL,
- h_wire_method bytea NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT merchant_exchange_wire_fees_h_wire_method_check CHECK ((length(h_wire_method) = 64)),
- CONSTRAINT merchant_exchange_wire_fees_master_pub_check CHECK ((length(master_pub) = 32)),
- CONSTRAINT merchant_exchange_wire_fees_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_exchange_wire_fees; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_exchange_wire_fees IS 'Here we store proofs of the wire fee structure of the various exchanges';
-
-
---
--- Name: COLUMN merchant_exchange_wire_fees.master_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_exchange_wire_fees.master_pub IS 'Master public key of the exchange with these wire fees';
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_exchange_wire_fees_wirefee_serial_seq OWNED BY public.merchant_exchange_wire_fees.wirefee_serial;
-
-
---
--- Name: merchant_instances; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_instances (
- merchant_serial bigint NOT NULL,
- merchant_pub bytea NOT NULL,
- merchant_id character varying NOT NULL,
- merchant_name character varying NOT NULL,
- address bytea NOT NULL,
- jurisdiction bytea NOT NULL,
- default_max_deposit_fee_val bigint NOT NULL,
- default_max_deposit_fee_frac integer NOT NULL,
- default_max_wire_fee_val bigint NOT NULL,
- default_max_wire_fee_frac integer NOT NULL,
- default_wire_fee_amortization integer NOT NULL,
- default_wire_transfer_delay bigint NOT NULL,
- default_pay_delay bigint NOT NULL,
- auth_hash bytea,
- auth_salt bytea,
- CONSTRAINT merchant_instances_auth_hash_check CHECK ((length(auth_hash) = 64)),
- CONSTRAINT merchant_instances_auth_salt_check CHECK ((length(auth_salt) = 32)),
- CONSTRAINT merchant_instances_merchant_pub_check CHECK ((length(merchant_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_instances; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_instances IS 'all the instances supported by this backend';
-
-
---
--- Name: COLUMN merchant_instances.merchant_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_id IS 'identifier of the merchant as used in the base URL (required)';
-
-
---
--- Name: COLUMN merchant_instances.merchant_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.merchant_name IS 'legal name of the merchant as a simple string (required)';
-
-
---
--- Name: COLUMN merchant_instances.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.address IS 'physical address of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: COLUMN merchant_instances.jurisdiction; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.jurisdiction IS 'jurisdiction of the merchant as a Location in JSON format (required)';
-
-
---
--- Name: COLUMN merchant_instances.auth_hash; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_hash IS 'hash used for merchant back office Authorization, NULL for no check';
-
-
---
--- Name: COLUMN merchant_instances.auth_salt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_instances.auth_salt IS 'salt to use when hashing Authorization header before comparing with auth_hash';
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_instances_merchant_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_instances_merchant_serial_seq OWNED BY public.merchant_instances.merchant_serial;
-
-
---
--- Name: merchant_inventory; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory (
- product_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- product_id character varying NOT NULL,
- description character varying NOT NULL,
- description_i18n bytea NOT NULL,
- unit character varying NOT NULL,
- image bytea NOT NULL,
- taxes bytea NOT NULL,
- price_val bigint NOT NULL,
- price_frac integer NOT NULL,
- total_stock bigint NOT NULL,
- total_sold bigint DEFAULT 0 NOT NULL,
- total_lost bigint DEFAULT 0 NOT NULL,
- address bytea NOT NULL,
- next_restock bigint NOT NULL
-);
-
-
---
--- Name: TABLE merchant_inventory; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory IS 'products offered by the merchant (may be incomplete, frontend can override)';
-
-
---
--- Name: COLUMN merchant_inventory.description; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description IS 'Human-readable product description';
-
-
---
--- Name: COLUMN merchant_inventory.description_i18n; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.description_i18n IS 'JSON map from IETF BCP 47 language tags to localized descriptions';
-
-
---
--- Name: COLUMN merchant_inventory.unit; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.unit IS 'Unit of sale for the product (liters, kilograms, packages)';
-
-
---
--- Name: COLUMN merchant_inventory.image; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.image IS 'NOT NULL, but can be 0 bytes; must contain an ImageDataUrl';
-
-
---
--- Name: COLUMN merchant_inventory.taxes; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.taxes IS 'JSON array containing taxes the merchant pays, must be JSON, but can be just "[]"';
-
-
---
--- Name: COLUMN merchant_inventory.price_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.price_val IS 'Current price of one unit of the product';
-
-
---
--- Name: COLUMN merchant_inventory.total_stock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_stock IS 'A value of -1 is used for unlimited (electronic good), may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_sold; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_sold IS 'Number of products sold, must be below total_stock, non-negative, may never be lowered';
-
-
---
--- Name: COLUMN merchant_inventory.total_lost; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.total_lost IS 'Number of products that used to be in stock but were lost (spoiled, damaged), may never be lowered; total_stock >= total_sold + total_lost must always hold';
-
-
---
--- Name: COLUMN merchant_inventory.address; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.address IS 'JSON formatted Location of where the product is stocked';
-
-
---
--- Name: COLUMN merchant_inventory.next_restock; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory.next_restock IS 'GNUnet absolute time indicating when the next restock is expected. 0 for unknown.';
-
-
---
--- Name: merchant_inventory_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_inventory_locks (
- product_serial bigint NOT NULL,
- lock_uuid bytea NOT NULL,
- total_locked bigint NOT NULL,
- expiration bigint NOT NULL,
- CONSTRAINT merchant_inventory_locks_lock_uuid_check CHECK ((length(lock_uuid) = 16))
-);
-
-
---
--- Name: TABLE merchant_inventory_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_inventory_locks IS 'locks on inventory helt by shopping carts; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_inventory_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: COLUMN merchant_inventory_locks.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_inventory_locks.expiration IS 'when does this lock automatically expire (if no order is created)';
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_inventory_product_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_inventory_product_serial_seq OWNED BY public.merchant_inventory.product_serial;
-
-
---
--- Name: merchant_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_keys (
- merchant_priv bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- CONSTRAINT merchant_keys_merchant_priv_check CHECK ((length(merchant_priv) = 32))
-);
-
-
---
--- Name: TABLE merchant_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_keys IS 'private keys of instances that have not been deleted';
-
-
---
--- Name: merchant_order_locks; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_order_locks (
- product_serial bigint NOT NULL,
- total_locked bigint NOT NULL,
- order_serial bigint NOT NULL
-);
-
-
---
--- Name: TABLE merchant_order_locks; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_order_locks IS 'locks on orders awaiting claim and payment; note that locks MAY not be honored if merchants increase total_lost for inventory';
-
-
---
--- Name: COLUMN merchant_order_locks.total_locked; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_order_locks.total_locked IS 'how many units of the product does this lock reserve';
-
-
---
--- Name: merchant_orders; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_orders (
- order_serial bigint NOT NULL,
- merchant_serial bigint NOT NULL,
- order_id character varying NOT NULL,
- claim_token bytea NOT NULL,
- h_post_data bytea NOT NULL,
- pay_deadline bigint NOT NULL,
- creation_time bigint NOT NULL,
- contract_terms bytea NOT NULL,
- CONSTRAINT merchant_orders_claim_token_check CHECK ((length(claim_token) = 16)),
- CONSTRAINT merchant_orders_h_post_data_check CHECK ((length(h_post_data) = 64))
-);
-
-
---
--- Name: TABLE merchant_orders; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_orders IS 'Orders we offered to a customer, but that have not yet been claimed';
-
-
---
--- Name: COLUMN merchant_orders.merchant_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.merchant_serial IS 'Identifies the instance offering the contract';
-
-
---
--- Name: COLUMN merchant_orders.claim_token; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.claim_token IS 'Token optionally used to authorize the wallet to claim the order. All zeros (not NULL) if not used';
-
-
---
--- Name: COLUMN merchant_orders.h_post_data; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.h_post_data IS 'Hash of the POST request that created this order, for idempotency checks';
-
-
---
--- Name: COLUMN merchant_orders.pay_deadline; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.pay_deadline IS 'How long is the offer valid. After this time, the order can be garbage collected';
-
-
---
--- Name: COLUMN merchant_orders.contract_terms; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_orders.contract_terms IS 'Claiming changes the contract_terms, hence we have no hash of the terms in this table';
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_orders_order_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_orders_order_serial_seq OWNED BY public.merchant_orders.order_serial;
-
-
---
--- Name: merchant_refund_proofs; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refund_proofs (
- refund_serial bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- signkey_serial bigint NOT NULL,
- CONSTRAINT merchant_refund_proofs_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_refund_proofs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_refund_proofs IS 'Refunds confirmed by the exchange (not all approved refunds are grabbed by the wallet)';
-
-
---
--- Name: merchant_refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_refunds (
- refund_serial bigint NOT NULL,
- order_serial bigint NOT NULL,
- rtransaction_id bigint NOT NULL,
- refund_timestamp bigint NOT NULL,
- coin_pub bytea NOT NULL,
- reason character varying NOT NULL,
- refund_amount_val bigint NOT NULL,
- refund_amount_frac integer NOT NULL
-);
-
-
---
--- Name: COLUMN merchant_refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.rtransaction_id IS 'Needed for uniqueness in case a refund is increased for the same order';
-
-
---
--- Name: COLUMN merchant_refunds.refund_timestamp; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_refunds.refund_timestamp IS 'Needed for grouping of refunds in the wallet UI; has no semantics in the protocol (only for UX), but should be from the time when the merchant internally approved the refund';
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_refunds_refund_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_refunds_refund_serial_seq OWNED BY public.merchant_refunds.refund_serial;
-
-
---
--- Name: merchant_tip_pickup_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickup_signatures (
- pickup_serial bigint NOT NULL,
- coin_offset integer NOT NULL,
- blind_sig bytea NOT NULL
-);
-
-
---
--- Name: TABLE merchant_tip_pickup_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickup_signatures IS 'blind signatures we got from the exchange during the tip pickup';
-
-
---
--- Name: merchant_tip_pickups; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_pickups (
- pickup_serial bigint NOT NULL,
- tip_serial bigint NOT NULL,
- pickup_id bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT merchant_tip_pickups_pickup_id_check CHECK ((length(pickup_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tip_pickups; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_pickups IS 'tips that have been picked up';
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_tip_pickups_pickup_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_pickups_pickup_serial_seq OWNED BY public.merchant_tip_pickups.pickup_serial;
-
-
---
--- Name: merchant_tip_reserve_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserve_keys (
- reserve_serial bigint NOT NULL,
- reserve_priv bytea NOT NULL,
- exchange_url character varying NOT NULL,
- payto_uri character varying,
- CONSTRAINT merchant_tip_reserve_keys_reserve_priv_check CHECK ((length(reserve_priv) = 32))
-);
-
-
---
--- Name: COLUMN merchant_tip_reserve_keys.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserve_keys.payto_uri IS 'payto:// URI used to fund the reserve, may be NULL once reserve is funded';
-
-
---
--- Name: merchant_tip_reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tip_reserves (
- reserve_serial bigint NOT NULL,
- reserve_pub bytea NOT NULL,
- merchant_serial bigint NOT NULL,
- creation_time bigint NOT NULL,
- expiration bigint NOT NULL,
- merchant_initial_balance_val bigint NOT NULL,
- merchant_initial_balance_frac integer NOT NULL,
- exchange_initial_balance_val bigint DEFAULT 0 NOT NULL,
- exchange_initial_balance_frac integer DEFAULT 0 NOT NULL,
- tips_committed_val bigint DEFAULT 0 NOT NULL,
- tips_committed_frac integer DEFAULT 0 NOT NULL,
- tips_picked_up_val bigint DEFAULT 0 NOT NULL,
- tips_picked_up_frac integer DEFAULT 0 NOT NULL,
- CONSTRAINT merchant_tip_reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE merchant_tip_reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tip_reserves IS 'private keys of reserves that have not been deleted';
-
-
---
--- Name: COLUMN merchant_tip_reserves.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.expiration IS 'FIXME: EXCHANGE API needs to tell us when reserves close if we are to compute this';
-
-
---
--- Name: COLUMN merchant_tip_reserves.merchant_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.merchant_initial_balance_val IS 'Set to the initial balance the merchant told us when creating the reserve';
-
-
---
--- Name: COLUMN merchant_tip_reserves.exchange_initial_balance_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.exchange_initial_balance_val IS 'Set to the initial balance the exchange told us when we queried the reserve status';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_committed_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_committed_val IS 'Amount of outstanding approved tips that have not been picked up';
-
-
---
--- Name: COLUMN merchant_tip_reserves.tips_picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tip_reserves.tips_picked_up_val IS 'Total amount tips that have been picked up from this reserve';
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_tip_reserves_reserve_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tip_reserves_reserve_serial_seq OWNED BY public.merchant_tip_reserves.reserve_serial;
-
-
---
--- Name: merchant_tips; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_tips (
- tip_serial bigint NOT NULL,
- reserve_serial bigint NOT NULL,
- tip_id bytea NOT NULL,
- justification character varying NOT NULL,
- next_url character varying NOT NULL,
- expiration bigint NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- picked_up_val bigint DEFAULT 0 NOT NULL,
- picked_up_frac integer DEFAULT 0 NOT NULL,
- was_picked_up boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_tips_tip_id_check CHECK ((length(tip_id) = 64))
-);
-
-
---
--- Name: TABLE merchant_tips; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_tips IS 'tips that have been authorized';
-
-
---
--- Name: COLUMN merchant_tips.reserve_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.reserve_serial IS 'Reserve from which this tip is funded';
-
-
---
--- Name: COLUMN merchant_tips.expiration; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.expiration IS 'by when does the client have to pick up the tip';
-
-
---
--- Name: COLUMN merchant_tips.amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.amount_val IS 'total transaction cost for all coins including withdraw fees';
-
-
---
--- Name: COLUMN merchant_tips.picked_up_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_tips.picked_up_val IS 'Tip amount left to be picked up';
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_tips_tip_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_tips_tip_serial_seq OWNED BY public.merchant_tips.tip_serial;
-
-
---
--- Name: merchant_transfer_signatures; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_signatures (
- credit_serial bigint NOT NULL,
- signkey_serial bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- execution_time bigint NOT NULL,
- exchange_sig bytea NOT NULL,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- CONSTRAINT merchant_transfer_signatures_exchange_sig_check CHECK ((length(exchange_sig) = 64))
-);
-
-
---
--- Name: TABLE merchant_transfer_signatures; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_signatures IS 'table represents the main information returned from the /transfer request to the exchange.';
-
-
---
--- Name: COLUMN merchant_transfer_signatures.execution_time; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_signatures.execution_time IS 'Execution time as claimed by the exchange, roughly matches time seen by merchant';
-
-
---
--- Name: merchant_transfer_to_coin; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfer_to_coin (
- deposit_serial bigint NOT NULL,
- credit_serial bigint NOT NULL,
- offset_in_exchange_list bigint NOT NULL,
- exchange_deposit_value_val bigint NOT NULL,
- exchange_deposit_value_frac integer NOT NULL,
- exchange_deposit_fee_val bigint NOT NULL,
- exchange_deposit_fee_frac integer NOT NULL
-);
-
-
---
--- Name: TABLE merchant_transfer_to_coin; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfer_to_coin IS 'Mapping of (credit) transfers to (deposited) coins';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_value_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_value_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits minus refunds';
-
-
---
--- Name: COLUMN merchant_transfer_to_coin.exchange_deposit_fee_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfer_to_coin.exchange_deposit_fee_val IS 'Deposit value as claimed by the exchange, should match our values in merchant_deposits';
-
-
---
--- Name: merchant_transfers; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.merchant_transfers (
- credit_serial bigint NOT NULL,
- exchange_url character varying NOT NULL,
- wtid bytea,
- credit_amount_val bigint NOT NULL,
- credit_amount_frac integer NOT NULL,
- account_serial bigint NOT NULL,
- verified boolean DEFAULT false NOT NULL,
- confirmed boolean DEFAULT false NOT NULL,
- CONSTRAINT merchant_transfers_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- Name: TABLE merchant_transfers; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.merchant_transfers IS 'table represents the information provided by the (trusted) merchant about incoming wire transfers';
-
-
---
--- Name: COLUMN merchant_transfers.credit_amount_val; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.credit_amount_val IS 'actual value of the (aggregated) wire transfer, excluding the wire fee, according to the exchange';
-
-
---
--- Name: COLUMN merchant_transfers.verified; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.verified IS 'true once we got an acceptable response from the exchange for this transfer';
-
-
---
--- Name: COLUMN merchant_transfers.confirmed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.merchant_transfers.confirmed IS 'true once the merchant confirmed that this transfer was received';
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.merchant_transfers_credit_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.merchant_transfers_credit_serial_seq OWNED BY public.merchant_transfers.credit_serial;
-
-
---
--- Name: prewire; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.prewire (
- prewire_uuid bigint NOT NULL,
- type text NOT NULL,
- finished boolean DEFAULT false NOT NULL,
- buf bytea NOT NULL,
- failed boolean DEFAULT false NOT NULL
-);
-
-
---
--- Name: TABLE prewire; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.prewire IS 'pre-commit data for wire transfers we are about to execute';
-
-
---
--- Name: COLUMN prewire.finished; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.finished IS 'set to TRUE once bank confirmed receiving the wire transfer request';
-
-
---
--- Name: COLUMN prewire.buf; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.buf IS 'serialized data to send to the bank to execute the wire transfer';
-
-
---
--- Name: COLUMN prewire.failed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.prewire.failed IS 'set to TRUE if the bank responded with a non-transient failure to our transfer request';
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.prewire_prewire_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.prewire_prewire_uuid_seq OWNED BY public.prewire.prewire_uuid;
-
-
---
--- Name: recoup; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup (
- recoup_uuid bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- "timestamp" bigint NOT NULL,
- known_coin_id bigint NOT NULL,
- reserve_out_serial_id bigint NOT NULL,
- CONSTRAINT recoup_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: TABLE recoup; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.recoup IS 'Information about recoups that were executed';
-
-
---
--- Name: COLUMN recoup.reserve_out_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup.reserve_out_serial_id IS 'Identifies the h_blind_ev of the recouped coin.';
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_recoup_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_recoup_uuid_seq OWNED BY public.recoup.recoup_uuid;
-
-
---
--- Name: recoup_refresh; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.recoup_refresh (
- recoup_refresh_uuid bigint NOT NULL,
- coin_sig bytea NOT NULL,
- coin_blind bytea NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- "timestamp" bigint NOT NULL,
- known_coin_id bigint NOT NULL,
- rrc_serial bigint NOT NULL,
- CONSTRAINT recoup_refresh_coin_blind_check CHECK ((length(coin_blind) = 32)),
- CONSTRAINT recoup_refresh_coin_sig_check CHECK ((length(coin_sig) = 64))
-);
-
-
---
--- Name: COLUMN recoup_refresh.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.recoup_refresh.rrc_serial IS 'Identifies the h_blind_ev of the recouped coin (as h_coin_ev).';
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.recoup_refresh_recoup_refresh_uuid_seq OWNED BY public.recoup_refresh.recoup_refresh_uuid;
-
-
---
--- Name: refresh_commitments; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_commitments (
- melt_serial_id bigint NOT NULL,
- rc bytea NOT NULL,
- old_coin_sig bytea NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- noreveal_index integer NOT NULL,
- old_known_coin_id bigint NOT NULL,
- CONSTRAINT refresh_commitments_old_coin_sig_check CHECK ((length(old_coin_sig) = 64)),
- CONSTRAINT refresh_commitments_rc_check CHECK ((length(rc) = 64))
-);
-
-
---
--- Name: TABLE refresh_commitments; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_commitments IS 'Commitments made when melting coins and the gamma value chosen by the exchange.';
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_commitments_melt_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_commitments_melt_serial_id_seq OWNED BY public.refresh_commitments.melt_serial_id;
-
-
---
--- Name: refresh_revealed_coins; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_revealed_coins (
- freshcoin_index integer NOT NULL,
- link_sig bytea NOT NULL,
- coin_ev bytea NOT NULL,
- h_coin_ev bytea NOT NULL,
- ev_sig bytea NOT NULL,
- rrc_serial bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- CONSTRAINT refresh_revealed_coins_h_coin_ev_check CHECK ((length(h_coin_ev) = 64)),
- CONSTRAINT refresh_revealed_coins_link_sig_check CHECK ((length(link_sig) = 64))
-);
-
-
---
--- Name: TABLE refresh_revealed_coins; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_revealed_coins IS 'Revelations about the new coins that are to be created during a melting session.';
-
-
---
--- Name: COLUMN refresh_revealed_coins.freshcoin_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.freshcoin_index IS 'index of the fresh coin being created (one melt operation may result in multiple fresh coins)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.coin_ev IS 'envelope of the new coin to be signed';
-
-
---
--- Name: COLUMN refresh_revealed_coins.h_coin_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.h_coin_ev IS 'hash of the envelope of the new coin to be signed (for lookups)';
-
-
---
--- Name: COLUMN refresh_revealed_coins.ev_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.ev_sig IS 'exchange signature over the envelope';
-
-
---
--- Name: COLUMN refresh_revealed_coins.rrc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.rrc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_revealed_coins.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_revealed_coins.melt_serial_id IS 'Identifies the refresh commitment (rc) of the operation.';
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_revealed_coins_rrc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_revealed_coins_rrc_serial_seq OWNED BY public.refresh_revealed_coins.rrc_serial;
-
-
---
--- Name: refresh_transfer_keys; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refresh_transfer_keys (
- transfer_pub bytea NOT NULL,
- transfer_privs bytea NOT NULL,
- rtc_serial bigint NOT NULL,
- melt_serial_id bigint NOT NULL,
- CONSTRAINT refresh_transfer_keys_transfer_pub_check CHECK ((length(transfer_pub) = 32))
-);
-
-
---
--- Name: TABLE refresh_transfer_keys; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refresh_transfer_keys IS 'Transfer keys of a refresh operation (the data revealed to the exchange).';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_pub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_pub IS 'transfer public key for the gamma index';
-
-
---
--- Name: COLUMN refresh_transfer_keys.transfer_privs; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.transfer_privs IS 'array of TALER_CNC_KAPPA - 1 transfer private keys that have been revealed, with the gamma entry being skipped';
-
-
---
--- Name: COLUMN refresh_transfer_keys.rtc_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.rtc_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: COLUMN refresh_transfer_keys.melt_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refresh_transfer_keys.melt_serial_id IS 'Identifies the refresh commitment (rc) of the operation.';
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refresh_transfer_keys_rtc_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refresh_transfer_keys_rtc_serial_seq OWNED BY public.refresh_transfer_keys.rtc_serial;
-
-
---
--- Name: refunds; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.refunds (
- refund_serial_id bigint NOT NULL,
- merchant_sig bytea NOT NULL,
- rtransaction_id bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- deposit_serial_id bigint NOT NULL,
- CONSTRAINT refunds_merchant_sig_check CHECK ((length(merchant_sig) = 64))
-);
-
-
---
--- Name: TABLE refunds; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.refunds IS 'Data on coins that were refunded. Technically, refunds always apply against specific deposit operations involving a coin. The combination of coin_pub, merchant_pub, h_contract_terms and rtransaction_id MUST be unique, and we usually select by coin_pub so that one goes first.';
-
-
---
--- Name: COLUMN refunds.rtransaction_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.rtransaction_id IS 'used by the merchant to make refunds unique in case the same coin for the same deposit gets a subsequent (higher) refund';
-
-
---
--- Name: COLUMN refunds.deposit_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.refunds.deposit_serial_id IS 'Identifies ONLY the merchant_pub, h_contract_terms and known_coin_id. Multiple deposits may match a refund, this only identifies one of them.';
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.refunds_refund_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.refunds_refund_serial_id_seq OWNED BY public.refunds.refund_serial_id;
-
-
---
--- Name: reserves; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves (
- reserve_pub bytea NOT NULL,
- account_details text NOT NULL,
- current_balance_val bigint NOT NULL,
- current_balance_frac integer NOT NULL,
- expiration_date bigint NOT NULL,
- gc_date bigint NOT NULL,
- reserve_uuid bigint NOT NULL,
- CONSTRAINT reserves_reserve_pub_check CHECK ((length(reserve_pub) = 32))
-);
-
-
---
--- Name: TABLE reserves; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves IS 'Summarizes the balance of a reserve. Updated when new funds are added or withdrawn.';
-
-
---
--- Name: COLUMN reserves.expiration_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.expiration_date IS 'Used to trigger closing of reserves that have not been drained after some time';
-
-
---
--- Name: COLUMN reserves.gc_date; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves.gc_date IS 'Used to forget all information about a reserve during garbage collection';
-
-
---
--- Name: reserves_close; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_close (
- close_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid bytea NOT NULL,
- receiver_account text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- reserve_uuid bigint NOT NULL,
- CONSTRAINT reserves_close_wtid_check CHECK ((length(wtid) = 32))
-);
-
-
---
--- Name: TABLE reserves_close; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_close IS 'wire transfers executed by the reserve to close reserves';
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_close_close_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_close_close_uuid_seq OWNED BY public.reserves_close.close_uuid;
-
-
---
--- Name: reserves_in; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_in (
- reserve_in_serial_id bigint NOT NULL,
- wire_reference bigint NOT NULL,
- credit_val bigint NOT NULL,
- credit_frac integer NOT NULL,
- sender_account_details text NOT NULL,
- exchange_account_section text NOT NULL,
- execution_date bigint NOT NULL,
- reserve_uuid bigint NOT NULL
-);
-
-
---
--- Name: TABLE reserves_in; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_in IS 'list of transfers of funds into the reserves, one per incoming wire transfer';
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_in_reserve_in_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_in_reserve_in_serial_id_seq OWNED BY public.reserves_in.reserve_in_serial_id;
-
-
---
--- Name: reserves_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.reserves_out (
- reserve_out_serial_id bigint NOT NULL,
- h_blind_ev bytea NOT NULL,
- denom_sig bytea NOT NULL,
- reserve_sig bytea NOT NULL,
- execution_date bigint NOT NULL,
- amount_with_fee_val bigint NOT NULL,
- amount_with_fee_frac integer NOT NULL,
- reserve_uuid bigint NOT NULL,
- denominations_serial bigint NOT NULL,
- CONSTRAINT reserves_out_h_blind_ev_check CHECK ((length(h_blind_ev) = 64)),
- CONSTRAINT reserves_out_reserve_sig_check CHECK ((length(reserve_sig) = 64))
-);
-
-
---
--- Name: TABLE reserves_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.reserves_out IS 'Withdraw operations performed on reserves.';
-
-
---
--- Name: COLUMN reserves_out.h_blind_ev; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.reserves_out.h_blind_ev IS 'Hash of the blinded coin, used as primary key here so that broken clients that use a non-random coin or blinding factor fail to withdraw (otherwise they would fail on deposit when the coin is not unique there).';
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_out_reserve_out_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_out_reserve_out_serial_id_seq OWNED BY public.reserves_out.reserve_out_serial_id;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.reserves_reserve_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.reserves_reserve_uuid_seq OWNED BY public.reserves.reserve_uuid;
-
-
---
--- Name: revolving_work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE UNLOGGED TABLE public.revolving_work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row integer NOT NULL,
- end_row integer NOT NULL,
- active boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE revolving_work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.revolving_work_shards IS 'coordinates work between multiple processes working on the same job with partitions that need to be repeatedly processed; unlogged because on system crashes the locks represented by this table will have to be cleared anyway, typically using "taler-exchange-dbinit -s"';
-
-
---
--- Name: COLUMN revolving_work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN revolving_work_shards.active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.active IS 'set to TRUE when a worker is active on the shard';
-
-
---
--- Name: COLUMN revolving_work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.revolving_work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.revolving_work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.revolving_work_shards_shard_serial_id_seq OWNED BY public.revolving_work_shards.shard_serial_id;
-
-
---
--- Name: signkey_revocations; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.signkey_revocations (
- signkey_revocations_serial_id bigint NOT NULL,
- esk_serial bigint NOT NULL,
- master_sig bytea NOT NULL,
- CONSTRAINT signkey_revocations_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE signkey_revocations; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.signkey_revocations IS 'remembering which online signing keys have been revoked';
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.signkey_revocations_signkey_revocations_serial_id_seq OWNED BY public.signkey_revocations.signkey_revocations_serial_id;
-
-
---
--- Name: wire_accounts; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_accounts (
- payto_uri character varying NOT NULL,
- master_sig bytea,
- is_active boolean NOT NULL,
- last_change bigint NOT NULL,
- CONSTRAINT wire_accounts_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_accounts; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_accounts IS 'Table with current and historic bank accounts of the exchange. Entries never expire as we need to remember the last_change column indefinitely.';
-
-
---
--- Name: COLUMN wire_accounts.payto_uri; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.payto_uri IS 'payto URI (RFC 8905) with the bank account of the exchange.';
-
-
---
--- Name: COLUMN wire_accounts.master_sig; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.master_sig IS 'Signature of purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS';
-
-
---
--- Name: COLUMN wire_accounts.is_active; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.is_active IS 'true if we are currently supporting the use of this account.';
-
-
---
--- Name: COLUMN wire_accounts.last_change; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_accounts.last_change IS 'Latest time when active status changed. Used to detect replays of old messages.';
-
-
---
--- Name: wire_auditor_account_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_account_progress (
- master_pub bytea NOT NULL,
- account_name text NOT NULL,
- last_wire_reserve_in_serial_id bigint DEFAULT 0 NOT NULL,
- last_wire_wire_out_serial_id bigint DEFAULT 0 NOT NULL,
- wire_in_off bigint,
- wire_out_off bigint
-);
-
-
---
--- Name: TABLE wire_auditor_account_progress; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_auditor_account_progress IS 'information as to which transactions the auditor has processed in the exchange database. Used for SELECTing the
- statements to process. The indices include the last serial ID from the respective tables that we have processed. Thus, we need to select those table entries that are strictly larger (and process in monotonically increasing order).';
-
-
---
--- Name: wire_auditor_progress; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_auditor_progress (
- master_pub bytea NOT NULL,
- last_timestamp bigint NOT NULL,
- last_reserve_close_uuid bigint NOT NULL
-);
-
-
---
--- Name: wire_fee; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_fee (
- wire_method character varying NOT NULL,
- start_date bigint NOT NULL,
- end_date bigint NOT NULL,
- wire_fee_val bigint NOT NULL,
- wire_fee_frac integer NOT NULL,
- closing_fee_val bigint NOT NULL,
- closing_fee_frac integer NOT NULL,
- master_sig bytea NOT NULL,
- wire_fee_serial bigint NOT NULL,
- CONSTRAINT wire_fee_master_sig_check CHECK ((length(master_sig) = 64))
-);
-
-
---
--- Name: TABLE wire_fee; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_fee IS 'list of the wire fees of this exchange, by date';
-
-
---
--- Name: COLUMN wire_fee.wire_fee_serial; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_fee.wire_fee_serial IS 'needed for exchange-auditor replication logic';
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_fee_wire_fee_serial_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_fee_wire_fee_serial_seq OWNED BY public.wire_fee.wire_fee_serial;
-
-
---
--- Name: wire_out; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.wire_out (
- wireout_uuid bigint NOT NULL,
- execution_date bigint NOT NULL,
- wtid_raw bytea NOT NULL,
- wire_target text NOT NULL,
- exchange_account_section text NOT NULL,
- amount_val bigint NOT NULL,
- amount_frac integer NOT NULL,
- CONSTRAINT wire_out_wtid_raw_check CHECK ((length(wtid_raw) = 32))
-);
-
-
---
--- Name: TABLE wire_out; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.wire_out IS 'wire transfers the exchange has executed';
-
-
---
--- Name: COLUMN wire_out.exchange_account_section; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.wire_out.exchange_account_section IS 'identifies the configuration section with the debit account of this payment';
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.wire_out_wireout_uuid_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.wire_out_wireout_uuid_seq OWNED BY public.wire_out.wireout_uuid;
-
-
---
--- Name: work_shards; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.work_shards (
- shard_serial_id bigint NOT NULL,
- last_attempt bigint NOT NULL,
- start_row bigint NOT NULL,
- end_row bigint NOT NULL,
- completed boolean DEFAULT false NOT NULL,
- job_name character varying NOT NULL
-);
-
-
---
--- Name: TABLE work_shards; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON TABLE public.work_shards IS 'coordinates work between multiple processes working on the same job';
-
-
---
--- Name: COLUMN work_shards.shard_serial_id; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.shard_serial_id IS 'unique serial number identifying the shard';
-
-
---
--- Name: COLUMN work_shards.last_attempt; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.last_attempt IS 'last time a worker attempted to work on the shard';
-
-
---
--- Name: COLUMN work_shards.start_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.start_row IS 'row at which the shard scope starts, inclusive';
-
-
---
--- Name: COLUMN work_shards.end_row; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.end_row IS 'row at which the shard scope ends, exclusive';
-
-
---
--- Name: COLUMN work_shards.completed; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.completed IS 'set to TRUE once the shard is finished by a worker';
-
-
---
--- Name: COLUMN work_shards.job_name; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON COLUMN public.work_shards.job_name IS 'unique name of the job the workers on this shard are performing';
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.work_shards_shard_serial_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.work_shards_shard_serial_id_seq OWNED BY public.work_shards.shard_serial_id;
-
-
---
--- Name: aggregation_tracking aggregation_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking ALTER COLUMN aggregation_serial_id SET DEFAULT nextval('public.aggregation_tracking_aggregation_serial_id_seq'::regclass);
-
-
---
--- Name: app_bankaccount account_no; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount ALTER COLUMN account_no SET DEFAULT nextval('public.app_bankaccount_account_no_seq'::regclass);
-
-
---
--- Name: app_banktransaction id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction ALTER COLUMN id SET DEFAULT nextval('public.app_banktransaction_id_seq'::regclass);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs ALTER COLUMN auditor_denom_serial SET DEFAULT nextval('public.auditor_denom_sigs_auditor_denom_serial_seq'::regclass);
-
-
---
--- Name: auditor_reserves auditor_reserves_rowid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves ALTER COLUMN auditor_reserves_rowid SET DEFAULT nextval('public.auditor_reserves_auditor_reserves_rowid_seq'::regclass);
-
-
---
--- Name: auditors auditor_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors ALTER COLUMN auditor_uuid SET DEFAULT nextval('public.auditors_auditor_uuid_seq'::regclass);
-
-
---
--- Name: auth_group id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group ALTER COLUMN id SET DEFAULT nextval('public.auth_group_id_seq'::regclass);
-
-
---
--- Name: auth_group_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_group_permissions_id_seq'::regclass);
-
-
---
--- Name: auth_permission id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission ALTER COLUMN id SET DEFAULT nextval('public.auth_permission_id_seq'::regclass);
-
-
---
--- Name: auth_user id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user ALTER COLUMN id SET DEFAULT nextval('public.auth_user_id_seq'::regclass);
-
-
---
--- Name: auth_user_groups id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups ALTER COLUMN id SET DEFAULT nextval('public.auth_user_groups_id_seq'::regclass);
-
-
---
--- Name: auth_user_user_permissions id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions ALTER COLUMN id SET DEFAULT nextval('public.auth_user_user_permissions_id_seq'::regclass);
-
-
---
--- Name: denomination_revocations denom_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations ALTER COLUMN denom_revocations_serial_id SET DEFAULT nextval('public.denomination_revocations_denom_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: denominations denominations_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations ALTER COLUMN denominations_serial SET DEFAULT nextval('public.denominations_denominations_serial_seq'::regclass);
-
-
---
--- Name: deposit_confirmations serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations ALTER COLUMN serial_id SET DEFAULT nextval('public.deposit_confirmations_serial_id_seq'::regclass);
-
-
---
--- Name: deposits deposit_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits ALTER COLUMN deposit_serial_id SET DEFAULT nextval('public.deposits_deposit_serial_id_seq'::regclass);
-
-
---
--- Name: django_content_type id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type ALTER COLUMN id SET DEFAULT nextval('public.django_content_type_id_seq'::regclass);
-
-
---
--- Name: django_migrations id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations ALTER COLUMN id SET DEFAULT nextval('public.django_migrations_id_seq'::regclass);
-
-
---
--- Name: exchange_sign_keys esk_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys ALTER COLUMN esk_serial SET DEFAULT nextval('public.exchange_sign_keys_esk_serial_seq'::regclass);
-
-
---
--- Name: known_coins known_coin_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins ALTER COLUMN known_coin_id SET DEFAULT nextval('public.known_coins_known_coin_id_seq'::regclass);
-
-
---
--- Name: merchant_accounts account_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts ALTER COLUMN account_serial SET DEFAULT nextval('public.merchant_accounts_account_serial_seq'::regclass);
-
-
---
--- Name: merchant_deposits deposit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits ALTER COLUMN deposit_serial SET DEFAULT nextval('public.merchant_deposits_deposit_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_signing_keys signkey_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys ALTER COLUMN signkey_serial SET DEFAULT nextval('public.merchant_exchange_signing_keys_signkey_serial_seq'::regclass);
-
-
---
--- Name: merchant_exchange_wire_fees wirefee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees ALTER COLUMN wirefee_serial SET DEFAULT nextval('public.merchant_exchange_wire_fees_wirefee_serial_seq'::regclass);
-
-
---
--- Name: merchant_instances merchant_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances ALTER COLUMN merchant_serial SET DEFAULT nextval('public.merchant_instances_merchant_serial_seq'::regclass);
-
-
---
--- Name: merchant_inventory product_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory ALTER COLUMN product_serial SET DEFAULT nextval('public.merchant_inventory_product_serial_seq'::regclass);
-
-
---
--- Name: merchant_orders order_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders ALTER COLUMN order_serial SET DEFAULT nextval('public.merchant_orders_order_serial_seq'::regclass);
-
-
---
--- Name: merchant_refunds refund_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds ALTER COLUMN refund_serial SET DEFAULT nextval('public.merchant_refunds_refund_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_pickups pickup_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups ALTER COLUMN pickup_serial SET DEFAULT nextval('public.merchant_tip_pickups_pickup_serial_seq'::regclass);
-
-
---
--- Name: merchant_tip_reserves reserve_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves ALTER COLUMN reserve_serial SET DEFAULT nextval('public.merchant_tip_reserves_reserve_serial_seq'::regclass);
-
-
---
--- Name: merchant_tips tip_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips ALTER COLUMN tip_serial SET DEFAULT nextval('public.merchant_tips_tip_serial_seq'::regclass);
-
-
---
--- Name: merchant_transfers credit_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers ALTER COLUMN credit_serial SET DEFAULT nextval('public.merchant_transfers_credit_serial_seq'::regclass);
-
-
---
--- Name: prewire prewire_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire ALTER COLUMN prewire_uuid SET DEFAULT nextval('public.prewire_prewire_uuid_seq'::regclass);
-
-
---
--- Name: recoup recoup_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup ALTER COLUMN recoup_uuid SET DEFAULT nextval('public.recoup_recoup_uuid_seq'::regclass);
-
-
---
--- Name: recoup_refresh recoup_refresh_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh ALTER COLUMN recoup_refresh_uuid SET DEFAULT nextval('public.recoup_refresh_recoup_refresh_uuid_seq'::regclass);
-
-
---
--- Name: refresh_commitments melt_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments ALTER COLUMN melt_serial_id SET DEFAULT nextval('public.refresh_commitments_melt_serial_id_seq'::regclass);
-
-
---
--- Name: refresh_revealed_coins rrc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins ALTER COLUMN rrc_serial SET DEFAULT nextval('public.refresh_revealed_coins_rrc_serial_seq'::regclass);
-
-
---
--- Name: refresh_transfer_keys rtc_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys ALTER COLUMN rtc_serial SET DEFAULT nextval('public.refresh_transfer_keys_rtc_serial_seq'::regclass);
-
-
---
--- Name: refunds refund_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds ALTER COLUMN refund_serial_id SET DEFAULT nextval('public.refunds_refund_serial_id_seq'::regclass);
-
-
---
--- Name: reserves reserve_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves ALTER COLUMN reserve_uuid SET DEFAULT nextval('public.reserves_reserve_uuid_seq'::regclass);
-
-
---
--- Name: reserves_close close_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close ALTER COLUMN close_uuid SET DEFAULT nextval('public.reserves_close_close_uuid_seq'::regclass);
-
-
---
--- Name: reserves_in reserve_in_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in ALTER COLUMN reserve_in_serial_id SET DEFAULT nextval('public.reserves_in_reserve_in_serial_id_seq'::regclass);
-
-
---
--- Name: reserves_out reserve_out_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out ALTER COLUMN reserve_out_serial_id SET DEFAULT nextval('public.reserves_out_reserve_out_serial_id_seq'::regclass);
-
-
---
--- Name: revolving_work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.revolving_work_shards_shard_serial_id_seq'::regclass);
-
-
---
--- Name: signkey_revocations signkey_revocations_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations ALTER COLUMN signkey_revocations_serial_id SET DEFAULT nextval('public.signkey_revocations_signkey_revocations_serial_id_seq'::regclass);
-
-
---
--- Name: wire_fee wire_fee_serial; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee ALTER COLUMN wire_fee_serial SET DEFAULT nextval('public.wire_fee_wire_fee_serial_seq'::regclass);
-
-
---
--- Name: wire_out wireout_uuid; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out ALTER COLUMN wireout_uuid SET DEFAULT nextval('public.wire_out_wireout_uuid_seq'::regclass);
-
-
---
--- Name: work_shards shard_serial_id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards ALTER COLUMN shard_serial_id SET DEFAULT nextval('public.work_shards_shard_serial_id_seq'::regclass);
-
-
---
--- Data for Name: patches; Type: TABLE DATA; Schema: _v; Owner: -
---
-
-COPY _v.patches (patch_name, applied_tsz, applied_by, requires, conflicts) FROM stdin;
-exchange-0001 2021-09-05 15:51:30.994406+02 grothoff {} {}
-exchange-0002 2021-09-05 15:51:31.112835+02 grothoff {} {}
-exchange-0003 2021-09-05 15:51:31.238693+02 grothoff {} {}
-merchant-0001 2021-09-05 15:51:31.318529+02 grothoff {} {}
-merchant-0002 2021-09-05 15:51:31.4434+02 grothoff {} {}
-auditor-0001 2021-09-05 15:51:31.518039+02 grothoff {} {}
-\.
-
-
---
--- Data for Name: aggregation_tracking; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.aggregation_tracking (aggregation_serial_id, deposit_serial_id, wtid_raw) FROM stdin;
-\.
-
-
---
--- Data for Name: app_bankaccount; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_bankaccount (is_public, account_no, balance, user_id) FROM stdin;
-t 3 +TESTKUDOS:0 3
-t 4 +TESTKUDOS:0 4
-t 5 +TESTKUDOS:0 5
-t 6 +TESTKUDOS:0 6
-t 7 +TESTKUDOS:0 7
-t 8 +TESTKUDOS:0 8
-t 9 +TESTKUDOS:0 9
-f 10 +TESTKUDOS:0 10
-f 11 +TESTKUDOS:0 11
-t 1 -TESTKUDOS:100 1
-f 12 +TESTKUDOS:92 12
-t 2 +TESTKUDOS:8 2
-\.
-
-
---
--- Data for Name: app_banktransaction; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_banktransaction (id, amount, subject, date, cancelled, request_uid, credit_account_id, debit_account_id) FROM stdin;
-1 TESTKUDOS:100 Joining bonus 2021-09-05 15:51:39.43399+02 f ac74297b-e74a-44db-9cca-b9a73b489f20 12 1
-2 TESTKUDOS:8 EPDERZBEFA9AZRZ8VEZXS77QSMT5GW7YDQX4P907Z7A7MHJ19RAG 2021-09-05 15:51:43.187007+02 f 654d34f2-e853-4835-aebd-0957d33f3b25 2 12
-\.
-
-
---
--- Data for Name: app_talerwithdrawoperation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.app_talerwithdrawoperation (withdraw_id, amount, selection_done, confirmation_done, aborted, selected_reserve_pub, selected_exchange_account_id, withdraw_account_id) FROM stdin;
-302c25e0-8514-430c-9f1a-c64f9a939ff1 TESTKUDOS:8 t t f EPDERZBEFA9AZRZ8VEZXS77QSMT5GW7YDQX4P907Z7A7MHJ19RAG 2 12
-\.
-
-
---
--- Data for Name: auditor_balance_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_balance_summary (master_pub, denom_balance_val, denom_balance_frac, deposit_fee_balance_val, deposit_fee_balance_frac, melt_fee_balance_val, melt_fee_balance_frac, refund_fee_balance_val, refund_fee_balance_frac, risk_val, risk_frac, loss_val, loss_frac, irregular_recoup_val, irregular_recoup_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_denom_sigs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denom_sigs (auditor_denom_serial, auditor_uuid, denominations_serial, auditor_sig) FROM stdin;
-1 1 12 \\xe329be45d91a060ce220278f3e4aa16f04cc4aada9259c6208fa4d26529fa2f84e81d77ab3f9655ae5fdef9b80b187d237a6530f03e3ff13628e11552b3fa10b
-2 1 35 \\x62f22de373436a7fd5c6bc93027055e3c3a17c20e2ed39a456e3e757a4202ab255941da258304f40800dc9ac2d302a7ebe67f703adc730a922a7e928c14fb10b
-3 1 150 \\x0904571975cfc01338a5389bea266086dddae89baf854aca35d5887d1fbe0ad74ee39e6dc6408a05b0b11c0d6a90624fd56cce12e72eded4c2d8ecf3c963ef0a
-4 1 216 \\x4f818c07a0a07215efda7864ea4e151451f1bab39dd45b71368a68eea7652874b052343aae84fa878c16129e83fff7c407f63d72a78a2d15489abd0fdf8ebc06
-5 1 394 \\x2fef6e947f4cc7fbb66fa9e492b973c6ca62e69a5583d5f2bd86592fdccf1b85ff180409cfc2f36a1a305091ec18e7a5e4ae14766767dd7f2e58ab0ec950d106
-6 1 398 \\x5e2afd7712763146b5c1ce4728e44d01ade776807a577c47cc8f1fa0534781e0c6dbf19a8041e54648fffaa7ba8eb5fa49d8d02d1c22ae89eda9c625159b7504
-7 1 302 \\x7352c7aad6eb3ff603b808586a6e495cc7c8c1b7a12002df225d63f10ad4fa5e74d4ce77fccd88e1a8f7ff0712f80a1a4870e4c05bd8edb11d9f50fb7a854308
-8 1 424 \\x653dfe96063599b790ca4521e681bd40a2c66c02b96d3b240d87fdddf33e8e63acdf9b257ed5a7c6018e1e85807a2f66d648c9c01b3db609cd992804d127e703
-9 1 20 \\x7e4627b9751c1200fd403719391977c836d58ab04722cc19391e79ff5cebf38f7ad68ac1266defe1d246a921d1b1aac7da10fcbf9a7d8c40d389ca5c4c754100
-10 1 28 \\x4346b330d264e60b292e75434214fa2039be27e09c2bb25099ae2532bd57bd0a83544770fecbc31ab810b350c75092d037f8ed3919c85d34565eea844f285102
-11 1 283 \\xc3d9e2ae8048a42762807857c7a9194c1ca9c7b15b56a92eb8165f714032b203309bea3509f7d6d26dc95b325d1705f2bcfbaf2821c87802dcc556c1101c7a02
-12 1 420 \\x08fc51afb307befd245854bf9acde793fb11f4fc7880aa40b25b2648bbd1c9481ea79525a5b28e3631566c6286cb3e375c1979241f1cf751c8ac23cb25706602
-13 1 325 \\xe8127fe871b246e2c13e90aff877015071aa9e9967c3b6e68163cbc7b5f04a51e0d5103471eefd52ef79a24aae4f1034766482258c476c045a37ea2ef2733200
-14 1 341 \\xe7dbfd6ac07ca1a1e4061e2da45021d242f6094f2611d290da5fcb253d29cf2a585beecb940b36fe07dd7414dc77cd1b5a00a400e265b1e21ac1f60be02cf20a
-15 1 30 \\xcdd34053ddf7f561fbc769bde2a6828c0139f1b516ffc5af333a1da28b2a89ca2413d318512a5cf00a01cd2eb6a9c627cabec2c960dfa438ed996959936fd60e
-16 1 132 \\xd572f08f14ecd34f0bc7b93dba04feb2f264dc691ff9b42e3e4cb7aca6a4b42b8ba40da9e6be244af2622914fd7c76487e7c4783beea3cf0d8f9787818c0440e
-17 1 106 \\xadbe2c0500f202ed18ed3c191ca1a2a01820b76759ae66a28dbc232f3a1c74861d36ebd1e512dc580b06f20cc194186fb0bff502e96daf94c7387cded8b94505
-18 1 48 \\xd26463c7589c186e0d21e1c4ba0388e2b46b4727307d5e49a3126a01debeeaf254c9093dfef27fb0e0084acb6ddb4587475d576ab63d1a59ffade13def9dff0a
-19 1 287 \\x111d831b33322c0a97f130f80ebe7bb16decd8e980796d0788d08ebe07ea768416a77dc485ed17ad0f1567fadb879eccc8526c00420bf1abb62a95134f7f6506
-20 1 317 \\x25049d8a507798c86bf3cf3b479652d9a47de082630381152499b98c061c0a47dabd338cfcdb2c7295f4ca21fec7936f074982f588b5f3ff7b416694b7714209
-21 1 98 \\xfb0d880987c0a6fb965a8fbc21a59e94ba7e29e25255e542f4f34e4feb3485d2d9aecd1bf2740a7f652d0cbb705f1c175782e70987906f711f495b4a0cc9b80d
-22 1 326 \\x75ce2fbe37051ac535fccdc18f3a7a0f131f2261e6e59007b0bdaef59b21568c48b79d6b12d828d0442a41b4550c4f497711383938ea8115a8df2a0309acae09
-23 1 357 \\x141114570a85dc2e99b9976b6ffe2f2507a050ecd87356fd650f8c9bbe5b5849fa8e2f5addf1c73a6929c10789643a49ee3530ea17dbaf8134c8fe6f35a1ba0d
-24 1 138 \\xb60d3a195ad0fae09cd89184494385777253cddcaa6e74676fae80b3070a634e5e68f74b2dd23c7cf24ada143973eaf34ca5e63f2c71bfbd7b71ff4a919cae0e
-25 1 114 \\x59479a6a4be0fc14abceff37d928b08d67aa48c37a7f363689f8fd0b1609ecc9c99fd35939763ebc0393094c1bc1ffaca850d5f68c1f93a8352fb517f8eef701
-26 1 49 \\x33e0433bd0ba0ffe65b9287179cf5462c16a3fdc715a962cbc824a90d8dfc147f668cae6623ac0e90173ad7362ec660d59e80deb0fd4e435ff07cf569e78c90b
-27 1 116 \\x09af2c3c43f7a6e8bb0e16c4de508c5669098c5e7a53e31f86aece908f978bc4694bce4637c17b198acec82edddd886f21e6e1c4519632df4a3931f7622e1901
-28 1 131 \\x028a5ef76db23897682d46618c9950bff30013852befd7e44ecb4b4d0719ea1f6f1389c2926b90084dc691e8b876d723e06d2850a574b015e0bd443063eb5709
-29 1 175 \\xf01876774f0e935eb8e25b84e1caa934cad3428d411021d4233e00d44f115eba728bdf91e5d86daf495322c8ddc3beb317e437d758e1b5ff4b7c39960086d104
-30 1 306 \\x67c9d20a9c2ec9b42d402fc8f8b0af0913b46c70a7cbcbfd84c4190845aa488b0aea3e529255ed7652ea2f3ad89e0681fa95570cb286a93ffb3b67f20cb3f70f
-31 1 6 \\x7d36845d447ea114b96ceb2410b1fd139fd6273c38b5be63aeec5461a4b2d127597f083bd5d5dfbd3f82f71e6b546787b11f433cdae43efc1bf83352631bab09
-32 1 415 \\xa6e98010254e688cc9cafc27125386175f841446fe6a349b65504af03a4c57a2acec24d3eb7a4f55aa760ceff8be856aed7da88b6fe706e269e7869eda83300f
-33 1 413 \\x8fb96983d99163551866dc42f71e8e3747eb8f8e6198d47de478356927316dddff537542b032b67a1a531e65e68aeacb0ee1e3db92947d2945c53774b17ac20b
-34 1 66 \\x9cf338131c8fc8048f10bd913300447c31f4381d9378fc012d5b78fea5749f555009c098709b25fc48d975e1b2d83e896e44453b46c655f07ed20a7b6052e10c
-35 1 266 \\x5c80ea3717e6d6a2dc89282f349e2731e13f73b011b15732962fc7ba86215067626b822e862dd8fa7b5619188c59aa31f999be8e8d867d8fd64658eb9762a60d
-36 1 361 \\x8db3f2e011c041f842eba7eb278150a4f0a870c1d621022865f1b69e96a4f705e7a2e3306d740ee90b01c2e0f4b461133e5c443c174c6ad20a5a73ec048e6003
-37 1 50 \\x887f105b08d9f2cea5005f31ae2e71e7b15f979ba029d62c2f376d4c6359209f1b2562d93e88ba8193154cc34f1c86b703b1b81b8adbfcf6284bb32a0bea5a07
-38 1 80 \\x8f37ab69a7afc376e040aa12e506ca7da4eeb734758060e790f74897870a61acb0a5c95e7c3f350e4033e225b80bacd54cc6ef74a9744575baeac14132b93406
-39 1 282 \\x1b625c0a4a316582b9d159bcd0c9f931736b48cdaf460528cfae8a82aa2c5388aafca5de230b4555565474af898596555493d3fe569f87b08c9391016b08c109
-40 1 76 \\x968d90bcbeed1cc54e5b46bfa6140f49f41c9d1f1f6fdcb178d70fbcdd1b920614d0d5242620159495a4fd1e5bd15ad7c660dcb45619a02f568ffc0e129fe10d
-41 1 103 \\xc5f1aa6f9ffd11b271568111eb661c819281cb6786c2ff6d687e566da896da0be93802eefbe80c63e338dc3efbeafcc514ea1e334513a6f0b307ecc47983d505
-42 1 248 \\xca0eb3d0eedf614a78a63fc8b23e3f10b3c324d013a53ddda290300078895dd01c9cc42e5cf5800e77c3c7c8c10141b5ac8658282ce62631e3c3a44df0776a06
-43 1 393 \\x929eead726fd579df00712c81175e4a99dea6994a9f843eb2bed12a47441e4f9fb878706d50f6a701fad1dc3aca7b7bad2d70d338da3d74908f05afa40c4ef02
-44 1 329 \\xc1067272738bdcdc3a261e4221de5373d32e805a547c868a5f2a6e490aaf1341cdffea5dc8cca8d9cd21c36d93f50177ed8310032f0cba52607a0ee3e36c0708
-45 1 126 \\xce99d0b403bb551d33c6655f8ed7016d00164c504b7c6ce8b861271b70b3d970b3043aaf7f73fe015517dc317f3ad24c06659db0af7fc0afd2d22903e633c401
-46 1 133 \\xbd7af5929fee84e5a67b7caaee45f872aad8f6fbd9255c4b6be744400814a3b9529f427fe1ccf94c709b088f9d59f006058252ca637477227c773ccf52b1f201
-47 1 292 \\x2a523f90d98592482d839631ab66e40813fad95009d6086c5f7498f4edbfd4cfc6203dcf4b57cf7c185d19c0f0fc74b8f326eafbbdc4767eadf936f4611c1100
-48 1 349 \\x500a3910060373a5cbb43ddbb72ef218cb17c16ee59e67ea1bed389980788ad3124220c9f1cdec1d3935498325ae9a1b6db3fb3d64b3063765eff72fdc1ead08
-49 1 265 \\x419b812f4f3fbc6ee405d5d0520952a09dac0bc16e175eec9c98b2fb7e23f7a3891f1af15db70e57ae4e312fd1837a382bb0f63901ca92c7c9b61a35193b8b08
-50 1 197 \\x3665298f648a69958bc654ba75728921d8efdb4620e6d7069aef85cb09c4982a1ab24dfadfffd20dbfb57003eece3a2a25208939e26e0392f8ab7ad403c98706
-51 1 39 \\xefb4a6e3e12bea476ebfb54c3d2a40baece5186e1e467db4e1532918c35d3592b60b2665df87d40ef3c67e62e5076de2a5b4844297f20d3ced3c44ccc6febd01
-52 1 153 \\x16756513b673319b8d68b130d8ba2899d754dc7c823e4a78d92055d221f0f74997c14c413c8f5e4f7c88e4a7759c2bdef63d41d0d69a9a0e6718ed71214f950b
-53 1 323 \\xfa2bee239873bbb9da85ee05c5acc58967171df7226fd042bc94dd21521ce90e1c5bcd73dbce5d4c8537b82471d4ca8f772f3f1e21c316359be7998ee1f2b109
-54 1 185 \\xfb99a44f7e308fccbd3cf1cc7af59f2967e5de85624bcb5f3c5de6c4f5bb723c35ddd9fca0e909fd670720915b9b50a9d6e48a4fdd269f38303a6a4f1bf5fa0f
-55 1 298 \\xd5f43bf7118117dd96b709e5730cfa4f6b166081ea899353d35da49a674ff3a529ae8ed263f7ef5e3cd920da66eaaab2878416ba5ffcb5245d26d51f14881302
-56 1 409 \\x2a7caf0f6a6eead4d8b8ac031c4746d40a7bd678a24bf0fde0917ae944fb6fa44720ee1213dbe31a1e5779ee5a4a4a0373133c12050de07aba981d2178950e08
-57 1 379 \\x1e1d72474d0ca484155771ee1685e8524daa8479d7ed122014c38cb9aae61901b156cab6fee2d9986a9832701c66979a3f92ddf8010ee8dea575385f1c6dc60c
-58 1 53 \\x80385e1fc3320c6aa025aa4ed84ac4c170713a4e88b5d37859f931904b09772ee767ca89788bcc17dbb23bee1a2942d491341525f0ff65337a109c135b6c3f08
-59 1 382 \\xdfdb08d084d0b4beefa4b81d021daa9d30cfebe454a9b9a5697ab298b10836397fe457281f7b8aefea77d7d5d21146e9a614e7aa66dff1025e85f482b8f03c0a
-60 1 253 \\x1085a49c4b37250f71886574c93e40a438866ab0612886c70e54737d5de60bf0b2a599ff1394d4966f0a5a3a6c6bda8168e8256dee550a27adffe60964d85108
-61 1 71 \\x961cb564eeeda880925bd89fa2d9e5d285368b9c43c1970fc3ed4e92741ed49420624b3335a823b6ec4a0688fc15af918b21e0a49ee59cd9c65867fdd6f66407
-62 1 176 \\xd850a7f9ac16461f1226bf29680ee6dea1997d73e164a3efd400ddebc7e273b9afe6196cc7fa0b18c95f29c3c8968b63538e9f9316aafd35ef11782e0eb5710f
-63 1 21 \\x0575878ef6232fec879fa68388309f077fc87099c922a1bc0ccbd927705446a34e29aa0a62c4903f696698dbab3384dbf42e98c789e3ec615488af68790b0b04
-64 1 271 \\x25d9d82f2929c7677b52abd597d9bb5f0e37a8e6a5384e79cc07ef4dd99ab10cb5a3a44826a34054d75f84d69cf0a254554703ba9e4a296fa6ed8ada0d39cb0b
-65 1 73 \\xafd45534934dc2fcf7aab025a10466c27a0fe9da20064c3713d20ac4d3e956eb9a8486aa488af24cbe5ffae0f11b0deab9ec0fbd05087b69d7976d6df7076706
-66 1 214 \\xae0010fa2412b944ea75c4e694c71b7324946f238cc08d2d5f28c95131b75a6ed41394ef1090efd73dabb7420ed233cb4388073a1d7d1a43d7fc23092a1e2a0e
-67 1 115 \\x4d177702a4d5e44895293a9c3b0233352b6d77387f26532f65b7a3e1614b9f0527b407f863cd882e0b957ca01e014705aa17241be4a7c8f0880c1323d13e9808
-68 1 171 \\x5680a3801ee51ca4b20aa8f5461de9c14dd776e569b01af1868efd55b6c8743a0e7a39adeab5b027d0f2d94770f792c0c87059ff744f34629f823ace655cf403
-69 1 372 \\x949b017a979085729d6ba2dabf0246212402d2a6907c3465322e6bb19211caa1ed8ab726db68e193abcc1944ac8dbaf4f8ec08e9897a2c206820273bb5cb160d
-70 1 108 \\x1cab955db15863090a2bcd4f2db328dec9a9e56d1b2eda1e8d1f986bf35eacac5383cc75629799ac94a5051844107e0e8e86e059181829a256e41ae901e63c01
-71 1 72 \\x0b166b4b2c1f6720af8667f942cf5cf1da3897eb37ca1932f6b1af4b7fce74eedf2fb57f969aca01cd32d6afec1f0194c9269f2d8d82676a364508d504701d0f
-72 1 347 \\x336f79863b538a0289db0bb37d68c90eea19b3b0c92b0f409c5c446476e879ecc80d17d56341883907918d5c227d29f005edf913cbc3ca7713dc414dc502000d
-73 1 226 \\x855b17fc7e4f5f1ee4c29361ecc39371207f5977b8086716bba7e86c7b1994251427c36c53af79c303e7b0e2acdfe641846d8f6bdf607f342ae4224c6712e00c
-74 1 94 \\x1955e9b6dd4d0f40bf34d25cbeedae6314daa6a4edf1e2825dd82856bfcf027d87e7b24aeeca08e277276d0cdd46a11e10004184dd471603346e76f8f3948e04
-75 1 142 \\x67f92be35f3b7427b16db7baab0d6efd4c3c9b50f5b910493b3eddd0664af7939594b169204746efeef634092cce856a2283be8100aadca3d1f731c20a455204
-76 1 422 \\x33781ef668b4fc0f63f5d43cb9d891f301b0b865b614be68fe71c9c96c7c47944b472b1be921a6a402150fe60b382b3ff250b9443c8a79f0db3e42491741140c
-77 1 423 \\x8c5079c621abe1eb026d234197bd787c071f309ce010b36adeab5503cabcad06c6bb6fa21f51dec5084f9378b32a55fa0c170234c9df44307611988f6af39d06
-78 1 285 \\xfa0432ab264d7d105c1c41f3d67fc1a0263130c72cb5c7f9830576072dd97529098a7e598ffe85719caa0f04f2b44c3e354c69c56b85ca295be6659c1b626307
-79 1 111 \\xd36051ca27f1e6616aaff572598080711e5604090d30d6318adde472a18accaae26e6c68e15926a6677c702eab7758352fabf28d8e4a2bd6a1c5ad820ecdac08
-80 1 277 \\xeb18f268a0c98a99d72f9525ad18a8c4c814f57b4e943b1bcd3c6dbc011def4dd3501f156fa898c4f6a305ef17adf1e3ec085f1a57370a72b10f9c1221aec50d
-81 1 380 \\x74f6c79ef1e52f88625300ead892612e558fd0a29eb8552e3091b2bf52a74163ccc0401f79f1f5c76ea0fbbbd6fdd8db516d9f5fbc2eedfc9f88fb18a3a54d0b
-82 1 368 \\x3743081d8152f11976e72334892f22e4e857d4c952dbeeb3101782e96bd4d50e67ba3b0e0e9958b1cbc0a2fbee26a0f31697fa0e8b8ecec3b67b981f44163901
-83 1 330 \\xd8a559d67f222f07213392f47edfd296eec60c296971c5e523e3fb6a7a4f6ebe5551a614f8b4ecc4ad4c3d38a286d5dd5dce8066f30544c21c4cd2db3960110d
-84 1 373 \\xcf0d9cace570a117220b477655415d71d15a44641eb3c4d74d7dda53d30eb99fd84e5fd51248aa52d1290debef95c24651e29b70b3846fa866c089be2501ed0b
-85 1 210 \\xe51cbb0ad8e3791020ad96c3406b5b990d3e6026f63992ca5b0319ac0c5a0c23e7d46152450b281d05af47f5493a67b70cfc253ae9e6eb58af45c681eb4b4b0e
-86 1 328 \\x68da722456b376c40c9ff3b5f3c4153c40d10b45225d500e85b6a481fd388d5a317a76991175f7cfda0b51ac91a35166b2b2da7d55ec5ba90cf2d0a43dee5d0e
-87 1 257 \\xcd5df0b5db2bb94996fe85169e0ca5ca0ba629c96f97caa399f5edc6fc6f323e21d43bff5ac570d2918bd518ee105cc34f91a9bca25bda383b2a30b860460202
-88 1 124 \\x63d5d8a15c1f9fc928c70813badf5957e9078a1099ca9f4179097322c3c5cb3e943870f894a310e438bcd48ba07ed8ee97336fb2e850454a2f51e445b3957f06
-89 1 370 \\x6b766bae45b2b7ef515ad272baec75638059f4b579ab04ba99dfed43ccaa2abf5dd815b452efd86cc9ec5c7ed0de2617cd143fa91ae201c05772c55964f4bb07
-90 1 215 \\xf0d62be5e5c761aa09ece6aea964487313d3ab83ff39abc8d805bfe4203771d7fcd911193cb2627e273f30c9f03286bc194de98f7bf37a618173e609cd94800e
-91 1 231 \\x0c8074a98e9ef75f0233ce44eaa489fa5e28d455e1571a8e065ae5f9efd1c777e8fdf8bccd7071981624d8c2934ab7365073b8a29b9ec358abaa1f019bae9d0f
-92 1 233 \\x996d833aae0a498b4af2cea84d5f7025c2173cf172446615812478f35bc16ce23c4d5e73ba342557c3cfe6638a83a4c2e14b526df8fa945b2c86fbb3aa2b3a01
-93 1 148 \\x3ef10d2d58f876e4879ac9be873ea0f3f8471c734c26b337822446fe55ee8a3d0aadf425496c952f1c5b36ec66ee013ec0e53367151516b60dbb52f1f28c8200
-94 1 313 \\x234f937d7ce01ad480448d9aeea4bedfe613c9dc90aa15f05677bfd7f808aaf14459a597e963c92271d86fee40d9f948a554cbc907a53f7570c5c795779f9809
-95 1 264 \\x517da153cb36268f77dee9e6916fcf2d4f4b801d5d985639904411c9a9bf4052fb8c530706cdbbd5600b22005ebb7829185a2304b607a64c9e455de05700f205
-96 1 296 \\x1da74fa9ef8e4700ffb5c54999f1badc7d350c0d10f19f4183c4d0331d61706bbcfa14ebd6efc352268498a5a506516d61a30355974689adf46dfdfed24fb707
-97 1 62 \\xf70de650f3162c3ce45557522bbe0fd2c6d01d9936a681d5c788c760ae9bf6ad646c7ea0c4f745a6aed254df3010354088a544cdecb616a67b991dba9701e600
-98 1 118 \\x8cbc7b070232b3dd87356544564d798c17961117b1eb79ebfdd86b44f90543aeecdbf25ac6d4dbbe56b24e3d052bd50c56c63cb95fa0f590ddec6c0da778f90d
-99 1 37 \\xdc455095e9063d9b3872d197bc8732717322eccbaa3cd729a693b69785da79e8430669fbab667d8dc730eb20228c23abd9854d3fee4a4798fc79da6ce21ba708
-100 1 70 \\x39d24580abdf8efe9be8c1ff84e1bf2729c280562dfd12b4fd8f67444b3db9fbcbc39a3afd9c2351e2977e01f6ea62482bc9d72491abdb9368616c882edd7c00
-101 1 295 \\x698c33c5de4cddab015197aeabf320f845634bbbbddd3bb12537b0512a8d1bf3369557847c3c27d2f9eb62ef7254dfe86cbcf5d01e86e7b830475d7708486f08
-102 1 41 \\xe7ac2fe3b1d1fe44587aad3d6098ea744443ab0d2aaf341f42a00f1ec1468c369799927d8c96f27ae652f56ae0b9bddc869180d570ff8f7b8e31a250341cc70c
-103 1 294 \\xaa16a044adf8a544b67ad69cf089bf24f678d8de51801403ccefeafc515ff5c0be51be96a01755814314967babdbe3d1b83a20fa20fe261e377750bb3751ef07
-104 1 319 \\x1aef00345c10acb3c625da7131bfa318eab7b50a7d55d8b946c15a771f785480a29da677e0189d845e99570f52b87b7e501fb834d94db69997c028dc96e2070f
-105 1 315 \\x73a9d31cfd84f2415122ac77f750146aaf5a9eeec0d20d6aaa2714b02739adcfaff61334ce79da425eb2cf7689458bff20d400286a68d8b885f69d3e988d8301
-106 1 222 \\xc19c9ce7be21270a0a534e5541e2e4a3d7375de886ef95d1925b281d35e7e26d6473ef6196dd5b8741d37ec4a6dd0d1b1abdd32a8097c615b5d258f304dac90a
-107 1 407 \\x386f9fe2dee56a5736621e504bec9acd90c40a3d98fd84578a1bc58459c51c09aa9d9a840bd533aa51d91f080c38c85b4815898ae1a3699b4f26bd9015dba506
-108 1 104 \\x6053fca5e3efc6d04bc4657045938eba713334f08e3c79b36ed2cf1ee23c3abec8e940b0d2ba30b9fc07809015c66ef1a7c4466169d9abdb4a08664729b02800
-109 1 232 \\x4f3546d4c1a4fad45da01e8b07714bfc9117e7904107e22084010dd687e4c266930f278955f045a96222bd1e2fd5e395350fb3130e67e312cda37c24dab64a02
-110 1 236 \\xd1190324ab6cf254fd966dbc7b70371f7ea8f03734427c0d6a48a6a83db1d1844366d9f50ceb908ab950b4df0c57f113cf7ea8c717d0aea3f54b417ee187dd0e
-111 1 309 \\x900cca07af2ba6f3a8d42be83c53fdde8707effd789c085a012562b9b58c155af16d6118aeaf7260f8657f8b3125cba047228884ab7ccf5cf13ba074ab2d4a0d
-112 1 212 \\x2fe683f8271da036693cc79d354d8542bfe9b1cf012e5f222fcb2522101f47c9cbaf77ea7914fca51edf4f5145cc8515d0d468c00b337a831c5e1d8dfbebfb0a
-113 1 164 \\x4378cbae93556f68485ef7a6c974dc8c5f0e6074f03e1fbcd0085e90d649cbbafaa2a90e596aea9db58b1326bc6a982e10b88cadd1ae95e5149d35652973f805
-114 1 293 \\x62416af44e729172647d92d57bf0c4a7ed8b67483e584c5e256420c02900f724817252dc4ef6386ac0e66a45f5b5ccef87d685c7a1bf0a9e252158d32b5af700
-115 1 392 \\xdc0cbaa54230d790bc428350cc00227121cc748a808982be6f67eab2c052bc033e50dfffddd23ba373dac2affed023b43237e2e6b0f69ecb5b85338edaf4b30f
-116 1 163 \\x788f682c4393a81a9cebabd11eb4851e1b81b1f6c6bb332bb5a9836e743551308c6ccaa6abf7dc3f93419fd68277e9d028599ce63bcf42d32adf5eb3e3ebe905
-117 1 81 \\xeab249dcbb1b0f6f11e62e6a71e585b9de38d78fa0bbf4ec80c678db9fce7710bead5fa503649aad55221a04f7434a4f6d248029346e0517af157085a947750e
-118 1 120 \\xd0fa3e03512786e3b8f05bfca0df12e6ef0988fa4fcb0b48191e6e427b0ac082328b332e1a19dc65a115ac331350deda3eb1037968503f98a3c1d55383e53609
-119 1 367 \\xf419fb853347b5da4530e8aece1c82142d78404ee74dd0e0d8c50959aa00957e663a5b9e22449a846707caacd6d64c05698819eb0a939bf50fe0e70610bf370f
-120 1 340 \\xac192e351cb8d26b89ac741343c026deb6cbedc632c1a68ab2e51be82a68a52afdfbcfa56e8cbcbcbdf2fa636057da9916d55017d4763f5d8099809ea318c102
-121 1 166 \\xec53a40579ec3e726ef0691d4b9a4e9b562d78dfc830d5aa5171ec93f3c1d1a7d5b239094251223a8f5fd2e9b23954ebf8424ee297a95734d8cb96906c296409
-122 1 134 \\x5e3d0508c0c503d55d5c55cde19b128fc72621b1142437ef2eaa4c8f0cc82566d344a19c7195306803f6b482e68fcfac19a425ee276288e7366cdd0a0c61f508
-123 1 408 \\xf622624ea57e845ee4e3e41aac61e4dafb06deaba704f4e2336e43f93d20dc48feba4b129589a832265d4827a9e8519541912280161404095555b294366a8e05
-124 1 158 \\xfe933f0f2be2bcbef2dfaf03e1099834cc1f429856911b2652fd7c1fa9f5d907df664f76876a95ae5e73023299f360c5969d695cf7e5370233e22e3f482a9100
-125 1 417 \\x55a8c3413cce8da8bba002e05850cf45551365cde847fb33122ae5266bf65c00583d0bd4a5d341b2c0fb7f763459171d271eaf1f5d508fc2f0a3dd39aed3ba0a
-126 1 255 \\x45f0c931d2e219b9caf5181f84815dc71dca2b3ed270be94cb6d27bb53b2b5aa3e57858f974c12e8a0b9a118ebc0f5aad8ca4f1e0684099510762f040f07c60e
-127 1 225 \\xf7bf9ab9fa032fa4bfbfc0d8a349d716a7737d8c26fc35477e0c95dfd30448e6ee7151f02071c12a05476fa7cf3ea3d9d493dce04370c7659b83d7aefd8d4409
-128 1 45 \\x846005212761ee189be123b6fd6797c625cdc33718f61c2e526fb80357a90e5af0d77af1c889b79f5f7fcc3f6178797874d71193ef13a5468364f75b2c79fa03
-129 1 249 \\xe3001df16385599d7082d1b2dfdc6b97625873681a786a06da24c365974951e0ec56ddd75225d14d6351ee312b03952a8bdfd724c4fbacb9f134ff273aa70908
-130 1 359 \\xaa930cab09ec05c44a2b16f5981b2dd13af02ae7a4d78805b4ab68fd1432b433ecbbf9d9e72f7414ef0355d22bacec4a5f7cb6a31e3d24972d185e1b2cffb000
-131 1 55 \\x95cd483e8d401621d1a129a97682802a462b65f28848cccb324ae50eea2726d08b21edac4e7b51c167e847ad1b319d7be79b5fa9d53b173dfa5cc2c7d475ff0e
-132 1 186 \\x7f780cfa64cf365483a237973c975cabab2aee93a637d2c77145b4a20d09bd406d2e302da1563f50c50f2ef78691809138247020d92eb36017788cd51d7b9709
-133 1 57 \\x6caa8c12a2b97aaa0137c6317772bc1009ab615ba3e74118398a902d42ab707bafd4d735bb7bae5eab0ece7240d3f6fc723a218d551f8aa525a7b262fbc4cc0a
-134 1 310 \\x30c5cf67d248314ba67433506661314958b09e9f64005f740479e004b4758090a272a64adc9ce627f57a5aeee554c6ade1bbf8e2a2ffa122e7f8dd30fa6dda0b
-135 1 316 \\x685282d51e1b2b99b3a82f904a6d64d8c544f686b2f3d64a8544999bdae67d6be274b6803f2ecc7e595883e38f3801f4626baa39a519a8d399011e019f3ad906
-136 1 237 \\x69a9cf256b2b3df260c5f7a9a1c86437946f61959e47c639133586227161cce5b1c21b414d5b53ba5c61875ea74a27a46d75d91554736354b6c0299baed1c204
-137 1 353 \\x95737e35dbe4982de64b716be63cbaafcc1470a8ca448c8cd4e5598a3e63d3a1b21401b4d8d87e3e594b4e84394240d2391fc0e8b058e7475f2b1dda19aaaa0b
-138 1 376 \\xec666b559a83f3a46219ea5fe146693200cdaae0439ee65fa4f79c91fef95c36538497b79af7167118c9bea78ec3df27f9b7339664ff4b9b6b835ae4fb4e7a0b
-139 1 46 \\xf8f4881fcdb892c1279a0e4782dd0caa047e8b13263d0a5b2a3ec35e7f59162b838f3f602e806f662bed5dfc9a53274f5525dbfb3dc898448992c53fe2b5b409
-140 1 79 \\x09918cac6fd0adb6879b408fc274d6f1c83f1312c89e111cbe25063dedbeb3f841970aca31324a4a298d4d0d52205520d616e278efb93c0dc0cfb261af34e40f
-141 1 146 \\xca1f96e0db977425037cf131c1e834c089b67f4108a870f5b54bc55fb4b3eade6113f937db2182dd3bfe14186e161c5ff51b7518f28e275aa32028650b35b301
-142 1 154 \\x6eff11a2f6e47809ca144f82e57971b51dd76ebb6f21a6f666e0fa2aebab7fdc9d5b8f3f004a169035e5e110be588ad6ee9aa2a932d3dd38c79747e773425e03
-143 1 199 \\xa9827247ce25e11694dfd7c3e1612edd1b322d5f2ffc1971833167f34cae4e1c5c398d635762b914f31af026c36aeb6ad810747ffbb51b8e0abc09be0369730a
-144 1 338 \\x77f2b2a532c158f0d0944a9a05d12d1d412790cca7dba783f79c829184c453f4c3bfb336521472b6406b3712314f9fef239a2c274a24c0937eb1aaba37bd850b
-145 1 179 \\x7abecce0a80a964015a34baf8c72dde6565172bc9063de5ec5a762248a7baed95c701fee533fd90f1c390ccfb20a08d2a1d27955f468cf95061cda0b6667c303
-146 1 261 \\xeb8b4cecc78287ae4ed190c8ad688eb933583acf9436e54e56d8e2a52e34c235a715aac36b34be5f27865e11d92e6118dd86dc87b9454dfdd050ce937daa1001
-147 1 303 \\x935e4454bfb7fa3847715847d5e5f7c6a518a86a00b8230f1d6ab14f0c2c1a94f557a367793cdc1fe07844d66fd0cff93f0dcbba98b6313fad14d8f152f8570f
-148 1 217 \\x200ff0300a12417cbc2e85fba8862b34057466a6a400ce06ce90a25615d3430416b4586fd21256ad0eab5438f6bf88bb253870dfafd749c9a34a646bd7547d03
-149 1 228 \\x8aaa3c1d9505d0deec5143d54fa19ec75ad6787642a9f1f14fd5fc30cf4e10f2431fdc06ee043dc118a1fc559c707fb899dce9703da38213fe323a679f1cb40e
-150 1 206 \\x5e2de849afa82ce3cdef0521bc9843599342de1a934b45f2dec6a9093f96e5cce499c2b45501b07ae869cd26e2783a398a74898acd645e49c06a141e769a2d0d
-151 1 342 \\xffbe214eec0b34d3fff9a86f817f5c60dfa995a7b32cfa6c51dbb0eda5c1a7acf007d50105959e3aa55201c2c2ad70622f98a2b10c0eabb13ef7b9c7b341850f
-152 1 223 \\x8bb33dea2aafe24238ad5677b78557c8eb4ed97d8c0740a5e5fcf45c6c529ad2f5cd97cc61d8ac931fef61f48472b6c542e35c6cbc136b94cbe6e988362e2b00
-153 1 85 \\x21a801f374145b978537e49c403388b99f00c447953dffa977acd94be5ee1665f5947cf8f459052c439e5fb64336ccc7404331c689e1551efb73adc04927bb07
-154 1 337 \\x55f95b641cbc360a826ceaa96ffe9ac448bb97668329063833f2b109fdf17775c53cebfa566135169f20dec21e20f3ff74cc430dcfe97cdb2b69d915b0a0810a
-155 1 33 \\xaff7d899f3dea09c79e03818ae39c87a90a5a660ebab4246255367c0f16b794f33a7bd0957b4ec5a94e22c2e79c8490d6260ac14f48b435bfb7b11ab761e5e0e
-156 1 273 \\x766ec00d8eefa7ca158504f4d723216f808faa3d0a397785ca44ae18d0a176e1ffe706da7678bd5764ac53456f6753f9ab47e7f040b57b24446af206c4bc820c
-157 1 291 \\x109aa483ddf055a9943655d875b043a78bcf2d30132992b57ab941a3b424c678785da3271188ba1f3681917e78b880428153c65a0be3836efe7ad83abbb3ae02
-158 1 300 \\x487af3f1bd26a8f9792cba2d0ff900771f95acc00137c1fed43a99d03ab4ff65bc15738af9f313b9a5d219befca5d22217532b0ec993abb9c35fc2aaba8f2e09
-159 1 312 \\xc6102436770d0b16ab5206a0330982baca28d4ad12d8650771d02ed29ab1a0427814023378832dbf76901a99ca63efef48aeb4cc30ec7eda38c6b4a306686102
-160 1 86 \\x1cab98bc4220c5a376ca7d538b17f844e4b4ca1f2e6df5a2b772ee13a0f7294e68f5f3844a60d319364757a66f004b706a9cb8effb548710680544e9118b1e0f
-161 1 250 \\xf3b0200b82bb2c8ec2fa50effb28b27b8a2e5c99f60e8631db076d747be3b7f2136635985753625489be1423f1df436e702c1eb00279103ee1b586eb841ef007
-162 1 42 \\xf98048960f5edd079d6340f145a34aeaa9d6f9d5f2e12a562e219bed90a6bac97f3ef8a3d66ae2be6fe36c4220c9f44da3da729c3404994ae97236775844b403
-163 1 414 \\x148ed8ebe11b57a022165d84d71bc718a876a3881e4858ba5da937430d84f25e1bb16b1dd9c569e7aa9c755eba6d037d5fbb22729ff7397f08589024f2f0430e
-164 1 90 \\x65bae5ba487ea4bc0c84915286a618f363aed0b478c877c2ccc83393744c667aa0a5c1d4b9348413eab3a0c91fb75dedb7bedf9bbbb2c57a75e0bf066c027f0b
-165 1 184 \\xa8b8c25c70a87bf9f0a669cef497941d5855ea77e2ab664c6ed8fb8f99ad69a3aecd5b4cbd717e079bc3ecec1bed487782f38b3af9ed3f8013061807bbb8c80c
-166 1 155 \\xdc026943d08314b8f1646f3f8d74fc52b7d99d1120136c39d2f1ffd1324baa84dc16eb2cc2f1b0a58d95fc30907326a469630a805c5c984e9111096370d0d601
-167 1 254 \\xf22a9221de131da784a0f57041356076e48c9ffa8172ee8a71228ce2c57c791d9997569ed845e547281edc8a2ca96701c312a7590cb1f8f1bd0aa82a26374e08
-168 1 364 \\xf3b8db95e0bb3595f57c8d024a63875bdb8fa9aef5a0bee95155c2d5f2e4cc13029063d3d98546b06600731342e4eb84734570c6f630edfb1a892820cb99b303
-169 1 381 \\x4e895ec2391dced1da22947a10f906efc86922157463eca66cf2a4ff27fcf4fa56602917c065d593e05d3fdf61505d96cd7e645c9c5e073f3176566eaaa2640c
-170 1 360 \\x62daf0b0bde2bff986e453e90ac2d2a68e57d218d6dd31c9e8d4ad89162d6b93505a0cbf702a234726eb5d42d574d2c659c2deac48494b749a46728dd885690c
-171 1 203 \\xfcf092c576cc5816edd662ca0cd295f2ae7c7689965fe283deb8f9d45151b36a3a2091c9d417ecae5a8f445d280177ab92ee6222a1a294d5a07b23299f8e570f
-172 1 288 \\x3911f9a17e2a72402579b4fc842bdc042a5ca00fd9476b29e16f3070adcb90882d9abdcfae4991867967ae0325f0479f2b0d079c5670441f9bed5d58923af903
-173 1 259 \\x0896b0384e73690170e75e67a331c96e713a71b0ff2949320c611ab15ad7ba1375ec898659eab78b99bf94d675a72ea53a63ba89f355f6cb426596554b194a0f
-174 1 362 \\xdb19fd57967f5300ce522e22d23f9a3d95825f5530687160838f412b5f6a01c90abc0c4699f4f0b9e18a486f49583374522eb85a30efed3ba5e649d7a5f4fa05
-175 1 190 \\xd18ddae1dd154cf2b061328ed1f9b3bea80d37a7046e1c2edb9ae74c9c621aaae27104f11eaa33119e9b8f75627f367682f634af90de4c6fa5b6a7a28c89960f
-176 1 29 \\xd4886809f9ac85280c0cf6be6062be6e1bc5dfd53ca9253998911e2526449a3db839b3700d255d6817c173ac97f52ace2a2b2cfa3cda9cf9824cb7ace03da106
-177 1 26 \\x8ccd936dbffbd0f658ae52a142f6d4ebbdd03f7fdbf2fb5bf6427e2d02dd22e687790688377ae2e380d47ee63fc97a80f66c17ce614c9a0e1be63f7095a0f00d
-178 1 191 \\xdfd24cf29efd076a4bd5f076df3d954681a815b41b619a628e2dcfb64e49473d141435517b02846fbbfb127e622eab0899a689b7f1145b5f30dd4f039d0c8100
-179 1 343 \\x7e5f52e3e75239d903c33cad8bde838c6e875080e89d2724c6d0b5e93aa1f8b1f8983bbc6d6c31b184e7660e74317d7dd54eee36ad0ac80c81cfff262f38a306
-180 1 168 \\x3e03fbb85b72be90070bebfac79440f9f31eef15a003a4debd4696104441a4dd830cb9bc21065b22ac533315bb57aad3ee059cdc1aff12caa1fa6fa88be20700
-181 1 107 \\x4a55474365df352228fbfece303aab4660559514be6dbcd87573ca328782cccff6cf85219c9e06bd2ef61b3cb82631454cb3ff2cbd9c74393eee2f43c8cd5702
-182 1 74 \\x50f35fb9fdd05871bb1ec63f33f6a929479ff09f09daa51c359deed990f831b9d99b15b5b70efcec61d992b70be1a9ab8ef5fd5c172a279ef4e5b5bc91211601
-183 1 15 \\x9f54d5ca80de110dc664b2385eb5aa3001b996a3003e405f94bad8aa4a9d9e0fab04ddba8f1d9c1002ba0477531a7dc29b760660eaa4de581765f8c5669e600b
-184 1 418 \\xb5e3746d71ab6e9cacf0cde826cf069ee0e5ff6532bd62ede1aa05054ab2e4e0cfd6b24474ded921225406b16b6d38c0739f301e4f75d109ce97528d153ce300
-185 1 78 \\xc3911ffac36b3027f5cd367122a04da0c25d2896cd6a3a01b937b3c86d9606baa581e5b7b2bffe0d41199b0fd892c17f24e35c2cc864f93d880c207986221006
-186 1 198 \\x38fc43b21e160d7bc0cfedd663a2b5c226dd36acfc808de4f779049619b6afc93783e26c85e5efc2aa39edfb1627a55575db9ccf19dc5c2626bafdbda9bea300
-187 1 139 \\xabf4989f0c7ef976e0bb2734a226d6c0719520c9739bf973e39940b366cb2ccfe2180174aadf5d9f073468140ce1481e86c382799833b0f26c65a7fbf3662e0a
-188 1 324 \\x0dfc0e3d3de2dfa219a06cc90b37eac71d6704b86da49d2b6faa8004b7c2d08558b9c7f0642c97febe6f53e8848ecba9b39f2cdf993dc5fe42c7bbea2fa86a04
-189 1 263 \\xa6d2fac6e9f5e65fa455f9e2ff44738b0a6f5d7418211015bfd9011273b3d749d66ff8d803fcf911f6841f765354860291cc0929b94e3b5068400908a8b1d80f
-190 1 403 \\x1eac06393e8299539923ecf69afee25bd02acdec3d53baa0c5f158e8acda4889b9007eb85ef9bbeb3727b271a91409ce392960af0309af87c76112074f772300
-191 1 180 \\x9154645d2729c8687e138b76042480d55c4fc74021be75215990fa369c0c9af4b366d99fed40afe272a660a1e637bb39c31e8b9e12b71699b48d5af0c534e108
-192 1 268 \\x7a269b10e8fc15bc0a0be5503146645aeb757475cf73b9f06e6e49f7553aa5d614a281ec1390dff400f00b79b02360eba7c8507e02d0de246a6d5107c939160a
-193 1 122 \\xb750681c2c77eca4c1189154ddcab85795f89ec2bf8634c8fba867cd41d65a1249d160d12859f61082c708eadc14d4f72aeb3701f6e18a0aaf26adf224e2e604
-194 1 246 \\x0999a6fa58cc71cc032a773336a4eae93fea4f9f3af83d2513ac6d14e219d6245ba5d0e3795fa13f2db20f2d03b1545b61d9f82a12478965f1e01d2d8c9e4d00
-195 1 123 \\x01b108c0ea0e71c27b7f5b9b6ba2cc1c692d46317913caf2eaadc2b6bf440a6270057dc1877bf47e746902c96b1f429de0e41d3420f5b449bb806ae1ad8bd40f
-196 1 93 \\xa3d71fb9937a50853e79aa83f6a9759a8e5284d251de57a85997348f10e99d5767cce5397c5fc9ca33eaa4db22efefc080409cf02b08f1e2271359f9a00ec105
-197 1 102 \\x06ac96b0c33d711ce576749d8782963a6fe63be5a28467cdeb25febfc2237f3fc686363151cc0b70a2304f59a98ea0505b7ae228df6cb440ff5dee4e6ffaef06
-198 1 13 \\x1545a5ac5f8ab10af1b77d467ea6a9b860a160e137503b705850509320c6312328fe01ca1f97746a918b8ceb85866deb5281b434ace26a1ae144462b3ac4a700
-199 1 332 \\xb7ae33a1eaa2cdafd23cfd318ff1acfea7318c1994b0f48d787b7c0823b79f25f8e8f9e196c1bb880fe397e858740a6d3379092e6bce0edb4cafdd609f522e09
-200 1 335 \\x7af85dd24a659675a1f0236395c590b11adc1fe94834944264ec7c747cebd64ac4590c8e93b6886678bc9947a7b19b39286ba091507e1052d3350b9c17e5d204
-201 1 63 \\xe025283cc97f621e9b79a434f7c6738051e033af60f57e5833c42733b1bb17fcef1ac061d1863ac49347e5984c76e12f77a1000d3b0b9229ed3d79ded4ac7002
-202 1 350 \\x5bfedee5f91b1b1ec8ee031551ed6927c0975bd5efff9adf2dd096354fc8625847f8c5a3fd6445f012770bd6ba1cefc96f7658624147dcc5d40f11b21710cb05
-203 1 18 \\xbd4c471028a40e70925465fcb2cd0b932b8e2392bb0b92dda04a9f3bfcd1f9aa2b14776c65caac06c203ca30b95b4b356789c0656267109e6580b0b27cf66a06
-204 1 280 \\xb07faf8d6320674bf9b1611515fbab56130b15a7de0aa9f37e16c18ab852f2390a7a7f83d7cf78cddcd07aa32480c99bc8921d9093137b85773a28dde496b308
-205 1 333 \\x2b16bf57064cbb90a05c8255803faa5b40b72071107931b127c5b5117e0b33ec493c71e877ee131d9f5b09b2e4baae7659affb0629e9a827b7d79631fee4fa0e
-206 1 182 \\xfe4814b9533fd77a85f547c2f692abccc9110830702b2f31a8b8cd3cc3d8b9294645a08a4526850bc7787cb37d461a34cfb891b6937b33f9a897d4d031d27e0c
-207 1 397 \\x5ddb598022e147134941eba5901424a738b13efb364a8d654d98c27b1fa543bbdee93f1eb6c0ff0ac5e672649ab71894fe780a00e64682ce6b260fbf0b2bc109
-208 1 112 \\xcf8cf8970e62e741d1d998f3eb11757b5bcc4487a0d13645131a86700470a23915b22c65f3f96b9cfa8ae8aa2bd1e4b36e83d0cc6cac9fe018ca7bc9547a8502
-209 1 92 \\x86fec0a3081740e0b3f9a453465f4b40616a11b3f1b5768408d362a618e35a24c70cd5fa50290e334c1e6032bc492bcfe18f4d73f63facc9cf83ef3c0fbbea0b
-210 1 143 \\x140a7e03e9022fbec873cd1883405871118d0553dd02b1eaa69f6f7bea55b90df02cfa4b8c8b9f644f3dad7ccdd3b165139bb005757f49b5e04350dbace35303
-211 1 245 \\xfc39ca0c2699cdbee0a4eb6fd5099fbc7116fd733dfbed657d8a62db2e3778bde48377b1a97b12dc662305f1c8ee5e5e06942899cafe9b7db1b47e9c02ea6b0e
-212 1 391 \\x7beaa8e704d5365f006468256a8c0a2ce02d5e9b8b5ac6ffabefb4e7f11bda1292516423fad6d1b6cb468aaa391ea703035e3d3aeeb4357fa9355f26192dff07
-213 1 117 \\x96e0c8f9b71c5322d125a980f961d474f1147daec825aca84c9899faec2dc2aa4eb16ba3f3d804afd8105b18ba9123da82141009b5eb6eb7725f67c1eddfcd0a
-214 1 31 \\xd42c145ce1d6ae9900222a0867a1a52be4ca9149535dc1eafcf1302f827658434ef865d14dce16904e330784cefd8d4f6efb2ed48b2e3bd901e41dd5cfaeb902
-215 1 344 \\xa9f30de8d2f4754706a33b1c0b20c416061949371c0874ec8ae728ee23c6b47920ad212f3ed759ec49f2a079fe4243c538e03a2ae0787b03e3af66a25f59080a
-216 1 348 \\xd49e2b8b473b40391cfeb33b852d97384c94fa02e41b44a200911c314d0460fd1fe85785c3d21328dfdfcca319e3ec6f34176f9da3f52ca373bc199539ad4e06
-217 1 189 \\x62f94a02cb04e387960c29c6354a55daeb1d9a689f0f51127066ca7ee14b9070a6ce973ae2abae2303ac8b9570733f6bf330d3ba5570529b33d1f7dbb4cdf40a
-218 1 121 \\x3792e66af4c15410aea92154a16c11288b11e9406054db5c9a6be83ad15e4513e1d1b80a7b07065792e1f1d1addd21877095acd6e8b7208160e1a7fa1d816b0d
-219 1 405 \\xb74d27ba7b96ce1ad07cd36159a5f7f99f691f788be9c4d540f55f7d17cdf5e2932256081d9d3b567fc597fa08737b75b96ab5bfe19c47323a0ce7cb95549001
-220 1 195 \\x124f9868a0fcd1cfe2582841bba2253f1f7b1da120b355a977d68089173c2791f6c7121420f51f9a1b4140c7d727fe5cec96698f0c8ad7a131033ba66137810a
-221 1 59 \\xe79cbb730524dd2359ea531cc88910b3e8ac22637c0b2d367a0b86b1e0469245bb4ef13c623f8305c88da16949010c3c29c5a62d168deda82be7afa5d2ece703
-222 1 44 \\x16c4609d42fc9c2faab89aa503b054ab4c0f3dc6e8c0e61732e397bbdcbf6c422344fdec93fcb9a47d48d70906ff1a93f07644c0f5d16ce4a6f29b9624d4e801
-223 1 167 \\xd954e6e0b03178570b08832719b3dc04e3c5ae223ce69b0e5b2d06270570617782dc8e5384cd5120d69254b9e40621f7d1ea67555e2029535256e7d401bfae07
-224 1 354 \\x50cc98340e7a790766b375dc0d0b25e7d75af409332e4cf03a726b6f5b28651cd05362bff7f4bf0fb241f9ae5fecb399ca6c521031f0ff38a115bff9888bae04
-225 1 159 \\x390822622ed654efd9c1536f97274e00da21fbd3f527c7e20d0b8948dc9e230c9b4de5de94770c548806dbd29b2460da172de3ecf3ae9bc1bf9fa46997b01a01
-226 1 144 \\xe1504901fbf373754fc98991a537091107b307c13fcdca89e806aa8db4936eefa4e859111c678ca55569f957a2d9112ac19d3d49588f72eba0d90c791ab7f300
-227 1 321 \\xb72241a9c870678375b43030bb6cb6b30bd10507bf96732cacf99cf2f83bf526b4dae17c3e329dbc914ed4f5bfcb67e1dd4fc81df6194859be9723838c670a0b
-228 1 230 \\x150ceda75649fbab9b3aeb322e9fbba487b1ca35cff3a8600109bcce56176a635892842461f4a3f967aa0f8ee6d1b03c7f7de4764f96d113757d2deef5bf5b06
-229 1 339 \\xdc64d738e24b863b5e9465faf6fbf9805a7a8ba1fc286299b0ff237a831087688d9bc5d3f7411da1ea9baa3b5bb0adc1d283752d13d550611071984d46dd3502
-230 1 284 \\x7e5960580cf4a16e19cb9847f2b41fed728746414814b5699ccb5a7d84fca215b5944375cbdef3c6f61d4d349a113639a839ceb52235f03f805e60a9da4c390d
-231 1 318 \\xb6b6016ddb2d7fa0b90179f78e8fa74c86c7aa434b55e928246fdd65c0fe1cf3397e040618d865c55270a184d866ee4343bf2049839be971a2a580214d6fd803
-232 1 412 \\x9c3f5d6bb17eab6c98c3322ff7e6d2049a4f93fc8cf1198434673c497a2ab8f6d9cc8cb5be4e3055a23387a2ff2489e5f5a65745380f8d496518c2026ba6c202
-233 1 375 \\x8d40dca37103b3f35332d4781fce91f9ff477bc8056eea2a2e0dbc7cf52b79cfea6ecdba9c8dc519374b23395d2d276a0c10b27d0bbbd025f53b1a83b1797303
-234 1 34 \\xf7f4bad4fcec29d482faa6f846dd80be30769c796eef87908a58dbbde48c5ad914c752d54527bde6ddceffb63989f08809a94732c37a8018d155dda814f4cc05
-235 1 119 \\xc9c1f1826d27683153ad9fc90e5a2570939a21d4e7614ee65d32a1cb01c25773dc6ad6eca3a0a4f1a1fc9d1b9b40c9b90a88c1420b1d584c86784cc8ccfde70b
-236 1 82 \\x998884ffb4121d25d8df8518923da3864b1139f3ee568f33bda078bcaad20a66a69520aaa4a0061969e41fb994149a193d5711695389bc19b411ea6d6041fc0c
-237 1 40 \\x7cd49b959a80be5dae80ed77bb8aceaaaafed36607d7bdb983d77460b1d3be2d3ba781afea0336bcd92b5ab2d330fa72246cee5c28bd3fb187b3448fe7c5b20c
-238 1 272 \\x489ad32e99fad32373961ce922e935af5c0e1d75511139587bec2c7a8f201ccd2fd3e2d5632b5e98e1731fe35086e9438a7f7cbdb8eb8435aa02979a4c763309
-239 1 301 \\x375d179a23915d373ffe83ec63f786706600407301720e981da35ecaf0a967907c4236b700e6d54af4bc52868adf3505c013b76278dbb6b927f7af6b9a9bdc0d
-240 1 152 \\x7ebfb0d4c51423c6fcc67216ec97c145466c42af338aac82f05c1c89d0819ca423b0439e851cb595c110ae2536ab765bc26a7987b066a474560aeaeabc0bcb0f
-241 1 205 \\x080904e315e0ebee77a03e9e21f89c0b917bab77dc63409057e3c2459a83a05fb23f67da016979b833ac45a213290a7d849f27cb93e1c687175e674e33d10207
-242 1 356 \\xd4a843afdf6c736e3541e16a379437e4b0e3c409eafeef23158a55c23e868df9d59e349202b70ffb703f30c3a5a7ebc80358cef68b09530ddfe09fd607a9c20e
-243 1 161 \\x76bffacc5ee8e44745eb1b5afbfae0d4eed2807e6f9960f0e7c3f8d54e4e0533dfcfe82e4fa63d58f808c7a7902dfb882be2ea8e38bcc3b9f843c2259b68a007
-244 1 289 \\x5515293afeef073508614fa870cb7609ce5b9caeb1ef4565fb77f45e6e6023e0b929e87a8ce898cfb3ad8b025c0655693d873c6b8709396c95de74e6a49b9808
-245 1 331 \\xf47572d1febc3ceb91e45df48a3b12712e67eadb81e42c5ed3d7443be105794012816421311cd7e63c0dc9f631430d91f26f2206dce8c158d3f043cdd1a81806
-246 1 385 \\xccd83892a613fa775e4fd451f536c5eb212a624096ce17abd32a8385d2456b2b6130ecb95c145768291a9044d1db8a5bdaa0a61d0f53acdfc79c3110035bfe08
-247 1 386 \\xcc84bf340b1863ccc13e18937b818e1ca466e784ca48209d115f31aea77b72fc1ee7801d3143bc7922646faf075324c2ca69ceb6966aa9ccbbfa9db7454fed03
-248 1 419 \\xad2ceeda740c50b88ccb79b863cde696e7b54c94f95ec190fb49e28cd7daa674380d03e4dbfa74e6724eb827b9ebd798eaac3b9563227205399626ccf1be6800
-249 1 162 \\xb035a30efb961420967042ed811d1aada02dd65562e5c526ccdccdffcc600d1a564d7783dfaa71df0f7d8428a3c1f9402a2df1312ac0cd5472b7136379e09e02
-250 1 365 \\xa1f4e31eb7507b9a0ab9d6a66d81e410701f6e7f5abc19d7d1fa28583da98414aefab352fd85edd79481afea87605bcad7f8e9f97012429a4d30b14f11f9e103
-251 1 404 \\x3d679a40f383493abbb61d31176d1ffbd90b40a91cea2ba14c8f828a9c4786bde560c25eded1ee6e507ce57b8c3728ca249c7ad1f94527432ced7555836fc702
-252 1 286 \\x759f82e32a32fad0a002c6a9c2439b1a2705dfeb3dde9a5c147444f33fcb56e280e9e99bfaae0d0fa0ea9f1cbbba54258c9775cd67b85748cdba5942ecbc010b
-253 1 274 \\x4e2d9428225a383bf558d2e0407f7fda59bae883ee19d072f4c85fc4c791b90554cf1ac93cf10156c8c100f3b09403def74402f875a1b5d74caf7f09884f1509
-254 1 87 \\xedfe586f2b07ae7d9f5366f63ab993f5aa4b034603e11750d454a50c664ca1bfa71966f2389d95280a820aa018f69bdb7bdf6d4bb38a8acdacc3f2a82dd82706
-255 1 137 \\xf2cab6eae1a4ace96ef3042c5cc7e6aba50ed4b73ba7bfde1226e7f9c69845875bd1d745c31a6efc510214414b3c6ff2ba4de564f9b82203aa65ab02cea3230f
-256 1 220 \\xa939ad3894ffbcac74368dc08f7311d98f6ec5ac4e9e9c1e18a261f9724c684732bc122e51ccfcf99f847572d6ac03a9679f0bbfc48cf12fc08d57151e97b20a
-257 1 207 \\x0571f07c303abc50b5082d149e90b48e2b7c5f77101ad6fe1aefb08b5cc6b445bc7b019b85b935865ae9dbb6c43b3dff39a188d3ea851d5212d7cd2f812a390d
-258 1 113 \\xc9e0e6b9798c8f9a66f7ccba1e930ebeebd356912aadc1fdadeeca3e3fc01a553ba2f8278ed6973aefeb70aad1c00a8104afb0e079ef617413b5a99f7bbb4109
-259 1 64 \\x2d26a4f30947ba237d0144c65bca5692f6d12448c0662e53df503f98532cb3ca82d5d3231fe8dee304faa4f5296c4760bfce4125f80edf80831629745736550d
-260 1 269 \\x25a27c5664e72417a655c26dd3f572c0ebc5a08e40039da7254147acf0865480bea31bf5125c2195a19f0f6df67a081e93cba020236686ab71f82106168cac08
-261 1 314 \\x48e931e0e869f1e83c5a5475448ed4666dac331bec2687924cbc3cae72916b2f69a2900fad969f045c1bc4b3df2b97e65634faf17407324a8a00c868f6994603
-262 1 177 \\xf9b94f43cde0762cf5061b2dac7f241fa782070199898c08b6a8c0fe512b89eb2a2bde0af9faab2ddd365819d070747d66bd672586a6c5d33b2155f8f066fc06
-263 1 128 \\x2d3b930855021d42c88cdf809d9212dccb9e1253d36bc5acf0ed1bb667b14eb980b88c3725789d1fb7812086620530c879ea37c197f62b7c79eb6162fb0b9a04
-264 1 366 \\x3fa250dffc51d1ce174c9bde88542761306f0a2a6b13126db37fe63b9239f158b13b00891ff28d86c8217037c6a869c4d38569f33822d9b72d094455f8841d0e
-265 1 307 \\x94cf500f96fa0ea7ce82076d46d8a786a3b6e64837cf69f77eccd2a8bd9d57ceed8af481ff918d0f8e8512a5c7a8dcc98aa4579aba25a86d1a79020ae9621806
-266 1 110 \\x8ba43d4b7f6c398463b32facad1657b9535267d6fa6a04ff9612744cedd23758472925af0f3ede5e768a56b7941ffb2565827af98b4939a4872c95f36cb58204
-267 1 374 \\xa9d67970753111b7b3593bb5b3d0ac233e467476617531e346d50ac9ab49bf0097f30d2a7b9ca567f91834f63eb5cebfb082eff8a15d040fd3e84a4f6a976604
-268 1 377 \\x3f4c20287dfc85a091c4c648cf29dfdc6121569387492755d345ab8ebaca0a345d5b38352ceebe9157056aaf397fc4920caf09dc997c4bcbcaaa5f5114993b09
-269 1 384 \\x55fd2eeda4ded3af43857d7b7e0c9099af6db0d6d4973a38f033b3aaa4e765aada2004135018b9f23d8eb9eb149ae1ec5886265ea4a49028edda3acf894fa004
-270 1 311 \\x5149cf80f6f53af0e5cfa4c4ecd2df6b525a8381b70f2d0936ca6e692a55447803fdd1e8950833f2effcf7c14b2ec050e7f5d9c312417223f3ae02a8922c8905
-271 1 299 \\x98d9eae00a34e63f3e28d720597654ea27dc6465d04239fdbdb87da2977d919b0bad7cef0fb3089708649e8ebf4c09b3d3ab87a0f2af952a4542122078d8250c
-272 1 218 \\xaa6338ce9ccf18e5c010b004256bc3fbc5a7f3848b12e4898fff4cff11c56c24e3b00c0b8ef847eb8377788ea2a1a3e5eed0daf0e2b568bb6bf666632e06af0c
-273 1 27 \\xd471e66a60b27f946250de7badf00f5941c24cd0963a46bb42cdb0df2bc7075cfa3cc1715eb05992014f00cbf16fbae7c3c290fa1011d01958e4555df566fe09
-274 1 109 \\xa2933b96dbd78587e2c93f9b859568de4bbddc05672354ebc267f6f2ec28b505d00c98cb580d5a18da1bc0f1c477accce417f1a7dacc6c330e670ead0f8a8b03
-275 1 388 \\xf5b3b847b759eb8ac50d82dd9fd583115af292f4718b821222e922ab739e07d2d3ba76b12eefc9c142405d2adb3b8db0aeef81252d859696bf58727128b4900e
-276 1 9 \\x0671d9a2bef843878db70bd7685e1d96293034bacc855699388c7e45d277db5a28dac8a7d3a69829cc33744f0f2b354a7249781fc231c684cd34f856ef477104
-277 1 211 \\x16d251ae7725a13c8c807cb8038e7d392d2d5ffe0e594e2f4c2c6358d328a58d17e2e22ec65c4aef11c7820cf89ba4b21bac47ec61363e0cc3bd0e398a40d902
-278 1 75 \\x97b45974f66804fc1cb71b5b80ac2917bfbfd38a1d7a5dfdfaa7a9c7933f2b503ff6877eaffdb9c0c9cd54b5066f374cd6c282041e02e19a26eb20aabafea309
-279 1 52 \\x647c2e2f9fd14efe07c9d0f01fe49adf37fe07bdeb42aea920472ca1d9e37ac559427ce49579b3dc4d956811d921e37cc4a3e1af02f787dbd4d62f9e0a16b508
-280 1 363 \\xcf193073bf68b96d4a253ce19b35e6dee8339b83d074997dcfb4bb3a25358f174fcc3b90adb9579e6baea46f3c14941596954fa6945c181a7d231ff75cc69c0a
-281 1 60 \\x2f27e5c807eaf286d15e1aaa9beb622759a1f4c20ac4e0cdbe09c5e4dd0edf7c4201fe9bcc2966b407428bce439479870ffd233e2cc2dd7d0e89e25ff3cdcb01
-282 1 346 \\x256c1447a6623f9dad5bbfee392e5d78b7c5767ad21459476d2480c97abc6a6a07874a5e17c54ee0c26b386bdd08a00850425211d7c9a09e0d7173025c5a0c0c
-283 1 151 \\xf50c75dcaeb2bcb3086795bdf57bacbfba937f9390d5377c77487c0bab48cc0d02787b28fcfc7363d344062398f68ab05cadfb1cd601b73dd29cc43382543109
-284 1 149 \\x7bc793728f136a3c6b695ef2c31b1106c2835e027636935a6187d76c1e6b7deec2343aa318759a3c1e1eca1112f271cd2e8125798c24e64f01a76b05e16b2a08
-285 1 181 \\x5e14a756589de7ca179cdd30210ab9f6e66bd36c545045216c034e01024e781903decdeec3b4806d8201616c90cea6319ab91921cfff4acd68ba982df81a2209
-286 1 276 \\xb3f4c1791502539536bd81212c68163318f9156fc401619faeb4a05bd1b44d8b258743171c8af673ea85e18f7cc7dff36a7383989ccb95dc056d1387b0311a00
-287 1 169 \\xb10281050017d9f2637063d0c28947db070aa3c5f2eef78bda9553db5113818a3c1b6182c25cece2d7880d0ebbc784417790b21e13867ba36884b6e670ae760b
-288 1 395 \\xf995f3f1f76a6b3c2625e89cdfa79163999c41bfd16059665577e2f76093da2b33e4103e8ce1ca6027cd7c78f3779be425f1ae122be23549ed45e5717542f006
-289 1 389 \\xba9e221d4b2b80f151c80efd5f572566e0d2583811397e9ab638bb79a35dbdb97f29ed3ca6b361a5e3964cf9f9696fb67731c93e022e3d36c85ad57a525a9104
-290 1 345 \\xd12680c83ce8482e88e9b1c88718848f94660dded2e2d17a034940fe6d9cf5f837085d3868efa6a7a0c765a4ffe45805856903b0970c70211fd2056df8041805
-291 1 147 \\x42e035168b9e4df5ee1fa840c65eb0c2d87a170044a7f4e58c950953473ba778fbc5c84108a9300c783c94eb2db2b66877ad0f9d20a6916745750dc868d93505
-292 1 10 \\xa251e710662631b8b6343bb0c54471b6c0958d51863687a398f94769083f9748730eb147816ea0c885ecc185c5609eea2cea5fc04e25b36bd81d8c581939c109
-293 1 334 \\x9924b8d942152c078e210af1b54a6087c5b200fdc434def4d433867f7c0dab185801aae7f1a1282acd6bf2d8e10bfd39f84c5d40dca9e4553f0c6ca528193f02
-294 1 193 \\xc95a37b733288b470831e5dbbf67ea4a078b04a78c5929b155f3360ef2570b2a60836c2c9baeb9f5a274b68f8790108b015627f6ca337038e316dab220857d03
-295 1 24 \\x1a8609a52af5818c8c6b7b6dd292aa4dcc1c49c201e694b3c77c271d0481d59014d76e2e949ace17b6471cda29197cd69dc7fe58f589d2bc2c23c16835fbf304
-296 1 25 \\xb4a37300a5ad7fb2516344e953bf28d44d81c5e64c97546fb063aea20cadf6df65a74a3e5005de292f7a2c291dff6bd48d7eca6418ce6517d2406101d457110b
-297 1 290 \\x4508d6516ed5c805bfe4a8c6e081fa995e5bfab338cb8104a64ac974b1aa67f57b748a4ff3cb68b5c51745aa6d51bcb77ccf20294739fef12e8b3b23bf119709
-298 1 178 \\xc8aeb3d889eb7ea80adf6197941f35df9bf3477b50acd4037ae3276d7b8de2c9c860274bc5da590481875f8926e15b3b3c0beef94807a6a4480785168449e604
-299 1 183 \\x3038fe33adb232ec4e15f4feb1a754c1504fd86a2846c4794a96510add48616f4be04e0c1630e241a3233bed2f54b75e7d10a3314ed9158c648aab3b20965f05
-300 1 160 \\xeda4e522097802c8816c8d8479119dc569aaef5dfac1930355d8cdefb589cc51f72b8d547f4da92fe616082fe15ead4ca204e1a2e8f43c06aa8c66bb8663890d
-301 1 351 \\x304b07ba64ac6f7b78ba50e634ab439478faa4e2fe7dd2d1ee44205258f47ddea2c990fe0622dece1ae6e81d7a4e0936ecdabad56eab9fe7c2b01bb5edd0060c
-302 1 127 \\xe615507d642fb46472530f65d708070c8411393319ef5e3cc988cfc4c7c1655ecc1f7cfc1ac623ee377e4cf658755449007fb0da0f5a198734f40a835218e20a
-303 1 68 \\x65fbd0d8c1b9e83609eaeb9d9059e2a4bd2845e8d84afbfc249a9012564b4c13e1ea8b5ab68afebc76dd9d31e0babd21373e42eaf05cb7308554493b99c54a08
-304 1 101 \\x02636b7bf329e114ac5bbbb3a4ceeccb8ad34798a2f91e95cc8da47d562ce832c3f4e618fc58e48a2f72d1c0dbdd07c0d7d7db92208ce97cc35a640b1fc6aa0c
-305 1 47 \\x5eec4b8848b1dde7f5e89580f597943b4d4d96f6ec78e8c1b22c6793ba8e017428a003783c97adfa49c3b9c296c71bebd26ce742e4e34e91d12a6fc6062de008
-306 1 187 \\xbdaeae8999374e0896bbd69faf5d84f1ff0f233c9f418c4b3259c082d28f6250dc70622a6b7ed48d5929e80acbc3e7746925a73d66970c895719763717ac4502
-307 1 421 \\xd6808bee363c34578f63f71545a8f3f4cef6a39c45c5e877f3f6363860477390e7d7d7b9a4cb3ded3bd93934fc4d96373dcd6e9e259d04e579499d3be9c30704
-308 1 77 \\x8aac87d7835e1884543d662030a582af7ea7f7349d744363ff92a6502c2e2ac436678b50bbe28e4e72648997631b55a560cda40bf7ff7c1a38e0544427ad7a01
-309 1 208 \\x326cb181bcbba84fcb6118c0d5c99cb18acd44dc35402182d58cb76251df5f2c3e7ca6d25b63a4be85be8c0ceeb0bff68f5b6919fb6754e90d46ab2d5206cd08
-310 1 67 \\x6ff7b3cb985e82e41ca1fe5bdef3cbe7dbaf38b7a59391cf8a626d8b141396175bfb95d2e5572641affb607d0d6231882bdde70ad49f075197db2da8cea59f04
-311 1 188 \\xde6abd3c118c1b4cb681dd654b67b4688c0856aa5b0a4b55bfd4a6cdcb1affad8ed5677f5924a4b825e639f6c53cc16dcb75349c4a0e3f2de7afd7c5cfe15c00
-312 1 229 \\x6a219e9e31782679bcfaa5a3a561347f1751205579659f4973dcae866e19f1e15920e0bfcf0f6765411e9d65cf1cb6cbf1f2c0dd3f98249020346810f1ded003
-313 1 281 \\x87d290aadd7407fbd0966e90b75cf0552f6d0e13ffd2d12605f5395eb523b8c15d3ea6c4918916f6e75eaf78eac006e7d1c4626ab48437bf421527c881814b00
-314 1 358 \\x66123d0087feb5e26f1f22f8fa683f88534ae4a7b3d853f4dcb960afa2b82e5fd81be8f271673a94de9e191c889ab17fd2bcb820d769b7ed60d477da2cf3b104
-315 1 355 \\xcebc464e13d3c785d100bd3f727677ab40b1c9c7a59db73fc979bb26063bb339a1d434a8b631a917e521dbe5cc36b4d0c97f9a9369be7403abff8fd6349ec40d
-316 1 105 \\x27c0ff19927cdb65f008e4506191bd72e85a89111da11a68f02487db3b782737e1624fd02566e87eb7a77bae6da273a52ca7db3ea60994a8466f582e64b3f306
-317 1 327 \\xcd329cfe54497243100c8eee08a818ef05d6bba5c6e2ca86da57182e6dde9f85c7c070cd597a75548533c2132aeb60c20881a26f4ec27c8e68d4b2a113307e02
-318 1 2 \\xd69cd65189ffc546e49095c22cfcdf3c629408662265c29406b19683f5c7517e6e4a50c5b71b729731e7bb8d0cec275ca73bb0cadd6cbd590ccb7c0adda59f0a
-319 1 125 \\x945dd34adcc6202dee2952aa0bb18d588233914cce42dfdc9ba3d07882546eeff1d6d9c8f036d7665c6925d836a97716a568f075d4502fdbdfcb6ced3d928a0d
-320 1 170 \\xf013ad64c5ac617f9e520af5e42998a9f46a1f7a403575b557d2d4edf4bd38c020a3220cdb81a2a4b2613c6463c49e609ab98c2b176eee5465c04e5f44d5500e
-321 1 396 \\x163e55aef129ff5c9c82495e555d3a67d5723c8133bd7aad948ff6da0020ae5628fb7b9a535c474208ec9a7c60a7512d7a4a09c3f09d0fcaeb868681c7488301
-322 1 1 \\x9fde58c1b3308e47ed477d355f9dd6574ddc22d8f182fcb4807173ecdcf1791b01fbbdeae1f933d856e11c216c914dcf4628f1821b9f8ee6fd96902b61d72d07
-323 1 322 \\x87367ed33bd527f498d0529ba27cba0737729169e27ece998b29f9af4539a55a101f3b69d13c30a413011685547fcbd943028a609582befeab90a53936a08801
-324 1 267 \\x3b60544c656d50b29d6c662f97f1f4d117c59438552279525cbd77681bec9f1814cbcbb1f14d1257385bf79e064b0a1c0a74561e7c45cfa46fc01b4836e6080c
-325 1 200 \\x73beb208b235f8fd982e0e3d52c6a85c16eb9bd2c51f31aa449c10f181859f6d65c872d141e6f61c1d657102907189a5d3275a3c0f3f5132ab8b974944e69108
-326 1 58 \\xb23614cfb5b409a9625c69a732f0b47489aa7f79b13b8e22214445cc6a502458e702d0dff12d649032e8e664022d7607459035fb2415b5b172257e729deb030c
-327 1 270 \\xabf6559e24901c248b55c3b1751a8decba4355b06ad8b4734c5725810d5d51b5cd047b98800012a8bffd629d9376933fd22d991ea8929efe677801dceb94f002
-328 1 400 \\x71fade9a9f2db3786321d001b1f7e7ff4766af72e083405ded1504df5f36b2e5e86906fa3ee335687216b26b8a6e89d271f70c21d2caae832e888b47af99e609
-329 1 84 \\xb622d5b0e61c21d2656c34ee4478e9bfcc6fb7a572bbd09b0ad7d02b6f135fad56e03600801b319ada80cdbab949d0efbb5907576d0fde27d67271f79dbe1500
-330 1 308 \\x61cfa1537976b0056faa3bd814c5df60dd60ae2a3a9a050737a1ade22c4ee3af5934905eb33ba39cdcd4948c04662fc4ae52082472954444ba201001286edb03
-331 1 156 \\x72095f2f5cb36ff641731d3a0cf35354672a7b16d324ee71a3bda417af75621fa4fb19e5e22e86bc49852bde9615ac65aba6fed7a85661baaa06d907d9a59c09
-332 1 390 \\x81a7136f2189ec7472bc81626cb3427083831ec9aea2a9a8ae79e703162a3f8cf4d3cfd7086d11eac7800367ab5561b0d4a73166d93a0c918cab882cd7f02d01
-333 1 32 \\x442dd76b4d0f664d2d5b1cce2ac4ff01b7b9f76596d703726de5b46532c9511f7f7130b8712378c42afe221c3f7cb8c0b4b35f2a34a0724dbf14cbb8e21ba50c
-334 1 5 \\x08201b65cbe07eda37865f4540fd75a17666db7496fcbc1acf39588871971c07ecb9d3a4f46a35d94b46b060f1c8924f29987cf99e53ae4b65d27e9bd1003c08
-335 1 100 \\xaf96f617bfc435619d0926dff65d48a431dbe68740d32a36527be72fdc1d1e67fba3818c37bfa40bcac5ee9a0761bbcd38b0b0eda9ca0e51f85ea9775f2b3502
-336 1 157 \\x6c3742973b7a4a9efff6641f75d81a717e4edbdc6186732d32d3c94baacaa8d90c57853f79e7062eb092ee918a3479438893309f35d0e5b168f5ec4a65114d09
-337 1 43 \\xfe39ee547df8a8fbb8497887c9eab966754c782189298062ff9d75e90609f70141dcc43022effc8c51785372849f33375ba35331019f3b6430c1d4b6afc6f408
-338 1 401 \\x476fa37ba98933998ee790a08624f6a933bb5d6bb6e47e8360f51401b58d8ab32e996a7e44d281e9b11cf2e1bd0649b6145f5426f0d773561593d390975ef40f
-339 1 406 \\x52a01d6bf0d67bb1feaf74ad76e72eb66bb34b67a02057874b25656f11fb7beca1a37a0efab39e502a83dd16b2abcc344bc9a79a80c536a011ee1576788e0f0e
-340 1 260 \\xce1498aa0131278d27488a3d951ee8bf0bfad32690e7e5c63b97d218be6ba6b507b89edcb0832097450a69998a1102077ca214c1b39ef3d1019ff45214c24903
-341 1 251 \\xab037373e3dc5c5342a1bf4ec3833c148285ea50a25b98096a6786ddf780ae2c7aa3c2da15045420ea1718316d8e71e76d5dfbd1f28ecde1673911988ee7fa02
-342 1 194 \\x159cd0a7a15ac8e971d14d3e6af9c5590f0d287cd59c1090ab753205d999f0a3d7cd66d951c083ba221ba4cc8634a663c7da4ef3389e8682571fbc3c78795c08
-343 1 369 \\x8183a4be99226d0bc5e7d0382f66d7d3a9cef710c68cce5aa05698aa3b301af83e5ce13525ac65f642fe9cd7ce6567a52de98d6513460f7a395b547fbbd1800d
-344 1 174 \\xeff47baa86abe1128f2a87dccda0b9518ead71b83a50f7472a708c6a0def1cb9580f752b4588db9729d0c5e825d6e0b0985c89715ca8a47f4f10dfd86793b60f
-345 1 387 \\x0ba2618cc148a43dacc47b75e487be284c651bdcd866a5409cfd98d16071b87f1289d77c2c1d5247ff68c9c3e7ca298d72fb98c7b7b563e8a9aaa4d9c1c8b202
-346 1 305 \\x19df5331bd80a2589e73176b05f4019bd414a89d677d6ee8982c520fa159b1f969e528f70d08bcc74afa3446285cfc0cd723155b69c688492eabbc9f393d3c0d
-347 1 56 \\x7415ee9ff27c14e70d8f5dc98b7310879f8c63d82cbd49ea85caa1bb52a3dc5ed7185282d52698f6b5e3c5ecf5996f613b43894d85cec0d040880b9399311904
-348 1 7 \\x859ddd6f8fda9813a998d4a370ba6328afbe389b1fd4996c401687c86cb706bb364c057eaf1437572c0a69cbb9c8f36f4fe126d518eab36a1694bdba43f3dc0e
-349 1 239 \\xfe0a780694c91ce3333bd6910f9dcb1ad6b0e5a6b79c7946eea54cde55332baefb72d8a3da8249d7a066c43226181f7f2e3fec914d0c55db2ac3f6353db37407
-350 1 136 \\x4b620bc1491dd09b3f279ee7eaba16e7193c2c19d472b382e1202e1ec534b4bdf00390cf8d8b0ce0ad2511a1d6b4d9dd3462dac0f83f232edc25d92b0b5f090b
-351 1 402 \\x49995401d8aef70378a98100edc0f42adb9197e7a9506620ad9f1c71f5d4649ba23046696c3be7b4f16f98ce6452809fd4b91f8778317a494531b465bf381c0e
-352 1 234 \\x793e171eacd197a427d9734053a8c476b7873a4c17218d091c6c64dbf93cd33fc3e2807fcc61a0e00e6bb7ac1a53c5686e67cc1ed23ce81ce82fe61c256abc06
-353 1 11 \\x043ba1a70f8ae9f3b410ee4d15cd384074fb4a7529b5170d1ee1cc441479740161eaf2e4fad21c510c5f0d1a6009f8efbab06edeb875a55bb1de050db78c5d09
-354 1 65 \\xf53ce9c7d82493f7ea4ff2b2ee48601377f07a1fb67dc7b92bf0d898da0a0fd2987376947ce274df584aae04327b9d5e48f9b9e9801468bad8ff29f443c1f60e
-355 1 279 \\x8d197b8dc25ae6bb394f456689a3b7b00d2da12812c24915f89e34848203632c5cadaf362d2296ea57e7f3b64139fb148c228b53845924c175e717b3c44ab20e
-356 1 258 \\xe0c235c2e70373e9c8b7abf15701125eecc3511551a1f25df111826e4df39539f762d7069e6c095d1a7b4508d2620ae397169afbc43c8dbc141343f379b90306
-357 1 352 \\x07baf53af92984453d2282871175b06d0ba7430109f0cda30e19c3b3002d13049e92db2763c5d9bb5d7b62445eeea362f692f61aefd3cc856947a32454b48306
-358 1 23 \\xa524767d5d0bc046c683c1def929c96bf29336ec8d8dd81d0004e9a343efdbb1a4e4565a3e3dba459b1d6dc78006bfd5b77665da99c1c02f51a1cfc490837100
-359 1 83 \\x6d6d3fb9f88289eb7b0886cb22c8f20a26eba35bc2d574021319ffeb437d73936b6cda0c04cc5eaa27488ba2a484023d971a179207abd81939a4b3f821ccff0a
-360 1 97 \\xeb6024a8a1e18a66a26fe21a6d5522e4ea72ff641d659b8da86f0298b9742adc852444381ae7a6fad123abc7ec78861076ae64d27f3f3a40a9eec6b4b0bf9c00
-361 1 173 \\x34bea9de2640372419e9d87cff0eb6c6f26745452c7367f0d2c7f8963745d821a2d798e79ed315905aff944d5320292dde852a0a67a45ba4458aba26a384d10d
-362 1 371 \\x13aa7a2f0f321af72360761c2b3507bfe27e63bc90645d14a9747900e1fb7a4e404f54a687d249ee9a4e890667ee0045af8467d12425f608647125b591166e00
-363 1 202 \\xa1ac2deff87810940180ced7538205fdf534ff9cec3e4be4d160a144a83987c6e2a89641c0088ebc09960b178531ec52f9f51ed67ab317abb71bd46eec23ad0a
-364 1 91 \\xd5a625e9f56c4372b15205505ffd5fa3bd70fa4416f8d14b77d5ab76db5ef49920559c329f81ee90fdeb04cc27f0e8c7cb0fae463ba31871f527e35f31583606
-365 1 3 \\xa30cdba45e3e1ed10722639b1fb9e5a14118038ad4d6bf85981453104230b37acbb0491aa941ee712622453b9284c8694f57e57144091f7c9d63635c19048403
-366 1 16 \\x00ef18ba4193211094951eaafc80521cb273737d7c212193222840c8e730a38efe2d2be1c89b3c5ec11702b149b4bae13a74f8d5fd045c57257c8cff013f1009
-367 1 235 \\x8fd8683234ff3b005036b07b1b4cb26e757fe74686d1205a72247a5e7547db3129f438ac0ca66e8d4b129b649a8400b518d31a325dac441e3504158e139ea401
-368 1 196 \\x165482181d66ff943e88e898acab35bd3653b0ab68d0b5e7a54f89026afe7a162ff88d262c97d94b5436cb880be27b08178d4b0b0bdb1337fa744fd424687808
-369 1 297 \\x4dd0dc2a4a7cefa54cfc9433d0f145862479f4c147379fbb84171ec015fc49013916ab727600789998a9c6ef1822252d36791a9f793a68524b2c977f70d1e805
-370 1 256 \\x93463462f3716c884c68a1d08734f5a91d59ca017cf79ee184b521130d6f92fd7305fc6d15947b3c13ff6ca4c00823a55cd3a378b81d6b5d71d66cae065f8201
-371 1 238 \\x979adf4b28e54cfc0bfa71947d3ea7944cd07072aef1c8c14ab75b8f390fa7d32581c81e05d999a44ba795af605daca31c218d07e22d234f7cd9d578c288360f
-372 1 135 \\x5ef51624a7205702452ef608a2c98fe65c5796ef56cda5f4a8777460397e6e141650d42f900593dae8c75fc29c9a897bb8c40c5eb24a947e65671f7f8514a10e
-373 1 36 \\xc7a7db15f10e015c0db8f24aa589365ac55e31501f9f0be64450332e9391f1a9cd3b11987d0d227488e8e9987affa5540364234e37e1dd2d6cb21bf1afa59f02
-374 1 88 \\xb16f8456926addf08f6b97fbabee84fd2f76f1411d3a99b547ab9d278cad4b9e213daf33cac545b389c900786cbad3ffd5a90973692ad30dcd49eb9f4fe1a504
-375 1 275 \\x07a46c283df8cab8d5fccfe7987c3d0572ccd6deeebb2a2c58dc28aa4ad3d38304f7fa20dae4e39a3e31a0a96cb67070073ff3a3adb4d3c0ee2a80408c343900
-376 1 243 \\xafa5f2bef6e7e95a08195b45a0e6268d289f5532e2eb3f8335e8c14933a4637ba79f6983f758cb67596f3a3c644955d865e845e14bc997417632b7ad882e0606
-377 1 61 \\xd7e069812a348ce3d0850d9eea57289c45b2296a58bc85ec708d0fb17bc32aba9d58ab6b8e76202777bb1220d3e567d60f6e3d00d03f714dabff81f8fbb48f0b
-378 1 141 \\x0e8c3b8303ecce9ebdf6bb4409d58f3a9733e2b20e78ffa3c36c248b5a75f8ba8951751ebaecfd0f2c16e95ab925c7aab3a445794bfbdad8ba799d1bbeda860e
-379 1 209 \\xe72b41e64fae65cdf95f03ce7a57572f6c869698fbda3f9537e37b583cc7fc77e77bfa8b1172ef1e490a1383c07a96b55c082f9dbbb03c3cdddc0bad7bf95d02
-380 1 304 \\x6a479a2e9264ef6ba81745c6d5ae58d23323fdef04afcf2234e92946c169305492bcdf767f420734921eaaa78bedf7e836ef52453f148192e73776eeb2570703
-381 1 227 \\xd3a661816775e39fa304d51307c853dd6aee0c47704cbda194761cffeaf00050673e789cf464d7d7c35afe6ff1073e625ee5a4fb753c9bf8247e29f3a98cc109
-382 1 17 \\x6ca5ef2898c41536f9ec72c6746344f003be1d7b677a902134a09d7bc5a82307f3a185e3c9aa2ed16b358512911069045785d779536c78482e61ce349ae34c00
-383 1 278 \\x863712a2c726e3d4b90366d076650451e0ae5df9f16672f86c03237d8825c2a1182f4c82a366bc4418330703437aec3c2639e2740e315c61087e813551beb009
-384 1 378 \\xa458ae0fbfbe6649ef7c0df9db26bbcf626185a71b1cd8ac3097744112dfa8150520a5eacf4eda711e26143cbfceef9edb0758742172f792324558d4287a6a0b
-385 1 219 \\xcb1c1e58e5b39260e1e5622b274ca4fa5468a95f1905bf367a20b7d2617b4279b452196d1b011a774571bc6b9c63f2cccb74570c64f51e95c103cd2b12b9710a
-386 1 336 \\x3f5a166b3f921c3ed24920648a1e0370cf5ed7ad03d52cdd7f2937008a766fbc62cc389d16ef1672dd4596d2fe9c27d0ac6ef5c9a3b6933feb5c47d273a1f405
-387 1 221 \\xb9fdf713e47f07942ab28704c212e4b126b7047605905ce1c312338957fcc789fb16c27df81b053eced05ae50f5d8cdb1bc1c1a57fb2aa92db011eb2d09ff809
-388 1 244 \\xb5641d76de623dc08003cb5d8bd683e27f1587bf75f465698b23eedae600fdff0cf48ff82bf123454d24fc9bb00c38a4f72555e656b23319c917e39a0cef9d07
-389 1 54 \\xf9a4697a0a1f6e4f15a4e141a5f8786dc821304078cc9ac31d5abe2f3b8b0b457ef24b764cfeceb5843bcc5c24fbf9939d31e9f0b3b079b1b771e0d28355ea04
-390 1 95 \\x80f9bc518c6d3b463beaf105b3a528f72293687a452a066de981d3a23af80780da597c4a87c74131f08c9538583476614690c3ee377015a77dc424d095fff201
-391 1 22 \\xc4fca53e27c65c51f65193fa432d452e87f25c2868268e2ac4b7e4b33d368026877d6fde20b85101c8705cc53b9725d485c77ef7de0f217f277bb5ddbe7b760b
-392 1 14 \\xd16da88e387776e0158a5ea9383ac3618f8a527a684ee980ba0967f302402d46e1d99403bc98fe69041869fc37141fa883b61b8784d0840b03469339180b540e
-393 1 241 \\xd7d0438dbc7c89d1a79473f3abb47a361091fe9c293909af538d720c7769495c27efeed7658113f0b45bb653523f50e9c996ec4d7b10607b76edbed3cf84f009
-394 1 201 \\x558ef9b92e95c1c3f43491aaa3c9779d0e8b3e85bd47191d9aba711403db24dafcfb42fdd099e2e5f65907a8cff07092be1e5228ab76c47639a0529ea035480e
-395 1 145 \\xf0641fed07c024ca081eafd0e9bdc46c9a730025ccf3a04941aff48128895ed6f71764235b224583347624a5ac865a2fc1c8a2dbb757fa9b3255713bb6156d0c
-396 1 224 \\xbae7eb648a592b995e0171a294556d934c19523bf82aa706ed7c6e0739433b39acf18e213367f7e988187f13179c24a937a2d89d0802b0609c5414b23f0bdd05
-397 1 320 \\xcdee6a7a1b8755f9fd33716280037192b2bcca2e9142bf118bf5e3e97ade0b8b1c7a1600049295889296115f0d9f599e9231731c30ad2b56dd09e65d67ba7c0e
-398 1 51 \\x9eea4d8480dd54c7d86a25fe7d04e6a203b65196876624059c8d8d257bbed56519db0a02eb1804c5fa2063a1fb3284e69c810d42bb3f52a754eaf5f995480c0e
-399 1 69 \\xe5e36c4112df838a4af8e5301d0cadede061781411556381b81f6f556c2d594cb034fbbedf703b8e80814409b7d1dd63b7c1f9689cd3edb925f324e3c4306207
-400 1 411 \\x99c7bb517749e38d520079c90ac3b2e12e8acf059e7d89339cb77c72b867f69006b2550bcaa7a5d20634bda4a0aa5b4954f932013533706c1053e96a0573610f
-401 1 399 \\x95d0af0618793437360847b90ce7de018b4f36fd21dde2d84617dfd15d683294533f2d8cce5a674be4ccb3ca9ae0047b1d5b414ef46af9acc3ec2791e49ec905
-402 1 416 \\x17dbf527390908ed42a36266c420c0d8f3f842a63ce33ef1fca63d50d26ca241423d902ab2e0791cfc4fbe7e790eada220ad160051d61af62b859dba7225720b
-403 1 262 \\x783245a755f37e35f0766342e6496cec8912839bd2723e67bbb71aa7dd0fc8e206dd44c1194539c9434fbeca36f05bb7ef99ac81fc7a9aa01d557193dd0f560a
-404 1 213 \\x1e66f068ba8592206c8ab5b8cfca0ade25036c9e99a6034f8b5c7416b2cccd4612175d5092e384ddb05e240560c2577cfc5fe699ed1d1474b8824def77429105
-405 1 4 \\x21444994386d350046617492af45dae72a2feeab9988565ab53cb710db7c550c4c7c3762925fbdee259db79fd1a28ec28aa24e2ee7c179c603d0334eed47c00a
-406 1 165 \\x22f0d74d06dc1b3ce621a01c3b0e6e6bd117c0deb33667f930e4e34d2904dbf6371eb6d2257661a220fbf2717e1e681ab0e8e9a12c717bfe1d8d67c80b3cd702
-407 1 192 \\xa1a6b48706765aa06a6580530f813bdca5ff35707d438f95924a56ee29057486ef8ec6996ecc6e161a6733cea375b9425d2aa14abbddfd8cc1734d6a7d8c7a0e
-408 1 19 \\x899e08fc30589ae57a960e79761fa67d432179241b273debbf4eb3c45b6abee6f1f6f633a887a71d89e0b2e1bf735fb94cda7144cf2c631856079d94b79ab500
-409 1 140 \\x7543a0dcfddeef72a29397f97177db0c741a934d08985779ee22586c98d302182a9472f72ea1451c622a6de1c8514b66408af5ec13f5031227cb8b873f5dbb08
-410 1 242 \\x62d58a6755c556841ca53437e628285ca1d8b0ab80c746dd4c76e30319483fc757bdfcc86837e36dbd3d23a344ec9d601282bf86ef909ffee46ecb4080083b0e
-411 1 38 \\x415f9950947ccb83beb8f0b6fe075f6d82d13669dfe107e96823ae54902601ff07f0292c8d2793a6a44fa5146fa5f7a3e6a270c1f9e44a5cb9bb336f35f5ef09
-412 1 383 \\x8bee76356f0b76b864652401335a66e13833c5727ff4d080934fb28e08364980c6b87ce4bd21fb699cfc103322b19f0e9e5d1a610a74189978d02e6d26338e05
-413 1 89 \\x6d3b0040acf2e32959dc95e72d5a0181327a8c3bc4fce6412320836f4adc78d3484d8cfcd8daecc3cb8b888cdf18510083ce9ba32860e3866710106ef393a10a
-414 1 99 \\xe6648f6fb51f32056b950b1eba2a8aab836dd1796b1c394a8900150563010de8f361f0244563a291cd1273e670e5d669cb27f7be941adbad0eb4e65480871700
-415 1 204 \\x52c774d0a28c8e1299d12fe0fe4021876234498939d228ab5b329f721da935882c57588caa9fe7b25f94ce1ed8faae294954789fa2884efc41def04928c93b09
-416 1 252 \\x537f134ab51f4c72a2dcea1892bb03a2a904abc1778f68826af3c6e008a0ed2437a2a1801ccf597267859c211368cc73dbe9b82b1b74e7c17f7231f57ba1c30b
-417 1 240 \\xfa775697f9bb2e98de639840af14bad4132772a39a95476f76ea45e58961801e2da814a3ab9387606cd90249842a149c86db9ac9fb2e61fba9bea92fd535a406
-418 1 247 \\xd9b95a73fd72d01352384bfa376ef71f0029054f9719905d042504d07775de4dcbb31c46a9031598b55ef769e7080fe00daf6ecded062634ffba86bc4380b800
-419 1 96 \\xfb1107263925a872cc36fb68395af78cc31c727308cd0a47170bc1a95ca42e2b36c99c9b1fbf87efb44c08746524a5c9918a43f6cd2fc774ad4e02ff21af0305
-420 1 172 \\xae284a6aac1763afbdbdf55f0fc3664ff338cb40864329307fd87f968969b74cf1d54d8c2f1ae36b966283aebd762b70cdb19dcbcbcfc9f8228ca64bf95e3a07
-421 1 129 \\x8f8e6f0ca16233a372808af134f86e7a8a7d91ab58c8204eadcfeb2933108ed9bb13169b2f545a3dd5a60507c27a756b382d1d6b14827c60de5e65ecce541d06
-422 1 8 \\x04501888f459901f326834de6336c165beb69cfd84fde8f0f0cf5c44f237adec63229fab344106e981179c4b42fd1c1dd1d63d8aaab5269af727deab9287f40a
-423 1 410 \\xbcc5157d490e923ed746feecbeea14d070f6526d72d5d61d17611ee8a5681acecd4187e85ce9bb41137168e3edee1d321290ebe2c80fbd2aa016c6c55a18250e
-424 1 130 \\x9228dd86d0cbfd0eec964f11a964955d1eef4ee0fc2b5162f480f40db29274212a35cb44b8c27323d4dd3e6060a5cad1200a9626f848fd40d031a631649e6d08
-\.
-
-
---
--- Data for Name: auditor_denomination_pending; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_denomination_pending (denom_pub_hash, denom_balance_val, denom_balance_frac, denom_loss_val, denom_loss_frac, num_issued, denom_risk_val, denom_risk_frac, recoup_loss_val, recoup_loss_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_exchange_signkeys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchange_signkeys (master_pub, ep_start, ep_expire, ep_end, exchange_pub, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_exchanges; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_exchanges (master_pub, exchange_url) FROM stdin;
-\\x0367c12b033b8745fa884971678773a06c03a2764aae69a4f78ef3c88b901a90 http://localhost:8081/
-\.
-
-
---
--- Data for Name: auditor_historic_denomination_revenue; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_denomination_revenue (master_pub, denom_pub_hash, revenue_timestamp, revenue_balance_val, revenue_balance_frac, loss_balance_val, loss_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_historic_reserve_summary; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_historic_reserve_summary (master_pub, start_date, end_date, reserve_profits_val, reserve_profits_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_predicted_result; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_predicted_result (master_pub, balance_val, balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_aggregation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_aggregation (master_pub, last_wire_out_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_coin (master_pub, last_withdraw_serial_id, last_deposit_serial_id, last_melt_serial_id, last_refund_serial_id, last_recoup_serial_id, last_recoup_refresh_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_deposit_confirmation; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_deposit_confirmation (master_pub, last_deposit_confirmation_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_progress_reserve; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_progress_reserve (master_pub, last_reserve_in_serial_id, last_reserve_out_serial_id, last_reserve_recoup_serial_id, last_reserve_close_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserve_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserve_balance (master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_reserves (reserve_pub, master_pub, reserve_balance_val, reserve_balance_frac, withdraw_fee_balance_val, withdraw_fee_balance_frac, expiration_date, auditor_reserves_rowid, origin_account) FROM stdin;
-\.
-
-
---
--- Data for Name: auditor_wire_fee_balance; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditor_wire_fee_balance (master_pub, wire_fee_balance_val, wire_fee_balance_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: auditors; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auditors (auditor_uuid, auditor_pub, auditor_name, auditor_url, is_active, last_change) FROM stdin;
-1 \\x93b7372d87ad8cd507f9169f6db9ffed6882377ce69cd7bc2a7cdc34fce3766f TESTKUDOS Auditor http://localhost:8083/ t 1630849897000000
-\.
-
-
---
--- Data for Name: auth_group; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group (id, name) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_group_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_group_permissions (id, group_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_permission; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin;
-1 Can add permission 1 add_permission
-2 Can change permission 1 change_permission
-3 Can delete permission 1 delete_permission
-4 Can view permission 1 view_permission
-5 Can add group 2 add_group
-6 Can change group 2 change_group
-7 Can delete group 2 delete_group
-8 Can view group 2 view_group
-9 Can add user 3 add_user
-10 Can change user 3 change_user
-11 Can delete user 3 delete_user
-12 Can view user 3 view_user
-13 Can add content type 4 add_contenttype
-14 Can change content type 4 change_contenttype
-15 Can delete content type 4 delete_contenttype
-16 Can view content type 4 view_contenttype
-17 Can add session 5 add_session
-18 Can change session 5 change_session
-19 Can delete session 5 delete_session
-20 Can view session 5 view_session
-21 Can add bank account 6 add_bankaccount
-22 Can change bank account 6 change_bankaccount
-23 Can delete bank account 6 delete_bankaccount
-24 Can view bank account 6 view_bankaccount
-25 Can add taler withdraw operation 7 add_talerwithdrawoperation
-26 Can change taler withdraw operation 7 change_talerwithdrawoperation
-27 Can delete taler withdraw operation 7 delete_talerwithdrawoperation
-28 Can view taler withdraw operation 7 view_talerwithdrawoperation
-29 Can add bank transaction 8 add_banktransaction
-30 Can change bank transaction 8 change_banktransaction
-31 Can delete bank transaction 8 delete_banktransaction
-32 Can view bank transaction 8 view_banktransaction
-\.
-
-
---
--- Data for Name: auth_user; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user (id, password, last_login, is_superuser, username, first_name, last_name, email, is_staff, is_active, date_joined) FROM stdin;
-1 pbkdf2_sha256$260000$o3MqaW7yRf1j5WzAv5uqhd$SblC/hdQt+HsCvDZ2U7akekEcr2P7CibIShTxi+R4ZU= \N f Bank f t 2021-09-05 15:51:32.056774+02
-3 pbkdf2_sha256$260000$rVzggBLXGX8E1AwWXaoKXE$A0Ip90/eI6+JTAwPzacI2pzlt1VYdWLNUQChAyoQpAo= \N f blog f t 2021-09-05 15:51:32.243519+02
-4 pbkdf2_sha256$260000$zDH09EC3ur9bMVlLc7kTAt$Ey0aeoeRR81a1yYRYUXNB3EuYyj+UbEOcFmvHUlQg5c= \N f Tor f t 2021-09-05 15:51:32.336854+02
-5 pbkdf2_sha256$260000$imKMTeTvtT8ti12MWlKXYR$Z01B5/TATb1ZhduAWqT1Tup4Ym5+n9vCrgqr1P8BlpA= \N f GNUnet f t 2021-09-05 15:51:32.429807+02
-6 pbkdf2_sha256$260000$awxecBqZm0X6SNv1x6jPme$DcmzjORUFpK3GFwgNbWfhTVIV06/HJfUHmOOyaZSbio= \N f Taler f t 2021-09-05 15:51:32.522463+02
-7 pbkdf2_sha256$260000$ezmTq2Lg4uYWahkWiU54VJ$B8Lmu5DeFVdRFQxkG2qo7zw7C4rHYJM2WuZr89LEWug= \N f FSF f t 2021-09-05 15:51:32.61546+02
-8 pbkdf2_sha256$260000$htHsj7pWIawPmChTFEMz80$wBSb2t1eBZGlt+Yjd2W8wFgWmvwvEtjrVEhvKVh90ss= \N f Tutorial f t 2021-09-05 15:51:32.709012+02
-9 pbkdf2_sha256$260000$Oi9TK5hyALq7gLz1gyZyeM$vc4wIMIp/s4BbvrjXYYIIpeEFuYypr2NabIMk29NpBY= \N f Survey f t 2021-09-05 15:51:32.802829+02
-10 pbkdf2_sha256$260000$KrXOO4581agIl4VwJ1ClUM$zfB79nLjdzpIARBGp4co6XvGIEeYGxtFQSrdMSwnKCE= \N f 42 f t 2021-09-05 15:51:33.277712+02
-11 pbkdf2_sha256$260000$vhdEBVUyJME21Pj5SRmzuR$1zKWnl1qHTu6jrrpQFV8THzZBnAAuIhW0c90y4dev/4= \N f 43 f t 2021-09-05 15:51:33.754088+02
-2 pbkdf2_sha256$260000$cXKez1EVbNHO2ORCN7mGtr$dp8mFQAqmQLHPVyHMir9F5G6zid9NCWgL8d7DFe+tso= \N f Exchange f t 2021-09-05 15:51:32.151312+02
-12 pbkdf2_sha256$260000$MqVYSEXYFZWY7yqLEmPbXI$y34Q0FdcejWUWHLt5QaWxGuVeVye9eK5+Q213Sfm8ig= \N f testuser-e5NQTk6s f t 2021-09-05 15:51:39.336323+02
-\.
-
-
---
--- Data for Name: auth_user_groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_groups (id, user_id, group_id) FROM stdin;
-\.
-
-
---
--- Data for Name: auth_user_user_permissions; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.auth_user_user_permissions (id, user_id, permission_id) FROM stdin;
-\.
-
-
---
--- Data for Name: denomination_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denomination_revocations (denom_revocations_serial_id, master_sig, denominations_serial) FROM stdin;
-1 \\xcabc11838fb80a7dba9a5d6ddc612563cbddad48179f42c78362c0fdfe9bb9b82692a0324d6106916e3b3a281e7525c302c590f264744d1035065a3be8e0090e 247
-2 \\x95437925326ace86bb8c323cb53ad55374771af3f54b3822228a8bb2b655bfd32dc4c24dca617e98728bda8e9737b56ff7e1b3996ac0a330cc1210df6f8d2100 89
-\.
-
-
---
--- Data for Name: denominations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.denominations (denom_pub_hash, denom_pub, master_sig, valid_from, expire_withdraw, expire_deposit, expire_legal, coin_val, coin_frac, fee_withdraw_val, fee_withdraw_frac, fee_deposit_val, fee_deposit_frac, fee_refresh_val, fee_refresh_frac, fee_refund_val, fee_refund_frac, denominations_serial) FROM stdin;
-\\x014c8ac74fe6388c417debf741de5c5e92f20b2ee5f86e0ee3b4ac721fbf8f20d4280d731601cea016d3d4b95b7597ad50cafa11d199506245bbc2915f51db6f \\x00800003b8e07764a5d294dfa578dd285cc340f769d2ffa4440bae71a4e92c7b584802fe5180025f3bb88763395903bfef2551763282fa0a689df2ff51b2b93021ef0a29d9c8cd6426cc423ad7726bb9182e40e5f4a4a6d47a2bf8de6c0890361f970471649168ddd170bee1ad87e7915415f51f04e1f418ab69f79cc32caba1fdce5127010001 \\xf3090550f85be92007ba49fb0e79f030cf04ffd9177621bd19480e84e97a7285a29edbe04e03c25b0a7d44428b43220fa3a050400157cb7a2753b513abdea001 1638103891000000 1638708691000000 1701780691000000 1796388691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 1
-\\x05389f978fea6ff910aeb3a737db0eb907cca1b71cbede004876d6ee40f529df2b9a0272440cbbe98f5779cb82338286f5c8b7bd0075a03f447e36a6c829b2e9 \\x00800003be3b3271c59f5e1f62d318403e6958073469511774056183f45e85f45a2fa9c58ef104d8a7012fe19aad9cf075e70a0ced97e22af87cef8c71d6842bb8e25dc48422f8b69b8198aff605545ac908a0c699be3842bfc21f030b5bcfd1f07909fbcb18c7b203c04410664412da5d29af174f76446e106091e8edc13c5f90ee79d5010001 \\x385924205369a2d4c98922bbc8c765a39e607002b6e84712b1d744318f82a273e765ecff9cf9ec84c3b9dd315a808cfc2c00d0554d00239c833e0cd1a06d5702 1638708391000000 1639313191000000 1702385191000000 1796993191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 2
-\\x05d47e44bbbd981b2cee72547701fd8dd28a63075b328c19a284c3401a690ea32a316b20c1d46609b24bafe466c31c0cb5f2d4679525c6f19ee58c288b43f408 \\x00800003cf55ce6dad64e7408de26081074f33eee5caf928e21b3ad3dd60ac464061fab187317b7272a55aec7dff4842d2262aac323459268a2730169c58dfe07bb43e32c354e4e90aa12a1f5ffa876c669aa1eff7531b10530240bf52fdf43dd2934c4f54ced174c11095160feb9ee7f3f6f17b82139723b7a04e0d019c8da33ec73473010001 \\x787887ec8953f3f733e1c8316c09e1e8d40100d307410a5f6622eafc0a381c8584b6541b523f1619469308671dbd93d5bf3a0c996aab500e58af150269920609 1635081391000000 1635686191000000 1698758191000000 1793366191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 3
-\\x06c8ec63f12b02142e5aefed7f2efa118dd11b07f62a0458118dd494e2f6c630e9bd44d24e3b62d7dce50695f657150356885fdbdf6d94f8511300c9079c3da2 \\x008000039f352aed2d612d8e93df8425e01da7b7f3b4f91624459b802754c63e7e6a0fb030c6f030cf77db436005ff09af1a7849a1f4ffe803733996f5c762b526c143464fee42c38bb2e3e886aa80bd3563353a62137865bfbed67fde21927f43bc9c298d167a3112b18777178a0adc44baa3d67e939842b28b72ce91a411ffbc34c095010001 \\xf25edfb7e3a070b964d6cea34417bebc37bf6a791bf585560886cdf64d70f8070b23b32882e3ce84cd576ceb4c22f59f5fced6729f48892ad902d57cb005c009 1632058891000000 1632663691000000 1695735691000000 1790343691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 4
-\\x07bc9e6dfa0a22fdb5e8bceb34041d6d7c37ab75fec5fd2053a51ba88984ad343f52665b3c328a540acb87896767d4389bf1afe68a7a4ab784111b03bb491449 \\x008000039b3d64f11a70588c94f48aeaad417b8dff87ee654cc948542d0b1a450015892dfa8c24b31377ceae80d007229de5c3232555b702f711f5ff99f14df4d2c2a7d06bf1018272ea58609d21f17ee071df44a4e9c4e70fec2e341eaaf1e2cfdc170ff0b4a557742846be12654e2f18807cac18bc541b7746ac9a0995341d9581f9e9010001 \\x6f85b7d043737c77bd4cf75c6017910782c55228ed6392b73b0434b24329093a5e38c3cdfcbf3388a95fe6d3e26c68d6a79cbcdeacfc92454cbdbc1da7fca20f 1637499391000000 1638104191000000 1701176191000000 1795784191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 5
-\\x08508428a4fbf81fb126cd06afe49345da8a6b4a0a81d3ecf08eaac277464f8123d1e2a52e8ae454a7cafec2d8ddad733b728f8ca5e8093c1594d069091441e0 \\x00800003d0feae420e8be2da8f1022b0c2494683d230b91bcd128679668f440a6f8a7220f9844e62c465b2f1a2f33e064473b13eb5a1895637740b24e7320c3468cf59ace62c18c1e7700ef27ea56d9b051d0810d74e17d35f09b92ce215708d6e797a9d334adaca0c44228d7e6d0ba5e4aaacb07b856ed333362e7007ebef4de9651473010001 \\xa15f57d6257b8f956a1b7775166e7554d1d648e2d20b85b216171ac46e6cecfd674e80f2fce3739997254640b73145f3ca0bf4a3bb2bfafad625df65d1ca0f0a 1660470391000000 1661075191000000 1724147191000000 1818755191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 6
-\\x09e076545406206349cf120e0630b4878cac2a9676a644eb68a28a1508f6b08e8ce380f22942974ec90dde27ab4c3b47e6afdb656a68a61401717111db861c86 \\x00800003b682d04f673cce1c30f1164e4e34d27c07a4e784714cf4f427494e9ac59fcd885f909d24f1770f33f49a0e839b2d5acc8bdafdd6d0c2aa4a2b74745a9c2b71ca276f61c074fde9f009e28512883dfa14c34e2d80af7dd5dca3d81ff2af6b38c8a18cf39e0324c3c3f9185b7bd7013c1065e74835695f16fc328b26e738666b7d010001 \\x7a55afe3c6e8a266ab1159af22d4e333efc550ca0fa1b8d282d4b353cebcb6d0539312ea6d0c8acb75f47ee55c61f1000ac3c041fee51d2064a4c20a5617a30f 1636290391000000 1636895191000000 1699967191000000 1794575191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 7
-\\x0a68e805dd3187b6a9e92ada4ef4cc1ed2fa9489c8efa67422ec2e8b7994b89c82b9161ceb09603715d3f379b31a49fa6e81ef64e227a4530aa33d3879c531d3 \\x00800003be6125be6ec5f52a0bd99d8a866d775b1e1df41a80e52700f07f1889c541d0d8bd559fa3f6a94a976a225a8f6e5d40c796a951f7be0e097694b71c177c9b4f9e11413e54d2423e0e6dd1cdac4991cbd2a27bee857e484a40f72ad0a229d7cd8e5a99ee5c81ef4192cc9c030940926518d8b031db43b94a2e820200b94259f1ef010001 \\x2f86bbe25ec8412a723a01f567f6ded8d761ffc93564931ddd2a24dfe5ba1a0454f2770be167c072b85141d898294eed12f2f51729524ee054a95064a3aa6f0b 1630849891000000 1631454691000000 1694526691000000 1789134691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 8
-\\x0fc4a911b2df7cd3ff5736dd51c995b432e52c8c05e497afa274572ba55c15951e2dc9fdac60009296ae904a7df56c95bea92f39ce2f23377da9eeac33676236 \\x00800003ad5b180aec9fa60706168f9bd40160a38f1ed8cbd174501f908b5d0f463a505f9c35c69c43ce997677616d403d0a22f8361a125fbc03befc00257bb4975feb405324fa8ef8bfe4045ebe99a103a7229b80bdc8be20558f3ae539bf074e76ece67f205caa478aea4c9fa92b25293453c49964020fdc53b7d1e367e8e91f7c5dd5010001 \\xb60edd9f08876070433b5a0cfa4b4ebc34b899091778ca5a4a7d4a071c81644815b4bb811fa5fa1c7f66d6879e3abd1161e546b3c15a971c45c0af13e8603105 1641730891000000 1642335691000000 1705407691000000 1800015691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 9
-\\x12ecbeeffc04c723e963d349e0d88e541a9e31297eca1d02660758f0ca66b29cb794570429628ea64fd71b6ebd6dcc7116ff70dd5488194ade3da2a7090e0cb5 \\x00800003c30c2a15c73e77fe0b2fb00afa0baca65e909033a19c7b9f9252e1268770726d6daed977ba66517da9d265a3a108b48a28f46fbec27748f1d6d0bb24355b9079d8670a9691a2c5a1ac793b30d53e361c480a2804bea3b544b12cda53e2f91f1ecab257c0be970be45f2b72e1113b644d29fe9925160a4be6191abb201c5c88cd010001 \\x2bf7df597a92d138eee7fb2b9cbd9b7976f6267aaa8268ee8979645681969383485c3c3773a52c1e45f62fcf7eb12408b1e80ad8c0bdf2689d9220c55ab89d0f 1640521891000000 1641126691000000 1704198691000000 1798806691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 10
-\\x13987c258ac2d85e13cf2fd970aefce9c08ca00c45cfc60015055904c8a1cfa87c9ae12857b0da308a0345b3e5d29055c9d27ddfdc8f5f5a83b76919860106bc \\x00800003bbac2c492cead9315753c38bdce3b4d7cfaafde873dcff812071a09211010ec8e436625ceeba5a7774e22a8cbcdbb8d84a700958307d2b2519ebcc0ed897e0160e48b8022e900d7aeaf464e6c8c36b6889866aed202c11e5e2d38ac27054aacef8dc0d2546e5add65199fd99a82fd67c3105d526993da1aec58c864fea677b13010001 \\xaedc995f5db508329ada77dc8387ce01add8aa9da314bc668a5b685f1d4112bc4d3b39858e5e60e89f92dae73c36a0318e780fea802822b3ca8b9cc2274ecf00 1635685891000000 1636290691000000 1699362691000000 1793970691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 11
-\\x2408b72d59dfd98ca8d54e6948b1533ed8950e47bc8d7ce83f8a1722ece792ac9aca5df404826c0a2ba9b4d19ed91a10bd68e12e79a3518bbe3108fc6bcbb0ce \\x00800003e27ecb23ac1e543f69bd9be967d4e14e32b4b97fb174313431f2f85a8bb1cb2bf7e49e1ffa7af49c8983bd657d2f0bb3da7012f9b0dbb39e9f5915fd8f0289789f0645e952a335c54d0f13c960e23590c753e6d66d2a21dfbd86e512d5d940661bc023405219257299e859246135478db9917ce6d5c41d6347dec880d8de2f31010001 \\xef1c738f9d5306c7287e79842e8676879d40013161874337e727c809c1dc6ade8713fd8cb0bd7217dee240ab5f5a4262bfba326511b13ce3d30a5917da545809 1662283891000000 1662888691000000 1725960691000000 1820568691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 12
-\\x2a604563ff7fa83f637c7d0d221364ec9858315955c37602d07aed574635a5db9661606e6e1905e39b1fc6e2ffe2a9d73512a4e64fbe0ebfcdb58c83bbaa7814 \\x00800003bb8195d7450a05422cacd9a745d1101f744bf186f7a153dc96bf88b0a837099df64ca01ecfc9171cd5f7c1c4fafa91f8155b8da74e03f2ca9dbc23196fdfffda51597a3999a5ae4ef496f7f82cc8a41ddc70aacca4ab35bc1097f18bb8087ac2b7d5a73b451cd2bfdbdcf962b362a37a446b72f2982250efb71a87891303c0f9010001 \\x7dd044fabc4d6b33f4ec83e36ea8f422b7f874c1e552071966d6304ad5a2f1229974d9d34e01eece3c3e8286f30f49abe33802e331dde595160b96d73a0d9107 1647775891000000 1648380691000000 1711452691000000 1806060691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 13
-\\x2d7409bd226e0051cabd65e4290815fbfc8a112455542883ca3042c0a52e5b1eac99d60aedb8540c4c7a115aedc03606be4c2e3e7d94d14db4e630e8e3fde1c1 \\x00800003b8df82c4b813931b2383b1a3d48e17bbce9c1d8df7320ff561a0bbb77292d0b3ed786f820e6e6595a709e841512c00566d3debe456b26de4e33fc78ecc395d51aa440e7ffec36988f473f073a2c92db272857e43e6c42a65a6fdc67e51db7beb2ad672cf82569f1f43b9da15a2e9a8016748809207ab147cac736c165b2b64f1010001 \\x40de74e86ab01fb69763feb106faa423d461f3701fc51ea6b5c9d590cc36b14d747ff84cea63817402001db066ff20018ce301e174c952d71f2833e6b3413902 1633267891000000 1633872691000000 1696944691000000 1791552691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 14
-\\x30207d2a582718a5dd09c6e33cf60d06acbd3b5b4776b212b05aa33a873b97c98b44cf62ff81814af7b2d693d5409988ab9d79bad19d2b42fe62b683bbdef739 \\x00800003c5a5d3d4b648d15685b0c4133ca4424800230086d186fadf48f1a32c69d32996f36a6407ca9a3751167fc4a96deab9f6f664e466539ee650fd3fd27944c30da889bcc8eff16370ceb36b0ca29e928e853ecec882744b89c53ea0078964013fd46bdc7b398846ec1b4812f90b84b13164623a5c1081252ff5a8c4aaf39bcd4561010001 \\x439d00f9546ab578cc510a2aa283537329a3b1977956a1913705648b0e1cbfccc3ffccaac3fbc6577ba680dd76e5938f37d0c8d9b22e4a007fdb8a5e049d040b 1648984891000000 1649589691000000 1712661691000000 1807269691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 15
-\\x314cce1cb5b75ca3d89dc0bea8c3d7d40e3b3fdf3b97a1ea1e8d1c83a5050f5660977c9e80f9621b4ea583ec6c48b29a89dcb02fe6b500ad8f04c77702e11ba2 \\x00800003a4b66aa8fc87b1a205b42f0f90cc7db90bbb248b763ebb087e15832c192df0dec64399053fa40d06d985297d7061c24125393047c1a847b13cab5c281b00d6ed03d2e5f0a7cc40ac16f47f67ae30765bf408e3abae61ca6d7abdc44bec5e93d3f2c4f0d9c82504e1806176f77bd90d1047307fb3b2aa2b09de59efaec00b969b010001 \\x0dc118a63154d0f479273aaf7675c04b974854ac19c58ac38fc2c5e413183a86026cb39e74855150d462604ea1dd24ec5f4426b3741198dc61d6ae9199f76104 1635081391000000 1635686191000000 1698758191000000 1793366191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 16
-\\x33b4df6f81c6d4a948bac6194ca4ad8e7ebf674d589a50c1aec941bae2ad2240c0a2d6e5687923547391d8b3fb66e81ec496f8591832c9dad2189f3bfd77b6a7 \\x00800003c76302d54795b1a1ac2bf3a7251c8983c26be2ee22f37ff1e4b79024655c0a1c33879c87bcef5f62754bb3fe4697a4e201a4dd321f68507b5156105c7efd7f275a949f63bfc6e7f232bfae6ed0e2cd11a84ab71bf46ea521246532efcb26213d7c50b6337fff56b94da7d931f10dc246190ac4e20454348faec650c0b09cfcd3010001 \\x700addb3a05bfcfa55381c91e9ac9cdf1c68a5cca3d9bfab59ea8e60e85e54ecf7a0bfa61d6c76d21f5ecee5380133531122d82139f01c46fbc77b3cf9007d0a 1633872391000000 1634477191000000 1697549191000000 1792157191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 17
-\\x3468b615d2c195f36f3f8976f6d8287d99108881a60a15a2d3ea62ffbfdf41604a1032bff29a927ea0e7c039b9b97f16d1e07382291dd2ddeac9a5e3e5e576c5 \\x00800003aa13186d359556b240a3c11afa76431371057c8fe8c06bfda2392ce5b8ad233501d759ea19880d83f9a83b81fab535262426737086174e1855305298c7e15276393dd53d9b9b185f70c4fc49759739d46835e0ee619713d3df089ec7c19d27ae88d6b339bf8d32ecacd552e95bf42a2310102551eacbf84f820721c286909391010001 \\xf91238884d530f620ee78e68404597338426e01e9405d208189ef26206dc3ae4a4ae2e8745291646694666bdcaf2839dd65c05fc1333328587b5e320eb78aa06 1647171391000000 1647776191000000 1710848191000000 1805456191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 18
-\\x3720e05ba99db7d672bdd8851323277db63d01bef7af018d9fbccec37859b2fa8ba81926be4e250f5d037d65a0ae4ea788d3a23a7de1c38bccbd6d886ad6f1b7 \\x00800003b1668f6d18116eb136c66440a56c392621c5d3c7cf095d826b0105980ea6f4776510b5bd4cb40fc7e98f42a833775253e1477aee0efbc76b134f70066d30df2162872d1cf9ea9555e7a99f4393bc90dfe4df41e840ed8f7d04d1f1b5127e0e4f884b087105e24670e7eaaa2291c0bc5eb8ac79abb2f5afd116446042fb97181b010001 \\x9987cb8fdf4c41fe97b44dc41d3d35a588a2d88f05ec19e8a05c0007a698b6c92a27c2653c54999640fb9ac1c6208ea098024b86743696c615132040b7c9f707 1632058891000000 1632663691000000 1695735691000000 1790343691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 19
-\\x373494009e8948429a35d9c8d392e8e2441d06f0adffb6269449e5d82898a9bf2a9d30ca859930be14c668e7fba0c738ba7741b8668c08112eff7105b9dc4d57 \\x00800003d24ecb32ba72ee278c9837885cb41e326617b4a556421a6e96c55130195098575764f89cde6d699815c968615b9770271043df102ebaf521415b0c98d809e4a4adc47618abd3b4d111d46ecf5a3139a4f06aa2fb7a8e9223ba84caeb7eebb2547124c717788533afd5c699fca9d7b00910b73f855cd14c72162e6ced15493f91010001 \\xcfee3e32aa3acaae9de9fed954a0d6d9ce39cded4db74483795956eb5cd5981d2a0c2ba97adac276d79fa97f15f963b218b0a0e53953c823c6d60489953aff09 1661679391000000 1662284191000000 1725356191000000 1819964191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 20
-\\x3758860657d7435d2eac1935e970887b2c87df23ceb84259e668c3e4a8a3564ae46b55bfc0ab20986bfd16426ff1245fd34ce597fac0d03d1fc3d18588b27f57 \\x00800003c4aa579462cd96d4feeddebcda81fcb79bbfd7e89d58df98dfaa7b500d6a5c442fad5a80edfceacb1f19215c543513a709c8066d5c7a7dc84ed914f23aabbef62af6f2b09cf150cfb4a29917dba21d227293babffb865891765690a2a0b9c72ce362b34f4101bf10fe7b398b273692043baa7b21677d69ca7708df53bcd44fcb010001 \\xbe18a90b433ffa8aacb9ae29f0550537ff4efe5d60898f08f5db6d53f05efa10d443c1f56216e182075db234fc881598a5b1d4eb62df864c9a6eb3619d77f80f 1658052391000000 1658657191000000 1721729191000000 1816337191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 21
-\\x384c1f9773103970eadbab72f1d7f511e66af219ce595755fb8c623c102c92379eacfcd47a0ada179bcd1bd1686ab0d1073e14178f88cd5d8544ae53217a9617 \\x00800003bbfa27af560daea59de30f8f89cbe1c5fad1ef9c23695478db7e624560bae0068be69bd588b5d01574b573861ffcd9ab74db852675348f78b698bccf2a6dd81c44a8338b6798aea6cb768b24ac922cae7b2f51d789e2043706cb6d4945386f1a38f5f06dd45f3f31531ee9424b869e9f3418c5b1b4720fa87119838754c31dc3010001 \\x93eabff6bd3caeacdf7f48e453fc71abd3db3b27b77c9dd2ccd260647321cc22a99e70428c1c9b4f8e2ed225bcc8c8260c7abaa2a11a466bae5bd4f09ed2bf0f 1633267891000000 1633872691000000 1696944691000000 1791552691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 22
-\\x3af8d6c3772b1d72640d5339aafc7f2c1b73508404faf77cc4e3a723de7619b0ef36d8b09e6da58af042cb1258509ad579f7e7ba9eb6c6f73adaabc1d9c0f3d6 \\x00800003ec9c19e18d57fa0cb9a2d3586604817a23673635057305bd01b5f0b3b68d4e5302d9dbd25211d87107c6777fa3f5ab409ec139ecc02dc4c86a34751765dbdd895c539afc292fdc0718e4257750e1025aa3c23e49495302a40419c7a1db32d7297e9b68f782e0a7eb05dde06beaea7962befbb0e32abefa8b79c87614b3c0a1d9010001 \\x9dc9ccfca5da038f2547a0f37a3830b31526d278599ebce1ccdf424fe7c1e78f57ce21bd8013ff9cfb7cdf35c9cdc693338ade0b1b5566950be6cd5c3ee4450e 1635685891000000 1636290691000000 1699362691000000 1793970691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 23
-\\x3f7cd544801f690a03a6929e756554c8d8a58751dfb706f71519b141c7373b7dc18fa118310c335c46df780a0de053918959f398b1616d0e3ce12cd1bb35f0ea \\x00800003af25c6d46b081af13bc7c2ebe8848d930a97ec2317c14753a40b3130168424db4c456542ab418736212c2a6d969bc7bac6219041ff745ff6a937c45cdc15bdb55386675244799b126e1bc18ea2394463b9564e54856ff857360584fc6f5479250a39d97176b65476e6c194b91abb324e542fc49a765aaa1755da11c530209f4f010001 \\x9a2c3711e0d22ea8ffe61b48a47a919655fb4e224d19c1d99879e66f405c2fad888522ef900741b5b4e19a187fe43dba9714a098a6ec6dc3597117a76505ed0d 1640521891000000 1641126691000000 1704198691000000 1798806691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 24
-\\x44d0abfb74d47e440a2847f05422b6171ab1b1ac2b1aa9d4b1eb0cce20378d4a6507bcaa33b494d681d5a37476b9af210140a2f1e9f219d8d079a21244fcad98 \\x00800003ac46f399857a79d9536b0d816a7935bf808e35a35bff5e9a924592b64fab665e6df7046920fc7fe1d2737225232966fbe2ef62455cb4fb8e2eb05673e31f71631e1ec5afd1cb248a494e78a7d831d00007d6fa912ca54fbf8ae986db6c52894c9eb0c4264cae6dfdc48948c55b0c3af096679179349f426d5ad4d3b2c8d656f3010001 \\xacb0d2c15ff5b0a670caaf4f54749f7a651c3adf965b8d815a748010bb4f700074c387e757e9c1fffa3337e2f53f9431b1ba2f1412d82994c4ab26917985400f 1640521891000000 1641126691000000 1704198691000000 1798806691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 25
-\\x44406bd467405364adf3cd8876d986ac8934f703ce239ebcfcdfa4c470d5bd4d905bc79078a4375faa50926075e8a03cbf3be09d178ac89a2e47d7990ac3cc14 \\x00800003ca5e06b29a29779a224ee70928b084e7befd45f4bb872836ac4e93a10b313efd3591bc148121aeb518981429926f019227e92ec6b783f5b405cf6c32ed1de172de56fd7857cc111258a7d935a641d8300b06e43ea933a06f3464133fd0a8e7d0e406502f7fa516b04ba5add71f02b7a784e95fc3e51ec22d24cfc2c7c5c50703010001 \\x326d0f60cd378112a83e3050bb4e35f110355af3a68d3431e630236d0a9477b75f8ff4a81069df6499ffddb096e836956a5d305e345020af9db72b276942590e 1648984891000000 1649589691000000 1712661691000000 1807269691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 26
-\\x4578e37f7926e2ae96cbd6b9cb40fdecf01cda840c7da404d779b3f30b63a2494998d361ee2b458bed7e1b69a7d690085dfbb39b66a07ec575b63dc9df4b3f28 \\x00800003c6b35034030bea32984fda137c85687dd12e24dbb5498155ca40c51d918698275b9763d43402c109cef0dcb83ec7ee7d8c3b357a05c6c3040ad1e1c9384ec346235d4b99e81f05274df51c0943780e697dad7cf51bf6dc69c4e41a1031856677450146323ab0c888212f6cb9990d0e0218cf7186c3a91ec19d3bf1d844254f21010001 \\xe0059bf2277c6b37bc5253f59c6ed86fc8774541ddd2e580c461c24a70ad5a0b98c73d3cd7b1928a4e59edbdcb9efaabb0619d83396c8f6682052e495210840c 1641730891000000 1642335691000000 1705407691000000 1800015691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 27
-\\x46e4ab128c1c63e851d338d7799562a239e3d7b6081a2c144979fd4c324635e1cb26c49e7e333ecc4b70da71524008a31bcdd1350f623aab8565caa2d13e952c \\x00800003b64695e83ff39183422147fb89e1f83252fbcd1280e48ee82008d43568c5422f898b9dea8fcff975155e9986e5476527906cb70d9cdc87ce222cec02ea2d4d6d023483ac72fa23ab289f572eecdb31d9f006ceab46e2b43f746322c7697b4dcbd9cef49e6c5a0ed907c15c5f08c8df878b5ff9bf029460afa21e51b63a40dc9f010001 \\x1d12cb9cbfa2b2c039723e46208edac17a862b447dd7e7c97041d89ad0872bcf836fc24fc79f25d838e9938845fcf456fd57d0d78c29d92e58752eba653a0205 1661679391000000 1662284191000000 1725356191000000 1819964191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 28
-\\x4d2811427754c052ae30d88b08397692ad25384d5ff202902bf63405d8bfc78e35a7bdfe086e48e85ebbe42fac3692c20418ff35e50521fc60398dbe0d8547e8 \\x00800003b41a57267a9be4220514d88187e38851d66eb6bf7a25343904ad23877a2917ca9f29ac74450b995c8471cfe69bd861ce3c44401f53c7fdb2d7e66c1698cc8bd2bfecae9eef7aac82a140106063fc9f52a28d8a1d346863b22b82c12daeaaa35251a84d6f0d48f8bdd451fc65f879ac10d72518fbe9d35bbf5dd0fe7ef2ec85cf010001 \\x8a25d65693c7d5e9320ddefe14002b8b0bae6a0778c56079cb299b414d2f0738aa849e131473c7da7582173aa6f7d61e5fce0faade3d75c42a7027a6cae6230f 1649589391000000 1650194191000000 1713266191000000 1807874191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 29
-\\x4eac1340b61cffd10cf2be7b234716fab6f3b890d0465ba09b944add79997a69e9fb23abf314a8ee73d3e07637c89efd72f2b597c8ee0b5fc89a664c94e15e63 \\x00800003b9d8ff90f2bd2010e164b8a91888edd14cdec66e51c38464281205cdf21b10eab9193fc5c6ecd0f48a378b3ed436b8ee13870eba06af1a49a2b6da60bed45af001206ca1f4ce3bdfb854da10b88b0d1d37fb591add0c055834e8bbabc128b34722c47a1b4185d3eabd2243447ac85b46ba6179c5ea08165915aa48d84db8f797010001 \\xb7d3d08fb0ebcebd99230521993eb907e5ad226ccdc208847296ca7e09badb81a566fb4b2c304172b27e8ebdfcb90dd87a585b975f4164df628380a337f8340d 1661679391000000 1662284191000000 1725356191000000 1819964191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 30
-\\x4e48cead2d2ed69e539080b6d5fbf46de6b0af3dc19ac4997d8a2b5b975997c75572c78ae4ed13ba8ec4c584ebdc24ab373f831795e9b22e35f57555f14f319c \\x00800003c5f28810aacb1891d823c930283f29843ed77a60100e727b1d4846c0ac12c8e189b297b20e6997a68b600fc57fbee0f78dfc522d19f828ae1eed3d2cf3e74ba2092d1641c65f05c7bef56275047a868b74728c502146e51385bea0eadf4f6b9a43976b51ea312f56f8d4a3fe66e3a02fd74f78e15ea5abd2d50736edea9c374b010001 \\x9b5b5165c2899b2c1afa16d92168a774ed31305ae881424fa1e3dc71d4dc309a804f6e801fc8fb39ba07d550a5c2f9886b3bb366479b3bcabb4d0186a996440f 1646566891000000 1647171691000000 1710243691000000 1804851691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 31
-\\x502001b8bfe17c4a25828b472f12a59da5568d12e9542ca654c0a2b1db3bd95e9c3d7fa151cee2f7acece610fee3245f84223016f868b4582210d22d31926c03 \\x00800003b25d17c48f598fccb41b72910edfb5c2a5b0ceffc670eb7d181092b4f848d3fe91e72be6b938a4f4e59bb85a750e09fdcaa8bd7990c6c7325c7d72b77c88684c9db75a2692ef1d90c0e3dd1f45aebdb2132cbd9f774d74912396cfa2de11af3f887ee6e14821c1b5c9f6c1f14e71baf8f2f5693cde4ba5f8ba0c76dca2fdfacb010001 \\x7e4e83ffd994cb482d8c641d430801febc6d0cb1a06189f29c313c84a3cde4c93da5d2dcb7b8d1581823f1d6b6b4fbd4207d55e2d361d1ea1ce8822eeb141603 1637499391000000 1638104191000000 1701176191000000 1795784191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 32
-\\x501c4d45dc4ea01b4c0fb05bbce28c9f52d58536f1eb87fa9410a90727a6651000036b4ae5c6fc638c60f6af79201100be87ef82e3a6e0741c7333b0faf40ad4 \\x00800003b3e096b020d553c75d2eb4ffefd3cfe01fc9c506dab0b9d78efb9a1912d2f642f6629feb230d93a7c36cbff9f89349bf07b98ee9bb3e00ec95c03b30d33ebc526f4569a9ad59a0298a14797a6aa3c0046c4910472ece4e37da957879007759184c3c48edc576ed6de01669eebb02b0740e4b9eb66b38ee718d4a01262c44511b010001 \\x9b789b36825f08c63ea84fb6cdba084856c7e467fb26e34ffc070c0109f7f507737d6426004d719f93913f36ff643218be323b2d64761bbf6e8c5a23ddad4406 1650798391000000 1651403191000000 1714475191000000 1809083191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 33
-\\x50c43fb5da2cb152825dc0e5b99ae8093de348de3f6c89e564d8a557a7c1b4528317cd2d5918b2d3bfe680a6a721388f210534b23f3a973e2d14e2009dc59005 \\x00800003be0b6bb4a190c2045bf5056dcceb97fa2562d259b4ca4b0b33710ad05ddfdade71a37f038696db6dd3c5d29d4cc415a503fe1fcbc693852a82e9c2ee6fb300a48c09236499d976b1e7fdbfd9c14f56b8b2e2a1283d9abc1944c206eac449a2951f68a3d9defa65b881f8250c3cfcd60f3349c60b6e073337ef94bbc1828c438f010001 \\x73ba17b77c80fe86901da9b53ce17924f11fb749c0e469aa1cc12a254f503688392d14ffa0bd5a66f824348c64fc00e8dd69ab0d8f81e5a9f95445c9accafb01 1644753391000000 1645358191000000 1708430191000000 1803038191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 34
-\\x54ac81881633fef147ec6c72d29118defa52c5f94dc5263a56d893fa7393e91f66e33b3bfb0432dd449ceb3791a87e05ce5adbe235f4915022b41a71b2550e3f \\x00800003a473310b031ed96cc0e37f89040cdb42933919ccb4b909e073cfc5db0d23e44fa545c96a8a7a9d24ff68f41cac96a7949564ed082c38d6cfb2e8647390f0fff1f5db0d65b35122cc66f1eb8e53004bdd979b7c21b80100b175b75d338a62c76be5c0b8622c4fd50610ec99e498bfc8fe16b1a06dd9e4480cdeab6b746da41547010001 \\xf138ff2c6436885fca7bddc3d83090a1a11d67d1448554b6cafcbc4860caeec7d758a01a377b9edc8948b1cf44ec7479a32425b355b563ee005bf47d5d67000c 1662283891000000 1662888691000000 1725960691000000 1820568691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 35
-\\x55e8c98ea2bb9329e41205ddf71c3bd0425695ca4005d24f0ba1e3cd183264aeb2b522c278d8856460c14e24ba3b337674d1e16bb9772bf286020bb651dd2f4a \\x00800003bf79a45cc06c8c873a74da7a6779e17c3e939ec7bc580d0a1231123218b5f9aaf486e95a22c0305d99ebbeab767fd001fbb04ce94b8ce71983814a0ec7b1866e47699d1e6e81422106112341b14cab581d5942fd39fd5bcae00d1e1197b56a8be5337866282f32d472cb1ec0991a56e2bfcd0f137535c455ddb0e727da6c1e25010001 \\x6923981b6c6c6b2dd7bf32facb4b35ce3bf73fd1c02fcb8daf86895247842d001e25527deb345b5b7995498891668af9f4f483cfefa7294616231ee820fb8908 1634476891000000 1635081691000000 1698153691000000 1792761691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 36
-\\x57ec9cb820625f7d6a3c91f06ed8d92fa980b00ac54f3b85641aef89020a787d8168c350e54a7962e810a53bc0dd72f324ff465a8140029ab1d68c4a678b58cc \\x00800003a96c87e791450954c0feddf9e768d32dace27776973e51b5cd02f923e17447f426b2fad44a93faf0d8ca89365fc6a2339a45b75950bc892deec9e6f8e52f678baaf05c9e29b169c594ce92c2bf68f8d75a6a34f13e9734d6bc22375d6b1a0a9f3cf277cbf74e83ba5889e1c869a2d62eda14086bf4174add6a650d98062bf4d3010001 \\xf6fd2d1a05ae78c3e74531f3b0560cc1cb9dffbb7ae85d52f7f00e76c664de52c41392c7781d55d31801f447a2471fbdcdf7f9c9ad53792a8cd6d8799c16250e 1655029891000000 1655634691000000 1718706691000000 1813314691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 37
-\\x5890a9115369470b076fc932eeba781f525e73d7baf257c79a34c6ee6d8f07e458b985ecaa20cb7c441db32b43c510e8f1591c9d89c182c7afef36dc831ebe4c \\x00800003b430e96a52ff2618e3cac6452debfc3f5eea67a3f8efe80f096941786ef5410844077881e2e7bbbbef86cea40e67c79645829d85c9d5eaf4ae7d9776e30a1205e70514b6b41c2985d0af12cc7449689253abdef073734346599ba42931fa28c2fa3364051d62663a222cbe9210a83fb816d74e7012bb2d97be7059808412c2dd010001 \\x86847461fc7d72376c8f4e9db8a2f7f93b105e20144dda6ee380fea9c24b430d6aeb6f7eae56183b1753593fab702bc43009edcb9360ffbaedaceb6ca32c6e0d 1631454391000000 1632059191000000 1695131191000000 1789739191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 38
-\\x5984292497f5502378256e58632f146170b3076f9c82e120a4e08cd9da720731ee56a92e7f6cb5ceabb3491ca5d1e58e4446c93df4a09dd94be0a440aa7a2d4e \\x00800003b224b02abb5d811b40c8cb2b59c485f396fe4564190ceba0acc5f15ec971f5999f681e3c490e4fe89568a06433c76f492739fc0b61aae84a7773d1039329bfb384305d27c17eb74366d75134090343cb71b2f574789c9299b5343c7b7c995843a24036e7876fd91a0c263e8978f0d13eeefa4421a0b630dd3bd23ac87a76a1f7010001 \\xb41ce5c5bcfe65fb525268a2f3c5272ec032b23f63d0f919095c3deccccc82b3a50873ffd0955f58f1029cafd06ace24a1509241225216aca9d7232fc4f53502 1658656891000000 1659261691000000 1722333691000000 1816941691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 39
-\\x59a4a58441aeff82bacc2c8eaafb2bf42d255f186be74f095a1d615d9be63fd1369cb0fe515dbf4280b11286f27714108067c03701b82aefc6008f2d664f4f2b \\x00800003b3bc1b45609bfdb96fdced207266da3551c871bbd01810eab2b6f8c0f59ba7e2d51820e3ba001a26f08e173e372d7bc3e9b59eeb11b79fb1d7b8d51a37c53041249edf9d56bd9d395996f2c0aad3efcd0435fdcedf9793e27dada0a2a77a35ff874d7e6fda6ed6c6d6f044f35841309f7eea5bad6005b4fbe4f4d2bde995a745010001 \\x30cfb7e567d5c2cbbc7643699b896c90f12f963739294cb3e584eb6005935c50adcb22eba8354beca9279be55eb28b09f14a8aae2a486d9390860367b0f9da0f 1644753391000000 1645358191000000 1708430191000000 1803038191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 40
-\\x5b10a81f47546a8f9bc3b3efb348d6215ab339084b3e892515ab9fea64cb82fd8296ad198bca2ea06e0902436d51c6b6030f62f463a154965286893fbd9ede63 \\x00800003b173cdfb083d2ae9d7588900d22717ec0451e68c92473b4ecc91dae8819133a7b3b37baecd87ec0f0347953b6161bc1c20b9efad1f19ac03cc571729afb05fd0c8f8d9dfb4123a8cac498d7a4a7d94f79bbe1f9746600e8ce6c78236c70feee49495864a84cbeabdd02816eb756391b27cc03bdaa8848aec72c9174778b0245f010001 \\x1cf099d0de13df3a1b927c54e569f85834938474199a80c96332e21612a60fd63475d080474dfd6f3cb8385a64ec97680fc50c9e4c13cb830f0fc4afc6594a06 1655029891000000 1655634691000000 1718706691000000 1813314691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 41
-\\x5d9847ec88f1aff1b2146c40bded031dd43b86fb1898b0a846fa2803487edf819fb6b97d156da415cc4794e1dd623f6eb9caea91b5f8ff753dfb410636e457ce \\x00800003bedd7af7d04e8aa53cddd6b3eb46bec8aa0897b8812e610404c796075553a2ee0cd8636948d53f4779cde3820999a41cb8147ae729536dada42ebb75166682c057034c9f3e40c6381a169e2de35de331bac6e86280ef08868c9a7e8b53663fee963b444cd89bd96513984efb28c3cd7bc41a3c7f272b12dbd8995eaf067097eb010001 \\x075df87ca67c4eab51cf7ebde35c628762b1d2ee75bc27933eff746327eac7e3babf2b7e1abc8f4fe373d2c6280cfd4ce11f800f797d013c8797f307ca3fd208 1650193891000000 1650798691000000 1713870691000000 1808478691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 42
-\\x6024e28ee6451fa254ff5fe67e425523e8cb76b3b63321b859ea3d8311d23ded409e56779f3d0a090b5add8e60bdba6c3ddbecb9ed952b00e7ac477717632444 \\x00800003c6438bfdb0fadf0c791cb7c9ae312daa47265e964a33a02b06fcb9820101a3d10891773f451bfa35b2070320cd77c07ea5060489fe6bb112d746c4946eb4cb493b9e24c635e09518ab1b80f6bc81694182947dcb322b0497e17d8664319a655f8dbc46050ff9f9d4e1e1fad3bdc4e797b56141ef7fde0a5f78b2486e9d82237b010001 \\xf2ed13c1bba62b4e4e2cff170f1fc842d4860028607248109d4a068bae699f3a18cf3635e8e1157f122b484dd9571d49baf596a0ab02ed246099acb78709620b 1636894891000000 1637499691000000 1700571691000000 1795179691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 43
-\\x64242f35d34a0ce5f383297c570746e64eddaf7c750acf74b361b21e85970e33fd58011c9e23fd23ae8192e1cc4be00df965b6149e00fb171108d70b3dd1f737 \\x00800003bbb6b1c3f95e938e2ec3c930c84734680c81bbbad30bd3383422c4f2b244358f6d74441c9b7310f92ddf62f575c29b65e21ed51b285c1d54ce86f81186e8cd5dc9556a936036e63055dca124ee29e6d4b6979a6b9c849cdd53e45f23cded84ba2faccb5de48b78248fba743ceeade22af927c2b12a1a954f57ee3f82a28513fb010001 \\xaffa2dc281c420b20dde8da203724bc797706618d8e55dfd7336a532f14ed4827cca3b87e3478ed92dd355019e8bd16ec3ddb412e45091fe60fb37df3eda770c 1645962391000000 1646567191000000 1709639191000000 1804247191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 44
-\\x670cf2201b93c22b5a4299bb99324a5527dd16a34b377fdd64dce728f6ffb88a018dd3ae60c54bd1b64d946c9746a4828aa7952e6c90b71668566c315137eca9 \\x00800003c322e6f052e24086e84712b3382cbc36d422becb4f65e7e01712ccef4430cb35db005bce22498b3879f5238fd11d7790c3635be8a79dc5d2f325d5f5be3f9469543cc4c98f194fcb47b0bf537a6aa29d7e412d08bc66cf208fb4cdb65eed2f2d43fc08305339cd4af98e1afaad7ed3ac425cabb676f5b89dfd521242274c4c03010001 \\x17e830f4018986aacd868d3afb6e3d5f1e50e26cd87f5f8f93ec0034d4e14c24d6a5433e360383e2a29b2c478179ab05539f2adc58772f49f3dfea01fcac0603 1653216391000000 1653821191000000 1716893191000000 1811501191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 45
-\\x6808a6424f2c1ccc4c7459eb3e27fed3308442a72d43cd60881c8ebd6c15f938cad061f3d50662d3e0c7d0508883ad5e47fe56e2a9ef8bfa8c7fd4d6576bccad \\x00800003e1fda11b2f8db58e0e93cb8a9ba78ee70faa4e5b0103a21326883861ee8c9c7e185d53a0954c50de57e69d9caa268ed2d5f3086f7834a6c77e90f04a479c221ae726f8866220e3970e73c86e3a7009993f665201b53a480ecfec190821c91c78a32de47084453dc1baae102016b09c603c7205addf4b8cbe40b7998f90784973010001 \\xf08ef149efc93e9e41e133bbce92a89e75ea82b6e1f1fbf965db12a9f1b7ef1e015ed83e34ea51eff9b8a71cefb42e940eb7eee27f32e536b83f3bf22a636a0a 1652007391000000 1652612191000000 1715684191000000 1810292191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 46
-\\x68187b0894fa52c325a8ddab56ade427432eb4bd829e9dc8c65468a352adba692ccb50b39c41f4e20375cdc57a5a85e445eba396da3342607d3e96b8f76d2818 \\x00800003e8050aff4e12e184ded63ba0fc44cb40c84aa0334127ed06b3a0ce091a79e862fd6c2f4b8b2f9b9b8db43999249f107580b8b8dc1348acac98a04ac2c73fa3954970b325a0c19139ae5a1ce08ffd9ed35ec7f56518bbbb4f6de27044804f365db38cb1b4c3b511f7a1ea23e793b87ad176b684b18486d99af440e9ca3e5c18e7010001 \\x62cf1ae9854a67fd0761ccaa702665068a687cc99e6158634a1437f5f1d6ac76bfad7a27197a28b554bb65ac2bc3a5703d5b99537c9a1cb0aa10baf39ab9fb08 1639312891000000 1639917691000000 1702989691000000 1797597691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 47
-\\x70f06cdcc6180681592ffc865a898687c3295a07e79bcab885ad96067d15788662a376a678f528238756600c916ad51188407b733126b4ebdc5a1e72e7878257 \\x00800003c7fbc2f41fbd7b78dd664e887eee08797e8941a6046aefe4f5f06f7e7e52e66993ea14261d8f52f22db5153692eccd9a422ed267ca81950db6675c3f52099707a839b28247ecffeadb0b0110eadfb813c27e31f2db60c672a44eb9fb8579ffa284b011f8a27a5ce54158476b67ceb8b61cff3aacefa1cf203a60a7cfbd81d109010001 \\x445da4bcb1d63116c2799891e98ee377db18227c899c7fd6816ec37dc0f439a4c072c25b3889ad5940c9cea3787addd3718cb7e8641d55d3d9d5749ba5f6b900 1661074891000000 1661679691000000 1724751691000000 1819359691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 48
-\\x7068ad939680bef0ccb82dc1a0f0daedc4e7201f0493eae5d95b9a08501d2ed161888ac082389979b73989bccc9ae2f17c0a0ce9c63b155d9d1b6ed6f27ce803 \\x008000039fbdf18efcf6a2374aef442007f7ab2c863a9eda3dcfa2fea396dbec1cd482f6fc31787c2e6f1eff59107edcbde71d345ffc234697aa1ee5b9b321b1d6f512ff7b01529a8ee857d14e892d73520a8ba77e67c8463b27e13e486e1547d265eb2844a4e48731749c24b1182045a19c463266c627f8f31dffbaf736e744c739f487010001 \\x9ffaf4114b9828f1e95c0f4a393f768d9465e3c14894147aefb77642b15926aad691bdbefb1b17bd054fa169d979ca1ca3c462f6e135fdb015571e2cf3eb5101 1660470391000000 1661075191000000 1724147191000000 1818755191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 49
-\\x71c07cc43f5267a9d06ba1965859a3c487ab011f5e73148ad4366b738dc9ae8b75099353b3e42898be9a9645813712ffca375e483665bac94b34c8dc6394bff8 \\x00800003e3ccb53cecc72e49874033558a64992e07c27ff0563072fa25b8cdac86fb19675c7e39fb2e5f0ddc3712a1691c610351fe8533906960522f2c88b85b123879aa6787b5a7e830cec26b2f5d1091187a1e976aa456960928439ea8083ffe2502b5c943c543d0d188d022407d0d888c7206881e1620e0a157aaa20fb8a05489d035010001 \\xf58ff9af548d8d91bc4da19b27bf0128ce127737d9b604bb8c01b8e911af5718a31661cb78330e3f11d65a871347c6b57fb39e8923bdbc71bba1e72e15195007 1659865891000000 1660470691000000 1723542691000000 1818150691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 50
-\\x749c7c6666903b7030022c17a08a50366f5a271ce2e5df3cc6743931bde0066bb515f5e95b305b4e4e4c37b06ace197b7a57da260a892a131074954a864565ab \\x00800003b384bb96d57f68530adaf8c049b491e26a2dac442d7e9591c081a1628fa578c107088e11d432eda2a8fa2c3f3100f658a8a9c9eb75c93450ff40ef4c92f64372f46fa6d71046ab27aeb452552612e657cff7604db7841c2a4228a3987e0941c1fe4b85ea6c6ba0f0d9cbfc6c23402846de52a9df924e6d03d254bedac022bd5d010001 \\x910f0154f367da5e812d7e79d3015c4d66d5a119978dcc08ff482a5e90eb7dcff65b3b428bc8163adf0dc936602eadbe0b2e9d9ac05e6e7ddbf1bbb61be75903 1632663391000000 1633268191000000 1696340191000000 1790948191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 51
-\\x77f4b51a6c46e400bf0732d115b2fbefc5b193358a890ceef5f7a19c61e24b3e4640af41a03920eed43354a2d1c18e323229114aef6dc009926a069283f457e2 \\x00800003a662d9ae20a3d64d060b27a2beee95ae7c2f98c18a46755172baff692e1e0019edbc9f5925ebcb5f4053acd9f08dd5d72a23187acfec912d0f1d2f434041bae1077cd1439050b1b00d46d0a18be447d3eb87b44827b13027c59f4530a328e2b96cadf50174f43c098ef94f3a7d683688da3b7628eccd42cc2ea698c139532dc3010001 \\xb2b8b4f245c1154858fc188e11abfc0ffee79424f8adbb5ca759df8a9de5d2eb875a81ff37819d1754b871fd16c1dbdb99129c57109bdb54250d6b14b567000f 1641730891000000 1642335691000000 1705407691000000 1800015691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 52
-\\x78ec7b494af2e47f482b69d109eb60f103eb9317251b7af1441095eeb59711f941244eb79288a631ee86feb38cad6b2f2055dcd8518bd434672f38a0244e8957 \\x00800003b337485d4a7a3c35afef762b7596746000c2031a3a30838e467d9a7cf302e8c54bdee8d541a582b41a82589c743bc01210eeab8b53419b6f836b3b4b42e0e1fb885293d4853a2d7988c0a2bdbd2e7bf2ee1ce31b0601edc5274b3aff31db88a81c4c6e13c060143e102b3e888ce1b45d23a98a9a975cd06f9db91db996d608eb010001 \\x40ee086227b82f5a3dd7646f5d696296533cf910a2e6acf3841083d1445aca9c5fb3907b6ddb70dc8bd6c02ff508dd2a7cc6abec98b53e319409e3dffe6bf607 1658052391000000 1658657191000000 1721729191000000 1816337191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 53
-\\x78a4609eb51809669a0805c450c65423ab7500541c11128964720336d211c43d1747ee6bcde29ca5d553b7bd9f646b71f978d8ec5d4861a2fd1bca5ef1237e94 \\x00800003d4a856557c4d73eba034e54d1c07f3cea3cc3815c4f356fe95ad9e07e79a874c155451dbd2296877217a1ddb2da3cdac64532e2c2238ff093d15d119aa7e80a851dd2981b2ea9d5e6a0f9a54a19e63fbb6a3d4b049bbfecf082f00340ec0b093c2a749fd9269c2f88d937d24e096e5a45c484f2c1e978a6bff8d1e4bc1309605010001 \\x48d36e84490a21f2aff07cac247068516e9b581a931c2a3b19cdc23b05cbf6d7e03d4af7ea9bc8bf7b1fd937478402e3cbe4542eaf5de480233c5f25f7ab1706 1633267891000000 1633872691000000 1696944691000000 1791552691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 54
-\\x7c5c7825581a3033017b7e02008795c79ba1626eac208b6723749692bbeb631a33945d0dda8c249b13f9f1098ec4d086fed669423d1012c85f47ba0128eac81d \\x00800003fa018f53744ece57c9c7329f351a0f6fa3868c0d36526518f89f0337da521e96f5dce2568e3186cf6c613926d00dcf17e27fa8268b8dec7fb57b133925fac60d9aaca6285bc3c4ee1024935df64917d9fce83ce456eee59c3a01cc08c961e6a450e234f5a0327c1cb56d9ef01d3d0f4fffda65cc291ad87ac6c6d70a3aba632b010001 \\x859432258488578adb081468b82e3476a5680f888de9d839d347f503f1c31aa3ad3d5e95192fbad7dc6baf6d92f969690eb41680e678074d4ad2a291c44e620c 1652611891000000 1653216691000000 1716288691000000 1810896691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 55
-\\x7ed888131f32d7bd074aa7745dc831dbcd2e602cec7cf10889a3fd7768801744cc2a282a3d8db03d6b48f1d2cfc63210988088a28c755ec13b1cca11593e9553 \\x00800003cfb09e209f29672e744feb3b66c563f335d624f3352640fb70cbd4c5916cdeb13be6c63a82fdda14a8924a136c2abda6ef031d9d01876555dcb5a3bc9a898ebc6127555571a07a6ccadbe1f6f7e17d9bfd473a4b3ea0161221b336dc01b8192766ff94bfc69b8bc3e11c22da18e4bd71377f4ff531d1f0ed92ec1da5bb307fe5010001 \\x25d26dd546e8367108143e479c75d38bb762ef9c50d5c26a3f38f44cb6114467b8c9f1e332ae70eaa32c17ddc23ecec2bc35c52a64dbb14fb5cbd6741d66400c 1636290391000000 1636895191000000 1699967191000000 1794575191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 56
-\\x80bc44c96dff69858d79240dc609628b4229f2838c1662fbea494ecc4fd6bc8a8688b97ccad97f34a9e3f47466f16ed197cdd87139f39de1fd337f368c45e877 \\x00800003dc2340955e62644ee67544237335a843325e2fb6369afc3276a4906472b9d1c95fd976856c3534a7a4a4ef05816b677852215f2b15c33a8388630d74015765b9d6599569f6913c879a6d4a031e420c63512d50e6c418c791c72e6cf65782d5f6c318408f4e26ae3d451eb3e9e52a025d928b318229f9c9e4bfd4af93c08fe549010001 \\x49eab6eb6b849037c5ef004fd1af472a6569bbb3ec44d57d34aa0fe10488b7f0d00792fe225bf45c1cb57e12a81a873f01885732d836b6c5a8cb1e2d610d6900 1652611891000000 1653216691000000 1716288691000000 1810896691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 57
-\\x81ac5c31014ced2afa5a4cf5ec282ed851a6ea96a65a34086f2ec6002268efc1bd2e2ca604fb50d701e3aa0397c128971a76a1625ef90ac885e5f251b82fadf2 \\x00800003ad4c81b2144557b034323ef4cc195605d3eefa9775187e22a1b49171a1930d7b661e16a299e91f8341a340970cddc337a4673d519c1ccf8a104bb0b886ae5358a2d91f5c11bd4f2cb6b95c47bb4ffdd4cceb990e9cadbecc35442b800da60bee4abddc051b7c68bf98a71444139fb2d2f674b60bc85ba755016d2822ce668435010001 \\x065dd643e923cf7c978c1d1910d8f1c33a3d3915a159a14280361c42fcc1cdf71828ee9eeeb8b41841d90c9797ea42dc05ca7cf0efe224cdd4208db5d7cb2607 1638103891000000 1638708691000000 1701780691000000 1796388691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 58
-\\x82cc62068e86d3cb3796ebdba6fb280dcfe3306ff138e9a99ab8d00c2fbef33b37fffb25ddc127e00b11fccab068e76523d9e87a7679ec4dd0463b85184f1765 \\x00800003a882838c2048710955d68db2c79d5b81cfd501e02f51992b122855403cdada65b86558cc681f801c63864bec37169cd174f4e243264e06fda6016fa1e823c7cf4b7e39c6f6cb78a5c84ccc56040fb4fd931da4b73e927e729ea5097e5ab85ee21b25cdf17e412d4b46c21bbc83cae5ead24edc6451af0c65792f88ef397c6b97010001 \\x615fe70821e1394ddeb1902175aadfbcff6a8de4fceb3909fd686fcfddda0f530d5f776f46838cc2491d0d6f2a9eaacc7374f4f452d36b70a80a0f9df89e7b09 1645962391000000 1646567191000000 1709639191000000 1804247191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 59
-\\x83cc617795b15d15759a1f2c724eb677d2b1a05ab3fc2de78f03e08fe4f4f0e8eee0889bdcf8a11d57aef4132628c173c2fede607039c9432b994df86601c21e \\x00800003c021b7047731847c862c23310ed9d46d5dbe7698061621d6d3920f9b77b4f3bda3df5dcc6d642a28eb4397304164030f05151b7cba7aadb09caefee1d717323ee2791775b1bbfa65124fe5d77aa749424f0411eb07ed4a13d77499be33485f7022a7fb8bf5fdd0547b8a897b421c6e58cc77d078eda1ca52d95b560fddd7f1c7010001 \\xc0a98e2bb8964840f102d2db6f18aa9d423a91baa6fc7db30a17dff5109194b696bef2f01539141ac079800f630a5db46d781d04986f42553bc4f9e214b69a0d 1641126391000000 1641731191000000 1704803191000000 1799411191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 60
-\\x834885fe39a03190703821a8cec8719eff4da29935625540fd58d1fb293d353fe45dbede4e5e9de17ba5ae3df27a94d7225f6f304e9c95910e34003036be9a74 \\x00800003987c455f1f96944ceb28a04c9d1fdc008ce13f0619c52647a963b3a093e4b7ea2cf7e6b96d9ee2ca555202421a8eb5308f5de1ba9d1b9501ab5325d8644d473fe421262ff20ee48101d60bbc4142679254c12687eb642b1c40f64da95e773b491ae60850068f1f93315f30b729ecf97b15e9d077b8d563e55efee37efb138e71010001 \\x3e8e0db774bf8e52d039340e641c2de4501ab9cc12b2d4c26661759c8336be5cdafdb0c8d352501c358e0f95a634a351cc0e1cc092279e5c041fe067fca3b20b 1633872391000000 1634477191000000 1697549191000000 1792157191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 61
-\\x8420426c00858079651d3dfefad3e617deaa26f738d5c3151d0ceb6f53b7d971aea2f1c1298cc8a888662badbbe3ca3ed46f9e2d9bbc054c7fe539ad09363393 \\x00800003b1ea927338eb465b0d74cde793d10eb24d4849dcc9be913e5ab65aed5c09dfe5f47632d0f6263395337e26f6b3c72a7a051216739daaaffc30c7d2818d51254af116745ab76892dfddc6ab09339cd11d94a89a3f232558f9198087b735535290997d65ad5bbc7f289e22a6a5cb940d0c573ce9b908fb05b941c2a66522be7f61010001 \\x2a240d92e7199da39d118bbfe21207f2433db18c66a3e1f0ab0345c59caeba100e8b696031668c50997859b4eb9b89058fc7854791e833cb1563752244c40a0e 1655029891000000 1655634691000000 1718706691000000 1813314691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 62
-\\x883ce3bbb0db91eaf3f1a07a0ca5e99f6c1d9ac4666c987020b3e064d7ca3c898de41097165672e47cb238fb7eee7191b9280f8e20ebbb0e3d904beb4c2ce983 \\x00800003b62997af6555e666578b7e1a10790448217c6085b39c0835aa953fbde13d12d098feb9decde42e3a555e076b5baf91067eebde34b3b32f9d9ef54ebc619dfc3ff223e7e119fb71066343118b381fa553797d1f03b4e39e3f649d2ad5921d3cdfb54ec4207331eec8c6bc6eaff6bdfb35fddfda6af83c31a71cd6c71a6dae584f010001 \\x17456bdf65546ccf8a8de93a6a5d166d14bf714d89b81b2da065642a59eefdb13a589f4201a4d8b994c224f2a1ec2ffe17d7c986b27ddbb1c5ab0aebb9731e0d 1647171391000000 1647776191000000 1710848191000000 1805456191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 63
-\\x8b8c70dbeb49175c215a4e57e30aa72ea33baab4312f9b87c7c44223898a7ea0cf13aef9057984f6387ebc487b8c9d04ec00b4306fe84f70590daece8af60307 \\x00800003bded35a27dc16e0d35f183ec5ac3e50c91e2bd490fcd3cc0df465c276aa71bfd64a7cb73b98366758ff07ee76dcced8e52000cadcda56d9323ac11951be9336e82da77d56899182324349c1f8d1a8c18b88e9e99bf303d08b5c919c7c63ab87cc4c296c321f109da025b0b229c9f29c8ba4a9e3fc6ad6e2f0c513d6cda2adfd9010001 \\xbe7e947ce64c527e8da0b9411c8c2265f511a244aebca5322a16c8da3e755a624374cd70030279973eaabea745393335282596c142ba7594c50c433efde15404 1642939891000000 1643544691000000 1706616691000000 1801224691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 64
-\\x8c3488f215c9e011ea535d230c73e10f8473a8c46f70b21ee4834042e33778ea2757e70decae3a867c0be3468e04072ab0ca5e42b44766c27652eaac1167a6c9 \\x00800003ba7302be891814e33aecf3f46db1406fbb861ad6c0139e1cc428ef4e7eb9e3d70343eca3c176cd5898879488a9e9df1f6dcf44d9bd307518de185c1a56858232c61b0f8db66e4c7c4c0775781dc475307273ba828824856ae5f4493e16df13cd5980e49a66e4cbd2bcfb03164f7c7a4a2f49b239d66942b939fc103eb00706eb010001 \\x4237f7addaf9c1116f4d729c0555da3718c0d974900b19792d202296f130040ed8ebf6f18007c310032071728849d697bb733b861687c9958f52f1522e395b08 1635685891000000 1636290691000000 1699362691000000 1793970691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 65
-\\x8c5c0bf806416a4d8a7fcf8ad9c4253687d6efd196fe9211042278c7302927a2060763b790f4043bb6c1107f54daaf86ede8fb02d58645bb7df8e9b14b18b372 \\x00800003f4d470f7c210a251ada4149bebfa208644685070daeb5e2ef3d94464b9a9c09206f049c98710a212280ff165d793c9889966f9ef5fcb66d2ce56e43446172bf41f84a41be2619789a66c6c507c328289c4fb7569a7d5b4dfd38d82c68ebe972d924ce130d1bef68937561b1e2415d6e4a088a0387c8660dac85603f2c6a3389f010001 \\xa7385770af6c0e10e7bcb2635a375361ae25041e7f21bd9bbb4c834d2baf8e9d23b81ca704636b239c366fe60dc55967a8afc64b1d251316cab2a4d919135008 1659865891000000 1660470691000000 1723542691000000 1818150691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 66
-\\x8db4f52ead5c6bd4534d349c142adf7faa1caeaf3a71195b1598d25e9b1997984718a0e4a735e0f1aa3614262237b6f64b7f80edfff627cdb417ecd87ea58a85 \\x00800003b6a29a71aabc305e410af3c50ad9e4e40bd4e1f0585c8afb9053bd48e7ca270bd20a36058ccce66a646e8829a04411873683f78b023f32afe7aab98bc5e322baf8f08bea055ab98b497a578bab861b0d3dfd85592b0e7eb08a141ffd5b3cf135ac57aedf5c7cbdc22edaf5c6c194461968d82d2b173142a868a6de32a599608b010001 \\x31f596c25b7bf216ff4cbaf588e108e691d3c98cbab31e13dcff44a7efd985019ef400b120c6a8437ddeb0b6b1e1d767e08ecb8a5dddf8360e2ca55a17a56407 1639312891000000 1639917691000000 1702989691000000 1797597691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 67
-\\x91bce87a7a80016adc3b1d7960b3e207377bf58a2a46d583407faa5468831a2ad5ac8f39894a8c45866aa9f9a7934c7a0b02f2536f602f6560e8ec7fb357f75a \\x00800003d8f42c23435002d4319802cbb265950924647f98a5e7e527311120486f18caa082446344b5c826b230aeb5b891935628d8647f8e4e0acc3d8ff7acfd421cc77a7d61b93fb9d388bfe2e4550ca818d9317bfdb008fd1242eeb93cf1b51e25252b10ec83f7c3be80da3fe529950c8d84127301fe261df326c00ff8f7d5e7fb48c1010001 \\xacc28cb4339093d1fe7c4cee9503908d412465ae0addf1b8cc90281a50a91d0bbbc94e62f9f957054237e8fc54139ef57345a455ead23202985f8a8cd451ad07 1639917391000000 1640522191000000 1703594191000000 1798202191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 68
-\\x91f0f8e1363de60f767735948fa11177cf14b579a9fc7a5d56b5418a487ca64be6d5652e0ecae1056e33fecfa929ba2c30522d82dc00b776b78818804713ae87 \\x00800003a9af6d4773e102ec6d992f60bf91cb2ecad3fb2fcd3a06c0b38025d2f58dab6bc30ccd170cba38d7160378629987e93bc278407626916f51c4559ddf2a8d13a6112c5a0f8d7b2d783e3ff06718abeff3ae05b5ba9375d1b0d5ed4ac0cbc922d6788c12502f4da172565a3d57592239cc3b4c60135f1b7588116d9c350e09300d010001 \\xf9fc02dc18aa343010d143a41ae9d75292fd2f93e7a9be754978d8ac3e573744e40edc2257288911edb50431455a214eca7ae80bd20799832c47c2b79bc67004 1632663391000000 1633268191000000 1696340191000000 1790948191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 69
-\\x95f021819a2b89c0023be64029ded36a81a6f4d6cc49578da650953d973d29504f282204c185f52e62e35cf8d73327cd442f987882721471cafab57dbe34ca69 \\x00800003d8e93764eb5331100285ecd6b6c46831f90dc777cb0ba9f5efdaee718b8c7b30b4791d1b7ff56371f7ad06893a2b1ed6296ed68abb144eb51b753ea01dd0c73d6036725effa7a8e56aeb5cb51803f04e536bee324483218c193aae1b4895a4240e7ad792509dc5f6d17bf54742d373dd0965748706abee7b7655834c02cc5c0f010001 \\x2ed6a78abe1704593f6d1899eefcb34166c0ec6eef95d9e8add752ae0fdb9dc839b85baccd5f3cb8212609bd785110dcb3467b14d1628827e64a9c7a96c5240b 1655029891000000 1655634691000000 1718706691000000 1813314691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 70
-\\x99dcebd41a8d4fdb9e9f0ff456a63e9cac5f5d034119bbed2eac7e24cbaa6eed09cdf470c3ea4da7173039fc6823d74dd2d133f6de3ca9fbc02adb21edecd343 \\x008000039e2437e083727f9eb9550de2bc1028e131aef94e9463bae1d62e8bd85d557cb12c2cf60856b12ae90707decd565e166d25863b3e47027ca5b47beac89415094a50157bb99323e8b114769f9c067f6717838917be783d808d1cfeac0dfae1afd9eec654f9c3ea120e5c82dab43bc6d863b52fe6ad88ec0d87362049e73015eef1010001 \\x573cc21bd4c3d02ae732ee1ad8a1948c4c3285e6c608d89838f9c3a663654d7473dc793fffff9633c61aa80911ea4d7a9d527a8da390dee773858e8061530104 1658052391000000 1658657191000000 1721729191000000 1816337191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 71
-\\x9db4b107f67dd8aa5b9027f5dc549b5e7f10fad3b32aefb985f37f2d016b9bbcb6742dbe2b606d12b2de6c5558605e362840e0d2d1f51492456fb9a72319ad03 \\x00800003b40f0e2b863d6b1838d8c88c9afde38ff9e2d72b367c49cb15ab47017ce98b1afb093d4745d137ea14403b5bd87977629d93dea635449b610f39f9e100f71409442cdacd2377fa557d9d79b646909af57e708ac06b1482ca110a7eb99ad012939cb4363e7b50920a3f28af8692188576e9703dc50f754c659f02fd51a84f2731010001 \\xce4b4f5c9d72fb464e6096c674b424fe68678ea0247b7d56a971170402fd6ac21225a6f9eae0906e528752eb350c6f5c53122a90b1a9c6741820778fc3191106 1657447891000000 1658052691000000 1721124691000000 1815732691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 72
-\\xa18cc37eb4668060f03a32ff919eac03d0aaf12366ac51e899d6272974782f75f838c0553d553e1c1cdc21d9afbc2fa5764a4697cec6babb61cd37528daaa0bc \\x00800003f22cc078215966890c2beb122e28f161aef0f39295a208084a83529f5f47ddb1e0f49b9b22efa78ff57ebe9ef281411d393bf79e34d025132998d4eeb537c6c16998f451833003d54218c4e3da88fca79af85197ef1245b473b77851be7d53a14bcd4d3a45fc24785c150be20d5b7728522e02a017450a5220a15ec1c4fb9543010001 \\x83dd5998651b6e531e6e78cc898c0826f3662d32d61a1e81282c23223106db679d07be75c09e1c58ab27a6315a0520279434f485a308635fc7913580ce03e509 1657447891000000 1658052691000000 1721124691000000 1815732691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 73
-\\xa274287481b63025e501b9cc9f620d3ea8d2f78389d3f7641fcb10cc66f6dbe98aa22aa4e818667fe08437c3e6298a71aa88d8bf282e480a27e7bbd0628657c3 \\x00800003b6b2e2020ef294226ab942c5d83748123a96f79cdd937ec54d6d9dc7c0a006ad706b623184db1facebcb23387ab636d743e58bf820772db6a6cb6605af6f20278e5a35af46e020283dbb36901acfba6a429a2fd5d7eea8f0a2c2b7a6552bd74c0dbc912cbba6c41173dcedb06fe373e980bd4f4a0688cf7d67b573581e449b5d010001 \\xa40adf747b68bbe66c02d378be5e11950e6ac0b7b4df894959fd8357a1902248f07d986d1036d85e7285a9e7ce96f8b52ce596739334a5f043ea0150588b6301 1648984891000000 1649589691000000 1712661691000000 1807269691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 74
-\\xa45010809828cc54b3ec223b48167c4efab4eddcf2ac351e67154938240285d47e28f2d7046c0c5c0f1931f0310b9c4d477ee07a84a2c47cdc08b08bd341634e \\x00800003c594e98e67f349145a9cc6992fd7efa53531745faba7b671f88870ef835a226902668b9d86b9a19009b9b320db177b81e7e101ab5284af2a21d0fb12225f6c863d29da6709847a79500152f6de70ef76313220aefef82df68afd2eec343b25e9db7db7d1dc0bde09dd5104b527df7033dfb64e0c410ee01dba9473d8b09c6413010001 \\x648bf1e2cc2bfd0637868105b038d03c981435f2559864284fdc368b09d70d4e7a1e9544ee443f237f84836afd725676074b34eeaf73212164bb3b812eefd002 1641730891000000 1642335691000000 1705407691000000 1800015691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 75
-\\xa5bcc752a3e6361f258959d85f69ed8323e25843c9a5862be76644af2f6dcfadc30ef97da3171ccc13a577a03808e384bf7cc64ad56451da62a5851347903f4c \\x00800003b41e5c87aea641dc4304ae2515812527176b9f0f81fbd19d584e06b7cbf68eb08c12fddabe3bb7c9317ed24df08cdf1738619fa44962137b7570d61a4951c4c91cd4eb3999ba9c461e15dd17472799bae0cff535ed7478b78c5cb0d9afb6aa37be97ef1a07bfeb8f1a27f538a7c7d5727ae8d0e984e876d46b09d4076da9f211010001 \\x3c5448c34bc4a94a6cf710e7d0eb823b93316bb4122541eafa49b35e4e1ad105a726749940b3098874382f6a5ec3b702851294de7fe1525733c3a9f115664c0f 1659865891000000 1660470691000000 1723542691000000 1818150691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 76
-\\xa97c39c5c9e57762c126f0d1d803b8120a84cbcf348f8f276a55e394de5b4eb027df26d2cd34ad4ce545b3367c940c96ae666ff39890cc17d63275f82f5c6458 \\x00800003af5c531549c0faeefd0d209fb357734394d4ca0db2ee8f7fca6e51e1b1fc140bf824774cefa0b8c0a3b8c2cb75b19b10896c654bef1bb3098282c90de83304d7740eacdb7d7b505f4a5691983e58a9067c094446c2b77774e112116c9c3f49c29463b7e215d70d38f6f728a8793e4939eb4c32fa9e026c778f8a98c623697cdd010001 \\x880aec6f16a1e58b5fca9ee064e74bfd15a1b0f76cb62e592058aaffc5e28f772f9f9e8092cd48a5002b791769e3b3ddd1f8b91fe4466e4e8100bcde6c8d6a07 1639312891000000 1639917691000000 1702989691000000 1797597691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 77
-\\xac5cde174915a3f1d92fdf57b3788929d05d8a729ff9c4add5b852524f3963e50cad0d9d29b4f16b44177ec776ae2066ba5de1b2d1497f162717f8c5a17b4ee7 \\x00800003cacc57e35c896dfd58929d344ba04503e1ea0458834420156a382dff6351d8d7002e8d3628bf369eea8498f0ae5f7d653cd49d66d8c7b564e0fdac4d38207b8b1ff298a2c85f1274f86cb59cb9938dcc169b9e1961ec141f74a936a968a025bfce41b81abe3d2e0ec90da357474388545560fe9f379349539f9eabd31e09c97d010001 \\x8e88a2cf88520a2b601ed7e93957843acb72ee7d73b6278d90f86c4cb8d7b52e22bd4c29f2c8c5d76caec5e61423037e60b9171f5b505cdad06f9984f682f50f 1648380391000000 1648985191000000 1712057191000000 1806665191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 78
-\\xac2850aac2130f94624101869ebd3a5fd9b6bb2f77a380b50991cc18e7ab7b3c641f65cb62dbe7392654b474b423dc16dda2b23f71cdfd0565565899899cfca5 \\x00800003c6e6c422c8c68924ed0d768cfde84317e87067e8c3b76e803c8a85f3b99f76e45edd199c8d867400ea979f907b14c23187a0914303eacd2020aefb4c74b2f201773dabbb5eeeaff5d73624ca42fbeacb464242097671f883f32843a3e5c82e0206709c08f9ceeb1cd292f3e52cf0be4a7f29d3211b7a0c67932f14b95ff7efdd010001 \\xffef58e6dd9d78662a55255bad5c8adf2dd0981d69a4cdd5e7a38437146dcdf34578e3b3e3d1db769c0c1ea2174c3825e2f97820a2f8d2b49ffe70bd7198cf0d 1652007391000000 1652612191000000 1715684191000000 1810292191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 79
-\\xaf981ec2a179b0bb6b5e21632ad4e8a7e4a491b0ce47b606bd3c779d5c2cfe6c71b7d22edf396571ab4ccd1cf9e66508ef060d38071617cf4cdd2a2a4fd524c2 \\x00800003bd3a0998cf85cd43537e1fa4decf992121614c9d70df51460592d8dc3a200e7e22cfc263656b0c9d10b0def335628d3e1231250cc5101fdfe40f2cf35ec0dc0c41e730699c7df09791960b04a72c46e7fb03bf36262992fae48ff142812f3a1265ac249f5baed2a9a5d5f3c47db5dfb16cd2abcb759d122a72a0c4b71725dcfd010001 \\x40b94b9acbed4dfbec5fe1d019d526f4ea1e07861a03d845ca88bc99de73a37c559d427062a17e77e53e0e3cfe8ba7791e235a37b12da417762edf25907cb203 1659865891000000 1660470691000000 1723542691000000 1818150691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 80
-\\xb200e448a17d17d17fdf01bf88543205f67b8bdf32342585049aba73cf6c6b1dc7c90a6213929880e7432446968e8eb0e76a16df3a25648074f3bcfa92e855e7 \\x00800003ca9331499121f0a9ef1f0255abde4f6a1bc1026954a836348fa5c4fd5ae0ef0a54e4627045f706b78d39e6f6a1c775517515d316a99ed3e8bdd629df544e07c7b36708ac7b9d513ecc80185bc7b8d4584930cfa943185aa9db5efdd701cbfaadc80ff5facca7ec4d7d4c95de5419ddceebb6a6d7ad83926defbe368a24068d6b010001 \\xb400309b092cd82ed8a5d4eb2e4bc716ab70b5046fbb39d8b31140bef482bcf2379df01ff5295286f1eee6945a6f7d91ed181e2d6ba2a7e9c96d7e38d9470d0a 1653820891000000 1654425691000000 1717497691000000 1812105691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 81
-\\xb3187af74ccf0729617c5a8be1cc54b2549ce0f960dfb40c4d32747549f63a33459b4611a0b9568b107b893496fda8502f6c7245652125287d279a5f7d886d78 \\x00800003bb59f771fe216b02c527ab05028f1688fec0fc3bc21021356d3dd7301f8580f2fc5a8017c0cfcc1cd9be18fc7699ff1caff6db74aff24c0176a71a1401b6f34aafdc7f31d64da56ff1cca4ca3da609c231db290ef8695cd0d07ea13e42faff676a991c3e130ede380fce6ea273212741b9b33a0c43b9218fc883eb976be67477010001 \\x0ef8f76402f2d7bece4d7a86dfee648fca58cff39220ba910ae4278eb8d9fe4e777ba58310b897917a436128e80373564abb8022ac0c9e00f90f683c58ff860e 1644753391000000 1645358191000000 1708430191000000 1803038191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 82
-\\xb3dc8f8f6ee7551c6f3811a576bb2242aa0d11b4a3d25ee29d5dda98efbfb5cba9046368bc84579a5fd43282030c1f4745c0c068130c35181445e7be05cdaa26 \\x00800003b993c2d176dc7df24176aea5dcd51cd7794f96253091e4ed2110fd2a53440e0d623c81e221b23266245b18cd8358bcfe7a27ef34848300d159c6dda59bccda4f224b8aaf8b5995c5561ffaa4375417688e0555677853f1d7453fb9e42cea6b1a3776074f6a514fdc230172b3dae6a8eb6b22c5a60bd32173dd7ec120d972cb89010001 \\x134dcceac015a60a9ba822aa0215f5b8d6092f40613748e4d43d79d53c026929c061fe059a422cb7bb94bf8fc7b0e3b673d11a6cf72bac839912d32ab0cb5f07 1635685891000000 1636290691000000 1699362691000000 1793970691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 83
-\\xb80093f6faf269ecf6679dae6a34a35cb4cd1a3a3f588a32d912ceb3f81d18d9d51e84c389923c391e1b9d16509bf99817c7ce4913ce3908a6693ce86c96efab \\x00800003decde92b229c241c5759f4fc1f385bee66617dfa031696dfa9fb0c656e33364ae9aedb9002291a71b8f4a237ec4f2b6c66866850b73b6da5a85276e5d321cdb6530d77e7526c38a5d5ef902f806aaeaf29a6b5719c2799a85aa96a121f22977f88798a51858eb9dce6ef843482ab4552ccb7a05d98ff023d57b58d36fdc664c5010001 \\x370d596ae4a386c84351c4675b2f15ca84f10264a8f94a2127ac3dfc8eac8865cbc2906a7ad6b96f5d96976a5ee1b497515422a3ace392a37d9cdd9e8eb8280e 1637499391000000 1638104191000000 1701176191000000 1795784191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 84
-\\xbdbc72983ad8edc50b469dc1b6d96ff42cc72807a7915db9f13244a4925bc8297ad2a8f85928e23ed21b5edcd5d1a99f437779dec682d404abdc8e132b15549f \\x00800003b6d7020dfa7a92c3cb25463f4049a443b4bd968e29b78451015cf82eb7914a69702f3ec0499c6bbe9f88214ffcabd0a6a9ec2424cd0b6ba0283032be5310da918718288d19f96af766839790312a6bd58ee9c5979afcdc1000f850ff78327d9d5e0ac5697c05f9aebd53d4993779611bf23aa21b3c2c77a666bc32cad40f4347010001 \\x1523076aa3ead36f6517e4be7281bb39fca5a45d7a54b8ee96e8afee7f94a4990653741e4d5b5d03709936dc964b65b26cf7f02c07d59b60ca578916fd79db0b 1650798391000000 1651403191000000 1714475191000000 1809083191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 85
-\\xbfa4502143d7ede0cb1ffdbd129ad5e04b9e397447d7a6eb68aacb528b119a9cdbba643630c3e4fe1e118966a0104d2de568acf32b38cf541f51d3ea47a414ec \\x00800003e90fbedcd1754070f50d2f4058f402392893886e7e2cf3bf7adde08136442e638cb6879b9615c281ff8203bf0b0c90e7ff22ac92a417298427c58c0a0e0a5c0429d55e91f9e09dcc0ea26ac11e0fd38de41bbe03e1e6cffd28567f4e9ad9c919258d0ae80ae761608ffdb583e9811b9a6b3ac967bc901ea729234a100f499033010001 \\x7ab8952825062bc73d5070ebf9c1b3afb92efe6675d39db1befc9002ba4c6ee119bf80506a8270d414b29f4fe3b91a553006dd834bcf8c3c2c4f2bebcc0ee408 1650798391000000 1651403191000000 1714475191000000 1809083191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 86
-\\xc0a86cfe3f33b6329c21a9000a18a352151284557e03d756cc2a9692a4cab452148d61430234660b83256afa47e51bb7906455959e5626eaf54ce6574de9d98e \\x00800003c00ded656ab259212d0777b302c7cc2e09e2492647b6f60a6b23748ece9f5495fe914f3aec81bc33805cea5c8b1eb700305c461368c97f3933f1cac2acc1c06f7002316d311ff43806b496c585d7c37bf0c137b0adf1fb33bdec0a73ebba65f382ae038f42d90e1370fa036c96f2a695464f48c1bab2f1a967ede714fb9874c5010001 \\xe41ae0c3d73950bc1cfbaee84b99cbda87d127dfe3db668b0ccc96952f9ede2b043d2a235e11751c30b1f6a336e843b895b8f156115f478515641e4a7849850d 1643544391000000 1644149191000000 1707221191000000 1801829191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 87
-\\xcb1c2453a741f03f172290ecce33b27d6be22b2624576eea008163688d64a70b0fc0488de917d0e44ae001d0b4de497ed5c74cd425ef37530e34af1f452aec70 \\x00800003b05f25862711b3224f07c0bc4faa922b75dbf24070dabce18810a2f79d615b84b0ef135ebd92182b19e5d259c2a96f61991633e8a085fc02b1809c0e6d3c7d6864d265ecba8b8c158a6ef0e55a7011fb7625a5fb6aa70ea6f78870c04bfa09f462b00d64153b154d17c60c5edf8148f5d2a9f6dd9a6be97660aa5843375f2aed010001 \\x06eb40134c3e2feb5299f001ea416f348515e3e831137f8151b84719bd6a5e5cb3b621924ba6c741165bb0a49edd84267fbe5e3b2a7b333392ec351e116b5800 1634476891000000 1635081691000000 1698153691000000 1792761691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 88
-\\xcee88b72c698e86ff63de5ac990f025063b6a8060b186ce1f94c5522f56bf55f30fd8e17f9cfc590fb89b7ab45f7c3f02416f670fb9dd52d8c229dff02d94cdc \\x00800003e7c5ee8db71c4c670be2be53a432e1cbe287198a05c3c3dd5a224a46cbe74bf2ab0f7aa1f54018cca3960c8ad9b93c21394c391f71c41be77759105ec74602d3a1548991ab8362dfd75e25c2a4caca50576871e8563571c26ec4e0f26cc3bddc0df0910bc90f3004e32ca2740786eedb93226ca6edacb446c3cc8fc9d128178d010001 \\x6b7342638d27313acfb1a676efc8b5aaab6e1b3f64f9ff0b88cfdd2ccb057dc0a5df219243d7ee3ead240de4f5bfe6fc497165d55ca787593c11a85e58ca0404 1631454391000000 1632059191000000 1695131191000000 1789739191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 89
-\\xd000d9a3cf2f3c81fec22748e01b12143ef983e22dadf1d18d4e89221c893f1a6bca3e7a7a407a034aab32a7cd7190fb789e8d6ce7fe2120fac15c9e4d974011 \\x00800003e0891b538b6b29ea297beee01a246088be2674cabda11c451b231e42cf84f6625a5fac06f54bd69b407f2c35d2eacc8957d181b652e65a73048d8a3210f3d18af3f6f152b37fe7b77ee7f43d16c3498b81ba94860f9514e2f56505fa1ce5870de04e30a3ca2695e10a2eb62f451853d21b969e795e253fa84a930c9652cdc105010001 \\x3d9572e39d59a90d513a3cea191c14d520f558ab5737851fe699937d70996260811b776780e5e44826e2e2c08a3a5fda1280ffb269cb2fbf08e5168f58161804 1650193891000000 1650798691000000 1713870691000000 1808478691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 90
-\\xd19c5ccb95fe0081f791594d9a3b63de1b0b2686078e3e81d9ee06c076bc0d5a592699dc2dcad1f1797644d48ca1817904e0fb5d1e533fb53ca9e1cc9b1ce12d \\x00800003b164ad858f68a601e6a137aa705bc7e923e3a3e96cda5328e34b54f5927af01b288d88a6fc95b3f9e8307725a7f26fb9e6b001d04e0e43146fe985db58e79b055354e029ca5bae10361d79f30198e6e54eb05a4e8c5f39180a2cf6e7d97282413e536b156d8a2a88462d9f25af76174a033311a433664bc2553ec884471a25b5010001 \\xd26a5ceb1891d7e84f9adf5700daeb327c574a2c86750cfb425c882df9c7f8941e678a0ce5ab9289035a70a2d725044e963d81cb21801f61124ccc68974a480f 1635081391000000 1635686191000000 1698758191000000 1793366191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 91
-\\xd4105835e658041bbe00527591eaec1e45216435adc6fa217e6c5fed436851d874f63a4d5019a4cfe2c2d960caee83010264ab5703fdeb149e93d8c706aad7a1 \\x008000039e4db32624177ce20604302dbb6d1660f1f5682fcf7936f09c004d63cb29875c6d2270ae14a2ab45e1ffd53bb1351a3e79afc5fd9d320fdbd0918aa53287cce0a37c7954c437699171e9e63384d7637cbfa3964419d12f75f037b82ffa0c3dfb0df8ac9a97cf3fec44c865c4509ce343fc1e7b1e1b772e6ef1d69261dd67adfd010001 \\x18f0cb5c957b49bfee86bec1ec8b1169a454ed2ea2a11a4e3469a5a3b871b4a44880f05d581a93116be465000dfb9abdf276076f2073fcb5fba746d58a3d6404 1646566891000000 1647171691000000 1710243691000000 1804851691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 92
-\\xd70402a254ecbc99c250ed053a735b388c38ca3f56f288f3174f2c0588ca527a4a31e2ef24fa02bb074bb0c71edca3f84b4bb8d012dc78caa6c610572d6f2bad \\x00800003a789888e6210266babe82c15df35b41012d0928a68a2a3c5d1a5163df626a4fff07045c3152ba97d72fcc52052d7efe8ff27246bc25924a87ea011b009040a2ad403612777f6b130f13d3898d05a1da817956ba5ddfb625e4b3506d560b1275c3a60d0eca9ddc92e227f79894200a26f7662ce95e516b22a13eb8f2654f04d01010001 \\x4d06b867f4579538597e05b37d021f153f51e5f1ea5975508c51e86797872b43ff802ef009d139d459f53325286c69761fd03d8fb22bb8d29c62951ac61bf804 1647775891000000 1648380691000000 1711452691000000 1806060691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 93
-\\xd848e1d564cefb254851a4a60eebbaa6e0d8f56bbc4cbe3aa380b4c181d53495118511599cb0a69015c1238dddbeaa58a2f6071d94cd462c2945f547fc5c8923 \\x00800003adbfc8964bf43cd572a1a264917cae39104129a51af1dab83ed7832981e6468089f20b5b60a3e9e74942b0642bb185c902078110d1b775b8728919c67a628a08a922c656d3689f8cf1613f7d755ddfa893edaa00aea388441a262e22b6a1b0eb08fe6f4e96187dac9a5cb196eaebe0cd47ff47619406284e45aae8826bba48e9010001 \\x1b33aa2edaaa72219a7fb41b219f83ba3fb0267f3cdbdf5ddbf3e2a77818ed119d3ba57965504db8c465194d5d13a51504845780c0520859b5e12b2c4f788f0f 1656843391000000 1657448191000000 1720520191000000 1815128191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 94
-\\xdb00b5c73c4746bb1f888de5b84db92c87181716e987612b7c531c33ae4b92eb7de21dd152a6c6984cc54c2e27f412ced7ee89c7b890a49efeb6b15ea85df110 \\x00800003e0021484a10978e872791cdc9cfe9c5bdd5cd440bbf7aa3a6c58ac4c9502638ac2af7fb46cb3ee0d31c405deb4d76dccb3c36ac5c87ddc02bb9e5c32e11195921d1a41575cb4f1f99cbfb29ef7bdef5fb107e3621cce3b22f37d5a7173da32c1e25939347d0679146a72de2b83d61837d6f05a6fc8943a98175e404d9fe6076f010001 \\x67146fa5969e05c071643edb8ecdbfd3f65318c07ea35c108745f304be3ea35afa0349a35f02b83dd526b8d244a8ba2e90b52bc3cfec9572774cce42d86bfb09 1633267891000000 1633872691000000 1696944691000000 1791552691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 95
-\\xdf7c3fa7cb7d5a28ba3d8c9622a8ead20a6df9be16bbc0bdc9fe13cd6473ba8842b741ced2cb6b51d10d118667a84953a07cdda72f69db987a1c45da5c5dfacd \\x00800003dfb381761d3cead417307d32754eca31f9bcb4fbe2660ee5728a0277cbcf51f30922d07964fef6f68867d25689a9e723d47ba44516806c639de61ddd6ed602df2458499181bf809357018ed8db6ccbbd05d2c4a0c770ab8518cb8e947065a21d2cd993bd07edcd8c0396113120687421ea9ab320aa5c53b823d29689a8222d8f010001 \\x3cd213e14f3f44f469eb8c680d7522abe623380c6c41e5c1f08c77d362e35607e0457501ea65c186ab5e8f91d389db1952bb53fb7b080d42476878608cf83103 1630849891000000 1631454691000000 1694526691000000 1789134691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 96
-\\xe1502e70f1307094359e874fdb5124952782c550701f4ce5bf6399541b24996bfcc887e3f9b79d2e55790d1c9b0485c2439a4a3e832aba675c6c64d222e5fcda \\x00800003aea697088f6dc7c5b8272f02fca8d99e8b5cd3120d91fc730a7b625c87474bd0c2c3095244f038e6c104a6d3a9499ac2bfb9f6b3c41a0568c367b7f41c01ef6e3676ebea91b43d864edbd1c413f2454ba1ef1951aadcad3f62245c19a8a36b2dcacfbc48a3533ac9c8dd5552f99fa3ce94fad67885abe180c725df5b115db0b5010001 \\xc69343096ef949ae2c4713b46d6354baea0d4afdf5327c9cfaf20f7b06e47226755b7ad664ed2cdfe8549346e2ac687152be05a56ab168ec0751f2e856a2c40f 1635685891000000 1636290691000000 1699362691000000 1793970691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 97
-\\xe4083e8ffe2be924e63f0b6b6423f04c35ccae38c61aa7c41122370b958dcf45f446c322a53067de695e577b4a271a26ca685c22cd3214e7a2c88862671711c0 \\x00800003aede6727c70b981b13a24841c353b8ebdfd1483c5364e46973fc605384ed19c3a4d08b422a9c8418dee1ea0bb2269a9d943987a0268e8f5e4c0bec809c53203b8536bb29c8b640af07148270d1dfc5291444c06305338f23cd8bab9c28ffe109a2ef6fe51e9eded407c6ced2fe4358e807ac61cb569b1f5cc13d69680f746b15010001 \\xd023f98ac88eb49071e97ddc04d091a090cceb6aecdab8b7e89adbc126ca23dad0dfbbc4164cef23b5405d70f32bff43e577450d99de16139632bf3925494104 1661074891000000 1661679691000000 1724751691000000 1819359691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 98
-\\xe66ceb7a83fe6189cb9afb0a02c5bed1929a8f031f81abc152063771b34c6994282c2dae65f0ba65059391fd404a12ef36f71fe9223ce72fd3a8400ab8cb8a0b \\x00800003d2286266cd8995fa02ea60b30a94ec72c45bab46ef19815cfcfd3eadc4e9d5a54c1ceb5d88488799a835c5b48055cdab368218c0a5143b7e29e34f3f1591f825ba9482f62e3e4cce5d5811e45da0155c2cdaeb673d5280fd7244012ef0f491a2e44a98cac96dd557b041a3c1fcc19bda0597634bbfd9403243b44319ebf7be75010001 \\x5199fe999429572b9b54629dae7c671aff8ec5924426f6f84b1004fa629df4f627f9eb24f3eaa97a97fb334520bf8999286c496793bd9e5f9868275733b87b06 1631454391000000 1632059191000000 1695131191000000 1789739191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 99
-\\xe8f48eaae2c6b0fc17a1c0e54b2cefa0dcb77bba320181adc183402136c0d2fc17d5688feb4bd958f8fc7ff39b051eb6e93decfe1cba52f5c731c6a968742d21 \\x00800003b7f1d8a6c6c3e94e2912f588927ba0e6a6217c0b4ce6b0902feba6e0dd56670fe4a9cb10d582788982690bec955a130c8b67fa138a8bf722b4fc1800093fd27c9d0c4e7fd2fb388c62dfdb5c88248bef1e1da4f4409638105cd927b807fd782ea5ecca37f60db9ce6762d4f25f2a6f90f32b0f0121a2b92c5e752229e3f06f2f010001 \\xf9cb42ebddc688cdaacaab81a2660b84439e5204fa12a0f9b9451c4131075d969899d8358b40523ca11ec9726d9c79b830361d527d1ff73b7976d37a2f320f0a 1637499391000000 1638104191000000 1701176191000000 1795784191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 100
-\\xe8f4bed1c61a2a8a3e0a3a229d12c8d4377e68606a7c2e09281053e20f44e7fd37a18c92e35d2cdc41068cd30463bd95e30cb60fef304bbc370479acc71c76fe \\x00800003cdc8af04ee243a6a83e58b6ae0ef1d2195c83259b79d2226a992009360e9fae3333bcd52aec9fa6a52bbf698a886979c3df56629296e3fd5da8535650c2c3523fa2f86a313f59a7a2ca25c272bbafc955e5cd0fdae0eb6092b7f434deb3197e4bdb5654e4881468cdf243e03e827e49a81593b3da00315fdb517349d31b025fb010001 \\x5c24e70f307e38e85ffe6e5ff36c41ca5fbe453cacea059f4783e78b80f5dd1eafce103b2242128c8f7a445b3ae919f49503a772ba1134e720314a7e7c5f490b 1639917391000000 1640522191000000 1703594191000000 1798202191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 101
-\\xe930b81e59d4d50973cc395411e6abe1d025deb4a5884babdc7504c4aa0aedbfe473cfd91b9576f16031a48ef1d77daacacbe5845a1403cdf041cba2956cfd21 \\x00800003daf3e56044f8267b9def5a5b87d2eb4db1ffd0793d9dba89427cfa65dcbe6136b0cec14bc214b292ab0abd9bc6f0b8e517c30ca42502583bc36bba4a90d8a048911cec0ad25791109f3dce0d58f2b86d226a41d5acf4e889608cf454d27e231370057197432b5e4b4b91aaad325c7db861d1d1dc895f2113877ea5ae2bdc93c1010001 \\x46b23c8b401f6f2d4062ba9f2d11835f8f8f0a497bdf6492cb12cacbbbef3913e320c0d61c7368b9f8fad18bfe3ed51b7d714ef9c4847e2ce722282bc59d880d 1647775891000000 1648380691000000 1711452691000000 1806060691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 102
-\\xe9bc7b7ecb3839cf2e3962514050facc1600a6cd158cce822e3fd2bc54e05e7e47bdae45695bd216267fddb5de37fbb15a2cdef0b03226c0c9ccd09c67f825b0 \\x00800003d14e6fc02c83ce7dbf70294c8421e588033c772bbde06d21d5f259047146f09a2b7b43a7679c28eb1268552f3927f09e15bfd9f282482ae5fa24ffb5d9417de84a45e548b69d69b325e43cba3436f168969f38045a36707886e99a057548169a8b49cc37ed61ebf22f0023f9a67ed1d127ac88441c8f30008ed7f6ad3a7c7b8d010001 \\xde1de03b4c198b1df2d4b841f4a8b792be4438f9a03df3e5e2ac1b37df327a746d7a2f862e18fb5c195426d1fe0865327fddb93e93a0036f53f6d84add04730f 1659261391000000 1659866191000000 1722938191000000 1817546191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 103
-\\xed94cfdcf174c70f87060ee480a4170c0cf3bf5f15599420f5f3db5b8654255d81118305979d52066d20c1d37c50576c89a035a308390d4613dfe54cf9f32cfc \\x00800003acec249624bd60cd8ef8256107dce494a2c4659fcab57a9467420a232f69875dbf46a4d5989005454ee4df27445655b716fc5baa3fa75ae0504e564e65ef83a6c85a40dcd8bcb1dc7551f542cd2545b1989a11072ae511a5033de0df9375994c90dd41c74602aa46717aa8813245168468e622b511678131c0d3d5027f31ffdb010001 \\x0efd50f52bec7f154860d52fead987f87a047d8f0a7ec4b7535896823afa53b5c7790c2254afb16fa3ff6874adcec254eeec7aa7f66381b35fd91e7ef17c1206 1654425391000000 1655030191000000 1718102191000000 1812710191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 104
-\\xf4c08b9cab2f331f7c82ee40b9ad2e506e2357b8843010ab8e8908b5663531e635d7b7a2b2f836c3e9c960c39496d126cbc87e754691bfc02ac41483b2939065 \\x00800003cbfeed7621a4e1bb6b7896f9a39fb0f156b3553956832879a41b41f92cf1233378d66bc9445b75bd71bcf8341d34391093cb4c3b0d031091a2aa1f86057bb8a721a9d728f5cd15c27da7945b1f764c5aa3fc5c3b2dded1a87c038270143ef17407eb55e4392c2a1e9bd14cdaa9c7700b1168df32400074d020b5abcf52ee1787010001 \\xfe120e07522926b1402ad2298b64fae5f863fbf3239e2b0afcd88e77520a14798138a705f7176a87dd777b5b6e2fcfeb1d586617c86c902fb83f86e8056f6f0a 1638708391000000 1639313191000000 1702385191000000 1796993191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 105
-\\xf6ec3f0af421311d4bc2441186b06009763ca25cfe23b37cbd4e0f49334e305543058609a7f6c86cdc7d9dd53a71aec81ea18a1f49fe06b9c480736917d02d9a \\x00800003c5334aed00fd7b3adfea56aeaf937ca12f9ce0108aacdbb9e988c9d0a94a281f1830285cf81504ab2a6479bd0e536c00157b16bee4a81633ac7c01894b88b7a91e01e6f1ac3bf1d52551c0e40dad22cc53f7ef0ff8bd85a8a6f5aa37668e477b9697e15bb076f0e46f20a03bf84904860ec6ab2d763f57b6f0b4c06d94232bf5010001 \\xf03b28dc54bac5fe4f7aae3f165e8fb8173bf1fe475e86ff703df9c157f683fe3c263ece600b08cc3e9287eb26444c9e62ff63030881efa119289d11e5ae910c 1661074891000000 1661679691000000 1724751691000000 1819359691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 106
-\\xf6785fdcd5ecdab35ceef500a8d0447fe8e63a2add33dccbd628c2c69f46863bb258579d361f67fa5d234506b40f43709767cdc8276db08a053887f1e7e822d3 \\x00800003e799b1d19826b3044c303dfcee18194026b966505af020f2fee89b1d9a706d8f59ec074ed6e2f8b6083793828ecafc3b2c678fa414f3de87a8703419e983275791d4a6e595214e3abe8556e2578290d88bea9b6af83b9c874a43c5036a0b28d9edf2acd782468e5546b85a924e1d5459a742d0125190b16d838b1c4a94c7b843010001 \\x18d35912245ce2015c64bc2e89a076c0b4a1f7bd72790946af9b5d2826745b6d21451d9931e47437a9b04174d92f259c5bef22cd968f4fe9748f0d8fc441a503 1648984891000000 1649589691000000 1712661691000000 1807269691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 107
-\\xf9dcab18ad34721ad091c4b485a9ab49adb4a8eb55ba469c3e63f67c331595a97f6c9f43796400c573367822ec7908706635ca1b2b041fd197e651790f5b337d \\x00800003b857230de7401526d7e817063586811bfc2008390297f4922508a566e0d6cce502c80d5d297d37528b5219b03e882df583f225f8d71c0cb47272513c0e039fda618d0b3d4df0870d3c8f33a94dac1e0f7e08752dc196fd7d8e3749c4f0ece947a5ba0ed96d3ae4f3ccc981c7aeacf3713bc0fc03e6bafef793921bbd9e3f4f3f010001 \\xbadc4edc70ed109f5fbe364fbbdd5bcf29d5b71016c83a3c195490d4914c677c4fc98a49eeaf7cc215bb133cefa2c8f06969aedaf71c4193db34bc747593fe07 1657447891000000 1658052691000000 1721124691000000 1815732691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 108
-\\xfa9c9154191d4ea880c92f8bf8564874a0f5530b0f9a76a24e1900e27e24a7413f0519f41f950e9f6cfdb12edecf5d0b9c4ae6e201724b5e9bd6e8ec99de2fea \\x00800003bb2f0edf65e2d99870545116efc335120f0b7859d43dd8994e7952a1986e196859f1de03b1734f2d1bdafb588f4742f2a0386a5a0b0b9443730cb759fd62735b8b9d6401250d8c2ed0a98a7c16d50a254d2e7df1bfb9641e9b662d89b02bd8bdda46b28436969da6baa3588c3ec886fbd53b4f64c05c8c0ac99877406e351887010001 \\x0d5f3d9fbe880a7fcd5f14cb6589d9bf69c2eea29af709a77dda61c0fe3cab859ba5eafa8a0c1d63cc024585db2513360a0b21a0adc9c81dfbe24cf2d1eb2808 1641730891000000 1642335691000000 1705407691000000 1800015691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 109
-\\xfd04b9f2b7f46249f3294f85bccfd06b7991ef652171e1351eba471c4ef0776cf9918b05a74cbab77ddb03d143433d29f407be5fc18405d0fa1377b419fd0c82 \\x00800003dcc163ef6e3f8d20091b4dab9414d6bbd55c2ecaaa35ff2e08576d48ee5a6fd080e14f5f40242dfea34dbd2cd84f7e2dbe126252ff4ace7054c69938c48e58f5b7a7ec2d34b66fde0d5e6cb679bc3804f28b4bccb4c4057fb283ac91a9da503ae29dafdaca59478a5174cf0a34249f298c04d46d1519a9283b35fe6b87025b1b010001 \\x0ed14338a65209e28d7bdd9835a04a08ea545b3996b507de2f4659d587b921030adec1718dcdfd0443cbd9a5d5ce8380a2cb4abd76bd91ba4bb6666ec05e4a02 1642335391000000 1642940191000000 1706012191000000 1800620191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 110
-\\xfe94861ea95ce10e868705a941f283aa0d07a34e6a2f32480e612404d0c9213a2c17f682b5dc9d7fc75cff48d4edb159a44d2d870dd8840386fdddad5eeff244 \\x00800003b554612198451cc230719f93222c3d087da1e151834567c0729bcf08332904effa6fc6765f3ebf5dfbeac37ce62e5023031bdc6b58c2dcee93b50b6188b090796a648da67f29363c2c9043fe2d34b06a193591a0ac4c188df73e0b73708912b71874f4d5562353fa88c919599c65350788237791a1bb611976b1b640b3c81e81010001 \\x4302c796800022d94085140fdb62561f1d35821d782613a16ea0540f4d68bb3ba0b5e672afba500ec1402361b9b060876f39af2272b634874b1c61b6c189bb0b 1656843391000000 1657448191000000 1720520191000000 1815128191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 111
-\\xffac8ba162f1a8212ce78e5df2d188d98f1d99e489b2afa2bb7e912305506b307f6f3ac13d88d33f3a142a988a31545f46f1c815dbeee211102da32354bea92b \\x00800003c59433f6f0933ab968b4b71e5c807c85513bae3aa1c1222c6b43dee29fc82f04a2486127d32c5bd66edb7ba52ef9cea340cfcb531050b27b3b3f4acd781cffae880212659d308ed28b120fbbfb28cbe3276189964623c7c7e992dc2c41c6d2f815a84c7fe88d798be3023c8b082dd876b77bbc3ed809530e356f81e747af9529010001 \\x18cfc8f67d46c33ed4d9e6f919c2542b4989a2b73fc0a56a124def5c556bb48a9059ddfb79ca228cc233f532d09f4b0cefd9f802ed4de8079d84126f8283a107 1647171391000000 1647776191000000 1710848191000000 1805456191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 112
-\\x00a587e15f71aba8e06fcc0d84c01c469a7ebdce0d7f914664379cf9bb5c7ac0ffc094c631b76d2848b4485fd87be47b6d73d3e0f6a224e1e8c17d5415748f81 \\x00800003abc0c28dae88965bd3b8b0add30e5557462a343d09b5fa46381d03e3bfd6ffda43467bc442ef9984f5081e426d14f1a8b1cb8cfdc795acfeef841288d72cccd57917697300eba53667250f0ad7fa637a9dfea5e2c0434b445a2018785a73452d391c6d3362cec2cb2f0910293159a1b20287c6ef8e21df2c071daec8fdd4abdd010001 \\xe32847a98965d3746dc3ef495b5bb8fe76a05c5012063bc6be13dd2a786cdadf91592e9f92045645fea8c0f9eaefd684ec59e12005313e89e008fb289098450b 1642939891000000 1643544691000000 1706616691000000 1801224691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 113
-\\x0459c9d90701c594a8734b691669b0922ee6eca76936aaa22a4bbf4e6aef5b990252e52d86da2a12c4529eb9a9cd9fd4f521c0e92ce3f69f85a4a1111cc955df \\x00800003ce7d58cd91ad682779a4fc362d961c323aa84f886e3448f0694257f6ffbbfd1add4f33fd5d7257c8bcb64df6b56393fd35e81266a903b1ec9e51a44fceb57d8fda20885fbe90ca748513c62a6566cf12bb0c826b45d3043cbffaed6135b09c4f51c8a7b012960999f1fe5337043642204e44e994ef0aefd6fa4f7df5ed362235010001 \\x760495721e1f5d4e3fa9b471a4e8d605b824f4ba4e188601056c7213e732a79d849a5e78a4dee3c45fa5749413ce7d02c275d0c374a6e14ef5da962b14217106 1660470391000000 1661075191000000 1724147191000000 1818755191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 114
-\\x05c9f8b8b187883ff2e0262014d9b04ba6ba399703d2bcfcf52083875fb8f0662d9b8486a56db8f25dfc782707eb5291dfb19d51f688a9939c533da783ab4acd \\x00800003e58454de15f8ea4e42b4fc670529aeffdab518dcd8c1d58411989b06aaac22099c75b2d3d0678bdc61ee25b069442250fda07d2ea567e2b28de1ccbdf5e434467d0f5012a6363bb8d0430f93d91f27e3bf04caac44238fb562976f261b7e3f40478b445e045bdef9a975ce27c56c3bce23ab159f4dac469d0f3724ce4d4848c1010001 \\x73694478e84796eddff52e5dc0d49f5cca77d95fb12e5e98b140bc5148d03446a9e34528d527c9f88adc87bd383010467d8b5c83f468f4e6e7628bfc9769020a 1657447891000000 1658052691000000 1721124691000000 1815732691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 115
-\\x093dfdb75e241d5bc76aaffff78afc73a12b131802c46e90b15a4978f9f8a1aa645e4db6f821767f184cdb2ae28c7afb18adc45254a82d0af3eb7e7421d56db7 \\x0080000392871e3b9402b1df4037a559043091611e2020d60b5033ba4fd5946b05b88e4ca2741d4c6d1f4accacb0536da7ed5d24c908f23a1394888424b28bebe5db5c05634745bb734f9ac0b389123b58891d1d18bedf201936b6fea07ac4eb6b3099b8657f8cab0fc24cdc3d1f2c7c2000e16c89030c9df5fe2ddf37859fdfb726e8af010001 \\xae85a5ffd2beeae7f712acd54f4ef937ddf08118d9d0d043e82b19c419fcfb0ef6220e54e426f89d4c8c85c27cae2aebd86eefc64b5652e5ea6e1e403216f303 1660470391000000 1661075191000000 1724147191000000 1818755191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 116
-\\x0a555bf726ad37629b9147416ac12537a5ab16283048eeab0dd3fcbb76e74423f35e34559084dfb4178dc8bfc6fa19ab14da110a27a1976bb25ebee14fd3f52c \\x00800003b601292240b59fa131b6c6041096e5086ffbc4a27e656fb04cfc67ed8d0869090c106e01dc5623f4a635103492bb11c6d900be425a240b4e99986f8d67003cc72fa5b54c75e55c5c77f3ddb9a60c5d1b5ba0cfbf47bd649c26cd5f4a902e6ffc2807976cbbe1b6a5ed9acb3b3aaec02513cd93eee33739cba8195f9530812651010001 \\x483ec25c40fcb5c19d1f663324266207ae3b07cbbf8d3c284b41b10b711a9a2488033315431ca6c69cdbdfcb439b96ee08581342a926f699f7c60bcc5b80aa03 1646566891000000 1647171691000000 1710243691000000 1804851691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 117
-\\x0b8190e06b81c3538cd9c6e4f76e4c935d5678171b9d9d2a5d0270e262c2d1c68679323ca0e9bb3c187216e0bf4329d03a3c8e1ff48469d885fd4f082dfd78da \\x00800003c0c8bcbceeea13847ec3190755f7dcff2042b633ebdda6a0078c6f77617872f613adc6c0f78f95fe177c1844c649689986cb6427802912905111d3bafc1b8c4ede1ae6c5fb0dd30ddbf5bbbb9f75637e2e8fa967ea97a0f16e23f355398fc4b3ac23eec407bd668974fcd96fd0b9be4a4376399cbd3a84ee9d014eef09ece14f010001 \\x422d778847f8fc3ed4abb678f54df8102e3b388f5253c183c38b41968c22eb40e202a520373c502fdf7c773eb14c533dbab8bbcc47a0c5e5d7c8308e82ab7f03 1655029891000000 1655634691000000 1718706691000000 1813314691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 118
-\\x0ce53d7618e3ae3d27857411b1fff13256c097bb95842b882610ab97e1e98998dc3a21066f3bd67dcc48ce94d26488617d9daa9d750a485a6f0a150eb30b1453 \\x00800003d1c548722c946b0ee97e50e81623d89a11ca2ff3ec3c494946e3a6e129173c25f0d88ee2976ec856aa500610e9bddc4ea2a5f22c2834b376e3fee4a6b60ea0e6c38494b75655e599519fe84e5406ef9c047fd81563c868e5a763e456286416127e77b981da8b7203f63a6f4e1e600eee239f5983e33d24dfbed80ebfebdeaab7010001 \\x31374f885add0b398f02c5e158ea3905ae8f240586fb2fd11fd2ecd68ff851b57f52e8d8d37300b45f8d1c4bb10e10113389a69021687bc683022c6548e69c00 1644753391000000 1645358191000000 1708430191000000 1803038191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 119
-\\x0e4949d986eb8953a43979f3c216191f603f41b9c7d5a4b0049bca3d2815bbb1b1b43292bd8add8a4f4bcf4e6a43038a034414c7ea97364ff16449f86c656a72 \\x00800003c00ccaeffb8ce2c3a7b936356dd3d80fa89c9741c89f2539563b188c7f80adeb1b568c438c783bc694d0babf36bcf51b6e5b008b02b0c5af5fe81c71381f76800053f1d820f0ab7cdd66962992b4ce20a091e9a46d46d5a7c57adaed8ad88c16decc644a71a89ab663ae431a904880b5f55a8c5f53e1b77c6285da242189a24b010001 \\x2a5261303ecffa7617d02d27f898f4349074d1b08c2a97043666d9e7e484e71675f0bb57fd69af1a807feea07d4c2a167caaa9d7d071b18de551faafe5dc5704 1653820891000000 1654425691000000 1717497691000000 1812105691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 120
-\\x0fb989d6ac83b9a2a1e5307b43fdb433306e5687f15fd677f2346a2582e97a249c643799b6d4a0d6b61f899150ac40621df9c2f5fb53b8a99ef5fc6c7be65032 \\x00800003bdbaaf032570cdb31862843014b0f14d36f200f2d33310ed039addb89120fdbd7ac261d747c02c990597c611a27504df52b724d8c0f5933a4e1923835586391eee63da06c57f8a31d84abd34703348e2a1f5b79e0242641c78067918877e3358b2c7434b00e6d2b9eef049682309823a3eb550bf3dc47d0dc66d9e195fe5b6ad010001 \\x1349a2124e5162b81418a76346eea9790d026ba4ac5783bbfff3705f36d35d55bce609a813bf259a5b23799a472ee265165a4218369e195a904270fd32447006 1645962391000000 1646567191000000 1709639191000000 1804247191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 121
-\\x11a17371ae67c7a9863899f7ecbab76ca1fe4041d3e36bf9ee5fa4e5115ea77903074b285aa58044b12b30257927667eb21a1327b11d5ddb52e3cb174ce9b81e \\x00800003b3a7b09f0773758ec0c7c2f5867afe92769d37a52081b85b10f6f212ee40d27c31c907d99d44a6ae4f64607e254f581d1d6be414be0182d922c55301eaf39fe5424c35fc0a949accf2839fc86035fff99f493b9d4ab5e4274726cb44aacb1bc41dd190b7789f57cd1e1d0dc66657683f222b97afe8afeee9b1c5841acb6e1233010001 \\xb3058d89164923bc309347ee3bb7a05907ae21e8cce263ca765c81adfb782bf7d8cc7dc6b369343aa4f4f827de061592d566027c58bb6426969e0d0feb7b870b 1647775891000000 1648380691000000 1711452691000000 1806060691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 122
-\\x14fd3eafc2537e24e7dbb700919ed73a3469a3351f982ad8a80f556baf283b1a11d224013503dec3a46d3c4a4ca8384dee27936a08e92f111241bc6862a3027a \\x00800003e6037e10e8dd1732b5448ecbc1de7c70ab6d7b3f1f0af876e3ffa9987d25ded72d7d9a9dc710bcfa9ce09c6ce791923038dd69360645b7d5e52ba137453310d172553cb235f377857db2effa72ced3d8d5e2ceff5d999cfbe87528b7798d136a4ce7e3f7dc4d1d23e474ebc673d06238e6fdd0c7239d38b9e588ab569c320777010001 \\xabddc5d849c8b2b7bccae72383a6f3be8c7952213046aaa261c946575bb1b73b95c638dcac13514b2a2c9e773d619d53b1e5aed199114820e2bd13d84c525002 1647775891000000 1648380691000000 1711452691000000 1806060691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 123
-\\x159d309125a81ea25254e8f69bb0773579a1f5e90c5b2528e96fd3f9b0fdf9b8fe263f72562d09448b6f614bef3badb7eecb54a33a2c63f2442bf5124b56e786 \\x00800003c38b806b4b6e1330206f0fdb15db7733fe814bc26391511048b9a8f9619e62c66b0ba6b16b6bfcd15f5b01dbf450e9ff904d0b3cb7d53b89d1bd78600f473405015444792fde41a721999bc6f8e5ab468ffd73d2b22c5ec98dd2daf5128816ba3d5035a7516985700b96125a1d0f1dda24c9ea8c85b19b382bba7e9d638e1223010001 \\xba61660593b4daf73860deb2e15d4d390e1f2ef0560293155ca97c5c372e329b4e15754f37430524f9b732d8d5ba4e8ae1f84ac3da1b9e782134a7f8ac5c9101 1656238891000000 1656843691000000 1719915691000000 1814523691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 124
-\\x15f9030ccdf728b3211688089d30c56841bb110bd92b1e5bd814c8176c9f5cb6f05c15deafc277c0a8a78b47bb29642fcaf2a59fa873eaf0bc3bc6b7a3ba7d63 \\x00800003bc3aef83f693f8a7a68100250bf108442bc4008ced747a21a8e65dc2bb218b6d24cd2772c90610248b5b86a591e504b6a9b4c5408e0798b2bf33ded8554498ac0f18d70737812536881e6701d1d6cc7d85d4384f32e5f51d207e6553164e0934a57d747d2697cb36612f009abee7f9d8f100ed2534dfe707fdd091c46487340d010001 \\xcafa837fb0758cc1630d5fcbe9f2efaadb54ea760f23d11d3ba4bf30ba01de32d21bfba4fb97668b1162e477f461941dfc81f44f3cfc652bfdda6bd39a420309 1638708391000000 1639313191000000 1702385191000000 1796993191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 125
-\\x17058d9640b38bc3f4f6407bb0367f74272a1132aa6c4437e2ad56949c33ac3d1dd74079b67635afcec77bd9dc4d8790f678b1dd00cef09a463d28d919d5465b \\x00800003efbc96029837df0217a1e448cee3f7b845c09aef053970932671ca9393d94407a080753eba0a25467b1016bba5e9d912874f67858d162236d319942a2a72cfe4911ec6bd74eb37b3ab66fede52d08e8737c514bbc1b159e77bb7748d77d091f8a485f5b5beec128b4db286b5060e6a33e574d6ca9d3b74afea3a571eb2aee591010001 \\x3e37455c59c19900ce5b6f5fd796157090b9d38494a536e34fbbb01aa80cd93df2fce36314f7f07724c5a7184954e8b5e4c2c55219a5c878a6a0d93bb5413c03 1659261391000000 1659866191000000 1722938191000000 1817546191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 126
-\\x1b3df176a3b44071a0d0a9b53408650a04dfd197818e8452068421134882c0e7c75dec9fdd72df860a431b72d01fbf3596410e646e5054b01d9b96cf204d50d4 \\x00800003cdf712145784d042175a33d77a4b5c8689eb659ecef79fdc9d380cab94178d7e23880dc2730633f74bcbc696afbaf8d869a612e08e74f3f1e608368c68de3fd6c162b79ab65a4e9bbff65e2bdb0232e32317734954cbe445e6685d8e428a2e6806a1fa4a7138772d7d07a70f6f8c4190a4855585956dfca10962faa4c5b6a941010001 \\xd929097f4d677a45b49dd4e6d5f6df07e8b8f936ce2b85cdf61af8de87d77bef56b7c2845308ec3fd2d401a8cec9612ad810866b0fac8611b3fa9c760c8aff0a 1639917391000000 1640522191000000 1703594191000000 1798202191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 127
-\\x1c1953d84120d310200c1d1d52f4a7579b60b8f589eb3e605a7240a9054fbd2aa3716a70e6e213d9de57bd605e4f5cd1f68ea37eb3269e935459d05e8816ffae \\x00800003deb072fd81acf4f7d595c4e0629059ef9ad268644d24a1a620e4bafee7b891f9e0d0b67477ed614ba02cc50b078ab94dff6ec3efcbe33e3f3596e77b192d44adc1cc21293d805b066f75ff6047e9edc9efb0abf1c1cd901f6abcb52d5b440d4f81e53d176ba99aa0518c1844c8d268fd20e5a27cd0edb557c835c5e29523eb67010001 \\xf3df0b554f6ef7e62a64189d272dc046d9930d209559900d7d28f1c64aae70be9e4d6145b4fc975403b4e3578117cd41dbfa84f04e8e3915416f41c3544cd404 1642939891000000 1643544691000000 1706616691000000 1801224691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 128
-\\x1f394a06b9e1377d7c222d5e9a4721858e7e5282c7c59311c2fe2ff2f0a974cb72bb2f7497acd1e9b8e2e0034d467624b21e28f253b03de9bbf8ff0bdd70894b \\x00800003cb2b0c675a96b914c19c1d6d9f044dcd3225988445d04f4c5c9049ab2f2a5d65fe86f6052fc6f8e29f975f67f9982dea8d883c9431aada0b6c0402d8964f7249f16a09ad5be6675043350b2a95719d508e68e707c00c6058e5a3936a110586c3bdc08cda1fd74696762050b759892553ae65f2c083eb20f5bc27357199de3877010001 \\xff41843347826907d545951c8969ae2a38cca49c37afe3271df720b376f69a7eadffa03d6bbbbe93cb258c4659a19742e9fab8f31c444eafc8657cbba84ce802 1630849891000000 1631454691000000 1694526691000000 1789134691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 129
-\\x268d6861f0a39144edeb9a71cb671c540ec107a89cd22c777ff16680d4c00c0c79d33133d5a181d2ecd6b33b3c7987c5dbd735e4340eadc12a67116df110c3d5 \\x00800003eb8ebc72dd22f20f7235eb749b28c12e73d151ea3b6aa36177c09b57fc8dbd0d5a64bff4e5ad14d0ea86b6f584d778a23ed8cc29d77fafaf3a5decf2a53fd564a2dc106790496fe23839a8e5ef236e8089a2a5d5007e3884c9f0d87be616f1aa5b6766eb95da094fef22c48e4b2c3a4d2ec0311c1c49453cc63a2cbc0a08c965010001 \\x1f8df4990ff843370e81f5d45c39a4dd076791fc9f7b161f81c647c50ae78ccfcd96123d5a0f5eed4f75b301e0252cd239e4f0fc89a71d649a4027769e2fcd01 1630849891000000 1631454691000000 1694526691000000 1789134691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 130
-\\x27a14945d022c108d171bae53feb0a8e9a2b7d0b51b5951dc9a596f0d91afe5049a715b48bc68b96b130d517af8b43910f14508c2b7d87c939649856b94cd4f3 \\x00800003ed7fc5ae81741e36d98f466c8b954bf2d9ac7252a1759014715349056269001b1e57187a06c91d9c247ba1d9afa82ee37ebe01140d950f131fbf2411c5d1396b442f4768f2684f3558f8099eda1aa3fafcb669541478e957b9013819f8c8bc022d164d892fee732aed8559467b00c481346814be46d545a6895458a278659af3010001 \\xd5068505a6d042b3778d6d4f1d50b71dad9702be95495df9d656f674eb89f2021afcbd9767eca8ec7ee5770e62171f83c7c03db84bd07c44fed3a332dc3fce0a 1660470391000000 1661075191000000 1724147191000000 1818755191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 131
-\\x27b14ae7a13a520083a2edcb24a98335ffd928e2aa6c380a1ad13599be0475e8f45910640b329f0329ac5cfcd8cdcbeaeeaca86a60a88bac1ce78699d85ec70c \\x00800003d45ca7aa88c3da9f4f33bc5c36e6d24d52bbd6abdebd8f6ca5a2249d433c1d7cecd7df381746d35265b3f7dc3c3f590ca4e64ea2f6e7e8e66a649365fa5d79be9a541d8b550021e268f64c33ee06de62b3c29282e3e3c9d7c7cbd674b21b6a89b599b12eedb8168f71b0c35c745a2de5d89f26d71203be39f9fc7287c8beecc9010001 \\x336a2e0c6d174244f442d8aadcfa255ab9f95f3b6fa4fa8a5517912489ac07a345850b6cb143690b5a1dfdc7c61836d4d2fc66c24c635527140d9629ad638b02 1661679391000000 1662284191000000 1725356191000000 1819964191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 132
-\\x29bd26928f6794f629e0627175c6d0d9ed80309a9f259e91f4b05595f8154985522b8b6ee889aaf5b7ca1d0ea1550105c6df693c8c306b784301a01b0430dc6a \\x00800003c529f89436a2a9467e0fb98b0b38adfc720610b4b5473e4b19f7c12b12d43006a39a00ba16837b4e5520fa95fd654e552fef86d40fb52195348737247e9a568e280b57b4d4ea9c572dfa9eda5395a9a7b31f1a7b24745a9d92cd38bdef3d971f309ecaa42bf7cf00ecb0a48b84d60448ee9a4750d81c80063ddd7ad6a69cb981010001 \\x69d686b9f41cd8bc33318af133d8e2288ddbb445f51a6d52df331bb855382db2ce944e11c378f1c1a16de3450098bf1f77742f3a11a583484e0798f61d808204 1659261391000000 1659866191000000 1722938191000000 1817546191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 133
-\\x2901c0715c516147a06c85cb52e7807ea9f7d292d5cb2fdc39a2783f658505c5c2e06077e592b83e8e141c476c9a798a326f21a97b63c2f153a5e695f281c348 \\x00800003da49243e939cd4eabe144f32c8375201f35fbf843d45e89a2e0d316371da8c005bc1f41d624d9cba9503113aba4787e8b77bd49a52f841dcc4b923a2e2bfc6d7a53a03d47ceb6174aa22f8f59fc20b587cd72755e736f58b7c609a7dd50f746f70247f59af167adc3ae1598db5a4cbfe97627cdc5fdc3d484aa5b23c8090dfcf010001 \\x20567e7ce629f588ca4abd784f8696fdb8f884edfe791f9a4afa6dc804ffc9500cf85c7234a591d6575e913cda145847404eaac7c209d30baea40853ac4e1007 1653216391000000 1653821191000000 1716893191000000 1811501191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 134
-\\x296da48e033cf5a72bc0d393f75e1ce7e8ac8e070e6af1aac7ff1ff18807762cd26752b411ed3a0e6d9d19d04f7b7a2369ccc01c5f52096863031a3481a44c1b \\x00800003c4af0878519249a0d58b5433f1b865d0cddd5469bf0d9711f357bb0bc7e4df618d2a8293fe17a6331001ad9e1b66fba694016107f63c9d7f8be9dca4e68879c29e6b5a81d27f4037f85bd0261f6e767ed426d4f03219b33785eeee4b7114b391a27011bbc23e7dd734a155f2712fab96b704a8f550de5257af683e876fa2a0f1010001 \\x86caebcbbc03056f33303f718e62c814a6b223b7fc21c5149d73f3f707f69e1169a101fc849f341d820946b7e1369c92239006c5b53caf2c7948cb096770d202 1634476891000000 1635081691000000 1698153691000000 1792761691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 135
-\\x2cc157edd05217c158883a60bcc2723ea22f13c88c087940baa234d4e9c74e766b16ed12f074e50ca3e5a769f7071ebe6529ebf6877b5564933b5ee4b5368e6c \\x00800003d9aed16d00e0534611fa3c7b5992e2c10903636164da64306e1edf30ee2bc894f48ac225656fe466b32a298183af2bc6c0d1d574dd8d8772f012cbc680a8ac0f7d09679ae5127be497c321b9e902f32eba5a82bda0afb00a5521faa1110dc4a3140a6d332854fb06d23c276ea29d701f63eeda4ccd32d816d7ddaaf4f03cf15b010001 \\xfcdd7957965ae067d201e79fdb629a94e1536956772271f622ba2c0ab88202bacae163d68ac98eb8db61c98995ef6f16e7b1ad5c8ff5c9d3cf78f35bda384e00 1636290391000000 1636895191000000 1699967191000000 1794575191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 136
-\\x2d41deb86da0a08a5482fbbc1de0552a75074527a1c9f8ffc7ceeb5cfbbda8c4d91fc8073a21e1e8cadb32315cdcf0ad422fb7b36ccf5fff0259d5b8f5756af5 \\x00800003a4a23346efb380b4693dce3b5ca6406453ea4446ded2153409055c17d37c8bf3f7e31a88aa5d9a2ac4bed0bc4d5bffd628985e481823f6c5e76cfa49b1f63f669bf39a786a733862aabe035c6198e834e966a74ec8abfbdcd915963ff1d74b95c6642173d4c10af278820e06f304d9cf9832f59a274812a2af082d151e9189e7010001 \\xeb6195a92b2612e6f450dda576d576a75910646f64f5390f4550daa882c77ca77681445688191dacf7f9c1ceaa6e0ae796c723c5f57b2dac6abac89293f8c20d 1643544391000000 1644149191000000 1707221191000000 1801829191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 137
-\\x2ea96200450d22c8c9b2bf6593ed1e63a314a044f8e492234ae05f22d3f99a19fbaf4d92dc8a618e9b1af318031bc7a6adf45c1833dbbdb9c693b201cd53184c \\x00800003be571212633507cdb3e5fb30756189179eee6a0ed7e9f8e3672839efbed568ee9dd394bb9b00c1ea91c5fb3aa9756dbc58290804d30da92860947d626e1eb2c798ad0366a1ce2a63fc9193877a85ff246409f46faab7988bbfc0e5539599fb9fe7529bea1a5821a966734c86bd665826634ceb7276e144232097baf29c2ddcad010001 \\x37daac7bb25f064adba6fa31d33b1e53227ef14b4e08fc0c817de2eeaae1701e6cace8c1bad63d692e59fbc93d797b1fba30c58496ab59bd5e59d380508a660f 1661074891000000 1661679691000000 1724751691000000 1819359691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 138
-\\x30116cd1836d99f498cc4ebafa06439c0fc562ed472cf4bd81297fc947e1d7623da142f6e2cc3be620b7aa6655e1bc61db0fe311067992d437befe6b4a4be909 \\x00800003c7c47fc52537120f28d17ab07169f72a6ad68c8801ee908733fb24af2817380e4e5a1f62c41f9c97790d9928ac4ad6406cccf1e2ae9cd645f88a33d0a7c5b6421e5ace13721647b57b3995d94fd5b861e6a35d339a883cd4fed9548c7729a27875461d409e816c20b5d608e3284b2f8de1ccef8f8208bb7241081f34ff680843010001 \\x25ac3f5743ef0be5ca4c0de22266c425d0b21f08018f540f05367f60d84139ccc9a081e1ebbe5febe06134e994f319ca427a5f8fea1ddad374bb6a891d431609 1648380391000000 1648985191000000 1712057191000000 1806665191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 139
-\\x3741d9b6d06a308c3891c7f93869136fe5dd6a5fc3d7009808387b6ccb98d9f8337d9b959248d05e96f78603f5395e19bd8db654cfbdfb16b5097042f37db082 \\x00800003ec18273d755810fc4600ca3e43770f435773dbe641274fae53640e3d7460fda0200920921398155c0ee82c87a34f3547c70f29e249125ea2edd42e73f7ec7cdb788c1f8d09434a533c060f25d7c0e21fdf4c74aa144f0eca786343d9e22e37a0ac697927ecad314105f843abe60ccec4773fcfdb96130327923eb5402d69b089010001 \\x20c44c035e7cb274a254bb59c0efb1e993e1a6cef927708699b662cec6f04f0a7f3d29246d26f9e492353be5e0f23eb2ffb0d4d49899a9370de9773bead4b70b 1631454391000000 1632059191000000 1695131191000000 1789739191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 140
-\\x3fdd95a242115e9d62e9920095e2a968f2405f038409e988c1768c419dd18542f53d893a35993bf60d0b185d16ef8b888493ca0d9b95747d6ae30b3d1e7d7297 \\x00800003baceee05afdfc50a35931e20f85406575c21ba1ad5373d1c5bb5ea2e099133d4dcecc4b6c71662565086e03553e66dd96d464c06eec82f44a13b82a46a916d349f340c84d5a1915c5befa3c9562c29fe5fd2509921e166284a2006557c3cd45accc38afe62bec5dfc8d65ba80e32fb388a767b390bc379b4d4ba4f436263ec19010001 \\x66dbb1d5d90cf98a7c545bccc39cb05d1b3fc8647848618506cc6af36020a0d51ab40b6048601263d6e6bb2091b90c180a011671417a70ea379aa11633945f0b 1633872391000000 1634477191000000 1697549191000000 1792157191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 141
-\\x3f6dcb6b6493fc4b3b34ae3dcf7910efdc1b9f943cb4b696100a68e47584735662232d04894b3c1ea10f30d36f31c2d4238d78d6e43c546ea320b2f34ec4bf1a \\x00800003e159c33e85c6d809f49d840382bbd7a3b901d21413922827ad3c9a7a70fc27f578960d4f8ffda74358b736a0b6ec51d71588eb0be7567bffdb79fa63425abe5104aa62fa5c87cf4c88549fb948af4aa06f307132d7dcb385f555399c3514732cd1feb42361a493bf393b69311f796a526af554a115f6bf2fc027dba156c28b2d010001 \\xf64a51c5b63de51971bf3ed3c5fdbd0e866cdc1c46ee917475faa7197a96200e8c3a27e85f85c6fd4091accd9c9dee86b99eec65c4e73f14ef3e5507d864ce0e 1656843391000000 1657448191000000 1720520191000000 1815128191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 142
-\\x40f9257fde7ecce422fe5898ffca9fa3e77c8dffeed833f9dbdb55ab78b107be29f16c3ed74cecceb9b0201774f55c84398da394e6d98df1717edbaf125db66d \\x00800003b08223e38c39116f82d2b4ae80a411f714e3acaebb8a136993180688e2472d4d3b97d50a2e449aaeae3b1fed7d385cd79e89bb64b6951b26b1d38e723e963ebee2ec17374f928a121073f3ddb059c7e77c1c1facf34b9be43b18592e4626a2594b689c1a6d145b0bde560b12c64fb5534ea724b50cfa50d26865d0ddc6dec1b1010001 \\x91f5cf60000514487d4f871576d1d3f450ff12072afad76f526fe867ad57843568d5d74eba8502246f9344f675ba5548e03c0dbd48534c3a147926adcae1b80a 1646566891000000 1647171691000000 1710243691000000 1804851691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 143
-\\x432561e71e82b7b557c941a6436603144c6ab633f4d84dc85a7d8b94ce52f1599371d2b7bd301e83845d43ec851058dccb1ab08913bda3883e5f399b80ac4b1a \\x00800003c31fd7f7780096742e4fc5c20955af58ef643555f29017969b790415976ae74e29378915fd58e2bf0edc901b42c524fd2b0d20122ebdbcb1c2265c912cc4f97100a66bee7a983f6aa6145838e1f6a4e314c246a8da895e449a8be3d11d6030d670ddcc6d3b825c6c0728427b672dc30b0a0d59504a3f29958ced8c4f9ee17bf3010001 \\xd7ca868b4b2ba9df8ead293519b80408fb9562cc564fe4a40b9e215dcd48d5b60c35fc083b55e2a44015cc02070f40d078b2e82abe6cc5a4be0177f70f998405 1645357891000000 1645962691000000 1709034691000000 1803642691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 144
-\\x43f92244e6a169b215548fcf183e1c90f1d2ae26a7f701cb449276aaaa4ad27b139c0f4655dc978795b54136724e6da5de56c61d6afbbaaca7f80c1d1efca204 \\x00800003c2a6384b6c7054337c48abc7dcae18ee0ae1bf6dc25dcd4991de32f2286034bafc28c0b297a592d1bfb284d84a145971420e13bc7d07286ad4d2c0732da92464aa15fd5ceda9c7099e900412186fcfad5c248a2061b8e46ddd13479b6c826b819422227639deba705b290baa9db0c1bbad34cd505e37d52e51796feb802acbe7010001 \\xf15aa32cff74a777362d7bfab710127ab4956496b427135a1f56c9894f74df85ff7e7a547f345aec316b4568581724200c8b7cb08cf57c85a8ca2781e3ea9c06 1632663391000000 1633268191000000 1696340191000000 1790948191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 145
-\\x441d68bb7d269526c2c6ba976fd6c440a54f4592a5c3686faa0158d947fac901bec7b5bfbe06c2e6a26d8cb8c792b2690ab884789e6e107479907996ed584d8e \\x00800003bac12a7b1d7adbd21bd90e63af420e6f94efd5729301e26a677f12bd2c634a42369b7437516d88e5d183a09f5a77d7ea48bf3ac58b0bbc8a989b76d27b6a4d61af4936c59c957ff6cf9684bddca30c6840db85376c40ce029d168b9bbfbcc8dae82ba0f3be78c4d080bc95696007494598bb6f976938e3f6a7e5ba336f34651d010001 \\x88da868131776a348625ac1c729623677b9c3aed8e9ea0f4a85e41e858dde41df0d8d798aeebbc877d06aac85be972f56fb8df9938acee520058aed6ae653a07 1652007391000000 1652612191000000 1715684191000000 1810292191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 146
-\\x4759dcdb8c62a36f9cbf816f27a61ac74eb0debb8faf79947d8aea20715053a895a93e1c0309589f40064a303de1847e41572df78da45bfd42bbd81b9e9f67ae \\x00800003accf66747c8e4f32aaecc111ef36a2345ef0c4b05f134433dfe6fbe6d2ef85537a9de1719443b4010fbac7e797395f1d844075aba8f07e282950e5754265f4a1e3863c5d7a0e523e2fe7233e8a49f527f8f274db6cbfe06b120cfe64704d5d5382d074af28c15ed34402c06b2f5bc9a107a61185750b907f96bba7e43aec0de9010001 \\xc6c1014a28f2ee54cbd8b2feb66d2cec55cb057fc4a3bac5c0ca5d5010149def5bbdfcc86c4ee99da3242d739f908370174457f10884cc6ce8631e31815df60c 1640521891000000 1641126691000000 1704198691000000 1798806691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 147
-\\x49292c6d565d04ef097d4fe3deaff4cdcd81cbd55419affe0d84b0d8f04d124f4172518d928526015fad4bedf5623103b08e4585f92bddac4dbdefd13f92a366 \\x00800003bfa2a8642669758553e02b2ea33a77ddd9951204e449be3440bade5fd3763f295ad537c634b59d8425147f002704cc583e3eb40d0ef0807e64a74934a2fed52f3d487937ae9fe636de35ca6cb03cdb74caabbf837420227d1bf046e1396d51ff3fc89076a2d5fbc3a912643e0e88f2143dc547b9a7d8993827fd6b1c6c2fc357010001 \\x56add9c94510332d0995bd7438b8453aae5b4b0f1f8fdb001451e44c962d61ff02d08a0b10e6a8038d781a8456d98316c6527e44df2e9b7f3c34b522b0658c07 1655634391000000 1656239191000000 1719311191000000 1813919191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 148
-\\x4e95cdf9ad76f90f3b77b3932b7a16175f2d1989591e454c356155d4273e65e0f1f0dd2fa2459f47d3f85f91d2750acd0a20ebb12d4aee04e408692554c04a5d \\x00800003af7c87b21e4e958175da67b713034994dae9099123d99bf732193b728e35f200208e72b459aff738ef1b5ee60332530db9fd90bf4759f4d45c9f1a1e21dcb1b4795fb752ab80bbf4651ac17da724e4eeba1562d89be0b44e4b2e0b860655b6d04e835b68fd14550727686fb761e63b1b2e711b019ad710d5a532e99494ac0159010001 \\xb077206da12991433cf6c984bd81e9634b0aaf787873d1de3a3ed7ea3fe323e3bb8827ac44bdf0343c79d1a92ca282e588241e78d14797656ec7624cd2d2a90f 1641126391000000 1641731191000000 1704803191000000 1799411191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 149
-\\x4fa174de1e4276e048a326446240a745a2354e5c6c6a03a4bdb51849d7a81e465d97435578eb816005b4f9636f8c9bcb0d4c4d48f0131f80a5bb2e89b9b6e784 \\x00800003b9deb4b1a28d6d4e43f0576336208f5a68cd4710f0100996f83ca7ac9482503db3683bdbbc00587b0d3fe402c70130ffcce80f8ee667b4d4d475d0272f24faa45f5c4dfd9b9e0fb8863d8854e5d2ed2c348175139397970c199f187a2d204cd78ac7148722ab3076eb2f8459a9af4e75dc3dd2eb5e7964147ff9d13f08343d27010001 \\xc63c5161d26d55573b91a3a6e55eeee4ae721493f6be8e78e31aa0bbd3fcb43ff51335dfaaa01241c78e2567b34884026b27f87dbc03434e3835e38e1457d900 1662283891000000 1662888691000000 1725960691000000 1820568691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 150
-\\x4f4d89fd484fbac82ba87b5c90acb06cbad12ca56392c223299b9775aee445a6a6e39c7f73243c5e427b2e60ecb424551429570ae74a2644db996d7755506b7c \\x008000039aa940ca723a28c00f57806edf3b0becff4ef087b734f765afd5695f300759ae9de9bb6acd331ae4b23abffb220945e2b1658d4ab096a6b9320ec5162f146113b34e4ffb6d6ed0b217bc8608e202a77156a518e47d5f7951fa1718988be4fc463f8b8c5e4dfaaf2902fdbd22c51ed2e68c82db85092d567f239cec618a3e2179010001 \\xb1329a5c77f3dab9014a290ea591b937050225021160eb483d5591adb8182816715924f092b4f3ca6b41962000843d8c27b201762046040e2754d02dde644201 1641126391000000 1641731191000000 1704803191000000 1799411191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 151
-\\x50a1120f5d626240e101df79aeb1e090b7ba33b7c8f4d66919118a19914a6c24aea04faf0be9676406ac6483973a35e769d24f235651f9ff9269a335f9f74bea \\x00800003a2a234efe7364d285e5e4639e5cf43c90a5e30c30603bbfaa81b0287583b6725c1e7d912eae0ee0f631ebb67fb24714f0fbbd2750afb9ef67fa53cd91b663ad07142cdc0ce04fe3e825b95d1f1ea088d97fa45054f866aba50d56d140c463487cedd44f5009c02c0923708b6959b7091c41f9cb0a7d4474710f3f71a6586cbf5010001 \\xdb78105844000240949f35eeabc46d4e39e95aeeccec2ead1e76682c28fb58f6825875935155efe323f74f9bab1685541be27dbe754126abe9790e9742a6ad0a 1644753391000000 1645358191000000 1708430191000000 1803038191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 152
-\\x50459d6b1e30e0809a0447922cec0ebdb585ef391ee433da10675bf92c18aa586445424f1a570ee4ac3b46117576b25b8b87725ed946d5cf9c030df529fa6cf5 \\x00800003a8f8a72a5445e059f3899cefee4d74139b1b48fb0c5f3802f86916bf81dabe81faaa0a79583568f431e40202bd32052f200f0597fdbed92c146bfaa59ed87531d6b0a8ef887be44f209714cf8f6c6f6225b35b1d724d57ef6738b9b09ce00438dc44bdf2978278843913fbf7734653c7cbe6f289df7868fa16c8ecc00c6aaf47010001 \\x824bba5b3ab91d508aef33b7055f39f91d5bdaabf822e13727886c6af0ccd94fb2ee32d7542268e79a669c6b446b2fcda6415bd24afe6807860d694dc371a706 1658656891000000 1659261691000000 1722333691000000 1816941691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 153
-\\x544d14880ee432cdf7ac847da3095b13f07ecb43a492f2a0aedd3f9122cae84469c6399e291e8d5f29a1b9aa1b6ed9d26bf7670a9b2c260ab7c1a1136917fbeb \\x00800003a7696fd27aaa7c01f1d3d7858644ff408d1e57cec59f514187327b6b569a33d69a4e5a6d05e99411af916c32d26610accecbd7fa55a497a2e6c4da2461bb7c59af07e6b7f7c8e7787ea58b73ce5970ed0c544c0f60acc211d865f9971c59cc67964043f38a23dfb2dcc58cbe0a9acc826740add1b7bec3521f25e1e058dbe78b010001 \\xcf1ff322ce514750dde4c89f01c0d0e05af9b66f7650b516b5322d8419802b7b1be2fc56c4eac1ab03ca363b5fb350d2321dfdac577fd9f41d12e4aaaaf9be0e 1652007391000000 1652612191000000 1715684191000000 1810292191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 154
-\\x55f14942f931a9195bf47beebd11fb6455ada33b6782170b43eefdacee58b093ae0bdb02e317cede3df2689fc673cf08bc91b2731b1ec9b26f169064a7faf46d \\x00800003d6747ee4d0329ac6f2ee767e820dd8a8b540a19da043b2a64109efa06a3c8bc9f62553cb28e45bf17e53b33a48a9a35ffd564a2d3f8d6f226aa845da7460df70f57b42e471c4bfdcd16f2d5e03aa2e6fcaa35e8c818c99825619237b5dc7dd7b0ca06ac3318884e136575ea5c0b6b4f69cfde1b7204ec19c72bd6bcffd6311a7010001 \\x3d9b132ec9ac8fd235cf182b5d50b7bd55e4366fa22d5e7701827addabb5b75591bbe8d7c93ba83a19d39eedcb0caca42342f1df8411881a8eab21420575fd0b 1650193891000000 1650798691000000 1713870691000000 1808478691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 155
-\\x558dc2d35725ad8936d35661aa26cb135e4e22c2179e174245dcbaf29a8ac8fa7ac425fe7fc93b9cd4c8048f469975e077f139167d81540da7e673d171e15cbd \\x00800003c70d64d922a3b4b8932af82b79b4294080dc3408a3346344d3ddb26b6e8db167fa6f5dcc27bc3c1364d1a35473ad1c0bab49ba5a59914d73577483da5e948b7a733b8d83f8d8217990871d394abba91f20ab878a3d4e4abbda9a6cdd506bead828b8719e8aa7d4c14a0d645640241823d5178a50759d15ee2b01ff91e0bf0023010001 \\x9d965b1d326317253b48a26cdf53701a41c814b312c95148756405cb6b515cf1d350e79489c4657a84a539b6d8ec932a301ec31ba46238d76d13e21ba2f9900c 1637499391000000 1638104191000000 1701176191000000 1795784191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 156
-\\x5a5525b1e527f604228d692b954ddab4f3f2c43b7cdb9f06775517ebd28a1c86dd6cfca1fbd4d582abc65550926c1ad1184b8384d44c0fc2d5693900b88ab4f3 \\x00800003b286ffbd55e0715da94607bee12f89b8fdf42d2fd5b6acc7476be3628c69398b5b140ccb5abdd43882777bdd58c4dfa10911b0d320a6da5e07ba9a93f5b3a2cd884e147587304bc4b54a0aba02ccd7e701469e6dc4f54e5018bf7767b674b3060c26c30a5424fa4cbd0ad0a104f40eae17e3f8acc1b83d1c4174c3db1c224d55010001 \\xb585f31e31eee2e0c12291a72486625c7f5fabfb74ed9421653f60db55f2247560a151ba751ee8ade75e23eba9c63e22b79927767e64ac8f8ab1df1f7ffb0a05 1637499391000000 1638104191000000 1701176191000000 1795784191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 157
-\\x5cf9fa21ef7adccf9b6e3ec9a852975725fb0ad1fa7fb7abc8255a4291cbfbcc1317a89f6074c4ed9cc64176a0e8d97ddf81a40808454f33f8c8f6fc8972928d \\x00800003d942ad31a6842fbc6a5231686a7f0521e7bf666b00486714243da99742b4330defb1e74f945426705c295206eaf40a33924d368c504b806efe3686a2470742f63f2822c3d5e9146c95decb11ae9b43ad7ffe2e966e1dc81bc64eb5a756cb2f9d0d75404b34176171e999672288036b0d158bc9ca9857906a5b6c07d9b0bb470f010001 \\x50d4c7225ffd8819aed6347b6cbe7c5b5fbefd4bb5885a49847386275d53b8e7413edd3a06d82b26dfed75c3768e551591105d0a8eb1c1284d66b54ebee75c0c 1653216391000000 1653821191000000 1716893191000000 1811501191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 158
-\\x5c39e82f73dde544e05e365d2630957c60b110ffb0210335fc7943b64c0c658bf5c9ab773b389c53a648ce4b07f495dbce0cdd8e34dc652e496036c2d68e3690 \\x00800003c282a015b2a4af8a87f3773144d2141361771dc0f47e2d5949c50422d774a563cc5a3437be7ed3362dac274302f22fc0c9a96e2766721b97a27fc1921aa437436996d33cb818defef85acf0d76bf9eb80d6d208af34251eb62ec3c7f6a7e905cd4735fcbb11179408458a85c5ecd0b31c6231a35545e681e560ad44680bc13f1010001 \\xe913c6cdb5f3aef9ab6b9ee1b1ce98a0aff77eb543879a6e8a2f2f81ff52dc98d0d7da7b53eefb56a0344130cb001a7b0aa17b99964a81b5907aea89bbe4c80e 1645357891000000 1645962691000000 1709034691000000 1803642691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 159
-\\x5fc16d0be22e1185bfbd3a287d49d7138f6253da9db01ec85c900bee5f93dee0359e0cabe0920a31fc8d1d916e986b05bd3619c9c193d08c70a7053ea04c20f7 \\x00800003d1daae694dbf2883b35e1ae78852a4ab4b06de697b7f55b4d0437f0a7464e4828c06f37c6aa6a9a5c3dca4958f838a172a8db0cf1faa8ca30005298f8d4111d4761112cdb997508d4c96bfccb4dce2cc64c6ae9d923d25d0af18bd3be66acd2278fdfc23ea2f472bf04eb431ded751ea230b0075b56b558661c59bc47a193215010001 \\xb7988684acec32478bd3dff6110944e2eb05060564b0b88d9a8ad8f7f2a2029982e0a14305a86bcfd6d33562707f97ecff1c59cbc23701e47f7c602cf7941600 1639917391000000 1640522191000000 1703594191000000 1798202191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 160
-\\x5f25ab4e0f8e5e9686732a55e290c00fc42d4c180d5e656c709d70f8b6db67118cc5a41c3c1fe2814ad0ec36f89d633652435a045c2fd40ff91b308b977a9f5c \\x00800003abae8fa3ee407442a461d1e8a719790e3da0e186797877aee7f551a13a4b167e987d060672b076122495501d837d3e56470a66e072608888c8aa298d060d122e735bd98b6df07763018600356c08772612ff6ea939c26ae65ad44638bc19b2c3ebb12f277f34f08f1bde0122a3e41b2676eeb6d838c89c93762d4632c2507307010001 \\xfe48a18a576a38a33ee30f590aeb679685eb4a13655f5274c21c3c8d8c823def7e04d3bede615bba8c4a9bfa9a20ae341550302f5f2cabc679d5954ad2c05002 1644148891000000 1644753691000000 1707825691000000 1802433691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 161
-\\x62697cbe06a27a8f54434c9335caf7ab14da985979cd7d038da24f4051d7852aca1f625afe8a9d5b021e19ddeb868f50ebd4b3e0f27c5614eb78d82ab45af1a5 \\x00800003a780e17a558cc96458379df2dd311b0ea4c075357000a0fcdc26342b5e2b5502c59207a4fa1b6defb3d36461cf771b7dd8724a44b076ae535030a2dc22f4e79b2d777333c5535d8968dfc12b9a60df5a211d3205d38beb9659513fd1b280797a6a3becb0f627d20391ba17a774735727122f892949093c0d897f27a503f0eaaf010001 \\x2d5a43d5eb99dc8e975886eb5e66f8b2f3cfdfd45c3501497580ffac354f1b8ac8b4a180311ef98f5695a92e4275adcf865eedd212a160b00892485448cf6d01 1643544391000000 1644149191000000 1707221191000000 1801829191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 162
-\\x682dce0218f8b44faac12402b0d44b5e4fdfbf9e06d870c16a96079baad93c5485b978d064e4a314de817e40b375129e6afba04ec1a20386091086fdedc13d2b \\x00800003a9857e3ed368edf00a330623c167fbd78c2c5a9c123836b0605a674cf01288a4d65ff2d3d66bedea39c06f27e8088048c3fd797a49d6077bf3bcc80e1fd555a9019e507ef02b43f08b62a04f10dfaf69717c3223cce19214de371b5386c628b6e476ca33a6bc984b2e16d2894c19bdf3f0be850e5d0ce432cfb9c246d532e0b5010001 \\x4ddbd55f1deccbad893cff3762b09d77f75ea46da9b06e38427435ef1e70d4cf9c03ecce40b8ed5bc1bba65b40364583805fc3965cef2b33984680ccd8dd5308 1653820891000000 1654425691000000 1717497691000000 1812105691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 163
-\\x69ad05e8b5a81a812f87474bd42054916b9ac8afa8542f3dd34452587e80e6d7ff77e0751ac936d38ed3f87f875882a08f937ceb84df253aa7e594cd1ba19b29 \\x00800003ead02bf4709cad7678ab074c708ac8840ab03f04f8b9308e5024a23e0ce487bfe301702b3a9b12287e7fb310b8159928c8493f168a2dc0c51d0399d662904fc107f7444d878d36a07ac5b83a0a31cbb6c70602ce1d345425a4560b5ed2d1237c4a5ef0c4c1370219e53f861542379b76c9e0b036c84400c439f2cd363136cf0d010001 \\xfd35c4cfa0c0f2868abeb97502a63abff7e423e37f076ca857d9912817c3555bc9aa5393ac981e251d79117dcdcd60e40384748654f8a88bf124a6c23563740f 1653820891000000 1654425691000000 1717497691000000 1812105691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 164
-\\x6b518dc2204b9ed4a9df5b981b57728a42af0ce47c170640398d47c65b66d8bf6bd4d2ef966f915323aa24a56bfceeda87cfe535fe98b6217d21cf74f6208527 \\x00800003b391c21595989ef5cfc711988b18ab1387af0f8ef9c95ffae703bd6c0de70ddeed0432f919b739a6f84e697d4fc1edf5567ba2988794ff7ae80a5ebad1a25f704a6778a2701032d2ed34b819e523150fc11b01f152826213aeba8116b29dddb834228ccff8571754b8d8f3c8e8244d3e8e594efa890895048cd3fc0293c1584d010001 \\xa1d4b0d3eb7380aeed927ca02b2be215d009807791f85a4430950cd4b5f587e9a4fc68f2660be0474d19770784211c792dba772d8e194491a21b5c6ce9603e06 1632058891000000 1632663691000000 1695735691000000 1790343691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 165
-\\x6c91b3f41e56d5a3754cf22a00b2e74f9d36256e6c50d30a871e907c5e169c4636d857bd327ce5330e232218df45bd83647fa940d3b77c8400b1ceeb7c9ed277 \\x00800003d60a631853294bbc0638ab255d118ee1bf44120f2504768691f37d1fb37e7a1a1064dc52ca10c68a754e0164eca9946f055205d77bf8e687801b1ed3657fc39b9b482fc87b239ca48469a388fec06a7c73392b9b6ca888e3d8f42a73549956820cb0fc7caaa88664fadc70d51c24043ab162454718b70044b4c012b69ea8d8b1010001 \\x713255a2ee53c29a170aa6a5da12175c1bc5f92597dc1ec91e1e4463f9cf1e3d6c58200ac3c04d7f3b38e678ff4c78d2e113e5bcd401afbee3a9ec2a3482e208 1653216391000000 1653821191000000 1716893191000000 1811501191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 166
-\\x78a5597629607ee1d74bb3b41459b96dd9bed3e49dd828d555196deb36031e93d5830afb3ad70466e2d0a7b9062829d72ecc3c5643377ea73d012a9f3b157a02 \\x00800003d533cc573850a966a0c9884de2ad89548fc1a33c00ad57c4a178f51ef7b4791759c5a5b86d757172434d99eaad8d06845e3bfae530f097e2dc8a1a40e6a8073998b3b0815f99405d3a15deea8167ba5f6f034db5356bd5d29b9f5c74e2fbf6e96e6f74f59d48b7dc2953b30f1074a5b4e63ec11e88c9b7f0f7eb5e6db6995375010001 \\xbd5d30635d6a8f351b74688b9c7567b37346ee6cc8d618f9bc8a24425c12b9072bd0d2616da01461d0b6cc77392dee77d168f7cd17bae1a477a00bfbfe7b2700 1645962391000000 1646567191000000 1709639191000000 1804247191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 167
-\\x781137cd0d15b9d279da9de9bfca7d6b62227b4a581e43260c561cfd426860f9ea6bb082c2931ea163c07a6161a6cbf1fe4eda84b9b5651f491733c3ea743dc3 \\x00800003a2326b03d5b053604cc4083528dc673bd832bbad1951569fdaae83ff98193322fe4356820f8ca349f3ae36af2567b74918f97993e8d10febd50be467aa8bd8fbdfa924a16c6ba4eb379881899db83e5f686c0cc3630f3e0484e439a3c26bc11234074641e1a0b866f41247929b5da977646b0f465a150dcb767aa378f351fe43010001 \\xa68a1ae1947eaaf2424a3a1f57e4bd73408e83ae31db5e9b209e3cb727621c20e67978df9a40a78e84f57819a667e7048b2ba227a51ec9dfc6c308b51da41908 1648984891000000 1649589691000000 1712661691000000 1807269691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 168
-\\x790967b90e07b513b4baab6cd9266fdc4b86645f568728bc6f246c98870059a4b9af8eed2ce58f9d790c31deb814855b490022901d5106545a78621934f93344 \\x008000039843e9399bc2e7aa0431e080c67a5abae32ee96947d6de7a08f4b305952e0bc560daeb843ebb8cb662ae59b7ae8f23be546d62c0f7029a0ac00e1c2a9f439a2e94d941e60272ec7b7dcd27bf67cae63f7dafbff7bb12f7d1e1f921cf0a067ee1706875d23c2a6e0e8313b245e051f219fdf2e27af286bd37f7fefacfbc96635d010001 \\xbd418e01d589b4c2e90ce37f305cb764e12251d32d5a4cab20950d22272cd5f08dd9a864df6a542179ecfa111f334ba17e5305f57ecfc87c2c994b3b8749bd06 1641126391000000 1641731191000000 1704803191000000 1799411191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 169
-\\x7a714403009e4720dec0362ee92677e2a4defd19c065d4cf62e7f062e09e236bb042d2c8e23dcbc030e008d26a78a3de2cdab4c9ea8ee624455c70f161ed05d9 \\x00800003b8730d2a49388d5707a41e289bd70b8f82beb0c42d7294c9d9b8a8fde728e41ba28290e9389a5cac382a0967c34164fc3108aab635a91b93a13d08cd5ae2d71190d7dd75f526f97826a2e8facd0cea8a3add9c80fb43deaa7c1f92874c357c284185d6c81e87e27b9f946d63bcc6e26fdb50eefbd4ad471aae4902d884b77261010001 \\xf11dd88576fdc397a33e54581fe20f93384a35f1d1c2fd4e4ba09811cf88b5dc11f58649b83dfe15f6714b093c7ca659e9a2b6b7fc5012ad48ed25835fc51e07 1638708391000000 1639313191000000 1702385191000000 1796993191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 170
-\\x7c11e9faf235ee07d98b5091d26cb4ad126e622bdb8d451d3aa45ebc63f7e5f16d9f176828ea951b4b15b3d2111e2547352ff65b27df402468575c7ec694c23d \\x00800003ba9aaa7c119535db73992c58ca3f0b4b9378c54cea803d892e34ab02eb9a82446a65f5ff6c9d9b77c2015e47451fca664143a9cf229572a25c5679788001397b091915210783dde880f2c3fdf48f398140c1646f40b6d7b61b80d48e557a0d04ffd01600538829e79798a57d3438bb1b993ccfe66c37a5811e7062b28b21a919010001 \\x08157db3ed300c421c571f8e51fdc3e163cff2e1ad508a6bb641c019305c8f18fe99a105c8bb96129f5e19812186f858949cf3d8d831238089dcfc9cfe2a9902 1657447891000000 1658052691000000 1721124691000000 1815732691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 171
-\\x7fbd75de42e1d2c1a239200d9173d4e5830aa50df615ce24b11da11b0edf0b4d3e1405aca13e440c9b6fa71c49110e8f3e3ee96fda15fe53676fb7e36f89cc0f \\x00800003c04cc5613dd9b895c3aa1e2983e8ffffbb00a4d0715f7670950cf356e0f4cab5ffa173f0d2f4ae2e28df0cd5c255806a9f61eb67e1b9f783eee0b975449ca601cdefa9f304c15f579f58b8593dee59076bf6e80720684206cf5ab6938ca36edac29ad21e32d34f34e2c47957728980db455dad83cf7d4df4f3b5804606286e61010001 \\x086be231bd23a2bc90392bb688ffdad7aea33a142dbf27f3414a1acd42f3daa806894933af632beb770b5f1d512c21cfcb2236261c55d42ee5524f002d4d1302 1630849891000000 1631454691000000 1694526691000000 1789134691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 172
-\\x8365e5ffda7864d08e78c0f0fd514d81a25945bd1e67905add4193f590af1cb4af46d61a7469cfc07f1458aeb6d5dc54864dd7c65b1e0e9cf20a513fed7f0bd7 \\x00800003ca74da14088aea3043a36f020f613e9c140bb5610814e17e7c35ea85c5d3208b06c77b04b8e37bb6c596449fad14742b4db0a7fbffb221e920904ccdd509466408eeeda06188753f04a6630df87841c488700925578c8e4502c5048aaad763b425e38c6cc1c2ca01d7d2244aabc6e85bd8797170f8989be6a27dc96e02927ac1010001 \\xf05f8632129819246bd6ad81f4ee81dcc3c47378c1d14c999a2c0d3ea54275215fe045b434e5ae3699c2248013da34e5bc76735a703c63551b4bcf4eee592b04 1635081391000000 1635686191000000 1698758191000000 1793366191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 173
-\\x860149d68e81c438645b1a34851195dd94e20952c67ec49610016174c15cd9003cf5b405d920e95ce473de98f4ce1b2778141fe3c04d4bb94271a70b1ca4ebd5 \\x00800003db5072f5598e305027fba5156f0b774ac3883ca391334dd8b32c69c759d41b57fa2b00a32f16aad2a7eda7322f7d7253be44a2adb3fa5036048f3df8dc9370a569ffd7a350b7c16e0a3f9ea9e94d0215a6b738e5da151da0f947709eef3253bcdbf3ce666f4ec9b92b549042d7181f703cfe8685781223b01fbe360e1f81322d010001 \\xba6590d188adb7ea59b91751eefa897adf7430544d1e8b49c51063fadc4e7e260baa35c04e2f3912e92484a0403f36071afe4cef6df94de3f86c73e57d61950d 1636894891000000 1637499691000000 1700571691000000 1795179691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 174
-\\x8871cf2390d424e04cb3341a13c75add51ae4d39a5f07843f2b0c9eaaca18ff68b93e5339b2f5166a6a29743105e1528e606ebab844ac3398fddb6a8775c9525 \\x00800003cc1dcee0010701c8351440235d478487bd30eb0c851778d32fbbdccc6815e69f2ed1c9ebc49596eed5609feb38122a2a3dc2a83304cb0f2cbd0237f75e0c71736baa20191194396a2b7456cf14d429bd8776cbfb6f07f9325b0e9c76b99dbdccce5e1f1b87ce3d05c2eea92a140dad6598fb5988ec452b80567e7660c80ed0e9010001 \\x424c73ee8b772c7012359a25c5f33c4df808b749f3075b6e0b41f522f008f6167021ffa5876555edbb9877601c5d77e9212f5530ddd0087e86aa5342dea69b09 1660470391000000 1661075191000000 1724147191000000 1818755191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 175
-\\x8871562a2f4e69d48cf55db483ff9aab40db089de9c208b175ee8bf9251c08388d0f4d9e1562019d492792675ce62ca5f2327044948f539deccd50866d34e2df \\x00800003c625ccb6f5d952ef416566dd09c3b4247de639061bfaddfeae3b69b8276fdc00f4973359b522bb0bb11956b2a37e3539b3b59a6865f1138d623ab0011e7b2412beb678efe376a917267b9e61c23a0d2e8d8a47359d2fe7063da4c0a030ad652f20397119a82f1c53cbec18dddfcee9becb80a758369fd67da463b4b4ae538f91010001 \\x606fa9b8156608c899e38886eb6f4998a856805695e646554b560f10c86d5d8a4616032ba41d2a2a6d69db1dec0a9053ac8a72f8b23bd1c4a40f36009fb0490f 1658052391000000 1658657191000000 1721729191000000 1816337191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 176
-\\x8cc1bc61f0c1395edc658342ae3d739d7519c240adc45aa1d45d6b9dfd0cce9d38550f8df85c33fb356488e196f5461462d41ac241006a7da55951c35e4c8429 \\x00800003c3acc826bcc9d56e40a687d054c6026dab92f96e5bf37016b89826378d37496d903c9574495f29583543a0d7df154cc4204ec21835d24df57b83bb2ed4a7f0eeda1d3bc76e34c507f173be34b9154844b5723d9fbb9c4baf26a6f3313f3bc475ca5fc83f415dac79600205162a28b2115077613444a25797d4374f7b714798ad010001 \\xfbaefcced32a1053c8bbcbd71e7105986fcc13c77f7be431b9421911f7dc70eb9a4c305baf7b92cd7616ab6757da82ba8d56b8978c58ed79ca125580b23c8e05 1642939891000000 1643544691000000 1706616691000000 1801224691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 177
-\\x903d389e7376652e39589feb0d54607bdd20a215d1976253325b6c599bdbaee59301420a9ef4b1b46632c6a5dec64834b4b1d1e246d546c592a5cf2f20d35885 \\x00800003abe76fa0abfe1929e41173e86307f64ad2fa8b7e73123d3f3f060b4ee74a6301d845da0d49338bac71b64d32c6b8ae9e4cce9788ff58dba1c31784b3ae73a669536905e517303969665d757eab537c0bc2084888262b43fa8f4dee700211a6efb30f9391ef0765163ebace7d521bb933970b2c9bd9097b0dffca303d1d7a4645010001 \\x9ab57d0d5c6e6c5b18bbce051eb244bfee58bea17ae749e8b44c69f4ec1d9392be08b917b737c3a08b125428c0445d5cfab64afafe43e21a4d28c2ec37828106 1639917391000000 1640522191000000 1703594191000000 1798202191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 178
-\\x91554ab383580183e309333fd15a6dc79f733ef9e27fdae23f774924eeb1631fc81f34b19b381b656157c7e791d6e025222514023821f5efd0f296f77a662107 \\x00800003bc6ce72bf65dc625fc802396a58b2796d366cc1da296739979fb4e40f5c8c3066a02d3c86ed32fc3394e4e2e4d69f20f1d56de8fe558d34044f6f7bf833c65a637bca2d5a164b95ccf8e2f600a7c1fb403b221e3a6189dcf7e030276466016e575026908b5c42370ea5ced0002aa46304896598dc794befa2686739d08e2b931010001 \\x3978636ae663970dc53c0e5d0ab3910989157b52d86d38da68e5615b1655677933ba115dd441a09dc6e7583eadafad750c1c793d450615a330cbba4c5180ad08 1651402891000000 1652007691000000 1715079691000000 1809687691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 179
-\\x939da0db0f6df599ae95258858fd51e87ba69d6fb01db53ddde728d82279fbe51b34f03a8023e9fb5897d35986d2e3a6bed749eb46dfa5d9c44728c85cfe6626 \\x00800003cd5c77e4b9456710d7239c1f6b98e2a130c88b35eaf7be44544dfdb4d6bc0300dbaa25b916c8b57fbccecf294b0116abda326b8118c21a6ae849bd9bcb10c5dd40e37f0d21d0499c4c4e38c02264a26870605722146883df5657638cf9358c6038b22e9030532f7c3638d23f653024689c6471e46a28d5e6bcab36f7dc4bbb39010001 \\xe3199cf7c621ab66692c8ed9b710328d367aab71a30f392ba36e66288d077bcbbf45e5d1086d702d9e6bed14c65fb02efea794106820ddb460ac225e37df1e08 1648380391000000 1648985191000000 1712057191000000 1806665191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 180
-\\x9be9bca022fafb3f1a712947b67cc1ef49713ff63c69d1b81b8ab7b468120cb4c359b90274914730153161cf57eb197046cc9c1b7077f22b6fd810a7fc4ee145 \\x00800003be317219e16d1f5f4276ff3e3335df12a17d846fede93f374f51b092026386e0da718248903ba2e77bd05c8b412404c9207799f35395aea6abf8413f8b1c127e8e3b0300ce1133076c5b12a2e1d520038cd0a697483bfa57c985e7002d9e7418631b141a07c122bf5a94f0e86764ef1402b38eac76a9cda84312002840b452df010001 \\x89838b977c46f36c7aa8607f07e89f226973e3d5470156dd7bb10e51904d5b4cf3619e0863ed3c85d70d90fd524a979326b665d377e3bd672e6f4050d441a903 1641126391000000 1641731191000000 1704803191000000 1799411191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 181
-\\x9dbdcb261c234786b4a9ab7c9351f7d774835d83cda3966a3e9bce8a6de880f92e28f749dcbe0d19c7cea52089866123cdd51a820fab86c69fc1b1054da04bef \\x00800003a1a74995a12052edb3f7c2e891768fdaec5363f2142b35e7d5b464062a111e893f5509e8f17d2e5235fd05be02ceec4474a2446f2fe2e17c91b7420aa08a439e140f5f488d2277a80031e9259253c899f3513592f0bae743ceaeea3bba9a11bb924f3d333d9a4aff130a3d7ec399e2e3ae8787530a49680f5126ced1e6b9f127010001 \\x0c7e040ef77d839d508fa440ba95ba541576cd8843795cf7f5e2d9fd412a76fed734042ef7cb2fd98a6cd83e9a34469f4060351c098c10c9f2cfc7493904390e 1647171391000000 1647776191000000 1710848191000000 1805456191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 182
-\\x9e397487fae9fcdf872fbae018b2c745a1d0a6cf55c466db8f0af18ec66197bd858e0ac2bd28a40f35ec0163c727fae4251c21f07999e02478f34008dccf781b \\x00800003dd74449f4fcb5086789e6ce81c3f22ce6d03e5380e576662e6cbfed01a04edca108671473a107c8249b78f5bf7b0c923c26fec4694980e3bbd6831221a1a41f9fddacadaeca08fc73d8926808eca78d6483643e0b712fc914464d2fbcffeccd0d478b8ff4e60d830993e98eaa8f88c7cd84095be0cc551e20a83b65c08044de9010001 \\xa2d921285b1a7b4e1bb88f563177dac10bd7c81a4592190bc6019af7f626b668b2f0b509128c23bf89d7a560f1f229e44d6122e631dc4d198ddbc6588d74930d 1639917391000000 1640522191000000 1703594191000000 1798202191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 183
-\\x9e9590924f83b16d653857eb6eef34b24d4058982140ef7eb138c7b9b1b2f39fcda35a84da2cbc4977fe71559507ce4fc6302e312ac7f32e8cd639abae3d45b9 \\x00800003ac5e78361386ceba3eb276c3daf2e16291d7dda81612c833ffe71eff5c0cd7388fce5fc2d27fbcb9275626d95df341a9a46a78126a37e5fd470f4822203945b7580ed02214f438851d07fee74cdf026da7f939650b42221770eb9a48ef2dd492b988af59ba548542e8827a71ee7d0f475226dbe682f13a6f78064ac41bc5fe7b010001 \\x6a27ff048c547540dbcdf3888eb721d7a06e833764742e23920c8399d0a354e33bb29b40c1f720638a03431a5397866a673dc450b577a94bcea1447cf9285401 1650193891000000 1650798691000000 1713870691000000 1808478691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 184
-\\x9f0dd436b1ed0daa436032ede2e793b174f662a9c0b2bb38ed49e6aeb2a7543d77e287dacf245e1f5a3744d66f686cfcade5e0d23c4bd6f9d7336342d9568836 \\x00800003d6b2d8dc2ad316dd3f5b455bc7ce73800f31944a55fb83135cdd5da210ac49a48d2f5860005d53b665fceeb6a950d3b92636726ceb97cba81a3524bcb964bf39cdb420d90e6bb94149e6092125e28a495fd2a8d7dac3c45ec98c65a96c4500f3e7bfdea690263c6f043a87fef0aa8867128780d30e8ac3235f83d3e53707888b010001 \\x66ed5ccbb4bda3fe931210e9445bcf692adfa7a41d53b016e098a4e03b9bf951b7fe5d86925de7b692ccc6b1db31c61423df85f80f263b1037abd2a6d4392007 1658656891000000 1659261691000000 1722333691000000 1816941691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 185
-\\xa04172bdc07b891e7f9caf9e5e03a182dccdab9c48cbae9c97dcaf1942bea89e4261b138de3228e2d65df629494c1936ac4fbb58b9bf6f3d191320f5738542b2 \\x00800003d3e9406bba3fbaeb4fed54160ca529ae5b04b8e96a830688586c3cb3cee8544d41819140779434fe29789046ddfbf09eae87be852597d4843b23d2e76959fdf1a7835e989676c4433361c6e6112693553cd04529601a98a4fc242a2c60538f48148d983b77520286aaecaa669b20e7b5dfed9d18460522676a305914a6b2c6ef010001 \\x9dfbd1013e1c0e7e2d85f95846aa623eb34fb1717ccc81d3211aabc5e6b6f892b023406fa29b5f5a3690e4438d402e6ce305a2fc7351d0d0cf9310d71d103809 1652611891000000 1653216691000000 1716288691000000 1810896691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 186
-\\xa1a9c1b82a1635120ea0c68f40267cb3fd7bea7a62ff8b5cca7ca4164a10c0f3c2b9d496a05931c896b45d079cd569761f4019cb6e99b580740a5e93d71db32b \\x00800003bda30aa9d4917fb37a98b7ad53ff16c8a8bc23190d42560b17cf27f075deacee6048df68a7fec74a15428e49d8de1864007b00f8d24deed426316e0b4cf226343435618dbbfd5e5789b015af7212b9c1139d201f7ecad38e110bea7f0035c647518708d9c7e5e1ff4da9b36c604d989ac2c1ccefe9f9de59c722da8bb9a3efab010001 \\x8e39c9056a411c68af873bcd4e90a0186d0ce6a5d5fd64be14c4dfcb31544f1ba45c0b97fb39a6b136df35de960a273b97d9f402171c63967a7508381c056c07 1639312891000000 1639917691000000 1702989691000000 1797597691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 187
-\\xa3855dabcaaee67c95d4fabe1f9ccc29b7578852f5d4cbb7f8e9bbb56137f8f248bf22351f8453c439349ed434997dcdb05b384b9ff70a27f57dd690caa7d479 \\x00800003cda9b4353c239df98c52180b3fb4b927d8979f142a0237d3758172a088cbdba5782d95a7ffe77f0ca37f75b2bbe18d6a61a864a7df33d5b73d88f15ae2ed554ddff1a7da19c77ea325e8f6edc67be34a269c34d43de5192d578c082586264f025f0bdaf21b0426859e817dfbf27e52ea2a785dc6d9cc12938609cbb08869580d010001 \\x2b25b05a81035f29c629db72a4889ec32de3d015deb6a43182722bfd4d742339e757a009a3d690862f584703f3b22ff3b5d5e7b87699716a36620f9b60359005 1639312891000000 1639917691000000 1702989691000000 1797597691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 188
-\\xa6394cad2c839fa13c68036cc1d2fc65ce4a2bc5e6dd1eb6b2bfd395879c2400db1b8df5ba8048239dd5e6de918487b9f73abe4aad84f501864379e18229bac2 \\x00800003c2cd0ecfb94d6b6e3404468c939eda56d6edd4365ce776d29fc6f5a5979ced91a7eafd2d494abb5c60905c3afe7ad0ef3af46d5123cefcd71d14181d24cef7179fa87ee8e810e3f47d0e33bad0c6e23b6b6f23c4a503c708779b8ecf4d9d60c0bf144534fd9ac8a7dddc871180861c41ca918d4d50fc8df78d40f59f4ba703ef010001 \\x489990c7623d32979174b699f03fa17fee6a8a63977deab5fc39bbcf6ce3c28df06a7aab9edd06d4d559dfe33cdcc150bd7f89a47d9ded8ae515ebe72f3deb02 1645962391000000 1646567191000000 1709639191000000 1804247191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 189
-\\xa7d5f0ee2fb7da3bf67490fc53a05f891cfd485f666f36345190a960df3d5375ff3a10d91540d3beba899f8f20289c4ccae38deda0ac1fb950dcb43476302e70 \\x00800003bee9fe76440a62019025616c572ba5bf98e0f932a431731ffbc74a612855495bf359e897f32f8533aa7120a8fada4bd46ef9f4f49d1a00e0fed3ee9179233a498b2a055b1a2fe30895c559a1795d080a26f774cf778ec2e7bae4759eedce11f01ce503b12a5dae9af452cd6fe851ebba342c62ea7eec1c188eb6ef0bc286b1af010001 \\xc83535539d18e47cd074fba9e092b267985b6e110db9122ce4c44cebc3856d623c5581682ca097a842e1758ca56406af3fc745c911864543d1c32f2cb058b90b 1649589391000000 1650194191000000 1713266191000000 1807874191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 190
-\\xaf0d5bb8d172d1fc669cf5ef223b36c8dee7ea230cee242d2db69abfa425ae0c8d5a9c9eecc15e29a32d76616e5591348da8099a8c169e0537e1e7d94b1385c3 \\x00800003c673eeb2735a1208c305ae760da17419054664d3e2d41bda4543ca85590dd91881f90fd944f49e60ff4e3536b9cc8c5a58cab06214fa2b08cc6d2bd2dae36eb63a85f29de2ff598cf5096b3441e376a06f4d4fa44e67399b3be94617d3172fb4b1cc00d46991745cbb1468e218f92147fea6b5abf7e994c73a772b66ae32fb3d010001 \\x6567257cb15d00c7d2f63ddf00aaabbe146f6f3abdf2add653168eadf46c290b08717b85d2600ce99d2ed9d22ad8f25ef6c71c31dac8c114eac09809fd1be508 1648984891000000 1649589691000000 1712661691000000 1807269691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 191
-\\xaf6d8f120d0696e515fbbefdf661dc44b94bbad866415e2d8fa3b1c28ebfa57c913c8e05091f415b7640e9e0456f01088d0557a591aace2ad31418ddd9473d1f \\x00800003c49c064edea27dfcf162708a78d0dd5b55a8439c978e29be25d9f2710611220e6a27cd6b2e5e27d13dff70737c4793d09f7ad32e4247dd9dede944c418048d4f16672e47d9719d12ab0f14a768c4ec479da54370befc33b6b090e2645b80f62c5f14b892f823a8c759b8abedaf2d2a4dd3e157dc9814c1dff40d2bbd41ca7baf010001 \\x1e9c79e116ada3c849136f3a4be07cb840b01a65ed089ac0d2bc0e884110f86f22628f1840bc762ee7b49aed721a40c5ddc006bbcb86c660359ba05e60f25803 1632058891000000 1632663691000000 1695735691000000 1790343691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 192
-\\xafa974a44197f43561aa8b7890d70e6e6ccb2be0ab866aaeb507ae40d49554c170034ef4f39327936eb10db0bcd1987ba2e18045ed090aea55693e4baa5c5d27 \\x00800003ccb4743de026ef57cbb6b567e4df289bd5f98b7043c6f78c1655e1dc1405bde26a84b71e57883a776a34e039aec1b0e3a1081b4619e01daaa768e7862547d801a3a934fc2c6320b1c6586d9c2ff45f9435f98e3f50a177d18cb332f2f0ede4187a63b529be7c3fd455e8e9b93c3bd70254de12d531e2c38bb5c9b5aa50a88fc1010001 \\x2621d7fe70707ee1fc1698979c2ee7148d083ef02395c07a244e542af25c2fc14381642302fd5f7a820e3d6c3e1725c5d01ea13179f55ce96aaec23e89c1fa0c 1640521891000000 1641126691000000 1704198691000000 1798806691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 193
-\\xb0f5ef882f4bfa6279da0023e95804ef450840c686e9aad6e9e85a5c7e6b4773e7bf4c9dcabc11453b66d086b404619774fbf8f5b203529cf9fd3c0317ed0077 \\x00800003b96bdcb20bc77d5cdd309988f0cce1660fea9ebe8fb97987f2287b4980ab863024203b9c556e3433a6c0bce3714adb7ca39f7972b5f62a4e1c491a97a014bbe4d342a7949ca1b0d0038a6cbb26af2ae542467f07c0be6def712566712a62be425514c428117a5582e848438385ff4672d2191b9fc5b7848fff67911ed2658b67010001 \\x76c65b8e667b4c4923a1b176202463d41499be32e9d6fa1c0cacf6f7dfb286dac811d1077946b0f3339fe28cd03163669073057c4d6b808ae22244db8004f004 1636894891000000 1637499691000000 1700571691000000 1795179691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 194
-\\xb37de67b0c1e6146d2d50fa4a74f1cc2c02ee8a093826e2d1c1cf3d52cdc9458718f8152378eff07ef9cc1fc78307bf7c9ee95e3a7f6d1e61cea80f04d1e669f \\x00800003dbf57ac63c42b3a59c3a96b66035846693be69e5ad080d98fdf86534077cb806d2aa26574d3cac59fbab3066c855b620dfdf74922ccce0f370a1ecfaf6ee05e5708a92b994ce19d1804f866dd4dc3c2f7da5b0a81b59b5c738851c707bcb8234adc711332cd7bb58abc1f503e02c837dac43faa9045429d1ac93e40f281eaf77010001 \\x35844939d550e65b5a80ced796cd2cd222d01550af0bfada67e5db0ac543550055a99dff3cf88a1f700d16ab550beaa573aba057f10ad09f4f07befebd5f9b0d 1645962391000000 1646567191000000 1709639191000000 1804247191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 195
-\\xb7edcf229b7cdf760d2833c2bf535289691f12234f012e445d0a3750aff38e0ea65bf7184cefef1bb346a5a40981cc7a7fd909a79070e86af5c252da20b02b55 \\x00800003c00393671f4eb4c2daa85902a765c1bd1e911f1bc560328b61cb6a5adfe4efc50009770b17eced97becd01971d9b87a029e6acad73a35354b8b1061288ea73c6bb9bed05fcdb22407daa88b135ac14924f0dd3c314ad2c7f894cd4a1f83545e5959ff0686418be652ff4488fb955fd8b10f1d68520a68fe7c757a09548c0428f010001 \\x5db9388fc05f8f0e5996dd563099e6c14ef34c63b5a566765825dc485efc6ac009784e71eb496c1fb79da4434459a78c5408677251c24db0588c12cfd4aac20b 1635081391000000 1635686191000000 1698758191000000 1793366191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 196
-\\xbe697dc30f1bf7ecedb349bcf9eadf43a2c5db26a6b57753224a056a378144c0450229600f52b1e0ba50aa7e0c16596f986c47f06f03ca7ce3a535257d4f9cb5 \\x00800003d2fcd198095003ef80b5bfe09e441b570a693092b50f3c9d78e7003bdc41190fea6065e5dba20a7851814ab954c0fa6556313b2e32fb27b690b2b83f95e2494683d002f11581f4cb25f5f6a7b7a03013e031d3a248114c7cd53466bd8b34fb1b2d6b6b76a8f242f538eded13ae20c0a3c0079565050db38a2a05d9dfb59daefd010001 \\xae9a926a766769d79e67969bd5f8d0998a86ac024c0df184018c90a81462d76fc62e70c7e4a4dc0076792c9f93744f0b10a131ede0738506d5ba3e972c948f02 1658656891000000 1659261691000000 1722333691000000 1816941691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 197
-\\xbe914fe17b64b8eeb479f0052e3eeb886fb44a875a4317d34568479e066eb76a1d81345348eb68be0ef7de1cc0fcc9b899ff1ce52bb8a94cd8ca1a7c216d333e \\x00800003b0dd98d84685dbaa2b82848923fc4277e9b440ddf5540d4fac176e5f504b6670ea4a785681ce7d3bca924e4e5717425fea1ef0ab4363ceb9f9b5906b460b7ecd907b2a78447331424180391162dcdf2bf3b05e1d1111bf36cc3d73a1b45dafe67281a251dbe82d20f27149108ca40b3f1dc6cd2888d555e14b1f8343cefa681f010001 \\x15f3005987a58c806a0b26a85635799b66f4dab135d295b27da956b2d2403933a000b2b4351e69916ac1797c05da3b7d3d593ce9e7ad875b6a10c2a1f22e8207 1648380391000000 1648985191000000 1712057191000000 1806665191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 198
-\\xc059d106ac0e9e6f855817e98bedb09bc1a4ccea10cd2db1f576be118c9ccdd9bbe4394a90ab4a983c7afb24398d59bf0ef96bed1a9ebf6de3018dd9d80f0e5c \\x00800003c2f7660b52c7f2ab098f1181c813a3f1ca76714a74ed4288b54011cea4c6a92edc35ae0b3197bea54be849a2490e958053cd0a007bbb81255645d93543d91a6bc6c835890062bfc1141275ac6f049aa85b59aaf50bec54ac2f4b7f8cbf6b85ce64fa2223c6b8596d6ca867f94ccc3eff16d2a7fe339ebaf3b89e69dfcad58b0f010001 \\x28175786f865580d2454cbabfca759daf0d73a7943212b196abf12ca0346a002e1ea5095d3c463fe45c91d6d76d62d07c573b6fff2c1c8eb72351b604393a406 1652007391000000 1652612191000000 1715684191000000 1810292191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 199
-\\xc695034c62a84f7171cd9d7bafbaf4fdc21a2e0fbe7e080c322de92c38e957242bb98724acc98cf3c31e075fb41896e91087bb10f1fcb38b7c7d899010c58fa9 \\x00800003d1bec00ddad594cdc931a69e668af08a30c1f9517e2c61e995eaa27a5348a5c04781c9533d38645ac7495231c99a2caf6c30c827413ac86051fdfe3598625dab2899cd09d2a5feff4caa0b70c0e4d5b3512e6b95d5a1b08c4456b9a61013874da7b216c0fb66a2de2ef2f380f2bcfbc042e13a0948ee76f20049320de87632b9010001 \\x946c15e8406c00eb22a3c11de390f155c73ed7ba68014c04a2e3f6f2eab4ef6bb4796d31e1402eb1ecd0809a63e2cc2b582bd8f052f49d73d821107a806e5202 1638103891000000 1638708691000000 1701780691000000 1796388691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 200
-\\xc6f1e1486c6c1a7a00bffc0fe8251e8f876bc871da9c27cec0a2903a61f609d0e583893590eaad0098f90b589dde454d234170e44aea028ce92866818005a6ab \\x00800003c9f2e517b02c80123071f15c7dc55ed18ae7059eaf13a7f549f0ba7b893e488d9c616cbb1fc203164a68f83d659e7309229dd2d99a3ed1093984458bd23c1a3b5c2fe3dfa678a2b51deadadbcbfec8d4040db8c490f325d9dadc6a853fd207c5ada714cbedf4485ff5e192cb592bada3edae5695fcd0a804f6c993f606cba837010001 \\x8f9b5e7da011ada32fe2208a632eab6e19c344f4a6844b6278501e9212b036df91706dde1d1b18829025c0cc4601810801a83db83c8d03698b9b18f02886070f 1632663391000000 1633268191000000 1696340191000000 1790948191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 201
-\\xc7f14c5b99383e0eacdb6991b7b8a978c547d00929068b3f908eefe0612aa6b3a8a97b7f29bd632e1a2da2171663d8589902709923d495bdbc064c05ae2a4c87 \\x00800003c98411ff7be38ef17f852519d45220a8fb909eda08126e6b1b62c03149373e4f92a34ca90a955af1d60794ea083ec0da371422a911a5272d434c3103b637bab54c383d874256b51d5b9d06733407f6b0a9b9dd15f63c6576f54d8be03059fb4fb784ce3b79855a237a25de25644cb11e8ccc090f7738f3fb937fca8cab2925d1010001 \\x922c4edbc578409a6cc372097835e814485f78d4bc2f8826065899de08b48df0402808195d23ca9f2f6b2c715ec75ed6f4fc6510bb4d67fa2afb44579da60f0e 1635081391000000 1635686191000000 1698758191000000 1793366191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 202
-\\xc8bd0aae7455eebfffe4638fe43f0795283a4d136ee208dfb83a3654aaa5d71f804eefc0dd047f193504071263696d812b00ccba2f6becfae5db6ff1bca0ae7f \\x00800003c7f92aebc8d98a18bfe097f6e8b15f4eb2ca3a55d390833e97649ad0f8eb0872ac51525970d72e47037cacf56be1e4ef675266f53b874a75e40d66e03f1f9a9f634c2119216fce3f39c3e4f9c224be4723559ca708d365cf15774c4e007e514ce1c3df6204aa50ccd5dc724d0777b5c9f23ee1408da360b8faf26346e9efc099010001 \\x5a663249ca8fd20f525f62d2d759c5971fd96ce0a65ef9f571fe821169a8684765525b79be124400cf7a85585e2e2588c3f597112002d5234ea8adaa783b0802 1649589391000000 1650194191000000 1713266191000000 1807874191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 203
-\\xc9c148d590d7a3db611eaafb1e520c921ee339c1140bdcd0f575f27a6241a9dca5375c69d7715382fdec41b6052c754c590ca2a4fc7f3b949557f60b0918ef12 \\x00800003a69efea38c0f39b9707bd17ad175630cc3209fd091468501f0d4ac5973fc2f03ef4c4377104f25bfc6eae40a74bd5e83aea46380e1b6c4c4ab4c51b8354006b1dfa34a369a1b1bfb0a626712f4043b235474a5d0db1cebb801b66ec8b6c75111697a560022e950442d3005bad11e5e974b34c3c7c460976f8a5a909b630455f9010001 \\x80b017555efd2928f6a5fb7684df0d5d59b3cc1dd0629ab0d9dd46a35bfb5b09bad5757f523015381c89e60fea35fb0a75bcbf6877cef4aa84ded327a46c4405 1631454391000000 1632059191000000 1695131191000000 1789739191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 204
-\\xca255e565ac055b944459e37c37a54b2d5c7090b00e446d00729b482fc7ad103000d52a76e13c442e44759119bb16550ca0b74fc1c2659400f9059db98fde1d6 \\x00800003be92ed337e5c2847d9cee247c38aee35842eba9b5df01b88178b6d5b9b4c5d4cbaa3fcc132c78a8fd2341487a9f4831a5bafe84e59573009dc0d7a1fb00b330c6b8b49daf2a41e40fb460a8803c4cc1f0171d6e70e8c931e50f99ac8f00b61da7fc642459a00fd5f8673a181d9b3623637e0e2501dc2e1ed6eb7a91efd70a11b010001 \\x19592a62ba72be169899235a948417694960341d6e4fdb03768368c334263c33a99414a1ae70c8786b6bdda092e3b59c172ba252416e1399dd07a5f5d25f7c00 1644148891000000 1644753691000000 1707825691000000 1802433691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 205
-\\xca15bf198625f5c09b1d3cda3903df7c5278e1eb2a2e9f05974153fa681ac9506703503a4e85ea9afa4d5838c2203357aae0d0a32864d677dd64b2731a148ee5 \\x00800003b6daa00176000bdafe6047c0228870bc21105e5ffbc9c57cde2e814e21994a90ba58480ec481aeb0d0738b3e420fdd2097ae46402cca048ef849be402c6765fa82567e90d7c6260ba3b679661707e9bab0fdd2dc058f3b1274df8aaba8195c764a656cdd4f68d7f8553f5ec5bfd7fd42676d25a300b8a6e22b7d135c87625e5d010001 \\x722da467d2e750d0ecf2d95f9776ed194289426f0e61b2d3a1b52ebf64d1943a7f1449a468ba1d6dd1e421869b000ad7411253663bd5e42d588b219ddd8eff03 1651402891000000 1652007691000000 1715079691000000 1809687691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 206
-\\xca41b21615c0f49e2f503a693267a9ba338425ce9966ba68d9f074d47fcbb64bcedb23ec78fd26aee75f38a75b7a7ec31315e5ad588dcdbf25033c0dd3f5f677 \\x00800003d298fb5d09f942e5258c6e704a3727ce188c60acbea4f1a256425415511bf6d32c994993181cf191002a274262a26dd9bb58c4717bd4b855d2a11315f72be2a8c6068286e248ab632ff56363899f01448148eadc3c2cf57cfa40bb9489b7c05f3e3bb6847969dfcfaac07ba4054c85bf188e572f59a6f1b03c63c8a950b63921010001 \\x3349c3e268dcd74fe3459b3bb589c80b2df68e2d0f964cd8a9c1f81d21a8bb56315babe57cbf1b0ebb4a033be44b4c0b7d5f72f2207842e8bdf7f48c66c66c03 1642939891000000 1643544691000000 1706616691000000 1801224691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 207
-\\xccfd9931711de28a99c4f776039c0b8da91c64a0a0cd7b5985a2ca9ee591fbe4d4b41453ce9f8afdae6a2d40a71e9f2dfcda85670b803524ab8785077a8fd253 \\x00800003d3fc9fde88d802f0ab8e7db453940ff0ed51d7b1f488c81406247cef026af9cdffac39bbcc287cc6d23fb0677d974170b3c4a476544c94ceacb67a22e7c795b9c089f16d646f282fb6fc9b6f6bd3e0629e130abec30d4f41f3fc90f49a3445bf0055a9b5b0981866bb4600bdc4be0f6d4a72d72dff441345f6b977d0e88a3cdd010001 \\x74400a8dc4b3144865101f0b38369c9f4ed1b939846ca3f7428db57ad409cbb77c32a106f02247d85336b0d5554dd80513b4933604bc3c5993f9f9f6f0ee0201 1639312891000000 1639917691000000 1702989691000000 1797597691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 208
-\\xd55147ff886e1bf3fa49fdba8a8728153c453130046a4cd77c6172e6fddea7501aa3304d14a1f359575785f82f9874d0b72badaf79e797d028c52e437a698e88 \\x00800003cabc5e4f485459c715d66bf5c7950ec26b0d34e8aa5b1b0bdf90818b13d1bc6ccc20fb95b5459749c13b38e9212f4d1df03212f68e3feed61002d637629b1e319a80b845e6cb349c3c8e9b3e3bd5c76a36881dd7a25413c71b628254367801aef99532745547a72b7a74a1d30e4045f6778186af29833bd34a6f586a1079b5eb010001 \\xc07d5b8fbfe5352fd6b3d595957414366a07aafcbeed7fc1a33699b426970c729224fde803b1ab4003705a8d270821015305039a58f11a2f61facaccf035d402 1633872391000000 1634477191000000 1697549191000000 1792157191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 209
-\\xd6296defe55704267e094daa41434027007fd0407514b0761d09868140eed10a33d7c2df07cf5c2aef5c76a47927b064a01eaf03261a6b79532387a4e873be3d \\x008000039e4ef3dba67af9b7e81f4aacdad9a22e9371e3cced9c6d6a1ad2514ec1236cdba69268ad0546bced9243d45e8c31d342974f879a608d12109e0380b49cba2ab2932d9bf79c3766586213aab200ef15f8880c171a19674313108bbf179b89996a524d28fac3bbbcc3e817420883bf084d6d8ada71f7bd94a0b9696c59b84593b9010001 \\x6bb9b62af0488d94d828556944d89a4f0e303548c4995638f596d4b99b704f31276c081307386f55be0d867d7d59381a19a82391882134a79452a40227f37d00 1656238891000000 1656843691000000 1719915691000000 1814523691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 210
-\\xd7991804c5f08aa7c4af3604e2fb0bed2840a5d3615aa14a01083a4042c1fe0c5c456cf0a78232c1bf3a7b08a7cb5313f6027c6cde6f271b05a2c5488abdcdc9 \\x00800003cea5402f55806de5dd1d55f3f21a4e70447f9eeac818d86acc9050febe144c1c04ca9e45c8a43720e92ee77a587790a8827b0df3ae5162d678c4a7969fc3ae886b2c1a968afdb6526c0db02c70c2da35e41e02fd948e156c02c558a54d94324ff3ad276799a6303a2ca77cfbbead0bea5c2456538ebc76d25d3bbc17c3c889fb010001 \\x9268432dd982df31d0ef643a10e615103761196e78231383850b5a1dd955d38af6e7bec63e4ffa9a67d54990d0ae635857e28b3de915e46181d5b67cc2cc8c03 1641730891000000 1642335691000000 1705407691000000 1800015691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 211
-\\xd809b82e60e34a09ff37b2635883dde386a0078149850d6b69473ef468b4cb9720243aeff13ccf041f4bb8415a9de17a16350f824b1d5a29485226d6f37d90b8 \\x00800003d6799eb175fc3f9a30396bc2473bd4183ec608ca713e01a5de3aa7f060d639c11eb70542d1dc8af7e07f1b8bd334bd1b31c5b162331aff842d74d7a46a9248a85b7a7a1cdb5676adc4d8772d34f64cbc9ed0c62f55592d1716ad41a27e5669f6f64ec867ec771b207958e24ceb602f87705981648b268fdc59287cbf5bf03b21010001 \\x2e949541d2276d5904364b536f52c50adbd68efa1ff70731ef976f02652a2cc764cd9e6838b15108dd4c43af2b63086aeadfdc5736f255ebdd346c9fa0c2b709 1654425391000000 1655030191000000 1718102191000000 1812710191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 212
-\\xd8f9b22bb6a684b456fb8b375e6e98587497d268f3b66883f699f4a95779b444e4c1ca014c467b54d63ed67f18eec5dc91bfd400fa1e2495e69e5c727fbc2733 \\x00800003a9b7c6e49be5408b4277299ffa17b77cae32de0ff6e7d67da98a9124cd14ebbb85f2912a0fb71f6d13fabde861be6a8f28a9476416ba362b640e335426d3cb9a64be9928580ff92afa79db2c3a4d73b7f88192a1986d7738635a355280804c4308311829b8313fc1f3627abd1d29f854e3d04d3e3c95eaf30f951a8e8251660d010001 \\xb073f70acc9b7ffaa8b3ecfac44afff8da3ce845714833b40815a4f73c102534491c2561f510fc417f83653d64c2bfac229bff18be4ed529d05304f9a5973909 1632058891000000 1632663691000000 1695735691000000 1790343691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 213
-\\xdb6550f078d956ec0a4e8dfcc010d00f59cdfb31e30349737d82d0fe9e65941f36fed0b42eb1ac3ad201ce6edb54449b9a09208bae089eb3aeee1036979fe8f9 \\x00800003d9c46a080da520c3e478cbf830c6447f2da3c32a069d452522fd8cdeae925fa682c659b446d46250c60dee18a1c3c8d83b1be78baa2a33ed04c7b45f83a39a9fdef68f45ef27ac4def188424508e818d6451ab8fc5bfac12a057396246dd8643921b92cd081e7bdd6d9de5a52769dd1013c0cf4baae34365055b6dad4dd24bb1010001 \\x3f7352bfd1f0b2bd41c7d4efbef73f567657dcfc7899d80bc7d05e4505ae2d37a4fa0183d0db439a2b40f316cf490b175a7ad52458b486b41907cb7edc9a320b 1657447891000000 1658052691000000 1721124691000000 1815732691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 214
-\\xdc3d293df00184d2feaf6edf034a6ce81eca86d60a8daae22a190964325024dd0532b3958f0859a4665f81a625ad436183a730f46e2efa20fef6f70e40379e1a \\x00800003c65645db09070a7eb68e37c33017080e9c193cc3cbf8e966cea4851d4ccfedd5e608d2104109c104c4b0ddc836b69c745e2f76034c5338a9bea909536059e3769db9cecd61b03a127e7bd2da054f2dffb8ab36da71c226281a0800303c891310f298726f36c09b10885d98cd43e4c5d4d4d0ea5b003f41eddd6f854f7e4fe7a5010001 \\x4d158b80740bacc9af66378e2c39b25b5c6459f79941c9c606b8be17decc240a999e03da981b3886f4ed1a4400be82f7c0feac30a0bb41a2b928c58ac0994903 1655634391000000 1656239191000000 1719311191000000 1813919191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 215
-\\xdeb5b34aaa772d7d053ddbea99af7495205203088dcbecb6b46155595b4720478d835628db773c019302f2c39e35e323002dd6ef0bce041ab681cba7fbe35d66 \\x00800003b597185bcb3fd223d937516a37121d5c1e38536ffaf34ce05a5b01139b504175cc40a8a1c0be55e087710567ebe53d7e99ff56831e12f3d4ee3719edb2117f1a01b5fa08bb3de69f4568f564e81a1d8ad5a42047b44fe82b464125fc60a91f161525584d092e32cff9ffa60a0818e466a779d1d0329a359de64fc4e7dd05481d010001 \\xb5d97e250742289fdac5c9b86e82861c608007139b552398c02649d42d39004153bcb7c3d2531e56be2f7e0784038283a91c5fd3fd1c32e1f96830314b697c05 1662283891000000 1662888691000000 1725960691000000 1820568691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 216
-\\xde81019cf44b018b746cc97ae957bebdc0f5b943dc33960bec5b23b434dd9cfe28b8447335bca35aa036ccf1c93d35f0cc5ed8df09a92f484a12c4f0926c07f7 \\x00800003c0408129c1e04fa7881b720317626e323332bf0da40045ad42ebe2045f6861eff5faba5a5d8cb2a7c1e37a702e6dbf7f3402a5e8f0b13d2dfc589b35b9484072b907485929a2225c55bb7c2df42b84cec412fe6fd70422de8dc0c27505ceba521a43b2ec25d38fb346d05a9ea9120e1f88d1102306f79658e34e540299e0bbd7010001 \\x19f70d5ccf0090c300dd4671f2a992ee3fb19cb33e31dacda3416259270f2a0366eedf6873dcd0d4bd3fb37797d82e989b8c51eb3d9d1c5f667d2c678fd78402 1651402891000000 1652007691000000 1715079691000000 1809687691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 217
-\\xe2cde2db6e5a08d8901216b0e4672d6d6f079aa5b6961eeeffec3b20e5f62c5deed6b13352b220de213110c329fd9c104a2ea8d4a42344f31258e0889f26e968 \\x00800003e7077cd180862d9dab65c75c5c6c3f1da5b9061e5896644cf7101299294822cff118a95ab73d01ecc863ec86023e0e22aad5a2fa09a4bbb9db78cc7554ee291a9a172f6fa6b377992a7840ca8bc60a8c00e02abfedcd466b2660a239e8fc320f37f282d80b2d0a87094b775372aad856c09c928ebcc9e1458d962632c19d6f01010001 \\x52977010f68e5d9e52fb8a3961350a21c64e6449d6706b4af5c1d726174b52d69dc67d6ed97afd36502558b2704ff73d7eb1705b5edc5a460c391c9d3ae9b909 1642335391000000 1642940191000000 1706012191000000 1800620191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 218
-\\xe59d86f9a93f36df0a13eebed38e34408f1a0a0d77d37fe023891588798716f979820ee43c62848651d2e7986215231cca90701e60c68f3fc65d319db2f68a2e \\x008000039fa39b0614efa52346a268281bb2b4d5e564957aa13470bee6ab7d5578b10f932dfb5516067ff96ea486f18dbeefc2ae251e28ffd254780ce8f995b2db159236dd1e1c0ce88565826e40407083289b3b89ce705cb496085d6d08edd94f7116d56aea8d2e2fc32cad1ee3968ccdd4a32a4f593f7a024d56a44281c3129eee79e1010001 \\x5c4c752cd5f34630238c847c71fab65487cb72392dc8e4a5bddc6d4e2dc5bf2e566d64e31b79d7deda3a1553a26df17eeab83a7b26e9a24cab1acd48358c5802 1633267891000000 1633872691000000 1696944691000000 1791552691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 219
-\\xece9eca2477ab213d0c7fdbc3d6d29f2cc6c4b3140baed856bcd75f1a626dfab5dd58b8a0108d5ff63247fa82703aa7b7abedd26a564a962350e77a2833cfd84 \\x00800003e1053ac497028c44cce3ac670a2a9bf05ae8b3420958aa0419ceb9e02d92d881df9bd0e99839d448a6d197a6968210c075a8a7c8c64072acc792bd9a977819e02a4df1e3e0de778f12c1f6c0eaad323ac58c3568a4b1a735c87303828d565f70fbfb838ac86e66f9c0d5b938e2b9750468b981f19664c9a5437f914f0b9a482d010001 \\x0904858a28cd1757fc3ebd21f3a97af7c5ee3c7f9f0df27def6b5fbbb30bfd22f8a7ba469745e97c7f9fa70dd4f6405d9e0e1d3397296afb8b5ae8b0147aa200 1643544391000000 1644149191000000 1707221191000000 1801829191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 220
-\\xec61379b63608a41bb25a6c793f140d72bdcecc3dd5013ba16a2c580bfe0ad8eb70c6764c44e55616848b0db1eb4d5e06fddeeedb480e04f821ebf128a97d342 \\x00800003c7a7dd4d25a9d573f364f29f76559aae041e00110658778dc80f401647473106cea29b6242324ac37f03aa7d60e3d16c2a3d2c3b3fabaf1fe4dfe96cd702872703452bc3b68aee8a40ead0fa3fecf0fcff86c72aff219751da8944ce1f30206fc43efc5c49ec3bee580d68df956ff246058c50f4dafaf28ffed76c15ea12133f010001 \\x0640e8cad942c2f7f0c677c367d23482c00dc26dbf14c70c613f1aa32200e473d167e873a6420fd0ca94c055e375d5384512af70304721b1c8444bd7c4ebb205 1633267891000000 1633872691000000 1696944691000000 1791552691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 221
-\\xeeb920c10f1c3ded81b1b15b4cf8da3424a7f6ae97707fb00d8e8e0f6e1c48a896a1165b9de3bbcac1eda17445ae162ae871c6eb370bfdd57e77bb091a897e79 \\x00800003ae2a57a5d0d39cf9a5ecbb9d552d80d222ee62640330087fe3aa5a1419bb2898aba14292df84209526750bcc7b402d20369a54935f0c9c88230f66ae9eac59a7ff36ae5f853eef5d24bb45a210cfaaa523bc6819e66d81b12c19655c1cecfb51ebc4836b2a4d16a194ea4075b0cf7b36352e55c5cd2482e42a45688f54780a85010001 \\x7742bd88e8d56ce7dde182e0be98f7aafef17f92547b036dd5ecc62ed847bb92fc35c7421635bf327f4517333c99dde2fcdb23cdf45279f9284c69f4d9321a01 1654425391000000 1655030191000000 1718102191000000 1812710191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 222
-\\xf2a16e7944d5d02f25e455ad4da7559c54fb0d6215d2bdc1d397fc269e8cc0299189ea333aa45961d13c8ec7eaa3eb2c98828f991411be5919ba24ef29d7d4ba \\x00800003af9362ac5d087925b2e1b0b3ee11d7d249433154f9a4d6fea9d87301c8e9a5ee9442ff3a82848194ece7709e1601536ffad01b81f09ac35a443c19a7d451c2625880c174b62e42d4f7d4ffdccd78fd79f80f8b28e42a67f81f8b3adad458173682c93913999aff44e9e03144234fd259914d950222da032eb4009654865cd8bd010001 \\xddceeea5e59a5770b4e35689431b7dc5825cd95ee70cf7e0bc03daeff9b62686e2ab9404854b253c8a487225473b4ab6e64daeea5a6953450df6588b88fe2101 1651402891000000 1652007691000000 1715079691000000 1809687691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 223
-\\xf4351e46478bdafc72f32bb68334212eb9bcfff924c537f5c3bdd5b5204f685814f2c4dc38b50abc3b4512439ad4d5c3cc42189cbe6e13ba8f6cf247329baf0e \\x00800003d812d58c2f10b7f7fa67edf41e3d678b09ac85da741ba2ca45ae570031c1640331e865417f879ea6ec4c14947c02487dbb28a0973817ea033b39487ce6cdc60a314a553e4b7c3dc5d433626714ac9a42ed4f4a30d6829e4b334ef89b82d8440e54a2aff0976fe2eda6a514cb003235491bb67f47dfd1b736e676af8cc90d0889010001 \\x787eacaf8c6890d8f8fab14a0c619fc0e9050d6e31f51ce87c530712396455d38831651c06e6152dc139a089f66d036bf3dc33788d05f30134a69ba7576f1902 1632663391000000 1633268191000000 1696340191000000 1790948191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 224
-\\xf9853b10d0c63740575f273f11d23516cbd345d20fc68ad176226df64f7eab0cb677e985bdb926ebf56c246f201c2ac263182dbb25d503c858101b037d043af6 \\x00800003d1fc6636f42314e043d63a40e1ceec7037c26095c34d523d374fdef970a95c548b31342962a1bf32087171a76a94ce4c24f055b9a8ca6ee31f2eb17dbe532648051cc8b103157b2510b23669e5be11809adeea507bf7f20e557f8c5a2531332fe57ca88fb41dcded32826c1c65c9b620d4827ddeb455b2423990e9eef1fa9b5f010001 \\xea4f03ee9353357e5a504ccefbfdbad30a4d0ffcb2f80b105d7d36415a6e8ab09df9cfb4f69771ea780ecb51421ec8c59a77c81cfce90e5e9c1d518115fc550f 1653216391000000 1653821191000000 1716893191000000 1811501191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 225
-\\xfaed165670c05aa85131c0db3d8fc806bd4a4fa7b7c0150e61fb41b18937ca236e2c37502cefc0778ed71c27730c1e25f27c3825cf846b7d41116402531e0ec8 \\x00800003a4b43ac21002a647d5ea3b2838be89c8d10549bf7b6ff11a8fdfce4b4063b9b50775fa6e2b5244b6a0914e213b53beed53d7fa65ed8bee227b8448fe804e21c73e09ae23008f441b305d0f7434b591d1049f9ed04007688d180456e7ad7b13e24a54a0b0b3c83ca9a682318c63104616d28f0d83e21af19a19be30282e36e285010001 \\xd4e08c01cb657805ee2d0f556401279a2dde743b42bafdab08c2e63bc49b5ccdd65dc84d93ccf0e13d7922523cc379ddc07232812c5653280b186335b914cd0f 1656843391000000 1657448191000000 1720520191000000 1815128191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 226
-\\xfd05435245fe916819cf416b131c2bbc033aad0553e87c6e54f267a602b96e6c89b99075b3a10332f8c1e0ef67879544c48b462ff8d6d60aa917e7c359a16619 \\x00800003a1ba02daaa0489ca245c7de9b1007cf44a5bddea48e3d08bef04a4528f8486cb75bcbc52bce75905acc41604008aa314047c0325fc452b2831dfa94e4464e2c32864ae229f650e1496dcbf0dedbdecf6175a4fcdccf64d4f8dfd1aa4e4956406fe6263a67aa03e03bf9cc8160005624663f703d2890e036734f50b8c1b6fcbaf010001 \\x24b84ad9e79aacbd78b9c85c03b09731c24c5db1d450db25e3f137aea40837652b32e7ced69e8e5f2cc98e4c1faf33210ebe611ff62456df4b500f1db94d1b05 1633872391000000 1634477191000000 1697549191000000 1792157191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 227
-\\x00ba5443af4ae2dbb9d220b397d11a1af7496dc4a5a8d8fe89e68955fbb2d8160f121eca9582e79cdbaf6cba5bdad804e1481e4bc5fa2e8fabaa4a8ab1f70a9c \\x00800003cc779ab7115019e600049bc67d26c5a97a10db5285a7db5857d799a7888bf5dcf2ed1c56364669b06f07f70aacf22539fa023e211942434e8e0708ebd7ba0affe091645184f46c6b8d62865b6814dc09bcf8fbb436bbfb55b7dc8f90dbe699a68154516095e0a50071745677af5cebfc001efee2e10d1681d15f364917e006bd010001 \\x072d43d4a3d454af69e9f3e6d60dd5e41db98ce9d518ba61e0cd493b5ea62f3b97bc687524941d9f83c12e38e27c7fcac342e2016f9f4b859a7d2d71e6a1c006 1651402891000000 1652007691000000 1715079691000000 1809687691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 228
-\\x062643153952388104fac280d1756b08fc0a508757e85563faa6b118df746ff1dfda2b2221b1d16336c4c3c507b99173a75d4988971aa1331793e24f39ac8d6e \\x00800003d5e625434556637255e8865c3a591d52649c2afb9606d976aee302139faae7690272b8ee0d5fa2cbc302a467d2fd9468bcedfb9f6711e9303944c9702b73288d5264f16e8ffb44b567fd71c8e7f715e22ae03c8a9fd6a7e515ed30b47d2de40845035e0d00fff93ed618cc140e0e1cabe3cc308093b052efa2934f6ac00e3829010001 \\xdf8fdfbbd8b9e2e8c2e9320163da8120ac1fadfb1109ce0b1792bb0aaf20f6a9c86372bf63abe2f0562d28e2a72377579e3f916aed0d123bae622109c4a78101 1639312891000000 1639917691000000 1702989691000000 1797597691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 229
-\\x0a768bda6dfcef2841aea33600d0180bc5593d97b24c85809cbdec3b79579559c5ca5e909041c4bd7fe127c27e82ffcb40a11a47d1cb9d73b8dd8d869d7cfd4c \\x00800003b5831c05781b3dc7de5f3cfb8a19445b2a2f9b4e1a2ef1e4727fb0fd7540f3e624c10504a123017d276a58ef9f287b038c6abf90697c84370c364474a910dad19e0d5905544f26ddbde137371be80921b954eb876ac0289132f950fdadc2d38c31283ec84e86b9c68a60a51b151533211f9f18681efd5c6511dfead99d20cb1b010001 \\xd595c710829d227aa3be03ca355cfc330c1f95db230723ff594c935fe93299802a8a286c4b197a7c312feb90ed20552a6dc8e38187a5e7b895a6d3cd80661a0f 1645357891000000 1645962691000000 1709034691000000 1803642691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 230
-\\x0e6a4983a344194f690c6e77d238e74741061c540542a0dfaf98befcd7f71075c6848807e077f6ccb9cdbb734b309feae3b48312140e69ed729c6d5448e1d479 \\x00800003b690653d2b9a1c63b7f92d655f3ced7bbef5bba85c463d20e81dab4e01512ebc9e03e5211a742cae4e2a776969c686b1b57243738f2dad938ff7dc19888aa8eb98ace7128d31af57c6908ccb8a6762ea73c88328d033f3076943391d7a6a6503c7bcb7884e65cf23d0019f50ac3bba45031786e22b987036609d4b96cd17ffa5010001 \\xbd3a8c1828873750ba742667d2c7d52f0e70bbe135ed287db8fcc244fcee51a238bcae8355935968d6ca477b25d9cbfab95b43dee2ffc348e9d4b6167656780b 1655634391000000 1656239191000000 1719311191000000 1813919191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 231
-\\x0fa66c262e375ad40e02e2ecf988bc2da2d3cb750c8f7c68caa854e3916bff3146099e6257afa973c92168f4cda18c4f27b2873bd562a97fe0f1672112334a73 \\x00800003cddbb3d70873a1b06bb8343f9f121e3a041c2fa0aecd731cec55fed2cfbe540d795c5d22754af8dbd641b321fc9100e84bcd1c718f37073c4ce480c0a122dacca01ecc76c601c6f2764e2e60cac5b6dc0e9902938ddc11486d22f856b4ae3ffe724e6b1228eb21eae3b5898b0aa09b06196c25a535f8f903924f95cf5b080899010001 \\x02127760966234f93f98f80bb512bcb727e2c0b52a216fb78cbb471a355af64236c7bb2d26a103e760e139b00355b3ce4882391d254ddba4452a237727654603 1654425391000000 1655030191000000 1718102191000000 1812710191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 232
-\\x116ae6da21f585a0366d077b050107d7e2628094949e3b24099831272e64890a773030e944ee0cdf9b91ecb8b8be1d82e9dd134bfa7f59cb70c19ad93ae3a088 \\x00800003b1f1b5170092252a0c1fb5ef0c0fd68263776eb1289ade050e44c3d6ee6fbd6923697622f78bd5f8cf659fe42eaa0417c85a041b590b777436a494e0faa2381e5eec2d157dca3878d0cc98e80e094ddfd448338198129533f396224a54062dcaa5d06c18cf1fdfb88f55358cd9b10ce1ef290ac5d3938e7511eb435f7438bfcf010001 \\x4c6f44ed20fecdc486d1e485fcce3df82c33a99bea500b71e2ceca6bf38341166730423750a0cc2842f99de9f57a1e067dfdc566a223c329355a53617d3a600c 1655634391000000 1656239191000000 1719311191000000 1813919191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 233
-\\x15e67c803a3c88b11bf654c1612ba3f6b421b43b457005f1d8753bb0921d940cddaa1abf7effbd3e6457ffa460dd22b08270f6138f5b09fc7ae4fce10ede7523 \\x00800003b0ef541b67b0b9c8e5656c3fbee5807312422ca964f1a01d146322a08c7afcd92c8ea1dbadfce9e0fa5c0495a55d61cd4132031e69b71a93e680d7244997b3dbd86d88d7d80efcb9fad4c73cfea39942d9ebf364539efcc9c32d14d5d04bc10d7557b78796f0f2957281a314a88b4348364763e505e39c516c48133b5bb15aaf010001 \\x0feec0da9f78868acba4778c9a4c5caddd57e54f8b9e918a7b94c0eefdbb356ebe7fada4cbc5352bc7f002f29ba03fbc63a8d5af9f0b64685e101fd218efb404 1636290391000000 1636895191000000 1699967191000000 1794575191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 234
-\\x16b2085d3904ef2f7b3f267781d361e5b63c899f0628fe048f1d76d46a455955a503e2a28dd4e74ffc5da7c68d5a3df2f4e4b198fe0b05ecf4a83c3c973b5c65 \\x00800003e505ec844194132e707f9a4388391c6f4b344c8e821edd0c7b646c578df385c69e070f030799bd05b1e0b8f650b5d7ed0834a7b363d64bd91a96ed3c864f2d65b0ce705379ec08cd9783c7a3db654211728805a1f00d7062d3034b7417e2a2f5388dc64997b32ddba446d7bab902a0f054545fe35a7095e6e3abe24cdf1b3d7f010001 \\x22d9ff519dc30bdeb2201319ab691578d2194b67763580af8f8e7dea76a4841c72f573958e16e93cbf09d3e6836bd6a40c2e846b18120f301c2bf50ede5c3e0d 1635081391000000 1635686191000000 1698758191000000 1793366191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 235
-\\x184e3d9bf4aa27338b554bb0761ef2e7b0a0ddc14225280af1b52dc74fc66546f079ef1f1f866cdb3f44c2ac2e4e3a86630d397916299202de77a02a748fd2c9 \\x00800003d879442cb209bf72e1a96a59f22edbb99c7e1affd7e0e2e9356c45b9f45a5c01bb64d23b1a0e37098a029d3336f05207d50158fe823dcc520ebc9ce7c4d39a90ead88e9627324a4ed2a069361fd9420290f1ce4305d6269b06c899ffb92bf320c387a5ee22083de7fe3228c3da71ad2d0a3ea17b7319903d6aeaa888ba1d99eb010001 \\x93301b3a34c0ffa19f753e355ad8c1aa4bafe85739efdcda41269e616ba37c488da393e0bfdb2f2f566aa5ff6424013ad114f20ab676b8d3ac24b3957a7e570c 1654425391000000 1655030191000000 1718102191000000 1812710191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 236
-\\x19c274921ea0023d2199908490155bec074a6929155f60891ef4e08109f85df7f62ca3869d703d8c53615f018b0c8b4f7df3e483c8c884ea8c48e5d5a4828c26 \\x00800003accefab796e88b3bddc6d7c8c73bd096cdb34133d6e8e1891396663b335ed155cbf68625d8e365632d28c0083499932c2fd6e7b97a692da48786a393a7ad027a199fa17271207f4aa2d7a0dc1bc343075d3d08ca3a34badc0f4f559ce06159f495be7a58f1fdc00c156e551fd7e1f8774b629b6a2e3e97f37fa9c302f507c585010001 \\x12b64919213a69eac8580b0d9b131b03c544903acb2c2f667da5ca042085f21df88cb444d15eeebc57e8aef9432f89042184c8e4f5f76adb24eba92d9fc0ab06 1652611891000000 1653216691000000 1716288691000000 1810896691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 237
-\\x19e65b80dc9d1e551130132337597d9286a634076d1e6c66f5f5fdbed1ecf4b95f81db91ae6360572ef9cac584b0ca9d4e3e3927cd1adc6fb02ac54c6c566cf5 \\x00800003b1b96cb120ef2251e6a933b8b6b5cfd258087a25932693ca26091bfe0024440f97064f6eba032b86749ea9e269928183c8f2676b422391d710c3b82cc7f2892798d2d41a6ef16092c6e556ad75f83063c817e7a1de9f5090825146c23db08459062bb6847b5089828e2969c9392f3f5704a7b5107a1136c864d3a3f6b98e947b010001 \\x16983efa9e9b946ddddaa8b617548f87c05c7eefc2a9a295185e2a4baf2ed7af94d61bb8da39b9b0f1523556f0514bcea1e173c0d3815e11aa67b86b1580b000 1634476891000000 1635081691000000 1698153691000000 1792761691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 238
-\\x1c666b8b35ba77cd61ac558baec68d42d9c09ffaabf8d3e449512e68d44b71018b65a4d37a0ff7b1ce1f5255c1f3a52257e6c30530a4e43b81080e62e2755b2b \\x00800003cfffea2de8393cf6a048208bfe002749cdd83a136fb8c29e336eb69f1fc2fb4f7d08c5cf13a70f59dade2616ca2c6b30b22d6909c9b0f71308756e80f3f4a8b4bccae15e1418bd100ea1d31f3e1667ef72b84aa299ee4faa0a5dac9a27f9d3ada8cd262cb3e30c3815fc23137cdf6bf450d40a2a57742a4e130e167d1552c829010001 \\x79ecc83db4968c74382bdcee616166a51324bd13e1114c40f2d2fd4dae6dedce660ab97868aa7cb7bbb806c1afee5e243759439b17c4048c5b3f182fe34f6d0f 1636290391000000 1636895191000000 1699967191000000 1794575191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 239
-\\x1c5a009fd9d07c0beb8c41d72917c15400f774f16b9516315c6c0bbd2978ebb12b8a91b041763f45c7e31e9ba4d3af77c3ee7acd81068b6b85e986eb369565c0 \\x00800003ee40d6dd628b34268fecfb6eec406a805f0413a979ec7aaa7dd8143434c95c866f3262d5b6a41fc8f9b040b280114b845e1b234bc7f13d572767abc245a4e664f69bc75e69cdbd9a91e7569c9fdaf4a28e5ca33746e4f295f96f8e406fa00d694a58ec754761aeadfcdbac83e1a1e318e0046eb14af2f763ccb921aeb6a76d39010001 \\x3aed0d91de99cc2acc61ae144afe0939f86bf5efd9c0dc79793f2e0b9a4fe4bf8082a9304089088a7e5dcfc387c450f2a9c9eb2014349dcaff1c8afe0d036f01 1630849891000000 1631454691000000 1694526691000000 1789134691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 240
-\\x1ec67dbf00c0e8d62678ae154a6a9d61c6023d107eca0e11f776a004955c982e1d2e76bba28d4fe7d0445f3220963e5e13184d720ccec205f6afcb625b79f973 \\x00800003d40753c96b9a166867c38ae97bfab6be08a17e92053f4e1686a91616c562cf50da9e2c6f8eff28be5c140471149e79038a63916e5cf7f799a7872e3a0e8b9ff8806611638a9374afd234a443a1bed8c0f577ea3fe2ef583ff4cc530d2d49bfcec1f029b0ef43ae29d0d67b1fdb546053a0bc4c1db7257aac2a493bc8fd6d374f010001 \\xd2735cef2c582a57ee092c6b213f3309701d467ecdfa1723d53bb5da6fc8fd8000eeeb5873f973bf6a080e00cb149b736e4208deb3afd95b07a67ee64dbf9006 1632663391000000 1633268191000000 1696340191000000 1790948191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 241
-\\x23eed7c7c425678951148fc2ab4a938a3057870e5a4b39c61c20e5588881852a1181e449e85140b83736be38121b3d0469994d94abfc1f25f8fd5e9d744ac8a4 \\x00800003a123c67193279a38c05a260dc9c4a744b5a9271403e313df0364561b8b1244e1c01f96b99bd0af05f12b0636ac652e7617a0e46ce1b4640c0eef8f217a3d64dc87eb8ef7df2cdc1a1ca447a961014678b10f26b68f6f2f760dc3efd11c38bf0b6332b489fd3f984c7bc1cac5c6854f7b28deadc641e892e20feb043a7f247277010001 \\x017826b3b2cacfd28640d2b595576edf09a1451d427a29f4491c4c8e8bbbb80bf45d948f97bd6c108fbc329b144c7b00dcac2c13ec52857e63f249401bb4860b 1631454391000000 1632059191000000 1695131191000000 1789739191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 242
-\\x248e25a02a5100bedbb2c91dcaf8ec3f32f2e1746ffd92bcfcae6642bda71ef349e7b779a08e48967ec5d8d0e3918eab5bf084cefeea83eacab83479973d8a5a \\x00800003b20a26600ecb2b64a71c7c996d02c58a88b4af948e7bace8dbfa5cb0735427f470f1834c773a54b7a5b0a14f999ae3ab0f72ceefec38ed5fe35d3d248d2e15115800d7813059b694583b012fd95bd0e550bf882e37230834ccbcee7e1e831464247ed1e9fb19feba8fcb57a513fc412ce02bdefa20fee46061753e3205ddf2d9010001 \\xc5a4893c8cd8f0283f55cbfec7a9fd5c78ddf2acb85a38e410673545a165156b9f8d3327fec86931fa60282c84b114e99e68fca24c292121cdc007ad248f9a09 1634476891000000 1635081691000000 1698153691000000 1792761691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 243
-\\x243e8e8c4bc5ac3b47cac8dd5c5e44f99af9a29c72f4db884934873ba5f471215d33d826736e87d8e5088295b974856888deb5e3ef57846ff6665ad31cc87de8 \\x00800003e89e3b30c12396bef405052b30788b8ad83d2d37cb81aae772e87018e167a39647b47bc4a8d0ee3be8071dfd09debf9f8ce17a2f1bbe1a13e4fed630a8191f48bfc2388f121b2b98d12c61659df47e6c574a63fd854b77595e3798258fed639a126f01e060636b07df692b348fc4909762ae3124bf1fd664a03858b0b43867a5010001 \\xfe3ee9b1fc338fa44e8628f798a6aa33d992c696535c12a53688ae7a80556bd60cf3116f729e3c7d4d255e521dacc0036346a7f29eff393cc607943762f41f0e 1633267891000000 1633872691000000 1696944691000000 1791552691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 244
-\\x25922bcc22b1370758e97d1b6f15a9b3cf806d3bfe7645f8ae3163da8f2f58ae0304dec5773b44494d8e5ed130a5124dab70fde8cd33901062da1617a29f77ba \\x00800003c770f55919953ce60eccd3865df89ddda806ad56e89a47dd60e25819a337baa780a1a8b78fe9dce319743cde79840f8148d4dc02601b20bfd09012082986045172a7a48e0459f1e5a29726ec4300a2fb7ff528ae29f51fb2ea71bd1e6ba000f7fbaaaf3dd59235fd91c2126579358a73785701e96e0cd56aeee54834ee6f890d010001 \\x7fb131061e3b83efcc1018eec82d89ca27e9df869d5b6291f21c5e887df7722426b90c893d149593d6ba2aa6b3333d1ca54f63232079e5a52ec33de399176807 1646566891000000 1647171691000000 1710243691000000 1804851691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 245
-\\x26926eb29b605c8cd71e4c67a91a9cb5b81c5921fee8d20cccb44219eaf828235d58afca696b2431e3e2aa6b442d28dc725bc9c7ef5e0cb7b168bc376b284bc1 \\x00800003b8cc98779665486ec72c86663ab0442cfe41e0f3b576cedfb33ad1d4dc5da50908b8af2ea245fcfb624e4f676edb4c57b392a5412ff3f14c5404426ff249ccddf0ef2b5f09ba99444afcc2e0faf72a56113a2650222ca39804697cb8ca012a88ec262f55457ab88dd02c8a432976e85fe191348ba64b0d0bb0e360378ecbe79b010001 \\x32547d6152dae9d87cab39e160c7ab2c079a12be7be1d0002048273af6096f410bd02ea66a35179b0cc65bf652c5716c71ea92d267b7814e2a38f254cc577a04 1647775891000000 1648380691000000 1711452691000000 1806060691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 246
-\\x2baa5019a8c9969d342ae66ec78d16196bedfb795a1545e7c8c8e1a863f22ce0a5c9a84c2a3efe59a6bd8f929a41b23d3597f0f540a46e35b67f3c616b8d278e \\x00800003ad5768a8be0f7251163c0f268503b030cba9baa98c101f1372eaf47bc4c3b98b2a618e38c62131e2743f12f6a6b8a17b6e59cad03ae13b1d45f600f9eac3982ce5a1e567e7eb5b499ad030a6e70ef2800743b10265329ae490a3805d7426d7c5624a1aef0a70a8ce0cbb8c54a49204e89e8e51278e4ed6d29780e2b20eeadc49010001 \\x141d484b96aa93da1784133b80c2c760bfeeb861e483fe4b2125152b68432daaca21e17e2b245cdba9aaf258a1fa828f925bbdd5ef9482d76b8d48b4bd068e07 1630849891000000 1631454691000000 1694526691000000 1789134691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 247
-\\x2c665ed70dc71ec94047f4b7e863b7abe4f83e7973e6ad746d23e7f8364853eda6d504d04384dca0c2dbc34ed555c1140052fa3ac11da29fb8ba753b28e529a6 \\x00800003d1952262d0d456e05a6908f566dc483e7e6a9b2500806a4427b88988f8e14b028a05f87d908a91d2eab129f05844ca6497928cd287c773bc6fc4446e43072461a8d46908a22b77a84cc767a644ac2cbad04c7c17820b1da7680cea17308febef503cb90590ec99751ba4bb59bb8f67669cd5a9066b8231016377d1a64eccb11d010001 \\x8be294847c5707e8552a9acc03b0db6cda9ff5f98eca2769820892c19ebd088d77e54a5931f6e1784aa73bd2aac632f6f77e9e1d6f398e05eac74dc885035005 1659261391000000 1659866191000000 1722938191000000 1817546191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 248
-\\x2e729abe8b951c8e4cc28ac36d7f03d46d454c56e1004be2db2a79bf957c2aeef0619330791ce6c6e8cf7ae525c3d5fae14fae759befc66bd18429571a1d70a6 \\x00800003adcf0371cc7a5fa6cfe1d9e2c57ddb72a113f7cd4abce2f8f3348af27108546540efd61b0f84de53f9390419e40146fc1a6e11dbba67ad1cc3ac5458ad2bd251e19244b473b8096a57dc7beac5a9fa0a2e60002ee4d5b64bb2a354d85708e1aa2e607a8ffc0d58c32fc1c2c41e9593858565d8a175148978c405e02e3aec6907010001 \\x0d76079da00088e6f65983de0114dbfb91ddcaf211ca2091e402fcf2bbe362746fa10034c8e0709e4c7354c7339a9a757c9127cabc425b800f4d4c5bae168102 1652611891000000 1653216691000000 1716288691000000 1810896691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 249
-\\x311e447a3826f579d24e241ba5e401dd562740f37a32bfd65e4658095eef57e8a1bae24baf0948289ee2a75cea02ce359cfe9b453d9550078405384947588227 \\x00800003d42e99ad013b10d658505e6a9b3b8664ffe553a869ff93688704994b5b904717fd0a175a1cc95f8b030ace814fb433b13ac531e83936e5089872e73f7d7d54c70d5a6d0f9a6b998003bef4b2531a2d5e5d638f995a83ca5b75fc6cfc4e1d6d7eb05985031cfefe9e10f39c2c7bd3a0a0e4838da0412921dd143838b33fb21133010001 \\xc00be5aa7b7f5f9390f879fee6d330e8ff710399c831d1c1e6126cae31320cbc9f0af607afc65911f492bf8a1ddd31e150b97efed11c8be44f9b19b1d3ed6c00 1650193891000000 1650798691000000 1713870691000000 1808478691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 250
-\\x3172fd2bca71e74eeb18ba7944d100353c3ed3bc63b010c5549ea238bdf7d3e8c8246306cde5d09cd2c0ee319a2394afef62f6d537a9a48b4dab27914b24141c \\x00800003b7b97609530979d8b968abf736cfe13c7d8a58c12a6591e0cbc5e945380af37bfb77685f3b8f9de40d2603150306d3b1c7a4037d11b37819367446e49715bd89e436d7b85a5b67430d7d3ca3a5a86f6199308d97804995b4e1cc8bda4e1da1cad87907c91857423864586f4bbfe5cc00643627851129b99c50f0c100fe5dcc0d010001 \\x8a74238a85fdece0e76c1b41b90639458ff6b6c1cdd4b1fbc4385d97a2d1cdeebe7ede6d196e6ab46c7e81dd9173044c3b06fb652ffb0911b5a8fdff38dd5204 1636894891000000 1637499691000000 1700571691000000 1795179691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 251
-\\x334aae358d8f0c26cfc08ed5482e485ea040cff4faeb18c49a7b8d27da5dfeda4fbabf19037da78e9dd0b95dcaf621d316aa550a719f0a0dfd7691bff59ead6d \\x00800003b96a8761c05da20aad4aa39ec789fc5cf61c4859eadde1a9c960ba14551fb500350fbfb04aada190cb154beb85a86a63220c308623845c7cf1c12c14fe50fcb82589e674e170772ec10356acad756b8a54623950257e2253257eac604be2e36815e773a4b4804c45fed1e170acdee8d76d3c629185b92aac3b5063fd94869ef3010001 \\x26c064237f7287c21beb06bdb69ac1cb453e4b1713f299363fc7cc7218f386693ba6a6741d63e2d0edb21dcba6405621f970bb3fafa0cf388c3e34925b50e903 1631454391000000 1632059191000000 1695131191000000 1789739191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 252
-\\x3e36cb41d44f304809e585f4a22b4c000da5af6c3f67e6d664512f89fa38378823c762823f11af502342a0081d33adf29bcd155d1a8d48f508fb8a2224cccf37 \\x00800003b1a36ebebfc13f59abe73b4729c949348fcc86e8a087baaad84a1572eb8b908e0099e7c172f2b0fb77f9980bd25008323817d3d43a277a7e583e8bad9a4eaca4879f034ebbc2458c7d5d88734158754dfb5869d4bfa3d52d9c8728ecb7cd67128cc3502b121b2a560060dd03eec439c919b82c560f5fc618076cd7c89f141203010001 \\x522e43dd4b2fd4e704fa3699c95be56222e053c7ea3c8483046e0b49879ee6414eff84f858cd7f9bd354d04cb05feb2c2f0631b83b0541c4f62c324c6eeb820c 1658052391000000 1658657191000000 1721729191000000 1816337191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 253
-\\x43d2527b85b078223efdb94ef66225149acccb9a8d9a13a22a145f6b1865d008400480c9c4497770291e8a5fa819bff6751ecb665927c9f06505b1753232492f \\x00800003c8ed52ce9177712647dc2c643a30cbc5e076a50e4e7aec14758f4014d5a2fe0eddfbb4c79204070b0f5b61eef76d4fef90f5367662d9bbfe6fba5a702917d48931fd2b0fd76d68b76c375d8b685a3625842a6ba7d64c4cfd8fcbd90fd4b75ebb45f71fc90d54a40390ad0aabb49b2c4119fe718598fb16bb718474cb9c53a4e9010001 \\xf7aa87a2d91d342074405016e8a1aaf4c7133f8f0546ba392a6d307ce1ed669d8336603da30410705347399b14fc34069ceef26da425a054b8499991ef9a9106 1650193891000000 1650798691000000 1713870691000000 1808478691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 254
-\\x44ca05cff265bdd1c95da45cb7289e335fa9d581d89adfae7df9bb302be6fdc0561df351d6c5eb503259b9ffaa724d609f8b2d8900b3e08db2a7d674187f141f \\x008000039c7df56b577b95544cbb89b2a91e783cd7a441d6f8b2f00a8380f621450111700a5e0bb3ea444eeb24b29a9cf0bbd9902024530c77cc7e0ed430dc721015d7098a0fc2e18c443a63a4d6a4bb90586880dccf7a1dcfa5e41775c9cf235ae9aefab070736a1e99d7e94affa48ff2b89ce19c7ad1df09a2d30a4c30fdaacedd3e77010001 \\x086c21d80398122284992289b11aa7419a8ab3cd9dcf08d9f4a72972d3bed92b1180f0236ed400c5d807d591b9f947615b96abd059df944e97e965b1832ff000 1653216391000000 1653821191000000 1716893191000000 1811501191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 255
-\\x4cfa37e570226c4a08ca9e7ec6ff1d9221595e7b40e794e8507e9f378e2ffcbad1887df8266ef04576af49d06221547f87754ba43bf025911fd29497a6f527a0 \\x00800003b5d77529e56124ae9d752e191332cb685dfd0c6e549e9711663e528b253b21b2e99964e20897b0663b1ed0d028335f13ee009d325bcfe2fd6ea964a7f2141f7972a29b1cc5826f1b91ee6a8709068c875c8c7d819e12a5e55af00f90a09acb97776ac320c309af1da239b0ebdf5db2bcc2bf2e253aacc81b945c0a35bedce08b010001 \\x36e830ac232838b025850bf747b7eb8726423278e7e05bae2fba3e6336ce73d42ba176660b93f09d8d94940e49cfb58d5f5269afa19341c34a5c9e5b5e6c2409 1634476891000000 1635081691000000 1698153691000000 1792761691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 256
-\\x4eb28570074870dc5f4173ad71a778fc6d2784cf116346b508f29021c7cedd443215dede3356b4f14536691f905d8e2897ce2c1468b66ab8ef66d960089fa356 \\x00800003bcc4cfb92f8ccd2828f80e69fabca5fa7bad3728aa8d03e0bb98ade6515c9fbc20e59f0688cd3065054eae89fa7057eabb11e709ab953acb4cc8d8222225fb2a2915cdee409cb268a1c508414b6a6d1d17384ed42bb92922f19c48289bd855481b6c1c520b680ba0316611c051336603b54012add33283a51309fe53e80760df010001 \\xa91c8c861a28c7a82f5aa9a8af82304a3713b22d9dee9e8b49ce500cd6ec08f27a8d0e433c1d01f4d8b5642ab8ed51709905d1b02633a254f26b7d1140c02306 1656238891000000 1656843691000000 1719915691000000 1814523691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 257
-\\x522e66641a04e9e336551768ece2a7bb37a2feb3c2f7ac9ebb5d7c1793b1f9cfcd29b86841ccac6b6d6a6a81fa9d89c71b438411650c27564b9fa75108f7c322 \\x00800003995b7174dac7bc457ef2cd0933ad2ab81833e72648f7dbada1e099028c835cb4df697edc6396e21d5f00f825b5016c0e0cdf25b34e67f8a3e4cafb55637b42d14a284324bcae713089754317abaeb38260e38995fb0bb7406250dfc3ff75aa14920805a3385d37657aba449791cb548bf016b6fa5ddc7fc2ef720e6069ad26ad010001 \\x19e9b8283007af23679007a387082705420596bc888c9dc4e61aaa897956a593da83f74ab70c804df1c5219e1939dd9f442a1bba23cd4acc31886179445c8603 1635685891000000 1636290691000000 1699362691000000 1793970691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 258
-\\x57aa0f388df0fd05c50f19f649aa17a7d5a4b70a6fde93ed6f6d065b11023bf9470382126a9262c78a7162ed128618263de639b69d111fa8fce31b2ec8c10fd6 \\x00800003c194b6967d19a1e4337529b686f96919a9a97c032047622d13287d625b3c3c9e194db15ef7ed674497aaf721dc6c573ec0df49ce8564c052c4496d54ab4e4e9c955cfee2152835f7d6d8eb90a4c6c8b7a6787f10a76eb72287deac52ab24edaac821adacf8550ddac3fba2688f3496869c229a4e989cad3d36688ade302ba77f010001 \\x466de7bde74148f2e255f1bf3e2041a994b428b660f489c2439131fc310933e0663542287b974dda83cdc9f3183733c1b9da2aa3cedbfe1dce3c7b2df0c6040f 1649589391000000 1650194191000000 1713266191000000 1807874191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 259
-\\x59be73c97b2fa89da1ca18c0f1f5af4d9346c2b2f821c871d6c5f1ba8ac7b05fa7fb6a56373601b0db614b72a27155b905039c902e22dd2eb8db3d96394890ad \\x00800003ef50435b7ebf75b397ec7828a64ce4843b03f0be80a2c3ea6aaa854aa76c73646c3ba1c1be020df8af1053e5918fec8d00b8a0460647e38b99b8d3c210d176ef974155a4e1e02210f0ec1e4e9a1d34ee48e3ea0dfa1d6b0fe65f3d93e656d08a9f189005d9bce813e775d7620b6a8b6b378553bfd7721a8bc6ff46b9525a6201010001 \\xe20ff1fcaa119642ad92ea5eee613c3c45c6033b858ff5420ce3906aac2ec88a70c5bc6f11fbaccd21882aa2b59ba1813735ca271dff84c5acf86993e87c0d04 1636894891000000 1637499691000000 1700571691000000 1795179691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 260
-\\x5b02bb5cc447e1e98318a493bbb5e00cbb9088b8c67e3dcc2b1d123e0ff0e47fddf888d5e72641990ed9223290ddf2cc5c6b542beb0640517f8f38faabfceae5 \\x00800003d3401705912279f8aa8bdff83ab9f135c28d54c833f0a556ce57b668c86113f94941cb62b2178c58fbb074b9c135f88f418c18c44e747744d0f30819e8ea129ae48cfa309d75aba42ead90b449e5fd7bc05494c5122f8cef49fbcce2d74b03e560b79da5df54455a205f98b6008dff84043a450c78b8be65ee8568f919b28225010001 \\x007d1a1d5254d1ed6ad0ba69ea20576ed29fb1f2351e7b88fb4cafba062ac5e5693fad6b85c27a18712be467d75bec682db62fbb3cb08c0f46a026b59896c60b 1651402891000000 1652007691000000 1715079691000000 1809687691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 261
-\\x5b729afcab2c02495a00ed0d561554418574fe3b406fff98a73b3190a34c4e2515ffb4361120e709043a721b56de8fddbe544f6f366fef22827480a9a4bed2c8 \\x00800003c51916a77c43b151d4c515fc9294523df4009dfbf0d0f945d17589b7b96cfb24c4d109f64b2c1955144b18a9ea54cda84122ef8a02cf37c5fa32f533b044369c4b6fe1988005ccf1088f845bca45c89661ab150cf0357ecd7ca7b75277ddf0e06341c26a013289ba3ed7205ddb54591df17315972726fa40711abf633dac1c05010001 \\x96b39bb086d75a276912e111bc8da9677c61532f6c5c37da0b371d6fc8e44aa05f9f95d5215ce624b9a40723fe46c9fa6e6da255498925e79724a9da3d25f407 1632058891000000 1632663691000000 1695735691000000 1790343691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 262
-\\x5c46025219100fd55936a07f340b3de1df7c97cdfaca192c1337165f73cd56ef9416f9350dec8a7418877957c2622d25c0c5fa2facd24615c320a72675a54867 \\x0080000398ed1a25c59fcd0e2da952b12e55fc28b634e25468104b094bde6d7e03c4ec387d87e33e5de630c9bf1f885d7e56b68ea1dafdeb14dc21d357da659b4d2bbc1694be0e64507d37661c4d8c6edede35f0f0e1b861a6310e712e31e9a987329678e5cf85d883f64a10cd6b7f6c6568c71b343dc72a56193f4ee5d96377de75b655010001 \\x484c48d65f35c5e7174624f3c9498197639bb5befdb8363cb46d170ff81466d5040a9f5f580d55ee1011863a4fe515dfc7fce7bcceabab5209ee03db8240890c 1648380391000000 1648985191000000 1712057191000000 1806665191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 263
-\\x5d5aa0235d1f4371c25f06c38c05f57a29d930e2e36b7aeb3189501a05595dc9682a0904abee2b190b2413c73a688176c3b3bf60af2de837e9891419525d93b5 \\x00800003b772513d600fe0fe4d7e3c71bcb6bba2a40ef2cfdb60825b2913e521bd7eb8279ac1a2a9e6eb56ba27b97f347e1b2155b6a3ec36c4ad3bd273d1902bf18330c9808610cbf0b8ad95ac0ca0e33ef6d9cbf67494ceb64be74f223774eb20c70d703c1046d1816a940c004a17a04aa1f851df364a5e6803e263bde6ec7fcd8428c9010001 \\x08543247e985aceda85ea2442584cab15c2868b3e3d7d549d7eae0a223f7f420ed7b594f711c694a59eab0fb58beb2087be4640d6eb9d6e78b77954e1668ce0a 1655634391000000 1656239191000000 1719311191000000 1813919191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 264
-\\x60b6cd3730b6aabc386e38d52cab62b60bfab9074b7b4eb51c2e142b6abb61a879afafc4fbf917f98fe085275a61659426367d68146134d6908f741c41c37e19 \\x008000039810fdda07158d0004cee8045eacb59d6e7165768ca2a4ca27bea315483540639a2c6c7d45edfeaa03ec628cfbcbd2b8b108231c901ece8a5a0c4fee6d3cdc111607422afb128cf1eda6a2d667b59afe55063d25daba415297f7a1402d954aca59a2b6ff3ac94315882023e501fc762e08fef30dc2cdee924d8414a5edd0f12d010001 \\x1339414c8c5899b1f8f12a5b97d4abc03de9005752ba28353bd4291ff32b6248f8014a83f10c817057f4ec9ab8d18dec4c12f8a4d39aaa7f2112d3aaaba92709 1658656891000000 1659261691000000 1722333691000000 1816941691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 265
-\\x600e09ab6b09b0f57c7b63a2724aa47ee23c47a6e356918b0e8deca5781b2f8a290124a1d287006d7a991bfecddd3767db16feeb0f4a5076504c7c410eddf35d \\x00800003c205020e39d9b5970fa9ebb090e00a8316832e9606ccfa535de7844444d39c400938c951ab5db14a54b67fc7c232590036cd1ea96248bc49bc7d66676775f41c8e488b4ab07a3db91ed112545421bf4224886bcbd8d94b34a55552aac95045dfb33110b3c00b6d15b13ae5d57ef3e5e37f759c1dba9b506acc16bcfae2f3c33f010001 \\x4d30efd6ccb8007b76388e805ae5d8223c78b95882b2f165bb2df325c792ff575d570ac2540a21f317dca993461863d5ea2244b364b02e6ef3caa52d3a0b390c 1659865891000000 1660470691000000 1723542691000000 1818150691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 266
-\\x626acf5366e44587d7f075c307bb57f3cd0cda620e5ff4a421bef0ab742854489e9a4afcc187b4c3566ac8b3926a490a871063b7837d4bd03e4c7c7db7240fa9 \\x0080000394f8256b8ab92f38007795e406a5fc7a0427cd1f97a0b757bfc166eca1ee609ba863f6c6abe1c012c7e0ca7b9008d702f9fccc2f5895995183e193a12e4dc0ffa4c4871fdae7aeb42d7874d708c53536c47dd739a7f22d512f8aff1fe474404dce4a60a20c6e88fd913e83b1e9f65e5d49e57fd2b0f9593a30780d38d3a0b161010001 \\x869a785f2214d0b911c4eaf2b874239113a0ae4fdb8813099c49a770f90e5321895eb38c79feac7cd5a330d9b737e3afd9a1081333c9062508c7d600d8a10505 1638103891000000 1638708691000000 1701780691000000 1796388691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 267
-\\x63ceea374b5a7b77437e4082333eab276e410c46110f9855d2a8fc4a6cdff0358d3c6bcf89cb45736e242e4871104f63d2b8d2b22549b714bdaed8a50eb1cac5 \\x00800003cb057f349fd52fb7889d62e8d8e6919d92228fce26b6d6a7f5ebc689d64d5eabb33fa03481e93d3ca85b0ca91850564f9079812c51891377f45da92ef842b2459a48e8f71be7ce302ecf044c2fa1a5d018175268357b6fa4629b4832023023a70893851bd81b19bfd6fbfa6297683657a60135467fd09b59a1c7da83e2d33113010001 \\xfe73e05bd2e2d99ea70e39578c617e6833e1f80e3ba63d4e9dade6fed5c3fc91d2ca7fa40fdcecfa977d80eb478a1ac522afe631935ac82dfa3709661ff0d104 1648380391000000 1648985191000000 1712057191000000 1806665191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 268
-\\x6682f24346da3fbf9841ed7302ad3365eecb3154d05ce2453fa9745d114d15a12cef990f96c40dca864f677a3ed7584481c112409b789d50e3d95d84f1d5b71f \\x00800003aa85b09cb2ecda9c80690eaa9ba6d97b417cc0b8d6e514092be2d7c12ef0afae5d05360b5e6d07808032b46901f2ece92685805ff87785b3b0617e7bbdd29d0b32e16464422cf26e77a7036b269c318286ccbbe27185cfa8fad4ce408f2dbd55776c47ae9b512e1572a3b54f3c883f5d923776fae0a2db859026f2ed254e4cf9010001 \\x07291205ba9e6d701ed63757c96af39ecf0cddde9948d124056acd22beac788a08cb3576de7433209df0839da11e93872a703b4c6c967646f2fb41c5ad98700b 1642939891000000 1643544691000000 1706616691000000 1801224691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 269
-\\x68f650399cc93488de1b7486d35bcf8641251581d6ecc5deb0850f632124cabdf15fe708718552970a89b36c5e133729bb8d66c6812deb68a594ec50ff4b8b73 \\x00800003bd62953c183acd2f84bd2d4d9511af58e8445d31fbb5e47c483c28a2d0a833b4c46436d1ef729e487e89951a3be4850447a9d12cfd0d6e741482fbb63011f989886f91d37ce66504c8dcf7ecc54f9c02b8a367119070108f5c69994aebecc815ba7454dabba7724d3d7e9854a70abcd8038f360570bbab354720cb117bc36465010001 \\x0468c4ba9f21ea77ddcf81fbeca5c8ec015dae1fe3353c738fc30c5c87acd2bf5b6b6196f0f8e7e3dd2431d0f133e93da08a95ff7b580415fa03f6bdcf12e20e 1638103891000000 1638708691000000 1701780691000000 1796388691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 270
-\\x6932f805055c9bc2a562d5f1213cbb5133a204f0ea2eac545007f93a9e4cd87bce1dece47e11ca4458c628a9b8d0f4c520be1e4d17fb9598bd850dfe3408bd4a \\x00800003d18c24f5d8fe3ba717ebb5944ccd1730885f42ecaccc596a7e3b8360eac1141eb973829025c8cb06b4365a20388812369f4147520a8aa188c407fb3b176eadbddb9b19f390c4452f79b3fab7d3ca524a6583de81adb111afbb4da3e4fd9a7cec8f17dc9b5142799b78a888767b14397fcdb614c770f5e1085c1ff0a515b0a88b010001 \\x5052608f72d2b1549211a671f9a77b3820d5b4089ba50a352e69e37b205681baadc325647f480d911712c394721602b4cca8096d8e560f3eab00483f6a54300f 1658052391000000 1658657191000000 1721729191000000 1816337191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 271
-\\x6afe85e2152a1bbdeef8c50f55bf41453f88d032abdb85de42129e129edbb1021b307d498611dcff12717638aa97fef18ea1c1cb0eeb7134cc58172c5af6b640 \\x00800003d6a7966b3553ea786014912919a7ef7fe3920f16bcc1ac30f2030580e2d4cfeacd4071d891be4646f0d4e270adbe9c3672795f1e78f1d5d69c5b73cbcf0db7a63d5a88545d2b885a78161cfb59efda57accc8a91072cb261a94002d2ee3ad719e1a6d4e89f75abc0b661729b3b41ef8c840797afa4ada042c153dce24d9bd089010001 \\x54efd6057a0ab7e9acda24ed346cf9bf521bcc34aa34ed2317d162eeb246ca021dee67c096c31e52833192e7c4d551d7ed23305a72b71d4b55e2172256c20b0e 1644753391000000 1645358191000000 1708430191000000 1803038191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 272
-\\x6dba26432eff84b3bd55beb3ba9c232619a8855e5947a36b6068862e897c9698f14b57de9e3f792f63b70ce3d6236822b237a4582d03fee9d9abd345bedf86b1 \\x00800003bc96ea0f723e711dce3b9a9e19ee46968e5ec2e3921509bded64c49ebd448581bfc041183ef80eaa22a833b5f91db10e73abdc86ea7e9d126e63ca7fe21c378a5ac4b74f941cad7af345239a77e9c499c2b8685ec4bed2f9fd7eb0e94a020c6d4465ce595ae6e10da6787e472ab14a7654a89701aab19f1caeda2bda4a0fdd21010001 \\x57d58203ae5245f85cba32f32e7aa1f3ffcf6e7b7fae1f863aa514d0ec081359d13a166fae0716ad6baf0221b475fe0089ee08c7703a8e8281eb549a4b72df07 1650798391000000 1651403191000000 1714475191000000 1809083191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 273
-\\x6e5e05a8a924b315a7bdbe23f9b798e8394f32f1fcce35e3075e4e9409d1b1bbce259684cead560b5254897bad99e166078bb69e21936ebd3a9a68e82b18f681 \\x00800003b5c17ee26dfa401b3cb51f1003afcd3e34045152b01e3c6afd0b82822b0a3570f8521693d366163f67b2f884bd6e69fd8ea4c387322ed7ab2a9bfbd4800d11f483190b805549e0d7c6afe43828836c61a353a9ea3474d6d2ede49d8e8d2a7bec0ee0674a80fd820fd5bd5cc9c94435564887d4c3287e61fdf9d73477de36be75010001 \\x852e1827756ab1e2b9af23a080c2ffe283686735118b13b595fdbeb3c2c49e22c6a8e7b973fa1eb1795cfe61b6ac1eb5431331f16f59f6753559cdb1e9aad908 1643544391000000 1644149191000000 1707221191000000 1801829191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 274
-\\x74f66ee3ccbb376c74862b9c52e587d64686decf0d189a586e5209e1702dd8ada6c26255497eac5dd7c153d79fc0c475630255f47b73d26d596a4e7ffbffeb12 \\x008000039b4f075c2dcc616a793337098921889d109e8753aee3d489cf8776d48dae6182db167ecb4be0989ba4f6fdd21c5ac5a695fde722d50a3e349c9008cb3320de908d93235cd48b035fda9bac53b27d87317aea8094189410ee044752b19a8ad9d20041cf44cc75f2337e2cad6a4bb6cd0eb31db8ffd99ca3aa932195ec66bc7cd9010001 \\xef150cde281639fc919462ad298536eb00ab920c97ae06da47d50df36e5a6225e8036ec01f5e4afed2d82525f2bb992bae038cff472435390c6fbfb52b4b520b 1634476891000000 1635081691000000 1698153691000000 1792761691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 275
-\\x7baebe6199330020075c03ca7852a9bd4040ae0b7a372d92ec921371ee9a978e25b5dde2954f80f11997f57465f2549b954a142e7a73e1b4dc16738883d9660a \\x00800003dba47bd148bb14a9fa4a4bfbb5808cee64901c08a5066c1f0fd9f261c796794eb7a6865591395817b2f22ca4eb0b616d607309ae20203b9c0af1b59ae7d7825a78a29d79f3c98b4deb1e06458e0035dbe47207f5c4e322c5e43aa86e6eb5a482ba257a0ccaacad3be599e21f608921332be50d016da79b2be1c6d2aec0ce9ee9010001 \\x9936dd1304043b67cd5f8789d566a6381785c86e8f1ff432e08006cb69146a5ea229943d7dcc85704dbde2bca702443a3e1abd7019c9456a3c66d1dd6b9e650a 1641126391000000 1641731191000000 1704803191000000 1799411191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 276
-\\x814ece6fdafddf38eed8565cf9610f7de6d3e288dc2c253fab5e89a383f4d329b779aa2b3b982692ad0fa2ed976acd9eba36b9fac03ff488c9c7cf961651c0f3 \\x00800003b5c8e12612088e7360708a19b7c747c48a91a7a152fda9dab277a7f2ab0b65a707e826f571d53cf58106e706a2509d190748202191992059f173bcf2e2a80a85a8ba5ae8a0ffc483c29de600caa8746fccc50acefaa2a8ec935e86c05f1f748e56b1a4ab9e6174c6b3e0da1633b5a185115f917f651f432e6ae137ab2e1dbf2f010001 \\x7256eb395f5401e70cda0729ce56ec150d95d3dccfd16c665ddfd855c2d073d2bbb8696bf8af8b18f74a009d8924bc1326175797d8d064564bbfb23f9bb03801 1656843391000000 1657448191000000 1720520191000000 1815128191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 277
-\\x811a79ab3e460479ab4e48681599471d8f440ec54f626373d253bfd76055124e1be49a0d1e1ee1f8fa40feada738d7c6938a185a1b8a1df4d6ac361778c7b286 \\x00800003c4b5c16d37cda734a1910cfa3a43c935aea692802fbf3523c050296a101aba842c84127be81c165bfa775a90e6c2a75c3c20d822529b54de5336b26a6b75f8599525ec4d87c066f5cc0974b4f13cc33f6f898f3682fc8b64364a417863d74f54d954dfec19ce87f103fd74c49f210f15c6abd8d56d5ba7368eb2c80fcb3bc3ff010001 \\xa8b1177b26a613697af502ce4ee03481c2014ce1c2398a48c1ca10e99eae71120951cb04773efb04c2b06f491ef54d1f8461cd011acca1a9fa4f2135991b5903 1633872391000000 1634477191000000 1697549191000000 1792157191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 278
-\\x8b6a683e0ab625f7d004123edb8db419a60b9040701cf8717db9a9eeee0d422de9a2c6b3e3ddc497946a9fbe291aed921a028667a393a4d8fa7c7e80c8cbbbdc \\x00800003b80fbf0513a8457186b068587b5cbf185b299f6a998ab7482344c246bf59498c80b49ea5dd2adaf15b8537da97cd556f3e3a8e1d65d0f325ab7fdcb0b602691991b75e22fdda9c800fd7def19f99e19d44d4a9177b497ad71ab16d4d222a7d95707552ebc89b32b6e3ad5170db807701b7b4090f3d9fab25d6dfbcc22ce0c99f010001 \\x369c1340a06d93891edf2b3b4a613200f8798eba28e26998ce1b2fefa7f41bdc23567208d1d8f5867b22e7a9ffea6ec1088bf371d73db9c9e7b66970131fa90c 1635685891000000 1636290691000000 1699362691000000 1793970691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 279
-\\x8e96d205fb86dd51f0bf8b06e753c04772dacb3620469f23df1d8c2726c44b3b45a0db33bf589f18fcce3e296ac6b0712b0845bfa092c2141f18345aa52604ae \\x00800003d5eefa3ae41aa44f5a89a1f68bcd17a0ce1a9c300607099be4e88ff6b80856686a1ac78c81427eb30005a88f0ba0db56019a582a017033333a67c3dca52682caec455a023101bafb9efdad8fd51f59b49de6d35e09d03861e2050e0d0593af72f61624360b1a017f64a2d20b72b0d6c8db36bba0262aa7e119f62a40cfad95e9010001 \\xe763554b68e1ce339ee64737f58453ea6fb68313cf249827d9ecfae861c5907237cb7e8b3205eac8878f38eae8ea6a245151ba2191a6c478d834e6e1730f910e 1647171391000000 1647776191000000 1710848191000000 1805456191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 280
-\\x90163552916d125118f59f90119f0c65396a5371fd5b68a4e3a9032518a0a31e986d607dc4de5df9c7195049f7503dc5a9378c6155f40d90b57027d93d75a244 \\x00800003c5c209821e79e41a55f9496c03fed7b3c98bc2d9d88daa8677c977f41425e2746d6992f069d0f2535bc846b208fbfd3af9c61291d1d9339ca89757113e5a4bf95e5a8164df5f60b88ad184c2c0d238d4ab2dc67b0fe8246512c0379fae734618239d6574d9260e0060e8da122b545c3dbcc9204f0a6f715e2781516d59a5d499010001 \\xe8cbb9ecd2ee79d50bcd7dd11e669696c002b05194d18cbac92446323c4c22e6ce4943831d91c2888f2882880aa049d7d75b6db3fdd2e58e9702c43ab09e1d02 1638708391000000 1639313191000000 1702385191000000 1796993191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 281
-\\x91361e6d3266365f618da85212ae0048f37f766652c2e11b1286195ea486a5e726588a75351842a9d54811f72d9bac3a1e04c2309da3491dd7324206a1a3e484 \\x00800003be9224874065dd632b2a84e8e75ac1b32885b0b526cb07f213caef819c2902363e21505d19d27811083154e19078691377750d3f79ca02246e584a4fc59752a2022d3314651cf9a3199570914c5e86990796f058820c57cd10fca1d9dbebf5eb3116bbbdd28b1d20cfe2baaf73a7da182f45d5314e3f4e28a94863fa5c3efabf010001 \\x34834d37733299c0b07d1ff02604e606d9f85bbc0a016f46f32cb23eb77b072d7bbfb7adc0d315f1a0ab2a9a82445fc91b77ea0aaad3c98303ea9e2a80c50604 1659865891000000 1660470691000000 1723542691000000 1818150691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 282
-\\x931a071af4cd947942b0946e5fd1abc17c9d25e70be30ce74ccf8be545976952eb2ddc74ac9b1ce3aec1f3eae6d5b84aec8737ffdcc7cd1c603a3ff6958b7ef8 \\x00800003c42ad98ca741a3e715564c1de0fee09580f17eac3c2625322cf55158e7a1cfe6ed85004928612ebb1c1a06344f2d401f51511153a1c293ade62011cd0ef3688f35f83b42a1a7b6b8037694bbf2eb7b8b2c2fde5ef75f8194802f369ee7b27d0d1d1d205261a15082c0031ab39286d292d39c007a26e72415f57fcf8df440fe49010001 \\x55539231677e40cd471c23f06f02903c713f4da6e73ce53cc593d3fe2d8178dc12ea0320a3c93be4965b1325cd3a301003df235c11e79abd3312be14b0b38a02 1661679391000000 1662284191000000 1725356191000000 1819964191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 283
-\\x937e76f80809f3b1bf038b3463d77caf25d732c7f4cb6edd3319afaee68dcc39bb4d8bcc3e488ee3899e2b00970b088b842d0811c56ceab793297e4847ef9e16 \\x00800003c118d08b95ce0cefa262ddd390a06b18a640996c966ed366c9443af06d20171aed76c3fa3948a9dbdad33c8cd1775b8ce6c055a5e37d0500a9a45448b61ce6a34e15299c3640c6f0eda8fce668d3f54345c1dc802f6618b64e319a19b96a9b6aa93b056ab7298ad825a86bd13331e64890dc7356820793d46627258924b7ade9010001 \\xddb21795d38caafd2dd25615f102f19a7fc42963a85aeb4141f765ba49da83bfa025b964ea409f2981daf833497bbbcd313747fc0496d5cc62cadac70f4d8206 1645357891000000 1645962691000000 1709034691000000 1803642691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 284
-\\x96061da8cf5b37ef0d4d9d97e49960b6b3bdb97f79120f309be350ccc0a569e02f02ea734770b5b7b35671396fd35a75ddb54c25482d2758a812464fc5316588 \\x00800003d2751ea4a71489acf1470bc332ab7b8f91fbbe76e0f4b671a311596bc57ca00ca04fae99e9643d137b522b4e141d204573a26276374a9919e90fe58db52daa486ca2391030cb718a150d90e5b7603f344da09808a6517e2230f2240524a8f4740daba84ec0f827d346a36f943221a66ebd76c066b987c65230047b74d2963f57010001 \\x05b394902c9653f0d586bf6a2399191b55e7dffd6ce74bc5e5ca6e50c506e96fae5d1736b4610cf26b8b4487396a4446aacdda50735c6951cec03a77d7851c08 1656843391000000 1657448191000000 1720520191000000 1815128191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 285
-\\x966ae9f8bd907f1d81a25461c38faf3e398050bb6b0f30f81e8fc1cbc9a641340b44c8410b1bc5ef0c14ce320c69ddd751b261f20a4fd5a1b4d8f1aeb2ce7773 \\x00800003d9adde0657ca79ef06739c571366a89f97a2042a246b945147e15af0f039b1936ccc7809f748d1b97374b1e7f7ff1a94a4b40f3c9ebe4869fc5fb7f9f18d7b439e4aa5a50714f964cd83f65dd56486a04ff3a76125ff884f50fda98e34f721b37fb0322f400396ec4d8fa04e6f36d81c1f973008b2ea0745b6a715eaa5564e31010001 \\x0905f5a22ca1d2a5c4c87ab6afe2a3940e03e84098da70f0d0657daaa495b126aa220ab46a8759bff20aa6d5e564bd3997ab5f0065d5d011f2fb0bbfc6074900 1643544391000000 1644149191000000 1707221191000000 1801829191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 286
-\\x9982351152ff425ae2d27663dbc96a8e70c4f865c224aed5011065a717048eafbaf532bb7a4152cb18c0e961ff413863782cf36af2f4fed2edc946243d4e7ab8 \\x00800003d2f0814007adc51b2e7567361b2689b755d6deb66d256da1f7c95956c4acd3a01cdd97a7f76ca027657bdbc5e1e0562c73344247f07d6de6a3d559468ad1a183830a0fdaaa6a9d0a13bb7ccdc4725a92de259f0c5cf57ae7cbc4b0342065a6affa7bf40590fb99a92388c2657960178f8a76634a0ee3118407c75564835948e1010001 \\x5af0e4ba1aa0f371377f7d8c375992d0c1f80464cf5253e4cb5a3d080cc631c1b3c6d82dea52bffce1278d1e7f8ec59cfd98293456ef2d493aa635982ab4540c 1661074891000000 1661679691000000 1724751691000000 1819359691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 287
-\\x9aa26574d20871d0a0cfd8b1dbfe96b45973a64450fac2d67d92cc9b6b97415cefb869bea63538f503eff4724a53451ea8b0af3a11647c4743fc5c06c5939747 \\x008000039cb78e4eba6f8ce70875cb01d922a11efb40c0f807639d4dd42008691611d7791496dc5fa59c69bd18bfe80675cee62c2eb58e61923e2f8b3f0e08ff7181da1732aecfae17902f75345343da90200c29a1958fc52a6927d86f37c191e470a8fc0aee6f92b326f65978344deea180c18a2c8c9955f26a7c3bf4f37c37bbab42af010001 \\x005c8b5ec885a4fe99116dd7bb55155b531dc0c4780a7632259e2698333d340db05b9d01f11434617b88c68b7973229d6bdf5561fac45c3efb5819143e3fef02 1649589391000000 1650194191000000 1713266191000000 1807874191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 288
-\\x9a761f72f9597751717ef469d73c568ae3e924dcd0390c5fcea6b7b4e1aa029c705aa843ec27307b1eb116ed0a27b7bdc9939caedd6ac0c07a417aa1e58931a6 \\x00800003dd1037a96099285e6db7bf76d80b3bec405911b864faa7dc495cf155ed105f106115f2b01e9ac0eb34a3af70ca4ee3c655c18c5f5b708f6d0cdf61753f80218fa602aca8f2f484681f05781509eacc21027fded79f48e4220692b49f302c1b0fc8cfe2cb404323aca09444c58051924742701316498c19e64bace9d0da30e593010001 \\x97472d0b85609918ee0039bcaf479d2ab201b28a76480c395437a786adee0912dd200b42849147df925c84829c412ec065f0cd2caae850eb477b86f44ee7d509 1644148891000000 1644753691000000 1707825691000000 1802433691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 289
-\\x9d6e2fba529c08c9ba4af55d4569f3283d3963795470cea1f9405e37080cec2b13cb1d07bc5484f65d1c548e0274d4b0c711ed8856200c4a97013cce3673c0ba \\x00800003b8674041394a75f800cee22453e4d972079b1a2b24a006515729dbaa52e8cf8ae9889cd6ec16ca221bbb424e5804f31525e053bf4b35c9f2048f466766d1313d61f70c46d0635409b8d02eec9e4c8391c75dc9102c78c46dd99323bce2a8b72bb25c667259153daba5e85154ca0358c1bf2b9908b1903e786abb0f11d5aa38f9010001 \\xcea19424e6b7a0626a26ff29d014c6cb7cd5d656cebb643975de33bb2596096085e5b9eb5d1bd49e3af1d910b8c265a0a8a583628c50e026ebb76cafda53b90c 1639917391000000 1640522191000000 1703594191000000 1798202191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 290
-\\xa0dac685acf4995e157acae9b0301484752b2c2e10a82bd3f5d581d9642f073d21bc7da545a204f1a10beafb6ecc92a507d4b571a3e34f0ba3ee5077fa3222e6 \\x00800003cb4258d74dad641fccb167c9731d1298e9c1fb8fbd390c633de4d928c71726ce0896eb01438a92af9782c613ae190c08ce293ab75d3fa915871dbeb4d47c77dd46cf84015a0d7dac1f5dc76e0bb2f07b21d8880a55183878276c9b050d85272669aecbe675689abb0ebf163bbeb1a866400eb2d57412cc4b0ae09918c03d4b27010001 \\x824d43cc472938bdc7676f577b964b2c3966f68c6eb23702ae3520a35fc4152b561184ecb3458c9d44f51ad0ffdedcfc68ba57d2a3e7e4e4adaedbf77c1a0c06 1650798391000000 1651403191000000 1714475191000000 1809083191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 291
-\\xa0862c187c45857af4cc18fe157eb29dd877364517d38e8f9589025147e3de7f7e9a076b680eca3e115c51a2d00813ae667727e27912dfb51d1c60e19dcc3e89 \\x00800003f0570feadc65b80cb6be57538f71f1690e29a97e769414a985b2e11aebbfc16aaed01f7aa3651a1923732d0874940a64abe433b484366f8ba1ff9fcc9e504f14b2878747c675ad938694283ee77df5cc967ffa202b236a6b4d1262a37bb099704b209a3bc44de03052f0966acc097df5e44517591808d63332438011e0412a03010001 \\xe67ebb48900f6c1906923ee9546731445dfab3589b8081872cd02ea2ac545f8aa147fcad3e4624ed70132c90812e7db614ab4e85dc8de3bce099131950c2390c 1659261391000000 1659866191000000 1722938191000000 1817546191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 292
-\\xa7aa75f7f886d60b5d5e7bb3c3ce3b5546325f99322b02dcd2e438d4163c4daea0b8e58c2739fd80483baa375e64e5877962fef1bb7fcf097e69e1f140f13e10 \\x00800003bfb5de8fd7016bb61e789395f3f568e8f839b7463970b0fd537785757205d3bc18801f58c7a684474b353d444593fc43a75ea3090e4dd13028d02efdc454a7698e2ff85453da1b194a77a9e0598fec0c8cddc10cfd5c2f70e42e73f468a3664701a5e5b816c5535dcfcb9630a646c7feb4a636c76c81879c1190807324650db3010001 \\x6a41da41bce8b70dea8a8465780aeacd192ce0812a3c6a26fcfb7d01bc28a2908126a017ec683f14e1cc7f55e5539c70af95f8f2e55458696cac4232d59bec0a 1653820891000000 1654425691000000 1717497691000000 1812105691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 293
-\\xa8ae4f2ad96d3476ac4ef64f457b4f0271cd63eec355b9cbce47d2b5f89202c0c94e23a7f681d3a539551ed4e08751cdd0a30e8971f9cebcc959875fa80f9b72 \\x00800003d31bb8abe82e871f386066c8d4b989fbd0b376c7773983cea4db4400a372a585c29c395432d1e6409f3a02ed2db8c182e1370e417ae6b04bcc456e45bb2c96bcfceef430cd7d2aa0ea960cef028945b165214b6afbb93e5d2a8289a4f68bd03465486b2a44bbf7ec6635999a0b6cb6cb2e9bc7557e578f7dbc23c413d6d0ab97010001 \\x72bed3bc8ad78cac2be6f82b7efaf9f58ce2f7e3a8409ba9a3c19b38e8d1402ffadc8ab0d36ec468260909c3f42e2037483d187957c81f1a992125b4d0371f04 1655029891000000 1655634691000000 1718706691000000 1813314691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 294
-\\xaf7e08c500b923976ac4516304e07e0890c87b1980d6fd10b32de67bb484db3359935a932aaa413da89c3aa106c4787fd6a7648e0e39c5bbff004d423dbb8f5a \\x008000039c9cca6cbae2f5da793c935fbccf6c749359e978da9e9fa078caf05923dd480386e43d8315d9765cc9a8b5d9c60e091bcfe19f45c9d949c600c47cfeba30bf56a95ca814838c3cd9a542eb51d2d71d48bc273d2e2b7e3f2faa65112397e2fc71cda8477d7dec9046da7b8ede165f0b672f0b4de52b255d823539069082f9411d010001 \\x636ee0363d61fad928d12ab06b05e22e70ed7ef41381d1989f7748790453fc9096d2d2ca6eadf3809c7497b07ddd765349c83f7f36c17f8b19ce3d08d8537d0f 1655029891000000 1655634691000000 1718706691000000 1813314691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 295
-\\xb03aac67ab661df308dee3f1d75b5758fc2314fe80c12bc172f9a130c23780812a1026fa341880cfe39e66736533f42c0610296977f6fcb2c72357d515bca4a4 \\x00800003f666a57d96aaa14dcff9459549fb43256c3a513df687719115a8105b70662ef9d32acbc491a165472de6e80b9f8e37c9bc0de6e31818fd4024350a74e8199a57a9de14811b76c8db90cea5e53ffcd84e6f7926757c2dc5e82b6b3d7fb8b5928fd5240a37bbc2cae238927023d709fe87a2c1c7ef53ccb5ed05367b062187131f010001 \\x1ec61c25d07eddc0e34b8825a2f9ea39590efa72819a2ed56a1d08dfe7a20c19de0b1d1cfd8926f245a36dc27914b2265641f5895eadf916c6e13be480d20e0d 1655634391000000 1656239191000000 1719311191000000 1813919191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 296
-\\xb39656cc91ce608cfa604cd9851f8ec189218a7efffe335e620723a761a451b3966ba17c2fe8fed39f4ee1cabdb9efcdbf7948364c5c298b35638c8dd8ec0d0f \\x00800003bc4ccb3023ddb5eefd71e442a302953dd6b5879679a8c17b4bc1bb3ef2ba03d04caf211597be2aa140ae307e247aadd7f1457f9ae1f9e72d78b5affbb4dcb58efe1ea687557d08a0b7f2a57efe230881dd953397460fd0e09a2ba208fdad10dbdffc658ca7d613602a281f7f06b4bc316ae850192a29e052727ea874244efa05010001 \\x84bdcab87937c0c7b2d644cf039376adaad6168a4b58b2865a193164ef964a07e56e05f26584d2bee35629d1ee54b258f249566afa181294b8790580b9ef0b03 1634476891000000 1635081691000000 1698153691000000 1792761691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 297
-\\xb5c6a4ec5bee76e538f6ddf7ded44f5e972402ea766be0289f916f666c6c4a291abe8ff43246de11084250d576654c7a1b075a2c822a5ef6461e770d713d5f04 \\x00800003d009ac8b3426edea7db7c30ac3975ff402c6a382e8e94fe683a1a1a4169907f9f95e58531b9345b0220a029544c10d9f805aecc77377d4b0e05bcbcc97083cd19f8eb1150badcc1a2bee7224219732e0ea1bae34bc0f467b43e5228e4bee8b3676db31b39af86dd6b70ca4420429b22d309ebd0a0af31c9364249f8c2083e6c7010001 \\x1a33c0d9cc730414fddf5cf609a14587648ece5e5ce1ea922164a48f60237e37bd6fbccab4ed1933c6dac11f78357c3ad1f738f831d615e6365c046bc32b0406 1658656891000000 1659261691000000 1722333691000000 1816941691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 298
-\\xbca2f058af5d512f10bd19c7216234e3c4af742ed282696949ab8bdf4befcb45d592574f67692199b98a3cabdf4eb63cc36e63f69a1d316a8fb0f691fb6251be \\x00800003c2e8fa3c99a940aa6b8744fc6c6833a107a2561f836f1599c78bf0cceaa0069b11984962a8bbb38293af6ffb0db265bb3e8e5a39974a85368481623cc9576f4089b9450144f0bbd17da221cb639cbba5c2b8009d2c37953a2735608779ddca1c05b19afcd8d3aa90d8b475a23bb0177fa4b81b36ba1fadb45b59f3b8625c4c89010001 \\x6ddf15a7753824fee139af7c39ca2d55c8d7a86ca5ad5feabce5faf28a2eeeb0b74ceb5a83048778df101830e2d415eaf52cfa631c219b63c77af6d37277e309 1642335391000000 1642940191000000 1706012191000000 1800620191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 299
-\\xbfbe14565c113fef8e3e2f7399e1c55f2b7d1e64acdd01bd0ee2ff6246880383acde593c628da61de33c29780dcfb0f32cc416264eba20fdeaf7d288203b1a58 \\x0080000399c2ece5e9fcc0eceab205b8915445aaa24219049fff7d959cd21bbf1a98cb58c74cc9806c8ec9c6260a42a6361c7091c86160c1eef8ca10202947c60fe198870132a6f8c809110c882098c3a2bf1f67b1bcc6aec587fb899d37a7249c4d0b73bbb8d403cbdca12d8fb07bc00556aefd6c578e60596d65edbfbb19618dfb719d010001 \\x559ab7a44f1ebc477e30e549593bc5d19d82c87ea78f99cfa618ff5bc5202888ee0d37c1a0fb3b2358834c77c8396786b7b0c68154feafd296cdb759e52fdc07 1650798391000000 1651403191000000 1714475191000000 1809083191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 300
-\\xc1f6f5757855b6b384d5707e77802feff15542d351accae8d337ccbbdb7bde24f747616a981bf64a21dce6b38ab5bf228a2ec0c42f85cbcff08e8d79f73de9be \\x00800003bc11b4936d03b056382c4ca1f51d05633576fa174d879ad34ccfbfd9b448e4471aec63cb2494d25c2dcb89d348407eeed78c5c09b245ffc6835fa68674cd21c6d956df3cd5ab43d88a96cd3e8125918b89bda10d0e5360329cc8fdbafe2871beccfa0222dcec07b19ef10385a35c7e3738160055a6790619c4980f4314822785010001 \\x4c2dbe28dc9a4a90dc165f83bf4c78d9711dfb19d52c6528a2bad2403f19f7a83160fdeb3fa491f31d3cf25b2f1b51693ee567a98457841c4bd9617e26e4660f 1644753391000000 1645358191000000 1708430191000000 1803038191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 301
-\\xc25ab1731590d898c9486ce3ae8e6027f451f73a9a49c1d5b634b097a8f43e3590bb3d2f5e137eb27ade7cea251b94e8b7e726aec2768cb9176c9f1078d17568 \\x00800003b46ba0a282496468579ff3d7324f00262a499d49f237aa449b511e4c89ed2625c494bdc6ffa1ce0c238a5ad03f171fa5592313241eb35e8a4ea074b1eeb2c065ab394d1e5dcf42cbbb0a1791be44ba1e05d87ac0d5c3916f147447ba95c86911b149528a7eb6196074f28901bbd2264cfcb697dff58de64d8fb20bf06bf6de71010001 \\xd1c6e015577ef8d079dec380d53b16d65f50a63df5aabfcca92dfaa4479e1a4608296ae8457a21b8ae7e071643deb8961d496effb1be7d26a2ff02c43e66350d 1662283891000000 1662888691000000 1725960691000000 1820568691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 302
-\\xc7d21879cb4caaa7172e9b1e61e99951642f413697a7aeedc39e45cefef00009cb15fe2dc7f756facd9a402c7b695323b9639a889314f7cc8a014547017e1fc9 \\x00800003d815f8bcf515f775a921b2de07758e73feee39e595382ad38316eb7680549c7c081985ef04d4d4b7e4e8eefc3d74b0c95a604570ca5fefb9e59051cef0a7d1805f8e2c2f3831dc22410e7c10d32896f4788e16b705023d0ac6502ad8212fc83d88145bd5fc6f0cf2314caa9e81b75bd703051b345546113dc6ea90f217fe0181010001 \\x3eb5a0f93a93e3d6822b9c5f3025c46417349d77781d2fe32dcffd2d49f263dc0f7473706c6de3fdf58433c489a9b6edc2b07995951fcf034026e149b81a7f0b 1651402891000000 1652007691000000 1715079691000000 1809687691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 303
-\\xc89a82b87f17b01b67ac88bc732c9f7e2c1e34a61339d1bf3e8f3df9ea84dfbe371afcb1e67c3b106be35edfd1f74d1524a93ed0b0b8877b13878afac3e30795 \\x00800003bc7d3cb05987edcad969d90551a457c7f3b938fb383c1afbfdb541dc83d935df5bc6658123e69103c5540a26e734dd25292630bd1430e7fd4acba14c7d898592fc31459d422782dff359bcc97de9810db3701eaffba26b1180ee9d3a8fd08bcf727a4e833dcee6f47eeadffdc08db3f3c6a7c4b9fcc21873658c186b32d2c205010001 \\xff9513b279e53b9b0644093f6458b35a86723a90b8aee61e5285eef94de6a5afdd7c4f4ce31bc73f2c2e6328317c210be1109f2b07aa33a23a0b171c61b9380e 1633872391000000 1634477191000000 1697549191000000 1792157191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 304
-\\xcd96135d4cd9bd24c977a6cfdf9a9352ddb93aa0cfe0bfa24c93237804a471e0e241fecb14a54cfb7d919b51537387c2c50f2bf8b0f617fab3c6a66d2a71d867 \\x00800003ead72e9b98646b7d3182ae2abf74cabcfee7ab8ce4f1b98fb4fd1d7105f37300fb14284f0b5f59133e0c722d7e932765f53f68d3ce34d009e2fb12091fba93899a4b61fbbcc1edf346a22c4c67a5ce04a5284e668724c9d3060111a1e84b9d03a138a4338b29e4faf17c8d78f0a1e67a720c903ee594b08aa339f45f1a3bded3010001 \\xa99f9d01370b64e616ea0807ff8fe24d0064bd9f95d11b972fb313276fbc92018b390deae4e048aa4df94478083a9a427f9c463c6dabae0545f089efeed8100d 1636290391000000 1636895191000000 1699967191000000 1794575191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 305
-\\xcd42f6fd161b92c76eea42a4f7ebb19b2f32cb267b5fb9c39b5e90d36e7859e67fcc464bf60839b075ea82b8f1ef5a1d9147922ef7c4c36ba15d66d1d403f29f \\x00800003ba3dbb0b78b787cea08ea2fd9f248d4a8d55a7d4749d4602cf01fc98235adb66c3ea242f91589176edfd774f206c00fffe5ec7b7af4d33ee0c6511e6b5b659735b243b537d4e9c53d46cc4c020cefc671c0b31c552f2692a1f57ec6d027e4c956af0762d527d99e2e9bcb2a5167e580c3123348683453394d4d8cb8f2a93c4d7010001 \\x073330c7c0825ae3d7d2734774ccc759ec93b4f909406bd81d44f1f7675c413f028dc425a6c7255004395a489b47eeed593480cda84ce3719ae52dd1a6ecf90c 1660470391000000 1661075191000000 1724147191000000 1818755191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 306
-\\xd1667704c6caf05eae26c7abfee852fe6d6f0b6a65abff556fca926f1b22e12348003933732caae100da416027da1ae6cbd17b3feb3974a0237ef4d90460f852 \\x00800003e883efd9629824001cc85886377f60bd90e8f74aa28f6d66e66fcf5645c2e340442566e4397f6a2d165cb20236facc711fab538571f674a20c9406feeb5aa6a99a3b63e920a8b844864441416d043d2a34be0596b968a1b68b10557207edb413ead84ce899e70b84862be665f3efbffc611e03279808456c98eeb48ffe1ca491010001 \\x1da1a855201ce3a08486eba062401a0de80369e4660a378ba99c59d63c8c9607ed7ba375134680dc146fbb746033544d59af500b9c03a9d966dffc7546feaa07 1642335391000000 1642940191000000 1706012191000000 1800620191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 307
-\\xd17ad12acc6fff41702d10b99e20bf5adf0c3f1d0eb805770eaa7e9409afe8ea78156bd6cc60954744f4541e8bf7c8ef82f9b449d9aa4f3740b6dba4070c6c1a \\x00800003d03a053c06b1d37e4cf96c8dc1ce8033679024f244b4fbebca0cfa2fd85405f1d695a8b20cdfeaf875a8ed4420e04afe30eaf6117edb7fd14cee99a679274e9366e886ea986bf7867ac9823be2876ee1c9a66080aa14fe635dcd97696db19a86e9fcf89531b88382e783518f11f5d9eeee603bb1e7a7d61a6fc254aa858a8ed1010001 \\x85a4c6e054ab4de1b6aea7d8a1e90b9c28f65eb9042dde547cac5cbbf5329121dd8d2634de7d600b30bf988609dd3918508572b9bb313fb03f5162e37b21350b 1637499391000000 1638104191000000 1701176191000000 1795784191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 308
-\\xd4062df039e1a2920208f54fcb4c6f06a43b7d7cd98e733025a77fe0520e2b67de6cbdc120496a63af495f3c81dd48c164ab0f78940004eb660263811dc3f695 \\x00800003ba6b759a54b76a2c2e1adaa99034215cf446111c1ee07208c0c89ae3f1b125df7a4b802523aff49cc1eff730e710cd70fc8ebe01ecb2692e6d9ed566488a67cf34290652606baf9a58187aa2074df5acfb14921d0a35b6a019fa5b44d9c20cce3cb29b5f6ed70e879b9dbd08cc25747624a0d4bde8eb8a7c349b1f10232a7749010001 \\x5d77925c4329331d3be75b85d7d89515ec86f1f56d53ab49a5d16814fe5f9c419409cf939fd0e37d2fa6c943509b17933d04267dc9f6c439a6ee023843946700 1654425391000000 1655030191000000 1718102191000000 1812710191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 309
-\\xd7c2765fed3ec7fe6c4a5704dcf18bd552a76f8e7808998f17d39ecd1958d73869b573e69f1c46008574669ff713ea0f3f7cbf099e57ec0fa55bee8536564c15 \\x00800003b579727cdc0f364e12c61d6d8274dd6f542bb9da480ab8e95a7ee61cd33faeaf6646d88118e94c26a588456cfc53d85160a3a8d1f4b3266e4541ed8b0398ad6b0fc26aa8d458173201d382d7e27808856f69b8dbf2f58ad1932c4c795eb5020ac1261ec4ebae1472a2deecd767d7729a3116c6ed9ca42e6e5bc7e5ef304f5d4f010001 \\xfbff4b9637d9aeec0baf7eba6eaa32c065742f06d89605f80ede9b0f74bd5ffcdb5569129f23c34f541c4ce9069d5d2caf1e01cc2866f16e7b4cf93046d66606 1652611891000000 1653216691000000 1716288691000000 1810896691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 310
-\\xdc0a93b7410f30ecfd8fb8848ddc62169ac3e2cf80ae2bc136020bd47d20d278effcdb62a04e8b6b9b5ee16644dc4f70b36f51ce9871deaccd1a6f0a9c2c7b02 \\x00800003a86ec8a6c8cd2c753c9377b87aaaa934ce79bc543a6f3213a6f9d1327dce65ce2a9daa3d8aa9adf2ea56a15a261622ae5cd884f81e9a45e432e054f8a35210a4c956076cc727bb9be27d2b14202624d2fd7432f6aa6267fba7a3165ceca80b909fd04861fc018d8ff5eb16db203edb71061f57413909665077130e9f1c499e8d010001 \\xb56e7b299bf90af4c2aed8c33241ebf686bba7e441679e2a873854b306ffbd210cf720a8f291089b51433d9be8d7e9310df255966da958d38a56c0a22c07b300 1642335391000000 1642940191000000 1706012191000000 1800620191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 311
-\\xdd3203797bf25736618f176b8a40f52f3963fb873db4f90a6e11d8282ac4afc924bc14a114378c650f02a068bb7792001c2118df67634606e1686bf95f0fd562 \\x00800003c4f1a402054f32743fc85523f5ce094a967d99a66bbcde6b62838711374f7ba04b5c8c36ee3ab69d6a666cbfce5f9562633f1db942abeb79de2142033ab5de637b2586324da2d5d9db2c3a9582dbbb9c046348d37897c1cff3f253f047698c010b67404c0b7901013933b078f866104248d940f91ed54caecc011c65ecfb0421010001 \\xc45a2e4317cb5c4b8f276e0bca6d64774e43225546f6697a6fd9d669a8c4723dc1ca90fb9fc8be7e6afb322f54c459e14f466312226f37888024cf72eceb3800 1650798391000000 1651403191000000 1714475191000000 1809083191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 312
-\\xdf26ad259afd94b0fc0d448eccd0ec4eda113e1120cca916c85a327c2f4fcdfb91151ea345ade3fe86998197a2c903630ad8ef996701145b6f582201ac278a89 \\x00800003cfff18893f0661f7742414e129ce70bce3b103d986cea22d9260c152fb95d46fc0acbc2f029b09099d551b51b6dd084b71120ca6e4e07780bb9d3c6306e680e82527c2075735bb64ae76c48da6e17ca31bbde3610db54c0c9b93bea31d07460d4d5662154d807f87b45f8fe55ae22106ceaa7b3c54038d36bcf65e7c63c3df47010001 \\xaed372e1d324d16b92571af99ae0c04f08e06413345ee0fe366ade054ce17c492ab0f79fe95bfbed60b0589a58e557a15693dc8bada5a9c2904f02f545bbe70f 1655634391000000 1656239191000000 1719311191000000 1813919191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 313
-\\xe03afda667d4e09ca16090b938d68f2e1baadb5e275e5ea8a046cc2d664aece6e2b2afaebe906da95afbd45b7c98072f48a48bab60cae7b9d1c8dccf175ed155 \\x00800003d8328d36ea9ab2eea98cc593375d2ab918a54a446ab000ac5f8e1bc237398ca686812fe746b1458759582cbfc9bbd510c1f9bc90de4d1e89551dd782c566021ebdc7e393065a6619625069c3f6abc315af5fab0c906ba69a22c19458c51e3fab085c02c90f73225fa29b7b80e06b29f60c7e42a73120cc7419aabf86fe4ce25b010001 \\xe14e1967ec593aaf621a04ba0c38d6ebc7aed1cd1e1341a0d6dc618609566e089edf804ebd73feebdc534dacd5ccc4fd51e61d9643dd457d3ed6530570a4e104 1642939891000000 1643544691000000 1706616691000000 1801224691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 314
-\\xe566fd1356461dadbd3735bd7fd4ea6acb6e7bc785da5c2c44981c0a4de5ec5cc14e93dfe75d97f0f0338ebcf0cac3d652c6e97ad536d912e5304be109f85e46 \\x00800003ee705f940ef167bb7afa6ae20d99e5113df51d905089571dde651827b756d9785eb40670a7362ee7f61c93326dc8c529ab4893801a4a44b273568d073aa7ceac09d26d6047e6073a42bc5d2c3cdfac82292d311bd20037d9ade148444cf936a82a511629e8e164e0ee001efa0b8d1e278f25c36c5d47b31142d5aaa0963348bf010001 \\x57ab38f09cfdb05b88516bab276b71cf640ad2d3f3ed0787e0531bbd03eeb09e788645e2fc4ea43302268a02016bf8c6a80e0641017f4b073c4cea3189aac60f 1654425391000000 1655030191000000 1718102191000000 1812710191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 315
-\\xecb24e8510ce5f86483883423c759ef0135905e8a6298052edc87f743ce8cd5f0aa5f907afac91e483c81b3d9978b82e1dbc87329677b0486972cddf18f9dd4b \\x00800003983ea5287d8e5887269c4b9857dc80bef36bb383cb986b0a2c108292f4641250d1b29aa394665b680cc9cac710fec7352149e4cfe319d9140766403b7947cd18dd12cce0147a4efd4633c8d1a35051919b4c80d6d3e8cfa6bb85e8c6b471b968a1a879ecf0ca83377eb2ce9cb45afd7c564a5c7bbc8a0b405dbf19a76f26a4d3010001 \\xa47242b48d5db9a8c1d814e073eb5d012fb707912ce9045b0e021cbc581578be9087d62e575a598b1b6214f9206e31a7c3a97bb1b7232e92887304abcfe20c0f 1652611891000000 1653216691000000 1716288691000000 1810896691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 316
-\\xedfa0a85d39f9eaef7d6a325f05bd45bb1025a297ec03e58e8221bf4e413deed627ddffb9816b44f850d23b214cec821083c47a33ad2a30ddc2140073c7ef951 \\x00800003c24e726e5c4bfcc2a1c88d49ccc39edc9f0f3efc1bfdf5f9d755ab543ad9bbc18f68b5a228d09c48bff055f02b40b65d7fcd695664c192c3e4e0c2292e2f8412adaf4552f8f4eb0783c80875b1fa03048ec318a0465f9bb5723bf68f287480c9eba989d3d923d2f474a312eda1c5b6c0623ca5416c277b41108cb518c054106f010001 \\x1e319f3528714c08db8798a725b1d5e88d28dd62afc35787ab39936582cbcc3f539fe141335e581c5df8d929a50b4f51181b794f97021b983a1f79b238ed9103 1661074891000000 1661679691000000 1724751691000000 1819359691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 317
-\\xeeae83d8db5757bdf04f514b7e33e2f7432ed181ac4dbd64f38743bf4037d9beaa0d9bc3eaad4e2f4ad5ffa605cef498a96c6a59a045826fe833a5931364c87e \\x00800003a4e8051e5b6d7060cbdac6678dad22bdb3db72ccf560bfb8f242aac288465f3b4d82973756930f082111e29f73ce7dc869592474f635ca594efbbb662adb1f76d2b3746ea0467cba87a8de72c602abe65c8746533aaa7628af6cf70a3f00c44fa1895a6ea207f2c3cf5cd7a5ccf4f95723ea9d2d56d76bdc61a516e0469fad61010001 \\x9e8aea5fa51b938798c09fcc4282ca53378dd46399a1df65544f58a5925eed97a6001f31b130e7a6308a777e753ed0075f22493e9ea3cf187d8c111f5441a60c 1645357891000000 1645962691000000 1709034691000000 1803642691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 318
-\\xf0a25a69a820c7d4c8644ac594228bddc36b59ff11d33e0774094148de4cd8020d40b11720adf5eca879bc5c3be77e9459c612471a501f2c928f81f961fd532d \\x00800003e741e1bcac758d14766fea846726b3f47c8f6abd484a990afe3867116d8829a5fedd1c015c4a610f265de0e5361c70afe330fe1d1387d03e3f86c06833a442e5b48d6a4a5c7e0aa2dd71c2caca35e8e34889e9ab7d03db518e462bd47bb11d1e2bbf96eb57cf20e920182d3e8f8f7e20678f5bb817ccfc4671cfd81551db960f010001 \\xd97ccb6a7a8eed9287a6545ddacd746b98c30b11c71f7eb223cd8597d254972ccc6f488ade9d68dc84f5641c900b8879d81b4e6b15fadae9247ae264bb058400 1655029891000000 1655634691000000 1718706691000000 1813314691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 319
-\\xf00a59c949e0d543a6b6bb4c518ef7886e96097a34bf271f6f1544878f4cb6e7f13eadcc1c807a1d30d63a43789c6ef8062f3c7cbc36c2afc6ccd1d0ab784473 \\x00800003bd1de3cb5f88feee7926b00b3b99cf7a34d31e505d4f2132719dd242db3c8d7ddfcae5cbb4590341bf3e970973cc9bcb00aacbb55fcbad5eb2b94cfa80709716c6cf44b0287f34376331c86be85039681560b261eb5c9470f62c576f0feccb7e0209c25cce03447e60d441ca51fec3e91a0c52d7537fb14f7d69115329d0aa35010001 \\xc4683163b69b5815a2b496b22bece81a2ed414625103eb538d10980095355b1f30ffafb6087df13ec2c0382d5ec7fd53b0ba87f3d19fbe2eac5531e0c16a390b 1632663391000000 1633268191000000 1696340191000000 1790948191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 320
-\\xf2ca664d5ca7c9b655820d9aaeadb246c7ed79ab920604d172f67f059e03ce9cf545c5267ea25bcb0670061f8c56401d5847e7f3bf8ab1f58013125087f30340 \\x00800003abcacf8fcbfac7766376c3be003d2f4771328324bc644aaac54a05e4da5c9de297c32fe6b107d4a8ec78d46640ea8cc8b5d86af14022c9be350c166c1864bd0d469c741ed0038e674c2d143692c3583d0cc92524ae0b7bc3672b36e4d5c7a6522ae9df514a37896fd29f27436bbdd23add24db61ee12938292bf9874adff326f010001 \\x57720905807f9d57db09989d123c255053cb2be61c9c1d965221c2b1572be48fd98051874af5ede1b03c746c4e08c8f9604c0bf0393f609b4568a947ebb02c0f 1645357891000000 1645962691000000 1709034691000000 1803642691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 321
-\\xf3d670b7ed62ccec8f42a6bba1af2f7bda17be21f401194cb29292a120c408ad51e9437497f93809d018183af0c062feca18a456cefd2c9c9ed4cbc1a8426c2a \\x00800003f6a6aff98712154842c9cd397f6c414db2be2e1dfae68b830e9619c9536f8c7ad790de5bcdc3377127b5277fbb7ea412dc569d556a294187c14bf94da87a746a764bdfb8115d711eac5bd5d48061f50841b3f158cdd8a1d74b4a9fa59c87b39a459769a0b3664fe367525e337a01d95261114a254cae452983988782480238f5010001 \\x1fe45c16a95136efd571fd2d4792102aea03850bb1362108b255fe67babc3407c32f3a527dee99a82f7dcd4ea0b2ffda031242ef84ec2bc9b016f6562d77e80f 1638103891000000 1638708691000000 1701780691000000 1796388691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 322
-\\xfaaa1e35174e82323017e4f600120012332a18ce14df2ccf498b4f0b5d8cd0309492f10b3ee735f67062181c3321c9d9c81b7eaf0b3689aa0e31bd410de9d7a4 \\x00800003e82018e774f8966a17ccec073fce30fc9ca348ef7f05d43db27b9b7c7273c61ff2847cf018f31b33e819f75d4e05848a134ebcbc1f95caaebe986b33b1036e84ae8baa105ac1cef2254f1b328ad38dad230097a08e9132e2249f05c97072ee1f03ef4c30671b345a683097ba7e1e539f53f506804db470feebaa314c1364c3f1010001 \\x728f8c65c7bdd458cf4b53d4bec94101ea2f1a0a028e54b960dcd4409af42f2b79c48f9bc1524a52164dc6a5e6df5f2de11758c994a7efd9f07455aeac093505 1658656891000000 1659261691000000 1722333691000000 1816941691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 323
-\\xfb9ae7efb4801997a96ef9af797d4aa9ff78d7345ac1bdcedfc40777f480a20906ad214762fbe41fe885529a49e1f1899547fd6c1da7b214f491da7f78010c91 \\x00800003f288b1dd62f6e81add80b7cfe9add68a455bd601e01588ebcebe5a1b89de4a7a48e75d4172294cfc3ff1c711dfac2331d215aa4a2050d2e90f2e55a22f44aa50ae6d9868779b34aad1b67469a7751f1b82267901da1a5505c4816b40e1f6f3bbe244ff1ded45688b0d1fd94d168ae784511b77f749972a70505398e72403265f010001 \\x9cf8ad548eea398ddad341062820f3554273c18547ad6c16806135a3bd31688d0f3b3cca8692e3cfc9faebd54934d8a6e3bf9e02e38e2ee063236ae37bc64100 1648380391000000 1648985191000000 1712057191000000 1806665191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 324
-\\x0087b31797e8ab5dae5a3207d286f9332b72571e183d5fb4f770ccc5a6fc6ffd1c7e8f0c4f9e3376be9c7a931a4bbb17b809321520ea3aa87cfe8c846313d437 \\x00800003904c566f39b586296328c6939ee7db330bb790a6d09aaa4b8d66dace1af46b9510863367007487f671beb35f06aa44f4f2abede670aca98235afcb18810c00359b5464dfb21997ec367de195ee3b861da59f00017506a320bc9118b1d8d5030f67b1080f9eea4197714c4a0194197644507b7d2213af90e1eb74282d016c10c1010001 \\xa8a5ba78cc5914944b3ca45bbd2f6d5eb51818a17702f223a1180bf33115741ab5c75e83347a141d164a3da28347d99e4daaa23123794e7943a0d6d1161b860a 1661679391000000 1662284191000000 1725356191000000 1819964191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 325
-\\x02f741dad220236ba5d578ddc0fe36dd9a81f651b2943e40e0bcdbe75bd4ec43d8b81ed7eb947bb373be476c1cb4ce0645be0a1d3dd7c8526ed0117d765e1486 \\x00800003c96fb7e0ef6cc06c052ccb12a492a74a08fea63f534f94b675f4c04bbee63f5f7f9ee01e6c26a3846da41159e32510353080155adbdae27305cbaaffd218b90ddc5b1797fe613086abe2a033e1d59a468a51afca27539232e7c200e217a3b643f6cfa907fea173bf4103af0bfc303b9182ca9955cd2e414c7d4708bf23897305010001 \\xb515642b19dace8446f5fe6ffc1f4a8f1a7229afbac9e5bcdfe61ed0b1c9c816b4ef0ce947254e0b8b0b37bc15f198ced3a96d5de619af58bc5510075a2b7e02 1661074891000000 1661679691000000 1724751691000000 1819359691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 326
-\\x0327e9aff0d7152e42403482af61db9417c508bea4273a942d8d21f6986a1909237680c2c15fb26701e7edc29d4c64bbd8afc0d26f16cd44f5ff7233063fad57 \\x00800003aee8442f34dd297015886b6e39d10922f3c7f740da8d23c1abf814a209e6a7cdd4fde742787dbdfed43b492111097aff121950278b62f187d6b889a854fc29386df2e4bf4715d834570c84ed194d9060024acc9c09fd11140a7e351806b9211966aea266296a650c7e309e73b4751daf397361721bd9d85abd9e065c913f865f010001 \\x40260bedf874afbfd1c237ed92424b4ef2d92f7d52b735d0e5118b532fb7ada5a7ecd1daf81268c92f7533be2adc540fbd97f6ce56766fb59f5828f8fdc80c01 1638708391000000 1639313191000000 1702385191000000 1796993191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 327
-\\x030324c3880384d29df37cea4421818142288b8946708d1839ca2c0df9773317596822638bb4307619300afdb1d1a9e632ee5855d3b4d262475800e66d3d8d69 \\x00800003bc4f68f769b9dc7893b40f5da0fea5d318ea2612fd8a57f3730cfa2a261951dd30ba6fefe86593b42becd411954e05059ac2d255f36f1aadd91cfe7c0fd02509438b7f37b13d351c37ad63cf80b7a071a733851f78448cf61e843d6034ac1321152d0b502c08e318f816ae39c5bfcf3e9ee8befc63bb016c863cb7a3bba63ecf010001 \\x99dded651e5cf0cff4a7975bf8368f7b28b80c5f69fbec68171153beec8c2b8b980b7b0ab3f1daa0536f288ad87404c07ec2eb162ac79a5af870ef1ad85dd104 1656238891000000 1656843691000000 1719915691000000 1814523691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 328
-\\x04d32c07b142cd77e2a5ca18ddf2bc88cdf3c7bd34c625ba0d671835817e708b6aca92f4e9c979f59ee719b8cfe8d30061f96acc025fee2256bd066b09f6e03c \\x00800003ed1015760d285690c7cfa61c2d81fdcca49bc2ca1b26435727632e6b05290706bea2e1382f75175c55de86d5da7d73cb39c5970cf05c8284b022700c11979ec742ca14bc40d85a799f4a4e1bc3f0f6a5b951a469be00be2708ea02ef1af0f5fac916fa7da4d4e25fb4012b280fbe631ab6d9798c74e0f1f3f3281bcc87051d1d010001 \\xa6ada1479035cfebdeedd228feb3a193e417056dcf4e61c7764f7dea79fda3fcb59d25e368fecf109b188bca1bbdf5b24b500169536e29215d0705289df6ba08 1659261391000000 1659866191000000 1722938191000000 1817546191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 329
-\\x07cbc5164975fd694467166a8de6b62724fc238be6fc83efdc7f66602872b3b45cf532674b03ac6f58d0112c666d6d873946171c2e6c6978975ef0d34fb222f7 \\x00800003d66ca6000d52e04991826e3b2bf0dec176d97b5dc5c98982b979a7715ecbe8d6b85f7782560f76f240ce591c2abb47389788b053409b9fe35d2f0e83fcab11f2d78482b92a079d8a16d87be6ff78f5c0f71e99b0b94d00dfcf500b9251b14266299e4d37cb5dad2a857f00ea12047b211871e586dbe78486079c9695320f199f010001 \\x92a68df2b6df99085263dd49b8c72a42e1d33eb5ce01228c8235ae04eabd845869e9b29585aaf88cdbaaced35b31294b290a31d2c9f204536afb5b26cf7bbd0b 1656238891000000 1656843691000000 1719915691000000 1814523691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 330
-\\x0ef336327f2561c7ae2bc0a589ddfe90bfd2b944807918546da58ea0e7de183b1dd1ecd5ae7e023a3fc670bd2a86ed828222f1b6e03395a6576243f214db44cc \\x00800003b27c0194969056148b5f9b51c3c122d01cea1db5a614ecf3f628c6193e858562cee457431ad1259c9d7a0254ffb75068185a1d8105362d6f84e80906568b3e8dd3d0bb697b8d64fda5b1e005c9d91ae0717045da64b77648a267b21b28785a6516d50ee501073edee9bc133c2b3167e82f62e6b99025324636c4374a45ced91b010001 \\xb113910ab16e31b5464c29766b159d2d3f682c36d4fb2bd7b5b975d427a383c81621f51c9fb2b62c30c00b6555e0078fcbe6ea63edf40c03913d0e18a9f2d003 1644148891000000 1644753691000000 1707825691000000 1802433691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 331
-\\x0f93811ae5b11265a228be43c62ee18af95fea297fe365cae847a302445ad4acb7a69bd36c08133066df0feebd4b57cf5eeafa9bc6400db4133e60f9168416ca \\x00800003f38653ea4c30df4c89c5aac837608a8ef15111431be7c3c4fa79e8c2fbf1b19f6c9586bc90ab280aca0c41d14ff4daadd221ee5f4bb04720406d177b7df9d702cf52315ee9cd92054bd4c31e319639688091afa336b634997468e3b61ee054291bf1eb50230bd368fbf8ad9caa470d07b6afd201d713aece4ab5261ced5022e9010001 \\xfc88026bda68e334cedf0165bcf30db5a7ffaf0b9cc440cfb46390e82da8d5ffdf063528bc517f7bc0a554dad4bee2e365208daa34e439933ded4065a5f16e0c 1647775891000000 1648380691000000 1711452691000000 1806060691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 332
-\\x11d70ec0167434deabaf91c652d7fea81d4fc83800da7a73feb0c157051564f3e4d24cb3614ff9b5dee2f0706f572fc6509783f1329d1870fc7395c596d90880 \\x00800003e77e5557826abc63de79f1db9bb33877ac72ea78fe609e8138e30b0876764d7ff392c9925c1cfc3be5e160e9ecacb648c38a219b2524935b10abe85f8ad265c97787c2d4ec1d94ac809d3421257503408d17d8269430bf75ba511a4ef179fa17e2491eae783dd4bac82a42796bf1edd243753a8fb196bb8e7986d5fc46dcb4e3010001 \\x30813874109e445272a49b128118b00a8a70b9a6db67c1ac1d5c4155687d4fa42c52357d66d6b6ddba89929fb3b678284cf98d06c818a66515f5b60a94e4010b 1647171391000000 1647776191000000 1710848191000000 1805456191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 333
-\\x120fa398e4569679a1345975b047134d29dcb901c10613a763e3deefb30fe96a91222a135f17fe0ac36ea77b79a19b5e2364bcd6ee78e8787b508b5bac8294c9 \\x00800003d3da146fc02beb1fd373d649bb3a1be8e443c218ae54fc54f3b914894709bb7e38c45a038ae0bb78575361e63d91ca5214aba3ce17bd5b63ae838cca1ea068411cb3b6966523805249784f0877502dd932cf1a1df6ec186a3b9c3b3a9eddae0d205599330a86e0a60cba80fa10046b601e1171e6bb3e77a9789bd0dc74e23ce3010001 \\x7cf546c61f4a5ff4328fbbcdbac21156ec2adc04d8b7548457919c3f4976ab3f1c1b777ade0fa1a5cd992828b72f56a74570d13fabb8af5f2de94d23db43d802 1640521891000000 1641126691000000 1704198691000000 1798806691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 334
-\\x12b7cbc7315390672ee327adfcfb5eba52dbb3fc9e8143c55a49e61431acaa39724b4906799e33e9840bb167c912ccdd39ec73f01fc505918e5a48d1369f0704 \\x00800003a9f8734955d17dbfd82e039b46e93fca6e22f0c9ea427f308c7e49cd8cdf17a29cf2f13d868a64bce7d591b526f25598b1952ee10d19fce67d018730ca72ef53e4c189afe7c55ac61bdbf4d6ce55f776151ef86cb3afa31bc24755321521db949ac4ab13a5f0220e49fc83e3d06303803e7a59bf5c68d2db95d3f4fc61b25023010001 \\xd46f5da0ad458b7b68429cf93e3f3989fe620a0d9c47e8f8881f72cb73bb8d2bf21b2d39b633941935d4c94e720d253e85f45a1e3f82d46d61278382c0fd440d 1647775891000000 1648380691000000 1711452691000000 1806060691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 335
-\\x1337bd40ba4c0cf85a51a32acacce01b6d75e5c9027c027f70cf4fa38db25446eced1cdb291d1e9c24e5f59513f0a6c3030ee8033b8c8e68026289ec5ca1b89d \\x00800003c94ed8e85c98688d34ba501bb8d66c75a6d6c0dc65390fe22286aa2bcb9bd03d13b75c864a5df064a91f2f745ac50605f6a0e7c153a1a6786a4d2a2410aeeac4455bf38c9f3c5e1f5d4401830d38ac885dd74c43b6b284647adf4237abd9afa31ee31a135c38d14d1efd491a9216a0115f7bd2d0990dc46e6dc22e308049f843010001 \\x84c19b58b28fcf96e6ed66fcae0ca6db3e9f6099e113a9372e3c23dab28ebebbd7b3dd81bc50491b07179c1d494ad557659b816d49f3431d0f220037d3ef1c00 1633267891000000 1633872691000000 1696944691000000 1791552691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 336
-\\x1493d1fc9bbe9130b109d7486a1544a7c0355d9870acd2c402ede5aa3c9e45ef8c76dd8f70423f1badbbb21f00f12d2c8144718b7b9b7c879833cd83bc1cbb6d \\x00800003b4f000599fba4ce426af5e0f6f219e87fbe51079f0a6b742a64a924bdbc925911595d35566c15f40fe1276892d3ccbc111e1b76eff66abc825083d612f6639ef8c889c3b51355f2763ebf14127e255a6e6d7c645f7d9c35d5b67a8be2f97a802cedcec29234c26ab9aec00ba554a89ed9ec6d611623659f93176bd67f6b7c561010001 \\xf49bebe0baff0793835e8229720cb94f5b6570d8744b3c40f543502980586126f19f6db140dcbf79ca7adccff9a0fab09c2dfd1d9d5f33b58fcfdadbeba0d509 1650798391000000 1651403191000000 1714475191000000 1809083191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 337
-\\x1c1b1fa05c32d9980cf15ac4808c8468c83bc346abd72c468945e61fa2a0b7958871754332597e77f80e26e8be6a80ae8cb8bb6dc8f3aa10c9a0db6e2ec4d879 \\x00800003d8895a3efdc5e3d25689aefee446b212663a1417b901471dbeb9cf81928307106837e03681c8b1291fadc748bb32a988140cfed4565de1b2a3d822b821c634490d3656d7cf24966a7e4cfa8472480b8f9acb10463bd530c6dbe7fae9f2dc2baaaf5337d0eecd34778d40108d7d094683a6fbc2fc98af1411ff803450534b0497010001 \\x6c357ff1340dfcf766518f3e2f1881eef5f14aca6bd70f0f44337b108cb5c76c6a9f9925a213bdb8827969c5a1cdd555485e21ba6c8cd8d5196a27e8a475620c 1652007391000000 1652612191000000 1715684191000000 1810292191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 338
-\\x1d1b6057fd5c7af511c86c9c33593848d523dcddab24021325b61c3ec1356f84058937a3c0d084b0d8fa4ad17ef5300473819422067ab6ded76dad8df323d56b \\x0080000398abfc6e1ffa4a22b26cd00ad53568ce460108ea288d514e77cf5d847c476376fcda1241bec32aebf28b3a98f233be908bdb8b325161565e472f950d7db362c65458970e92c93699cf506514f306e5a55356edf367f409e32d2891bbdbe998322d3374247a75433ebf561fe79ebc6ab7881e61e91436eaf1a6ac821a0031dc35010001 \\xa29619dc4d51b34759838456ec995dfd2ac45ba263d726d9152907485d2741da5c1c5c6c28ca8a75cfcd33e4c9cd399c70e8d6a384a902607b15c50e1afd0c02 1645357891000000 1645962691000000 1709034691000000 1803642691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 339
-\\x1eefdc92b390109ef816cf2384f3ef88875bfc737615a28b30a7a8727aec209b407c530ebaa709b39427e1efbbd5146fe233b189f05c31e7bd5593711c3dd2c8 \\x00800003c022d471bd1488daee8299b1f8f10814fdfe8f165d61c13c833473a4c44ea1adaa2b5e03f468e22b709bd8d6515f71de6cc9151690ea5e12f6c9fe85dcdff8574729a6d156343898647db8e920082826a6f3e394ee0ef0fa8f734625ed1be0deb19c09ad4eb8491fe071e5f698e43a483a016b46fea89559313b1535dd05a94b010001 \\xe9f6f06826424c069869739bb5d3aac8a6d873155eb62c39f72b4ec7786bb6e446c71190878414049230dfa6eba494419d3f06803bfe9d6b339184b4c369b504 1653820891000000 1654425691000000 1717497691000000 1812105691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 340
-\\x21cfb14317aa952febdc7e6b83d9e258a50f528e18f20c9dae712acb4185b991019ba47cb6c80051a430f129d2584ecb1bae985747c58efbb433e2855db6906f \\x00800003e13cfc805aa8fb673e03077314c92dd29e157de2403fb2331b63ed9fc737bbbb33873193ff9dff947ec808d4abb84e9c6aa0ad1763b0065b1eabd333abcc81ccc28d6b41c7cdfb45f183c9880988750c4a43af2bf8d8e43802eb37dba81a85b98a04f7d1e21292ae7923a7c37f40afc1430a50d4cc56e76b1032b75525cfa8eb010001 \\xaa72a077490bfef71574107ea6a6dae55829d3aab8448641783ff0840fc756e6bfc1f04f6dd245c87a859589f0a7961b8fe27439d1e20972cd591d88b343b30c 1661679391000000 1662284191000000 1725356191000000 1819964191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 341
-\\x231bb9dfc8bfdcec6fc317fe7f806ca445f381c621e3693e6896f566f2b0207d52e1ebefd15d326ffc47ee5db4c4047732afe0a78cf2a8a8e19613f2f7d28d8d \\x00800003ce0ce1186eed07c9d853429f52db1d055284e2edbcd5b005059383779103728ae082b64ec9b73457f970ce6d1fc42c8628ab02df349fe26b89c793449b63750447a3c1c8666ea3f77644b5d8e03360113f79cd52868232413a75aea626fca12d1fb983be8803d75cc9678b8025b5e6f6680505ab308639534d886bf494488ab9010001 \\xaaad661187d57ec05a839d87d3f106c2b595da1eca14f041f246454f66e6a267ec5afb9e8bf8e9905afa7380a066407c1ba080b9c80872165a48ceb84815ee0a 1651402891000000 1652007691000000 1715079691000000 1809687691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 342
-\\x256bea433ae4844593ebdc663832909a1c5deb709610d9ebfc17626cc80cf9ad34d8714d22ea96d99d6419e7b1cf27a7d8c718b0fe1f14577ca706a9c54a0c85 \\x00800003bd8f752ab0b98c10a098d90fbdf04695776928604720e97c3c67d656005ecee356fb1d409c6b21ba6d472390fad6a8bb11f53236e5f056fd2525e2e6e55d803347f0b4db110110f45d8a70affd52f3d53ac74b9e08c37583eb4d89074d81e3a24ab2f112e29a6f45efcd131e9487e6b79f0d375e1ec054c6e2bf7416438db201010001 \\x915d647864f91435fed177cd39a39f248cfdeb1773436c3d111fd938be9ff8dd256de93a31ebec0c45a3934815cf6429a952b66e031250585c68598865ef2002 1648984891000000 1649589691000000 1712661691000000 1807269691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 343
-\\x27c31268cefd5c92d179400f2bf9d8459beb5de7aa4dcfef74629244f752a1ff65af01e9e10ed94e7b23cc16b6ddc98cf6b433d02f24dc6ea80e037c19d04261 \\x00800003afb659df671059d45e23c5e4989e5a1f35dfd5000d213bfa2613002df0747b167ecbcb6a70c122e2c06f1eb4468b636887cfc26f38f5c3a3c41a796c2e128b144d2a4fc927243b0f13932cf99a7488538e2dfb92ee8d3607458e0ed70d6ad13ae56a62817b4d99a306b872e06cf4ce4db12a747d822020a12eceffccd73557af010001 \\x96a5062b177778bf36f12e36914c46a64f7c8e9974338db78f4db1de40065f12b92597c345d25fa13c1c1897b595773b2c4dee1b29c9a979eef7b69f91f0aa05 1646566891000000 1647171691000000 1710243691000000 1804851691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 344
-\\x2a3f6c450123f7708469b49caf94591309cfe7df072a3a366e6168ab9271dfe9efa99192dc65cd35cf1c1ac2f3a646efd2677208442f19c40e69ca80e0765aef \\x00800003aeca1816315739d73ffa979341cbc9ed8015e733929b77b37f0bfc5602fcea4d6f8844a5255cb17b3a373ae1830f605506d3182054619c7fab52d25af8f19d66971fea0b357e7257018bf85f38bdeedbc3316ef54100b31ef6f82bdf9625b302ad05cd9a842f309e438fe4ed91a47451b9ce3496272cbbf66495b680a955fa1b010001 \\xcb15dd1716a5ac1c2af46fb1d9b4f987952479067bf9e28a608648f8c54cc99fc75717859f137a2838b61da1acdc8e15e2c42c6e9b9c6a8f1e89ca2c6ef6c509 1640521891000000 1641126691000000 1704198691000000 1798806691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 345
-\\x2eff4102ad2575d4310d8ebdbb38de441199bfc4a0331052d4646cbd9827b7e2afa88a8ffeb7eb761b4a9699f88766ba0d6660f842f33e05ea78db88b7dde73f \\x00800003adf8460998ffc99c2b8689fdc0b3b2beaa3c01f4031ece4cafb374b89475acd607996d5542eab07cc47b4c19b06e3c0010d4ecad93d403cd79e8274b4d1e5cf5e24fb426ebd5826081046c26f8a0bba578a957ea7078a71905a8c83af886bbf1d960e08daf1ecb455ee045a0c5d843bff94615936cc21a6c2548b4003c7cfe35010001 \\xf8e0ce71d6773af551d74f0897f6b79a1099a01586e3e36a085c000fdc24a9c49443ca6ea9563591934217fcae9f9760b294c31cfb316ea9f00146960793330b 1641126391000000 1641731191000000 1704803191000000 1799411191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 346
-\\x3023c733e9c1e30b8873c597175c9b3bd6ebef8f8b6db9a64ee266bd9f7aae36321b174ae60bafade015492bf8981d5a4690d1102ee0e2f649fb3124e2d901dc \\x00800003d055920842aa6ba086d3bc011a75336efb91561c108d11e574328c03143d9fb610a2311a414936450eac7b0c683a75baf215a1e240d417786c53bb00e12194fb00b27c052dcd3f794c50e24ab36b38ca932b101072b263bfdb1021457e980585f4afa68ecc120e179a937f0f72d93199ac018ee3fe39c6d88b4cada43bd90157010001 \\xf2721d9f172afd666dfa27bcbf4befa2fb8d12f847e438209135f8ddf26710c052b26cdb24ac62f91b9699f815f8228741f420350c2b0ce27c236dcf2425bf09 1657447891000000 1658052691000000 1721124691000000 1815732691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 347
-\\x326ff5407073aee98289a98ac39f1c666c9cbb729abdd911cc542e609464e6ac2ca8bd49eb883c82db3b12e61977a897a5d486bc5d40742ecf310b026dc06c59 \\x00800003bc964350944081d37d97223d9c70b228fede16ba5fb54554b4c0ff3388ad23343cb8cc25b7c994f4703c3b098cafb1dcdb4ef760c2fa5961ea0d9928758af18520f6dd26edd711744dbd361d3522030e9f6862e4031b154430736993dafd0d0cd6294dd2226a9982f37317a1f2a2086dfa065fea54cdf377c837697b0fa3cfb7010001 \\x71ca00e3536db8a387af0f638b02cfcf85e727efdf373eadaadff42aed6b14bea37ca458006bcb76b59fe90b6e3b0db78d5a883920bb5b03d3618e2ce66aa20f 1646566891000000 1647171691000000 1710243691000000 1804851691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 348
-\\x34c3541502ae8b34fbaeb53f9a76f14fd4be750c521ea74530cf92a1df90d1cd091edb4f560527ae96a6a83aee7ed00075e127dd8907c64b3ce6c22087878bb5 \\x00800003ee81a1a4b60f70ac2a2a73ffdd909b90999db6cc94fea5f58c893c9b92ae399b32cfe9ef4349388a602ab6c08a52e0d798c3227dbef53a314cc804406568890467b1dcd3c5fff026a8823720ac359e284a4a85671d78ff3f9d3f4f98bd2d187877339fa77390b11bc7c79381e4da154c2e40649f9e5d12b151279c13f1007a09010001 \\x5a9d7faf30b772a0457581594b19245e07ab3cc4974a8e58795dd640283c3e40ec0c0706a36d69db0aa2e8358ebe96020747bec4de6cc2c03b1da867a2fba509 1659261391000000 1659866191000000 1722938191000000 1817546191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 349
-\\x35f77b025ef981bbbac71d99f26081d6eadbcb4a5b55922771cbae04cda9d13ae81ad6d1f4bfdde53ab83d2815fb354d69758844c7d6cb854cb1e1fac24146c4 \\x00800003d499944b9773b8f3dd20337e89121c5b470086a5373b5554a0a96d842f3144b244fada5768ee5e6df65a606d5d2a38839c019d281c6be15991155c41a865a3cfdec5d7ee68ed4a7c0867a0393b66a5ee6c715f398d99eeb1f4ddcdb8ce138b6c11dbd8b02f98b0c43af20a26aa9c5d6a785941b6817782cb809362f2aadf94ff010001 \\xa505d84a5514c80745d524753554240bb06a6005be999c904f7c80aad912441d2c5e07e63a51e7f56047790ff591804a0f969f437f483d9e1b2d3ac1ae649f05 1647171391000000 1647776191000000 1710848191000000 1805456191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 350
-\\x360fb36609494d03a0e32f82f52114a69595e1c5341ed052bc6eb5e749cb5a8340565ae1bd760b8a9ec46fa74c18be28338299ea688b1a5a8c1cf4255a41c3b7 \\x00800003cc74d30ad32a0875c8104044c6781a9d79fe5cd710b5135fbff9c3f7acf6080f0bf52ed72637a07877bdbfd21ffe9b714f15c095c84bdea1314413779213f701f2162d32b988c74e8a6f9dc3a6034c03a759e0c60651af2a1c94ccbcf00629d59877d706031b153c76c1add69a16f71c7fe2d3006e912bbc588224c20c21bdeb010001 \\x9e37b28420568ed2c65dd3fa3e112468a2b432b038196be404869baeb1924223a455275664f1660e1e4445d8fab11aca2b79fc23a465274e207564f9ba33cf0f 1639917391000000 1640522191000000 1703594191000000 1798202191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 351
-\\x375f54abe70aee8ded9019f77b7bdee795840949abb5b1b58dc37e936042dddae1676cf339ee64bd515d1cce199023ee94175ad85de6122df38036370c6bb61f \\x00800003b60471ff4ef8a4013fcdbeb33da571ae489764a469b12dcafba53523c6adcc9cb94473f8f8d8ca0ca23063e95e1e82650b1a1ddd001a6ae570f9ef4bbd6ff0ffe48dd8013608e14d74d1d812dcb6f22012d84083da1506290de6e09900acc78f0db4be048f4ab78112d66a39beafe527335c2526f7b43ad4d4e1b86b6d015353010001 \\x20b0c1d40ccc3d21b56dc82426d14d445bc1a75842fb2bd3010534b4c7ebad8f52e04f505d09ae345c32a6c1e003e103cc6f31a3caba718c49a8dbd8b410d201 1635685891000000 1636290691000000 1699362691000000 1793970691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 352
-\\x39b39300c74816fafb5e6a2173d8f656c5ce95d9724beed3e93eb70b8b25dd0e1220d071d1435231fa92ce095e7f856b48ecbcb7032e3e9260e50266dc1f8e6b \\x00800003e9ebf42f7fb63d3d6b79a0004b6e3f7796fcfa637bb0372256b3818d9fc3007c389d395af285f60842bd3f1ddeb0e3217d52a5e88b22da8c27abfafbc02cb9011c01d50d350026de73047085239ef2ed22c6ba059de292e672807f2b905659d8cd2102b10c6475a9a9256588ede236382475c465aaa1a39786fea7e21f19553f010001 \\xa076c02db0187d77de8683a3e3d5168a88a75003a3ed1c44ab1e5972ffafc26569b48c48d37966bdb7fa67e7100daa10d95f41eef1226dfa8ccd69113d088f00 1652007391000000 1652612191000000 1715684191000000 1810292191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 353
-\\x39a3721858862af4758b3b4dc3e10de6b659c6dcd00f2ab50c271034fbc2e37f1a7683d4015aee522ab2bb8b6410388455cbb4e3a481862e1a9431089fb8764e \\x00800003ce2f39f5177f2d46c40082a0af93cccbf85e773328cf89afa874e13c1ad1f0db34079537198102252748ddea7608bbe162e72f75f6e2b2210cf2f16bf13be18acffa8cbabf089fcaf0ad7d86ebbda4390c96558bcc1373ed95310f7a17fa7138d3a16af3624c55fd3c9c68e678a3ee086017bc7b794c9007c815000e352f8471010001 \\xbcffa0c8df063857755b60bb02bfdbe7344bcffffa8f0ba7087818cf265e3182922aa0ac0af2cb5b69d3ca14942e2efca2e903c9e56bf7cca95c5f777c431f0b 1645962391000000 1646567191000000 1709639191000000 1804247191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 354
-\\x3b8b11d834701f5f7dcafbd80198a61eee699e778a2578676cc2d69d1f9ed2137902eca3847fb8b2ef3f66c48ce21f40f1cf1160e21f40f9a22ee637223bdc21 \\x00800003c5628dbb0a6d2b4b021579cc939bee96105a4258e279d6cb99a77119006381df3c016ec989c7033498354617e5d66b0da48c8eb9d6d2dd55af6256352d65c57a08599a0bd2f8812d01206663e6458e0f5128223b4bd1d2a4de467f68a95aecd31d89e8b17908f6b6e2163ded3ff88b1f3cb05fb79fc0600e032e9a0b2be24255010001 \\x5225d7f457e6653aa34e8427916a21141e47f33da2ac7d6704c463586ab1a53baa205f68c69af1d85eb5bb00b5940b557926fd039e415a028f78af8531124509 1638708391000000 1639313191000000 1702385191000000 1796993191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 355
-\\x429762a533121833d0785f84d14f9f6bcc470b56f904d601fec61a904f67553ce4c8e29febfe43f820c73d75999945fc11da09b4a92cb33d1a5707195c9f9814 \\x00800003cd5835494f0763858810c17d710b15807203e1f5b0a0be19b528b17440d7b245b0ac0127c6741bc8195703b39f3492a16eeefcaa685eb8940161f10e9b1c887c03771d0c382dad1814f4615aed7682fee24565108f359444290c53b035c902416915d3ff9ceeeb4d778cb6ae6fc3de56fc96bc9415d599005ecdda620042c1d1010001 \\x7f26f3c8dce74812cf3910ecd4d63f93be3d5e307a908b2aa3b930d45cd129466a867768f85a15869997cbd213d1d646a8006f821b9e5bd860259f81d249cd0e 1644148891000000 1644753691000000 1707825691000000 1802433691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 356
-\\x4273e507dc9f19af7d1a98337513743d24da76104e6e6504a60de1f77b9914cf13a05bfec0197982efc1771995450b47b214532c1566165aad55c7a82a4f7f02 \\x00800003bb1ea99a3c4b7c535b766047348fd8287ebb7f5081360a9bbe05c3f9e174c2786c1c54f49cd1e2cf1cdb84af9a7c583b9a35636cfafed5d93e6badd2875d1ad221fac86029950f210a7cd0ad817f355d9f6fc99938d33e8120942068bd4135144b6664bac4d7b8296cefc3295584effbbfffba965e58cebc91ca08eeb00b2761010001 \\x21d9b395e8e8126ac9cd2d715e7b4c47e915107537c7b9d062556d402592571eed44fae48ad70c8edf817e85294392e9b79775b823a27a993dd86a3a92ead70e 1661074891000000 1661679691000000 1724751691000000 1819359691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 357
-\\x45a73e3ecc9ae1937cc136c2fa6c10baab6bd23d1f5ccdedcfb250fdcc6289635b33cb4f37fba8a7e010381e433cb1e19aea88a3e6adc761e0c7192648cd1bf1 \\x00800003c204d22b9cf6aff900a006095e2eecef11eb28f527c9ac0b8752a1acfc2aba79d0b946a6765ba4e0f2d532f17ee6d39eb04f907bc52e364140f75f1590a64b95e896be955714221a9bc36b794f803ea4b87340ae4a46024699eb4985fda4fb08e467158828130e748a2b7181f638e08b166677dc70da12c98162cbfa623f8ba5010001 \\xef98216782cd51906634076ba5a16ef5b7bcbcaf9aa5eb7d680c233517c7b4332476c520cf79857e2ddda984c250dae29ae2afd04380e560fc8c36c22dea4e03 1638708391000000 1639313191000000 1702385191000000 1796993191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 358
-\\x47039658b3011b61c08f8384145609faf6ca25976cb177e9ee4a16a168257ea5909ffeb6ab2232285c9462d2fae6be2c6a9ac4052aa961f096f82e7988a2ab56 \\x00800003a200b1ac68d721dc414d11c920c6009d6a6d91ea253beb25bfc4a2dee283041a59c94d1f9a64bb5df636a3edf2945f25c54c2375aa79f13803555404c147d3398826dec75944de253eef1727bea99341867f04fea6efbc4818914b7c15ac5364bf9a98b5ce6fcee805c30095eb13a7069cf5ec75e832fc587f1cb135e74fc4df010001 \\xcf7a1500ec98a087473c82a338fee3bcecc186b7fd030c31f752e105f3c60d9f7e7973926ba840aecd87a578859a830626cb01cc2cafa0265396c7f7a1cc2500 1652611891000000 1653216691000000 1716288691000000 1810896691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 359
-\\x491bb1ce9c0f706cfd4379ab5d95d9d5b665f35f785541ae76c785a3a93545ad0719518f08efab0f2178f5ded1a2c25b03a657937488a2808d3d593323742719 \\x00800003d08e9f8b72bc6165b1d8208b2912761c0ba3c61cfc4af2c314d0841d08274b7e6eb663423a5d88e7b989d0e4cd57ef9e244e4acb180775fab2b3a652abb7a4ca9ef243c111af2afa5d2de4bcaa0f99b3c314399b89da1fa5b4b42b6d5f8cdb6c8a04afc6550e7ba0f0a92206c53876112026a82eb7db45c826f63691f4755879010001 \\x455f0c2610ce59209bfde5f57d5bf1288a4c46ace2ac29cbc1bbb846c56094ad5eec9403456895f9f2c868e59663ffdda2e79830f3feb44a9ebe1920d4c8370f 1649589391000000 1650194191000000 1713266191000000 1807874191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 360
-\\x4fa758e90b8d849f36953b02ed83f4581ae02f4cf6ffc8d265c1125c99da5db3d77f0016394bbe416a6d350886c5ec315cdc714ec56c284a9e787cdf22f25672 \\x00800003a6e5f8433b45cbc2e55823889d447aeaaebd4ed1ed0a708a3d1242ba864140367c87d14a4df12e1c1ce91d80e7a30f511bdf8be481befb755b6a0aa0ca7b442b641db16dc7a0bffd552df3b68e0c77f8b85974aff202307af67009e3d13d12ee05a9c4737dd72cd564e17349e6a14e478f6a084bc6d432a6374c0c67df054e93010001 \\xff82b8525f655940aac95ec9519056f9d6f4ba74b3ed74513db9f15dd068fb8fa51c0cdae5504095c8358fd3e8e13b0bf6685fb5da430a649f922e55972ed10c 1659865891000000 1660470691000000 1723542691000000 1818150691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 361
-\\x4f47fcfd4440c35f6c49a9b2031091a964909b15320281cb87ebd737e72c28db3e688b1e99ea7063875163eac8a770f000419aa72fecf27dfd3615db9314c6bf \\x008000039952b1e79bae3bf320c442bc46d9e89624d32f66ccd6eecf0f1e833c0ed1c11f8a17d74144df7bfcff486900cbe7034bb46378381bfc84bb05d24d290ddb3d33a7f6de8432681ce0d1b4c426e04306435996a72c6844f6be0a240add734da7806dd12e41bb078ec0567470f30d85aabb3b1af16ed8fc7c68b2fec6db0f601fcf010001 \\xf4dfb385d3b59afd7369e6e846a6cbb818471c76b4b427d14a0e8f2de744c803ddee65514c0025092239d1e6b241d2bf1126efaae65df5d3ab92ffbbdb946703 1649589391000000 1650194191000000 1713266191000000 1807874191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 362
-\\x5b173baeb031fe87a96f06dc7f9f97b62b300f55b3da259b7704afef6e89f333531f5e0530c4364dbca75d60135d883dbdebb5fbb5ed38375179b13723292c09 \\x00800003a5ee42e59baca463c3961ea4ac50fc695e4d31bb7f3f204cd1459b66a97230846280cce10682b3b46faebfc2aefe08bb356dfbda44a79c837271a5073498edfb454cc496807482e30b5d1302b1548d39e159cefb8c71cb84addb8744a31161f8d4dcccb437756e486042babff9c3284b8133bdafa5819871b47507c62bd1886f010001 \\x0a8447bc158e505cadc7122dc744b6a2ae43cafd488ff5649e5a8eb7677b4a70727e21923051df104cc5b08a45c1812ff6d32614e293bb05ff6bf75e4b53c60b 1641730891000000 1642335691000000 1705407691000000 1800015691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 363
-\\x5b47119536aabb01d115190f922c3f7fcfa5689d1d51476d5b435b65cf0c452546865b97a319cec21948f3f9514465e4ae3e494efeede560195ff73325890d0a \\x00800003cc722967386739844e5353b42fc7e7f96b9185f525e1831177e17bc15f1b48fb06f818c29fe64e671207aa58e43e09ec4d3af34fb87c7e7423752b7bb72b4da542293fb69cd735fe5dbcca4c074c7607a26e9ac05e85622decb8cb9cad7bdecf41763ced5c1d9953f8ea81c895d50f3d1c8af494655f812315a1ba271139e395010001 \\xba5d52b5f44f14ff2ad60fe0f14f28fe7a89391af38988ff1c2ec1238e788391d68100855cbccd693017676f489ebcd3474fd91700c323e610d3666e10f15909 1650193891000000 1650798691000000 1713870691000000 1808478691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 364
-\\x5e6f763117af50e82147b217381a2d71c0613dfd86ba740155c601174407ba1e9d7912ea8d4026181c370649d17f227c3cd32ddffb955d2ae049709a0e5e6606 \\x00800003d2d57f383136b30d34d2d8b4f8f9a59f50619576a2dd9376ad7c1e16bea3aea1a4ab7dd7187b5be35ae805c19aed2582bc8799a5cfaa6e83c0d9d766335f4b284e9b2816eaec4dc3540765db418afd64a787a31bbb92cd84a6d4a2bd53aac685beb65210297a65c2cff03629cc693fe1ebed2c1ca4e6e11c13d908791b41d305010001 \\xf8703cf2a03e7180b4917ea7f61cb4adf69016dd562e6d1f378e7e003c738ba4788b4242bca320f0ab17b8b26c7e9fcc8cbb1c167a97ea5aa2cc96164731ad08 1643544391000000 1644149191000000 1707221191000000 1801829191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 365
-\\x5fbbda1149bf849e496d285d94065f1f404678114e172f34567395c640e6ebe23240711f4e323537cd058c8e7519b75696848b631b3a703621d4dd8888a40e43 \\x00800003c8e83ee606d032c47de6636a53c9e06fe1164160c86890bcced6ab7c4c1186c4f06ab8dfecdd8bac363c535c1fa5c158a3c3c140295ef394dfd0a8663006ead9fb948dec026435f5488d18c675bc1f8ba931e02e8e8f78b7752ba34ee5d9049d7202fc143b102888e9a36f2985f90fdc90e86e2024bd480db1dac15de6d3e875010001 \\x5a0fdd827cdbd19c93fd7074dd167ac55243f809814cef26defdd0ebeb0d4b1f629f149e007bfa0de12483ae6470261884c1da03a4973ab7a02796f41e233003 1642939891000000 1643544691000000 1706616691000000 1801224691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 366
-\\x6247b1a2baa286a0bb9e2aa162c83849cd501c47e0dedce819ef5430d78596584467a2077cdaf70714b49047ff4de69d76be4c669cd13f2d203cbec3a0038487 \\x00800003c81660cfc534d3017970446509beab0bfa803cc8639c37eacc2f5b75a57c6f4a210d82f214f1700fbdbfdb47a352e011f97f279673b13bc2144f1f2b26c0d37c00e6932aee96c7484a883b3292db7fa256bd0f8e8b81582e4062c3888a97bf9efdee317c0726bb32c8307dae727f846cf31da506ccf09d447b17aed5f9e5bc47010001 \\x80ee1f205de50dc0b0ce547d9f5fb55e7c2db771110553b6d8b608706a5ba6cf5c3b6945888b4ca4bcd3c20d3b95d62ab061c120500dc9b187fee6a739650804 1653820891000000 1654425691000000 1717497691000000 1812105691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 367
-\\x687fef11b23303d11f0b3f0d6d07adbc264fb4fd544ff8b99b19259f42d8e27f6b7b273696c22aaccd8e8c855da600d0cef0ee343b57fe6ca952b5d06c0f7ed7 \\x00800003d580d55600cab395cfcb7293753505d4ef7857aef64671cdec4af7a19f142417541f102ab7332adbe3e901c5f18f3988916c71b529dde71a9284e55b9ab6e8a80f850c8cefbc29dda7ab02418f1fba42d3c5abd63fb3763eb74e39436a60e91b7cc70036097a2c9de97aa6bbe1ef943a526d21c2cfdafab7252cacde7502d919010001 \\xaaa319fbec27993ee1fa0af95338254fcda0885e5cd41f8d783dfd30b49d0ed7b8110fe75e8c46ce5532fe5f4b19e9ed797c85beee9cf049fdf8272f7c233800 1656238891000000 1656843691000000 1719915691000000 1814523691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 368
-\\x6b137a4f8a3230015eed8073402bc29c0240d2ceb2e457cdcc55f563cfb8ca6ea411625bd87d60ed2e3f1290fe30f5777271cb577e283e124859d47335da26a4 \\x00800003a33f74834f85d1168c835d267f1612ca4a2cd5b82d2f250368e9c284e9fdbf328ba817cf1ae183d36a30f2a412e096baed080a190bd4bb09b0f9fc635abe9be86cdeba66c2ab635e6e773c6d85c666420a17bf341019b746f99f1fe36b086c482c15ef1c4fd7606d9a36d413dcf06fab93484da3897863e785becc4e1478e16f010001 \\xafc38bdd8868303a59168b93b456ae7ce9aa399186f287e3ddf651acdc29ea0ecbc0e36c2469fff90f7affeff220e04f25608045e723a44855befd6a8dc2b00d 1636894891000000 1637499691000000 1700571691000000 1795179691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 369
-\\x73eb0c24a5a9cef20f51f705583efccb10e43e44ff34ffeb5db072bf7d84a03f9d356fa56e001f9a1ecb912e228e7624b823b94d090a35496c5b30df5a6f2de2 \\x00800003eaa7b03fe22cbf1687e760657564ff8f7fc01c49e714bedb312c725b43dd5d9f685a1d6494b5be75841c70f13dbe4077246a0179b17f7d5bb21d4a04259e7a2112a19210698aa9027e65f713542b04685fe850eade9bea613bb9c9100839611dc4cfe2fba23cfb275fc131d02174341e58a9cf3da34c1fe736dd6b590c1beee5010001 \\xab4d2eb481776d4b0b589495014d6d591e6290d207ab609fb7578eb3900e83605ea4c07e65f2f86e89190bd3616188ec5c800ee77517d1bc3eaa5dbe15785402 1655634391000000 1656239191000000 1719311191000000 1813919191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 370
-\\x7b573050e4ad31e4d8b259feabe8188b873f20b4649b456ceeb800b97e9b50a95db15703e16b5ff16f28e45d6736e674247578f9b2fd1fc479c52563f314624e \\x00800003eb113cdf3d3b204e71cb122ae60a146f3c80142cf3c5772fa82d03c5d211e506d3d6f56c9a5dda506ee39ea8babbaeb7400ffa41a52b08761367fadccd2a9f8877a1668298918db0314fdfb67995e8cb7115838f78de0f4c0059790009a8c8cd431f79d21f9304546e1b665408e5cd444f52cfd5975ed3b8705e54f7fb2f630f010001 \\xdc29948d7709c822141896ef6ddc6e61ca6e190d1558e8c83dab5ad5148866f362711ff10ccc84d03285e5cb089ea52c8798587dc5475bb1cbb90ac9a8e31704 1635081391000000 1635686191000000 1698758191000000 1793366191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 371
-\\x7c13806d5dec96b11d89ec2e9d6e95063e8aecc0852f670ebcb2a7625f1f8639098a547fcb52630c18d249448cce0bee3bb739c49d6833b9588861f05313e300 \\x00800003c531b26eaabd9b95fff163f85769f3ae2391f453875055ad9fd8bb08edc4484eec38fe636e62f722e8e624ac608afeb2bf87138de108d7d1a9f777b760b6524024c16c5f8d74895b3830d6a8f2087743fe9a92f7a1dff7c3a6fe655cce74815fcd4ca4472b63889286a346a23d6a0c8749b054f68ff66f8446602b7e59ac49b1010001 \\xcc4464bf6c6e3b054d4e04c66067f688f7e72aa0d5a99734983652bb0a0717ed33e21508f5002f60ed2278e498db565e6df19fca9ddd549d403101cc944fb409 1657447891000000 1658052691000000 1721124691000000 1815732691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 372
-\\x80b7faa619ada7c7c49097c575273a7e1db6338d55c97720dd96a990cf453e4d23777159c9cd652908eccf28e955c8b4d34527c9bf879dd4c712bc3a964a2399 \\x00800003c01bc2e8281818c9c641c665f9b2fbc08351314b68d998bbd45da35337de0cb99d54e4283402c616f52884af4e5620506dd9444e851547e38d1320361b62eb616c870b58b191cc73a9424c693883c44ff227d61ac71303613b82c38b70e09a086cd013916c876e1210b19adb912555e4f51e197bba43efb609d29b0ffa1cb0fd010001 \\x609f163f48598cc632ad9f2df39d3162feca0e6ef28e97bd5ca6cfcbf0826847b5378fd6af367f71f0e1607aacec4d847e07da1cce44f0421707a9a746a6930f 1656238891000000 1656843691000000 1719915691000000 1814523691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 373
-\\x82cfba0ea0f7116622b1fc4fdcf71beff973dd4fb4f227b4d5f5fbf91d29764ee4619597f96f0be2dbe8a2c630a991d0aa59825d0bde73256f87995051acff60 \\x00800003d145953696e5356df56f6a8ca66d36f5f837a0d2e1a4676c9f9d7c4ba7a4312e097d792830817046118c20ca726464239e813d59f9203d64b67d27ee120a6b050f5d7387e90939953adae6be832b4d248d93465f81a9daf21c04b5f7118a349e2aacc1a500314e90295578149d7142cab9c6cc1e1396cc5e607b9b484e43f565010001 \\x6d884604e6c0e035cb2a27dd62063824798fb30022e7c42aa9edf565aa1efb05385bf303fb39840fb447a06ef96f6e6c51463440346eb82185fda594843e4902 1642335391000000 1642940191000000 1706012191000000 1800620191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 374
-\\x84c79b7e452098f0002f4fde861e66730ddc524976023d447ec6a725196b24336f81fd7dbd6c4ecac2b05108d86df096aa8545f27e11f22357ded646b8fd76ff \\x00800003a21a373388466eb601a8021773c3f60ffb0efd322e60f2a484eff4f8795b6f4527ebed0710436adecce353280e7c9488cc7797a57603eac7e7ed070aeb207be41e23d5616169f2a4e63286f26ab47f4bfdb79e2b70386dac84aa9fd4b4cfdb913105f72ddd9e703b8f52d97de76e939475d9275e51df7f2d82287dd989030485010001 \\x41262237a0d17805d76952b7c461cb42a6466e645a4a4cf9454244e37cb7dc3d90e4a3ae9f32b904e578728743e0e083694752e84584f8bb4c8d9c7eb40b2001 1644753391000000 1645358191000000 1708430191000000 1803038191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 375
-\\x86cba0bb419f73db3e6b490a3e81a1faff47f0df8f53537e412bbedd32c97fe85f4c2134910011516790827ebcefaf060bd225bf1124db291e84281eb2f0d586 \\x00800003dff894046495062072449bf90e3a22559f1850eb4f9b97da2169ccca4090db9240272f767a4273ab16bb744afb6ea6d12f17f8f31f74c68399083b52a91cbdb236a1c8590a0630b5b4030df0d6e5a4ea3cd56c93dc49b7446d4f4958faa3a1aee03aeaae35f473d29f8b5a3a2a2e1f8a8eb79ce507577c71dabf3fdf14537317010001 \\xa638ceb3c553f7bdeb07e85fbabb8c8527e2827cdb4e8179ffd8254971e850ed4bd8fdbb8a8997201e99cbd895e78d77543499aec254d7d46c2404f9fe04e60a 1652007391000000 1652612191000000 1715684191000000 1810292191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 376
-\\x8643aacfa743966e00ff7d1a6da68e95b34a4a918b64c8f4dabd4f228bf15ba1b32a56466ea6ae73a16be448fdac5b888b7d56a714aa33252f1b20c0b878e5cf \\x00800003a2f1933b9252b36e77058425013678d1d033b688014a61c4d0bbcb5623837e293d35312f4e5595bfaab60dfdc818b47b9ebab47eab1a8804be50eb74fc973a9ae71445fa636b8e2ddeca1d3217868d563f02e3dd084953eb1222967eca8da7cd4c60aaa3e8148be6d59a0a568194678456ba01f0214b33e676f145e31f5d134b010001 \\xd2c55d750bb09c166aac5f5368cd7b5807ec33c5dac427215078972baed8c97c122e899400fe7d8c93ac1654d307aac05dbac027c63bfc8f0d78e5048dee260d 1642335391000000 1642940191000000 1706012191000000 1800620191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 377
-\\x87877b4aa36b2de28015eee1f05a2f605cb8712722230beb464c223422dc0049a78c271dfb6a4a3b6f5107a53bdafe10cdf6567ff3d3876309d33336b35e88fb \\x00800003971abd92e58350117036e7feade6719884e3867f135829c06c75190a1557df7ac211bb4766696db388f13b65a49358ba0b3a44aa182d44f04aa1dae84896bf7b8b2a5e80dedbbc2781b2b22ac9568e0ba526545ba3210024eb1d85f4567faab2f584351a5f57770e717a758f73e45b271ee055d8ea3e4f12138222ff2d925b81010001 \\xd42d6f3c22378a06e1f88636201096baa8d52d02c207af03665ee2a51d93c5be463c43043aa092d4838aa8a2c4b0d8ced3fae114387d1895479fadb955404b06 1633872391000000 1634477191000000 1697549191000000 1792157191000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 378
-\\x88fb491c1ed5927bf15928b2ed7972e0aea0b03330b7521f548cac4319eb3a9bc96ba638b42de3e53b520214f2207ae15a38ef85585a52b664d13283d9853efd \\x00800003c537db2835a720a29372ee8530165b8c9923a21e3ea4c6b5524c6924b5ff187209a7404a1cbffbeccc479cd1397739674a7f01e168418086c4ab069c5b62c726d72a2c43fee3c10e54061345bf10c52aa836ca49ad80caab4b365134a2a4b0803ce05e01afc90826a28c051dc9be871b03eec87a747be151e2216d74450e2e17010001 \\x51a44c2ae0aefba089ef813842406f4e19cae5480fa094e94396f6b3c664e2054fec1a0f0a4fa1fa99541e21491b50f5328f4e9a822fb317ebeb4b936068f401 1658052391000000 1658657191000000 1721729191000000 1816337191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 379
-\\x8b9f92ef1c29e8a8f76a840fd0c32cee1a95d8f2aeb957d9e86dbf254890808192d042f28e7d6069a286daa9a141ef51d0cfeccafb192744b4b9083fc1cd0345 \\x00800003a70538aaf6fce91a12b85eb1e1fa8ea8b075926459982f02db06de5a5e470ccbf84d72f33903f146060dc97b3bea5268c7b563476b6d1e7d3bb7eb2fc82dc7a6d0653985cc986e42526b60ca6fe39ae6182c6e4dbf735c5ae7c802891beed1149d61fd9df3b15561a67a6c7efaee4a39061a03ec72c8bcd984069cd88b8cb729010001 \\x665557927c89e379f21faf8c48dedf9b633a74c3d974eb362e4349825f7297a78bdf52d7b0ebde778a15938cc8ec265e9807394b26e1cbb94570c8c11a12320c 1656238891000000 1656843691000000 1719915691000000 1814523691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 380
-\\x902321634a70fe9010b389db296cfc266843447b1954b30cd4dd8f8accc429297ee28daf12d0f0623b3f21208aa4e48753ee60163694a5561d306655adbed596 \\x00800003aff4f1ad329ffcdd0822a8b0fc00a787c704197bc7018e45efc2bc909ba8301f8daab22b9a28f8c3433a646e0e4eaff8cbf23d0788e1d11f99f3fec348f7508e8c849bbedac8d4eb208788a9d29131eec7183729ca80542b0be121989e72b244ebfd041f73ef86524ae94bacbb4287de3c4c53ddfd8c5b966726b895f75ac1ef010001 \\xf43db4d43bb8b050a25a0a2706afe6e2ad7cc43543ffdb23f9d03ae81518a858426b5e2c40efd4913fe0b8633e4d344a8c2529a33c5b34c2fa92ede105c3360c 1649589391000000 1650194191000000 1713266191000000 1807874191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 381
-\\x99ffce0f332a80224f1aa0d503cfdf7044c50c738ee8e5dd207337eb807a93448fa7a5c400cd7bf5a93c7e60b41345f0cdfe97017bbdb91c8a75265c3782bbdf \\x00800003b1f364a605406fd7e934b8ecda898aa87b764ec04c4a67d59ed01c48462cccb99b29806dba8b26cf0d4ebc00b5a4a9e4ab92887b9214c08c46abd5fceec4517467c88c8230fd37047c44b9a535a54478e522de234ca5220dbb27c86b536f37382502359063d03861a035c840f8ec8cfa514c51f5ef80e605a2ee78256c1db039010001 \\xd7529a8aec69d71561478af46f7affdd9da1f6e3d18a8a6251263799ee22e5541f35314ff6b20ef8c97ca2cd5c043cbb94559ad4673539cd89351b39bfb9d705 1658052391000000 1658657191000000 1721729191000000 1816337191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 382
-\\x9fd7e5b6b6d325283c98a8e5ecb07fdda3245e92d8466032a35f4d1d3662e12ec958c6eb676e4583b28815494055476e4b368ccdff4639fc7854f48230647de1 \\x00800003da66d42e297b327c0ffca83abe1513b3191e4a0bc3af7c17e6b8d70d2c28f8feb154f8a5a052821107eb62cd5ab6bd90e65d28f819034d302c3c79d49a32237267f3563efae176da3ea7a72dad69c14e7569107886dfd5ae2f9fb49e30b2a5dd632e02256e760af5b2f4009885859140df33aa6acb1121316b4abd7b2a9520af010001 \\xa1907d48cc13701537212150e160489b86f102127e5293f1149759eaa5c87a63fd087f183433e841a934fddf20e7fdf532ed0d1ce1142712af911881fc5bbe09 1631454391000000 1632059191000000 1695131191000000 1789739191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 383
-\\xa10b7d99acc56851e1e2737259607a11163de38636cd18584fb8273883df0ba44639b13e20aecc2f0902b44fd7bb21c57149fcd588e9622ccf31c722e7391023 \\x00800003b60981281ba01b42ad63013287012c8b215a873a3de150aa6085a90df2c6384c47216889e67746a2b59735ffbe9f1639cce306b5b54e9fcd67e26584a676df7475edac40354f28981b4222725a41d7cf3982711b4a8fb1133d2aaf4b2d2526625209ab3a3ba07c9f871131531d6ffcf5fc42b6e80f7930faf7ca038fa871201d010001 \\x965ace0a0a7e6df2735679868967711ad863a5401391a3a2366d73c84e2dd4d975d2a67cb8efd99fe9eaa64cec4a80714ff369fcf770c0dde82b4b24bb8aee02 1642335391000000 1642940191000000 1706012191000000 1800620191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 384
-\\xa4174074d76495710d8f0707f8b4f00d8decfd78b8cd0999e7a15d102ab833c84b5a29da55c46f6411c5280ef1b93feb96691a528aa537948c4b316fac648c84 \\x00800003d6b17d30ec1610e4d597534471e384775324f5c42e5b1c7665c66f29b4cbd1f2bbf012653c1dd7330eb8b79c6bfe3d88f9dc65dd3821fc9959c312b76cc415c715e1558bd4ca66ee77cec5cfec86768fc3bad68b382d87516cda6d5a84568807ff3e1ac62345b30daa72498e4bfda205170cade33b3d0e49bdfbc1502f682d69010001 \\x85b9fe3c2481f8982658c9c9c4d675b6fa083adc201f7863604ebb72aa1ed30fe0763eb3d6280b52f1e8f8a1f0b196121d842f901786635d3108cd1e8e1fd50e 1644148891000000 1644753691000000 1707825691000000 1802433691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 385
-\\xa60775fbeae94cc892afe0f9167c842b89910bd231519be549badfc6e3b1062fb78a4ae5d8ada996dc1860dd8b2b27531f4b273b04a93ded0a6396418956ebc9 \\x00800003f6b2d1b152994f00374bdbee4fbc0dede0c9e37b1cdb5eff27416543fceb0e625ffb32055235481e6fee444c6f285d9b449606ee8a3c9d6db6de54e28316c27757050c9d64c584c7053d0343ef5398490a1f5a9bef6e3adcc6cb1d14a71de496632a4060473b0141d07153eb240b97ae113eb1af7f7cd6f0839bbbba5b316199010001 \\x5090fe3f4f19900da1dc44b1ece98eb6b2f1a10e20d29184caab327582ea438d258ed6652224c9673c7b4f5b59236183b4eb8f32cbe4b95d500e8429c040d60e 1644148891000000 1644753691000000 1707825691000000 1802433691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 386
-\\xa653d44576b26c155e29f129d5c1bf82647e420a1057643a05c13f683fbceffd41b45cc4e398c99011b40c6e3ad6ae00e6c83299448fc2fa60854377dc18a2c4 \\x00800003a606feae70b96bf11fd3523bb926568af6c6631ed66743cea7759652b0579c631877e9c994e2e5a8417c2accbc3ed20ebf9c9398e5a9907344fe1698f1d4da25f67d1d1f3c15b86b59f54ee8bd434c80b04a9899d55c520a627913762154b8fdbb3dd3827d9acc158b8cb1b874ab387b0732cfb130cba63a7ff845e24a38a2cd010001 \\x717e1e5c5bb2b37c837b46c90bbf9ae520faf1be7745c7eba3d48a3c0b95acaa93a03a832e1c1df361629179e5a7ad7f25713a42766a985f0f0e0e6731b02c08 1636290391000000 1636895191000000 1699967191000000 1794575191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 387
-\\xa83fb0f013de6a59581ab3d6d71ddaaae79b21de5ae1c80780ddfbd1daad43992444b6b929b4e90357fadb291359746cf5e2992c82308375a91aebbdbdaab678 \\x00800003a90f4cd3b72a04086b25f4fd258262bbe53ced738504b36fba9e8a110c47c197fcc3e09488f199e47132d2cf1c9dd63bed30be2fe69aae57b1e56691915dd0d6afe7165d968b9ae0f809d3439fb81e2f7bd0e11d858e00e3477f043a2fd14d021ae9e26335477ddc9584b5ff39789b1e3927e0c4ba0a09193cef1cf2d7963de7010001 \\xc5fc48b089fee4fad13a4f9acc33085e12473fe2dec74ab2a94afcbd4760fe2d9d46294e61fd5e25a72336ee5aeff98cee645f341d4a7c21e99fd256c9316c07 1641730891000000 1642335691000000 1705407691000000 1800015691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 388
-\\xac7b31dcbfe441f21824f2485eb150761ba3c56b4369fafd2456529a8af2b01dc95d05075241e5be8a3b313fea5d41e93e2f83f13b3537c102ca1bf811406da3 \\x00800003bd60214454a115fba21a22cbeda0d12a44e28c0ef4c60653ed5770720bde30dbc7d93f2d6e1897a63755f97f5df188a3e7f02c7cebdec012b94c53d4e0815e26a83128e999fb2e12d746d563df4f3a913adb0dd08578b72def7a7bb6413831308f896e865f35d477aa4307a3c57628fa9359a5f06ea82a1e49bb6260f96da3bf010001 \\x75b40c5a994ac8999226e70421fc51fe2b03e23c5459f751cd6afccafee94327216b8306624a5819994843478b3016d78bab2f947015c9cd8b2e1bb81d866e09 1640521891000000 1641126691000000 1704198691000000 1798806691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 389
-\\xaeefc57070061c14d2869e7f64035d2d6c8259f14f6f14c24e93df900e3375b228db35e6b1921d638f391e949d5fdcdd6d2df803466cfb921b620fc201b7c565 \\x00800003b1edb3d5091199e25e96a3b1ae4d9c3dd11198dbdad17ee9cd6f1bb9f6fb3d9f64cc5994d7b83390a9a9fdd16379867602d20b6743ff67d7bdf69ad394a1ea78c70271e4d9c1988c4598765de84b5b3fd5b1ba4a7abcc38bebf5be1d310cee67898d70d447e41fbe0968a91d19c3571970ad7c122097ba3c6439460b537af3fd010001 \\x37e87225199bf7b47fd1a78d76878b39ffd15999fb54bce8f5168e9d329ed9859e23f4782cd3c7d04cc39a35d844d917ae760f6cc13651e347651fa527d1880b 1637499391000000 1638104191000000 1701176191000000 1795784191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 390
-\\xb33719e1a3bbad7c4206f8637a38701a26629bbe3bddb4a82b9b8af47263c1ad7e6d62a1a548439f5fa0cd76ca8587884fd25986eb76c50bfe6cf354f698c004 \\x00800003c638527cbd29b700c507375a7581dd870c7c8ee545a2614c578130086cb0dd2ce305f9ef89d55c14db52f74c76625d61d31042842b9582b96bbec7bb0016b2d04357883d4bcef731ef3125df82e81335dcbe7c06bfee879038492ff251958b693fe074c86a57c67b65b941b3b6a7134ed9bc00bdb5d7f1733dc3fab670e63195010001 \\xd87c0b6287d0615d9fc73ecdc38c41c5960715ab8efba7310051a2dfad9424e0fe3ba44b7d27565400f5dad7285a0b2dc0c1505907c042fbab6fff6923d92705 1646566891000000 1647171691000000 1710243691000000 1804851691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 391
-\\xb90b370a1fc94747e4da8e48fe7be433af80fffe1e6ef283a5c1da0f276f585270db1d5ccea340f42bf8e9b954cd9a75c9fda8a8a08af175094ae044039cc1e2 \\x00800003c733df9358e39a7491a8eec83fd20505bb1fd5560329e310b273ae16ab99c0c0187bcbb2fbe20a51e5330b9068b9589fb1b3cdf47f8361b317846f7d6c2d237a77d0c0db38fc7b56d1cbff9cae343e96065dc4d772bd2f4516de5371aebcfad844a94221fc2cfa3af51fd2e0113e894a27eefa353aec51cd0f149da4c62aa525010001 \\x1b8726a02c6c3ce3d2c63021fa99fb14886e1f6d720390f1ff3c13a9175744a49c3456fd8428fe458db19fc8f34b5e4b23359071e6e0f97a5ca5145635366e0f 1653820891000000 1654425691000000 1717497691000000 1812105691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 392
-\\xbb2b8755321f1319e922484547a9f8de32da947603579dbc30552a68f1644b298af73d2e5efd3a38e022f0f31443f1dcfd74b8dc074eb9a161b6ebf4b39eefbe \\x00800003be482cdc03fc169ef16a770c5233ca1ac3efef9e5ba55250cbc8e42feeb60727ac616585a335a135782bc18ba46956ca577464f051dcbd6a71b0d17086f9bc1fc79630d2508aad368a33a726925f824c80fa0f98239e794de6fb86d5690d814e22b342b83264cfda9a8121bbdf5fdfd1a64d9ffd66f472d0b08bb261833a7b23010001 \\xb69572826d0bbc8efa2c09861dc21c4fd1b60ea3a1165044fb3633ed11c212202b9a37a884d1b349a7863d1abec76cf33d8b431af3a692a39fe7ceae9e2dc902 1659261391000000 1659866191000000 1722938191000000 1817546191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 393
-\\xbbffb80aa1fb0d588b6f9166189fe300813acaeebb04bf25124590ad48d430977f81dd84a753bb6e9af12e877119cfc717a12be5851350defe1fbbf2872d52a0 \\x00800003c8cac2c500dcd5264930c8ff287ade0fd534f4f8691362813f89d81a82cbe1fc71461548c0e9058ccf4799cc0fe13a7447fcc79fe156acc4b649e4f0642cde8387669c357871d142697462e0c03f34c0bd4d884a69345bf060bc6f72daf801b85b7baa721b792562b166bc3b7a84611904336d49c9914eb6deada06689b28d6d010001 \\x187364dc0ae54b0bfcf6c1e295ae58fe9edd93ed260b82376b8db1e29afe9ee9d2e20b395e7fb75c97173eca2be6c99cd8907697a012f550fcc401a70594fe03 1662283891000000 1662888691000000 1725960691000000 1820568691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 394
-\\xbde7fc8a39bdec80d257ea6cf327a39e1ecdfe88d34717c88d64f729edd1c331403d4997db58ea985ec63232650d5e51b9959fd84fe977662ccd5a9f2d13b9db \\x00800003ee15b9c90605f35267bd1e2c9f169a7eead52e573a111a31639bd52b33c7ca02a5c2bd0e5b8f72b9f4da902508766f8cc91837f8572807f686558d8498646d2d4c1b4431548a88a02ad71547ff0aece232393b9a740bc34812207a746a919cb31fcfb90b6bd8c848e693e5fff87eee7111d3f19e20bbe94c03489198666d0ef7010001 \\xc032afeca13e4fca7759753accc27ccab8c46b784c343fe76523a4caabfc2c60efdc966c738196c584f8a416639c03c4b13a0c4f82b5995478ac4b11cb2b7d06 1641126391000000 1641731191000000 1704803191000000 1799411191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 395
-\\xbffb6e319e0082e33ece4efe1351f6ed8351800210ebe1d2a8ce3659e1fa8a93b01c508f736c6a653ea93eaf19b27312ea79e025fad42e6a702fac7d00c17d84 \\x00800003b52d844299d48508d43dc98b73905140ad6727074075b2e0bf3e776ea3ad3f432e58c08256e2f1be67026d48f75f3a9bb8da6640d6f1e5e55794e633e9c02c6303b06ff49cb251e4cf652d06a0dba1edb0acd37e19819b549ab51f3491465a19bc666cfc035aac24cf0d9cf8358d99e7c6bfbd2bae32ac2ba257ae8840c5e7d5010001 \\xc869f63a4e4cc67dcf3c1ddc11e21ff05de806b4a891709b4a6d6b7106a7e6d65e4acc7306fb39bc3d91df152b9561d56ecba0f40c6412efc9673b0961d0fb0f 1638103891000000 1638708691000000 1701780691000000 1796388691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 396
-\\xc0775055c1d4149b4f9dceb5219563f076b3632da921cb57535a5cb886adbe5ef6b7f192fd38f92b0d2b0d323dd1f8d31476d9086141ef5ea3ba56739a78098b \\x00800003c59ec00273d4b68ad25e6045117d8fea6f8a8932a9495e9cdb2edd43e552a96ca972aa6b2cc72c90767689ed897516b86f0f0c2c4352904bb9f5f9732ec126304a86a62d8efe12f3c32e7a8a074dca405f892f461631f1dc318de17dad6d87a276037d9fa4f8b94997d9b7e703e7cc4b7bcab0343b322810d701b7906a279e63010001 \\x7d99c760f65524774bbe5dba2719358ce371caeb1140985d68f7602cd7918056bc9c846fde333a4283facae73a870efb4e570bd6b8ba6200ae70289e08bdec01 1647171391000000 1647776191000000 1710848191000000 1805456191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 397
-\\xc01b03eaff193bfecd20b14db88401e888f5ca401c7e09e1d385169b146de2438f4a0f2cefdc3feba3af596ba9b4535681cd53463c3521dea0371dc81f413de2 \\x00800003cf04f802bded34bc81578e47124ea69845e3ac081a9fb34f7ec5633c5f313b489f6d647207d99ecadc76228c9f3b1abbd38e13a1cd7d0e9be89bfb78073479be7a947a644ca2918c7dff8d03471d530fdaa8693e68ce8e2c3555f299f078c46e67b4e5581268f79fa349230106e77e6482595e5e6982ad2f45ec77359b133113010001 \\x2f72708eff574a756065b4f66d6893e2416f8b30f93f464db0b4b7f7a6532471090d2fd2489401e0c82fbe7e6e3718d12d5b14a9f0ce98ebd81e96442877390c 1662283891000000 1662888691000000 1725960691000000 1820568691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 398
-\\xc12bb1898447e13831515490ff3cf54dd74c60af7efa098b667ade77a764d96a37d5dbb9382fb60a6913bbd6f6b9e08004d72d8dd732bc06c66ea5383e59595e \\x008000039935ff047603f3e228cf36240a01353f935a18ba5bababfc7ff3a89c30994ab147d17081460f807000aba8ab1926fb86b4a3f2603daaee725867496075d867e10ca66b1c86d81890d61d19bb3e2a73e03afe5eb6c0fa4ff9df353daea581cae29f645ed0759e865150034595cd692b8e42437811ebe1741dde60ecc5f155feb3010001 \\xcb29ec7b9b1236f4098a11482e84cc55988b4d3ac0397413870b722d773de52db837e67a578ebd3b072f932383e81c43763c7d931e5e5f24a77b4de01bc7f50f 1632058891000000 1632663691000000 1695735691000000 1790343691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 399
-\\xca974237e1f34a7c57092104cb0447921519b338ca78fe536ec2bbb11ab51063648cc3e07c9df8d43a3d20af73787fe2000efc5bce4670401222490ebe6be2e3 \\x00800003bb694937b8bb52fb112c688fc6dc814018ac5328296b43cec6e2cb334556684e254a23b1901b517880a3c56d949167f7c6139c9d502f4b2c136d68060008a5a94dc470f689498b80f6d879a6d6eb963f0bc8ebdb42db4cbaa5591bf8d335d86351d48f9195946b6eafb4656d059ab62dc72ba5c83a78a5c00d6aaa65b883a60b010001 \\xfd15e58f55612e2dd8ee7628ca62f4d3d0c572db479b5a3d547cbabedec055f5ab178100a942ac5439238727109320cb720325ce33647a653dfb877c4f5e8a09 1638103891000000 1638708691000000 1701780691000000 1796388691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 400
-\\xcbcf70382a1893fbfeb6da1be9a686f7aa6f63c12066ffda8b0ef4673cef544a4a1bec68c458af47bbae84799e2ce3e35806f973243b28a430d40f19c4f9b34d \\x00800003969789b8cd878fabac1f51c562aee695885469d7e35dd5da061bf5f7027f33140bc6cc96a70381040f17c6d676b54da0eb4749dfca29cc76b697bdf47cf26de0fd89c2cd2946741b4a44c5ff527998d7f815fa7c7809bb1bc845b363de59bcb806c40378055f5eef57893cd4e723aa5d18f89ab29a1aa9485c2b114fe7ec9f3d010001 \\xead25a20419656045b2edff7f94a2654391d30ef0254834f9e6e4377df7cebf6b2f6eb5ecce86a3be66991239b36f2ba2e441b1e6fb87285984b1493705fa008 1636894891000000 1637499691000000 1700571691000000 1795179691000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 401
-\\xcbe7d15602fde3aa1b839728b1dd0ffed3a2fcecc73c7c931aa6241466cb4f7f8ec094b234fe31a1f19516a9830f4cacbfef7d38d8da644bd560028797647c80 \\x00800003d783d900ed5d3016d3566333833769b53d79f90594d6f4721fd1170830bbd96a2aeaf20a8cb7fd81168ebf68e50114e1f3e2efd32db4d68526d2714f00f50bdc3c872287e81daec447d1b71bbfc30b9a0e2f15151e99ee08187ae73ad7e3ee870355b3bef323fae930c6a46a89b1a5fdf6a23208f241e5a17b141955ff05ab61010001 \\xd911ad4325df28d8fbde43a89de5ef0dceb01077d0296512a7fe56db6f252953f6206cc67f03ef0e48442df7226a9560351e3ab6246e341a98ebe6e5ca01300b 1636290391000000 1636895191000000 1699967191000000 1794575191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 402
-\\xcbf32a68acbee689ee57a7812d803094d845b56141c87f8a20a417ab68229f40f0d3c3d03b0547629dbc48f2af542782a37315134a94004e8fda272c21c0c694 \\x00800003d4963b0290afd5062a3e268fa89fb6eb3b1260671fbdfd57b0af6e05c37c2fb21c1fb4dacbae51a2164a0b5b719d01f7023bac6acce74671a2b21a7b45edb2e35eb9f0e7124d1cce123a9d0b274f766c3adda573ce4ce7c2ebc65d0ec618a937f24fce891c3fb4fb991590c83a3aa18c4d84bae07a8d0030c6a465e49f266513010001 \\x7697a7d15d8cfa6c4ed1ae71a8fd5befb74076d19639e5cd641f1c732b45cb99850c80179bc920aa30955a5aafcdd24f6503033ba5a32d2af87ee1d9674eed04 1648380391000000 1648985191000000 1712057191000000 1806665191000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 403
-\\xd01ba724633981a1439eb6bee98dfd83dca551a18f0f30a3faa510f47781b6269acfba28eff5b124f16f93626a7a70d48dc97d711dad45a119469c68927bd3bb \\x00800003d54d974b5e224383ed0c48272f1ee85070368faf9780b418491b4a3820c1a4fc3e20e0f70303e38a019ddf3c3cbe946bb0c88fe31b5b1f9eeffe99ebebe0bd2957c24392c42f93f187241900b59d908f929b020c7abd6f3f44281b7ab89c5254a7e83c3fabd630487cb2008ec29c691d155d1b72b06bb0e91d2fd8c56ef0b211010001 \\x132d58d64440a1f8e696a717f4e68cf0a44de4dc11cd30155137d77408e7490e739d55919b31dc26a73fb7733866050fdfef3c3f8c49be5b2a95c887c6af5001 1643544391000000 1644149191000000 1707221191000000 1801829191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 404
-\\xd26f0f04b3a17b30ae8c9ae26a5eb7e3b5884af9dbd0c0479b4cb0fba774b6e4085523afe364534453be78acae422ee7fb39213095b454707046c7cf8c66e81e \\x00800003c1a8cdebaec73ad8536fd6a12c868860d30b101dd6dd64ecd1b123f8966d9eadcfdd490a0dd5a8b94c6810a14835fd08892361be760ffd91b8f3fe2070750ff27bc9c1ee79271f59b8732f882ed5404c402cec01fa67629ab031ab2a7a0e5d33feebaca9aead1f112886299a03d30ee727749d6d81a5ed762f5cd13055c845f1010001 \\x1a4be54a0b4bf5bd2b0700af4644e033ce925b11a9bf07b02db5fe888c84c530d5e0e25a038c425c7978e7270222f90db1617ea88f2fa7cdf751b865b52bb90f 1645962391000000 1646567191000000 1709639191000000 1804247191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 405
-\\xd5873529cc768a20579b43be710604453701681ac51f9762264fb8188ebf2772cf96f485518a40cd658ab02b6ca2d73ade15049d505c59a036bf448b2442fe41 \\x008000039a58340052643001549f14be15c0fd24c0c029f30ad0b1d7960c089b1bda98d80b346a2b1d0602c515182fe4b244d5055b8e7ef12185e33adfb57fa73d50731a1c2ee0e1f9f362ec71ab51e86df1577a000f185224d74f8aa3dc0f9d78d9f42aab8285950d66b8e7ac4b74b26deda9aa11ca0e9f17dd4372f262c9a2ff341da3010001 \\x857c4ca5d318fdbea1faa42d7258b5bb55c38f6a66492bc3735b6af361b83792fbb1877b6c0f1d6ccf1ace785a80ddb4ad7d2444d2da38439db32fcb8fdc720b 1636894891000000 1637499691000000 1700571691000000 1795179691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 406
-\\xd63b04410a2f039dba5e0549f5253b068f603d9ae9a79fb95be1c73b4fea5488f8becfa21cde041ead368a4c6add6822c0a076ba95a6ce682982ba7f67abd0e2 \\x00800003d0766061d6697788c3bd9dd1a909bb6849547d28daec4ddb6d63cac968eac4a0fbe46db6d09fffaa4e4abc78e397573001ea7f48ac0b3ccc21942965731ba5b8a12f31f43bb161a20f136c55a05e3e28cadfc2bf4eaf8ae73feb5700ffe6d64d3d6bd020518c5124445b3e237fed4a98d1df431e7f1ad1e64a256e8198fb26db010001 \\x15610a20356a63e8090a8d378c487110f53c7f810f9de15b26ba4fbcd63df5d0d41552a9792595a121e7925b751ea7a1a7013f78bbaccd71c5f62f647720c201 1654425391000000 1655030191000000 1718102191000000 1812710191000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 407
-\\xd7ab20c2032b11899532afc16b72b1cfc98c3349963542fe279a3ad874bb3caed8a3173dff8c19e49af3ebc696a8fc8dbd101df67cda886b14f966a952ff6351 \\x00800003c8504199b40de7cb1fdb6d691944ea7924570f9f40063e4b9f17faee9e781c2241a58541169508ce826bb34aafe99467bd0082063c213ac69bd4f3afb564bef305da15499fb3019dd1d753b37c9731c519beb6b2b1787ad451182b10e99959ddb7a9e60c5b2c197cd1de4731403259ece73eafcdfdec39ec86a40cab6ecbee5f010001 \\xda426e9a956c76470b12ba30de7dc3515fde5beee5f82fe6f7d266d4edc7c4af2ab9ce9413af99323b0d7ef79edc374a5d4b0eefa1995cd47935ef49d63e9e04 1653216391000000 1653821191000000 1716893191000000 1811501191000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 408
-\\xd953e8a63c35e2625e2c19a08df9ca5f30632419a612c52b74008e3302f8ed2fb6f7cfa034fc6ea93925d45e61704722f70a570100b71c79af63ad67822b3f27 \\x00800003eae354b6b8b901746d64bff9f6d0944d37da14fbd397990e81284152dec88c84e00708f62ca11b5a5ecd0ec55c287d8acdc896b9cabfa2a141dbe8571f1f0d003539c948addf4d74f5a981b18cb5fdd0cde94c9fb1d4031446c69b0bbc79a649f19b443b6ddccb920262a5a8a652bd8253f97a79c6e4c9ef41ad7837209096e5010001 \\x342de80404e333ac6ffa44c368493c6d73e23e577a3ef44c71214b908ec6e3947ef0ac01d96336c1a0e1c4ca537b7b84f35de9aad19cdedf988e978f9860690a 1658656891000000 1659261691000000 1722333691000000 1816941691000000 0 1000000 0 1000000 0 1000000 0 1000000 0 1000000 409
-\\xe1ef462d121eee0aa66e97ea5d80efc8d561f45283ef2eaed02f3eace6952ff5af276cfa4d9784bde7c3e958382a89960c4c034f690075f31fcdb89a91b85d40 \\x00800003e1c1c8b0dab16e706ddf33e57275e3841718681c7783bca92da789ff6109d76d0b78ac1c85dbbbc2fe0242f02d70b461192123c0a33e4bb82be45497edfe17930fa5acbc29c18731080bf97b52f520643dc72d11da692376e3393dfb5a59d506e9127457647aa702723461d04a40ed2b685c5f4a8088ad45c225495becf5bb73010001 \\xf7b4e548710a4796f9afcf009c546737e9b9f71bb8e02a6bd360c4aee68bb3051bc79eccc8d657f187bf58f31e006f28feef2675aa54ab036c6728a952f9c709 1630849891000000 1631454691000000 1694526691000000 1789134691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 410
-\\xe1236857bb1a1473c5dee47e8acd8d06b550d74f11bc5382d2120115d6ab75839456eea2b3e58a958e06ae04b3685447723cacf4e7b07344cfd8ed89650115b0 \\x00800003bbbd67123bc9ca6faa276ec98af20738703dfc908e43aab8cdbcfd5050d034f54ce0b7b9da40fe7e62e016f63fea1e2fe5fa316e74169cfdfc0a374aecd42cac37ae32d2a6318a50684231c3ecfba1a5c421670baf4b61f8ae1640e6972862958b2bc4652e30635cd3c4bdf402633d0a64b22186bddf2fa9729f04691733cea1010001 \\x118d0a653a1369cf25f6d3cb722a2cc6f571ab6583b17ee2f71e5d97d27d53bf631f4db1b28e0bc2e49ae312bc3b53624478edbbfab13b09135b13ea28c61f0a 1632663391000000 1633268191000000 1696340191000000 1790948191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 411
-\\xe73f853c6a84e00c2241cbe62efb05a93c59c789a567eb428a04a2d89d9924a78c8ee874886840cbd072a32464abec08807bc401599168b110a372e264240f6a \\x00800003b8e717d5b7c565b31021bcc351b45c711192539be71937924e64b26bb842b179f80cb7f26327ac60644f0cd654f31f14ec92287c870e146a4d7f0a6e42a7bd0e7bedb313c3cb8b7664c481831a82fb45af32a85a8834ab079c59a52aac76a43183d6b7b3ceffc55ee6099d8a1c772a4e93a3009452fced6cfec652700f130711010001 \\xc3e9fc008d116e0aefbc10de65e0c0c3bca9c5c02d56a79afab68cc57d08790668f79e08e83c4437638194fc4cc2581bc68bd76aa21335b685629be634039402 1645357891000000 1645962691000000 1709034691000000 1803642691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 412
-\\xe8a793bb2352f1038dc9a710d29355c82844a530a1ab46c6e80565543540b546f991cb7d62746a3957da5bfb3ec240f3b75d6ac81a5747a82d93deb4dc11a8d2 \\x00800003d432f70b1e05efcfa1188537b351124e636b46f669e2916eb1eac19151fd782860ea9a94a7b028aec2bcf15de8c2777d38c44e46f98bbb08b1bd0df0b5f47aeabc8fc90fff9486bc76297efda65efde4825d112e1e17d47c9a02c22e1645b5946825c5df63641d0bd4d396e9e136cacf913e90dae33597154ef438b6e304d007010001 \\x2bf805ee0472ffcb5c6c24985d02f47b125e48567378a2affa07788635e31f463210ae8424e98bea3997559b86628609ac2ff3d9e8fc2e1da572a6928eeb220f 1659865891000000 1660470691000000 1723542691000000 1818150691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 413
-\\xeb3b6e04334bd79bdc0ed8f7fd5edd72ed1c70101853722ab7fe96ac84182bf2b1952f46fdee36a78d4bd1fc6b17bbfaee0f90f13d1577efec865059fd7904b0 \\x00800003d59553e982d16c213570eef85d588c4f1326a1f4c5b16f84493166825e5e72674a5666e011c3f63d9cfded688bbe3906864c2e6ae1088cb96fdaee35b1aa7da0b99b95df63302fc658796ca1c84c3c21bf98a0493c77e5766db562260fa04d3dde5ad125107f22921ab382531da489a8ef859b512ab0c1624fc3daa3a38af743010001 \\x904f18a944e4c1c2b9827513c94b77b127691041e42357c3a9f6a8d0aca690119b37e1c398c5ccae22a67ab523546330f18abbe43d0e5984af1e0c1a66ab8808 1650193891000000 1650798691000000 1713870691000000 1808478691000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 414
-\\xeebf2b470eaddd63a3b08342a4c979b40fb4c293e7bb451f0b124ab73602a7890b5be8336b7c4c204bb1c313b3a9f19c83794b6dcef6538c3293f9b48be57fc0 \\x00800003c8a891c8d817b01121249622d6de45d99ad4890aa32e72aed59b9d250924ebbc10e5c09874e719860e80d062c6503c2ae6cca911bebcb71a4f80b2bbc6d5d0ec6967190bb0f0be479e6280581a348d879721a4f79cb261ec8a5bb3aae973516e99e553979892a9656ce08149b9435c1b82c87c783b825375d6d309d0e0af46a5010001 \\xfe0b2b69b1bfc510f367858f8b8a4b0006722fd3e70b660fe098d71e43ba1caa3bc1efec7f2c05c6847a9cb11463c7c5f34e4afccef6abb60e6502005f492f07 1660470391000000 1661075191000000 1724147191000000 1818755191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 415
-\\xefbb980290168ad63688dc4c4814f13aa62225196c4cbc6f50670254c2a8618b7f372008e40a30d4f5bfaa39a2a91f3c2b161be47bd0b731611d973c056cd171 \\x00800003d8dfd31082a1bdd47f2ff087ee72bbdcc8653122ad76670184e2f4f3ac1e3b6a0cc3d03a205c5390fc107742101d6bd7bf6c957ff62f03acee9eb28d6103ada71d8993c2bb14ffcb8a407783babddb9fa6e33f9be807a344e25bd71d2a1e72251d4af03e08c40b31c7cab2cc9b7f6462b293506aea0260f1b99ca893d27eb6c5010001 \\x5c7d1c3ed4c2c87e521b8e3589836e04ca2a1afd1a69ea6cf5e075177988b9b03e6b0773e45230a08132b5eff3d3a62dc8b28cda50e314762ac495d55e53740e 1632058891000000 1632663691000000 1695735691000000 1790343691000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 416
-\\xf1c7c257f2ae0a63820be6523431789d8d9b3af819be7e0b6df1e50c5a191c47d1962d33757d49c860c33d7325896cddf98ed30066931824144c742439bad362 \\x00800003ecdcc46aa4e46d7c14e388f9832cae08ab177964795af0a2c226b560ecaa04bc5f4f4627f3e8d96bf21d2991667dd42c4dd3e441ed553c84d2e37343b058d8ab661896d14e9cb60d215467804f42bf90ed8882d921da1495a660f0ce98b53056f5826c97184955b663b7cb55111a4c71156b8e20f61276a69161e67b12734aab010001 \\x159386115f6666234a8073f10daccf7325b6cd1593ba785404f172875a7922958d497f5a6dc8d1db3230b8ef78ee7ad14b409b740567ac75f83dd481f2f6c90b 1653216391000000 1653821191000000 1716893191000000 1811501191000000 1 0 0 2000000 0 2000000 0 3000000 0 1000000 417
-\\xf42f289cfdd06e2e7b9f46504a2b62d49d3235af64d8bc65d4ac68e6f9a2950e2f0378baa604e5b340520dc52f7f7b2394edc31be2703dda70d7885ea1fe129b \\x00800003e4006b73018930db7a7824fa9b86e54baeebc6934c914fdde8c5fddcb17c846bf2f5d5d047fd3d3702e34eb2ae359cf71dbe05581329c2899b332f24da5154fdf179886929465cf2b1ff7869fdf9ffad985b09ef6d0d95138c71f928b13a07d024aa7114d83ba6a14e54134eec2fc5d3e53d119b19b48ef971d9a520e379de97010001 \\xd38ae3cc49732e5c94dcabb469be2f438dd65a8f7193285a5a575ef2f0cde3e3c0dee5cc7b5a2f4c9d090c0f0184c66f0098fd9be4b6515f353bec8a7eb0390a 1648984891000000 1649589691000000 1712661691000000 1807269691000000 2 0 0 3000000 0 3000000 0 4000000 0 2000000 418
-\\xf8cf4d658c3a235ca047d486a3a0e3f0de4439c93b1e5bb54be9ace59cb9d67543339564ef8aa548923fa1670a791916e953c4c7932c35156d100f1665bddb21 \\x00800003bcc827ec07c459f8745cd2cb15a92f83175b7ea9e3e2d1127c99e3bdb48730683fed88476db0b0952c0889adce83ded40ea6903bf79b5d57aca52e1d391a994357f0a537fc237d261ce375d210b53d4320ad90f73d7d43b462bc4b011d3daf5b9ed17d52e01f2082e83f1dec6f505c18b8a75f1cedfdecbb3b8a6e042592402b010001 \\xc2039845c0b6299a44bd2009396b444ac3aebfe536710984f9244851d234828cc89ad5b3734132f1da4359cff073abdccdc75d4ba51bbd1fc619d3af59e1bf01 1644148891000000 1644753691000000 1707825691000000 1802433691000000 0 10000000 0 1000000 0 1000000 0 3000000 0 1000000 419
-\\xfd43bbeb226b80dd982423fc2a6e1377c89783a32fa87ff86c9a2d16e6e6a9dbbdf43f98b113d17426dbf086f11ebd87a7cd9066452d50a112a49de4923ee937 \\x00800003c82a8a95b84f6b75af1043639014a8ee8738d2141919b1ecbf47a7b7f37b0454f176ea729aed4ad4c9f8535d872e38c14c0fca6fb97ac56e61ba1c35ab303e91576a8037dd49e28bebf97ca0373bf9eec34438f3195cb22bf6c75d99b34d3b3aecf548b456d8de97466f5c5f7db2539cd48d210a89c310f3f2afea77d654dc43010001 \\x370fd99f4e949aff146f84d2eccf4f1bcd61620da6d85dc3fe6cfa3b52927602a03061a6879c55a9e017c684b0af60560ab485bab78faef4dc11120c180b480e 1661679391000000 1662284191000000 1725356191000000 1819964191000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 420
-\\xfd5f2f8dcda4ec6caf58a2e22b28e58941a31080cbbdb99ca0ab494e44e4b8daf625d1dfe78b4ad24ace51dc03d0b10fb0268b5056c988329a5da7c2e1c62500 \\x00800003c5e01fd5c5cf6e7c255def00d95a68ef739d74ee8d667237f746dde2c359fe6408fea126c532df1554e062acbe71dbc8068c8456aa73a4d9515f2cd77e857dd0077d3e34adc80287deddde658cf13bdb938d38a66aff052bb05bfa54f00073558c4df2e3e417b00404a7322d59a069d4ac1916f27c3998373898296f1f10b75d010001 \\xa7dd65afcdac81a94135c66aa8a14f3e3d561df47015ae7e93f6f7d2f46804c996f83311988c4deed81e30551c5c7e584977b1842de369ba2c7f6de8249b3308 1639312891000000 1639917691000000 1702989691000000 1797597691000000 8 0 0 5000000 0 2000000 0 3000000 0 4000000 421
-\\xfe0b95a7f6576aedae5c320b5a68258faa2918c64e4f8a3a085ec4dc70e077c4c9eea93b220bf72c3454b25310e69ba1ef7d4929fc6ef30ac1226b156d4c6d77 \\x00800003b83c15b29ca78ab7a102b9cb053b4653abc611fa20e361803886005588375c38dc720ec4984d22bec450c180717fc690dd87a1149a755b8c5ef197bb705aa3cc00230edd9865be13bfddb4d348eb1f6680fa88cd8f4020aa040a62b1f1cea40ec48756fc064d60c9bcd6a5f632dc8decdba90f75d6c51efa11a74ee1ff0e806b010001 \\x129ff2d46d956b47dd04f449cfe0d779d910808632aecca252cf5eef38e9c5f5235700492e15ffa10bffc1fba0cfa4967e34d2410d390be8f95d05a8059a5f07 1656843391000000 1657448191000000 1720520191000000 1815128191000000 10 0 0 1000000 0 1000000 0 3000000 0 1000000 422
-\\xfee7921706bf47cac53efdba42fee8ed80d3d5a227d97de0151ea6edda247fb7819c7f32adfea2b31f359e877618bc3baee2482e97c5e6d2be077b44750a8719 \\x00800003917d1248df553c5ac0c6e34fd95604a851e292fd81fcc7fa27524c1a44ba36f1fa6a83451e874cd31908f5750a4c9c669f769b5b26023dfb6e702b1240da746de3ada9cc9ea734f94b974ecae09657d8e2f77aa31b8034232179e03b019b9d889169495e28738f7761f5f5a7bb060338be1f5c50262d216747b84daa1407c873010001 \\xfa5c44973a3402928894b699b3246dc365d813be0901e760d487e737aa3e15f92932b5841e23cb7c09450a13286f877ee67ff232e078eed0822167c0153a3708 1656843391000000 1657448191000000 1720520191000000 1815128191000000 5 0 0 1000000 0 1000000 0 3000000 0 1000000 423
-\\xff971c27f67ffd758085ebc848ab1df0aba930ef90798c59847952614d2f4a51ecf89b226a87b233a6260d92ea21ffc415b9866cc594c191ad47ce8cf3253af4 \\x008000039ee8a7340322f16e4d525baaa0c6d2a2d5348d170b578f45681ef8174751ecc6795e86fb1e6cb0df5f0cf1535683a0b1950e9788108166d0360fbccb5ed90f377bb58cd9ef77b0741940694ea8172b62e042d2e3511325f9deb69ea46847cc6799b76db50a9f8099236cd5e36466dc4c430746ce79b6b954c23847996af386c5010001 \\x3d70b5f0e682e1593607c12861582280cf6de53da78e4221ca012d08f33c8ca676ff78d432af1732df716480750ff93f1a6447997030498b39dc6af2337e6c0e 1662283891000000 1662888691000000 1725960691000000 1820568691000000 4 0 0 3000000 0 3000000 0 4000000 0 2000000 424
-\.
-
-
---
--- Data for Name: deposit_confirmations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposit_confirmations (master_pub, serial_id, h_contract_terms, h_wire, exchange_timestamp, refund_deadline, amount_without_fee_val, amount_without_fee_frac, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.deposits (deposit_serial_id, amount_with_fee_val, amount_with_fee_frac, wallet_timestamp, exchange_timestamp, refund_deadline, wire_deadline, merchant_pub, h_contract_terms, h_wire, coin_sig, wire, tiny, done, known_coin_id, shard) FROM stdin;
-\.
-
-
---
--- Data for Name: django_content_type; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_content_type (id, app_label, model) FROM stdin;
-1 auth permission
-2 auth group
-3 auth user
-4 contenttypes contenttype
-5 sessions session
-6 app bankaccount
-7 app talerwithdrawoperation
-8 app banktransaction
-\.
-
-
---
--- Data for Name: django_migrations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_migrations (id, app, name, applied) FROM stdin;
-1 contenttypes 0001_initial 2021-09-05 15:51:31.798082+02
-2 auth 0001_initial 2021-09-05 15:51:31.854338+02
-3 app 0001_initial 2021-09-05 15:51:31.892723+02
-4 contenttypes 0002_remove_content_type_name 2021-09-05 15:51:31.90646+02
-5 auth 0002_alter_permission_name_max_length 2021-09-05 15:51:31.913559+02
-6 auth 0003_alter_user_email_max_length 2021-09-05 15:51:31.921876+02
-7 auth 0004_alter_user_username_opts 2021-09-05 15:51:31.928196+02
-8 auth 0005_alter_user_last_login_null 2021-09-05 15:51:31.934257+02
-9 auth 0006_require_contenttypes_0002 2021-09-05 15:51:31.935654+02
-10 auth 0007_alter_validators_add_error_messages 2021-09-05 15:51:31.940818+02
-11 auth 0008_alter_user_username_max_length 2021-09-05 15:51:31.94948+02
-12 auth 0009_alter_user_last_name_max_length 2021-09-05 15:51:31.957133+02
-13 auth 0010_alter_group_name_max_length 2021-09-05 15:51:31.967293+02
-14 auth 0011_update_proxy_permissions 2021-09-05 15:51:31.973802+02
-15 auth 0012_alter_user_first_name_max_length 2021-09-05 15:51:31.981363+02
-16 sessions 0001_initial 2021-09-05 15:51:31.988354+02
-\.
-
-
---
--- Data for Name: django_session; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.django_session (session_key, session_data, expire_date) FROM stdin;
-\.
-
-
---
--- Data for Name: exchange_sign_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.exchange_sign_keys (esk_serial, exchange_pub, master_sig, valid_from, expire_sign, expire_legal) FROM stdin;
-1 \\x266d9e9e6a622427d9a6bbacf278735c0442210fde343a68ecfc4f9b3e404260 \\x6c167ce6eb8dd908a3a13d1bb3de996630ff3add1eeb103eaf2f82619b89997cce448a308be98dded98d9645788e21bdddc73abe28f082373c2a572d773f6b03 1645364491000000 1652622091000000 1655041291000000
-2 \\xeb9ecfc8df5b215b3f9fb666b1ba6bbe40d7a6506b58a833c7b58c79401d8c33 \\x5bae0e3d4f186b268a2acab9556cf1dc789f53b40685505a9e3e3eaee609c91e006dae262f21ffaa66c12e7bd66b4a060a6bfd8b7d190d7fbcb1c71b71f22c0e 1630849891000000 1638107491000000 1640526691000000
-3 \\x4ea3faecfcce0400e230d0735e9a828552e68c71d41a61c74e8900adfe46590f \\x3bafd53883f702d0ed01c89bd1613295d138ad7f23d37dcbd483e644dcf88d7ad2197c9f3d78d5d9951707e230dd91e1482667d3cc5702a5e0ee7e99e44fc20e 1659879091000000 1667136691000000 1669555891000000
-4 \\x9a2ee6a72fa0ef71268f921a11063a095a92602dd7cb029531cb87066369f66e \\xec1178186a2a6c6a8b516ac7bbad6accfacf4e7d1ee061aadee03d53f79a0c29d9a19eb44e48d385020f7b47bae5379d298507d286c31cbb5aa0c4adb6b8ab07 1652621791000000 1659879391000000 1662298591000000
-5 \\x9bff17b46249b09c3ef85bb11bb95a962195da9183440dfd345ad2b07587aea1 \\xa0365f99d756874995a6840f8dcf91625a2d2236d214e3a6a724ea93b82912161b576c61fe601997ca46076212b1181794cb99cc4e659c54c741bcb7d358b800 1638107191000000 1645364791000000 1647783991000000
-\.
-
-
---
--- Data for Name: known_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.known_coins (known_coin_id, coin_pub, denom_sig, denominations_serial) FROM stdin;
-1 \\xb530f86758cff4dede3180bef49a301d5a561abb75a12c3f11668c94b1617953 \\x5dbe4cce7c02f62027fc3bf12052ed202fbfc58d64a96d08ab609e028b7377571909330b934c47f2b392c4a73c725d20c0ffe884005b489a903ab9a32232346663ceea4107eea71fb37029109d6ae833cf92699d8ae79984449f8aa664f0eb058e7a2bd812aa7618cbe75818c783cceec8f3b4361b56152e847cd03912fa27f2 247
-2 \\x19b03dc657180d698969336c26975201e49f3606c0541786a4249bcd4c2160f4 \\x7dc208a3b4a087c7811bd68dd4e80599cde1521852eb598febe78040c919456f7c37a9388025f55e73d1eaefbf95fad6d9362366fab2a5c3f180f6ffc5c6d632a77343f4804d2860d8309e5c19dc4766e24a03ae808d08406d50582c62cd06503502e1165e390999c9f3d5fffbb52f149f0c95586392debfbc51f0ad94ac93eb 8
-3 \\x0700b43896f75a968146ea50e56d384998fd9813908512908b0be23853f2fd11 \\x444f1516791566901e35b9cd64275ff273038f3ad07d871a33b21561e603c6fc8486cd29938fe73a2a0b27fd565b7a9cf7969ba873e3ded642a683d53e054bf09386ae2a9899bec55fac43364a33aba21dc5c779ddfa0c7e903eec3b703173e09571ea43642c8342cbedcd5a673154586acb4ab3bc6d81a095367f910d63835a 89
-4 \\x6fea9f2b70c22ccd932bd1911c1c2666470d56616191a089d7a3b381271a4da8 \\x6ced8e80b744f5e32c55d8c3467b43d633911e7e3d171f670e0bf78643ef12b8c8f0710b0773313c9179e2a7446869fded767ea984029a2b13298b7a077bf5735d7fb8ffa125e36d764885531731b525128e8b08e573ccf19c1c60e5d64b81c86af88f7a93fb7c0519523c39dece5637fc4ff025ceb9d6325ac216dc6f6d7310 89
-5 \\x6b7000a330b1116f9218c09bb1affe4a1f5572d9f0f0be1e9c3c6614d6475a6f \\x45166b3810330ad89dc55668d0ef8598bf9b650b3a157ac22f38c883b81e87b178a89fcd16a7a9295f63782cd1d2bfa295dd97786e7558e508df0ba236881139b3258c2b50ce790acc5ea6f61ea89b4b0adb7f12ec3f059fe9670a12564727dc6e6c3a43085749f16e10f2fa84df4f5edc8c38f9651681098b09a53c9e305f7b 89
-6 \\x6fd840f721f28ca4afcb091e010529b4b55a68d18f36a2cf05cdaa1c16e7a09f \\xe1e097ead0924cfdaeb70caca7a9c1a4b2e518c7a0e07c96d74affbf9a5f32ca22641662adac66b2f14798bb54043edfab08cd3a0d781c283ccc40dca4fadc02720a5bc586feccf526476700d88af75437b26aefe3e363de90dac34f0983380912071dbc51b0a62f64602a6d0ed4c64c1077b98445114ae651ff1fb00ece8815 89
-7 \\x345693fe722d87ff5172beec2cb13b44c0e4d966bf9feb1c71722e36e7d5e3d4 \\x3884b99daa4c0d525fe2d89f36ad99c427e5b194e1d81250d82687617fea07d62c58f293e12bc24d1cf826ab6a50fdc9788549bb70a1a903fcc7b186954caa58505d3ab07d94d3c1453cc15093b14844d555585688156313d1e9848329ae05e54fff8a63dad0c026317a944e7cc05e38ea7a738cbb080d2c7c4051bb01e51c18 89
-8 \\x48f3784b67a3f45b9926c702db3e6e589c9816492a2e8ceb4a207170c95d8127 \\xccfaef14cba316fc5f9dcd977051fbaac717dbc3e59f52b95683bb8946bd14f6fa14b33cdc0e75a0745c36bf4ab2db4c636530202190236595ae8cb10ec5ea75bb3ca4c4d4da47a7141f28535291091f8c18bdb29304cbf386670dd9c5588d9ecb54b5a3aeaf067740ae2a5121cae2503d826946b35e07b8152c36649431996b 89
-9 \\x8fe2ee04e8dc3fe224eb390f5f9be88ee7c12d017f6db888ef58339e375b912f \\xcec4356c4da07e350719656b789d94a2a9c6cc493af2ed9b28cf3263e5a4d0947254a326640db58ab5408bf937a6675436d9995662c646a150dc82c8c8d38d9b5f261b9def66decb17549e3672f26f3a5c488a42ea9d887c4e7c33f73b30fd125a4a0507d4b3f1f46aa6929135849568047dea884c8d6ff1b34b77875f449fe3 89
-10 \\xefb5fd64433fa6c987b907b19a812b63c9f8288679b732b7666d324af1d481b3 \\xd882f8a0f7efc903326ac60f24659095bbf44fb9a144b0ae769356af3140764c2ca3cf6a137e05aa94fbdfb8578d2dd98dd3ffbb61f846a1b52c9d1d5df42bd4df540117f9904d6a55440f2c455938d363671c04691e87495bacb4860b5dd4d01ba335c81916700bf8543cb3dbb630d730713bedce9eeaeccae79a4974872a25 89
-\.
-
-
---
--- Data for Name: merchant_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_accounts (account_serial, merchant_serial, h_wire, salt, payto_uri, active) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_contract_terms; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_contract_terms (order_serial, merchant_serial, order_id, contract_terms, h_contract_terms, creation_time, pay_deadline, refund_deadline, paid, wired, fulfillment_url, session_id, claim_token) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_deposit_to_transfer; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposit_to_transfer (deposit_serial, coin_contribution_value_val, coin_contribution_value_frac, credit_serial, execution_time, signkey_serial, exchange_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_deposits; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_deposits (deposit_serial, order_serial, deposit_timestamp, coin_pub, exchange_url, amount_with_fee_val, amount_with_fee_frac, deposit_fee_val, deposit_fee_frac, refund_fee_val, refund_fee_frac, wire_fee_val, wire_fee_frac, signkey_serial, exchange_sig, account_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_exchange_signing_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_signing_keys (signkey_serial, master_pub, exchange_pub, start_date, expire_date, end_date, master_sig) FROM stdin;
-1 \\x0367c12b033b8745fa884971678773a06c03a2764aae69a4f78ef3c88b901a90 \\x266d9e9e6a622427d9a6bbacf278735c0442210fde343a68ecfc4f9b3e404260 1645364491000000 1652622091000000 1655041291000000 \\x6c167ce6eb8dd908a3a13d1bb3de996630ff3add1eeb103eaf2f82619b89997cce448a308be98dded98d9645788e21bdddc73abe28f082373c2a572d773f6b03
-2 \\x0367c12b033b8745fa884971678773a06c03a2764aae69a4f78ef3c88b901a90 \\xeb9ecfc8df5b215b3f9fb666b1ba6bbe40d7a6506b58a833c7b58c79401d8c33 1630849891000000 1638107491000000 1640526691000000 \\x5bae0e3d4f186b268a2acab9556cf1dc789f53b40685505a9e3e3eaee609c91e006dae262f21ffaa66c12e7bd66b4a060a6bfd8b7d190d7fbcb1c71b71f22c0e
-3 \\x0367c12b033b8745fa884971678773a06c03a2764aae69a4f78ef3c88b901a90 \\x4ea3faecfcce0400e230d0735e9a828552e68c71d41a61c74e8900adfe46590f 1659879091000000 1667136691000000 1669555891000000 \\x3bafd53883f702d0ed01c89bd1613295d138ad7f23d37dcbd483e644dcf88d7ad2197c9f3d78d5d9951707e230dd91e1482667d3cc5702a5e0ee7e99e44fc20e
-4 \\x0367c12b033b8745fa884971678773a06c03a2764aae69a4f78ef3c88b901a90 \\x9a2ee6a72fa0ef71268f921a11063a095a92602dd7cb029531cb87066369f66e 1652621791000000 1659879391000000 1662298591000000 \\xec1178186a2a6c6a8b516ac7bbad6accfacf4e7d1ee061aadee03d53f79a0c29d9a19eb44e48d385020f7b47bae5379d298507d286c31cbb5aa0c4adb6b8ab07
-5 \\x0367c12b033b8745fa884971678773a06c03a2764aae69a4f78ef3c88b901a90 \\x9bff17b46249b09c3ef85bb11bb95a962195da9183440dfd345ad2b07587aea1 1638107191000000 1645364791000000 1647783991000000 \\xa0365f99d756874995a6840f8dcf91625a2d2236d214e3a6a724ea93b82912161b576c61fe601997ca46076212b1181794cb99cc4e659c54c741bcb7d358b800
-\.
-
-
---
--- Data for Name: merchant_exchange_wire_fees; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_exchange_wire_fees (wirefee_serial, master_pub, h_wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_instances (merchant_serial, merchant_pub, merchant_id, merchant_name, address, jurisdiction, default_max_deposit_fee_val, default_max_deposit_fee_frac, default_max_wire_fee_val, default_max_wire_fee_frac, default_wire_fee_amortization, default_wire_transfer_delay, default_pay_delay, auth_hash, auth_salt) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_inventory; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory (product_serial, merchant_serial, product_id, description, description_i18n, unit, image, taxes, price_val, price_frac, total_stock, total_sold, total_lost, address, next_restock) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_inventory_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_inventory_locks (product_serial, lock_uuid, total_locked, expiration) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_keys (merchant_priv, merchant_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_order_locks; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_order_locks (product_serial, total_locked, order_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_orders; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_orders (order_serial, merchant_serial, order_id, claim_token, h_post_data, pay_deadline, creation_time, contract_terms) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_refund_proofs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refund_proofs (refund_serial, exchange_sig, signkey_serial) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_refunds (refund_serial, order_serial, rtransaction_id, refund_timestamp, coin_pub, reason, refund_amount_val, refund_amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_pickup_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickup_signatures (pickup_serial, coin_offset, blind_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_pickups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_pickups (pickup_serial, tip_serial, pickup_id, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserve_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserve_keys (reserve_serial, reserve_priv, exchange_url, payto_uri) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tip_reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tip_reserves (reserve_serial, reserve_pub, merchant_serial, creation_time, expiration, merchant_initial_balance_val, merchant_initial_balance_frac, exchange_initial_balance_val, exchange_initial_balance_frac, tips_committed_val, tips_committed_frac, tips_picked_up_val, tips_picked_up_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_tips; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_tips (tip_serial, reserve_serial, tip_id, justification, next_url, expiration, amount_val, amount_frac, picked_up_val, picked_up_frac, was_picked_up) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_signatures; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_signatures (credit_serial, signkey_serial, wire_fee_val, wire_fee_frac, execution_time, exchange_sig, credit_amount_val, credit_amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfer_to_coin; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfer_to_coin (deposit_serial, credit_serial, offset_in_exchange_list, exchange_deposit_value_val, exchange_deposit_value_frac, exchange_deposit_fee_val, exchange_deposit_fee_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: merchant_transfers; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.merchant_transfers (credit_serial, exchange_url, wtid, credit_amount_val, credit_amount_frac, account_serial, verified, confirmed) FROM stdin;
-\.
-
-
---
--- Data for Name: prewire; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.prewire (prewire_uuid, type, finished, buf, failed) FROM stdin;
-\.
-
-
---
--- Data for Name: recoup; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup (recoup_uuid, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", known_coin_id, reserve_out_serial_id) FROM stdin;
-1 \\xde5f4e26d90ab076b1fed0830bd497cf2d2ba8a7a69689237049bdd9fd818ab1633bffbbd91072f071f40d5e2080c23a71796c874e2f5fedce33342487d71a04 \\x8ad497db15d302d0dca29951630651781b7b126c0bfb96c2cf5c52b200e2c05a 2 0 1630849917000000 1 2
-\.
-
-
---
--- Data for Name: recoup_refresh; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.recoup_refresh (recoup_refresh_uuid, coin_sig, coin_blind, amount_val, amount_frac, "timestamp", known_coin_id, rrc_serial) FROM stdin;
-1 \\xcaa367df9edadce33fc2f8361189408cf4bd03fa55483865ec9a05b479ba5ace1031a95245ca8866da5793395a31aeb488a4464af0160d903d559770a86a9e09 \\x5c77569b3b2cc0cb15d313d58b2626c510d780273937b8dc016680de6cdf4a20 0 10000000 1631454741000000 3 7
-2 \\x2804fde71c2e576f0ea165779d361221f08ef0cb900ebecee80c17ec10f5333433698d6e3f9372e86b838fa296d40744a15a3640dd640a4c2b9dbffe577dd70c \\x053d2c10496879d15764414d8b5e7d6d31cff8c40d43a2a3c586d02410ad8702 0 10000000 1631454741000000 4 5
-3 \\x695bd6664529df051fb3258be81d12a48d74be46f128c73ba97f73e7d67707a5336494cdf446ed4de2eb8667d5272d118cea4879a681010cb5bdbd8b96580601 \\xe624806601595ed75d2ae4077f0cbccd504147ae93ab62af7e99f50ad5c90c7e 0 10000000 1631454741000000 5 3
-4 \\x5a2dfd53fae2bc1dd376952f1e4ba27d0d6718b2b22c906bcc0ec5ec526d8d4ee5d2b8771f0bdd2a4a94d5aea78ca0bad1702ade36c0782c81a32e947714290a \\xac47952fcb19c11426529003d5423ebb2566e4c4db268aeee8d7cc0bdcad9cd6 0 10000000 1631454741000000 6 4
-5 \\xbff84e619465af4291475497f06048a740e1975c7d7e2b7784a47a731012e3d04bbc8c20dfa088694aa9e198957c8cad5dc7ada656b4ca1bb04a4879d3914f06 \\x08238f3f6e942d648a9347f4b1caa100a252c1bf827a8a12fcd6d375913a8d62 0 10000000 1631454741000000 7 9
-6 \\x642c8af67d0ed9ff941b6c65acc1272e2c3c53f96a51d105e242ca83c212f52b89042c9c607b1ca3d0c8d587e51e0fe052b00f4a661d5fe16a7e77ca5be9fa08 \\x39bf8461b10980496edd21e7ff051cbe7a93ba0b777bb33589c6f2bbabcb8bf3 0 10000000 1631454741000000 8 2
-7 \\x60a391f913544c7ae1d168e3b9e4b5e92f0c413de76175f5907db0184bb5a451bcd59c0d24a34a9bf9fe6ab77b68a03f5f112d999416c1eada014e9375ba420f \\x7ba958766af4224fbe81e27bf814c9fd2476960c8651b6d63cde78e6dca83ddc 0 10000000 1631454741000000 9 6
-8 \\x9cf4736abf82fcdbb3ef62b03be3e66a88f6a6b06cea78798e2a867ccbca7c3cedc4203abeafcbd756e7e4654bd2c2590395b77f188b708cca3b33cbee13a80c \\xb588ab9fea7ccbea1385603ad1fe01420e714a9dea2830563d20f66f786ebaf7 0 10000000 1631454741000000 10 8
-\.
-
-
---
--- Data for Name: refresh_commitments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_commitments (melt_serial_id, rc, old_coin_sig, amount_with_fee_val, amount_with_fee_frac, noreveal_index, old_known_coin_id) FROM stdin;
-1 \\x11de57a23018a7ce09637e755505e73a11eae3ef975260ba0eab830b8a90e71164cbb25f30525d3148c7da344021963d3a89740b8f6c6ae1c37b794ccb40ea3e \\x0af80c6a444056cf2c28d7b7da834a48789f4dec53a3d564b062a8e6e7a65d45bbc4b693372689d77e7c00c4a57cdec8618c59e2b86002657206c10ee7e0d20a 5 0 0 2
-2 \\xbb7e5c8b036df6827efc846f43c344ca03bd13e66845e444106d2a38cd8baa710af4656fde0ea1d99b523d8abdfd3355a791a5cbd0ad85d0e3e1e7d70f82a711 \\xf6bd12c5b4077932df556a6ce504ee9e84b9d536d6ba6c891d87e1f79a2bb0886db74004cb8b6010a817c38a4aa707d48aad3adb3bbac2a1a681c53482b6c70a 0 79000000 0 2
-\.
-
-
---
--- Data for Name: refresh_revealed_coins; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_revealed_coins (freshcoin_index, link_sig, coin_ev, h_coin_ev, ev_sig, rrc_serial, denominations_serial, melt_serial_id) FROM stdin;
-0 \\x166b205c185b4b5daf1b196bd45734fb00766a66f9dc582a4528d338125a8f9cfc0cfa79373668e5a20f2f4394be0b19afc2e73bc4d29c948d35f82524fc6b0f \\xa012ad9f5a7c47102e7edfc19b1244422e787613a9c42c49ef2d0558aefa55182db0d42318c258137d10d54f2c0b6a0a502397749382ed87748a2f4391e479050bd859d5a58ee1c4a611eb564a1434601ff28b7b2ba6e1f1c7a305b526521a50220f56541d7c9e328ed38abf381821f1514bbf95a91ab3fbacd6948ca244e1e6 \\xe05cbf083b9eb6977a83f6e87af95181c2d1949ac4be4ebdfc9f415158ec75960b9704f8c818304930c7978ea1ab65735c3c8355f035e1f63d4d45ba593dbe26 \\x248bfd5c8ad86c312688d58e1168c4a42d64068eee4d33c1ef5498e7113951008e49830c3546fd99ff522c14d303c04a291c7199f145a365b632cec2cb75fc1dd2252ca928d91c220314ee0459857e189ff2a078c9c8b7721576c7e700ebeea54a091e132c661765b6a9fd9281d4fc2754701c3b6f9d4a636c8cf6c63bdc24ec 1 242 1
-1 \\x53830bbf97456564254f1fd5a741ea75cd7ddf9215de5c758bdc2d5987773c8f6075836e14a7169a62bcf76c3bfc6bccb521f156e1a0180e11d4862c82ba2f0d \\x6b1f68d84ef5eddcea84e044c80bf9863243f0298a8a47660288920bd4847175469c02fa3df8c38d10436ba60001e2922806a080fca4a345ec7f13c87e6d789541d09d3fe964b02de7d5f5e8c2829fc31059b0caf565257133b0d47ee6d1b1e23f79c9d431580fdd01aacbae2a4302457714963d98776db0ab6271434e766516 \\xd39f1f0f2e1e1b4a883658a9f9fc32208b5824a5d9f7bd49ebd6b30c3631b4f2200be079cd6a4d201a1e3066a9fd5aa3150d4eebcb4d0e8c334f1700ff31f830 \\xb0c94f8489345fc18b653b070382982ec2dcf39aabdbf224dc12d14b3e69dc87cbc403beef1aa3351c05223c4bb9f831cfe5c8ecce7b42fccca97df4cda75da6ae34e9ea39d72bd06261894451583abcd942f93e13ded22bb4ff0baaf6989bc138ef9583ef09201965a6a6530a14bd1d0474352e2093be2ea2e50cfaa3e75d99 2 89 1
-2 \\x7231ff9dfdd723ef2b9044c75421d7ad9ededdf627a0a4b73e7612fbf0f71b697ab8942554b9a6fba1a76f75efb09dbcf4d930787adfcf7e84b92602db526301 \\xa2e05640af36bb5db5858e8fb42c59b87a974e749371c60b4114ea65642401794c42a1607b2f59930491a07d88092238350acd867685ccb6858ce456cb6d27a586483db4e118c8b251cc3001f8b2daa4835bb96ee2dd35e397001ff5635e4e90abfdb958dfa6e7be49b32f878b38a226617b6dd62985a6245e65ed277a57667e \\xdbaa5239e82a781156fbf7c821f686ddf3387bba9e5254aece47f23e06a3f1afae5e380626e06b90dd761187f21a9a79500fc68843f6751be012250314cd3ea4 \\xb79279ca52d5d58ce6d5e35d31864f8cad0704ceac5e2e3eb79cb0011e86dff00b8547490201d9c26870b87a8f9923f29edb2dce1e6fbc720d80be2d8552ca24108e04e8bb242e93bb378abbfc154838b18302bed4a4468c763afa8f4906f8195187e6ccbd7bc4ef3a32f0617a75ed0a36c9ad14ef6cedc18751435078c98555 3 89 1
-3 \\x6e1368a09814723048c00334ed3d4ef65f8273680ba6b50cd8a6ca5b8ad4f6ef5de2337013f474e73aa46a94651b2dc3bccabcfd232c96fa64ba982f5a9f7c08 \\x0d600222bc5369eae0b707e35ad8feff670d8b13fe0af38d8385f18ed97d5e1c0351821da063d41f6fb46136756e5b40b79154501230a2b00146478c9535d4c17138c702b15acfa63cc93246bfca0f60658c8b2a365e64c66ca3032da4e2bfe6089e58f488f834ea91bedfca4295b7edbc7b09a6fc9d91fcb410c06c607dd017 \\x0d220e0191aeb295a8e5c4f6a34083e6c564fd31988045998077ba9a0189b2f336b0fa2078fabbbbe192312287c4fc6c184e47a303d49c2022fcd6f1f71fe9c6 \\xdfbb2d25381b153aaf09847d24ec27f1d4a5b5236601f2690fc41b36ec8c77b701781b9dc7caf251fba287b7ce1e6107707c5131b8ae8ffe4c20558ad2a4bab59eed36b4eeb375d6a44c0bfa82e5996bd9b1970ba3a309046a9542a7e617b29641b1c654f65f7f361d3bf3d7102a9281b6c98999da3473c912719505e466c65a 4 89 1
-4 \\x92c798c1c3797c31e08231ee422fb6bed1c2d585ec21a6f82c7dac00518d1965bfe8b67bed75ab6d33765deb2747a522a3de6c4cafc869d22e8fa619eb294d06 \\x6d621dbff6afe7b1795db87c2696d8cddfeea177c9e4e514ce949b1cb69fc3b47b335ac85c9f9d6cf7f5fc8248d24d4b7f793c52cf965cb5e382639eee326986975b1c523d5f1e89aabfed93ee45c8ca9883374a13f84daea2aada219c8fbefa95ff9637b89d3b15308c962b922be4382762c1b93d61559414f8dbb0b5b33389 \\x0acdd58dc8e64d22079eda4708110dc6cd0554928008e03049e4c0ed6e1ff4142e97abf0a6ce31481b4e5f929ba23e2d5b5402d6fc4056df1f64882e21f9df9e \\x174a6ce4faf48df73f77de723023891720056205d49759e88489941591ada33604343c78ec1a0d57cbae851e04dd3927618b23e09f8f85e8a03be72542d5dc397ef21a02c861086e9989c70fb46bb8d20f94778f145e7fb60ae1720fe98bf83265a6f6361611b4f2661ea232431ac1b845425b2f52b25b9022ef4cf93a5cd33b 5 89 1
-5 \\x12a5f782ac82cdf2e99b837b6b123da7a432c2dfc80d116fb2ace077e53e121a40f1c46bf21023c392138fc316f6224908ae623b02206fdb1e51c0696a4ab00b \\xd2bf4cfea0787e6e10b702eef20ecf2867ab0118af4a9beece13073543ee73478ef02a0575741e6e8db435f9bababa5a92140e5339d07aa60abf67068831aff91ea520af21ab32c25a1d0df8f2b5d4d863cb9c1455d1eba60b368b703cf53ee381c4925018d6e3f7bf88a653fd86df7cc24461adf5ceecdf9e785831964c6f6e \\xca24d4a3b0cc319559db9694f4c76599488b86285771fe597aabc35c5c74de2c3317c0ff4ad7f7aaad0ce4376a98b43b72552e545034b4daea1be1044bede5ff \\x3a547a39272bd3f0a05e29cec0660fd08017c6157384ef42d9448bf5f90fe415c3b444e47a576948e328c06637b2c062250d61d0b5ab528dc241e06fa9e05efd2cafd0e68fa5706892133e700748c8bdef6aacfcdc7ec346a0ec7a4491573f046dd3c64af6dc3ef55ae2b4e94a842ecd3c7398a0ef4307a2442ae95ff18414f3 6 89 1
-6 \\x2b2cd6f708218548f8a85b5c86993ab2c9b22dffffa43f1077d9ca8b90b36af81385483c759d896ab29f7a5c654df88173097830e025d6bcf29883eb7406b40a \\xce23a95eb544758897700b4f02b26ef8adc673f8b5d3bb6181764fca87227bccd807477ee4245d6e2b5d4cb43976be84021ee113122a05dd229306a9639708e09be1675646b8a520a82200967b3523b5074c1454b7d3f3f9cf8d4dde08f5e2de8c75892e80e6099bfc76883d24b6a549e1e01375a7f52ebb3f1d77681b39448c \\x6aa5597810415985c7894d5eef452b267719cef12f66a5f93de1d7c2b0af487f8046a385bdbb7934d4ed27a2ce1a8d3c4c56ef2726c552c3c7c30d79b62a0145 \\x3981962e0d22701fff19d08be1a64a7df3ee141ab3e9972edb72b6d9872ab5dd735610bfb88ecd43847b78a819a557ea2e70bd763789fe8d2c5c6de4cedb7e890b8afeb028c93a55a69636046a3693a8755f430151c7c03599e68ec074b71625b0e9883f4eed2f913cdebab6b3613aa3cd9a9123e2cce3dead9cb5c25fa403f2 7 89 1
-7 \\x503fde9e1916aa5c1ad7826b82e746b664fad4a2a23eeb4a93592567f559c97e625f94c3a8154a5ac0615caa3e99c70f13304d73cc155390b4af580fd49a3101 \\xc99eea6add6167add11566fa07a1a21c117387dc659f41d264f574e154100916f25c5b9c4d4fee851cc581e245dc1bf722ad5cdab159b7ea2ff7e796bb94fddba3b3819523d7a856710a8d35eaf03b96ca4acb22e2bae0cdb25018a1b8fbd9ef3b94b37f034607e3166babf5c408bf1189b1cb0f1833bc553e2325eea3b9620a \\xd069e69fc8ad2c07122e3a69cf7c873f265a3b029604b7dbf7dd113b7a89855cfc6b1353d7833ea2b1ae1e5f0de9e0465ac6a83e1be925b9e4dad3a05aa3c71b \\x265443b47dcdac5f38d02a0d5c29b27fc28e048a30a798e811395055016026098fe64cda0850f6045ba137e216c950e3a015681ed8666e47e2784756fe70de88d87a98912b7d946d9e5db4ce3b224e3f5e9cbfbe17808afddeeffe82c9b6da57ab99dde1f06399790b6f977a3be67fb224048b0ab396635cc0a8597811b4fe66 8 89 1
-8 \\xf835618517c2b07262086390835af3d152375247f66f07258b374453f4aa50268e163bb125785ecf11e6288c0d95d63fc0775da4014d6f523bfe7e0fbeaad608 \\xa0e3d4d46bd320f25d197f3c9913d39efad9c99dc5b35c8de4e0f32f30007931c0781c958d771220a6fc054cea3dff826cd34cdcbef09fe973ba1311743882a2dc1975288814baca13bf4862a6b02465148b91095a33979edd86f0fe110e87493070364c9d64bae41fadd77f84b6beaa0ed180e6c760a314675ca64a9fb35a9c \\x6f2b4a5cc03eecbb11e362a5cc708275f161ca614a5d231f57e8f893cd40997bafe3853f37332b2efb2bac88f8d8c3ea36de598daa2475ff66f9992033717f8f \\x3e033600e8dc8c7f9a0cd8410b26e166c9992b9eaf10513748c1c3e73edc0109f93255da877dcf340745d6edad37b1ad7a12e2952afed6790c783a04d6f44d620a87a0786808c333e223c8bd0f5fe4c39795a6029683f0b55930fbd3fd5eb592139c20d5fd99671651b0036d7737413de63fcc24f66a83a1f49273c31b6e5c12 9 89 1
-9 \\xfaeeee36c73f9c28240ef7d3b7debb8c65a0634f153cf8775ce1fc90ae52cb6daa0e8302d3baa3cd0ec8aea21f55fae0ea786df0800a77b4dcc8de52fb756a05 \\x17314b53554b6ffc58b51576090cfc40f704e475e6418f4bc54f6749ac1db31e7300d5414b1ecb4ed22cb15333cbbcfc6c33199a26650783f8a1297641f6646c8901ea91dcd449c38e26bd3225815bb0a7804a10d3da00105e8046a75f8767bee656661f2ba060c0478c60b13482d519d640d48043cea1e5064f75480648e622 \\xe452a8c76fef4171d29973b40308e22aab4333b058aab3d5a72bf1e2e1e09f182d2f18a2843a47e19bc3aafc99fd26ac6f375818e7721aa11fb482ad1f5d9d1a \\x55a07d6ca4ed7edc0e8b0badf62330f60920bd61e68efb1084fa288bd6ac72ffe096bfea0fbd5f4b8787d2970c2b541e486fa21081983e7cd6f3b3432f2baf4daef42d82885d7099ed35397cf050906a44d7048d19da67d87f2c0207575b6b10982f2d09b5a08635ab4ced1cabdc254b2131e894a627822460453ad5a05a64cc 10 99 1
-10 \\x79f43ffec22967ba67d8cd8d167e1adff025564c5282455b6d6167e3422610678305e7c3ed958c752f9c1756accb70adea5d19b7fd27b862fb95d9d37d9aed02 \\x40d93cde3dc7a7d48e04e4fa51c52e068c271db7d162df58cd9037a1f6bafb4742353e9e79fea0916f3ca5be4f69ea7b5eccb22893f5a1ab0d648c875cadb3a260c0918aac0d655b8776abf5c7780ac7db7c4e4f1798e9035ca887ec2d8a0d42f51c0b900c863636359e6292e0232e5cabd6e6b8acc65c56d7384f8eeb4747b1 \\x67ae5787caaf2e6331e85a659ae1f12a90c8611e30fc9070c71660bd26751581a441b4c0ba195fce058e6c0224e8727a3143b4eccad73edb3945ee9273584584 \\x8f9348f01ac36ef677b2ba2ecfe3fa7d28ffb5fe875d5029d0ffa0ee770894ea083cc4f57c81335469dc9e5f686d3cc3cda5872cc0b7ac994ed4943e16490a24e9523c9b5a7259786bd37b7c29416092e2907c041dc0b1581db508e6a2d8a136d87c0ba03686b17c637faed3a763e201a9906cb0a66e66c9b6ab24a1f1952b64 11 99 1
-11 \\x8e33a95583c8d8733c44e0ada4f8009cdcbf1ebb42f5e03682cd44251f7890c609d2d957ca41c632f78ba7237d4b55cdfe782294f1377a8504f213c6819df00f \\xa1899dc6050179380fe8cf078bc3d652981cf3ee9fb6fd010f2ed7d5087548e08ac60099531066d64625731d5e17b9789a97b9dfa0084eaddc442d6ff3417f8714d2d4eae851afb9815ce93e5957068929775ba0439ea75b086ca710a952a859f25bc9fc49df60d0e5e781d2972879f7136beace82e018d0fe845d37fcd8f7fd \\xdde3d959e35f8ac1855a0dff35c22198ead4495e737929c70acbcede5289496b2025344b58fa6ec7380025791d3310856069d7238aaf801c0dc0e7dc08ee455d \\x95297f7b66517154fb0c217d0c6e7b9ca86f252dfd996e1050f1c70ae330e8175524b70ec1bea4d7cd34127da49159fb3fa059f827d977df52d1fe4497d588d5b24d28feb9c9d995055e7250de21786df8c6be126a294e82adb8f4ad1e284a174984f90364b842d4163d6fdccfbc0827df6784d03eee1555be1bf7ee12348ac3 12 99 1
-0 \\x0c3bb7b6a39fe4dfe5449eb8ec207467fea313868dcc03f0d0f4313772db94410a8b2c8d097bca0309db4aa1a31884b9cc7fbe031ea6ac303b977b6f7c18bc02 \\x1a84e6757953015f61c4ce15765cc17e43581bfc98efdc66672edeec523832d8174d9a170cc2b3c3d00851cd872a14d7324489caa7f43e7c06dac5619999bcae9e8d55babe091ea034ef2e0fe9ee6cb61e0d0818b62f054f05606cc7e7d6d36bb9ecd9e41029095c021a0f7f07714ccd9040965cba50c874b26e917c35ff064d \\x568a76e83ee52b8838822b17b210e7e0157343da812255f870d3faf4a8de7b215a23a2d5008e195d3a00d8cfea7751d2be0790cdb570afeff74e2fa0a51f7cbe \\x55dad828fa59836847c2fc656aaab6c6344deefecf28b11ab17db576773fe827efe65c2010ca0a13f165f1da903e99b7a07364ab3216b737e164ea34ae4470dafbaa77bd494ede79861e6d132049caa040a3f5a65605b31f51da78227abc8a7b7afb2f1651f2f10ddbcf52a1fe336e1841e2dd9c4808b365864a80de7e0c673f 13 99 2
-1 \\x84e70b3646340d351d9b772cac7ac1d91fda787663558c5a8d6b0f2cb207a70837be3cc010a85b2d262a0085aa6daccd4cba6892c958e8c76f035a2d22183308 \\xc29207bbaeb70bfc1e9b5c81029057c7b95ae76b4237a2a5702f44a5d7bf75f089568ed010ee4282d628c6c6f02567a72c6dc58b806f3d0f2ef6906783edad76026c8fbbedd9617856ab337e6724886c23b269f5290c282475304bbed54083b211893d20c4cab7a52fd265ee78f24954e50e14017cbcea55ccb0ae1bf8bf0bb2 \\x84cebb1b3b1c1ad11902b60627725aeefdab0c55e4bb653e20f563daa7fbdc5b80b2b8da420cd5e3e1fb69a297ce3aa3b28f1f5a1e6d120c709f0fdaa39f16bc \\xc840d9cfd6c773fc0a44af1e2ff8666976f0f3e5d0ce880b981dd1e0ffaf68adb341bbe44a662866aab2b7fe3e9304a6498b4c04b56913377c2718c942c6be2ee0b6eb412f2b7deb2999f44bb8c3cdbe3d00dc652a7c052c24e4f320a6abb72c576c8900958fa70d94ef51091dbd4fc7af5bd09fb2b0aadf987e632ce2becb4b 14 99 2
-2 \\x71e7327f6211a9eb3ffc2ef975ad5d08af3f353545c656568ca99e7cd40bd32aab698a5f8429af3f46d89cb0e88f8c556cffc868859ac7c1a25682ec8f654f08 \\x2a44762eb94bba2e53d64d1f1aebfa681c4e088a40cdcf23171ee68889e26e7fd19505e56864684e03f25e64adbe9fd9e8e746e354200ffa4258ebd84fffcd3e0811d7c81267763ecdf14176e1819fea1b3794e749db283871341538fd198c26bd75fbd29e5a767f0755322190f510815c3001522325d24395caf92f50c99786 \\xd8819532a4a8eaafd5257b6e9d4097544c24f27a93d6cec1ee88ecd252604d8835f608738dba67889202a164e26766d96c818c4a225cb9691135d6db64403ee1 \\x785b53b837c0ad99a152a131a5ed3ffb84c1cb7a9ef9638eacdc1fb5ca814766fc3aaeacf3670efa4960a8c2f1bd71143a66b17bebd3dcf21d8aa745d67e6698eabc0c5c6e1bd7ac83e1b2e47e5f1e5dec66be0070ccc33deb4462d26d3adaae28fb820ac30ee8c8d9347ab3e30258223548132d4a3b986b9decbcf9de392b13 15 99 2
-3 \\xc55c061587341e1f4eadbfd670f3d343fad553d86d87a924399a93fa5864f77f8df784b5c7c7cbc09576e2c5e31dafc87865ac7dacf9009331724295dbf96c05 \\x4c8bcd70e7c2d18e6a36adb067f818cb5fbb1bd3b17729b4843e91a42fa15983484735794cfa96c493df19d2997ec84eb2b055b9689c5881026b975d4121b2700a93abb6952ba4e9a15a383340ac1f33e2f08da6d61ee4cc40f667714bcd8222bf622cd21a61dc301654e3e4ac32d4e46245ee0f15ea0d33861f0b7a43c7532e \\xedd00dad4280738bb902e87cdca4328d18dd071c3a7e01d8064343a13fd499f2239eaf7462b953e0244ee37ab38ac4efef7230b16d57b97917f24f041c96fe3e \\x89a971b3d40f44be5d8d8f01f93429133bc7aeb73b4f42389ea4017fbaeaacac7de98cbbd1b1cd1c9347e55bd7b2210133dace80b5f98d0efc8ec7ebc603f3f8461264ca78438758a94a67ac0837ab4cabf2567db8b60be7baa5328aa9fb111290333c710f479957a4896fe670a5e092e08f245bb05cf13649897ec70dfbba5d 16 99 2
-4 \\xafec8c23fbb2a67444e7a33a686e38c77a8a460cac5a0284c6c930eef2048e4ca18809e7f7c41bce0c20649a8c0b46a64d79fec64925d6341bc5f551702ec107 \\x541b032b576e2792f290010506d66a26deb4258e398b2e14cee5dafce8b003abeee75c46452d53cb5057a8bb222225aaf38c72bec0d9bc9c5e6a16c8c2806fec96a03c4ea23f183cef19c856f20f433e0c9312ba1e637d8a8d082001f05d9d3446e3cb339728af62b115c8465381bcd4a83ac4535b2fd32a63d3671f9af0b772 \\xd77d580ccc3ced6cd80f6629dab6ce75fa2a6ed3366fc4775deacf3792d9f0ced2b5235958448a42772b21fd8343f2669fdf7926ed63db44c718111ff61644bf \\x5e210a935aea23727d0ab13d58fcf2d55f8f105f396857c8d8a2b2f4bf361529b299c5bcec6e912758de1d20323aac25026bd870413faa0708db57aea830e5804305359c38fd1587c3cdcfb02f488e84da0b3d078c5e052f9230e6483314826f59321528e16d8c9783b4ddab417a07ec5f9e069acb7d662bdc1274cc77073458 17 99 2
-5 \\xd155160e7d743f8df93e9d21052caa82a68834153faf9095637f72632c39538ef9de27ecabfb49dba5ed1e9ac27e1e73ed12f387b67967287ee08b4e4e07f907 \\x55dc8a2766b08e459e4ea73959f26c6d8ee24369348416cadee693a56eaffdf9f13e9dce09eb2811dce38e6e9df34ad7d05b0453f85000f0a3611ec63299a4bd970adc8a6077fff55e0d9fb0d4bcd4602f3097b2aeea1453ac1af8d0ecb8ce7ad192309086fafa36d43151a0266a434beb46966b12393656ce903ab8ba4e0e8a \\xac763a7427f41aadb71d3a1d68d168c1fdc3b3df1611a7247e1c8d7c744efb6d82ab9e9fe94d1491a785216365963f2f819f7015ec3e077c1f1c83771ee7b67f \\xb737981957ca85b399b5d1eee2b0e45db711f06652d9aaf6ef4493e84f3bce68e8ef927bb297befb0777a6d2295f653d9454a5a458124d47a67457609872d67aa8d4f4373b6c5877f1907a66f18420cb5c3f09959aa9d1c5b35d5003957b01a32f6356025eaac4765b3c3f349d43d89018ce470130fa38a83d7ff3d1559c6d01 18 99 2
-6 \\xdf2a0a1a8821790f21da4e4efee225efabcc0f709ccfc20c8683e1ce0ab9813e157d630963f182b01ae8df4900b7431e0e7398d9dc4e6f12cd66e5eb54047f09 \\x86828634ebc1124afdcebdeb982ab9aedad00a57651e34fec63ea917c637b22bcbdf0d294df97f22e1f79954482f1177fe1461175a4f60dc9a0821990c1efea0e53e09fc1e7ec421521ab5952cb55c216cd5daa1a62fffd9c6276d418ba3b3964ddc535e9e6e755b444e2561d79cbdd1b3d6c01a10e7de4cff58f31213a51aaa \\x684df804eece76a0226d843f0f3c65ff6c3d13b1ac767f8001908e8f14a0deaad1064de2575854994fc4f1093251f2b43000bf2ecfcc66d8fc89f9618c74d520 \\x6e5d888c9a8522d3f98bcda61a4436927095d568116fab97ee954432d9de207d554b9a79f7455e2d2e76bf65ddbc0ff35aa0e8d7bd181537399203606ce8e8094aa4a5f11c83747c1a3d326287e298e496d4e05663d2d7762a73908efda3ebe53f2c511cfc027043ef6e132d04a5603626feb75a1261cf384cf6bf4d62c020d8 19 99 2
-7 \\x9af0681e7de766af8760502e1c7250dfd2c5ce7adf2bd3ffc2bd027a98c8017c4c96e199c228653906c59c18ad69ccb4789f10391708f2bf889c42ad1433ea0c \\x77121c3a4f793dff4010186b863c54ad170f4288c612e4ca65bbff13b00f77da2dd816d553793f6eb7c90d2fd49a0b2f4ef58eda304c0b8af67c4a1b79d978dc0ea462c7e7338e93b621b2503b0b4558039d63565b9c49f8b1df728e5c4744b51bd1efb47a5fc130e92c14fd2865a26cc7663f91dd3e574c044996c1a032eced \\xf465859e1d00aead7f860eac88c063c3b4fa919b666b2315ffb1174590c6ee40cd655c3a6b9b3ea3df7c69e41ec1b4a3ed7835e0a8d1318f9a5e4d4d54247dc8 \\x53a59002a767cf9b53b5a8ec9687319fc025c6c71be287b6d073cbe6c6eee1c20d7a7d62c35dfc7373cc984b721c06f048be9ae63d9243601963db6b76936767094438ce51a6b6a3f59f27acef236346456704492090f544a7435a1342ffb2683ef8757a84477246c1604bfdfb79bf2a411144265b1b62c299631d4f7d4ac53d 20 99 2
-8 \\xd04aca4a992c4e05063b33fd9fb6befbb111adc10598505dc8244e9e492b27ddac21793519b8c369978284a0089e53035470ea46f6dce988d1e986bebebd410c \\x91bb00b620ffd15355bb0e52ccc0c1db5d5a72f0f636ca66eba9369c573cd6d03d07187e338bd237bba576866e72d26da0fcd086ee13f0be7320666a7a666ff0ddcab58e33236df3a20293c7ca7c80cec0ffd4e94c325e8f96c99e61439e23a048b9bdbc81b2948641e99b1e2e31bc69ea92b4d5a1f99736d9222f51fc3b77bf \\xc0efe7acb56f3dc7805d8ab87543acacb07fb732a5e9426988eb721a528c6baaa9034aac9e7a78ecc17b05f23bd06f734ac11864adab92b387f8eb9d1aac832d \\x6195ea26f3b06ef64b9a77d6d8df7a076b6dcae3f6ade30e8cb8f7315e6be1e1d88791597fd9b95e2e80dd07820acc491a0848a78361575bf4bc4d04181237d6d9ecc9e801d9693d9ce9fdb570be605ba97ba6e6ee398cef2d408f80a865e8d19ef93a6bc3b6775cb5e27ff542b547b373771ae4cd0c1177750e55f19dd2028d 21 99 2
-9 \\x0830844e7e0651ac04134ad54e630567d5802213b4e1f35a269b45ee3a80ddff05a31531faf6116413763133857772a2ba55aa1d5f161f88c8bdabb4461fd40e \\xc07e2d6bc9199d41a274787cf824287e12e21c198ea62fafac68c17fda881997ae5944beafbc450e614ad9d9c30651ae8a03232b9c78125e69c105dbc3dc0bf21ecb164bac8195e044099f0a2aacd48dfedc17e0e2881bcbc9d27c1a3237adc32bc74ecdefa2c89c7b8d20ac616a4e8465c517a1e68f268c097387ddbdf94c9f \\x48e052435febb305dc85dd396ec2b7f8de806d1d391bdb7bfdaaa07779f87a8ad2536bd0e02eca35e6f678f110388898de2c6d3fab21e3233499d2186d3e7ef3 \\x2315b2f9d837ef5b6b7832bc6e1553f085a0ef9dbfcf9de6b15a2ebe1615abf74cabd2aa0b789956d229a466163193ee52490516f636590d42e8e2b92c2c887234a6ecca06510b3481b1feb1eac5d38b8b3b6a2192b39158f0b5a15bf978e2013ed28bc795cd314d92161737c80dd5366ff47b494df42b1e3491cb73279b93d5 22 99 2
-10 \\xe088a9818d7093ba62255c47363d1d35549ca75c69d90f137e15635c67eb8eaecdae0cc382f9149cf093443dbf2f51af5c429be29b9c1f042a3f32c5c4f94a06 \\x79bfd8a260b655c1f72d30980f6afc80cbdf050ddb3ee262d4b2f65161ef4883ca38ad9d3218826f3e5123137c0101d1ca503e2876ebb917dc5b235b53a0dbf4ecb3a1471a10fc1ef76e2a54a24ccd9a3eae6b590c950e7230776af1f0e366c1d86242d8219baf71ad04440ff5f26d2f4971243a9f7ad3a83414626533a236b3 \\x109188cff81a318012f68152ed3f51b60eb99a66032b1778642cb54afdb1b32e36f41194dd003923d60658cc312a4a9f1620275080d29efe930c77b8193efb17 \\x2fa54046fd5922c3043d8c0ede79e25d4273f5088019d360e577eddf52f845fedddb76beb1e4278816d025fae53a7c58633eddebf9da8e76c1842344ccf45b90b09372eaa823b6b0cb50ffc8ad12abe1a5957a1db08487e1983847b76d3d3113c9f133048b25a58fa9e0165692b257907817f3f9be204783cb571b8a5eebe94e 23 99 2
-11 \\xf721ae678acb78c6f1e7452fb95931db27cf571067e8baef27dc375a5207ac90a74f61a3eefa8439e9b7781bc233f5b3a0483be3ea14f4fd2dd54aeb8a982608 \\x5b7682dbe9d13c5b0423f7ec78b8cb57837cf92f414b4ea6ebbced51dfddd59882348fc9322b543cae80a34ac257b8c3f29085de3a831fcd6f6b23365a7009bb4f76a79e09b4442a605d250b0b9a4ae323de443df86223db03a5a036d14ced8c41b5b18e8656381f5115a6e33d26ad8fadc5ce3b06da76e4efbf20b3d1ae0b93 \\xc353514ced6e484c54edd335971694b1b6fb0aed3f5e0f67b5a0180dc3b4713a2265e6f95580677b667445171f7b8b4c0f0f9424d8d30fa07c41db0a302ba54b \\x9f1aeddfcd0fec88513d40816bcb267059796ff3fe566a6b8392ca33ade7777250532fa9ebb7f200dd575da04a7aef5c19aca4d9190e0c1f03ebc635d07e53ef1148e0c48522838dfae3a9724eca06e6f55f61397f69db5966b224bc7dea089d42d17135e30b9581b5df365988153420e3068303c2cdc71674c2832c3e1e364f 24 99 2
-12 \\x96ae0806863d2aadd999a07cc3a0ccfb4983cfd256b9c97e029b5e7a888d540b652dd2f8275669dce46be9646e126b83c98ddc2d00f8eea28cb942c74c1e3b0a \\x23afa5c8a2ecf7d6681c9426bbce30e8bb4a8ebcd5b2feb09fb3bb9c830d9040f65a4aa16a4214755cb380d086ccde26bd19fbc47152512bd9dd89931a759c2dbc03719b3669602a58b1f4e655e4bc1fb8f6f51621b9aa4192912458d51f13679e0526a378fb96c6c733027b55ea1cf13397c479068d3b6a119a33e0d80dae75 \\xb5265c680bc67278355095c55c4238a98392ee330a9b87c0202d2791f497fd44656960645c277e85174d8d858dd1ece3508f54ab9e90b89fdaf4033b26f66c7f \\x57f92c59d56c58acd0f8f321494b9c88c9388479abe5ad5b713963c632560117aa4c0ee41ff67b5d8f40cf5aa4efc3329dc5a9403b85cbcbd101cc275aa11bc405ead77a9cf3d7219a89e35402c828cbe0a677edede63ad8aa05c3e0098a0e5fd293333b3240411df70d8fbb99db7bc120fbdc21890cf57b917eb75c0646ad2d 25 99 2
-13 \\x2afacbd335336f2ca80f172adc0af1053621f9432577c48fd0789cdce0912aecaefb1620f092590e53cdb16216a4515ebaba0d26632ad442f6fcac8b906f560f \\x0c28b0f824e452cec6bbf60967a2a6943cc077dd5c36be786233f31d8e6782e9d64f560f61e645f541135968add9507788ccd69759737b1526790dc1cd3351ad9cf01307c42c29aacf5621ee8ac7e2f6b79069617a4c9269a25e7f61af234ce81111d3cb5465246754dd8654d95331b4d7d4b54c5cde4658d8021a1f4baaa2c0 \\xb5235a72d749df0a96584ba8279e34065dfcd81b9ee9b6654cda1bd2076ab749325f12c58e6dcd02add1bba2aed5f17f9c3c4b3bbca8088e3663ab12285a5dcf \\x3cb2288fc7f7101fb32c6e6be657058d24da00eb808073a8092fe04a7dc56885327c45040199e396419a2c1cfad71024468921ff98044c1ac7176752c216e3865e2a8ce8ba538a9927bb763cdab5f97988fd64c0515f7e107e26b11fbd40dbf1d39d6c91728e57b9bbdbc104cfb6115cf5bf27d7214538f3c72082d40a9dff2f 26 99 2
-14 \\xf31432cbcea11a8a400cedd370edd24b02363fb3283f83977bfcb6e931c7843698f15df1ce6fe2c6284efb0319473b76e2721e317c0f7f58cb605414cd7c2006 \\x3d43efb33f95b73b6276a1453ed6c3920a6c2072a7895a932deb9b8b0df49b777aef8ff9395a2b1b8190e32915fec504566e80f240e7664f4cb4c2eaad0fe7823ddad6dc28dbf634f608ea13e7731f3deccd00da30d9b5c66b879a32ba388e835d67afe542055e6a633e3415d62516dabd1813a85d3aca274a3512a9dd6566c1 \\x32df67ffab2a3b67f44cd71cc5e0449f8bc1f9225dbf58d84e0a07a174d0baf19e6899931e16ef85e58e1583ad47802eb4bdae2d1be59dc15bbecf81cefb612e \\x2ccaaf2bc5c8857123f957a9fa625167d7a4692ba74bba45c2a6c49d0e9e36d73e41d4521536705a5d04fb724ea6cb797e7cc7cf75a0e7ae424d64e78ffd178a7cdb6b8397f8184f83548b8c18c23d9a7f5ab6f6d9ddacc125f670334908213c42c546b04c4a0d0bc1cd4b967dc2cbbea8b0244e07a572b9fb718dd2b64e836f 27 99 2
-15 \\x425d98af7f303a36ea72b2ea804694f3113a30592959cfee2cfedf8227ff5071907ec431449cd3155fe64c85a235c384f5a699b92bee117d71787372501ffe01 \\x421fb0c39f4c205b4949a2b6312fa25a04c34af5bc3c5471d7d088d165f5ce869a4c3024a02542801c798a9bca2b132cea552e232d967afa45cc1174e72ac77666d1818e928e00bc2aad218a19d1de8772b47764bc06b6794ff21c39c6cbb2db627a5da3d1f62e873941fd8913c42bcaa6859df62478b78a72e45a06f0394a7b \\x6861381bd5eee46ca0e5692bff693f0cda0349bd870c237de8c1b13161cd816b53af356307a69e539112572731114e551bc75f0f3adc78c0d913ad6bb797422d \\x569daebf88a8a9868cacdfa77732b6c756757a0b3c6ea33854cffce20decc93be2b58065931450056517d30c3ddd2a3ba9ebd6d31f9d1e93aeac21a5a9002dd108c7ddcd594dccd6d4f6fc023da04e9f930b17c856e855097135334e38dcbda467c2b772430e4bb67496d9970a0242cf48415a26053a1af73f43c6cde062e9e3 28 99 2
-16 \\x31fa24d7c0af1ca266590d94c89a4a271ddff95253e1bc6931535386cb884e3e6e41aafba3e94f958933407a9c6d5866efa417c75a542bd5aa4998194d16c900 \\xb862ec2d17fd9fc6da89477960478ef2ab2955d887e11b22c21f7922c184643d181f7f6ccc5bb4be2cfa8567bfc29486a33c62a83a1b2ef94825ba2843fc123ca2c4dc36f1d68f2efa8a35d58036b3d4330c5a5f0c3f10b8bc0145b8e0dca069e76d489536d2297c573d95691f18063c6f063ac3b14cd3592052ba0a2e702a21 \\x5e0ecb25845210b1bf42d21a1334ba7172d8b27285b30fb162d19dc75bcf0f6b0c8094d4958d35728cd2fd030fb02a34869bb108e6421c44d022453edb973a47 \\xaff778b8096fcba11befc32f8fc0235a742753a3a36b4d2ae412d98b11bac81f88b2e82ae9f53d22ba70a0858af4bba8a51695890afc2d73ea5d0349114a25c00508567562b9460992904458b5a207f86d199c2974f4b02c0b1189259dc6d97037306495735a47a87bb5f52e053c32beb8aa7dc837c630e866f4095211d32e62 29 99 2
-17 \\x6c85a208ef5ec7c6b7f2d4378608b7d15cd6e035e1b096828710ec079e8622c75eda06102942dfac8b031021c5f5773f656612d81fd1aca48496144bb118c606 \\x12e72d45e87e0dcdff11a5c41aac7a8a5171d371f7398319a62d61bff49fde680f062a87900fc454b29d92eb82f7bf9cbf3710310af4cda0ca3ca520b0c586053f142e5b9b87ba02b359a64325676f29e8e5069b9c4e00a96b1effbe2d77a82da2e0da176c4a23eb72399f0f3ec56300c99175b753f3867991e96f6fbc36cedf \\x737b07c2a093eae948f1d8db31f56f509a8188ae526e7a3c9383f701c34437ef7984f6fe59fc2d0276ffdd4a52c3582c19d6773a0cfafc172e79f08689eff248 \\xb6a1db64d2299dc3f3e25b4ac61dd90e28e6485f984e43cb436de61a9c77cd27ffda6fe21d24b0dd9ae54b8dc6c354a601d98c2efd578a3055ec1e596f68b60afb6ac9ec179ef0023e31e3b5a4463e7f9cfa183d1371cd4c602b322ed2ebdf99d7294e484ec5ea3d13e5c138b5cda0fe1351649fb3666f156a09afe2ff9052ce 30 99 2
-18 \\x639e2a3eb5b46020648d086d833462f319c399eb8d1993bee64074c64641c42eede7c86150ec316b37a4d3c2d5d9605303c9bb9bdb358a3d4048749f36664803 \\x9bde9730b3a9458bb223a560032c728f5c6518b629b11ce8d08c4bc8c195a097d49b1cccbb8b640e3ebab355399c1b5c67b69ca594410f30782c38f672cdb1814ffbc1890a2f75b8bcb1207ee1781ec0136cdfec1a5da7216f106b904ef71994f6093a43f367e0bfce60814a546c7ecb3ff32db9666b45d2a6c54116d564e647 \\xd68d43cd3f255af8834a747635aca61a47f8709ffaafb8b087e10c3b7951eb2344ba0a535f39192f66b7ef6c64604b32222fa8356bf9a09be70cf74e730fdcbc \\x5b538520cf4c49e6aa0724ccd51fc256c727fd4e5e6cb6ff4a563b7aa5a39c49851aae849a2cb248c48a0b5a0ec0cf06f2ed7e82a0cd66c22f18eaf1be6f56bb0074fd296cef04c52d918a912f3c50220d7fb7acbfe230627519c85985ffd69f33f47823f828182f22a26c37e9a72aa253e579461d0d8e116acfac089052e1d5 31 99 2
-19 \\xc324cddd821d8686c5d78850bfa4c580c407b71f44f3dc894acd6cf585ca1fe51d7290901c571d98d173cafb9556264fbc04f4ab1c1b47d5f07bf32194c69d05 \\x5162f089c06951d549977bed6bcee5cb63c5b33ede8ad8206c9ec4f48eecc7ba3342f51481b6c2ef92e754758f97e92df59389e47bf4ed30efc739b1a9c266de39868adbfc1e591e4b65caa16b88a5abba30f395878346fdba0765a5427d42ffe2febf594ede020bed74d2d3e7b75ff486c4a51464fceb7e7806c828848cebf3 \\x3001f9b5e4ff6e6e275d07d06687eaa9636e12c085f5b84e0bae0579c45bf1d392553c26f5b3dd338e179c4588fac01dc5a5de1af34e7c9aace1633cf4373ea9 \\x88c9dee5fbff841ed32c63b96275a34e1d010b12cc74cff20bfe9855776542c7eee43ae004f25fc564a5094111fc146b091a8b9565dcf443bfd2d777d9e8f1d7ad1e462c9df0f2ad5255622536ab8c58d6a0c13bc29a5560c073d0734de74a3c8ed341db535fe0fc350284d16b848d05bde38b8f0d0e6330e63aa72ecf65de6c 32 99 2
-20 \\xca98ffe7486936f735d90ad4c352c0a46676f24e89ef423630a69739ce8e9e6296eb97d47243093ca6cfd2310a2761085bbdb29e2afd626aa5f41163f4a39c07 \\x3efa777c337f615e07b7395b6574583825b04876d9e9b2c4716e5994ffe6d28f84660fc9e93306c2356a0211f9709fe6deeb543bae5e75f5bcf751a9f4641a60177b6cb3d0f15b5af9e4cd144ee8be18eeedc033c639f6c2c434821f016452755ab26c430cec41a847f05ef7f5a23320fb19f2e2f6fe43ac02cd97fb35d7fa6f \\xf4878dc216ece0d5fa824fca52420db6329a6ee8390285b089859f0ae36cc71655c7b89c1132b605e154b2e7b723e574cb7206342a819206c2983c499e897954 \\x440498394dd457482c5c85ce9833cbb18a997b533be65517608931ca458410ed3a6cb8c7542467083311c805097756fcb13c9611aba6e7cfea76da5ef072d76cbb0561f66309ffa9426d3cdb9f2380bb1ce7f2ed2bfd252ac48b47d241b18f3dc14eb02719807e253f93c54a2aeee62ff8cdc4e56ee1c44a37e110c1a3e1372a 33 99 2
-21 \\x906406f49a2908016eb96f0c8f8a2e4ce1b0413bc6c435d9b5a7727857b19ee59c82bd1f2f7584d53d8afb1b4a7106e596effaffa8c76826052b81c807e94e02 \\x0916670bd4bda9307fb140f4cbcc19f1d452cb72874f199e1ccc1450e44ea23a18587a41f360737a7559f77262929db3783167ea6d3e7a5a94eba2957396b582a78434e3ff73fb01beddaf5e166e668564d44755af379fd4c81afd0dcb25270733e02afba7971fd0daf27dd012259d1f2029797ffdf910968de44260e57c76ce \\x53bae58090a598d1a6dcc686a904a80ddb6fb61aa29aee5b67d4a42481f101510729319b93cf6cfe0e8d8759f00f9cb06519eeb6f3b87538882a0fecb975a560 \\x1f5d8b58c606a05a5aa824751e0ec0be4e6a1df51ee434f0f6009274f104b69ec46a220758fcdd89c8d38799ce37d37e09c5ac84a75512fc749bd475668a9d021ef40d00e43222328ed632b80fed420c619cf430c816c5191973984cb7513ad63c29edf26a56158a22d5d39651ee5aa88a262bd78a9a6f122ddbbcb72dca9461 34 99 2
-22 \\xf907ad96226a3c22415cebc267c876d9d3be4a7087a0879111639fc44cd6582bf73ac8a79c8e6798ad99730b9c9d92bb46bf2d78fda7b2a07121453224fe9006 \\x9c9acbd0c5e5c4fec80810c7e04f4726f4c296085d9dc8c404714a0fb8e7234d5b5144e4dd2a838525f4c6eaff18af7c1838f98b983d5c0eeb4d61b824ad8201e240f381d32f7993aa6e23aaad259c20c796967e5893c487e27c6b14b842cb92e45594d27ec42ac0439188c01cf86fbf72232bbaec3340ad4daeb226aac21f87 \\xcf84d32b3ea266714b6b8dfb4978447bfc615beb0e1eb1cd2a20fc503e5489788008686b29bc990630dd4f795482a726e1d0bfb0d8874e0f7d3c58ad5cf01290 \\xa684e09e4b7e20f38e662cf332bf9d1bee32ac620b7689aae5512ed8af6f2cc3310e8f856453815b284c0ca4dad719f8db851a17c94e5256efe9ede1c1502df12c5494e60f684f46e2286f9abbe0b325c5ff352c37735124a7919f6795c7ef7fc06639de868bb6852185600a0d805d8e07982e020f840b55032f54b43bb041af 35 99 2
-23 \\x40bb7889b0c9b19c4a45cab851fc8323281b4dc2d2de42d802dfef877e0c0c5430d69a3378f708e1d39e426b3e1e610449ed5ab5034db1b16e9ff4371a073b0f \\x3ec38a0c52eeb18abb46fef40e8617b6a871fc68154fb33827c08adcd4c2852797141b3423ed0d79fd8bf1e70f2f3c37f96ea621a212ae7a5514cad22a1f1897f23c6d7f098507bf760d18daf2c39c59673cbd39abba51eaed0c838b091b0fde40d0bdf2eb01ce781c01a30165488cd49bb17b52c2d6f6064b87d022da5fc9c7 \\x2e5ca7992e40187880c7770cb68fd87d34f0a84ab744bf7a9499aa28a5ebc49157da0a0727d3a2ba6f01aa08234e0ade4b96cfc46665270c533ac80af3158f58 \\x2f1258d112eace8a45f1b0bda66f6abdbac1c5329386893b61616ffe37d6dd0f9b1a6e0662efa51b919d5796112464081d851c9823d696273963dfa0133a1d0977ca57667ef0a87c3947d5a4a55d2409abb35ec749230327b7502ff4875b35cdfbccbaab1f4c201dac804fcb136bc25d6fde151bea76271504030e2826cade12 36 99 2
-24 \\xcede295156773b0e7bd7f20555f2727e507fe4481acdd6c90091a571c6d33cd2e896092c8dc4313b7ee342526342ac065b9196197437e73213c5f6fc4c3e3207 \\x634ac2650ac0e5b4e829f83c1af072f6666f61769b4924de74be930db1552755414fb08546bb36688ef69f9960e16e8e9bb705679809fb9d77b04be94f67f51da6396fa8d7e9dffa6888957e9c80a5c517ac29cb579069b9892b8bdb5487456697e286a06cf59380483805b4ee50107ace5146525281a667d2e27906b3625283 \\x170f4a04b4d049f4be70ed48b3031894ee496df9b4b24b7cc4c1eca28c70c686b9e8f7fd3f0a52c9a39a63382792a2dba1c4d965e5dd9ab9d8b0e244bf3d61c3 \\x1384e96ca322665e611cdefd10b038488624a97066fbdc9cbc94dfbc0a3175d9b75871a758825c6bba9d12b314aac653b133a8d2a747737bcd11d6b7105cba7e2afc5975350ef2a5c821f30889849397bf39a56369c9368ccea97d624e9d479b041ec93f7b70e86773daefb66a666e628bbc064ce57233300f0fa07a558b9eab 37 99 2
-25 \\xeb427faa9603c37995e301da72cdefb554d65748fb96990e069d5c1219ae0c11a36173843b45ec5073c14f40918a84e1d413952a58276ed348d372ab75d2d404 \\x8793d7e0e6193064b6175b9bf4aff1a3c5f5d066149c6cf1e5b4ea946c1ab7f17ce58820397e12c9c4cb64b1fe91395cf2e487f1ab1fcef5835176361ac48e47326310112921b8cc1aa85adaaf7b23e8dc8459787150c98e262834b0327752f044c9993b866f32cc242e60fe98d551fdc691e1638d72e00d6372b1a6059e84cc \\x6e6a546e64df17b1a17b068929a1b6c6d67f19af4a62bcfdf4d7cedb80fb09f7c32ebda97eda0bdbd664a3c126486b4614649110add282682155b6b1319ad090 \\x5169b200fb8173e8cc6fd5652a6153f7b80401149cc506e9e6a7e5aba7894f9f971458eb4c9dccc06efca30d07bcb7ee23e68e90e2f1bc8518fa4dd76941405ab0523d5cb7268525eb6a9f59aaa6662a51e8572ede6a59f4ed39ab04ab8d1cc5b227ba1e10683f914b607539052ea71eb81aaf36132cf6b55e3b5b648925c449 38 99 2
-26 \\x1db1ab2bccdeb87e9ad1f5953a751630e72f912fe01716c5243dd7f294127c342f85970bfe95b8c2ae115a7f0763f14e681b5aa0b187088cc7c49f19842a3e08 \\x212515bf752b7a511906270e2fa33698d4a193e0c9cd509659e66bbc6cc70567e192ed9ef785a105772191b4adc9561bf9a9b8df8f745f5e8cc8563c4017bce808420a9d388b597232982113f8a82e806fab7ac527dc7ef783c304ea23b60e3629420c3e6542da752d2bfb08830c4b3d73a195baa3675beb1212b6cff19a8298 \\xfd772b0f0b538701a5b0be2f9b839c503caa5b542cf1b3479500bc3ce353ca59fb0f482f00254ee459e8c9b4bd6fc35068f8542f82d9f3ec77d0a48cfa7d4c7a \\x6b027302ce7a56496fe14379905368ad5186e1652f1ca0f018abb0464bd124eec7b9c8b08cab8fd94895d8f6a2ce38fbd7b8fe63185aa365407dc0b48be55240ef6851d6ca82efef59de7e286115657d2ccdd09b317d8b67cae71f4c06202147a995000fe9ce5dec799503ceb87b87181c5b2ec2299e20e9500d0eb4319ebed5 39 99 2
-27 \\x6da1c1175e23e32917fe437c238008ab6d10e9c6be7002d02bae14f86a1261f87c3bf0e2a50ed0457f015cab257941a5e772ee93741d07685e7c8ab96582410a \\xcea12c13988dfb635c99c6d27df537853b56a2512d32b5268e548709d2aee41f2633eda6d7779f6bd99661c2d0d8036eb1e93336670e1f15367a41ec93cd9508274e082a3904ba6e99ab7207b4d430e706737d47b319ffd0310114852e87fb99d9af8b4bf7602f87daf7d96e641e1f701bc403d3495809aca91651538b6ed0f4 \\x9a3b69a4de8d2cfab401ed7301a60a095dfc2f2da85e12ae4d36f64f403590f0ae5884eb68d9b86b2aa1c897c38bf7b969593a1e694705092a97af4458056ea5 \\x811d42846be745e8a753a6372fd031fc1d998a4527e7abc7f445ecce15dfa61787614f0e6aceaa45acf72fdb6e313991a029121d525a3d7768186272cde9b90927fb855af437ef1457e687c4dba6bfc0bc1693afc3009868d7701bb60e0c97042183d05e15281110ffafdbe9ede07c380514a89007d1f0e7b589ccb6a592ce6d 40 99 2
-28 \\x2328b35ca5352d3a31e9c02a42b1120dab1599f62108019bc4af55f64bb91dd5f9c661975dbe242295b66df0515013f4a6afb57a76fa6d90045b42c90b4f0f08 \\x7bffa5681208bc44e3377f1bcef914ad2509382ab3b00643e477e0baadf88515ff151b1819edc542a688926dca24deccef65d7986f3590a56606eca0e6248ab4c1355f161b76dbe5914d5958b1dac27dc50bc11673267c000a245c83a354fbc62d9f9e916b2326c76cf80c6f96aa2352aa3a4301498a6a49a0f96916e5456cc6 \\x128d9b9c3ed96de696eae68a322bfd70c7f921029dc203bf3be2cc193b872f902073c3abf0131e09f2aa52b76d0d3a466a104ea323502e3fc6ee4065b6f4fa29 \\x8aea1db72c72518fc024aa5e9e2a20225da568df880b4fc65acc08e66d8df5f82d25949b69b563ed1f2d489845edd5e1a7b6160b1ddcb7f92ee157296f854a26f7c7e3274b1921d511621ff964bbff74592595400f860595220b6882efbf0504d2e3d319527df50ae0955c3b5570088ab9df9b6e81c46ae7d63fde1ab4587077 41 99 2
-29 \\xf92d32496600008f0d58f91f2324ad4dedb7aa69e67d86729fe553c4083ebfd8a3533e8138c558371c43066087573e58ccfb7986b235b95544aeea27a5fb000b \\x530446d93a5c540f2bf4bb057fd27032c488658868a318211c0f7f96de132997dc7d03c46872e8cf1a7a9d785dffb4d7007dd794ddcc22fc8b964b0c27ff789f97848f63d5f8ec84f4bfa21775b10989d53299d00ddd32fd404a2d06641fbc3fcdda5f91289fa98ea3687bb03cbbac00fa01a809f6c0fd8de029dcf8230b7aa7 \\x097a04fecd04e07f79ee3341702936d25376e03d885fc9c973e214c626ff7e84283cd30566fa65d961c1ad143eea1e7105855506b43d1898d411353c73caa176 \\x5f0a3e40c8ba2b1de7a1ab56806d78087f0050a50dd2fe73f93f86030a4a17cda36e90223ef36c372976ce71f0ed569e73c3a2c6b2fe7edf44043c76ab23db2fd3abf715f593acda5a1b6855c8d4923cc919a639b9dd7102e7145e777935d1a34a6c6e3179d76316825b90e12f1b67f5bdc7730c57ea23267ae3e17a8dc12b5f 42 99 2
-30 \\xedf980f9f993101fd44fa9881ec27a4c97eef2a984ee502d40f42a044d592da31bd40d0e8595a84e035f0e22d22d359aab3e73381daa784a8738099fad911609 \\x5b32d9c8cd4eac2c9c1d675928a44b0c72041c0efb9940c91f62ba2ebf518c0c3c3e56761b44a6ef942e52b8898eab63019fce0658f11bbd86c2e69787d003b016f59825009fcac82a7b7f9327a4feaaf4681e1558dbccea27297ffa9329191969bec206fc7097d1bf90d9bd0c44988d43fdc3b112e1de54828d70a4252ada14 \\xa07173877d94fb97bd33b6638f44edcb8701f8e7438c1fca4ccb22b90d4cfb598bbd0c31ecb6ca45c06bbdb2c0c98876031bd013f6c134220d374d0c3e2b0d7d \\x1fec82ca7f67d1ae3e16f2e19616562314e0fedefc39235427d6a4c598a639c207f075a6e373de7773fc7c55e3136110d7213903fef7d2ca97822292b0653f74e310f0dce032c2e87ef763e32f7cdac1f2c3ec42e49575d0a0ea21771af4fc0839ddb18ed4342713700f4520f06657f371c2b96875f14b38a10d3e43e2d7c61e 43 99 2
-31 \\x253b91e737a2721eb48f8c84d1255fbfabad2444fac89dd618c52c382f8cc5d31925e8ce9d85a33a3cd663d33fa8d9186d87bdb18362d08826ac064675dc760e \\x14ae16621db7e50273feb90c33299843af998432ab0e637be855e753737962801eed13dcefa0f29ac6c25ae052babd09e1ec3e9df6187d025e71af79738693914d956311e16efbf2902633015032a2f0f225de65f91f88e35076e7e18b5c74fc9d8d52acb5c52911a39a3e20f495cb00c013e698e1f672ebd28712ccfc6c6fe8 \\x610ecb3987c5e8a3a954becca642f963d34e80905a4b87012e60f808acb868200d4daefc4ac5d3e057233c66d6bc30d69e4c330790a70d7a181fc1a6b73ff719 \\x9f3eacbe5561d1308650e4733be38c8330828b4b9eb3f77a525fd3e08500ddda8df388b35ce781f795676737e7e373dc832a154985c7fe9c38326c72664a6dd42ff57b33c200f16bea462eb4262a28b01496f589b537c24a26da9ea914c242e97a357988e7cf0eaaf4be762d686d1ab3cb84945f124dea6f36573919ef00c7a2 44 99 2
-32 \\x18cbedf0c87eefa63c141ff37cd8423f39c9c72360bd8dc01669573173fac760ff26f10c832cdc7ff25915069836f687c975c93a24500eb4021b8555bfc49501 \\xbf42c8230c607814b2c2c03399bbdf0187cbd9442e4f92d1fcc0fb4977280491dfd2bf7d7e770d44da04ee82fb0fba1d93e02b5f91e2190ffdf3371770f22c9d505ca246cb70cfb10d1d7ddb8ff2f563e31d2b31b5bee3701c0e49326dbaa6813459aa0b925c82ce3a5774cc6ef8125f74a91b642add2320c917b5ac3da702c1 \\x5be7d44e58a9b824fb83512fd03be999adb04e8c9f49d71cae586daa095cd39cbe707540538288d004193f4295a663de9ff9880bd699d867e58af81cf08de616 \\x3372281fb00198d68d4ecb5a25f822f661f8a1a4f5a60f1edafabd798edf56ed2ac5118549e5d551cd8ddbbafb3248f9a242a2b4337567c0c26bb1b842d29bf46acfc7df89b69e2bbfdbef8ed74d23d4992a4e63a070eb847628d0addb0ff4f075f7e804d28f59982c028b72ce92e140c80a00578b4fb30fa74403f545a050de 45 99 2
-33 \\x022d127ec4717c3850641380562143ca2fafb3d0e6e67901d3982e3f4f91d3335088d49306d7587cf902328b58acb476143ee071455fb0c18d684d0c01202004 \\xa51abfdab00851904f6911b82e9b847d7c57c80e687d1c90aa0bc7c34827c6ad2bedebb0f5a475efaa03ef59507924d527929c0005da38dcc5df06d8a1f705a227fdfe10f39a733c80b462b46ef75072d4d679f12331ac831b5a3689bcaba62444310685ffa88efee61402be229473882068677eba8ee8708c5ec791205b46b9 \\x249bfab8189dc69f1315c11d9d6818fbc6dc40ca989c371c376f30e60a94c7be7f1921c79d3ed0449a8f1263d7ba243c9ec9cd708ee90a1b44b6337bf35f6d59 \\xb57d946dc55de2ef91f7255ced7a1e6a5a208270ce7bc556c58a30b3164eff39421d3fef51e3cea78ca45b20fbb4c0b0428a003e4744cbc8f480573f91fad67d898cc8be87db7a7efcb1979247dd86ee5e4acaaf359071bee32efc32c3cab6c8fd6a3c71b55776b5b47fba5712d88d0932b7014b1160729f6b8a3bdc4d81e696 46 99 2
-34 \\x5e4e57a6addb342491c0e904c61f47d428e3e6a2bec6337ecbf33ac971edbd6e6830335caaee15f928a0007804410c7f09c91d6effd9a0821156ebd6f91b4407 \\x748f777ce25c785102170751919c8f570a1a49e2e3d85609d38430a2e5af7e846ca7934cf90d169c215a7e18305cd8e527212d035190ed11c733c4b02694c7e1ce6774e972f4c7ccb826d3d3ba35651fd695a7f7319d80c51ed18d5424856c1d82c06f0b7fcdcf5c065b9d4c8c02bbe2dcabe4c959b30f4258f9904bd3b22681 \\xc6e2db2dc907d6ee7e3c8a1120a03874d1f5d07e39387bd51ba8442d750e81db617561c265347a6ef5d2587f112772287d17aaf2b7adcbb99199901d5518a29d \\x77ffce2365664da4356344a4871d73eaf24935def72aaa52dabf7cd4f04fbabdd6a6022ac25f08932b0e3ba872f28181b4bbc05ce5da4f3aef70718524eac6011480c041a7d5a3fba2ea69f09ea419616f8cdc8b5dbe6ae84e492c2ae6d41636f0bacdb92d4cea6948864f784daa6aa1b5c9963add4f4b4c48b9f6e3e1793352 47 99 2
-35 \\xc31f9dd148a8be6ca963f0ec66bac38ea3cb9810950c08fa0dd2ec56fc0053bbe930d48abbbbd73800bcb9ce6da64aa4a34ef97b40628a9ae584193e5b9e0407 \\xb29a9af8a325bd5327fee3ec0ffe507696936e6b3eb24c8ea94d5d8dfa54856b9a531d8c583aef0a92faa15681e25e26646cb70c49bf626343269e8a0744cd7cd61aa9a7917e18ef081e42aa02d1b16291d99a9a9c41c8d54361d7aa85a879dc6f1e64e458ec73ef25b0f5cc4a4429205164fa2856e5df990ff1c53c55b124b0 \\x1c2fd421a941bd6c5a66d7f5854d10338160ae5c6b8922bb581e900dce0441d69e2abbd8cfb1a6a6ea8b1bbbd63e5c7c7a60bc5019a281e86f8c791822dada24 \\x4926978edbe4d5c7d61c2cc7d7c04d29ef3ae8f3bd2d4b6193275445db0547fefbe33f2afc9ce0ac6a07bee2a63cd76b69621ab88a5c882ffecc6a99157b431b4c64357ba4f2bc24220f35ab85ea7870e35fa2643dc4582b76aaf13aefbe2b8fed80d30d4709a1ae88f16a2e0ce5c9d0c361972024f5e3a16072d0f9010f1031 48 99 2
-36 \\x33871cd64befdad5c8bb5c6615834b8e5edf40524cbfc4215f42c6eab5cf76a511d5b8ccc86c1690847f657322a2a876fddab578ce5012d7fbd036bf72b04006 \\xbae85120d3091d1f5c25806795b14dc026729d93e0a07d968d4d9917373569c31b0fb6dbfbe6922b3735728fcf3174fa061156a122e79196e0e85a1a97d2911f8dfe947179ee99ec0d89a170c1668cb64fc6fb4f9dc5ad4a035b0734543cf2642c9d052a1eae63607d03a184421acf66d763c797b17c4dda6e6e503cc1de599a \\x3c385a30d32a91bef1ce0ea8825cfea882dfc3bd87ef552cdf7c924900ebd17fb4e1f7c57878c3cc179f584c162d4552739750f0833498df5ac27b01253f47e7 \\x065187836d334558b68938e852521976da76d1963eecc10eb2c62c55ee2ee80dbc93dbf2a12db1d29a2d9157475b32ceacd5b464ad26652ac7f3f1c31d0913fbad8f00462e8a095aa0745c5b3bc375ead509f6a8d0ba71e8066b5222938024f1872b6247d37e1a3a9adb6adf6cbc1fe1ec6292ce1d170dba252a8c47a0fd443e 49 99 2
-37 \\xce51ac40376ca11b7399f30bb2d3b904c4a2c184c9a6434aaae70362d1cc2073fb856383752087d0771e828f09caf975a6ecc243220c4bd2bd1741194edfcd0f \\x3ddec43d75b05a082ad6ae414cb5f818ade7000aa0ad4a1cd1368306e2042adf503a5190dfc7b068141e761d889df7c6cdc6100450212a06820117e7034b17c7cec60de96ff9702d13d09518beaa626d15d635971484b0183129eea3260608eece6e2bcfbd8fb2d00a1077430bac1503c8b30e73d0420f2a07531232895c17c6 \\x2b41e92d11494f55885835058ff7abd41a788d3fee3186acc6cf1af5b8f75f3456d396b59c7ed106bfd1f8ff22b6919901a5f4506df54e2ffba88437c521d000 \\xa2ba508c556965fff1554b9f02690f7d7fa87f1ea39f661824788f8a375d6ced7628576665180b8e4937e40ffec487c2751ac7e649d4303261ece00897e6fbd430dda2ed4d349a099cb4f75fe896cac53bf641eda1b2ff67c9fcad548fee3dca08dbea635fb804c61fcd9edcde20864c81843708d11571da733e36436470d58c 50 99 2
-\.
-
-
---
--- Data for Name: refresh_transfer_keys; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refresh_transfer_keys (transfer_pub, transfer_privs, rtc_serial, melt_serial_id) FROM stdin;
-\\x3510b0cd127bd926a0e78f2a65bfadeef66a91d193bd7f6e0193dc063801520e \\xd078f2e9808a738073284b3fa8f6e0026baed6084b879fc8c8f144e3ae01995a105dc061094aebc5bba473abdef4206e1abe5d24355a1562039227ca36f729ff 1 1
-\\x1c068485e155de486e048d251cf4fc22b4ceb343866eb10b12d3c64e9b086e7a \\x21275e5cf43757015866f4719989b73e4d39f8c13464c52f1b3b127f1bdb946b9f2ec3d42018e5cdc7bfb8b0558169ce718b79e21d619317719b396793389de0 2 2
-\.
-
-
---
--- Data for Name: refunds; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.refunds (refund_serial_id, merchant_sig, rtransaction_id, amount_with_fee_val, amount_with_fee_frac, deposit_serial_id) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves (reserve_pub, account_details, current_balance_val, current_balance_frac, expiration_date, gc_date, reserve_uuid) FROM stdin;
-\\x759aec7d6e7a92afe3e8dbbfdc9cf7cd345870fe6dfa4b2407f9d47a46414e15 payto://x-taler-bank/localhost/testuser-e5NQTk6s 0 0 1633269117000000 1851601919000000 1
-\.
-
-
---
--- Data for Name: reserves_close; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_close (close_uuid, execution_date, wtid, receiver_account, amount_val, amount_frac, closing_fee_val, closing_fee_frac, reserve_uuid) FROM stdin;
-\.
-
-
---
--- Data for Name: reserves_in; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_in (reserve_in_serial_id, wire_reference, credit_val, credit_frac, sender_account_details, exchange_account_section, execution_date, reserve_uuid) FROM stdin;
-1 2 8 0 payto://x-taler-bank/localhost/testuser-e5NQTk6s exchange-account-1 1630849903000000 1
-\.
-
-
---
--- Data for Name: reserves_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.reserves_out (reserve_out_serial_id, h_blind_ev, denom_sig, reserve_sig, execution_date, amount_with_fee_val, amount_with_fee_frac, reserve_uuid, denominations_serial) FROM stdin;
-1 \\x8b6df44208ee0a2531f9e6ef942c29d71578fc97e58bb184305e7f635fcd9ac8ecabbc65f4b91af6b1b50716a5509de6b4e318e89c632b22bd610c1c29ef89b8 \\x4d1f88927bad93f13eee8b7df4b9fe268a6a1a3d353c537ea0453d2e7d104bdc55fee35777ff491d275fa324039fc0b7346b667ee225b26a2803bbb8c34de753b944959757e92669d9a0c7deb80bb1b0457caa86fb72ac81abe6ff6f722d48a3953ff6bb629632d92e5e110b65a4ec021a19b521aa1f6d1206bb2ce3fc897ec0 \\x20264218816a64c996a4a1d1c781ec3cdb6d4064eef987331b2643d342b75446803e8036ca250f1f48417e2bf215ce6af55757c1760b67668462603b5e6bd10e 1630849906000000 5 1000000 1 8
-2 \\xb7aa8e4e3553809b6e41fcca9e08954d8d23f717cfd96eefdbbb96f1461f7ebe133c4198aa42185be0722443e3771616fabaf15d727c346a749231721f6851a0 \\x736e2e4725286dc66a8aba647e7abd592a1adbe51875ee36503368e8f37086a16adbbc74c27a2cfc22e2e4e62dc1bf8115f19401a4ea12bc1a459180fa28507f8a87ea9193743c3b84375a39222882ea16e85517980c46c658ce449fcdf07eeca52fc7fa6caa90bbb665603fc44750a24f8182ed23ba1f97bd1c7e28ad73b2ce \\x1b87494653055d456b8c1dd2634d71b04f36f1319b578f338ca853d25ff78a63f7daec78c2c802282a5c23494fe0ad22880867d2c8875a27a8648d993ef88c05 1630849906000000 2 3000000 1 247
-3 \\x5b3541409f32ccddb71808e99b67becb666848f0d883d3b7c0a90d972fbfaf124400446b5eb30d0e3b8cd792ac34c0cea572dc9668f3c279a62600838ddd82b8 \\x56d964d453803c7a55e97d9cd3af6c16db253b03fd8972f289111ea832b21f9a7a262826146fbc41dec13e5b153e05ae252e95bf47808afacf6d19bb815a17c9904bfa00511e4b64d0af38c4daa517e1fb06a5e3a4030e9fc51e5d334218cc383d259560f1b67a783be6b143442c77ef682bb4574c83c52c880584a62f4879cd \\xa3daf512c638aab2ba47125eb16ebbb31d36fbe365b18ad4dc25a7cec16ea72dd12c54fd004c22b207565f9a355dc65b90c9ba548914c0981477f097447e240b 1630849906000000 0 11000000 1 240
-4 \\x683d212d8932aab73778d09a208db13a766ce3b857d6a6f00a731a47a573313f438a713a7714974e2974cda6425654319dd6d6779e72da2d729bffd3764357c4 \\xdc60da993511d7e69849a82d505aa0e0d5259fa8eabf4ea5cae8ece58584854092bbaa6eeb1c46dd5d3734442ff0c758c580cfa5372ae4da7c71d07af2b97b095859cbfac4c33716f10d94e4b38cd10a42a73e013b981aff44e51cf7615a76b70aca72e92aa19e8b3be3eb72f2afea3a672196efe323c38cf13792889b004cbe \\xadb8efcd51be453780d44c1637429621c9705f1b2d87de0dbac29cc606de9aa2f96b9a02a2dcf06cef35d89c99ff7666595f27a36c18057a237011023a3d9f07 1630849906000000 0 11000000 1 240
-5 \\xc520e1d40639d089ed0050341cef36a652514fef68d7a02242063be525dc3298d15211ca8c2691cec2e0649ccd2949b99ac5735187859c81f6d6e4be2236be1c \\xa6a145e4fdd96435492c2fb09ef634ed5ef3e50412a664858cba43cb8a72df661563a2ef360fc4d91809716312ba071d432d31d9e9e4a81e0513440dd955362259746048545a1862f50641020462f4a05e3cd682d4f510ad2673739c49ee97b491a7fbec696db3e3cd7479b24757b4df3ed9133a60f6f0f9d91529b7798a52c2 \\x7dc1cd999905e7eef9323a2b797f76abe362cadb072f88b2d82f15f2be1e045d8ea375e99891ce0dad006ff305d11043024de93c744dc4451f262f3cab922d00 1630849906000000 0 11000000 1 240
-6 \\x3c832765b5be6e2c433c26139140dcf122af7783853c2dff4be6e5a27ba521d9c7e1af412def695f7829f3b86a947b94cb8f96b2f03ee02a042deca480204d32 \\x5c9f8e14bc727604fa5f8f6295c263dbc44c8dddd9973ca71c9ce66c7c3282068a6ce9f185923c081d2427a6da10b8630eaad35bb2b93651eccce71639db063d59a1ee713302a98a1530ee2f5fdc033c28c6964c6f578b165e5abab7774c8d086ee686171b537dee0317674f762cca30af6bafd64f47e42f0c7578b64b7ef1ce \\x264bb8d90d2b8a2ea1b685be26964ca897f66ae5b3b90bc0b455414dcc2ba5a67a6bae8162431b136492eb198679267c53a9c2aefbfbeadc8941f07f4a268306 1630849906000000 0 11000000 1 240
-7 \\x5cb3ae67c5a44a77972e3eb279a5dc84ad7cd9a61adb2535069f314f64b1130b56a6a46f3135914dab303c1a74a2acfca414ca1f3a4ba8f5d7c4569067ca0bbe \\x178490f31e8f71c8b842f4cc1ee0654aa9e4360745ac0dec55186c1f6eb4edd0a89b5413ac31ddc1271f88506233ab6b55c802d6b91d9de00199c5487709cf697ac0dca73a903ebb25c49a5f34a838dd5a2dca8ef45814fdbdcdf3ccb8085d46daee36866175089103c885bf1dfc1eb32ee94c70b0520d70380cadbeec65c1ce \\xec7e89be563494facd18429a817a67d8cb45b4219d426fd014bc474c6d1caea38e8ced92a482ec9707714a2b3562e9d5fa4c66575a1da7b9f602ff7245c27c0b 1630849907000000 0 11000000 1 240
-8 \\xb17a9cd763b369cfac2e6dfeb1634c753aa32f1f1e1803cbe4ec6fe2e080c132725bfe641ff6483fa847a017cb3af3942f1d67865316278c19751d64c6abddf3 \\x9e9c8bbc0f89f778f34241f0841eaf44d2ac586c37de22abe9ff67d1d6ff1ec75ac8c95e43deb51da8fc43897a2283dbcf124b117b9999c1b214d686238f180449d51ca2af3bb388f3f357258ff18da512898dff1174ca5d270c51eee9583341ed0c272773b092aeb1630f1a647cad5bc8c2c94d871c305fd7e4a7be576c1358 \\xb9e7a8e37dafea6cfeff7c82f69602132f7e0e7af0fc498062b6da209bd1f36ecc68afaa90c3928e2161fa865e15a452dd6db86c17250c8788e1e3e3d52d9a04 1630849907000000 0 11000000 1 240
-9 \\xd52a31f4e887dbc28fd1e3466a6a32d285d93b3fabd3b756dd4b876b8cbe97152932931ed082ae137826906ef3a93a5ad7b83a0615e12229467a635afcab378d \\xcc76bd9c50c9e3c5b86dff6d1e01755e2e56cc7788737e506f124c43ac571f77fed589e741e59d74b77e2f16103a98719f73a5e4a57751ad93b321bb7726427356ed6eeffa6781d40188fa67e3b633be25f840446b4428a82632c4ad79b1270a7784d7d52e500ecd1b1981e2569cceb2182e616f3bf10763e0da26b8a0caf732 \\xac7ae148974ba45445545db8748f1f4ffeb86d4aacf2ad31dcf3810746d2ef97ca81ff6d661cc13f580fc507b48c6159856f4888236dba68596e24e869a32a05 1630849907000000 0 11000000 1 240
-10 \\xd08824c061b5c4864ce80918f5598d0abb1a064f62d33f397d86606f852f485fc57fc881912f21a991a3c7e8de2ff4604f66bffc66eadcd5749f986143715a03 \\x322ccff6366558d4379f5c3fb2574bb603375bf4cb5f496ed3792740c255cd791849895c2728683bd135fe48c81a39c987f71be65bffad06414d5c2d4c1171de51944abde9bdd035fbc4f66d6089c129da5e451c95350a8806ddf8a55b8141971f1b0bc7fa9882dc53daf33f7109f630b326a700c38816b72567215731e21c5b \\xc7561f3388282f2995d9e9386f0d18722c80e216898c6fed21304aaf4062a6cae5468df2f503b9eb0d950f7708e1a60c98dc4c56c94b2a1504d4646136be9206 1630849907000000 0 11000000 1 240
-11 \\x668eadded52bee223db41142b0b06454dea6a8e73d39e0e5eca265c54d27d3d03836de2b69121e00c0ced4e441aae5472de5d31dfcf6fd230b5b1ad3e705f266 \\x6ad0d0c90a7d75a3a05809bac1d4a9cadeb435ec1819875b400561c12ebc2a5466ad865159889d80996947b3c057a2ffb8207b9c143d19a179d37ad0fa68ae6e4479c73b2c75376e5aa28de57291de2ed8bb3d62a753e8403ecb2f909cf6c9f5b0c08303798d952316576efb063c09eb86431a3e8696da7e75bd76c5b8eda858 \\x14f822dd8abe43708029332ce383db652f03fec6f7dbbf6eba37564b60234f39566e0433e59e131c7809a1501b710bff65dfc2a60471c2a513855d173b0a8f02 1630849907000000 0 2000000 1 172
-12 \\x6f093a34555cf01cd4dd891b773466010a2f09363fe27e1cc6684f4cdee1d8e87c536bfe4a41789d38199406497c62a3419087f2e1b73822462e754c366fb044 \\x690e1408b79dc00b7ea425c0a48e33d1aea41b5323478ce916d63f93eac109d944c501694fd441f75a4c9f15cae1fb794e7ddc1317585c062267a77956904e4a8f1c41a5b6780a8ad639e89bacbba09117a7b35bda73f6a0e9e1f0a040a00b853d7ab03544b1cfcf06377fba04c3a5c593cdbf6de49932e41548e2bf57d0b158 \\x00fffbae415d0190509ef1f56d40034da2aeb72720531c1a2114337aef0a311d32652c4c87f47d6e19a54f8bf9a75fb09478a7e21022b0f085a1cad90e9f3807 1630849907000000 0 2000000 1 172
-13 \\x5683eb2b366e0f666da988eccdcd3254ad2848dbc2ee79eec61e0e22d580f7a1a22be996a8e03f5818d8f1f12668320818c9e3b64aea2a4b20e0c07f5c47a511 \\x7699f948250de1383a268573cb18795d9be401e4b0e96e85de552863bc957308552d2d151ac625022bc40b398592a480fa1c0b3be23e00868e4e2948eb566fcdeb0688cb6a3b4cf453cd7359af39f1e43c15cb125c5e88248d3d27449caa2d2c96596cb802a63d2999e3cba776c2e7b9cd74cea97001a394040e58ff3df62f93 \\xd7fc442620a023afbff8b8a6bd5cb25a7d63b6c8689b9590d28b2a87031c7f41dff6e5d932fcdc6942714ad8b930e620c5d22c03046efbd8b552b9ea2aa22603 1630849907000000 0 2000000 1 172
-14 \\x52a4fb76d2c39ec47efb710bd559e462584cace698bb642f7ab5901533dc51deff507b2e6d31eb5d1ae2503a8d9e8f2bc301230356e6fad14b4d6b82707d7eeb \\xb3573329356c95385ea157d2135a84d3b9467932d35a4b9df85ebbab95ab94b80ee66dacae34072aca9ea868f72ac24d5899c69d76b1b8c8b88e3696f876bf20e2098b51a8ecc39b9cc6065b3cb4fd2da85471a5699977f378fd23fcd6192819ba43f30f8d84a720e83fd993c7f2d42117ca272b9f406cee31427f9938707504 \\x8615be5c40f944814ece5d46fd51cf4f389a730e8bde53e432e0bea89a3c86c6fe27f28c78becedd07c92077234277611b2008d2cba46eb0cb17dea554b43101 1630849907000000 0 2000000 1 172
-15 \\xe59b4c01ef880f279c1ec8e91517132c60f9fd789f6dad45347358581f351b68c191e1c0d414c7813dd66f6e12047035610c0d2842f6c89e22c0ea2a120d958a \\x1bdef75484c054025491dad62e1af7ea79c38e97787b505e31b2c80e9d4289e1dd093705f811b4e955765918ee3adf2ebe3e066910c42c81039ab20d5a6daeeb80cf3ff7e5a9c485177712c85d4804a87ec77c4216d4b529eff8ca784a8d9a7bc772c7b77006a467d990ae598253ff4932f19b2d4ec0de422b257e09f646801e \\xeca7d0ec52969274cd627ce7521b89ad816d4d9e5f15ba7c06cdc485279932fcbaeaf4d4e6f250b04a8f6f70feb9fc5c5529fbc6deba5f3801a9a29a4ec72909 1630849918000000 1 2000000 1 96
-16 \\x255f464a9054c03875f0e47aa46e4d95c63d2a9bd0499c95d63ce1e3717713c433a961104cf564b91dc7942e7ffd61c88e8c7ddbd462f79e219be86a9d683527 \\xd415c51c497c1b5139403ef91690fde33178e58ca5ae4203f980ea828726f91368c27d9d6a08442b3baae2a9ae36233d40f5307fa71e0065bffd837f1f792343f266ced7476a49fdc2e84acf5342770beebc0b7a67c40670349827319d0c0ca6aac8a728ab517841af07de63ced493712bba25a1293605a7c18195ee6856cc97 \\x1092bccc5d8a5acaaca5dff57e8724d3332f9c483ac4c2e11118baa57cd16610909024ecaa3e6f83847c9f08c3294791ace0c3730c149e1cbd20ae9b0746770e 1630849918000000 0 11000000 1 240
-17 \\x502eb1203dd2d37699cb573e6483d84e38c86a2b177d76a0408e64d9f706ab01228d6542506ea21c31d815c8e083bd0447a72053ebeaf3bd59d8aa3ecf269e03 \\xcd58f32cdda349846d713472148efaa34f7b137aef8361aa2b5c421811144e30930542db897977f09191b2655c9f1a0f52df3dd479d535de137f9dfe0788902e32d55be547d0fc5a8aac0dd6f1f64291c2316106260c9cfea6222bed130f853f1ad68369e29122966bfa833cc21be7b54d54858b75b60f713d8e9522b04f2f9f \\xf8c9dee0085fa90dbe8115b840a00c50af5e2e14cdc7b6997668df872cd7775fce2b06f61e4cf3231844a8252438f597aaf8bdfa0ecd6dbc7c61e76f1a392006 1630849918000000 0 11000000 1 240
-18 \\x037f105d4f10e68ee20475a41f6083c9ae9277468b2da99970e6676f9a1b70030c7271db4457e4fd0944116c52b130f1ac83f64281c3ec88e5769526fc096676 \\x15e0d30c42fbd894cf13b72a0f8e0b74ca7ff818938c4ae6d53d7818625eedb9232aaeda10c1e51bba5685d1efa391f525784bbd67dbf1b09e381a3ed2690f834b9a7f9251ac0b02097ab72118b071d92c6eed09ee5cfb13bfad16f0ad87558225a0fbc267425d394f94427f6495f11b7f1592daeec524b05afc60f0ff5f1308 \\xe7492f5bf4b1141aeacf3cc19ddca6d1b3dd1d102ea9a79cb132cd7a2b448ef9d29f8c96f04a3d98e78cb7122f1cd831fb68d6a4ff6d54b00afb660539470c06 1630849918000000 0 11000000 1 240
-19 \\x1d939528190557ae89809e0844c59ff330fb67deec289d5a1f8b0cc17a9bb8ec2bd00df95a2a1c3ce5bb0d8d0e6fb33f1832fef767df466bd452f893103a7e04 \\x1a7bddde9a91f7ffabd1918317c7e3e02a09dd5931bee3b2ee965983fff84df5b16e23c0f18e0c380c58822ca9623699a3378217f0dd209201867b9e70ad4dd03d3201ed61b47f87097c37d1546eb1b5208b355f4745dca1ebe338838311776a3946a81c531554ab8ed356b8da69bde08eb52f0e33bc5b24c46f0e55e714abd4 \\x19b54d0f56af725e295438001b3d8e16188de92af0393b596b048c8aab9964d364eca00672387cf44b591644c3f3ac0a88c222b2b1c9b6cdbd8982803bb62704 1630849918000000 0 11000000 1 240
-20 \\x87233e2b41772465047ba730cf6bc19fe23dc5c64745340123281ee3e0eb1f7bbd2ebe2b6fd77d27b119b5e04c9f0ed669486d745840ccdd2d54735b0a0fc999 \\x5c2f7eb5fb7c4a2c14c1616469b37bc109cf6ae40830cb0c24cc6cae9d5296c68ca97483b7418e0f2a600320c0e399017f132805209039088f2344ccd38b32caed6b8d9aaa567b31e778f3ef2260338f7012635cf5497003f03467bc18c6cb4ef1d227201724815c9c42307e27646b81131d728e4a0058af874b679c517ede15 \\x0408a07b45f1ba6ecf2181f51b2b26a87fa498a449e0ee62025011c5af780b945d4ee7303d03bc5ec836cb618ca188692c08c2c271aa54aae4deea74dc8d7c07 1630849918000000 0 11000000 1 240
-21 \\x563b5a69f9ae9c44ce2fdf6cc2e78dec8eceecabfc31ec0b71bcee81f41f14357f5d84af122b5a4c232f19a113fda7ae743dc7d15242a365ad799f44ecbda895 \\xe850e47b6f9449144fda12d1c899f462eb09e22c4e91a8a2973cd401dd911b2cae1242b548c6352b4b6020c706e4cc76e6af512f9218c156eaca162f744cc3be88380b93742cb5d8459c03c5b602f632b4e791af5ff2ae4065205b31d09f27d56c584217f309186bc29cbd9ba6bc5820294f046203dc2dc3d8e612beb4a95ad5 \\x8f9e7ba7b4722b67d87ee84a30b03a625e351a6b02e7b64c8ef5e186875dc8e7f120524093427f15b965ca2636925827ef6d247c29e16a836761ad3cf806e600 1630849919000000 0 11000000 1 240
-22 \\x03320815db76b8df5903250441a7fb71727d913d01e3cc68264facf3a21aa05b1e6690da166b5f5259808bb3a6057164147456483cadce9f72e8576679482d1a \\x9ec796a150df968508c2b8b341649098e40862b3f2ec83eabc226dbe08807978883e03300db0ecf14d02486310e51fd16f0ae2c7679eed09a7232cd3ff609490e5f5b84e0b4db2f7a623d418c66c310b81436e54edd5cc24d99e7bb29d25540628083bbca0f92fc2b5bdcf26dac7c0a282fdd187000905916629b4bb63fb1158 \\x6bda5a45968efdc88c5b49bf20f1000fecb853ecfc6d39140b35ba4d91ae0c99573b8b289a0a3ee5e3b860fef2665ddc32d2f47d1de861971a1601290fcfe705 1630849919000000 0 11000000 1 240
-23 \\x179bcc4fabecaa964cadf94dac228432702a4071f1ffd3ba15af24dfb95f29b52cf3af1e0d03237223898b544c34d483d65b7e8dfd56e5a22886912706f27e98 \\x57ec48950956ecce09b6c03a2b70cc86f27b21b681dd4c73f3057ceca2b74f7e7db1076eea06c0b619c19153d8a3e6f44d5ad16423d6e23c557e2874726ad7f9ce73b4a229440b79553ae3c3d832dcfcf936d35d9a8fef43269f27d82d1ee73ed4b9b3d4aa9695f44cb1d9f8c3ee6480245246dc2d6a1b6b232d5615277fb3b1 \\x1033fb69eb230d74020587e3bfd67fc86c3b2318e47c176fe98e4b8d3296b0e17e96ef93de1a74efc02951672a60aa4666fdca13c5f935af7d1bb79ef9621606 1630849919000000 0 11000000 1 240
-24 \\xe364eba2f2db0a7576db8e3b2f7ac5929b26e05d006c6182bdf38c1019c9d889cde584c0d9a40506d62e157b8ff50bb19335ef1691c2a0138ff6a8472c6b90b4 \\x2f31f50faca631cbfb7d9f89895423879b49d8ccd41ac3581e75892d4a7ae25ac2318e165ee7183970d9ee91cddd632a07774e9351e82ec15720193baa39bc49d298d13336d6210f7697d8832ecc363938c722214ba3a6edd8a9087eec7f8a2862d249d22755428916d0a00d8b9ca336c8f4bb7eead04f2ca325f49278409c55 \\x439ae169c76da155775f48c5a2dff84bb3bb1e909554cc44a9dc5e116c8c2c3440c19866002bdf56bd7a8cbb452e61f3ae12ad1b45732af598e94afe2220980a 1630849919000000 0 2000000 1 172
-25 \\x18b8c779fa2d999116a287cb0c127c5b6145a4d1927d1d96b9b2b4bcbb132f39bbe399df2126cc2ad35b4f5fe8a9a21680d81d527f55f204893457f4503eefe5 \\x05ea56a67cf5172b08c04e76a8644eb5c9b5ee51ea0835eaa12af67346d6673b791141d89e4e6110e4f5be1d3ac3c131f5c6dd5e5b7458b9821e97ef6cf9946e4cca777c1f94a75597ab3a4dc359fcbeffb45eddb5058a3ef7896defcea620a2a6f86b0f4a87fc72bfdf295096d94032a31e067f645bb29a1f1aa91ce3163da4 \\xe4f96594539f895952d84af3c582e6dd7420d41223ff3f7e09bbdea1b21e73bd145cf42c193d540681015350e589081bfbc11892e1ed0f8926f3cfa54c049f04 1630849919000000 0 2000000 1 172
-26 \\x94eb0ce8868f350c650eaad54fae942ad6a52bc1febd548d7502147f1d24af7680e8ec897065835e51e0475cd696c1469905e7153368fc9e907b1c6be738f69e \\xa97f1abad55165169ab8eff6fbce7cff4355d7ccc9f221102c4f3b58e9214b730dba9340bbbe97ad322d7546de1d818a03265652d7fa4ad65edecc65fe4accfa9f28141281320953926b6bc85608d37e3dcc227215e62591083183a98091bdbd6784256671428020944449e38894a1cc4ef85101db8766f3ad8a11bf7d3dbad5 \\xda19ef230507243809b70b229b1e0f65bc35bd8d4a292fa458042f6b00269e72e8a3411c66f9438ead03c33458fee65e8b14b33e25f4ee9403b502f9855eb705 1630849919000000 0 2000000 1 172
-27 \\x2a1f378870832cdcaf144ee5b483e85b1e841aaf4aa674d3b824adff8498fe1e3b08915b900e538fae441157737ab0e7545065f7c6f2e532404f03dd16e6cc4e \\x83ef7ac8337b11b9586a03cabcdb1e1bf1abb2af28226f271215349d1e460d0fb052208dbdcd0ecb7412c4f43405c8ee092f662d22b40765e377aa9be40d517ac3f37c4446325ba299ff253dda2bc2efbf11a4485c0648ddeb2434cc90b879bba5e118dabf46d59bd50af2c06e4c4168a96de423e1aab2e58b61d25b29677edd \\xfb8e264db7c9a281855a75f338f459a5ccf685ab4c1e0eba01b55058efea2a86d74b467bcca709f9088b9bc3e8295f932b53997cc09b6fa6cbc5a3c51def4001 1630849919000000 0 2000000 1 172
-28 \\xbacd6dfd6095f4b1101d02a44505f819e79deaa84615ccd5d1bdd070b35d39bbf8d6e15a8c4ea2bc8432ab6aa8b1529f06398014643ccd7ed16160691ac4686d \\x6838135220509808a227a454d90dc10d498104ca7d563c9218e81bb949a6a08c5864e02431588924762d7d0eae180e0f6ab623f0e17fd1bc25cefb46b064b22efce0454545707e21bbf048754a22e6edd71b745e0fc8e7dbd0204c5b7850571051f92070604cab30dc1c35d47b885678e26a9707d2e4c82533cc54497c683f4d \\x471978cbfe124e78cb1b6855ea8aeb9fe2d0a9b39c4190c1f6e73a4d525c8ac14a05d89bc5bd9f4d64852467c5a3e7b9b52cd252a31b324df6c4fca65aa9a603 1630849919000000 0 2000000 1 172
-\.
-
-
---
--- Data for Name: revolving_work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.revolving_work_shards (shard_serial_id, last_attempt, start_row, end_row, active, job_name) FROM stdin;
-\.
-
-
---
--- Data for Name: signkey_revocations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.signkey_revocations (signkey_revocations_serial_id, esk_serial, master_sig) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_accounts; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_accounts (payto_uri, master_sig, is_active, last_change) FROM stdin;
-payto://x-taler-bank/localhost/Exchange \\x5713c67de2664f172bb4f6785ac5c13d59e955f80b936c4e6d93d74bf87fc8bba60ee0731cd9c43d829cad9af0614d4990cdbfd3d523ef52a09a58df4848aa08 t 1630849897000000
-\.
-
-
---
--- Data for Name: wire_auditor_account_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_account_progress (master_pub, account_name, last_wire_reserve_in_serial_id, last_wire_wire_out_serial_id, wire_in_off, wire_out_off) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_auditor_progress; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_auditor_progress (master_pub, last_timestamp, last_reserve_close_uuid) FROM stdin;
-\.
-
-
---
--- Data for Name: wire_fee; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_fee (wire_method, start_date, end_date, wire_fee_val, wire_fee_frac, closing_fee_val, closing_fee_frac, master_sig, wire_fee_serial) FROM stdin;
-x-taler-bank 1609459200000000 1640995200000000 0 1000000 0 1000000 \\x25b0369e92f3cf16fee87c0888689cd8d26efa970bd6b3766e8b70be370834ae356d4622f47f4c75f2b03d47fefcfc244b90f0a8b34f5a2fe2516ff1d8605a00 1
-\.
-
-
---
--- Data for Name: wire_out; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.wire_out (wireout_uuid, execution_date, wtid_raw, wire_target, exchange_account_section, amount_val, amount_frac) FROM stdin;
-\.
-
-
---
--- Data for Name: work_shards; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY public.work_shards (shard_serial_id, last_attempt, start_row, end_row, completed, job_name) FROM stdin;
-1 1630849891714323 0 1024 f wirewatch-exchange-account-1
-\.
-
-
---
--- Name: aggregation_tracking_aggregation_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.aggregation_tracking_aggregation_serial_id_seq', 1, false);
-
-
---
--- Name: app_bankaccount_account_no_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_bankaccount_account_no_seq', 12, true);
-
-
---
--- Name: app_banktransaction_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.app_banktransaction_id_seq', 2, true);
-
-
---
--- Name: auditor_denom_sigs_auditor_denom_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_denom_sigs_auditor_denom_serial_seq', 1269, true);
-
-
---
--- Name: auditor_reserves_auditor_reserves_rowid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditor_reserves_auditor_reserves_rowid_seq', 1, false);
-
-
---
--- Name: auditors_auditor_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auditors_auditor_uuid_seq', 1, true);
-
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_id_seq', 1, false);
-
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_group_permissions_id_seq', 1, false);
-
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_permission_id_seq', 32, true);
-
-
---
--- Name: auth_user_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_groups_id_seq', 1, false);
-
-
---
--- Name: auth_user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_id_seq', 12, true);
-
-
---
--- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.auth_user_user_permissions_id_seq', 1, false);
-
-
---
--- Name: denomination_revocations_denom_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denomination_revocations_denom_revocations_serial_id_seq', 2, true);
-
-
---
--- Name: denominations_denominations_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.denominations_denominations_serial_seq', 424, true);
-
-
---
--- Name: deposit_confirmations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposit_confirmations_serial_id_seq', 1, false);
-
-
---
--- Name: deposits_deposit_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.deposits_deposit_serial_id_seq', 1, false);
-
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_content_type_id_seq', 8, true);
-
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.django_migrations_id_seq', 16, true);
-
-
---
--- Name: exchange_sign_keys_esk_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.exchange_sign_keys_esk_serial_seq', 5, true);
-
-
---
--- Name: known_coins_known_coin_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.known_coins_known_coin_id_seq', 10, true);
-
-
---
--- Name: merchant_accounts_account_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_accounts_account_serial_seq', 1, false);
-
-
---
--- Name: merchant_deposits_deposit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_deposits_deposit_serial_seq', 1, false);
-
-
---
--- Name: merchant_exchange_signing_keys_signkey_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_signing_keys_signkey_serial_seq', 10, true);
-
-
---
--- Name: merchant_exchange_wire_fees_wirefee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_exchange_wire_fees_wirefee_serial_seq', 1, false);
-
-
---
--- Name: merchant_instances_merchant_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_instances_merchant_serial_seq', 1, false);
-
-
---
--- Name: merchant_inventory_product_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_inventory_product_serial_seq', 1, false);
-
-
---
--- Name: merchant_orders_order_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_orders_order_serial_seq', 1, false);
-
-
---
--- Name: merchant_refunds_refund_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_refunds_refund_serial_seq', 1, false);
-
-
---
--- Name: merchant_tip_pickups_pickup_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_pickups_pickup_serial_seq', 1, false);
-
-
---
--- Name: merchant_tip_reserves_reserve_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tip_reserves_reserve_serial_seq', 1, false);
-
-
---
--- Name: merchant_tips_tip_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_tips_tip_serial_seq', 1, false);
-
-
---
--- Name: merchant_transfers_credit_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.merchant_transfers_credit_serial_seq', 1, false);
-
-
---
--- Name: prewire_prewire_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.prewire_prewire_uuid_seq', 1, false);
-
-
---
--- Name: recoup_recoup_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_recoup_uuid_seq', 1, true);
-
-
---
--- Name: recoup_refresh_recoup_refresh_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.recoup_refresh_recoup_refresh_uuid_seq', 8, true);
-
-
---
--- Name: refresh_commitments_melt_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_commitments_melt_serial_id_seq', 2, true);
-
-
---
--- Name: refresh_revealed_coins_rrc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_revealed_coins_rrc_serial_seq', 50, true);
-
-
---
--- Name: refresh_transfer_keys_rtc_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refresh_transfer_keys_rtc_serial_seq', 2, true);
-
-
---
--- Name: refunds_refund_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.refunds_refund_serial_id_seq', 1, false);
-
-
---
--- Name: reserves_close_close_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_close_close_uuid_seq', 1, false);
-
-
---
--- Name: reserves_in_reserve_in_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_in_reserve_in_serial_id_seq', 1, true);
-
-
---
--- Name: reserves_out_reserve_out_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_out_reserve_out_serial_id_seq', 28, true);
-
-
---
--- Name: reserves_reserve_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.reserves_reserve_uuid_seq', 1, true);
-
-
---
--- Name: revolving_work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.revolving_work_shards_shard_serial_id_seq', 1, false);
-
-
---
--- Name: signkey_revocations_signkey_revocations_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.signkey_revocations_signkey_revocations_serial_id_seq', 1, false);
-
-
---
--- Name: wire_fee_wire_fee_serial_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_fee_wire_fee_serial_seq', 1, true);
-
-
---
--- Name: wire_out_wireout_uuid_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.wire_out_wireout_uuid_seq', 1, false);
-
-
---
--- Name: work_shards_shard_serial_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('public.work_shards_shard_serial_id_seq', 1, true);
-
-
---
--- Name: patches patches_pkey; Type: CONSTRAINT; Schema: _v; Owner: -
---
-
-ALTER TABLE ONLY _v.patches
- ADD CONSTRAINT patches_pkey PRIMARY KEY (patch_name);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_aggregation_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_aggregation_serial_id_key UNIQUE (aggregation_serial_id);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: app_bankaccount app_bankaccount_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_pkey PRIMARY KEY (account_no);
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_key UNIQUE (user_id);
-
-
---
--- Name: app_banktransaction app_banktransaction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_pkey PRIMARY KEY (id);
-
-
---
--- Name: app_banktransaction app_banktransaction_request_uid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_request_uid_key UNIQUE (request_uid);
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawoperation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawoperation_pkey PRIMARY KEY (withdraw_id);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_denom_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_denom_serial_key UNIQUE (auditor_denom_serial);
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_pkey PRIMARY KEY (denominations_serial, auditor_uuid);
-
-
---
--- Name: auditor_denomination_pending auditor_denomination_pending_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denomination_pending
- ADD CONSTRAINT auditor_denomination_pending_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_exchanges auditor_exchanges_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchanges
- ADD CONSTRAINT auditor_exchanges_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_historic_denomination_revenue auditor_historic_denomination_revenue_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT auditor_historic_denomination_revenue_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: auditor_progress_aggregation auditor_progress_aggregation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT auditor_progress_aggregation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_coin auditor_progress_coin_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT auditor_progress_coin_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_deposit_confirmation auditor_progress_deposit_confirmation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT auditor_progress_deposit_confirmation_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_progress_reserve auditor_progress_reserve_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT auditor_progress_reserve_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: auditor_reserves auditor_reserves_auditor_reserves_rowid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT auditor_reserves_auditor_reserves_rowid_key UNIQUE (auditor_reserves_rowid);
-
-
---
--- Name: auditors auditors_auditor_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_auditor_uuid_key UNIQUE (auditor_uuid);
-
-
---
--- Name: auditors auditors_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditors
- ADD CONSTRAINT auditors_pkey PRIMARY KEY (auditor_pub);
-
-
---
--- Name: auth_group auth_group_name_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_name_key UNIQUE (name);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_permission_id_0cd325b0_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq UNIQUE (group_id, permission_id);
-
-
---
--- Name: auth_group_permissions auth_group_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_group auth_group_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group
- ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_permission auth_permission_content_type_id_codename_01ab375a_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq UNIQUE (content_type_id, codename);
-
-
---
--- Name: auth_permission auth_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_group_id_94350c0c_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_group_id_94350c0c_uniq UNIQUE (user_id, group_id);
-
-
---
--- Name: auth_user auth_user_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_permission_id_14a6b632_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_permission_id_14a6b632_uniq UNIQUE (user_id, permission_id);
-
-
---
--- Name: auth_user auth_user_username_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user
- ADD CONSTRAINT auth_user_username_key UNIQUE (username);
-
-
---
--- Name: denomination_revocations denomination_revocations_denom_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denom_revocations_serial_id_key UNIQUE (denom_revocations_serial_id);
-
-
---
--- Name: denominations denominations_denominations_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_denominations_serial_key UNIQUE (denominations_serial);
-
-
---
--- Name: denominations denominations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denominations
- ADD CONSTRAINT denominations_pkey PRIMARY KEY (denom_pub_hash);
-
-
---
--- Name: denomination_revocations denominations_serial_pk; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denominations_serial_pk PRIMARY KEY (denominations_serial);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_pkey PRIMARY KEY (h_contract_terms, h_wire, coin_pub, merchant_pub, exchange_sig, exchange_pub, master_sig);
-
-
---
--- Name: deposit_confirmations deposit_confirmations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT deposit_confirmations_serial_id_key UNIQUE (serial_id);
-
-
---
--- Name: deposits deposit_unique; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposit_unique UNIQUE (known_coin_id, merchant_pub, h_contract_terms);
-
-
---
--- Name: deposits deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_pkey PRIMARY KEY (deposit_serial_id);
-
-
---
--- Name: django_content_type django_content_type_app_label_model_76bd3d3b_uniq; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_app_label_model_76bd3d3b_uniq UNIQUE (app_label, model);
-
-
---
--- Name: django_content_type django_content_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_content_type
- ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_migrations django_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_migrations
- ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_session django_session_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.django_session
- ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_esk_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_esk_serial_key UNIQUE (esk_serial);
-
-
---
--- Name: exchange_sign_keys exchange_sign_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.exchange_sign_keys
- ADD CONSTRAINT exchange_sign_keys_pkey PRIMARY KEY (exchange_pub);
-
-
---
--- Name: known_coins known_coins_known_coin_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_known_coin_id_key UNIQUE (known_coin_id);
-
-
---
--- Name: known_coins known_coins_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_pkey PRIMARY KEY (coin_pub);
-
-
---
--- Name: merchant_accounts merchant_accounts_h_wire_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_h_wire_key UNIQUE (h_wire);
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_payto_uri_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_payto_uri_key UNIQUE (merchant_serial, payto_uri);
-
-
---
--- Name: merchant_accounts merchant_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_pkey PRIMARY KEY (account_serial);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_h_contract_terms_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_h_contract_terms_key UNIQUE (merchant_serial, h_contract_terms);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_credit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_credit_serial_key UNIQUE (deposit_serial, credit_serial);
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_coin_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_coin_pub_key UNIQUE (order_serial, coin_pub);
-
-
---
--- Name: merchant_deposits merchant_deposits_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_pkey PRIMARY KEY (deposit_serial);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_key_exchange_pub_start_date_maste_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_key_exchange_pub_start_date_maste_key UNIQUE (exchange_pub, start_date, master_pub);
-
-
---
--- Name: merchant_exchange_signing_keys merchant_exchange_signing_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_signing_keys
- ADD CONSTRAINT merchant_exchange_signing_keys_pkey PRIMARY KEY (signkey_serial);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_master_pub_h_wire_method_start__key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_master_pub_h_wire_method_start__key UNIQUE (master_pub, h_wire_method, start_date);
-
-
---
--- Name: merchant_exchange_wire_fees merchant_exchange_wire_fees_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_exchange_wire_fees
- ADD CONSTRAINT merchant_exchange_wire_fees_pkey PRIMARY KEY (wirefee_serial);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_id_key UNIQUE (merchant_id);
-
-
---
--- Name: merchant_instances merchant_instances_merchant_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_merchant_pub_key UNIQUE (merchant_pub);
-
-
---
--- Name: merchant_instances merchant_instances_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_instances
- ADD CONSTRAINT merchant_instances_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_product_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_product_id_key UNIQUE (merchant_serial, product_id);
-
-
---
--- Name: merchant_inventory merchant_inventory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_pkey PRIMARY KEY (product_serial);
-
-
---
--- Name: merchant_keys merchant_keys_merchant_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_priv_key UNIQUE (merchant_priv);
-
-
---
--- Name: merchant_keys merchant_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_pkey PRIMARY KEY (merchant_serial);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_order_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_order_id_key UNIQUE (merchant_serial, order_id);
-
-
---
--- Name: merchant_orders merchant_orders_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_pkey PRIMARY KEY (order_serial);
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_coin_pub_rtransaction_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_coin_pub_rtransaction_id_key UNIQUE (order_serial, coin_pub, rtransaction_id);
-
-
---
--- Name: merchant_refunds merchant_refunds_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_pkey PRIMARY KEY (refund_serial);
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pkey PRIMARY KEY (pickup_serial, coin_offset);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pickup_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pickup_id_key UNIQUE (pickup_id);
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_pkey PRIMARY KEY (pickup_serial);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_priv_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_priv_key UNIQUE (reserve_priv);
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_key UNIQUE (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_pkey PRIMARY KEY (reserve_serial);
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_reserve_pub_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_reserve_pub_key UNIQUE (reserve_pub);
-
-
---
--- Name: merchant_tips merchant_tips_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_pkey PRIMARY KEY (tip_serial);
-
-
---
--- Name: merchant_tips merchant_tips_tip_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_tip_id_key UNIQUE (tip_id);
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_key UNIQUE (deposit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_pkey PRIMARY KEY (credit_serial);
-
-
---
--- Name: merchant_transfers merchant_transfers_wtid_exchange_url_account_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_wtid_exchange_url_account_serial_key UNIQUE (wtid, exchange_url, account_serial);
-
-
---
--- Name: prewire prewire_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.prewire
- ADD CONSTRAINT prewire_pkey PRIMARY KEY (prewire_uuid);
-
-
---
--- Name: recoup recoup_recoup_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_recoup_uuid_key UNIQUE (recoup_uuid);
-
-
---
--- Name: recoup_refresh recoup_refresh_recoup_refresh_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_recoup_refresh_uuid_key UNIQUE (recoup_refresh_uuid);
-
-
---
--- Name: recoup_refresh recoup_unique; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_unique UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_commitments refresh_commitments_melt_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_melt_serial_id_key UNIQUE (melt_serial_id);
-
-
---
--- Name: refresh_commitments refresh_commitments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_pkey PRIMARY KEY (rc);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_coin_ev_key UNIQUE (coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_h_coin_ev_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_h_coin_ev_key UNIQUE (h_coin_ev);
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_rrc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_rrc_serial_key UNIQUE (rrc_serial);
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_rtc_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_rtc_serial_key UNIQUE (rtc_serial);
-
-
---
--- Name: refunds refunds_primary_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_primary_key PRIMARY KEY (deposit_serial_id, rtransaction_id);
-
-
---
--- Name: refunds refunds_refund_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_refund_serial_id_key UNIQUE (refund_serial_id);
-
-
---
--- Name: reserves_close reserves_close_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_pkey PRIMARY KEY (close_uuid);
-
-
---
--- Name: reserves_in reserves_in_reserve_in_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_in_serial_id_key UNIQUE (reserve_in_serial_id);
-
-
---
--- Name: reserves_out reserves_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_pkey PRIMARY KEY (h_blind_ev);
-
-
---
--- Name: reserves_out reserves_out_reserve_out_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_out_serial_id_key UNIQUE (reserve_out_serial_id);
-
-
---
--- Name: reserves reserves_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_pkey PRIMARY KEY (reserve_pub);
-
-
---
--- Name: reserves reserves_reserve_uuid_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves
- ADD CONSTRAINT reserves_reserve_uuid_key UNIQUE (reserve_uuid);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: revolving_work_shards revolving_work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.revolving_work_shards
- ADD CONSTRAINT revolving_work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: signkey_revocations signkey_revocations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_pkey PRIMARY KEY (esk_serial);
-
-
---
--- Name: signkey_revocations signkey_revocations_signkey_revocations_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_signkey_revocations_serial_id_key UNIQUE (signkey_revocations_serial_id);
-
-
---
--- Name: reserves_in unique_in; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT unique_in PRIMARY KEY (reserve_uuid, wire_reference);
-
-
---
--- Name: wire_accounts wire_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_accounts
- ADD CONSTRAINT wire_accounts_pkey PRIMARY KEY (payto_uri);
-
-
---
--- Name: wire_auditor_account_progress wire_auditor_account_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT wire_auditor_account_progress_pkey PRIMARY KEY (master_pub, account_name);
-
-
---
--- Name: wire_auditor_progress wire_auditor_progress_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT wire_auditor_progress_pkey PRIMARY KEY (master_pub);
-
-
---
--- Name: wire_fee wire_fee_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_pkey PRIMARY KEY (wire_method, start_date);
-
-
---
--- Name: wire_fee wire_fee_wire_fee_serial_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_fee
- ADD CONSTRAINT wire_fee_wire_fee_serial_key UNIQUE (wire_fee_serial);
-
-
---
--- Name: wire_out wire_out_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_pkey PRIMARY KEY (wireout_uuid);
-
-
---
--- Name: wire_out wire_out_wtid_raw_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_out
- ADD CONSTRAINT wire_out_wtid_raw_key UNIQUE (wtid_raw);
-
-
---
--- Name: work_shards work_shards_pkey; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_pkey PRIMARY KEY (job_name, start_row);
-
-
---
--- Name: work_shards work_shards_shard_serial_id_key; Type: CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.work_shards
- ADD CONSTRAINT work_shards_shard_serial_id_key UNIQUE (shard_serial_id);
-
-
---
--- Name: aggregation_tracking_wtid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX aggregation_tracking_wtid_index ON public.aggregation_tracking USING btree (wtid_raw);
-
-
---
--- Name: INDEX aggregation_tracking_wtid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.aggregation_tracking_wtid_index IS 'for lookup_transactions';
-
-
---
--- Name: app_banktransaction_credit_account_id_a8ba05ac; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_credit_account_id_a8ba05ac ON public.app_banktransaction USING btree (credit_account_id);
-
-
---
--- Name: app_banktransaction_date_f72bcad6; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_date_f72bcad6 ON public.app_banktransaction USING btree (date);
-
-
---
--- Name: app_banktransaction_debit_account_id_5b1f7528; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_debit_account_id_5b1f7528 ON public.app_banktransaction USING btree (debit_account_id);
-
-
---
--- Name: app_banktransaction_request_uid_b7d06af5_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_banktransaction_request_uid_b7d06af5_like ON public.app_banktransaction USING btree (request_uid varchar_pattern_ops);
-
-
---
--- Name: app_talerwithdrawoperation_selected_exchange_account__6c8b96cf; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_selected_exchange_account__6c8b96cf ON public.app_talerwithdrawoperation USING btree (selected_exchange_account_id);
-
-
---
--- Name: app_talerwithdrawoperation_withdraw_account_id_992dc5b3; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX app_talerwithdrawoperation_withdraw_account_id_992dc5b3 ON public.app_talerwithdrawoperation USING btree (withdraw_account_id);
-
-
---
--- Name: auditor_historic_reserve_summary_by_master_pub_start_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_historic_reserve_summary_by_master_pub_start_date ON public.auditor_historic_reserve_summary USING btree (master_pub, start_date);
-
-
---
--- Name: auditor_reserves_by_reserve_pub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auditor_reserves_by_reserve_pub ON public.auditor_reserves USING btree (reserve_pub);
-
-
---
--- Name: auth_group_name_a6ea08ec_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_name_a6ea08ec_like ON public.auth_group USING btree (name varchar_pattern_ops);
-
-
---
--- Name: auth_group_permissions_group_id_b120cbf9; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON public.auth_group_permissions USING btree (group_id);
-
-
---
--- Name: auth_group_permissions_permission_id_84c5c92e; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_group_permissions_permission_id_84c5c92e ON public.auth_group_permissions USING btree (permission_id);
-
-
---
--- Name: auth_permission_content_type_id_2f476e4b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_permission_content_type_id_2f476e4b ON public.auth_permission USING btree (content_type_id);
-
-
---
--- Name: auth_user_groups_group_id_97559544; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_group_id_97559544 ON public.auth_user_groups USING btree (group_id);
-
-
---
--- Name: auth_user_groups_user_id_6a12ed8b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_groups_user_id_6a12ed8b ON public.auth_user_groups USING btree (user_id);
-
-
---
--- Name: auth_user_user_permissions_permission_id_1fbb5f2c; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_permission_id_1fbb5f2c ON public.auth_user_user_permissions USING btree (permission_id);
-
-
---
--- Name: auth_user_user_permissions_user_id_a95ead1b; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_user_permissions_user_id_a95ead1b ON public.auth_user_user_permissions USING btree (user_id);
-
-
---
--- Name: auth_user_username_6821ab7c_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX auth_user_username_6821ab7c_like ON public.auth_user USING btree (username varchar_pattern_ops);
-
-
---
--- Name: denomination_revocations_by_denomination; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denomination_revocations_by_denomination ON public.denomination_revocations USING btree (denominations_serial);
-
-
---
--- Name: denominations_expire_legal_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX denominations_expire_legal_index ON public.denominations USING btree (expire_legal);
-
-
---
--- Name: deposits_get_ready_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_get_ready_index ON public.deposits USING btree (shard, tiny, done, wire_deadline, refund_deadline);
-
-
---
--- Name: INDEX deposits_get_ready_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_get_ready_index IS 'for deposits_get_ready';
-
-
---
--- Name: deposits_iterate_matching_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX deposits_iterate_matching_index ON public.deposits USING btree (merchant_pub, h_wire, done, wire_deadline);
-
-
---
--- Name: INDEX deposits_iterate_matching_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.deposits_iterate_matching_index IS 'for deposits_iterate_matching';
-
-
---
--- Name: django_session_expire_date_a5c62663; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_expire_date_a5c62663 ON public.django_session USING btree (expire_date);
-
-
---
--- Name: django_session_session_key_c0390e0f_like; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX django_session_session_key_c0390e0f_like ON public.django_session USING btree (session_key varchar_pattern_ops);
-
-
---
--- Name: known_coins_by_denomination; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX known_coins_by_denomination ON public.known_coins USING btree (denominations_serial);
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_expiration ON public.merchant_contract_terms USING btree (merchant_serial, pay_deadline);
-
-
---
--- Name: merchant_contract_terms_by_merchant_and_payment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_and_payment ON public.merchant_contract_terms USING btree (merchant_serial, paid);
-
-
---
--- Name: merchant_contract_terms_by_merchant_session_and_fulfillment; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_contract_terms_by_merchant_session_and_fulfillment ON public.merchant_contract_terms USING btree (merchant_serial, fulfillment_url, session_id);
-
-
---
--- Name: merchant_inventory_locks_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_expiration ON public.merchant_inventory_locks USING btree (expiration);
-
-
---
--- Name: merchant_inventory_locks_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_inventory_locks_by_uuid ON public.merchant_inventory_locks USING btree (lock_uuid);
-
-
---
--- Name: merchant_orders_by_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_creation_time ON public.merchant_orders USING btree (creation_time);
-
-
---
--- Name: merchant_orders_by_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_by_expiration ON public.merchant_orders USING btree (pay_deadline);
-
-
---
--- Name: merchant_orders_locks_by_order_and_product; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_orders_locks_by_order_and_product ON public.merchant_order_locks USING btree (order_serial, product_serial);
-
-
---
--- Name: merchant_refunds_by_coin_and_order; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_refunds_by_coin_and_order ON public.merchant_refunds USING btree (coin_pub, order_serial);
-
-
---
--- Name: merchant_tip_reserves_by_exchange_balance; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_exchange_balance ON public.merchant_tip_reserves USING btree (exchange_initial_balance_val, exchange_initial_balance_frac);
-
-
---
--- Name: merchant_tip_reserves_by_merchant_serial_and_creation_time; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_merchant_serial_and_creation_time ON public.merchant_tip_reserves USING btree (merchant_serial, creation_time);
-
-
---
--- Name: merchant_tip_reserves_by_reserve_pub_and_merchant_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tip_reserves_by_reserve_pub_and_merchant_serial ON public.merchant_tip_reserves USING btree (reserve_pub, merchant_serial, creation_time);
-
-
---
--- Name: merchant_tips_by_pickup_and_expiration; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_tips_by_pickup_and_expiration ON public.merchant_tips USING btree (was_picked_up, expiration);
-
-
---
--- Name: merchant_transfers_by_credit; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX merchant_transfers_by_credit ON public.merchant_transfer_to_coin USING btree (credit_serial);
-
-
---
--- Name: prepare_get_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_get_index ON public.prewire USING btree (failed, finished);
-
-
---
--- Name: INDEX prepare_get_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_get_index IS 'for wire_prepare_data_get';
-
-
---
--- Name: prepare_iteration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX prepare_iteration_index ON public.prewire USING btree (finished);
-
-
---
--- Name: INDEX prepare_iteration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.prepare_iteration_index IS 'for gc_prewire';
-
-
---
--- Name: recoup_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_by_h_blind_ev ON public.recoup USING btree (reserve_out_serial_id);
-
-
---
--- Name: recoup_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_for_by_reserve ON public.recoup USING btree (known_coin_id, reserve_out_serial_id);
-
-
---
--- Name: recoup_refresh_by_h_blind_ev; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_by_h_blind_ev ON public.recoup_refresh USING btree (rrc_serial);
-
-
---
--- Name: recoup_refresh_for_by_reserve; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX recoup_refresh_for_by_reserve ON public.recoup_refresh USING btree (known_coin_id, rrc_serial);
-
-
---
--- Name: refresh_commitments_old_coin_pub_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_commitments_old_coin_pub_index ON public.refresh_commitments USING btree (old_known_coin_id);
-
-
---
--- Name: refresh_revealed_coins_denominations_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_revealed_coins_denominations_index ON public.refresh_revealed_coins USING btree (denominations_serial);
-
-
---
--- Name: refresh_transfer_keys_coin_tpub; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX refresh_transfer_keys_coin_tpub ON public.refresh_transfer_keys USING btree (melt_serial_id, transfer_pub);
-
-
---
--- Name: INDEX refresh_transfer_keys_coin_tpub; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.refresh_transfer_keys_coin_tpub IS 'for get_link (unsure if this helps or hurts for performance as there should be very few transfer public keys per rc, but at least in theory this helps the ORDER BY clause)';
-
-
---
--- Name: reserves_close_by_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_close_by_uuid ON public.reserves_close USING btree (reserve_uuid);
-
-
---
--- Name: reserves_expiration_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_expiration_index ON public.reserves USING btree (expiration_date, current_balance_val, current_balance_frac);
-
-
---
--- Name: INDEX reserves_expiration_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_expiration_index IS 'used in get_expired_reserves';
-
-
---
--- Name: reserves_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_gc_index ON public.reserves USING btree (gc_date);
-
-
---
--- Name: INDEX reserves_gc_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_gc_index IS 'for reserve garbage collection';
-
-
---
--- Name: reserves_in_exchange_account_serial; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_exchange_account_serial ON public.reserves_in USING btree (exchange_account_section, reserve_in_serial_id DESC);
-
-
---
--- Name: reserves_in_execution_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_in_execution_index ON public.reserves_in USING btree (exchange_account_section, execution_date);
-
-
---
--- Name: reserves_out_execution_date; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_execution_date ON public.reserves_out USING btree (execution_date);
-
-
---
--- Name: reserves_out_for_get_withdraw_info; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_for_get_withdraw_info ON public.reserves_out USING btree (denominations_serial, h_blind_ev);
-
-
---
--- Name: reserves_out_reserve_uuid_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX reserves_out_reserve_uuid_index ON public.reserves_out USING btree (reserve_uuid);
-
-
---
--- Name: INDEX reserves_out_reserve_uuid_index; Type: COMMENT; Schema: public; Owner: -
---
-
-COMMENT ON INDEX public.reserves_out_reserve_uuid_index IS 'for get_reserves_out';
-
-
---
--- Name: revolving_work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX revolving_work_shards_index ON public.revolving_work_shards USING btree (job_name, active, last_attempt);
-
-
---
--- Name: wire_fee_gc_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX wire_fee_gc_index ON public.wire_fee USING btree (end_date);
-
-
---
--- Name: work_shards_index; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX work_shards_index ON public.work_shards USING btree (job_name, completed, last_attempt);
-
-
---
--- Name: aggregation_tracking aggregation_tracking_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT aggregation_tracking_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: app_bankaccount app_bankaccount_user_id_2722a34f_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_bankaccount
- ADD CONSTRAINT app_bankaccount_user_id_2722a34f_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_credit_account_id_a8ba05ac_fk_app_banka FOREIGN KEY (credit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_banktransaction app_banktransaction_debit_account_id_5b1f7528_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_banktransaction
- ADD CONSTRAINT app_banktransaction_debit_account_id_5b1f7528_fk_app_banka FOREIGN KEY (debit_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_selected_exchange_ac_6c8b96cf_fk_app_banka FOREIGN KEY (selected_exchange_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: app_talerwithdrawoperation app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.app_talerwithdrawoperation
- ADD CONSTRAINT app_talerwithdrawope_withdraw_account_id_992dc5b3_fk_app_banka FOREIGN KEY (withdraw_account_id) REFERENCES public.app_bankaccount(account_no) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_auditor_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_auditor_uuid_fkey FOREIGN KEY (auditor_uuid) REFERENCES public.auditors(auditor_uuid) ON DELETE CASCADE;
-
-
---
--- Name: auditor_denom_sigs auditor_denom_sigs_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_denom_sigs
- ADD CONSTRAINT auditor_denom_sigs_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auth_group_permissions auth_group_permissio_permission_id_84c5c92e_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissio_permission_id_84c5c92e_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_group_permissions auth_group_permissions_group_id_b120cbf9_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_group_permissions
- ADD CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_permission auth_permission_content_type_id_2f476e4b_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_permission
- ADD CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_group_id_97559544_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_group_id_97559544_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_groups auth_user_groups_user_id_6a12ed8b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_groups
- ADD CONSTRAINT auth_user_groups_user_id_6a12ed8b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_user_user_permissions auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auth_user_user_permissions
- ADD CONSTRAINT auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: denomination_revocations denomination_revocations_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.denomination_revocations
- ADD CONSTRAINT denomination_revocations_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: deposits deposits_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposits
- ADD CONSTRAINT deposits_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: known_coins known_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.known_coins
- ADD CONSTRAINT known_coins_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: auditor_exchange_signkeys master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_exchange_signkeys
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_reserve master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_reserve
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_aggregation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_aggregation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_deposit_confirmation master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_deposit_confirmation
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_progress_coin master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_progress_coin
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_account_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_account_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: wire_auditor_progress master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.wire_auditor_progress
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserves master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserves
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_reserve_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_reserve_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_wire_fee_balance master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_wire_fee_balance
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_balance_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_balance_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_denomination_revenue master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_denomination_revenue
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_historic_reserve_summary master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_historic_reserve_summary
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: deposit_confirmations master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.deposit_confirmations
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: auditor_predicted_result master_pub_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.auditor_predicted_result
- ADD CONSTRAINT master_pub_ref FOREIGN KEY (master_pub) REFERENCES public.auditor_exchanges(master_pub) ON DELETE CASCADE;
-
-
---
--- Name: merchant_accounts merchant_accounts_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_accounts
- ADD CONSTRAINT merchant_accounts_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_contract_terms merchant_contract_terms_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_contract_terms
- ADD CONSTRAINT merchant_contract_terms_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial);
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposit_to_transfer merchant_deposit_to_transfer_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposit_to_transfer
- ADD CONSTRAINT merchant_deposit_to_transfer_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_deposits merchant_deposits_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_deposits
- ADD CONSTRAINT merchant_deposits_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_inventory_locks merchant_inventory_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory_locks
- ADD CONSTRAINT merchant_inventory_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_inventory merchant_inventory_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_inventory
- ADD CONSTRAINT merchant_inventory_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_keys merchant_keys_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_keys
- ADD CONSTRAINT merchant_keys_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_orders(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_order_locks merchant_order_locks_product_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_order_locks
- ADD CONSTRAINT merchant_order_locks_product_serial_fkey FOREIGN KEY (product_serial) REFERENCES public.merchant_inventory(product_serial);
-
-
---
--- Name: merchant_orders merchant_orders_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_orders
- ADD CONSTRAINT merchant_orders_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_refund_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_refund_serial_fkey FOREIGN KEY (refund_serial) REFERENCES public.merchant_refunds(refund_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refund_proofs merchant_refund_proofs_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refund_proofs
- ADD CONSTRAINT merchant_refund_proofs_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_refunds merchant_refunds_order_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_refunds
- ADD CONSTRAINT merchant_refunds_order_serial_fkey FOREIGN KEY (order_serial) REFERENCES public.merchant_contract_terms(order_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickup_signatures merchant_tip_pickup_signatures_pickup_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickup_signatures
- ADD CONSTRAINT merchant_tip_pickup_signatures_pickup_serial_fkey FOREIGN KEY (pickup_serial) REFERENCES public.merchant_tip_pickups(pickup_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_pickups merchant_tip_pickups_tip_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_pickups
- ADD CONSTRAINT merchant_tip_pickups_tip_serial_fkey FOREIGN KEY (tip_serial) REFERENCES public.merchant_tips(tip_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserve_keys merchant_tip_reserve_keys_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserve_keys
- ADD CONSTRAINT merchant_tip_reserve_keys_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tip_reserves merchant_tip_reserves_merchant_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tip_reserves
- ADD CONSTRAINT merchant_tip_reserves_merchant_serial_fkey FOREIGN KEY (merchant_serial) REFERENCES public.merchant_instances(merchant_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_tips merchant_tips_reserve_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_tips
- ADD CONSTRAINT merchant_tips_reserve_serial_fkey FOREIGN KEY (reserve_serial) REFERENCES public.merchant_tip_reserves(reserve_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_signatures merchant_transfer_signatures_signkey_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_signatures
- ADD CONSTRAINT merchant_transfer_signatures_signkey_serial_fkey FOREIGN KEY (signkey_serial) REFERENCES public.merchant_exchange_signing_keys(signkey_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_credit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_credit_serial_fkey FOREIGN KEY (credit_serial) REFERENCES public.merchant_transfers(credit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfer_to_coin merchant_transfer_to_coin_deposit_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfer_to_coin
- ADD CONSTRAINT merchant_transfer_to_coin_deposit_serial_fkey FOREIGN KEY (deposit_serial) REFERENCES public.merchant_deposits(deposit_serial) ON DELETE CASCADE;
-
-
---
--- Name: merchant_transfers merchant_transfers_account_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.merchant_transfers
- ADD CONSTRAINT merchant_transfers_account_serial_fkey FOREIGN KEY (account_serial) REFERENCES public.merchant_accounts(account_serial) ON DELETE CASCADE;
-
-
---
--- Name: recoup recoup_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: recoup_refresh recoup_refresh_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_known_coin_id_fkey FOREIGN KEY (known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: recoup_refresh recoup_refresh_rrc_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup_refresh
- ADD CONSTRAINT recoup_refresh_rrc_serial_fkey FOREIGN KEY (rrc_serial) REFERENCES public.refresh_revealed_coins(rrc_serial) ON DELETE CASCADE;
-
-
---
--- Name: recoup recoup_reserve_out_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.recoup
- ADD CONSTRAINT recoup_reserve_out_serial_id_fkey FOREIGN KEY (reserve_out_serial_id) REFERENCES public.reserves_out(reserve_out_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_commitments refresh_commitments_old_known_coin_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_commitments
- ADD CONSTRAINT refresh_commitments_old_known_coin_id_fkey FOREIGN KEY (old_known_coin_id) REFERENCES public.known_coins(known_coin_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: refresh_revealed_coins refresh_revealed_coins_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_revealed_coins
- ADD CONSTRAINT refresh_revealed_coins_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refresh_transfer_keys refresh_transfer_keys_melt_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refresh_transfer_keys
- ADD CONSTRAINT refresh_transfer_keys_melt_serial_id_fkey FOREIGN KEY (melt_serial_id) REFERENCES public.refresh_commitments(melt_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: refunds refunds_deposit_serial_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.refunds
- ADD CONSTRAINT refunds_deposit_serial_id_fkey FOREIGN KEY (deposit_serial_id) REFERENCES public.deposits(deposit_serial_id) ON DELETE CASCADE;
-
-
---
--- Name: reserves_close reserves_close_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_close
- ADD CONSTRAINT reserves_close_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_in reserves_in_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_in
- ADD CONSTRAINT reserves_in_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: reserves_out reserves_out_denominations_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_denominations_serial_fkey FOREIGN KEY (denominations_serial) REFERENCES public.denominations(denominations_serial) ON DELETE CASCADE;
-
-
---
--- Name: reserves_out reserves_out_reserve_uuid_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.reserves_out
- ADD CONSTRAINT reserves_out_reserve_uuid_fkey FOREIGN KEY (reserve_uuid) REFERENCES public.reserves(reserve_uuid) ON DELETE CASCADE;
-
-
---
--- Name: signkey_revocations signkey_revocations_esk_serial_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.signkey_revocations
- ADD CONSTRAINT signkey_revocations_esk_serial_fkey FOREIGN KEY (esk_serial) REFERENCES public.exchange_sign_keys(esk_serial) ON DELETE CASCADE;
-
-
---
--- Name: aggregation_tracking wire_out_ref; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.aggregation_tracking
- ADD CONSTRAINT wire_out_ref FOREIGN KEY (wtid_raw) REFERENCES public.wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/src/auditor/setup.sh b/src/auditor/setup.sh
new file mode 100755
index 000000000..bb17e92ae
--- /dev/null
+++ b/src/auditor/setup.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+# This file is in the public domain
+
+# Script to be inlined into the main test scripts. Defines function 'setup()'
+# which wraps around 'taler-unified-setup.sh' to launch GNU Taler services.
+# Call setup() with the arguments to pass to 'taler-unified-setup'. setup()
+# will then launch GNU Taler, wait for the process to be complete before
+# returning. The script will also install an exit handler to ensure the GNU
+# Taler processes are stopped when the shell exits.
+
+set -eu
+
+# Cleanup to run whenever we exit
+function exit_cleanup()
+{
+ if [ ! -z ${SETUP_PID+x} ]
+ then
+ echo "Killing taler-unified-setup ($SETUP_PID)" >&2
+ kill -TERM "$SETUP_PID" 2> /dev/null || true
+ wait "$SETUP_PID" 2> /dev/null || true
+ fi
+}
+
+# Install cleanup handler (except for kill -9)
+trap exit_cleanup EXIT
+
+function setup()
+{
+ echo "Starting test system ..." >&2
+ # Create a named pipe in a temp directory we own.
+ FIFO_DIR=$(mktemp -d fifo-XXXXXX)
+ FIFO_OUT=$(echo "$FIFO_DIR/out")
+ mkfifo "$FIFO_OUT"
+ # Open pipe as FD 3 (RW) and FD 4 (RO)
+ exec 3<> "$FIFO_OUT" 4< "$FIFO_OUT"
+ rm -rf "$FIFO_DIR"
+ # We require '-W' for our termination logic to work.
+ taler-unified-setup.sh -W "$@" \
+ > >(tee taler-unified-setup.log >&3) &
+ SETUP_PID=$!
+ # Close FD3
+ exec 3>&-
+ sed -u '/<<READY>>/ q' <&4
+ # Close FD4
+ exec 4>&-
+ echo "Test system ready" >&2
+}
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_fail() {
+ echo "$@" >&2
+ exit 1
+}
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+ echo "SKIPPING: $1"
+ exit 77
+}
+
+function get_payto_uri() {
+ export LIBEUFIN_SANDBOX_USERNAME="$1"
+ export LIBEUFIN_SANDBOX_PASSWORD="$2"
+ export LIBEUFIN_SANDBOX_URL="http://localhost:18082"
+ echo "get_payto_uri currently not implemented"
+ exit 1
+# libeufin-cli sandbox demobank info --bank-account "$1" | jq --raw-output '.paytoUri'
+}
+
+# Stop libeufin-bank (if running)
+function stop_libeufin()
+{
+ echo -n "Stopping libeufin... "
+ if [ -f "${MY_TMP_DIR:-/}/libeufin-bank.pid" ]
+ then
+ PID=$(cat "${MY_TMP_DIR}/libeufin-bank.pid" 2> /dev/null)
+ echo "Killing libeufin-bank $PID"
+ rm "${MY_TMP_DIR}/libeufin-bank.pid"
+ kill "$PID" 2> /dev/null || true
+ wait "$PID" || true
+ fi
+ echo "DONE"
+}
+
+
+function launch_libeufin () {
+ libeufin-bank serve \
+ -c "$CONF" \
+ -L "INFO" \
+ > "${MY_TMP_DIR}/libeufin-bank-stdout.log" \
+ 2> "${MY_TMP_DIR}/libeufin-bank-stderr.log" &
+ echo $! > "${MY_TMP_DIR}/libeufin-bank.pid"
+}
diff --git a/src/auditor/taler-auditor-dbinit.c b/src/auditor/taler-auditor-dbinit.c
index ab97b7399..4cb46f470 100644
--- a/src/auditor/taler-auditor-dbinit.c
+++ b/src/auditor/taler-auditor-dbinit.c
@@ -21,6 +21,7 @@
*/
#include "platform.h"
#include <gnunet/gnunet_util_lib.h>
+#include "taler_util.h"
#include "taler_auditordb_plugin.h"
@@ -89,7 +90,9 @@ run (void *cls,
"Failed to restart audits\n");
}
if (GNUNET_OK !=
- plugin->create_tables (plugin->cls))
+ plugin->create_tables (plugin->cls,
+ false,
+ 0))
{
fprintf (stderr,
"Failed to initialize database.\n");
diff --git a/src/auditor/taler-auditor-exchange.c b/src/auditor/taler-auditor-exchange.c
deleted file mode 100644
index 04181ce3f..000000000
--- a/src/auditor/taler-auditor-exchange.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2014-2021 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file taler-auditor-exchange.c
- * @brief Tool used by the auditor to add or remove the exchange's master key
- * to its database.
- * @author Christian Grothoff
- */
-#include <platform.h>
-#include "taler_exchangedb_lib.h"
-#include "taler_auditordb_lib.h"
-
-
-/**
- * URL of the exchange.
- */
-static char *exchange_url;
-
-/**
- * Master public key of the exchange.
- */
-static struct TALER_MasterPublicKeyP master_public_key;
-
-/**
- * Our configuration.
- */
-static struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * Handle to access the auditor's database.
- */
-static struct TALER_AUDITORDB_Plugin *adb;
-
-/**
- * -r option given.
- */
-static int remove_flag;
-
-
-/**
- * The main function of the taler-auditor-exchange tool. This tool is used
- * to add (or remove) an exchange's master key and base URL to the auditor's
- * database.
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, non-zero on error
- */
-int
-main (int argc,
- char *const *argv)
-{
- char *cfgfile = NULL;
- const struct GNUNET_GETOPT_CommandLineOption options[] = {
- GNUNET_GETOPT_option_cfgfile (&cfgfile),
- GNUNET_GETOPT_option_help (
- "Add or remove exchange to list of audited exchanges"),
- GNUNET_GETOPT_option_mandatory
- (GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &master_public_key)),
- GNUNET_GETOPT_option_string ('u',
- "exchange-url",
- "URL",
- "base URL of the exchange",
- &exchange_url),
- GNUNET_GETOPT_option_flag ('r',
- "remove",
- "remove the exchange's key (default is to add)",
- &remove_flag),
- GNUNET_GETOPT_option_version (VERSION "-" VCS_VERSION),
- GNUNET_GETOPT_OPTION_END
- };
-
- TALER_gcrypt_init (); /* must trigger initialization manually at this point! */
- GNUNET_assert (GNUNET_OK ==
- GNUNET_log_setup ("taler-auditor-exchange",
- "WARNING",
- NULL));
- {
- int ret;
-
- ret = GNUNET_GETOPT_run ("taler-auditor-exchange",
- options,
- argc, argv);
- if (GNUNET_NO == ret)
- return EXIT_SUCCESS;
- if (GNUNET_SYSERR == ret)
- return EXIT_INVALIDARGUMENT;
- }
- if (NULL == cfgfile)
- cfgfile = GNUNET_CONFIGURATION_default_filename ();
- if (NULL == cfgfile)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Can't find default configuration file.\n");
- return EXIT_NOTCONFIGURED;
- }
- cfg = GNUNET_CONFIGURATION_create ();
-
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Loading config file: %s\n",
- cfgfile);
-
- if (GNUNET_SYSERR ==
- GNUNET_CONFIGURATION_load (cfg,
- cfgfile))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Malformed configuration file `%s', exit ...\n",
- cfgfile);
- GNUNET_free (cfgfile);
- return EXIT_NOTCONFIGURED;
- }
- GNUNET_free (cfgfile);
-
- if (! remove_flag)
- {
- if (NULL == exchange_url)
- {
- fprintf (stderr,
- _ ("Missing either `%s' or `%s'.\n"),
- "-u URL",
- "--remove");
- return EXIT_INVALIDARGUMENT;
- }
- if ( (0 == strlen (exchange_url)) ||
- ( (0 != strncasecmp ("http://",
- exchange_url,
- strlen ("http://"))) &&
- (0 != strncasecmp ("https://",
- exchange_url,
- strlen ("https://"))) ) ||
- ('/' != exchange_url[strlen (exchange_url) - 1]) )
- {
- fprintf (stderr,
- "Exchange URL must begin with `http://` or `https://` and end with `/'\n");
- return EXIT_INVALIDARGUMENT;
- }
- }
-
-
- if (NULL ==
- (adb = TALER_AUDITORDB_plugin_load (cfg)))
- {
- fprintf (stderr,
- "Failed to initialize auditor database plugin.\n");
- return EXIT_NOTINSTALLED;
- }
-
- /* Create required tables */
- if (GNUNET_OK !=
- adb->create_tables (adb->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to create tables in auditor's database\n");
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_NOPERMISSION;
- }
-
- /* Update DB */
- {
- enum GNUNET_DB_QueryStatus qs;
-
- if (GNUNET_SYSERR ==
- adb->preflight (adb->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to initialize database connection\n");
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_FAILURE;
- }
-
- if (remove_flag)
- {
- qs = adb->delete_exchange (adb->cls,
- &master_public_key);
- }
- else
- {
- qs = adb->insert_exchange (adb->cls,
- &master_public_key,
- exchange_url);
- }
- if (0 > qs)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to update auditor database (status code: %d)\n",
- qs);
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_FAILURE;
- }
- if (0 == qs)
- {
- GNUNET_log (
- GNUNET_ERROR_TYPE_WARNING,
- (remove_flag)
- ? "Could not remove exchange from database: entry already absent\n"
- : "Could not add exchange to database: entry already exists\n");
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_FAILURE;
- }
- }
- TALER_AUDITORDB_plugin_unload (adb);
- return EXIT_SUCCESS;
-}
-
-
-/* end of taler-auditor-exchange.c */
diff --git a/src/auditor/taler-auditor-httpd.c b/src/auditor/taler-auditor-httpd.c
index 47d618669..59bd849bc 100644
--- a/src/auditor/taler-auditor-httpd.c
+++ b/src/auditor/taler-auditor-httpd.c
@@ -31,7 +31,7 @@
#include "taler_auditordb_lib.h"
#include "taler_exchangedb_lib.h"
#include "taler-auditor-httpd_deposit-confirmation.h"
-#include "taler-auditor-httpd_exchanges.h"
+#include "taler-auditor-httpd_deposit-confirmation-get.h"
#include "taler-auditor-httpd_mhd.h"
#include "taler-auditor-httpd.h"
@@ -48,7 +48,8 @@
* release version, and the format is NOT the same that semantic
* versioning uses either.
*/
-#define AUDITOR_PROTOCOL_VERSION "0:0:0"
+#define AUDITOR_PROTOCOL_VERSION "1:0:1"
+
/**
* Backlog for listen operation on unix domain sockets.
@@ -81,6 +82,12 @@ struct TALER_EXCHANGEDB_Plugin *TAH_eplugin;
static struct TALER_AuditorPublicKeyP auditor_pub;
/**
+ * Exchange master public key (according to the
+ * configuration). (global)
+ */
+struct TALER_MasterPublicKeyP TAH_master_public_key;
+
+/**
* Default timeout in seconds for HTTP requests.
*/
static unsigned int connection_timeout = 30;
@@ -132,7 +139,7 @@ handle_mhd_completion_callback (void *cls,
/**
- * Handle a "/version" request.
+ * Handle a "/config" request.
*
* @param rh context of the handler
* @param connection the MHD connection to handle
@@ -142,11 +149,11 @@ handle_mhd_completion_callback (void *cls,
* @return MHD result code
*/
static MHD_RESULT
-handle_version (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size)
+handle_config (struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
{
static json_t *ver; /* we build the response only once, keep around for next query! */
@@ -157,12 +164,18 @@ handle_version (struct TAH_RequestHandler *rh,
if (NULL == ver)
{
ver = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("name",
+ "taler-auditor"),
GNUNET_JSON_pack_string ("version",
AUDITOR_PROTOCOL_VERSION),
+ GNUNET_JSON_pack_string ("implementation",
+ "urn:net:taler:specs:taler-auditor:c-reference"),
GNUNET_JSON_pack_string ("currency",
TAH_currency),
GNUNET_JSON_pack_data_auto ("auditor_public_key",
- &auditor_pub));
+ &auditor_pub),
+ GNUNET_JSON_pack_data_auto ("exchange_master_public_key",
+ &TAH_master_public_key));
}
if (NULL == ver)
{
@@ -204,12 +217,15 @@ handle_mhd_request (void *cls,
{ "/deposit-confirmation", MHD_HTTP_METHOD_PUT, "application/json",
NULL, 0,
&TAH_DEPOSIT_CONFIRMATION_handler, MHD_HTTP_OK },
- { "/exchanges", MHD_HTTP_METHOD_GET, "application/json",
+ { "/deposit-confirmation", MHD_HTTP_METHOD_GET, "application/json",
NULL, 0,
- &TAH_EXCHANGES_handler, MHD_HTTP_OK },
- { "/version", MHD_HTTP_METHOD_GET, "application/json",
+ &TAH_DEPOSIT_CONFIRMATION_handler_get, MHD_HTTP_OK },
+// { "/deposit-confirmation", MHD_HTTP_METHOD_DELETE, "application/json",
+// NULL, 0,
+// &TAH_DEPOSIT_CONFIRMATION_delete, MHD_HTTP_OK },
+ { "/config", MHD_HTTP_METHOD_GET, "application/json",
NULL, 0,
- &handle_version, MHD_HTTP_OK },
+ &handle_config, MHD_HTTP_OK },
/* Landing page, for now tells humans to go away
* (NOTE: ideally, the reverse proxy will respond with a nicer page) */
{ "/", MHD_HTTP_METHOD_GET, "text/plain",
@@ -298,6 +314,40 @@ auditor_serve_process_config (void)
{
return GNUNET_SYSERR;
}
+
+ {
+ char *master_public_key_str;
+
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_string (cfg,
+ "exchange",
+ "MASTER_PUBLIC_KEY",
+ &master_public_key_str))
+ {
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "exchange",
+ "MASTER_PUBLIC_KEY");
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_OK !=
+ GNUNET_CRYPTO_eddsa_public_key_from_string (
+ master_public_key_str,
+ strlen (master_public_key_str),
+ &TAH_master_public_key.eddsa_pub))
+ {
+ GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
+ "exchange",
+ "MASTER_PUBLIC_KEY",
+ "invalid base32 encoding for a master public key");
+ GNUNET_free (master_public_key_str);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Launching auditor for exchange `%s'...\n",
+ master_public_key_str);
+ GNUNET_free (master_public_key_str);
+ }
+
{
char *pub;
@@ -410,6 +460,9 @@ run (void *cls,
enum TALER_MHD_GlobalOptions go;
int fh;
+ (void) cls;
+ (void) args;
+ (void) cfgfile;
go = TALER_MHD_GO_NONE;
if (auditor_connection_close)
go |= TALER_MHD_GO_FORCE_CONNECTION_CLOSE;
diff --git a/src/auditor/taler-auditor-httpd.h b/src/auditor/taler-auditor-httpd.h
index 79e56ff55..853722f09 100644
--- a/src/auditor/taler-auditor-httpd.h
+++ b/src/auditor/taler-auditor-httpd.h
@@ -39,6 +39,12 @@ extern struct TALER_AUDITORDB_Plugin *TAH_plugin;
extern struct TALER_EXCHANGEDB_Plugin *TAH_eplugin;
/**
+ * Exchange master public key (according to the
+ * configuration). (global)
+ */
+extern struct TALER_MasterPublicKeyP TAH_master_public_key;
+
+/**
* Our currency.
*/
extern char *TAH_currency;
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation-get.c b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.c
new file mode 100644
index 000000000..265d625c4
--- /dev/null
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.c
@@ -0,0 +1,166 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2014-2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+*/
+
+/**
+ * @file taler-auditor-httpd_deposit-confirmation-get.c
+ * @brief Handle /deposit-confirmation requests; return list of deposit confirmations from merchant
+ * that were not received from the exchange, by auditor.
+ * @author Nic Eigel
+ */
+
+#include "platform.h"
+#include <gnunet/gnunet_util_lib.h>
+#include <gnunet/gnunet_json_lib.h>
+#include <jansson.h>
+#include <microhttpd.h>
+#include <pthread.h>
+#include "taler_json_lib.h"
+#include "taler_mhd_lib.h"
+#include "taler-auditor-httpd.h"
+#include "taler-auditor-httpd_deposit-confirmation-get.h"
+
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * @brief Information about a signing key of the exchange. Signing keys are used
+ * to sign exchange messages other than coins, i.e. to confirm that a
+ * deposit was successful or that a refresh was accepted.
+ */
+struct ExchangeSigningKeyDataP
+{
+
+ /**
+ * When does this signing key begin to be valid?
+ */
+ struct GNUNET_TIME_TimestampNBO start;
+
+ /**
+ * When does this signing key expire? Note: This is currently when
+ * the Exchange will definitively stop using it. Signatures made with
+ * the key remain valid until @e end. When checking validity periods,
+ * clients should allow for some overlap between keys and tolerate
+ * the use of either key during the overlap time (due to the
+ * possibility of clock skew).
+ */
+ struct GNUNET_TIME_TimestampNBO expire;
+
+ /**
+ * When do signatures with this signing key become invalid? After
+ * this point, these signatures cannot be used in (legal) disputes
+ * anymore, as the Exchange is then allowed to destroy its side of the
+ * evidence. @e end is expected to be significantly larger than @e
+ * expire (by a year or more).
+ */
+ struct GNUNET_TIME_TimestampNBO end;
+
+ /**
+ * The public online signing key that the exchange will use
+ * between @e start and @e expire.
+ */
+ struct TALER_ExchangePublicKeyP signkey_pub;
+};
+
+GNUNET_NETWORK_STRUCT_END
+
+
+/**
+ * Add deposit confirmation to the list.
+ *
+ * @param[in,out] cls a `json_t *` array to extend
+ * @param serial_id location of the @a dc in the database
+ * @param dc struct of deposit confirmation
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop iterating
+ */
+static enum GNUNET_GenericReturnValue
+add_deposit_confirmation (void *cls,
+ uint64_t serial_id,
+ const struct TALER_AUDITORDB_DepositConfirmation *dc)
+{
+ json_t *list = cls;
+ json_t *obj;
+
+ obj = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("dc",
+ dc));
+ GNUNET_break (0 ==
+ json_array_append_new (list,
+ obj));
+ return GNUNET_OK;
+}
+
+
+/**
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+MHD_RESULT
+TAH_DEPOSIT_CONFIRMATION_handler_get (struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
+{
+ json_t *ja;
+ enum GNUNET_DB_QueryStatus qs;
+
+ (void) rh;
+ (void) connection_cls;
+ (void) upload_data;
+ (void) upload_data_size;
+ if (GNUNET_SYSERR ==
+ TAH_plugin->preflight (TAH_plugin->cls))
+ {
+ GNUNET_break (0);
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_DB_SETUP_FAILED,
+ NULL);
+ }
+ ja = json_array ();
+ GNUNET_break (NULL != ja);
+ // TODO correct below
+ qs = TAH_plugin->get_deposit_confirmations (
+ TAH_plugin->cls,
+ 0, /* FIXME: get from query parameters! */
+ false, /* FIXME: get from query parameters! */
+ &add_deposit_confirmation,
+ ja);
+
+ if (0 > qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ json_decref (ja);
+ TALER_LOG_WARNING (
+ "Failed to handle GET /deposit-confirmation in database\n");
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_DB_FETCH_FAILED,
+ "deposit-confirmation");
+ }
+ return TALER_MHD_REPLY_JSON_PACK (
+ connection,
+ MHD_HTTP_OK,
+ GNUNET_JSON_pack_array_steal ("deposit-confirmation",
+ ja));
+}
+
+
+/* end of taler-auditor-httpd_deposit-confirmation-get.c */
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation-get.h b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.h
new file mode 100644
index 000000000..f1f522787
--- /dev/null
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation-get.h
@@ -0,0 +1,70 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file taler-auditor-httpd_deposit-confirmation-get.h
+ * @brief Handle GET /deposit-confirmation requests
+ * @author Nic Eigel
+ */
+#ifndef TALER_AUDITOR_HTTPD_DEPOSIT_CONFIRMATION_GET_H
+#define TALER_AUDITOR_HTTPD_DEPOSIT_CONFIRMATION_GET_H
+
+#include <gnunet/gnunet_util_lib.h>
+#include <microhttpd.h>
+#include "taler-auditor-httpd.h"
+
+/**
+ * Initialize subsystem.
+ */
+void
+TEAH_DEPOSIT_CONFIRMATION_GET_init (void);
+
+/**
+ * Shut down subsystem.
+ */
+void
+TEAH_DEPOSIT_CONFIRMATION_GET_done (void);
+
+/**
+ * Handle a "/deposit-confirmation" request.
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+MHD_RESULT
+TAH_DEPOSIT_CONFIRMATION_handler_get (struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size);
+
+/**
+ * Handle a DELETE "/deposit-confirmation/$dc" request.
+ *
+ * @param rc request details about the request to handle
+ * @param args argument with the dc primary key
+ * @return MHD result code
+ */
+/*MHD_RESULT
+TAH_DEPOSIT_CONFIRMATION_delete (
+ struct TEH_RequestContext *rc,
+ const char *const args[1]);*/
+
+
+#endif
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation.c b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
index c7a23d718..8b449bf47 100644
--- a/src/auditor/taler-auditor-httpd_deposit-confirmation.c
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2014-2020 Taler Systems SA
+ Copyright (C) 2014-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free Software
@@ -31,6 +31,49 @@
#include "taler-auditor-httpd.h"
#include "taler-auditor-httpd_deposit-confirmation.h"
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * @brief Information about a signing key of the exchange. Signing keys are used
+ * to sign exchange messages other than coins, i.e. to confirm that a
+ * deposit was successful or that a refresh was accepted.
+ */
+struct ExchangeSigningKeyDataP
+{
+
+ /**
+ * When does this signing key begin to be valid?
+ */
+ struct GNUNET_TIME_TimestampNBO start;
+
+ /**
+ * When does this signing key expire? Note: This is currently when
+ * the Exchange will definitively stop using it. Signatures made with
+ * the key remain valid until @e end. When checking validity periods,
+ * clients should allow for some overlap between keys and tolerate
+ * the use of either key during the overlap time (due to the
+ * possibility of clock skew).
+ */
+ struct GNUNET_TIME_TimestampNBO expire;
+
+ /**
+ * When do signatures with this signing key become invalid? After
+ * this point, these signatures cannot be used in (legal) disputes
+ * anymore, as the Exchange is then allowed to destroy its side of the
+ * evidence. @e end is expected to be significantly larger than @e
+ * expire (by a year or more).
+ */
+ struct GNUNET_TIME_TimestampNBO end;
+
+ /**
+ * The public online signing key that the exchange will use
+ * between @e start and @e expire.
+ */
+ struct TALER_ExchangePublicKeyP signkey_pub;
+};
+
+GNUNET_NETWORK_STRUCT_END
+
/**
* Cache of already verified exchange signing keys. Maps the hash of the
@@ -63,21 +106,22 @@ verify_and_execute_deposit_confirmation (
const struct TALER_AUDITORDB_ExchangeSigningKey *es)
{
enum GNUNET_DB_QueryStatus qs;
- struct GNUNET_TIME_Absolute now;
struct GNUNET_HashCode h;
const char *cached;
- struct TALER_ExchangeSigningKeyValidityPS skv = {
- .purpose.purpose = htonl (TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY),
- .purpose.size = htonl (sizeof (struct TALER_ExchangeSigningKeyValidityPS)),
- .start = GNUNET_TIME_absolute_hton (es->ep_start),
- .expire = GNUNET_TIME_absolute_hton (es->ep_expire),
- .end = GNUNET_TIME_absolute_hton (es->ep_end),
+ struct ExchangeSigningKeyDataP skv = {
+ .start = GNUNET_TIME_timestamp_hton (es->ep_start),
+ .expire = GNUNET_TIME_timestamp_hton (es->ep_expire),
+ .end = GNUNET_TIME_timestamp_hton (es->ep_end),
.signkey_pub = es->exchange_pub
};
+ const struct TALER_CoinSpendSignatureP *coin_sigps[
+ GNUNET_NZL (dc->num_coins)];
- now = GNUNET_TIME_absolute_get ();
- if ( (es->ep_start.abs_value_us > now.abs_value_us) ||
- (es->ep_expire.abs_value_us < now.abs_value_us) )
+ for (unsigned int i = 0; i < dc->num_coins; i++)
+ coin_sigps[i] = &dc->coin_sigs[i];
+
+ if (GNUNET_TIME_absolute_is_future (es->ep_start.abs_time) ||
+ GNUNET_TIME_absolute_is_past (es->ep_expire.abs_time))
{
/* Signing key expired */
TALER_LOG_WARNING ("Expired exchange signing key\n");
@@ -89,7 +133,7 @@ verify_and_execute_deposit_confirmation (
/* check our cache */
GNUNET_CRYPTO_hash (&skv,
- sizeof (skv),
+ sizeof(skv),
&h);
GNUNET_assert (0 == pthread_mutex_lock (&lock));
cached = GNUNET_CONTAINER_multihashmap_get (cache,
@@ -113,7 +157,7 @@ verify_and_execute_deposit_confirmation (
es->ep_start,
es->ep_expire,
es->ep_end,
- &es->master_public_key,
+ &TAH_master_public_key,
&es->master_sig))
{
TALER_LOG_WARNING ("Invalid signature on exchange signing key\n");
@@ -183,33 +227,27 @@ verify_and_execute_deposit_confirmation (
}
/* check deposit confirmation signature */
+ if (GNUNET_OK !=
+ TALER_exchange_online_deposit_confirmation_verify (
+ &dc->h_contract_terms,
+ &dc->h_wire,
+ &dc->h_policy,
+ dc->exchange_timestamp,
+ dc->wire_deadline,
+ dc->refund_deadline,
+ &dc->total_without_fee,
+ dc->num_coins,
+ coin_sigps,
+ &dc->merchant,
+ &dc->exchange_pub,
+ &dc->exchange_sig))
{
- struct TALER_DepositConfirmationPS dcs = {
- .purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_CONFIRM_DEPOSIT),
- .purpose.size = htonl (sizeof (struct TALER_DepositConfirmationPS)),
- .h_contract_terms = dc->h_contract_terms,
- .h_wire = dc->h_wire,
- .exchange_timestamp = GNUNET_TIME_absolute_hton (dc->exchange_timestamp),
- .refund_deadline = GNUNET_TIME_absolute_hton (dc->refund_deadline),
- .coin_pub = dc->coin_pub,
- .merchant = dc->merchant
- };
-
- TALER_amount_hton (&dcs.amount_without_fee,
- &dc->amount_without_fee);
- if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_EXCHANGE_CONFIRM_DEPOSIT,
- &dcs,
- &dc->exchange_sig.eddsa_signature,
- &dc->exchange_pub.eddsa_pub))
- {
- TALER_LOG_WARNING (
- "Invalid signature on /deposit-confirmation request\n");
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_FORBIDDEN,
- TALER_EC_AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
- "exchange signature invalid");
- }
+ TALER_LOG_WARNING (
+ "Invalid signature on /deposit-confirmation request\n");
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_FORBIDDEN,
+ TALER_EC_AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
+ "exchange signature invalid");
}
/* execute transaction */
@@ -231,68 +269,66 @@ verify_and_execute_deposit_confirmation (
}
-/**
- * Handle a "/deposit-confirmation" request. Parses the JSON, and, if
- * successful, passes the JSON data to #verify_and_execute_deposit_confirmation()
- * to further check the details of the operation specified. If
- * everything checks out, this will ultimately lead to the "/deposit-confirmation"
- * being stored in the database.
- *
- * @param rh context of the handler
- * @param connection the MHD connection to handle
- * @param[in,out] connection_cls the connection's closure (can be updated)
- * @param upload_data upload data
- * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @return MHD result code
- */
MHD_RESULT
-TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size)
+TAH_DEPOSIT_CONFIRMATION_handler (
+ struct TAH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
{
- struct TALER_AUDITORDB_DepositConfirmation dc;
+ struct TALER_AUDITORDB_DepositConfirmation dc = {
+ .refund_deadline = GNUNET_TIME_UNIT_ZERO_TS
+ };
struct TALER_AUDITORDB_ExchangeSigningKey es;
+ const json_t *jcoin_sigs;
+ const json_t *jcoin_pubs;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed_auto ("h_contract_terms",
&dc.h_contract_terms),
+ GNUNET_JSON_spec_fixed_auto ("h_policy",
+ &dc.h_policy),
GNUNET_JSON_spec_fixed_auto ("h_wire",
&dc.h_wire),
- TALER_JSON_spec_absolute_time ("exchange_timestamp",
- &dc.exchange_timestamp),
- TALER_JSON_spec_absolute_time ("refund_deadline",
- &dc.refund_deadline),
- TALER_JSON_spec_amount ("amount_without_fee",
+ GNUNET_JSON_spec_timestamp ("exchange_timestamp",
+ &dc.exchange_timestamp),
+ GNUNET_JSON_spec_mark_optional (
+ GNUNET_JSON_spec_timestamp ("refund_deadline",
+ &dc.refund_deadline),
+ NULL),
+ GNUNET_JSON_spec_timestamp ("wire_deadline",
+ &dc.wire_deadline),
+ TALER_JSON_spec_amount ("total_without_fee",
TAH_currency,
- &dc.amount_without_fee),
- GNUNET_JSON_spec_fixed_auto ("coin_pub",
- &dc.coin_pub),
+ &dc.total_without_fee),
+ GNUNET_JSON_spec_array_const ("coin_pubs",
+ &jcoin_pubs),
+ GNUNET_JSON_spec_array_const ("coin_sigs",
+ &jcoin_sigs),
GNUNET_JSON_spec_fixed_auto ("merchant_pub",
&dc.merchant),
GNUNET_JSON_spec_fixed_auto ("exchange_sig",
&dc.exchange_sig),
GNUNET_JSON_spec_fixed_auto ("exchange_pub",
&dc.exchange_pub),
- GNUNET_JSON_spec_fixed_auto ("master_pub",
- &es.master_public_key),
- TALER_JSON_spec_absolute_time ("ep_start",
- &es.ep_start),
- TALER_JSON_spec_absolute_time ("ep_expire",
- &es.ep_expire),
- TALER_JSON_spec_absolute_time ("ep_end",
- &es.ep_end),
+ GNUNET_JSON_spec_timestamp ("ep_start",
+ &es.ep_start),
+ GNUNET_JSON_spec_timestamp ("ep_expire",
+ &es.ep_expire),
+ GNUNET_JSON_spec_timestamp ("ep_end",
+ &es.ep_end),
GNUNET_JSON_spec_fixed_auto ("master_sig",
&es.master_sig),
GNUNET_JSON_spec_end ()
};
+ unsigned int num_coins;
+ json_t *json;
(void) rh;
(void) connection_cls;
(void) upload_data;
(void) upload_data_size;
{
- json_t *json;
enum GNUNET_GenericReturnValue res;
res = TALER_MHD_parse_post_json (connection,
@@ -302,36 +338,99 @@ TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
&json);
if (GNUNET_SYSERR == res)
return MHD_NO;
- if ( (GNUNET_NO == res) ||
- (NULL == json) )
+ if ((GNUNET_NO == res) ||
+ (NULL == json))
return MHD_YES;
res = TALER_MHD_parse_json_data (connection,
json,
spec);
- json_decref (json);
if (GNUNET_SYSERR == res)
- return MHD_NO; /* hard failure */
+ {
+ json_decref (json);
+ return MHD_NO; /* hard failure */
+ }
if (GNUNET_NO == res)
- return MHD_YES; /* failure */
+ {
+ json_decref (json);
+ return MHD_YES; /* failure */
+ }
+ }
+ num_coins = json_array_size (jcoin_sigs);
+ if (num_coins != json_array_size (jcoin_pubs))
+ {
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_pubs.length != coin_sigs.length");
+ }
+ if (0 == num_coins)
+ {
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_pubs array is empty");
}
-
- es.exchange_pub = dc.exchange_pub; /* used twice! */
- dc.master_public_key = es.master_public_key;
{
+ struct TALER_CoinSpendPublicKeyP coin_pubs[num_coins];
+ struct TALER_CoinSpendSignatureP coin_sigs[num_coins];
MHD_RESULT res;
+ for (unsigned int i = 0; i < num_coins; i++)
+ {
+ json_t *jpub = json_array_get (jcoin_pubs,
+ i);
+ json_t *jsig = json_array_get (jcoin_sigs,
+ i);
+ const char *ps = json_string_value (jpub);
+ const char *ss = json_string_value (jsig);
+
+ if ((NULL == ps) ||
+ (GNUNET_OK !=
+ GNUNET_STRINGS_string_to_data (ps,
+ strlen (ps),
+ &coin_pubs[i],
+ sizeof(coin_pubs[i]))))
+ {
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_pub[] malformed");
+ }
+ if ((NULL == ss) ||
+ (GNUNET_OK !=
+ GNUNET_STRINGS_string_to_data (ss,
+ strlen (ss),
+ &coin_sigs[i],
+ sizeof(coin_sigs[i]))))
+ {
+ GNUNET_break_op (0);
+ json_decref (json);
+ return TALER_MHD_reply_with_ec (
+ connection,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ "coin_sig[] malformed");
+ }
+ }
+ dc.num_coins = num_coins;
+ dc.coin_pubs = coin_pubs;
+ dc.coin_sigs = coin_sigs;
+ es.exchange_pub = dc.exchange_pub; /* used twice! */
res = verify_and_execute_deposit_confirmation (connection,
&dc,
&es);
GNUNET_JSON_parse_free (spec);
+ json_decref (json);
return res;
}
}
-/**
- * Initialize subsystem.
- */
void
TEAH_DEPOSIT_CONFIRMATION_init (void)
{
@@ -341,16 +440,13 @@ TEAH_DEPOSIT_CONFIRMATION_init (void)
}
-/**
- * Shut down subsystem.
- */
void
TEAH_DEPOSIT_CONFIRMATION_done (void)
{
- GNUNET_CONTAINER_multihashmap_destroy (cache);
- cache = NULL;
- GNUNET_assert (0 == pthread_mutex_destroy (&lock));
+ if (NULL != cache)
+ {
+ GNUNET_CONTAINER_multihashmap_destroy (cache);
+ cache = NULL;
+ GNUNET_assert (0 == pthread_mutex_destroy (&lock));
+ }
}
-
-
-/* end of taler-auditor-httpd_deposit-confirmation.c */
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation.h b/src/auditor/taler-auditor-httpd_deposit-confirmation.h
index a7c331916..1226dda69 100644
--- a/src/auditor/taler-auditor-httpd_deposit-confirmation.h
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation.h
@@ -56,4 +56,5 @@ TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
const char *upload_data,
size_t *upload_data_size);
+
#endif
diff --git a/src/auditor/taler-auditor-httpd_exchanges.c b/src/auditor/taler-auditor-httpd_exchanges.c
deleted file mode 100644
index f9a9e9e60..000000000
--- a/src/auditor/taler-auditor-httpd_exchanges.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2014-2021 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file taler-auditor-httpd_exchanges.c
- * @brief Handle /exchanges requests; returns list of exchanges we audit
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include <gnunet/gnunet_util_lib.h>
-#include <gnunet/gnunet_json_lib.h>
-#include <jansson.h>
-#include <microhttpd.h>
-#include <pthread.h>
-#include "taler_json_lib.h"
-#include "taler_mhd_lib.h"
-#include "taler-auditor-httpd.h"
-#include "taler-auditor-httpd_exchanges.h"
-
-
-/**
- * Add exchange information to the list.
- *
- * @param[in,out] cls a `json_t *` array to extend
- * @param master_pub master public key of an exchange
- * @param exchange_url base URL of an exchange
- */
-static void
-add_exchange (void *cls,
- const struct TALER_MasterPublicKeyP *master_pub,
- const char *exchange_url)
-{
- json_t *list = cls;
- json_t *obj;
-
- obj = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_data_auto ("master_pub",
- master_pub),
- GNUNET_JSON_pack_string ("exchange_url",
- exchange_url));
- GNUNET_break (0 ==
- json_array_append_new (list,
- obj));
-
-}
-
-
-/**
- * Handle a "/exchanges" request.
- *
- * @param rh context of the handler
- * @param connection the MHD connection to handle
- * @param[in,out] connection_cls the connection's closure (can be updated)
- * @param upload_data upload data
- * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @return MHD result code
- */
-MHD_RESULT
-TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size)
-{
- json_t *ja;
- enum GNUNET_DB_QueryStatus qs;
-
- (void) rh;
- (void) connection_cls;
- (void) upload_data;
- (void) upload_data_size;
- if (GNUNET_SYSERR ==
- TAH_plugin->preflight (TAH_plugin->cls))
- {
- GNUNET_break (0);
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_INTERNAL_SERVER_ERROR,
- TALER_EC_GENERIC_DB_SETUP_FAILED,
- NULL);
- }
- ja = json_array ();
- GNUNET_break (NULL != ja);
- qs = TAH_plugin->list_exchanges (TAH_plugin->cls,
- &add_exchange,
- ja);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
- json_decref (ja);
- TALER_LOG_WARNING ("Failed to handle /exchanges in database\n");
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_INTERNAL_SERVER_ERROR,
- TALER_EC_GENERIC_DB_FETCH_FAILED,
- "exchanges");
- }
- return TALER_MHD_REPLY_JSON_PACK (
- connection,
- MHD_HTTP_OK,
- GNUNET_JSON_pack_array_steal ("exchanges",
- ja));
-}
-
-
-/* end of taler-auditor-httpd_exchanges.c */
diff --git a/src/auditor/taler-auditor-httpd_exchanges.h b/src/auditor/taler-auditor-httpd_exchanges.h
deleted file mode 100644
index c7d8dd5fd..000000000
--- a/src/auditor/taler-auditor-httpd_exchanges.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2018 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file taler-auditor-httpd_exchanges.h
- * @brief Handle /exchanges requests
- * @author Christian Grothoff
- */
-#ifndef TALER_AUDITOR_HTTPD_EXCHANGES_H
-#define TALER_AUDITOR_HTTPD_EXCHANGES_H
-
-#include <gnunet/gnunet_util_lib.h>
-#include <microhttpd.h>
-#include "taler-auditor-httpd.h"
-
-
-/**
- * Handle a "/exchanges" request.
- *
- * @param rh context of the handler
- * @param connection the MHD connection to handle
- * @param[in,out] connection_cls the connection's closure (can be updated)
- * @param upload_data upload data
- * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @return MHD result code
- */
-MHD_RESULT
-TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh,
- struct MHD_Connection *connection,
- void **connection_cls,
- const char *upload_data,
- size_t *upload_data_size);
-
-#endif
diff --git a/src/auditor/taler-auditor-sync.c b/src/auditor/taler-auditor-sync.c
index 0dfaa19a1..e4022d325 100644
--- a/src/auditor/taler-auditor-sync.c
+++ b/src/auditor/taler-auditor-sync.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2020 Taler Systems SA
+ Copyright (C) 2020-2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -91,9 +91,14 @@ struct Table
static struct Table tables[] = {
{ .rt = TALER_EXCHANGEDB_RT_DENOMINATIONS},
{ .rt = TALER_EXCHANGEDB_RT_DENOMINATION_REVOCATIONS},
+ { .rt = TALER_EXCHANGEDB_RT_WIRE_TARGETS},
+ { .rt = TALER_EXCHANGEDB_RT_LEGITIMIZATION_PROCESSES},
+ { .rt = TALER_EXCHANGEDB_RT_LEGITIMIZATION_REQUIREMENTS},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_IN},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_CLOSE},
+ { .rt = TALER_EXCHANGEDB_RT_RESERVES_OPEN_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_RESERVES_OPEN_DEPOSITS},
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_OUT},
{ .rt = TALER_EXCHANGEDB_RT_AUDITORS},
{ .rt = TALER_EXCHANGEDB_RT_AUDITOR_DENOM_SIGS},
@@ -103,13 +108,30 @@ static struct Table tables[] = {
{ .rt = TALER_EXCHANGEDB_RT_REFRESH_COMMITMENTS},
{ .rt = TALER_EXCHANGEDB_RT_REFRESH_REVEALED_COINS},
{ .rt = TALER_EXCHANGEDB_RT_REFRESH_TRANSFER_KEYS},
- { .rt = TALER_EXCHANGEDB_RT_DEPOSITS},
+ { .rt = TALER_EXCHANGEDB_RT_BATCH_DEPOSITS},
+ { .rt = TALER_EXCHANGEDB_RT_COIN_DEPOSITS},
{ .rt = TALER_EXCHANGEDB_RT_REFUNDS},
{ .rt = TALER_EXCHANGEDB_RT_WIRE_OUT},
{ .rt = TALER_EXCHANGEDB_RT_AGGREGATION_TRACKING},
{ .rt = TALER_EXCHANGEDB_RT_WIRE_FEE},
+ { .rt = TALER_EXCHANGEDB_RT_GLOBAL_FEE},
{ .rt = TALER_EXCHANGEDB_RT_RECOUP},
{ .rt = TALER_EXCHANGEDB_RT_RECOUP_REFRESH },
+ { .rt = TALER_EXCHANGEDB_RT_EXTENSIONS},
+ { .rt = TALER_EXCHANGEDB_RT_POLICY_DETAILS },
+ { .rt = TALER_EXCHANGEDB_RT_POLICY_FULFILLMENTS },
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_DECISION},
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_MERGES},
+ { .rt = TALER_EXCHANGEDB_RT_PURSE_DEPOSITS},
+ { .rt = TALER_EXCHANGEDB_RT_ACCOUNT_MERGES},
+ { .rt = TALER_EXCHANGEDB_RT_HISTORY_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_CLOSE_REQUESTS},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_OUT},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_OUT_ENTRIES},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_IN},
+ { .rt = TALER_EXCHANGEDB_RT_WADS_IN_ENTRIES},
+ { .rt = TALER_EXCHANGEDB_RT_PROFIT_DRAINS},
{ .end = true }
};
@@ -139,7 +161,7 @@ struct InsertContext
* @return #GNUNET_OK to continue to iterate,
* #GNUNET_SYSERR to fail with an error
*/
-static int
+static enum GNUNET_GenericReturnValue
do_insert (void *cls,
const struct TALER_EXCHANGEDB_TableData *td)
{
@@ -202,20 +224,16 @@ transact (void)
src->lookup_serial_by_table (src->cls,
tables[i].rt,
&tables[i].end_serial);
- if (0 >
- src->commit (src->cls))
- return GNUNET_SYSERR;
+ src->rollback (src->cls);
if (GNUNET_OK !=
- dst->start (src->cls,
+ dst->start (dst->cls,
"lookup dst serials"))
return GNUNET_SYSERR;
for (unsigned int i = 0; ! tables[i].end; i++)
dst->lookup_serial_by_table (dst->cls,
tables[i].rt,
&tables[i].start_serial);
- if (0 >
- dst->commit (dst->cls))
- return GNUNET_SYSERR;
+ dst->rollback (dst->cls);
for (unsigned int i = 0; ! tables[i].end; i++)
{
struct Table *table = &tables[i];
@@ -310,6 +328,7 @@ do_sync (void *cls)
{
static struct GNUNET_TIME_Relative delay;
+ (void) cls;
sync_task = NULL;
actual_size = 0;
if (GNUNET_SYSERR ==
@@ -375,7 +394,7 @@ do_sync (void *cls)
* @param value actual value of the option (a string)
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
set_filename (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
void *scls,
const char *option,
@@ -469,6 +488,7 @@ load_config (const char *cfgfile)
static void
do_shutdown (void *cls)
{
+ (void) cls;
if (NULL != sync_task)
{
GNUNET_SCHEDULER_cancel (sync_task);
@@ -586,6 +606,9 @@ main (int argc,
level,
NULL));
GNUNET_free (level);
+ /* suppress compiler warnings... */
+ GNUNET_assert (NULL != src_cfgfile);
+ GNUNET_assert (NULL != dst_cfgfile);
if (0 == strcmp (src_cfgfile,
dst_cfgfile))
{
diff --git a/src/auditor/taler-auditor.in b/src/auditor/taler-auditor.in
index c8ea6b0c9..ab3d8d202 100644
--- a/src/auditor/taler-auditor.in
+++ b/src/auditor/taler-auditor.in
@@ -11,6 +11,7 @@ Arguments mandatory for long options are also mandatory for short options.
-h, --help print this help
-i, --internal perform checks only applicable for
exchange-internal audits
+ -I, --ignore-not-found ignore problems with the exchange bank account not existing
-L, --log=LOGLEVEL configure logging to use LOGLEVEL
-l, --logfile=FILENAME configure logging to write logs to FILENAME
-m, --exchange-key=KEY public key of the exchange (Crockford base32
@@ -28,7 +29,7 @@ EOF
function optcheck {
-TEMP=`getopt -o c:hiL:l:m:T:v --long config:,help,internal,log:,logfile:exchange-key:,timetravel:,version -n 'taler-auditor' -- "$@"`
+TEMP=`getopt -o c:hiIL:l:m:T:v --long config:,help,internal,ignore-not-found,log:,logfile:exchange-key:,timetravel:,version -n 'taler-auditor' -- "$@"`
if [ $? != 0 ] ;
then
@@ -43,6 +44,7 @@ DEBUG=false
MEMORY=
DEBUGFILE=
JAVA_MISC_OPT=
+INF=
while true; do
case "$1" in
-c | --config ) shift 2 ;;
@@ -51,6 +53,7 @@ while true; do
exit 0
;;
-i | --internal ) shift ;;
+ -I | --ignore-not-found ) INF="-I"; shift ;;
-L | --log ) shift 2;;
-l | --logfile ) shift ;;
-m | --exchange-key ) shift 2 ;;
@@ -74,16 +77,23 @@ done
}
# End of function 'optcheck'
-
optcheck "$@"
+# Remove "-I" from $@ if present, store result in $ARGS.
+ARGS=("$@")
+ARGS=(${ARGS[@]/$INF})
-DIR=`mktemp -d reportXXXXXX`
-for n in aggregation coins deposits reserves wire
+DATE=`date +%F_%H:%M:%S`
+DIR="report_$DATE"
+mkdir $DIR
+for n in aggregation coins deposits purses reserves
do
- taler-helper-auditor-$n "$@" > ${DIR}/$n.json
+ taler-helper-auditor-$n ${ARGS[*]} > ${DIR}/$n.json
done
+taler-helper-auditor-wire $INF ${ARGS[*]} > ${DIR}/wire.json
+
+echo "Generating auditor report in ${DIR}."
taler-helper-auditor-render.py \
${DIR}/aggregation.json \
${DIR}/coins.json \
diff --git a/src/auditor/taler-helper-auditor-aggregation.c b/src/auditor/taler-helper-auditor-aggregation.c
index 468f66b44..a0f2a190f 100644
--- a/src/auditor/taler-helper-auditor-aggregation.c
+++ b/src/auditor/taler-helper-auditor-aggregation.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2024 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -34,17 +34,26 @@
static int global_ret;
/**
- * Checkpointing our progress for aggregations.
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
*/
-static struct TALER_AUDITORDB_ProgressPointAggregation ppa;
+static int test_mode;
/**
* Checkpointing our progress for aggregations.
*/
-static struct TALER_AUDITORDB_ProgressPointAggregation ppa_start;
+static TALER_ARL_DEF_PP (aggregation_last_wire_out_serial_id);
+
+/**
+ * Total aggregation fees (wire fees) earned.
+ */
+static TALER_ARL_DEF_AB (aggregation_total_wire_fee_revenue);
+
/**
- * Array of reports about row inconsitencies.
+ * Array of reports about row inconsistencies.
*/
static json_t *report_row_inconsistencies;
@@ -102,11 +111,6 @@ static struct TALER_Amount total_arithmetic_delta_plus;
static struct TALER_Amount total_arithmetic_delta_minus;
/**
- * Total aggregation fees earned.
- */
-static struct TALER_Amount total_aggregation_fee_income;
-
-/**
* Array of reports about coin operations with bad signatures.
*/
static json_t *report_bad_sig_losses;
@@ -297,22 +301,17 @@ struct WireFeeInfo
/**
* When does the fee go into effect (inclusive).
*/
- struct GNUNET_TIME_Absolute start_date;
+ struct GNUNET_TIME_Timestamp start_date;
/**
* When does the fee stop being in effect (exclusive).
*/
- struct GNUNET_TIME_Absolute end_date;
-
- /**
- * How high is the wire fee.
- */
- struct TALER_Amount wire_fee;
+ struct GNUNET_TIME_Timestamp end_date;
/**
- * How high is the closing fee.
+ * How high are the wire fees.
*/
- struct TALER_Amount closing_fee;
+ struct TALER_WireFeeSet fees;
};
@@ -358,14 +357,14 @@ struct WireCheckContext
struct TALER_Amount total_deposits;
/**
- * Hash of the wire transfer details of the receiver.
+ * Target account details of the receiver.
*/
- struct GNUNET_HashCode h_wire;
+ const char *payto_uri;
/**
* Execution time of the wire transfer.
*/
- struct GNUNET_TIME_Absolute date;
+ struct GNUNET_TIME_Timestamp date;
/**
* Database transaction status.
@@ -390,12 +389,12 @@ struct WireCheckContext
* @param[out] deposit_gain amount the coin contributes excluding refunds
* @return #GNUNET_OK on success, #GNUNET_SYSERR if the transaction must fail (hard error)
*/
-static int
+static enum GNUNET_GenericReturnValue
check_transaction_history_for_deposit (
const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct GNUNET_HashCode *h_contract_terms,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
const struct TALER_MerchantPublicKeyP *merchant_pub,
- const struct TALER_DenominationKeyValidityPS *issue,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
const struct TALER_EXCHANGEDB_TransactionList *tl_head,
struct TALER_Amount *merchant_gain,
struct TALER_Amount *deposit_gain)
@@ -403,9 +402,9 @@ check_transaction_history_for_deposit (
struct TALER_Amount expenditures;
struct TALER_Amount refunds;
struct TALER_Amount spent;
+ struct TALER_Amount *deposited = NULL;
struct TALER_Amount merchant_loss;
const struct TALER_Amount *deposit_fee;
- int refund_deposit_fee;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Checking transaction history of coin %s\n",
@@ -426,46 +425,34 @@ check_transaction_history_for_deposit (
to reconstruct the order of the events, so instead of subtracting we
compute positive (deposit, melt) and negative (refund) values separately
here, and then subtract the negative from the positive at the end (after
- the loops). *///
- refund_deposit_fee = GNUNET_NO;
+ the loops). */
deposit_fee = NULL;
for (const struct TALER_EXCHANGEDB_TransactionList *tl = tl_head;
NULL != tl;
tl = tl->next)
{
- const struct TALER_Amount *amount_with_fee;
const struct TALER_Amount *fee_claimed;
switch (tl->type)
{
case TALER_EXCHANGEDB_TT_DEPOSIT:
/* check wire and h_wire are consistent */
+ if (NULL != deposited)
{
- struct GNUNET_HashCode hw;
-
- if (GNUNET_OK !=
- TALER_JSON_merchant_wire_signature_hash (
- tl->details.deposit->receiver_wire_account,
- &hw))
- {
- report_row_inconsistency ("deposits",
- tl->serial_id,
- "wire account given is malformed");
- }
- else if (0 !=
- GNUNET_memcmp (&hw,
- &tl->details.deposit->h_wire))
- {
- report_row_inconsistency ("deposits",
- tl->serial_id,
- "h(wire) does not match wire");
- }
+ TALER_ARL_report (report_row_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("table",
+ "deposits"),
+ GNUNET_JSON_pack_uint64 ("row",
+ tl->serial_id),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "multiple deposits of the same coin into the same contract detected")));
}
- amount_with_fee = &tl->details.deposit->amount_with_fee; /* according to exchange*/
+ deposited = &tl->details.deposit->amount_with_fee; /* according to exchange*/
fee_claimed = &tl->details.deposit->deposit_fee; /* Fee according to exchange DB */
TALER_ARL_amount_add (&expenditures,
&expenditures,
- amount_with_fee);
+ deposited);
/* Check if this deposit is within the remit of the aggregation
we are investigating, if so, include it in the totals. */
if ( (0 == GNUNET_memcmp (merchant_pub,
@@ -476,7 +463,7 @@ check_transaction_history_for_deposit (
struct TALER_Amount amount_without_fee;
TALER_ARL_amount_subtract (&amount_without_fee,
- amount_with_fee,
+ deposited,
fee_claimed);
TALER_ARL_amount_add (merchant_gain,
merchant_gain,
@@ -487,120 +474,168 @@ check_transaction_history_for_deposit (
deposit_fee = fee_claimed; /* We had a deposit, remember the fee, we may need it */
}
/* Check that the fees given in the transaction list and in dki match */
+ if (0 !=
+ TALER_amount_cmp (&issue->fees.deposit,
+ fee_claimed))
+ {
+ /* Disagreement in fee structure between auditor and exchange DB! */
+ report_amount_arithmetic_inconsistency ("deposit fee",
+ 0,
+ fee_claimed,
+ &issue->fees.deposit,
+ 1);
+ }
+ break;
+ case TALER_EXCHANGEDB_TT_MELT:
{
- struct TALER_Amount fee_expected;
+ const struct TALER_Amount *amount_with_fee;
- /* Fee according to denomination data of auditor */
- TALER_amount_ntoh (&fee_expected,
- &issue->fee_deposit);
+ amount_with_fee = &tl->details.melt->amount_with_fee;
+ fee_claimed = &tl->details.melt->melt_fee;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ /* Check that the fees given in the transaction list and in dki match */
if (0 !=
- TALER_amount_cmp (&fee_expected,
+ TALER_amount_cmp (&issue->fees.refresh,
fee_claimed))
{
- /* Disagreement in fee structure between auditor and exchange DB! */
- report_amount_arithmetic_inconsistency ("deposit fee",
+ /* Disagreement in fee structure between exchange and auditor */
+ report_amount_arithmetic_inconsistency ("melt fee",
0,
fee_claimed,
- &fee_expected,
+ &issue->fees.refresh,
1);
}
+ break;
}
- break;
- case TALER_EXCHANGEDB_TT_MELT:
- amount_with_fee = &tl->details.melt->amount_with_fee;
- fee_claimed = &tl->details.melt->melt_fee;
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- amount_with_fee);
- /* Check that the fees given in the transaction list and in dki match */
+ case TALER_EXCHANGEDB_TT_REFUND:
{
- struct TALER_Amount fee_expected;
+ const struct TALER_Amount *amount_with_fee;
- TALER_amount_ntoh (&fee_expected,
- &issue->fee_refresh);
+ amount_with_fee = &tl->details.refund->refund_amount;
+ fee_claimed = &tl->details.refund->refund_fee;
+ TALER_ARL_amount_add (&refunds,
+ &refunds,
+ amount_with_fee);
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ fee_claimed);
+ /* Check if this refund is within the remit of the aggregation
+ we are investigating, if so, include it in the totals. */
+ if ( (0 == GNUNET_memcmp (merchant_pub,
+ &tl->details.refund->merchant_pub)) &&
+ (0 == GNUNET_memcmp (h_contract_terms,
+ &tl->details.refund->h_contract_terms)) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Detected applicable refund of %s\n",
+ TALER_amount2s (amount_with_fee));
+ TALER_ARL_amount_add (&merchant_loss,
+ &merchant_loss,
+ amount_with_fee);
+ }
+ /* Check that the fees given in the transaction list and in dki match */
if (0 !=
- TALER_amount_cmp (&fee_expected,
+ TALER_amount_cmp (&issue->fees.refund,
fee_claimed))
{
- /* Disagreement in fee structure between exchange and auditor */
- report_amount_arithmetic_inconsistency ("melt fee",
+ /* Disagreement in fee structure between exchange and auditor! */
+ report_amount_arithmetic_inconsistency ("refund fee",
0,
fee_claimed,
- &fee_expected,
+ &issue->fees.refund,
1);
}
+ break;
}
- break;
- case TALER_EXCHANGEDB_TT_REFUND:
- amount_with_fee = &tl->details.refund->refund_amount;
- fee_claimed = &tl->details.refund->refund_fee;
- TALER_ARL_amount_add (&refunds,
- &refunds,
- amount_with_fee);
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- fee_claimed);
- /* Check if this refund is within the remit of the aggregation
- we are investigating, if so, include it in the totals. */
- if ( (0 == GNUNET_memcmp (merchant_pub,
- &tl->details.refund->merchant_pub)) &&
- (0 == GNUNET_memcmp (h_contract_terms,
- &tl->details.refund->h_contract_terms)) )
+ case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP:
{
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Detected applicable refund of %s\n",
- TALER_amount2s (amount_with_fee));
- TALER_ARL_amount_add (&merchant_loss,
- &merchant_loss,
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.old_coin_recoup->value;
+ /* We count recoups of refreshed coins like refunds for the dirty old
+ coin, as they equivalently _increase_ the remaining value on the
+ _old_ coin */
+ TALER_ARL_amount_add (&refunds,
+ &refunds,
amount_with_fee);
- /* If there is a refund, we give back the deposit fee */
- refund_deposit_fee = GNUNET_YES;
+ break;
}
- /* Check that the fees given in the transaction list and in dki match */
+ case TALER_EXCHANGEDB_TT_RECOUP:
{
- struct TALER_Amount fee_expected;
+ const struct TALER_Amount *amount_with_fee;
- TALER_amount_ntoh (&fee_expected,
- &issue->fee_refund);
+ /* We count recoups of the coin as expenditures, as it
+ equivalently decreases the remaining value of the recouped coin. */
+ amount_with_fee = &tl->details.recoup->value;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
+ case TALER_EXCHANGEDB_TT_RECOUP_REFRESH:
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ /* We count recoups of the coin as expenditures, as it
+ equivalently decreases the remaining value of the recouped coin. */
+ amount_with_fee = &tl->details.recoup_refresh->value;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
+ case TALER_EXCHANGEDB_TT_PURSE_DEPOSIT:
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.purse_deposit->amount;
+ if (! tl->details.purse_deposit->refunded)
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
+
+ case TALER_EXCHANGEDB_TT_PURSE_REFUND:
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.purse_refund->refund_amount;
+ fee_claimed = &tl->details.purse_refund->refund_fee;
+ TALER_ARL_amount_add (&refunds,
+ &refunds,
+ amount_with_fee);
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ fee_claimed);
+ /* Check that the fees given in the transaction list and in dki match */
if (0 !=
- TALER_amount_cmp (&fee_expected,
+ TALER_amount_cmp (&issue->fees.refund,
fee_claimed))
{
/* Disagreement in fee structure between exchange and auditor! */
report_amount_arithmetic_inconsistency ("refund fee",
0,
fee_claimed,
- &fee_expected,
+ &issue->fees.refund,
1);
}
+ break;
}
- break;
- case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP:
- amount_with_fee = &tl->details.old_coin_recoup->value;
- /* We count recoups of refreshed coins like refunds for the dirty old
- coin, as they equivalently _increase_ the remaining value on the
- _old_ coin */
- TALER_ARL_amount_add (&refunds,
- &refunds,
- amount_with_fee);
- break;
- case TALER_EXCHANGEDB_TT_RECOUP:
- /* We count recoups of the coin as expenditures, as it
- equivalently decreases the remaining value of the recouped coin. */
- amount_with_fee = &tl->details.recoup->value;
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- amount_with_fee);
- break;
- case TALER_EXCHANGEDB_TT_RECOUP_REFRESH:
- /* We count recoups of the coin as expenditures, as it
- equivalently decreases the remaining value of the recouped coin. */
- amount_with_fee = &tl->details.recoup_refresh->value;
- TALER_ARL_amount_add (&expenditures,
- &expenditures,
- amount_with_fee);
- break;
- }
+
+ case TALER_EXCHANGEDB_TT_RESERVE_OPEN:
+ {
+ const struct TALER_Amount *amount_with_fee;
+
+ amount_with_fee = &tl->details.reserve_open->coin_contribution;
+ TALER_ARL_amount_add (&expenditures,
+ &expenditures,
+ amount_with_fee);
+ break;
+ }
+ } /* switch (tl->type) */
} /* for 'tl' */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -610,11 +645,15 @@ check_transaction_history_for_deposit (
"Aggregation loss due to refunds is %s\n",
TALER_amount2s (&merchant_loss));
*deposit_gain = *merchant_gain;
- if ( (GNUNET_YES == refund_deposit_fee) &&
- (NULL != deposit_fee) )
+ if ( (NULL != deposited) &&
+ (NULL != deposit_fee) &&
+ (0 == TALER_amount_cmp (&refunds,
+ deposited)) )
{
- /* We had a /deposit operation AND a /refund operation,
- and should thus not charge the merchant the /deposit fee */
+ /* We had a /deposit operation AND /refund operations adding up to the
+ total deposited value including deposit fee. Thus, we should not
+ subtract the /deposit fee from the merchant gain (as it was also
+ refunded). */
TALER_ARL_amount_add (merchant_gain,
merchant_gain,
deposit_fee);
@@ -667,18 +706,14 @@ check_transaction_history_for_deposit (
else
{
/* Now check that 'spent' is less or equal than the total coin value */
- struct TALER_Amount value;
-
- TALER_amount_ntoh (&value,
- &issue->value);
if (1 == TALER_amount_cmp (&spent,
- &value))
+ &issue->value))
{
/* spent > value */
report_coin_arithmetic_inconsistency ("spend",
coin_pub,
&spent,
- &value,
+ &issue->value,
-1);
}
}
@@ -691,7 +726,7 @@ check_transaction_history_for_deposit (
"Coin %s contributes %s to contract %s\n",
TALER_B2S (coin_pub),
TALER_amount2s (merchant_gain),
- GNUNET_h2s (h_contract_terms));
+ GNUNET_h2s (&h_contract_terms->hash));
return GNUNET_OK;
}
@@ -703,8 +738,8 @@ check_transaction_history_for_deposit (
* @param[in,out] cls a `struct WireCheckContext`
* @param rowid which row in the table is the information from (for diagnostics)
* @param merchant_pub public key of the merchant (should be same for all callbacks with the same @e cls)
- * @param h_wire hash of wire transfer details of the merchant (should be same for all callbacks with the same @e cls)
- * @param account_details where did we transfer the funds?
+ * @param account_pay_uri where did we transfer the funds?
+ * @param h_payto hash over @a account_payto_uri as it is in the DB
* @param exec_time execution time of the wire transfer (should be same for all callbacks with the same @e cls)
* @param h_contract_terms which proposal was this payment about
* @param denom_pub denomination of @a coin_pub
@@ -719,46 +754,53 @@ wire_transfer_information_cb (
void *cls,
uint64_t rowid,
const struct TALER_MerchantPublicKeyP *merchant_pub,
- const struct GNUNET_HashCode *h_wire,
- const json_t *account_details,
- struct GNUNET_TIME_Absolute exec_time,
- const struct GNUNET_HashCode *h_contract_terms,
+ const char *account_pay_uri,
+ const struct TALER_PaytoHashP *h_payto,
+ struct GNUNET_TIME_Timestamp exec_time,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_Amount *coin_value,
const struct TALER_Amount *deposit_fee)
{
struct WireCheckContext *wcc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct TALER_Amount computed_value;
struct TALER_Amount total_deposit_without_refunds;
struct TALER_EXCHANGEDB_TransactionList *tl;
struct TALER_CoinPublicInfo coin;
enum GNUNET_DB_QueryStatus qs;
- struct GNUNET_HashCode hw;
-
- if (GNUNET_OK !=
- TALER_JSON_merchant_wire_signature_hash (account_details,
- &hw))
+ struct TALER_PaytoHashP hpt;
+ uint64_t etag_out;
+
+ TALER_payto_hash (account_pay_uri,
+ &hpt);
+ if (0 !=
+ GNUNET_memcmp (&hpt,
+ h_payto))
{
- report_row_inconsistency ("aggregation",
+ report_row_inconsistency ("wire_targets",
rowid,
- "failed to compute hash of given wire data");
+ "h-payto does not match payto URI");
}
- else if (0 !=
- GNUNET_memcmp (&hw,
- h_wire))
+ /* Obtain coin's transaction history */
+ /* TODO: could use 'start' mechanism to only fetch transactions
+ we did not yet process, instead of going over them
+ again and again.*/
+
{
- report_row_inconsistency ("aggregation",
- rowid,
- "database contains wrong hash code for wire details");
+ struct TALER_Amount balance;
+ struct TALER_DenominationHashP h_denom_pub;
+
+ qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
+ coin_pub,
+ 0,
+ 0,
+ &etag_out,
+ &balance,
+ &h_denom_pub,
+ &tl);
}
-
- /* Obtain coin's transaction history */
- qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
- coin_pub,
- GNUNET_YES,
- &tl);
if ( (qs < 0) ||
(NULL == tl) )
{
@@ -788,7 +830,7 @@ wire_transfer_information_cb (
&issue);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
{
- GNUNET_CRYPTO_rsa_signature_free (coin.denom_sig.rsa_signature);
+ TALER_denom_sig_free (&coin.denom_sig);
TALER_ARL_edb->free_coin_transaction_list (TALER_ARL_edb->cls,
tl);
if (0 == qs)
@@ -819,7 +861,7 @@ wire_transfer_information_cb (
TALER_ARL_amount_add (&total_bad_sig_loss,
&total_bad_sig_loss,
coin_value);
- GNUNET_CRYPTO_rsa_signature_free (coin.denom_sig.rsa_signature);
+ TALER_denom_sig_free (&coin.denom_sig);
TALER_ARL_edb->free_coin_transaction_list (TALER_ARL_edb->cls,
tl);
report_row_inconsistency ("deposit",
@@ -827,8 +869,7 @@ wire_transfer_information_cb (
"coin denomination signature invalid");
return;
}
- GNUNET_CRYPTO_rsa_signature_free (coin.denom_sig.rsa_signature);
- coin.denom_sig.rsa_signature = NULL; /* just to be sure */
+ TALER_denom_sig_free (&coin.denom_sig);
GNUNET_assert (NULL != issue); /* mostly to help static analysis */
/* Check transaction history to see if it supports aggregate
valuation */
@@ -879,20 +920,21 @@ wire_transfer_information_cb (
"aggregation (contribution)",
rowid,
&coin_value_without_fee,
- &
- total_deposit_without_refunds,
+ &total_deposit_without_refunds,
-1);
}
}
/* Check other details of wire transfer match */
- if (0 != GNUNET_memcmp (h_wire,
- &wcc->h_wire))
+ if (0 != strcmp (account_pay_uri,
+ wcc->payto_uri))
{
report_row_inconsistency ("aggregation",
rowid,
"target of outgoing wire transfer do not match hash of wire from deposit");
}
- if (exec_time.abs_value_us != wcc->date.abs_value_us)
+ if (GNUNET_TIME_timestamp_cmp (exec_time,
+ !=,
+ wcc->date) )
{
/* This should be impossible from database constraints */
GNUNET_break (0);
@@ -924,7 +966,7 @@ wire_transfer_information_cb (
static const struct TALER_Amount *
get_wire_fee (struct AggregationContext *ac,
const char *method,
- struct GNUNET_TIME_Absolute timestamp)
+ struct GNUNET_TIME_Timestamp timestamp)
{
struct WireFeeInfo *wfi;
struct WireFeeInfo *pos;
@@ -933,10 +975,16 @@ get_wire_fee (struct AggregationContext *ac,
/* Check if fee is already loaded in cache */
for (pos = ac->fee_head; NULL != pos; pos = pos->next)
{
- if ( (pos->start_date.abs_value_us <= timestamp.abs_value_us) &&
- (pos->end_date.abs_value_us > timestamp.abs_value_us) )
- return &pos->wire_fee;
- if (pos->start_date.abs_value_us > timestamp.abs_value_us)
+ if (GNUNET_TIME_timestamp_cmp (pos->start_date,
+ <=,
+ timestamp) &&
+ GNUNET_TIME_timestamp_cmp (pos->end_date,
+ >,
+ timestamp) )
+ return &pos->fees.wire;
+ if (GNUNET_TIME_timestamp_cmp (pos->start_date,
+ >,
+ timestamp))
break;
}
@@ -948,8 +996,7 @@ get_wire_fee (struct AggregationContext *ac,
timestamp,
&wfi->start_date,
&wfi->end_date,
- &wfi->wire_fee,
- &wfi->closing_fee,
+ &wfi->fees,
&master_sig))
{
GNUNET_break (0);
@@ -966,13 +1013,12 @@ get_wire_fee (struct AggregationContext *ac,
method,
wfi->start_date,
wfi->end_date,
- &wfi->wire_fee,
- &wfi->closing_fee,
+ &wfi->fees,
&TALER_ARL_master_pub,
&master_sig))
{
report_row_inconsistency ("wire-fee",
- timestamp.abs_value_us,
+ timestamp.abs_time.abs_value_us,
"wire fee signature invalid at given time");
}
}
@@ -980,8 +1026,8 @@ get_wire_fee (struct AggregationContext *ac,
/* Established fee, keep in sorted list */
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Wire fee is %s starting at %s\n",
- TALER_amount2s (&wfi->wire_fee),
- GNUNET_STRINGS_absolute_time_to_string (wfi->start_date));
+ TALER_amount2s (&wfi->fees.wire),
+ GNUNET_TIME_timestamp2s (wfi->start_date));
if ( (NULL == pos) ||
(NULL == pos->prev) )
GNUNET_CONTAINER_DLL_insert (ac->fee_head,
@@ -994,7 +1040,9 @@ get_wire_fee (struct AggregationContext *ac,
wfi);
/* Check non-overlaping fee invariant */
if ( (NULL != wfi->prev) &&
- (wfi->prev->end_date.abs_value_us > wfi->start_date.abs_value_us) )
+ GNUNET_TIME_timestamp_cmp (wfi->prev->end_date,
+ >,
+ wfi->start_date) )
{
TALER_ARL_report (report_fee_time_inconsistencies,
GNUNET_JSON_PACK (
@@ -1003,10 +1051,12 @@ get_wire_fee (struct AggregationContext *ac,
GNUNET_JSON_pack_string ("diagnostic",
"start date before previous end date"),
TALER_JSON_pack_time_abs_human ("time",
- wfi->start_date)));
+ wfi->start_date.abs_time)));
}
if ( (NULL != wfi->next) &&
- (wfi->next->start_date.abs_value_us >= wfi->end_date.abs_value_us) )
+ GNUNET_TIME_timestamp_cmp (wfi->next->start_date,
+ >=,
+ wfi->end_date) )
{
TALER_ARL_report (report_fee_time_inconsistencies,
GNUNET_JSON_PACK (
@@ -1015,9 +1065,9 @@ get_wire_fee (struct AggregationContext *ac,
GNUNET_JSON_pack_string ("diagnostic",
"end date date after next start date"),
TALER_JSON_pack_time_abs_human ("time",
- wfi->end_date)));
+ wfi->end_date.abs_time)));
}
- return &wfi->wire_fee;
+ return &wfi->fees.wire;
}
@@ -1029,16 +1079,16 @@ get_wire_fee (struct AggregationContext *ac,
* @param rowid identifier of the respective row in the database
* @param date timestamp of the wire transfer (roughly)
* @param wtid wire transfer subject
- * @param wire wire transfer details of the receiver
+ * @param payto_uri bank account details of the receiver
* @param amount amount that was wired
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to stop iteration
*/
-static int
+static enum GNUNET_GenericReturnValue
check_wire_out_cb (void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute date,
+ struct GNUNET_TIME_Timestamp date,
const struct TALER_WireTransferIdentifierRawP *wtid,
- const json_t *wire,
+ const char *payto_uri,
const struct TALER_Amount *amount)
{
struct AggregationContext *ac = cls;
@@ -1049,15 +1099,16 @@ check_wire_out_cb (void *cls,
char *method;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppa.last_wire_out_serial_id);
- ppa.last_wire_out_serial_id = rowid + 1;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id));
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id) = rowid + 1;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Checking wire transfer %s over %s performed on %s\n",
TALER_B2S (wtid),
TALER_amount2s (amount),
- GNUNET_STRINGS_absolute_time_to_string (date));
- if (NULL == (method = TALER_JSON_wire_to_method (wire)))
+ GNUNET_TIME_timestamp2s (date));
+ if (NULL == (method = TALER_payto_get_method (payto_uri)))
{
report_row_inconsistency ("wire_out",
rowid,
@@ -1071,14 +1122,7 @@ check_wire_out_cb (void *cls,
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (amount->currency,
&wcc.total_deposits));
- if (GNUNET_OK !=
- TALER_JSON_merchant_wire_signature_hash (wire,
- &wcc.h_wire))
- {
- GNUNET_break (0);
- GNUNET_free (method);
- return GNUNET_SYSERR;
- }
+ wcc.payto_uri = payto_uri;
qs = TALER_ARL_edb->lookup_wire_transfer (TALER_ARL_edb->cls,
wtid,
&wire_transfer_information_cb,
@@ -1096,7 +1140,7 @@ check_wire_out_cb (void *cls,
in #wire_transfer_information_cb, so here we
only log for debugging */
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Inconsitency for wire_out %llu (WTID %s) detected\n",
+ "Inconsistency for wire_out %llu (WTID %s) detected\n",
(unsigned long long) rowid,
TALER_B2S (wtid));
}
@@ -1112,7 +1156,7 @@ check_wire_out_cb (void *cls,
if (NULL == wire_fee)
{
report_row_inconsistency ("wire-fee",
- date.abs_value_us,
+ date.abs_time.abs_value_us,
"wire fee unavailable for given time");
/* If fee is unknown, we just assume the fee is zero */
final_amount = wcc.total_deposits;
@@ -1144,8 +1188,8 @@ check_wire_out_cb (void *cls,
&wcc.total_deposits,
&final_amount);
/* Sum up aggregation fees (we simply include the rounding gains) */
- TALER_ARL_amount_add (&total_aggregation_fee_income,
- &total_aggregation_fee_income,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (aggregation_total_wire_fee_revenue),
+ &TALER_ARL_USE_AB (aggregation_total_wire_fee_revenue),
&exchange_gain);
/* Check that calculated amount matches actual amount */
@@ -1178,8 +1222,8 @@ check_wire_out_cb (void *cls,
TALER_ARL_report (report_wire_out_inconsistencies,
GNUNET_JSON_PACK (
- GNUNET_JSON_pack_object_incref ("destination_account",
- (json_t *) wire),
+ GNUNET_JSON_pack_string ("destination_account",
+ payto_uri),
GNUNET_JSON_pack_uint64 ("rowid",
rowid),
TALER_JSON_pack_amount ("expected",
@@ -1217,9 +1261,10 @@ analyze_aggregations (void *cls)
(void) cls;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Analyzing aggregations\n");
- qsp = TALER_ARL_adb->get_auditor_progress_aggregation (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppa);
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (aggregation_last_wire_out_serial_id),
+ NULL);
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -1232,18 +1277,19 @@ analyze_aggregations (void *cls)
}
else
{
- ppa_start = ppa;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Resuming aggregation audit at %llu\n",
- (unsigned long long) ppa.last_wire_out_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ aggregation_last_wire_out_serial_id));
}
memset (&ac,
0,
sizeof (ac));
- qsx = TALER_ARL_adb->get_wire_fee_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_aggregation_fee_income);
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (aggregation_total_wire_fee_revenue),
+ NULL);
if (0 > qsx)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
@@ -1252,7 +1298,7 @@ analyze_aggregations (void *cls)
ac.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
qs = TALER_ARL_edb->select_wire_out_above_serial_id (
TALER_ARL_edb->cls,
- ppa.last_wire_out_serial_id,
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id),
&check_wire_out_cb,
&ac);
if (0 > qs)
@@ -1278,30 +1324,30 @@ analyze_aggregations (void *cls)
return ac.qs;
}
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsx)
- ac.qs = TALER_ARL_adb->insert_wire_fee_summary (
+ ac.qs = TALER_ARL_adb->insert_balance (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_aggregation_fee_income);
+ TALER_ARL_SET_AB (aggregation_total_wire_fee_revenue),
+ NULL);
else
- ac.qs = TALER_ARL_adb->update_wire_fee_summary (
+ ac.qs = TALER_ARL_adb->update_balance (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_aggregation_fee_income);
+ TALER_ARL_SET_AB (aggregation_total_wire_fee_revenue),
+ NULL);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != ac.qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == ac.qs);
return ac.qs;
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_aggregation (
+ qs = TALER_ARL_adb->update_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppa);
+ TALER_ARL_SET_PP (aggregation_last_wire_out_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_aggregation (
+ qs = TALER_ARL_adb->insert_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppa);
+ TALER_ARL_SET_PP (aggregation_last_wire_out_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -1311,7 +1357,8 @@ analyze_aggregations (void *cls)
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Concluded aggregation audit step at %llu\n",
- (unsigned long long) ppa.last_wire_out_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ aggregation_last_wire_out_serial_id));
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
}
@@ -1346,7 +1393,8 @@ run (void *cls,
"Starting audit\n");
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_aggregation_fee_income));
+ &TALER_ARL_USE_AB (
+ aggregation_total_wire_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_wire_out_delta_plus));
@@ -1440,14 +1488,14 @@ run (void *cls,
"total_arithmetic_delta_minus",
&total_arithmetic_delta_minus),
TALER_JSON_pack_amount (
- "total_aggregation_fee_income",
- &total_aggregation_fee_income),
+ "aggregation_total_wire_fee_revenue",
+ &TALER_ARL_USE_AB (aggregation_total_wire_fee_revenue)),
GNUNET_JSON_pack_uint64 (
"start_ppa_wire_out_serial_id",
- ppa_start.last_wire_out_serial_id),
+ 0 /* defunct */),
GNUNET_JSON_pack_uint64 (
"end_ppa_wire_out_serial_id",
- ppa.last_wire_out_serial_id),
+ TALER_ARL_USE_PP (aggregation_last_wire_out_serial_id)),
/* block #4 */
TALER_JSON_pack_time_abs_human (
"auditor_start_time",
@@ -1477,11 +1525,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-coins.c b/src/auditor/taler-helper-auditor-coins.c
index ba9cf6d18..f88f39eaf 100644
--- a/src/auditor/taler-helper-auditor-coins.c
+++ b/src/auditor/taler-helper-auditor-coins.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2024 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -17,9 +17,6 @@
* @file auditor/taler-helper-auditor-coins.c
* @brief audits coins in an exchange database.
* @author Christian Grothoff
- *
- * UNDECIDED:
- * - do we care about checking the 'done' flag in deposit_cb?
*/
#include "platform.h"
#include <gnunet/gnunet_util_lib.h>
@@ -48,14 +45,37 @@
static int global_ret;
/**
- * Checkpointing our progress for coins.
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
*/
-static struct TALER_AUDITORDB_ProgressPointCoin ppc;
+static int test_mode;
/**
* Checkpointing our progress for coins.
*/
-static struct TALER_AUDITORDB_ProgressPointCoin ppc_start;
+static TALER_ARL_DEF_PP (coins_withdraw_serial_id);
+static TALER_ARL_DEF_PP (coins_deposit_serial_id);
+static TALER_ARL_DEF_PP (coins_melt_serial_id);
+static TALER_ARL_DEF_PP (coins_refund_serial_id);
+static TALER_ARL_DEF_PP (coins_recoup_serial_id);
+static TALER_ARL_DEF_PP (coins_recoup_refresh_serial_id);
+static TALER_ARL_DEF_PP (coins_purse_deposits_serial_id);
+static TALER_ARL_DEF_PP (coins_purse_refunds_serial_id);
+
+
+/**
+ * Global coin balance sheet (for coins).
+ */
+static TALER_ARL_DEF_AB (coin_balance_risk);
+static TALER_ARL_DEF_AB (total_escrowed);
+static TALER_ARL_DEF_AB (coin_irregular_loss);
+static TALER_ARL_DEF_AB (coin_melt_fee_revenue);
+static TALER_ARL_DEF_AB (coin_deposit_fee_revenue);
+static TALER_ARL_DEF_AB (coin_refund_fee_revenue);
+static TALER_ARL_DEF_AB (total_recoup_loss);
+
/**
* Array of reports about denomination keys with an
@@ -70,7 +90,7 @@ static json_t *report_emergencies;
static json_t *report_emergencies_by_count;
/**
- * Array of reports about row inconsitencies.
+ * Array of reports about row inconsistencies.
*/
static json_t *report_row_inconsistencies;
@@ -115,40 +135,6 @@ static struct TALER_Amount reported_emergency_loss;
*/
static struct TALER_Amount reported_emergency_loss_by_count;
-/**
- * Expected balance in the escrow account.
- */
-static struct TALER_Amount total_escrow_balance;
-
-/**
- * Active risk exposure.
- */
-static struct TALER_Amount total_risk;
-
-/**
- * Actualized risk (= loss) from recoups.
- */
-static struct TALER_Amount total_recoup_loss;
-
-/**
- * Recoups we made on denominations that were not revoked (!?).
- */
-static struct TALER_Amount total_irregular_recoups;
-
-/**
- * Total deposit fees earned.
- */
-static struct TALER_Amount total_deposit_fee_income;
-
-/**
- * Total melt fees earned.
- */
-static struct TALER_Amount total_melt_fee_income;
-
-/**
- * Total refund fees earned.
- */
-static struct TALER_Amount total_refund_fee_income;
/**
* Array of reports about coin operations with bad signatures.
@@ -156,15 +142,10 @@ static struct TALER_Amount total_refund_fee_income;
static json_t *report_bad_sig_losses;
/**
- * Total amount lost by operations for which signatures were invalid.
- */
-static struct TALER_Amount total_bad_sig_loss;
-
-/**
* Array of refresh transactions where the /refresh/reveal has not yet
* happened (and may of course never happen).
*/
-static json_t *report_refreshs_hanging;
+static json_t *report_refreshes_hanging;
/**
* Total amount lost by operations for which signatures were invalid.
@@ -210,9 +191,9 @@ coin_history_index (const struct TALER_CoinSpendPublicKeyP *coin_pub)
{
uint32_t i;
- memcpy (&i,
- coin_pub,
- sizeof (i));
+ GNUNET_memcpy (&i,
+ coin_pub,
+ sizeof (i));
return i % MAX_COIN_HISTORIES;
}
@@ -248,8 +229,9 @@ get_cached_history (const struct TALER_CoinSpendPublicKeyP *coin_pub)
{
unsigned int i = coin_history_index (coin_pub);
- if (0 == GNUNET_memcmp (coin_pub,
- &coin_histories[i].coin_pub))
+ if (0 ==
+ GNUNET_memcmp (coin_pub,
+ &coin_histories[i].coin_pub))
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Found verification of %s in cache\n",
@@ -276,28 +258,29 @@ get_cached_history (const struct TALER_CoinSpendPublicKeyP *coin_pub)
*/
static void
report_emergency_by_amount (
- const struct TALER_DenominationKeyValidityPS *issue,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
const struct TALER_Amount *risk,
const struct TALER_Amount *loss)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Reporting emergency on denomination `%s' over loss of %s\n",
- GNUNET_h2s (&issue->denom_hash),
+ GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (loss));
- TALER_ARL_report (report_emergencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_data_auto ("denompub_hash",
- &issue->denom_hash),
- TALER_JSON_pack_amount ("denom_risk",
- risk),
- TALER_JSON_pack_amount ("denom_loss",
- loss),
- TALER_JSON_pack_time_abs_nbo_human ("start",
- issue->start),
- TALER_JSON_pack_time_abs_nbo_human ("deposit_end",
- issue->expire_deposit),
- TALER_JSON_pack_amount_nbo ("value",
- &issue->value)));
+ TALER_ARL_report (
+ report_emergencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("denompub_hash",
+ &issue->denom_hash),
+ TALER_JSON_pack_amount ("denom_risk",
+ risk),
+ TALER_JSON_pack_amount ("denom_loss",
+ loss),
+ TALER_JSON_pack_time_abs_human ("start",
+ issue->start.abs_time),
+ TALER_JSON_pack_time_abs_human ("deposit_end",
+ issue->expire_deposit.abs_time),
+ TALER_JSON_pack_amount ("value",
+ &issue->value)));
TALER_ARL_amount_add (&reported_emergency_risk_by_amount,
&reported_emergency_risk_by_amount,
risk);
@@ -323,38 +306,35 @@ report_emergency_by_amount (
*/
static void
report_emergency_by_count (
- const struct TALER_DenominationKeyValidityPS *issue,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
uint64_t num_issued,
uint64_t num_known,
const struct TALER_Amount *risk)
{
- struct TALER_Amount denom_value;
-
- TALER_ARL_report (report_emergencies_by_count,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_data_auto ("denompub_hash",
- &issue->denom_hash),
- GNUNET_JSON_pack_uint64 ("num_issued",
- num_issued),
- GNUNET_JSON_pack_uint64 ("num_known",
- num_known),
- TALER_JSON_pack_amount ("denom_risk",
- risk),
- TALER_JSON_pack_time_abs_nbo_human ("start",
- issue->start),
- TALER_JSON_pack_time_abs_nbo_human ("deposit_end",
- issue->expire_deposit),
- TALER_JSON_pack_amount_nbo ("value",
- &issue->value)));
+ TALER_ARL_report (
+ report_emergencies_by_count,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("denompub_hash",
+ &issue->denom_hash),
+ GNUNET_JSON_pack_uint64 ("num_issued",
+ num_issued),
+ GNUNET_JSON_pack_uint64 ("num_known",
+ num_known),
+ TALER_JSON_pack_amount ("denom_risk",
+ risk),
+ TALER_JSON_pack_time_abs_human ("start",
+ issue->start.abs_time),
+ TALER_JSON_pack_time_abs_human ("deposit_end",
+ issue->expire_deposit.abs_time),
+ TALER_JSON_pack_amount ("value",
+ &issue->value)));
TALER_ARL_amount_add (&reported_emergency_risk_by_count,
&reported_emergency_risk_by_count,
risk);
- TALER_amount_ntoh (&denom_value,
- &issue->value);
for (uint64_t i = num_issued; i<num_known; i++)
TALER_ARL_amount_add (&reported_emergency_loss_by_count,
&reported_emergency_loss_by_count,
- &denom_value);
+ &issue->value);
}
@@ -473,15 +453,27 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
struct TALER_Amount spent;
struct TALER_Amount refunded;
struct TALER_Amount deposit_fee;
- int have_refund;
+ bool have_refund;
+ uint64_t etag_out;
+
+ /* TODO: could use 'etag' mechanism to only fetch transactions
+ we did not yet process, instead of going over them
+ again and again. */
+ {
+ struct TALER_Amount balance;
+ struct TALER_DenominationHashP h_denom_pub;
- qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
- coin_pub,
- GNUNET_YES,
- &tl);
+ qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
+ coin_pub,
+ 0,
+ 0,
+ &etag_out,
+ &balance,
+ &h_denom_pub,
+ &tl);
+ }
if (0 >= qs)
return qs;
-
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (value->currency,
&refunded));
@@ -491,7 +483,7 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (value->currency,
&deposit_fee));
- have_refund = GNUNET_NO;
+ have_refund = false;
for (struct TALER_EXCHANGEDB_TransactionList *pos = tl;
NULL != pos;
pos = pos->next)
@@ -519,7 +511,7 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
TALER_ARL_amount_add (&spent,
&spent,
&pos->details.refund->refund_fee);
- have_refund = GNUNET_YES;
+ have_refund = true;
break;
case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP:
/* refunded += pos->value */
@@ -539,8 +531,28 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
&spent,
&pos->details.recoup_refresh->value);
break;
- }
- }
+ case TALER_EXCHANGEDB_TT_PURSE_DEPOSIT:
+ /* spent += pos->value */
+ TALER_ARL_amount_add (&spent,
+ &spent,
+ &pos->details.purse_deposit->amount);
+ break;
+ case TALER_EXCHANGEDB_TT_PURSE_REFUND:
+ TALER_ARL_amount_add (&refunded,
+ &refunded,
+ &tl->details.purse_refund->refund_amount);
+ TALER_ARL_amount_add (&spent,
+ &spent,
+ &pos->details.purse_refund->refund_fee);
+ have_refund = true;
+ break;
+ case TALER_EXCHANGEDB_TT_RESERVE_OPEN:
+ TALER_ARL_amount_add (&spent,
+ &spent,
+ &tl->details.reserve_open->coin_contribution);
+ break;
+ } /* switch (pos->type) */
+ } /* for (...) */
if (have_refund)
{
@@ -591,56 +603,32 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
struct DenominationSummary
{
/**
- * Total value of outstanding (not deposited) coins issued with this
- * denomination key.
+ * Information about the circulation.
*/
- struct TALER_Amount denom_balance;
-
- /**
- * Total losses made (once coins deposited exceed
- * coins withdrawn and thus the @e denom_balance is
- * effectively negative).
- */
- struct TALER_Amount denom_loss;
-
- /**
- * Total value of coins issued with this denomination key.
- */
- struct TALER_Amount denom_risk;
-
- /**
- * Total value of coins subjected to recoup with this denomination key.
- */
- struct TALER_Amount denom_recoup;
-
- /**
- * How many coins (not their amount!) of this denomination
- * did the exchange issue overall?
- */
- uint64_t num_issued;
+ struct TALER_AUDITORDB_DenominationCirculationData dcd;
/**
* Denomination key information for this denomination.
*/
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
/**
- * #GNUNET_YES if this record already existed in the DB.
+ * True if this record already existed in the DB.
* Used to decide between insert/update in
* #sync_denomination().
*/
- int in_db;
+ bool in_db;
/**
* Should we report an emergency for this denomination, causing it to be
* revoked (because more coins were deposited than issued)?
*/
- int report_emergency;
+ bool report_emergency;
/**
- * #GNUNET_YES if this denomination was revoked.
+ * True if this denomination was revoked.
*/
- int was_revoked;
+ bool was_revoked;
};
@@ -671,7 +659,7 @@ struct CoinContext
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
-init_denomination (const struct GNUNET_HashCode *denom_hash,
+init_denomination (const struct TALER_DenominationHashP *denom_hash,
struct DenominationSummary *ds)
{
enum GNUNET_DB_QueryStatus qs;
@@ -680,11 +668,7 @@ init_denomination (const struct GNUNET_HashCode *denom_hash,
qs = TALER_ARL_adb->get_denomination_balance (TALER_ARL_adb->cls,
denom_hash,
- &ds->denom_balance,
- &ds->denom_loss,
- &ds->denom_risk,
- &ds->denom_recoup,
- &ds->num_issued);
+ &ds->dcd);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -692,28 +676,28 @@ init_denomination (const struct GNUNET_HashCode *denom_hash,
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
{
- ds->in_db = GNUNET_YES;
+ ds->in_db = true;
}
else
{
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_balance));
+ &ds->dcd.denom_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_loss));
+ &ds->dcd.denom_loss));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_risk));
+ &ds->dcd.denom_risk));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &ds->denom_recoup));
+ &ds->dcd.recoup_loss));
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting balance for denomination `%s' is %s (%llu)\n",
- GNUNET_h2s (denom_hash),
- TALER_amount2s (&ds->denom_balance),
- (unsigned long long) ds->num_issued);
+ GNUNET_h2s (&denom_hash->hash),
+ TALER_amount2s (&ds->dcd.denom_balance),
+ (unsigned long long) ds->dcd.num_issued);
qs = TALER_ARL_edb->get_denomination_revocation (TALER_ARL_edb->cls,
denom_hash,
&msig,
@@ -738,10 +722,10 @@ init_denomination (const struct GNUNET_HashCode *denom_hash,
}
else
{
- ds->was_revoked = GNUNET_YES;
+ ds->was_revoked = true;
}
}
- return (GNUNET_YES == ds->in_db)
+ return ds->in_db
? GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
: GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
}
@@ -756,14 +740,15 @@ init_denomination (const struct GNUNET_HashCode *denom_hash,
* @return NULL on error
*/
static struct DenominationSummary *
-get_denomination_summary (struct CoinContext *cc,
- const struct TALER_DenominationKeyValidityPS *issue,
- const struct GNUNET_HashCode *dh)
+get_denomination_summary (
+ struct CoinContext *cc,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
+ const struct TALER_DenominationHashP *dh)
{
struct DenominationSummary *ds;
ds = GNUNET_CONTAINER_multihashmap_get (cc->denom_summaries,
- dh);
+ &dh->hash);
if (NULL != ds)
return ds;
ds = GNUNET_new (struct DenominationSummary);
@@ -777,7 +762,7 @@ get_denomination_summary (struct CoinContext *cc,
}
GNUNET_assert (GNUNET_OK ==
GNUNET_CONTAINER_multihashmap_put (cc->denom_summaries,
- dh,
+ &dh->hash,
ds,
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
return ds;
@@ -794,66 +779,68 @@ get_denomination_summary (struct CoinContext *cc,
* @param value a `struct DenominationSummary`
* @return #GNUNET_OK (continue to iterate)
*/
-static int
+static enum GNUNET_GenericReturnValue
sync_denomination (void *cls,
const struct GNUNET_HashCode *denom_hash,
void *value)
{
struct CoinContext *cc = cls;
+ struct TALER_DenominationHashP denom_h = {
+ .hash = *denom_hash
+ };
struct DenominationSummary *ds = value;
- const struct TALER_DenominationKeyValidityPS *issue = ds->issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue = ds->issue;
struct GNUNET_TIME_Absolute now;
- struct GNUNET_TIME_Absolute expire_deposit;
+ struct GNUNET_TIME_Timestamp expire_deposit;
struct GNUNET_TIME_Absolute expire_deposit_grace;
enum GNUNET_DB_QueryStatus qs;
now = GNUNET_TIME_absolute_get ();
- expire_deposit = GNUNET_TIME_absolute_ntoh (issue->expire_deposit);
+ expire_deposit = issue->expire_deposit;
/* add day grace period to deal with clocks not being perfectly synchronized */
- expire_deposit_grace = GNUNET_TIME_absolute_add (expire_deposit,
+ expire_deposit_grace = GNUNET_TIME_absolute_add (expire_deposit.abs_time,
DEPOSIT_GRACE_PERIOD);
- if (now.abs_value_us > expire_deposit_grace.abs_value_us)
+ if (GNUNET_TIME_absolute_cmp (now,
+ >,
+ expire_deposit_grace) )
{
/* Denomination key has expired, book remaining balance of
outstanding coins as revenue; and reduce cc->risk exposure. */
if (ds->in_db)
qs = TALER_ARL_adb->del_denomination_balance (TALER_ARL_adb->cls,
- denom_hash);
+ &denom_h);
else
qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
if ( (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) &&
- ( (0 != ds->denom_risk.value) ||
- (0 != ds->denom_risk.fraction) ) )
+ (! TALER_amount_is_zero (&ds->dcd.denom_risk)) )
{
/* The denomination expired and carried a balance; we can now
book the remaining balance as profit, and reduce our risk
exposure by the accumulated risk of the denomination. */
- TALER_ARL_amount_subtract (&total_risk,
- &total_risk,
- &ds->denom_risk);
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ &ds->dcd.denom_risk);
/* If the above fails, our risk assessment is inconsistent!
This is really, really bad (auditor-internal invariant
would be violated). Hence we can "safely" assert. If
this assertion fails, well, good luck: there is a bug
- in the auditor _or_ the auditor's database is corrupt. *///
+ in the auditor _or_ the auditor's database is corrupt. */
}
if ( (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) &&
- ( (0 != ds->denom_balance.value) ||
- (0 != ds->denom_balance.fraction) ) )
+ (! TALER_amount_is_zero (&ds->dcd.denom_balance)) )
{
/* book denom_balance coin expiration profits! */
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Denomination `%s' expired, booking %s in expiration profits\n",
GNUNET_h2s (denom_hash),
- TALER_amount2s (&ds->denom_balance));
+ TALER_amount2s (&ds->dcd.denom_balance));
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
(qs = TALER_ARL_adb->insert_historic_denom_revenue (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- denom_hash,
+ &denom_h,
expire_deposit,
- &ds->denom_balance,
- &ds->denom_recoup)))
+ &ds->dcd.denom_balance,
+ &ds->dcd.recoup_loss)))
{
/* Failed to store profits? Bad database */
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -870,10 +857,10 @@ sync_denomination (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Final balance for denomination `%s' is %s (%llu)\n",
GNUNET_h2s (denom_hash),
- TALER_amount2s (&ds->denom_balance),
- (unsigned long long) ds->num_issued);
+ TALER_amount2s (&ds->dcd.denom_balance),
+ (unsigned long long) ds->dcd.num_issued);
cnt = TALER_ARL_edb->count_known_coins (TALER_ARL_edb->cls,
- denom_hash);
+ &denom_h);
if (0 > cnt)
{
/* Failed to obtain count? Bad database */
@@ -883,39 +870,31 @@ sync_denomination (void *cls,
}
else
{
- if (ds->num_issued < (uint64_t) cnt)
+ if (ds->dcd.num_issued < (uint64_t) cnt)
{
/* more coins deposited than issued! very bad */
report_emergency_by_count (issue,
- ds->num_issued,
+ ds->dcd.num_issued,
cnt,
- &ds->denom_risk);
+ &ds->dcd.denom_risk);
}
- if (GNUNET_YES == ds->report_emergency)
+ if (ds->report_emergency)
{
/* Value of coins deposited exceed value of coins
issued! Also very bad! */
report_emergency_by_amount (issue,
- &ds->denom_risk,
- &ds->denom_loss);
+ &ds->dcd.denom_risk,
+ &ds->dcd.denom_loss);
}
if (ds->in_db)
qs = TALER_ARL_adb->update_denomination_balance (TALER_ARL_adb->cls,
- denom_hash,
- &ds->denom_balance,
- &ds->denom_loss,
- &ds->denom_risk,
- &ds->denom_recoup,
- ds->num_issued);
+ &denom_h,
+ &ds->dcd);
else
qs = TALER_ARL_adb->insert_denomination_balance (TALER_ARL_adb->cls,
- denom_hash,
- &ds->denom_balance,
- &ds->denom_loss,
- &ds->denom_risk,
- &ds->denom_recoup,
- ds->num_issued);
+ &denom_h,
+ &ds->dcd);
}
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
@@ -953,21 +932,20 @@ sync_denomination (void *cls,
* @param amount_with_fee amount that was withdrawn
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
withdraw_cb (void *cls,
uint64_t rowid,
- const struct GNUNET_HashCode *h_blind_ev,
+ const struct TALER_BlindedCoinHashP *h_blind_ev,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_ReserveSignatureP *reserve_sig,
- struct GNUNET_TIME_Absolute execution_date,
+ struct GNUNET_TIME_Timestamp execution_date,
const struct TALER_Amount *amount_with_fee)
{
struct CoinContext *cc = cls;
struct DenominationSummary *ds;
- struct GNUNET_HashCode dh;
- const struct TALER_DenominationKeyValidityPS *issue;
- struct TALER_Amount value;
+ struct TALER_DenominationHashP dh;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
enum GNUNET_DB_QueryStatus qs;
/* Note: some optimization potential here: lots of fields we
@@ -978,8 +956,9 @@ withdraw_cb (void *cls,
(void) execution_date;
(void) amount_with_fee;
- GNUNET_assert (rowid >= ppc.last_withdraw_serial_id); /* should be monotonically increasing */
- ppc.last_withdraw_serial_id = rowid + 1;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_withdraw_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_withdraw_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1009,29 +988,27 @@ withdraw_cb (void *cls,
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == cc->qs);
return GNUNET_SYSERR;
}
- TALER_amount_ntoh (&value,
- &issue->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Issued coin in denomination `%s' of total value %s\n",
- GNUNET_h2s (&dh),
- TALER_amount2s (&value));
- ds->num_issued++;
- TALER_ARL_amount_add (&ds->denom_balance,
- &ds->denom_balance,
- &value);
+ GNUNET_h2s (&dh.hash),
+ TALER_amount2s (&issue->value));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' is %s\n",
- GNUNET_h2s (&dh),
- TALER_amount2s (&ds->denom_balance));
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
- &value);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
- &value);
- TALER_ARL_amount_add (&ds->denom_risk,
- &ds->denom_risk,
- &value);
+ GNUNET_h2s (&dh.hash),
+ TALER_amount2s (&ds->dcd.denom_balance));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
+ &issue->value);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ &issue->value);
+ ds->dcd.num_issued++;
+ TALER_ARL_amount_add (&ds->dcd.denom_balance,
+ &ds->dcd.denom_balance,
+ &issue->value);
+ TALER_ARL_amount_add (&ds->dcd.denom_risk,
+ &ds->dcd.denom_risk,
+ &issue->value);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -1047,7 +1024,7 @@ struct RevealContext
/**
* Denomination public data of the new coins.
*/
- const struct TALER_DenominationKeyValidityPS **new_issues;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation **new_issues;
/**
* Set to the size of the @a new_issues array.
@@ -1064,7 +1041,7 @@ struct RevealContext
* #GNUNET_NO if a denomination key was not found
* #GNUNET_SYSERR if we had a database error.
*/
- int err;
+ enum GNUNET_GenericReturnValue err;
/**
* Database error, if @e err is #GNUNET_SYSERR.
@@ -1079,30 +1056,18 @@ struct RevealContext
* @param cls closure with a `struct RevealContext *` in it
* @param num_freshcoins size of the @a rrcs array
* @param rrcs array of @a num_freshcoins information about coins to be created
- * @param num_tprivs number of entries in @a tprivs, should be #TALER_CNC_KAPPA - 1
- * @param tprivs array of @e num_tprivs transfer private keys
- * @param tp transfer public key information
*/
static void
reveal_data_cb (void *cls,
uint32_t num_freshcoins,
- const struct TALER_EXCHANGEDB_RefreshRevealedCoin *rrcs,
- unsigned int num_tprivs,
- const struct TALER_TransferPrivateKeyP *tprivs,
- const struct TALER_TransferPublicKeyP *tp)
+ const struct TALER_EXCHANGEDB_RefreshRevealedCoin *rrcs)
{
struct RevealContext *rctx = cls;
- /* Note: optimization using custom database accessor API could avoid
- fetching these fields -- and we */
- (void) num_tprivs;
- (void) tprivs;
- (void) tp;
-
rctx->num_freshcoins = num_freshcoins;
rctx->new_issues = GNUNET_new_array (
num_freshcoins,
- const struct TALER_DenominationKeyValidityPS *);
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *);
/* Update outstanding amounts for all new coin's denominations */
for (unsigned int i = 0; i<num_freshcoins; i++)
@@ -1110,9 +1075,8 @@ reveal_data_cb (void *cls,
enum GNUNET_DB_QueryStatus qs;
/* lookup new coin denomination key */
- qs = TALER_ARL_get_denomination_info (&rrcs[i].denom_pub,
- &rctx->new_issues[i],
- NULL);
+ qs = TALER_ARL_get_denomination_info_by_hash (&rrcs[i].h_denom_pub,
+ &rctx->new_issues[i]);
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
report_row_inconsistency ("refresh_reveal",
@@ -1146,26 +1110,23 @@ reveal_data_cb (void *cls,
* #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
*/
static enum GNUNET_DB_QueryStatus
-check_known_coin (const char *operation,
- const struct TALER_DenominationKeyValidityPS *issue,
- uint64_t rowid,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_Amount *loss_potential)
+check_known_coin (
+ const char *operation,
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue,
+ uint64_t rowid,
+ const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_DenominationPublicKey *denom_pub,
+ const struct TALER_Amount *loss_potential)
{
struct TALER_CoinPublicInfo ci;
enum GNUNET_DB_QueryStatus qs;
if (NULL == get_cached_history (coin_pub))
{
- struct TALER_Amount value;
-
- TALER_amount_ntoh (&value,
- &issue->value);
qs = check_coin_history (coin_pub,
rowid,
operation,
- &value);
+ &issue->value);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -1200,16 +1161,75 @@ check_known_coin (const char *operation,
loss_potential),
GNUNET_JSON_pack_data_auto ("coin_pub",
coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
loss_potential);
}
- GNUNET_CRYPTO_rsa_signature_free (ci.denom_sig.rsa_signature);
+ TALER_denom_sig_free (&ci.denom_sig);
return qs;
}
/**
+ * Update the denom balance in @a dso reducing it by
+ * @a amount_with_fee. If this is not possible, report
+ * an emergency. Also updates the balance.
+ *
+ * @param dso denomination summary to update
+ * @param rowid responsible row (for logging)
+ * @param amount_with_fee amount to subtract
+ */
+static void
+reduce_denom_balance (struct DenominationSummary *dso,
+ uint64_t rowid,
+ const struct TALER_Amount *amount_with_fee)
+{
+ struct TALER_Amount tmp;
+
+ if (TALER_ARL_SR_INVALID_NEGATIVE ==
+ TALER_ARL_amount_subtract_neg (&tmp,
+ &dso->dcd.denom_balance,
+ amount_with_fee))
+ {
+ TALER_ARL_amount_add (&dso->dcd.denom_loss,
+ &dso->dcd.denom_loss,
+ amount_with_fee);
+ dso->report_emergency = true;
+ }
+ else
+ {
+ dso->dcd.denom_balance = tmp;
+ }
+ if (-1 == TALER_amount_cmp (&TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee))
+ {
+ /* This can theoretically happen if for example the exchange
+ never issued any coins (i.e. escrow balance is zero), but
+ accepted a forged coin (i.e. emergency situation after
+ private key compromise). In that case, we cannot even
+ subtract the profit we make from the fee from the escrow
+ balance. Tested as part of test-auditor.sh, case #18 */
+ report_amount_arithmetic_inconsistency (
+ "subtracting amount from escrow balance",
+ rowid,
+ &TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee,
+ 0);
+ }
+ else
+ {
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee);
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "New balance of denomination `%s' is %s\n",
+ GNUNET_h2s (&dso->issue->denom_hash.hash),
+ TALER_amount2s (&dso->dcd.denom_balance));
+}
+
+
+/**
* Function called with details about coins that were melted, with the
* goal of auditing the refresh's execution. Verifies the signature
* and updates our information about coins outstanding (the old coin's
@@ -1219,6 +1239,7 @@ check_known_coin (const char *operation,
* @param cls closure
* @param rowid unique serial ID for the refresh session in our DB
* @param denom_pub denomination public key of @a coin_pub
+ * @param h_age_commitment hash of the age commitment for the coin
* @param coin_pub public key of the coin
* @param coin_sig signature from the coin
* @param amount_with_fee amount that was deposited including fee
@@ -1226,10 +1247,11 @@ check_known_coin (const char *operation,
* @param rc what is the refresh commitment
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
refresh_session_cb (void *cls,
uint64_t rowid,
const struct TALER_DenominationPublicKey *denom_pub,
+ const struct TALER_AgeCommitmentHash *h_age_commitment,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
const struct TALER_Amount *amount_with_fee,
@@ -1237,15 +1259,15 @@ refresh_session_cb (void *cls,
const struct TALER_RefreshCommitmentP *rc)
{
struct CoinContext *cc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct DenominationSummary *dso;
struct TALER_Amount amount_without_fee;
- struct TALER_Amount tmp;
enum GNUNET_DB_QueryStatus qs;
(void) noreveal_index;
- GNUNET_assert (rowid >= ppc.last_melt_serial_id); /* should be monotonically increasing */
- ppc.last_melt_serial_id = rowid + 1;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_melt_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_melt_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1280,24 +1302,20 @@ refresh_session_cb (void *cls,
/* verify melt signature */
{
- struct TALER_RefreshMeltCoinAffirmationPS rmc = {
- .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_MELT),
- .purpose.size = htonl (sizeof (rmc)),
- .rc = *rc,
- .melt_fee = issue->fee_refresh,
- .coin_pub = *coin_pub
- };
+ struct TALER_DenominationHashP h_denom_pub;
- GNUNET_CRYPTO_rsa_public_key_hash (denom_pub->rsa_public_key,
- &rmc.h_denom_pub);
- TALER_amount_hton (&rmc.amount_with_fee,
- amount_with_fee);
+ TALER_denom_pub_hash (denom_pub,
+ &h_denom_pub);
if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_MELT,
- &rmc,
- &coin_sig->eddsa_signature,
- &coin_pub->eddsa_pub))
+ TALER_wallet_melt_verify (amount_with_fee,
+ &issue->fees.refresh,
+ rc,
+ &h_denom_pub,
+ h_age_commitment,
+ coin_pub,
+ coin_sig))
{
+ GNUNET_break_op (0);
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("operation",
@@ -1308,15 +1326,15 @@ refresh_session_cb (void *cls,
amount_with_fee),
GNUNET_JSON_pack_data_auto ("coin_pub",
coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount_with_fee);
}
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Melting coin %s in denomination `%s' of value %s\n",
TALER_B2S (coin_pub),
- GNUNET_h2s (&issue->denom_hash),
+ GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (amount_with_fee));
{
@@ -1342,7 +1360,7 @@ refresh_session_cb (void *cls,
/* This can legitimately happen if reveal was not yet called or only
with invalid data, even if the exchange is correctly operating. We
still report it. */
- TALER_ARL_report (report_refreshs_hanging,
+ TALER_ARL_report (report_refreshes_hanging,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_uint64 ("row",
rowid),
@@ -1377,53 +1395,44 @@ refresh_session_cb (void *cls,
&refresh_cost));
for (unsigned int i = 0; i<reveal_ctx.num_freshcoins; i++)
{
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *ni
+ = reveal_ctx.new_issues[i];
/* update cost of refresh */
- struct TALER_Amount fee;
- struct TALER_Amount value;
- TALER_amount_ntoh (&fee,
- &reveal_ctx.new_issues[i]->fee_withdraw);
- TALER_amount_ntoh (&value,
- &reveal_ctx.new_issues[i]->value);
TALER_ARL_amount_add (&refresh_cost,
&refresh_cost,
- &fee);
+ &ni->fees.withdraw);
TALER_ARL_amount_add (&refresh_cost,
&refresh_cost,
- &value);
+ &ni->value);
}
/* compute contribution of old coin */
+ if (TALER_ARL_SR_POSITIVE !=
+ TALER_ARL_amount_subtract_neg (&amount_without_fee,
+ amount_with_fee,
+ &issue->fees.refresh))
{
- struct TALER_Amount melt_fee;
-
- TALER_amount_ntoh (&melt_fee,
- &issue->fee_refresh);
- if (TALER_ARL_SR_POSITIVE !=
- TALER_ARL_amount_subtract_neg (&amount_without_fee,
- amount_with_fee,
- &melt_fee))
- {
- /* Melt fee higher than contribution of melted coin; this makes
- no sense (exchange should never have accepted the operation) */
- report_amount_arithmetic_inconsistency ("melt contribution vs. fee",
- rowid,
- amount_with_fee,
- &melt_fee,
- -1);
- /* To continue, best assumption is the melted coin contributed
- nothing (=> all withdrawal amounts will be counted as losses) */
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (TALER_ARL_currency,
- &amount_without_fee));
- }
+ /* Melt fee higher than contribution of melted coin; this makes
+ no sense (exchange should never have accepted the operation) */
+ report_amount_arithmetic_inconsistency ("melt contribution vs. fee",
+ rowid,
+ amount_with_fee,
+ &issue->fees.refresh,
+ -1);
+ /* To continue, best assumption is the melted coin contributed
+ nothing (=> all withdrawal amounts will be counted as losses) */
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &amount_without_fee));
}
- /* check old coin covers complete expenses (of withdraw operations) */
+ /* check old coin covers complete expenses (of refresh operation) */
if (1 == TALER_amount_cmp (&refresh_cost,
&amount_without_fee))
{
/* refresh_cost > amount_without_fee, which is bad (exchange lost) */
+ GNUNET_break_op (0);
report_amount_arithmetic_inconsistency ("melt (cost)",
rowid,
&amount_without_fee, /* 'exchange' */
@@ -1434,12 +1443,13 @@ refresh_session_cb (void *cls,
/* update outstanding denomination amounts for fresh coins withdrawn */
for (unsigned int i = 0; i<reveal_ctx.num_freshcoins; i++)
{
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *ni
+ = reveal_ctx.new_issues[i];
struct DenominationSummary *dsi;
- struct TALER_Amount value;
dsi = get_denomination_summary (cc,
- reveal_ctx.new_issues[i],
- &reveal_ctx.new_issues[i]->denom_hash);
+ ni,
+ &ni->denom_hash);
if (NULL == dsi)
{
report_row_inconsistency ("refresh_reveal",
@@ -1448,29 +1458,27 @@ refresh_session_cb (void *cls,
}
else
{
- TALER_amount_ntoh (&value,
- &reveal_ctx.new_issues[i]->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Created fresh coin in denomination `%s' of value %s\n",
- GNUNET_h2s (&reveal_ctx.new_issues[i]->denom_hash),
- TALER_amount2s (&value));
- dsi->num_issued++;
- TALER_ARL_amount_add (&dsi->denom_balance,
- &dsi->denom_balance,
- &value);
- TALER_ARL_amount_add (&dsi->denom_risk,
- &dsi->denom_risk,
- &value);
+ GNUNET_h2s (&ni->denom_hash.hash),
+ TALER_amount2s (&ni->value));
+ dsi->dcd.num_issued++;
+ TALER_ARL_amount_add (&dsi->dcd.denom_balance,
+ &dsi->dcd.denom_balance,
+ &ni->value);
+ TALER_ARL_amount_add (&dsi->dcd.denom_risk,
+ &dsi->dcd.denom_risk,
+ &ni->value);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' is %s\n",
- GNUNET_h2s (&reveal_ctx.new_issues[i]->denom_hash),
- TALER_amount2s (&dsi->denom_balance));
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
- &value);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
- &value);
+ GNUNET_h2s (&ni->denom_hash.hash),
+ TALER_amount2s (&dsi->dcd.denom_balance));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
+ &ni->value);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ &ni->value);
}
}
GNUNET_free (reveal_ctx.new_issues);
@@ -1488,58 +1496,15 @@ refresh_session_cb (void *cls,
}
else
{
- if (TALER_ARL_SR_INVALID_NEGATIVE ==
- TALER_ARL_amount_subtract_neg (&tmp,
- &dso->denom_balance,
- amount_with_fee))
- {
- TALER_ARL_amount_add (&dso->denom_loss,
- &dso->denom_loss,
- amount_with_fee);
- dso->report_emergency = GNUNET_YES;
- }
- else
- {
- dso->denom_balance = tmp;
- }
- if (-1 == TALER_amount_cmp (&total_escrow_balance,
- amount_with_fee))
- {
- /* This can theoretically happen if for example the exchange
- never issued any coins (i.e. escrow balance is zero), but
- accepted a forged coin (i.e. emergency situation after
- private key compromise). In that case, we cannot even
- subtract the profit we make from the fee from the escrow
- balance. Tested as part of test-auditor.sh, case #18 *///
- report_amount_arithmetic_inconsistency (
- "subtracting refresh fee from escrow balance",
- rowid,
- &total_escrow_balance,
- amount_with_fee,
- 0);
- }
- else
- {
- TALER_ARL_amount_subtract (&total_escrow_balance,
- &total_escrow_balance,
- amount_with_fee);
- }
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "New balance of denomination `%s' after melt is %s\n",
- GNUNET_h2s (&issue->denom_hash),
- TALER_amount2s (&dso->denom_balance));
+ reduce_denom_balance (dso,
+ rowid,
+ amount_with_fee);
}
/* update global melt fees */
- {
- struct TALER_Amount rfee;
-
- TALER_amount_ntoh (&rfee,
- &issue->fee_refresh);
- TALER_ARL_amount_add (&total_melt_fee_income,
- &total_melt_fee_income,
- &rfee);
- }
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_melt_fee_revenue),
+ &TALER_ARL_USE_AB (coin_melt_fee_revenue),
+ &issue->fees.refresh);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -1553,45 +1518,29 @@ refresh_session_cb (void *cls,
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @param exchange_timestamp when did the exchange get the deposit
- * @param wallet_timestamp when did the contract signing happen
- * @param merchant_pub public key of the merchant
+ * @param deposit deposit details
* @param denom_pub denomination public key of @a coin_pub
- * @param coin_pub public key of the coin
- * @param coin_sig signature from the coin
- * @param amount_with_fee amount that was deposited including fee
- * @param h_contract_terms hash of the proposal data known to merchant and customer
- * @param refund_deadline by which the merchant advised that he might want
- * to get a refund
- * @param wire_deadline by which the merchant advised that he would like the
- * wire transfer to be executed
- * @param receiver_wire_account wire details for the merchant, NULL from iterate_matching_deposits()
* @param done flag set if the deposit was already executed (or not)
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
deposit_cb (void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute exchange_timestamp,
- struct GNUNET_TIME_Absolute wallet_timestamp,
- const struct TALER_MerchantPublicKeyP *merchant_pub,
+ struct GNUNET_TIME_Timestamp exchange_timestamp,
+ const struct TALER_EXCHANGEDB_Deposit *deposit,
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- const struct TALER_Amount *amount_with_fee,
- const struct GNUNET_HashCode *h_contract_terms,
- struct GNUNET_TIME_Absolute refund_deadline,
- struct GNUNET_TIME_Absolute wire_deadline,
- const json_t *receiver_wire_account,
- int done)
+ bool done)
{
struct CoinContext *cc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct DenominationSummary *ds;
enum GNUNET_DB_QueryStatus qs;
(void) done;
- GNUNET_assert (rowid >= ppc.last_deposit_serial_id); /* should be monotonically increasing */
- ppc.last_deposit_serial_id = rowid + 1;
+ (void) exchange_timestamp;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_deposit_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_deposit_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1605,8 +1554,9 @@ deposit_cb (void *cls,
return GNUNET_SYSERR;
return GNUNET_OK;
}
- if (refund_deadline.abs_value_us >
- wire_deadline.abs_value_us)
+ if (GNUNET_TIME_timestamp_cmp (deposit->refund_deadline,
+ >,
+ deposit->wire_deadline))
{
report_row_inconsistency ("deposits",
rowid,
@@ -1622,9 +1572,9 @@ deposit_cb (void *cls,
qs = check_known_coin ("deposit",
issue,
rowid,
- coin_pub,
+ &deposit->coin.coin_pub,
denom_pub,
- amount_with_fee);
+ &deposit->amount_with_fee);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -1634,50 +1584,33 @@ deposit_cb (void *cls,
/* Verify deposit signature */
{
- struct TALER_DepositRequestPS dr = {
- .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT),
- .purpose.size = htonl (sizeof (dr)),
- .h_contract_terms = *h_contract_terms,
- .wallet_timestamp = GNUNET_TIME_absolute_hton (wallet_timestamp),
- .refund_deadline = GNUNET_TIME_absolute_hton (refund_deadline),
- .deposit_fee = issue->fee_deposit,
- .merchant = *merchant_pub,
- .coin_pub = *coin_pub
- };
+ struct TALER_MerchantWireHashP h_wire;
+ struct TALER_DenominationHashP h_denom_pub;
- GNUNET_CRYPTO_rsa_public_key_hash (denom_pub->rsa_public_key,
- &dr.h_denom_pub);
- if (GNUNET_OK !=
- TALER_JSON_merchant_wire_signature_hash (receiver_wire_account,
- &dr.h_wire))
- {
- TALER_ARL_report (report_bad_sig_losses,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("operation",
- "deposit"),
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("loss",
- amount_with_fee),
- GNUNET_JSON_pack_data_auto ("coin_pub",
- coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
- amount_with_fee);
- if (TALER_ARL_do_abort ())
- return GNUNET_SYSERR;
- return GNUNET_OK;
- }
- TALER_amount_hton (&dr.amount_with_fee,
- amount_with_fee);
+ TALER_denom_pub_hash (denom_pub,
+ &h_denom_pub);
+ TALER_merchant_wire_signature_hash (deposit->receiver_wire_account,
+ &deposit->wire_salt,
+ &h_wire);
/* NOTE: This is one of the operations we might eventually
want to do in parallel in the background to improve
auditor performance! */
if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_DEPOSIT,
- &dr,
- &coin_sig->eddsa_signature,
- &coin_pub->eddsa_pub))
+ TALER_wallet_deposit_verify (&deposit->amount_with_fee,
+ &issue->fees.deposit,
+ &h_wire,
+ &deposit->h_contract_terms,
+ deposit->no_wallet_data_hash
+ ? NULL
+ : &deposit->wallet_data_hash,
+ &deposit->coin.h_age_commitment,
+ &deposit->h_policy,
+ &h_denom_pub,
+ deposit->timestamp,
+ &deposit->merchant_pub,
+ deposit->refund_deadline,
+ &deposit->coin.coin_pub,
+ &deposit->csig))
{
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
@@ -1686,12 +1619,12 @@ deposit_cb (void *cls,
GNUNET_JSON_pack_uint64 ("row",
rowid),
TALER_JSON_pack_amount ("loss",
- amount_with_fee),
+ &deposit->amount_with_fee),
GNUNET_JSON_pack_data_auto ("coin_pub",
- coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
- amount_with_fee);
+ &deposit->coin.coin_pub)));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
+ &deposit->amount_with_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -1699,9 +1632,9 @@ deposit_cb (void *cls,
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Deposited coin %s in denomination `%s' of value %s\n",
- TALER_B2S (coin_pub),
- GNUNET_h2s (&issue->denom_hash),
- TALER_amount2s (amount_with_fee));
+ TALER_B2S (&deposit->coin.coin_pub),
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (&deposit->amount_with_fee));
/* update old coin's denomination balance */
ds = get_denomination_summary (cc,
@@ -1715,62 +1648,15 @@ deposit_cb (void *cls,
}
else
{
- struct TALER_Amount tmp;
-
- if (TALER_ARL_SR_INVALID_NEGATIVE ==
- TALER_ARL_amount_subtract_neg (&tmp,
- &ds->denom_balance,
- amount_with_fee))
- {
- TALER_ARL_amount_add (&ds->denom_loss,
- &ds->denom_loss,
- amount_with_fee);
- ds->report_emergency = GNUNET_YES;
- }
- else
- {
- ds->denom_balance = tmp;
- }
-
- if (-1 == TALER_amount_cmp (&total_escrow_balance,
- amount_with_fee))
- {
- /* This can theoretically happen if for example the exchange
- never issued any coins (i.e. escrow balance is zero), but
- accepted a forged coin (i.e. emergency situation after
- private key compromise). In that case, we cannot even
- subtract the profit we make from the fee from the escrow
- balance. Tested as part of test-auditor.sh, case #18 *///
- report_amount_arithmetic_inconsistency (
- "subtracting deposit fee from escrow balance",
- rowid,
- &total_escrow_balance,
- amount_with_fee,
- 0);
- }
- else
- {
- TALER_ARL_amount_subtract (&total_escrow_balance,
- &total_escrow_balance,
- amount_with_fee);
- }
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "New balance of denomination `%s' after deposit is %s\n",
- GNUNET_h2s (&issue->denom_hash),
- TALER_amount2s (&ds->denom_balance));
+ reduce_denom_balance (ds,
+ rowid,
+ &deposit->amount_with_fee);
}
/* update global deposit fees */
- {
- struct TALER_Amount dfee;
-
- TALER_amount_ntoh (&dfee,
- &issue->fee_deposit);
- TALER_ARL_amount_add (&total_deposit_fee_income,
- &total_deposit_fee_income,
- &dfee);
- }
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &issue->fees.deposit);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -1791,29 +1677,30 @@ deposit_cb (void *cls,
* @param merchant_sig signature of the merchant
* @param h_contract_terms hash of the proposal data known to merchant and customer
* @param rtransaction_id refund transaction ID chosen by the merchant
+ * @param full_refund true if the refunds total up to the entire deposited value
* @param amount_with_fee amount that was deposited including fee
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
refund_cb (void *cls,
uint64_t rowid,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_MerchantPublicKeyP *merchant_pub,
const struct TALER_MerchantSignatureP *merchant_sig,
- const struct GNUNET_HashCode *h_contract_terms,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
uint64_t rtransaction_id,
+ bool full_refund,
const struct TALER_Amount *amount_with_fee)
{
struct CoinContext *cc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct DenominationSummary *ds;
struct TALER_Amount amount_without_fee;
- struct TALER_Amount refund_fee;
enum GNUNET_DB_QueryStatus qs;
- GNUNET_assert (rowid >= ppc.last_refund_serial_id); /* should be monotonically increasing */
- ppc.last_refund_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (coins_refund_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_refund_serial_id) = rowid + 1;
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
@@ -1834,54 +1721,41 @@ refund_cb (void *cls,
}
/* verify refund signature */
+ if (GNUNET_OK !=
+ TALER_merchant_refund_verify (coin_pub,
+ h_contract_terms,
+ rtransaction_id,
+ amount_with_fee,
+ merchant_pub,
+ merchant_sig))
{
- struct TALER_RefundRequestPS rr = {
- .purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_REFUND),
- .purpose.size = htonl (sizeof (rr)),
- .h_contract_terms = *h_contract_terms,
- .coin_pub = *coin_pub,
- .merchant = *merchant_pub,
- .rtransaction_id = GNUNET_htonll (rtransaction_id),
- };
-
- TALER_amount_hton (&rr.refund_amount,
- amount_with_fee);
- if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MERCHANT_REFUND,
- &rr,
- &merchant_sig->eddsa_sig,
- &merchant_pub->eddsa_pub))
- {
- TALER_ARL_report (report_bad_sig_losses,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("operation",
- "refund"),
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("loss",
- amount_with_fee),
- GNUNET_JSON_pack_data_auto ("coin_pub",
- coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
- amount_with_fee);
- if (TALER_ARL_do_abort ())
- return GNUNET_SYSERR;
- return GNUNET_OK;
- }
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "refund"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount_with_fee),
+ GNUNET_JSON_pack_data_auto ("coin_pub",
+ coin_pub)));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
+ amount_with_fee);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
}
- TALER_amount_ntoh (&refund_fee,
- &issue->fee_refund);
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&amount_without_fee,
amount_with_fee,
- &refund_fee))
+ &issue->fees.refund))
{
report_amount_arithmetic_inconsistency ("refund (fee)",
rowid,
&amount_without_fee,
- &refund_fee,
+ &issue->fees.refund,
-1);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
@@ -1891,7 +1765,7 @@ refund_cb (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Refunding coin %s in denomination `%s' value %s\n",
TALER_B2S (coin_pub),
- GNUNET_h2s (&issue->denom_hash),
+ GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (amount_with_fee));
/* update coin's denomination balance */
@@ -1906,27 +1780,160 @@ refund_cb (void *cls,
}
else
{
- TALER_ARL_amount_add (&ds->denom_balance,
- &ds->denom_balance,
+ TALER_ARL_amount_add (&ds->dcd.denom_balance,
+ &ds->dcd.denom_balance,
&amount_without_fee);
- TALER_ARL_amount_add (&ds->denom_risk,
- &ds->denom_risk,
+ TALER_ARL_amount_add (&ds->dcd.denom_risk,
+ &ds->dcd.denom_risk,
&amount_without_fee);
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
&amount_without_fee);
- TALER_ARL_amount_add (&total_risk,
- &total_risk,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
&amount_without_fee);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' after refund is %s\n",
- GNUNET_h2s (&issue->denom_hash),
- TALER_amount2s (&ds->denom_balance));
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (&ds->dcd.denom_balance));
}
/* update total refund fee balance */
- TALER_ARL_amount_add (&total_refund_fee_income,
- &total_refund_fee_income,
- &refund_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_refund_fee_revenue),
+ &TALER_ARL_USE_AB (coin_refund_fee_revenue),
+ &issue->fees.refund);
+ if (full_refund)
+ {
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &issue->fees.deposit);
+ }
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse refunds that have been made, with
+ * the goal of auditing the purse refund's execution.
+ *
+ * @param cls closure
+ * @param rowid row of the purse-refund
+ * @param amount_with_fee amount of the deposit into the purse
+ * @param coin_pub coin that is to be refunded the @a given amount_with_fee
+ * @param denom_pub denomination of @a coin_pub
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_refund_coin_cb (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_Amount *amount_with_fee,
+ const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_DenominationPublicKey *denom_pub)
+{
+ struct CoinContext *cc = cls;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
+ struct DenominationSummary *ds;
+ enum GNUNET_DB_QueryStatus qs;
+
+ qs = TALER_ARL_get_denomination_info (denom_pub,
+ &issue,
+ NULL);
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ report_row_inconsistency ("purse-refunds",
+ rowid,
+ "denomination key not found");
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Aborted purse-deposit of coin %s in denomination `%s' value %s\n",
+ TALER_B2S (coin_pub),
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (amount_with_fee));
+
+ /* update coin's denomination balance */
+ ds = get_denomination_summary (cc,
+ issue,
+ &issue->denom_hash);
+ if (NULL == ds)
+ {
+ report_row_inconsistency ("purse-refund",
+ rowid,
+ "denomination key for purse-refunded coin unknown to auditor");
+ }
+ else
+ {
+ TALER_ARL_amount_add (&ds->dcd.denom_balance,
+ &ds->dcd.denom_balance,
+ amount_with_fee);
+ TALER_ARL_amount_add (&ds->dcd.denom_risk,
+ &ds->dcd.denom_risk,
+ amount_with_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_escrowed),
+ &TALER_ARL_USE_AB (total_escrowed),
+ amount_with_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
+ &TALER_ARL_USE_AB (coin_balance_risk),
+ amount_with_fee);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "New balance of denomination `%s' after purse-refund is %s\n",
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (&ds->dcd.denom_balance));
+ }
+ /* update total deposit fee balance */
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &issue->fees.deposit);
+
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about a purse that was refunded. Adds the
+ * refunded amounts back to the outstanding balance of the respective
+ * denominations.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the refund in our DB
+ * @param purse_pub public key of the purse
+ * @param reserve_pub public key of the targeted reserve (ignored)
+ * @param val targeted amount to be in the reserve (ignored)
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_refund_cb (void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_Amount *val)
+{
+ struct CoinContext *cc = cls;
+ enum GNUNET_DB_QueryStatus qs;
+
+ (void) val; /* irrelevant on refund */
+ (void) reserve_pub; /* irrelevant, may even be NULL */
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_purse_refunds_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_purse_refunds_serial_id) = rowid + 1;
+ qs = TALER_ARL_edb->select_purse_deposits_by_purse (TALER_ARL_edb->cls,
+ purse_pub,
+ &purse_refund_coin_cb,
+ cc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return GNUNET_SYSERR;
+ }
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -1947,7 +1954,7 @@ refund_cb (void *cls,
* @param coin_blind blinding factor used to blind the coin
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
check_recoup (struct CoinContext *cc,
const char *operation,
uint64_t rowid,
@@ -1955,13 +1962,23 @@ check_recoup (struct CoinContext *cc,
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const struct TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct DenominationSummary *ds;
enum GNUNET_DB_QueryStatus qs;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
if (GNUNET_OK !=
+ TALER_wallet_recoup_verify (&coin->denom_pub_hash,
+ coin_blind,
+ &coin->coin_pub,
+ coin_sig))
+ {
+ report_row_inconsistency (operation,
+ rowid,
+ "recoup signature invalid");
+ }
+ if (GNUNET_OK !=
TALER_test_coin_valid (coin,
denom_pub))
{
@@ -1975,8 +1992,8 @@ check_recoup (struct CoinContext *cc,
amount),
GNUNET_JSON_pack_data_auto ("coin_pub",
&coin->denom_pub_hash)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount);
}
qs = TALER_ARL_get_denomination_info_by_hash (&coin->denom_pub_hash,
@@ -2010,39 +2027,6 @@ check_recoup (struct CoinContext *cc,
cc->qs = qs;
return GNUNET_SYSERR;
}
- {
- struct TALER_RecoupRequestPS pr = {
- .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_RECOUP),
- .purpose.size = htonl (sizeof (pr)),
- .coin_pub = coin->coin_pub,
- .coin_blind = *coin_blind,
- .h_denom_pub = coin->denom_pub_hash
- };
-
- if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_RECOUP,
- &pr,
- &coin_sig->eddsa_signature,
- &coin->coin_pub.eddsa_pub))
- {
- TALER_ARL_report (report_bad_sig_losses,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("operation",
- operation),
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("loss",
- amount),
- GNUNET_JSON_pack_data_auto ("coin_pub",
- &coin->coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
- amount);
- if (TALER_ARL_do_abort ())
- return GNUNET_SYSERR;
- return GNUNET_OK;
- }
- }
ds = get_denomination_summary (cc,
issue,
&issue->denom_hash);
@@ -2054,7 +2038,7 @@ check_recoup (struct CoinContext *cc,
}
else
{
- if (GNUNET_NO == ds->was_revoked)
+ if (! ds->was_revoked)
{
/* Woopsie, we allowed recoup on non-revoked denomination!? */
TALER_ARL_report (report_bad_sig_losses,
@@ -2069,15 +2053,15 @@ check_recoup (struct CoinContext *cc,
amount),
GNUNET_JSON_pack_data_auto ("coin_pub",
&coin->coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
amount);
}
- TALER_ARL_amount_add (&ds->denom_recoup,
- &ds->denom_recoup,
+ TALER_ARL_amount_add (&ds->dcd.recoup_loss,
+ &ds->dcd.recoup_loss,
amount);
- TALER_ARL_amount_add (&total_recoup_loss,
- &total_recoup_loss,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_recoup_loss),
+ &TALER_ARL_USE_AB (total_recoup_loss),
amount);
}
if (TALER_ARL_do_abort ())
@@ -2100,23 +2084,46 @@ check_recoup (struct CoinContext *cc,
* @param coin_blind blinding factor used to blind the coin
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
recoup_cb (void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute timestamp,
+ struct GNUNET_TIME_Timestamp timestamp,
const struct TALER_Amount *amount,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const struct TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct CoinContext *cc = cls;
- GNUNET_assert (rowid >= ppc.last_recoup_serial_id); /* should be monotonically increasing */
- ppc.last_recoup_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (coins_recoup_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_recoup_serial_id) = rowid + 1;
(void) timestamp;
(void) reserve_pub;
+ if (GNUNET_OK !=
+ TALER_wallet_recoup_verify (&coin->denom_pub_hash,
+ coin_blind,
+ &coin->coin_pub,
+ coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "recoup"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount),
+ GNUNET_JSON_pack_data_auto ("coin_pub",
+ &coin->coin_pub)));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
+ amount);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
return check_recoup (cc,
"recoup",
rowid,
@@ -2144,26 +2151,26 @@ recoup_cb (void *cls,
* @param coin_blind blinding factor used to blind the coin
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
recoup_refresh_cb (void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute timestamp,
+ struct GNUNET_TIME_Timestamp timestamp,
const struct TALER_Amount *amount,
const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
- const struct GNUNET_HashCode *old_denom_pub_hash,
+ const struct TALER_DenominationHashP *old_denom_pub_hash,
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const struct TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct CoinContext *cc = cls;
- const struct TALER_DenominationKeyValidityPS *issue;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
enum GNUNET_DB_QueryStatus qs;
(void) timestamp;
(void) old_coin_pub;
- GNUNET_assert (rowid >= ppc.last_recoup_refresh_serial_id); /* should be monotonically increasing */
- ppc.last_recoup_refresh_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (coins_recoup_refresh_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (coins_recoup_refresh_serial_id) = rowid + 1;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Recoup-refresh amount is %s\n",
TALER_amount2s (amount));
@@ -2198,16 +2205,39 @@ recoup_refresh_cb (void *cls,
}
else
{
- TALER_ARL_amount_add (&dso->denom_balance,
- &dso->denom_balance,
+ TALER_ARL_amount_add (&dso->dcd.denom_balance,
+ &dso->dcd.denom_balance,
amount);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"New balance of denomination `%s' after refresh-recoup is %s\n",
- GNUNET_h2s (&issue->denom_hash),
- TALER_amount2s (&dso->denom_balance));
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (&dso->dcd.denom_balance));
}
}
+ if (GNUNET_OK !=
+ TALER_wallet_recoup_refresh_verify (&coin->denom_pub_hash,
+ coin_blind,
+ &coin->coin_pub,
+ coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "recoup-refresh"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount),
+ GNUNET_JSON_pack_data_auto ("coin_pub",
+ &coin->coin_pub)));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
+ amount);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
return check_recoup (cc,
"recoup-refresh",
rowid,
@@ -2227,76 +2257,186 @@ recoup_refresh_cb (void *cls,
*
* @param cls closure, NULL
* @param denom_pub public key, sometimes NULL (!)
- * @param validity issuing information with value, fees and other info about the denomination.
+ * @param issue issuing information with value, fees and other info about the denomination.
*/
static void
check_denomination (
void *cls,
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_EXCHANGEDB_DenominationKeyInformationP *validity)
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue)
{
- const struct TALER_DenominationKeyValidityPS *issue = &validity->properties;
enum GNUNET_DB_QueryStatus qs;
struct TALER_AuditorSignatureP auditor_sig;
+ (void) cls;
+ (void) denom_pub;
qs = TALER_ARL_edb->select_auditor_denom_sig (TALER_ARL_edb->cls,
&issue->denom_hash,
&TALER_ARL_auditor_pub,
&auditor_sig);
- if (0 >= qs)
+ if (0 > qs)
+ {
+ GNUNET_break (0);
+ return; /* skip! */
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Encountered denomination `%s' that this auditor is not auditing!\n",
- GNUNET_h2s (&issue->denom_hash));
+ "Encountered denomination `%s' (%s) valid from %s (%llu-%llu) that this auditor is not auditing!\n",
+ GNUNET_h2s (&issue->denom_hash.hash),
+ TALER_amount2s (&issue->value),
+ GNUNET_TIME_timestamp2s (issue->start),
+ (unsigned long long) issue->start.abs_time.abs_value_us,
+ (unsigned long long) issue->expire_legal.abs_time.abs_value_us);
return; /* skip! */
}
+ if (GNUNET_OK !=
+ TALER_auditor_denom_validity_verify (
+ TALER_ARL_auditor_url,
+ &issue->denom_hash,
+ &TALER_ARL_master_pub,
+ issue->start,
+ issue->expire_withdraw,
+ issue->expire_deposit,
+ issue->expire_legal,
+ &issue->value,
+ &issue->fees,
+ &TALER_ARL_auditor_pub,
+ &auditor_sig))
+ {
+ TALER_ARL_report (report_denominations_without_sigs,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("denomination",
+ &issue->denom_hash),
+ TALER_JSON_pack_amount ("value",
+ &issue->value),
+ TALER_JSON_pack_time_abs_human ("start_time",
+ issue->start.abs_time),
+ TALER_JSON_pack_time_abs_human ("end_time",
+ issue->expire_legal.
+ abs_time)));
+ }
+}
+
+
+/**
+ * Function called with details about purse deposits that have been made, with
+ * the goal of auditing the deposit's execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param deposit deposit details
+ * @param reserve_pub which reserve is the purse merged into, NULL if unknown
+ * @param flags purse flags
+ * @param auditor_balance purse balance (according to the
+ * auditor during auditing)
+ * @param purse_total target amount the purse should reach
+ * @param denom_pub denomination public key of @a coin_pub
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_deposit_cb (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_EXCHANGEDB_PurseDeposit *deposit,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *auditor_balance,
+ const struct TALER_Amount *purse_total,
+ const struct TALER_DenominationPublicKey *denom_pub)
+{
+ struct CoinContext *cc = cls;
+ enum GNUNET_DB_QueryStatus qs;
+ struct TALER_DenominationHashP dh;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
+ struct DenominationSummary *ds;
+
+ (void) flags;
+ (void) auditor_balance;
+ (void) purse_total;
+ (void) reserve_pub;
+ GNUNET_assert (rowid >=
+ TALER_ARL_USE_PP (coins_purse_deposits_serial_id));
+ TALER_ARL_USE_PP (coins_purse_deposits_serial_id) = rowid + 1;
+ qs = TALER_ARL_get_denomination_info (denom_pub,
+ &issue,
+ &dh);
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
- struct TALER_Amount coin_value;
- struct TALER_Amount fee_withdraw;
- struct TALER_Amount fee_deposit;
- struct TALER_Amount fee_refresh;
- struct TALER_Amount fee_refund;
-
- TALER_amount_ntoh (&coin_value,
- &issue->value);
- TALER_amount_ntoh (&fee_withdraw,
- &issue->fee_withdraw);
- TALER_amount_ntoh (&fee_deposit,
- &issue->fee_deposit);
- TALER_amount_ntoh (&fee_refresh,
- &issue->fee_refresh);
- TALER_amount_ntoh (&fee_refund,
- &issue->fee_refund);
- if (GNUNET_OK !=
- TALER_auditor_denom_validity_verify (
- TALER_ARL_auditor_url,
- &issue->denom_hash,
- &TALER_ARL_master_pub,
- GNUNET_TIME_absolute_ntoh (issue->start),
- GNUNET_TIME_absolute_ntoh (issue->expire_withdraw),
- GNUNET_TIME_absolute_ntoh (issue->expire_deposit),
- GNUNET_TIME_absolute_ntoh (issue->expire_legal),
- &coin_value,
- &fee_withdraw,
- &fee_deposit,
- &fee_refresh,
- &fee_refund,
- &TALER_ARL_auditor_pub,
- &auditor_sig))
- {
- TALER_ARL_report (report_denominations_without_sigs,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_data_auto ("denomination",
- &issue->denom_hash),
- TALER_JSON_pack_amount ("value",
- &coin_value),
- TALER_JSON_pack_time_abs_nbo_human ("start_time",
- issue->start),
- TALER_JSON_pack_time_abs_nbo_human ("end_time",
- issue->
- expire_legal)));
- }
+ report_row_inconsistency ("purse-deposits",
+ rowid,
+ "denomination key not found");
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+ qs = check_known_coin ("purse-deposit",
+ issue,
+ rowid,
+ &deposit->coin_pub,
+ denom_pub,
+ &deposit->amount);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ cc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+
+ if (GNUNET_OK !=
+ TALER_wallet_purse_deposit_verify (
+ NULL != deposit->exchange_base_url
+ ? deposit->exchange_base_url
+ : TALER_ARL_exchange_url,
+ &deposit->purse_pub,
+ &deposit->amount,
+ &dh,
+ &deposit->h_age_commitment,
+ &deposit->coin_pub,
+ &deposit->coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "purse-deposit"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ &deposit->amount),
+ GNUNET_JSON_pack_data_auto ("coin_pub",
+ &deposit->coin_pub)));
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_irregular_loss),
+ &TALER_ARL_USE_AB (coin_irregular_loss),
+ &deposit->amount);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+
+ /* update coin's denomination balance */
+ ds = get_denomination_summary (cc,
+ issue,
+ &issue->denom_hash);
+ if (NULL == ds)
+ {
+ report_row_inconsistency ("purse-deposit",
+ rowid,
+ "denomination key for purse-deposited coin unknown to auditor");
+ }
+ else
+ {
+ reduce_denom_balance (ds,
+ rowid,
+ &deposit->amount);
}
+
+ /* update global deposit fees */
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue),
+ &issue->fees.deposit);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
}
@@ -2327,9 +2467,17 @@ analyze_coins (void *cls)
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Analyzing coins\n");
- qsp = TALER_ARL_adb->get_auditor_progress_coin (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppc);
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (coins_withdraw_serial_id),
+ TALER_ARL_GET_PP (coins_deposit_serial_id),
+ TALER_ARL_GET_PP (coins_melt_serial_id),
+ TALER_ARL_GET_PP (coins_refund_serial_id),
+ TALER_ARL_GET_PP (coins_recoup_serial_id),
+ TALER_ARL_GET_PP (coins_recoup_refresh_serial_id),
+ TALER_ARL_GET_PP (coins_purse_deposits_serial_id),
+ TALER_ARL_GET_PP (coins_purse_refunds_serial_id),
+ NULL);
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -2342,29 +2490,39 @@ analyze_coins (void *cls)
}
else
{
- ppc_start = ppc;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Resuming coin audit at %llu/%llu/%llu/%llu/%llu\n",
- (unsigned long long) ppc.last_deposit_serial_id,
- (unsigned long long) ppc.last_melt_serial_id,
- (unsigned long long) ppc.last_refund_serial_id,
- (unsigned long long) ppc.last_withdraw_serial_id,
- (unsigned long long) ppc.last_recoup_refresh_serial_id);
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_INFO,
+ "Resuming coin audit at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_deposit_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_melt_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_refund_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_withdraw_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_recoup_refresh_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_refunds_serial_id));
}
/* setup 'cc' */
cc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
cc.denom_summaries = GNUNET_CONTAINER_multihashmap_create (256,
GNUNET_NO);
- qsx = TALER_ARL_adb->get_balance_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_deposit_fee_income,
- &total_melt_fee_income,
- &total_refund_fee_income,
- &total_risk,
- &total_recoup_loss,
- &total_irregular_recoups);
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (coin_balance_risk),
+ TALER_ARL_GET_AB (total_escrowed),
+ TALER_ARL_GET_AB (coin_irregular_loss),
+ TALER_ARL_GET_AB (coin_melt_fee_revenue),
+ TALER_ARL_GET_AB (coin_deposit_fee_revenue),
+ TALER_ARL_GET_AB (coin_refund_fee_revenue),
+ TALER_ARL_GET_AB (total_recoup_loss),
+ NULL);
if (0 > qsx)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
@@ -2375,7 +2533,7 @@ analyze_coins (void *cls)
if (0 >
(qs = TALER_ARL_edb->select_withdrawals_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_withdraw_serial_id,
+ TALER_ARL_USE_PP (coins_withdraw_serial_id),
&withdraw_cb,
&cc)) )
{
@@ -2389,7 +2547,7 @@ analyze_coins (void *cls)
if (0 >
(qs = TALER_ARL_edb->select_refunds_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_refund_serial_id,
+ TALER_ARL_USE_PP (coins_refund_serial_id),
&refund_cb,
&cc)))
{
@@ -2399,11 +2557,26 @@ analyze_coins (void *cls)
if (0 > cc.qs)
return cc.qs;
+ /* process purse_refunds */
+ if (0 >
+ (qs = TALER_ARL_edb->select_purse_decisions_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (coins_purse_refunds_serial_id),
+ true, /* only go for refunds! */
+ &purse_refund_cb,
+ &cc)))
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (0 > cc.qs)
+ return cc.qs;
+
/* process recoups */
if (0 >
(qs = TALER_ARL_edb->select_recoup_refresh_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_recoup_refresh_serial_id,
+ TALER_ARL_USE_PP (coins_recoup_refresh_serial_id),
&recoup_refresh_cb,
&cc)))
{
@@ -2415,7 +2588,7 @@ analyze_coins (void *cls)
if (0 >
(qs = TALER_ARL_edb->select_recoup_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_recoup_serial_id,
+ TALER_ARL_USE_PP (coins_recoup_serial_id),
&recoup_cb,
&cc)))
{
@@ -2425,11 +2598,11 @@ analyze_coins (void *cls)
if (0 > cc.qs)
return cc.qs;
- /* process refreshs */
+ /* process refreshes */
if (0 >
(qs = TALER_ARL_edb->select_refreshes_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_melt_serial_id,
+ TALER_ARL_USE_PP (coins_melt_serial_id),
&refresh_session_cb,
&cc)))
{
@@ -2441,9 +2614,9 @@ analyze_coins (void *cls)
/* process deposits */
if (0 >
- (qs = TALER_ARL_edb->select_deposits_above_serial_id (
+ (qs = TALER_ARL_edb->select_coin_deposits_above_serial_id (
TALER_ARL_edb->cls,
- ppc.last_deposit_serial_id,
+ TALER_ARL_USE_PP (coins_deposit_serial_id),
&deposit_cb,
&cc)))
{
@@ -2453,6 +2626,20 @@ analyze_coins (void *cls)
if (0 > cc.qs)
return cc.qs;
+ /* process purse_deposits */
+ if (0 >
+ (qs = TALER_ARL_edb->select_purse_deposits_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (coins_purse_deposits_serial_id),
+ &purse_deposit_cb,
+ &cc)))
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (0 > cc.qs)
+ return cc.qs;
+
/* sync 'cc' back to disk */
cc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
GNUNET_CONTAINER_multihashmap_iterate (cc.denom_summaries,
@@ -2465,25 +2652,27 @@ analyze_coins (void *cls)
return cc.qs;
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsx)
- qs = TALER_ARL_adb->update_balance_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_deposit_fee_income,
- &total_melt_fee_income,
- &total_refund_fee_income,
- &total_risk,
- &total_recoup_loss,
- &total_irregular_recoups);
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (coin_balance_risk),
+ TALER_ARL_SET_AB (total_escrowed),
+ TALER_ARL_SET_AB (coin_irregular_loss),
+ TALER_ARL_SET_AB (coin_melt_fee_revenue),
+ TALER_ARL_SET_AB (coin_deposit_fee_revenue),
+ TALER_ARL_SET_AB (coin_refund_fee_revenue),
+ TALER_ARL_SET_AB (total_recoup_loss),
+ NULL);
else
- qs = TALER_ARL_adb->insert_balance_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_deposit_fee_income,
- &total_melt_fee_income,
- &total_refund_fee_income,
- &total_risk,
- &total_recoup_loss,
- &total_irregular_recoups);
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (coin_balance_risk),
+ TALER_ARL_SET_AB (total_escrowed),
+ TALER_ARL_SET_AB (coin_irregular_loss),
+ TALER_ARL_SET_AB (coin_melt_fee_revenue),
+ TALER_ARL_SET_AB (coin_deposit_fee_revenue),
+ TALER_ARL_SET_AB (coin_refund_fee_revenue),
+ TALER_ARL_SET_AB (total_recoup_loss),
+ NULL);
if (0 >= qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2491,13 +2680,29 @@ analyze_coins (void *cls)
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_coin (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppc);
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (coins_withdraw_serial_id),
+ TALER_ARL_SET_PP (coins_deposit_serial_id),
+ TALER_ARL_SET_PP (coins_melt_serial_id),
+ TALER_ARL_SET_PP (coins_refund_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_refresh_serial_id),
+ TALER_ARL_SET_PP (coins_purse_deposits_serial_id),
+ TALER_ARL_SET_PP (coins_purse_refunds_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_coin (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppc);
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (coins_withdraw_serial_id),
+ TALER_ARL_SET_PP (coins_deposit_serial_id),
+ TALER_ARL_SET_PP (coins_melt_serial_id),
+ TALER_ARL_SET_PP (coins_refund_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_serial_id),
+ TALER_ARL_SET_PP (coins_recoup_refresh_serial_id),
+ TALER_ARL_SET_PP (coins_purse_deposits_serial_id),
+ TALER_ARL_SET_PP (coins_purse_refunds_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -2506,12 +2711,17 @@ analyze_coins (void *cls)
return qs;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Concluded coin audit step at %llu/%llu/%llu/%llu/%llu\n",
- (unsigned long long) ppc.last_deposit_serial_id,
- (unsigned long long) ppc.last_melt_serial_id,
- (unsigned long long) ppc.last_refund_serial_id,
- (unsigned long long) ppc.last_withdraw_serial_id,
- (unsigned long long) ppc.last_recoup_refresh_serial_id);
+ "Concluded coin audit step at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (coins_deposit_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (coins_melt_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (coins_refund_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (coins_withdraw_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_recoup_refresh_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ coins_purse_refunds_serial_id));
return qs;
}
@@ -2557,25 +2767,29 @@ run (void *cls,
&reported_emergency_loss_by_count));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_escrow_balance));
+ &TALER_ARL_USE_AB (total_escrowed)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_risk));
+ &TALER_ARL_USE_AB (
+ coin_deposit_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_recoup_loss));
+ &TALER_ARL_USE_AB (
+ coin_melt_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_irregular_recoups));
+ &TALER_ARL_USE_AB (
+ coin_refund_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_deposit_fee_income));
+ &TALER_ARL_USE_AB (coin_balance_risk)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_melt_fee_income));
+ &TALER_ARL_USE_AB (total_recoup_loss)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_refund_fee_income));
+ &TALER_ARL_USE_AB (
+ coin_irregular_loss)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_arithmetic_delta_plus));
@@ -2584,9 +2798,6 @@ run (void *cls,
&total_arithmetic_delta_minus));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_bad_sig_loss));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (TALER_ARL_currency,
&total_refresh_hanging));
GNUNET_assert (NULL !=
(report_emergencies = json_array ()));
@@ -2602,7 +2813,7 @@ run (void *cls,
GNUNET_assert (NULL !=
(report_bad_sig_losses = json_array ()));
GNUNET_assert (NULL !=
- (report_refreshs_hanging = json_array ()));
+ (report_refreshes_hanging = json_array ()));
if (GNUNET_OK !=
TALER_ARL_setup_sessions_and_run (&analyze_coins,
NULL))
@@ -2615,27 +2826,26 @@ run (void *cls,
TALER_ARL_done (
GNUNET_JSON_PACK (
TALER_JSON_pack_amount ("total_escrow_balance",
- &total_escrow_balance),
- TALER_JSON_pack_amount ("total_active_risk",
- &total_risk),
+ &TALER_ARL_USE_AB (total_escrowed)),
TALER_JSON_pack_amount ("total_deposit_fee_income",
- &total_deposit_fee_income),
+ &TALER_ARL_USE_AB (coin_deposit_fee_revenue)),
TALER_JSON_pack_amount ("total_melt_fee_income",
- &total_melt_fee_income),
+ &TALER_ARL_USE_AB (coin_melt_fee_revenue)),
TALER_JSON_pack_amount ("total_refund_fee_income",
- &total_refund_fee_income),
+ &TALER_ARL_USE_AB (coin_refund_fee_revenue)),
+ TALER_JSON_pack_amount ("total_active_risk",
+ &TALER_ARL_USE_AB (coin_balance_risk)),
+ TALER_JSON_pack_amount ("total_recoup_loss",
+ &TALER_ARL_USE_AB (total_recoup_loss)),
+ /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
+ TALER_JSON_pack_amount ("irregular_loss",
+ &TALER_ARL_USE_AB (coin_irregular_loss)),
/* Tested in test-auditor.sh #18 */
GNUNET_JSON_pack_array_steal ("emergencies",
report_emergencies),
/* Tested in test-auditor.sh #18 */
TALER_JSON_pack_amount ("emergencies_risk_by_amount",
&reported_emergency_risk_by_amount),
- /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
- GNUNET_JSON_pack_array_steal ("bad_sig_losses",
- report_bad_sig_losses),
- /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
- TALER_JSON_pack_amount ("total_bad_sig_loss",
- &total_bad_sig_loss),
/* Tested in test-auditor.sh #31 */
GNUNET_JSON_pack_array_steal ("row_inconsistencies",
report_row_inconsistencies),
@@ -2648,11 +2858,11 @@ run (void *cls,
&total_arithmetic_delta_minus),
TALER_JSON_pack_amount ("total_refresh_hanging",
&total_refresh_hanging),
+ GNUNET_JSON_pack_array_steal ("bad_sig_losses",
+ report_bad_sig_losses),
/* Tested in test-auditor.sh #12 */
GNUNET_JSON_pack_array_steal ("refresh_hanging",
- report_refreshs_hanging),
- TALER_JSON_pack_amount ("total_recoup_loss",
- &total_recoup_loss),
+ report_refreshes_hanging),
/* Tested in test-auditor.sh #18 */
GNUNET_JSON_pack_array_steal ("emergencies_by_count",
report_emergencies_by_count),
@@ -2666,38 +2876,48 @@ run (void *cls,
TALER_JSON_pack_amount ("emergencies_loss_by_count",
&reported_emergency_loss_by_count),
GNUNET_JSON_pack_uint64 ("start_ppc_withdraw_serial_id",
- ppc_start.last_withdraw_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_deposit_serial_id",
- ppc_start.last_deposit_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_melt_serial_id",
- ppc_start.last_melt_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_refund_serial_id",
- ppc_start.last_refund_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_recoup_serial_id",
- ppc_start.last_recoup_serial_id),
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("start_ppc_recoup_refresh_serial_id",
- ppc_start.
- last_recoup_refresh_serial_id),
+ 0 /* not implemented */),
+ GNUNET_JSON_pack_uint64 ("start_ppc_purse_deposits_serial_id",
+ 0 /* not implemented */),
+ GNUNET_JSON_pack_uint64 ("start_ppc_purse_refunds_serial_id",
+ 0 /* not implemented */),
GNUNET_JSON_pack_uint64 ("end_ppc_withdraw_serial_id",
- ppc.last_withdraw_serial_id),
+ TALER_ARL_USE_PP (coins_withdraw_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_deposit_serial_id",
- ppc.last_deposit_serial_id),
+ TALER_ARL_USE_PP (coins_deposit_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_melt_serial_id",
- ppc.last_melt_serial_id),
+ TALER_ARL_USE_PP (coins_melt_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_refund_serial_id",
- ppc.last_refund_serial_id),
+ TALER_ARL_USE_PP (coins_refund_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_recoup_serial_id",
- ppc.last_recoup_serial_id),
+ TALER_ARL_USE_PP (coins_recoup_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppc_recoup_refresh_serial_id",
- ppc.last_recoup_refresh_serial_id),
- TALER_JSON_pack_time_abs_human ("auditor_start_time",
- start_time),
+ TALER_ARL_USE_PP (
+ coins_recoup_refresh_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppc_purse_deposits_serial_id",
+ TALER_ARL_USE_PP (
+ coins_purse_deposits_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppc_purse_refunds_serial_id",
+ TALER_ARL_USE_PP (
+ coins_purse_refunds_serial_id)),
+ TALER_JSON_pack_time_abs_human (
+ "auditor_start_time",
+ start_time),
TALER_JSON_pack_time_abs_human ("auditor_end_time",
GNUNET_TIME_absolute_get ()),
- TALER_JSON_pack_amount ("total_irregular_recoups",
- &total_irregular_recoups),
- GNUNET_JSON_pack_array_steal ("unsigned_denominations",
- report_denominations_without_sigs)));
+ GNUNET_JSON_pack_array_steal (
+ "unsigned_denominations",
+ report_denominations_without_sigs)));
}
@@ -2717,11 +2937,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-deposits.c b/src/auditor/taler-helper-auditor-deposits.c
index 58f8226f4..3dbce0183 100644
--- a/src/auditor/taler-helper-auditor-deposits.c
+++ b/src/auditor/taler-helper-auditor-deposits.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -17,6 +17,7 @@
* @file auditor/taler-helper-auditor-deposits.c
* @brief audits an exchange database for deposit confirmation consistency
* @author Christian Grothoff
+ * @author Nic Eigel
*
* We simply check that all of the deposit confirmations reported to us
* by merchants were also reported to us by the exchange.
@@ -29,7 +30,29 @@
#include "taler_bank_service.h"
#include "taler_signatures.h"
#include "report-lib.h"
+#include "taler_dbevents.h"
+#include <jansson.h>
+/*
+--
+-- SELECT serial_id,h_contract_terms,h_wire,merchant_pub ...
+-- FROM auditor.auditor_deposit_confirmations
+-- WHERE NOT ancient
+-- ORDER BY exchange_timestamp ASC;
+-- SELECT 1
+- FROM exchange.deposits dep
+ WHERE ($RESULT.contract_terms = dep.h_contract_terms) AND ($RESULT.h_wire = dep.h_wire) AND ...);
+-- IF FOUND
+-- DELETE FROM auditor.auditor_deposit_confirmations
+-- WHERE serial_id = $RESULT.serial_id;
+-- SELECT exchange_timestamp AS latest
+-- FROM exchange.deposits ORDER BY exchange_timestamp DESC;
+-- latest -= 1 hour; // time is not exactly monotonic...
+-- UPDATE auditor.deposit_confirmations
+-- SET ancient=TRUE
+-- WHERE exchange_timestamp < latest
+-- AND NOT ancient;
+*/
/**
* Return value from main().
@@ -37,6 +60,14 @@
static int global_ret;
/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+/**
* Array of reports about missing deposit confirmations.
*/
static json_t *report_deposit_confirmation_inconsistencies;
@@ -56,6 +87,18 @@ static struct TALER_Amount total_missed_deposit_confirmations;
*/
static int internal_checks;
+static struct GNUNET_DB_EventHandler *eh;
+
+/**
+ * Our database plugin.
+ */
+static struct TALER_AUDITORDB_Plugin *db_plugin;
+
+/**
+ * The auditors's configuration.
+ */
+static const struct GNUNET_CONFIGURATION_Handle *cfg;
+
/**
* Closure for #test_dc.
*/
@@ -92,7 +135,6 @@ struct DepositConfirmationContext
};
-
/**
* Given a deposit confirmation from #TALER_ARL_adb, check that it is also
* in #TALER_ARL_edb. Update the deposit confirmation context accordingly.
@@ -102,40 +144,30 @@ struct DepositConfirmationContext
* @param dc the deposit confirmation we know
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop iterating
*/
-static int
+static enum GNUNET_GenericReturnValue
test_dc (void *cls,
uint64_t serial_id,
const struct TALER_AUDITORDB_DepositConfirmation *dc)
{
struct DepositConfirmationContext *dcc = cls;
+ bool missing = false;
dcc->last_seen_coin_serial = serial_id;
+ for (unsigned int i = 0; i < dc->num_coins; i++)
{
enum GNUNET_DB_QueryStatus qs;
- struct TALER_EXCHANGEDB_Deposit dep = {
- .coin.coin_pub = dc->coin_pub,
- .h_contract_terms = dc->h_contract_terms,
- .merchant_pub = dc->merchant,
- .h_wire = dc->h_wire,
- .refund_deadline = dc->refund_deadline
- };
- struct GNUNET_TIME_Absolute exchange_timestamp;
+ struct GNUNET_TIME_Timestamp exchange_timestamp;
struct TALER_Amount deposit_fee;
- qs = TALER_ARL_edb->have_deposit (TALER_ARL_edb->cls,
- &dep,
- GNUNET_NO /* do not check refund deadline */,
- &deposit_fee,
- &exchange_timestamp);
- if (qs > 0)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Found deposit %s in exchange database\n",
- GNUNET_h2s (&dc->h_contract_terms));
- if (TALER_ARL_do_abort ())
- return GNUNET_SYSERR;
- return GNUNET_OK; /* found, all good */
- }
+ qs = TALER_ARL_edb->have_deposit2 (TALER_ARL_edb->cls,
+ &dc->h_contract_terms,
+ &dc->h_wire,
+ &dc->coin_pubs[i],
+ &dc->merchant,
+ dc->refund_deadline,
+ &deposit_fee,
+ &exchange_timestamp);
+ missing |= (0 == qs);
if (qs < 0)
{
GNUNET_break (0); /* DB error, complain */
@@ -143,23 +175,33 @@ test_dc (void *cls,
return GNUNET_SYSERR;
}
}
+ if (! missing)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Found deposit %s in exchange database\n",
+ GNUNET_h2s (&dc->h_contract_terms.hash));
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK; /* all coins found, all good */
+ }
/* deposit confirmation missing! report! */
- TALER_ARL_report (report_deposit_confirmation_inconsistencies,
- GNUNET_JSON_PACK (
- TALER_JSON_pack_time_abs_human ("timestamp",
- dc->exchange_timestamp),
- TALER_JSON_pack_amount ("amount",
- &dc->amount_without_fee),
- GNUNET_JSON_pack_uint64 ("rowid",
- serial_id),
- GNUNET_JSON_pack_data_auto ("account",
- &dc->h_wire)));
+ TALER_ARL_report (
+ report_deposit_confirmation_inconsistencies,
+ GNUNET_JSON_PACK (
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ dc->exchange_timestamp.abs_time),
+ TALER_JSON_pack_amount ("amount",
+ &dc->total_without_fee),
+ GNUNET_JSON_pack_uint64 ("rowid",
+ serial_id),
+ GNUNET_JSON_pack_data_auto ("account",
+ &dc->h_wire)));
dcc->first_missed_coin_serial = GNUNET_MIN (dcc->first_missed_coin_serial,
serial_id);
dcc->missed_count++;
TALER_ARL_amount_add (&dcc->missed_amount,
&dcc->missed_amount,
- &dc->amount_without_fee);
+ &dc->total_without_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -176,20 +218,18 @@ test_dc (void *cls,
static enum GNUNET_DB_QueryStatus
analyze_deposit_confirmations (void *cls)
{
- struct TALER_AUDITORDB_ProgressPointDepositConfirmation ppdc;
+ TALER_ARL_DEF_PP (deposit_confirmation_serial_id);
struct DepositConfirmationContext dcc;
enum GNUNET_DB_QueryStatus qs;
enum GNUNET_DB_QueryStatus qsx;
enum GNUNET_DB_QueryStatus qsp;
-
(void) cls;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Analyzing deposit confirmations\n");
- ppdc.last_deposit_confirmation_serial_id = 0;
- qsp = TALER_ARL_adb->get_auditor_progress_deposit_confirmation (
+
+ qsp = TALER_ARL_adb->get_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppdc);
+ TALER_ARL_GET_PP (deposit_confirmation_serial_id),
+ NULL);
+
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -204,7 +244,8 @@ analyze_deposit_confirmations (void *cls)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Resuming deposit confirmation audit at %llu\n",
- (unsigned long long) ppdc.last_deposit_confirmation_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ deposit_confirmation_serial_id));
}
/* setup 'cc' */
@@ -214,10 +255,13 @@ analyze_deposit_confirmations (void *cls)
dcc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
dcc.missed_count = 0LLU;
dcc.first_missed_coin_serial = UINT64_MAX;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "lastdepconfserialid %lu\n",
+ TALER_ARL_USE_PP (deposit_confirmation_serial_id));
qsx = TALER_ARL_adb->get_deposit_confirmations (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- ppdc.last_deposit_confirmation_serial_id,
+ TALER_ARL_USE_PP (deposit_confirmation_serial_id),
+ true, /* return suppressed */
&test_dc,
&dcc);
if (0 > qsx)
@@ -228,28 +272,30 @@ analyze_deposit_confirmations (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzed %d deposit confirmations (above serial ID %llu)\n",
(int) qsx,
- (unsigned long long) ppdc.last_deposit_confirmation_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ deposit_confirmation_serial_id));
if (0 > dcc.qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == dcc.qs);
return dcc.qs;
}
- if (UINT64_MAX == dcc.first_missed_coin_serial)
- ppdc.last_deposit_confirmation_serial_id = dcc.last_seen_coin_serial;
- else
- ppdc.last_deposit_confirmation_serial_id = dcc.first_missed_coin_serial - 1;
+ /* if (UINT64_MAX == dcc.first_missed_coin_serial)
+ ppdc.last_deposit_confirmation_serial_id = dcc.last_seen_coin_serial;
+ else
+ ppdc.last_deposit_confirmation_serial_id = dcc.first_missed_coin_serial - 1;
+ */
/* sync 'cc' back to disk */
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_deposit_confirmation (
+ qs = TALER_ARL_adb->update_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppdc);
+ TALER_ARL_SET_PP (deposit_confirmation_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_deposit_confirmation (
+ qs = TALER_ARL_adb->insert_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppdc);
+ TALER_ARL_SET_PP (deposit_confirmation_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -257,17 +303,90 @@ analyze_deposit_confirmations (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs;
}
+
number_missed_deposit_confirmations = (json_int_t) dcc.missed_count;
total_missed_deposit_confirmations = dcc.missed_amount;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Concluded deposit confirmation audit step at %llu\n",
- (unsigned long long) ppdc.last_deposit_confirmation_serial_id);
+ (unsigned long long) TALER_ARL_USE_PP (
+ deposit_confirmation_serial_id));
return qs;
}
/**
+ * Function called on events received from Postgres.
+ *
+ * @param cls closure, NULL
+ * @param extra additional event data provided
+ * @param extra_size number of bytes in @a extra
+ */
+static void
+db_notify (void *cls,
+ const void *extra,
+ size_t extra_size)
+{
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Received notification for new deposit_confirmation\n");
+
+ (void) cls;
+ (void) extra;
+ (void) extra_size;
+
+ if (NULL ==
+ (db_plugin = TALER_AUDITORDB_plugin_load (cfg)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to initialize DB subsystem\n");
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ GNUNET_assert (NULL !=
+ (report_deposit_confirmation_inconsistencies = json_array ()));
+
+ if (GNUNET_OK !=
+ TALER_ARL_setup_sessions_and_run (&analyze_deposit_confirmations,
+ NULL))
+ {
+ global_ret = EXIT_FAILURE;
+ return;
+ }
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Deposit audit complete\n");
+ TALER_ARL_done (
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_array_steal ("deposit_confirmation_inconsistencies",
+ report_deposit_confirmation_inconsistencies),
+ GNUNET_JSON_pack_uint64 ("missing_deposit_confirmation_count",
+ number_missed_deposit_confirmations),
+ TALER_JSON_pack_amount ("missing_deposit_confirmation_total",
+ &total_missed_deposit_confirmations),
+ TALER_JSON_pack_time_abs_human ("auditor_start_time",
+ start_time),
+ TALER_JSON_pack_time_abs_human ("auditor_end_time",
+ GNUNET_TIME_absolute_get ())));
+}
+
+
+/**
+ * Function called on shutdown.
+ */
+static void
+do_shutdown (void *cls)
+{
+ (void) cls;
+
+ db_plugin->event_listen_cancel (eh);
+ eh = NULL;
+ TALER_AUDITORDB_plugin_unload (db_plugin);
+ db_plugin = NULL;
+ TALER_ARL_done (NULL);
+}
+
+
+/**
* Main function that will be run.
*
* @param cls closure
@@ -284,6 +403,10 @@ run (void *cls,
(void) cls;
(void) args;
(void) cfgfile;
+ cfg = c;
+
+ GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+ NULL);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Launching deposit auditor\n");
if (GNUNET_OK !=
@@ -292,6 +415,34 @@ run (void *cls,
global_ret = EXIT_FAILURE;
return;
}
+
+ if (NULL ==
+ (db_plugin = TALER_AUDITORDB_plugin_load (cfg)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to initialize DB subsystem\n");
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ if (GNUNET_OK !=
+ db_plugin->preflight (db_plugin->cls))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to connect to database\n");
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+
+ struct GNUNET_DB_EventHeaderP es = {
+ .size = htons (sizeof (es)),
+ .type = htons (TALER_DBEVENT_EXCHANGE_AUDITOR_NEW_DEPOSIT_CONFIRMATION)
+ };
+ eh = db_plugin->event_listen (db_plugin->cls,
+ &es,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ &db_notify,
+ NULL);
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting deposit audit\n");
GNUNET_assert (NULL !=
@@ -336,11 +487,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-purses.c b/src/auditor/taler-helper-auditor-purses.c
new file mode 100644
index 000000000..967ac13a7
--- /dev/null
+++ b/src/auditor/taler-helper-auditor-purses.c
@@ -0,0 +1,1451 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2016-2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero Public License for more details.
+
+ You should have received a copy of the GNU Affero Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file auditor/taler-helper-auditor-purses.c
+ * @brief audits the purses of an exchange database
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include <gnunet/gnunet_util_lib.h>
+#include "taler_auditordb_plugin.h"
+#include "taler_exchangedb_lib.h"
+#include "taler_json_lib.h"
+#include "taler_bank_service.h"
+#include "taler_signatures.h"
+#include "report-lib.h"
+
+
+/**
+ * Use a 1 day grace period to deal with clocks not being perfectly synchronized.
+ */
+#define EXPIRATION_GRACE_PERIOD GNUNET_TIME_UNIT_DAYS
+
+/**
+ * Return value from main().
+ */
+static int global_ret;
+
+/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+/**
+ * Checkpointing our progress for purses.
+ */
+static TALER_ARL_DEF_PP (purse_account_merge_serial_id);
+static TALER_ARL_DEF_PP (purse_decision_serial_id);
+static TALER_ARL_DEF_PP (purse_deposits_serial_id);
+static TALER_ARL_DEF_PP (purse_merges_serial_id);
+static TALER_ARL_DEF_PP (purse_request_serial_id);
+static TALER_ARL_DEF_PP (purse_open_counter);
+static TALER_ARL_DEF_AB (purse_global_balance);
+
+/**
+ * Array of reports about row inconsistencies.
+ */
+static json_t *report_row_inconsistencies;
+
+/**
+ * Array of reports about purse balance insufficient inconsistencies.
+ */
+static json_t *report_purse_balance_insufficient_inconsistencies;
+
+/**
+ * Total amount purses were merged with insufficient balance.
+ */
+static struct TALER_Amount total_balance_insufficient_loss;
+
+/**
+ * Total amount purse decisions are delayed past deadline.
+ */
+static struct TALER_Amount total_delayed_decisions;
+
+/**
+ * Array of reports about purses's not being closed inconsistencies.
+ */
+static json_t *report_purse_not_closed_inconsistencies;
+
+/**
+ * Total amount affected by purses not having been closed on time.
+ */
+static struct TALER_Amount total_balance_purse_not_closed;
+
+/**
+ * Report about amount calculation differences (causing profit
+ * or loss at the exchange).
+ */
+static json_t *report_amount_arithmetic_inconsistencies;
+
+/**
+ * Profits the exchange made by bad amount calculations.
+ */
+static struct TALER_Amount total_arithmetic_delta_plus;
+
+/**
+ * Losses the exchange made by bad amount calculations.
+ */
+static struct TALER_Amount total_arithmetic_delta_minus;
+
+/**
+ * Array of reports about coin operations with bad signatures.
+ */
+static json_t *report_bad_sig_losses;
+
+/**
+ * Total amount lost by operations for which signatures were invalid.
+ */
+static struct TALER_Amount total_bad_sig_loss;
+
+/**
+ * Should we run checks that only work for exchange-internal audits?
+ */
+static int internal_checks;
+
+/* ***************************** Report logic **************************** */
+
+
+/**
+ * Report a (serious) inconsistency in the exchange's database with
+ * respect to calculations involving amounts.
+ *
+ * @param operation what operation had the inconsistency
+ * @param rowid affected row, 0 if row is missing
+ * @param exchange amount calculated by exchange
+ * @param auditor amount calculated by auditor
+ * @param profitable 1 if @a exchange being larger than @a auditor is
+ * profitable for the exchange for this operation,
+ * -1 if @a exchange being smaller than @a auditor is
+ * profitable for the exchange, and 0 if it is unclear
+ */
+static void
+report_amount_arithmetic_inconsistency (
+ const char *operation,
+ uint64_t rowid,
+ const struct TALER_Amount *exchange,
+ const struct TALER_Amount *auditor,
+ int profitable)
+{
+ struct TALER_Amount delta;
+ struct TALER_Amount *target;
+
+ if (0 < TALER_amount_cmp (exchange,
+ auditor))
+ {
+ /* exchange > auditor */
+ TALER_ARL_amount_subtract (&delta,
+ exchange,
+ auditor);
+ }
+ else
+ {
+ /* auditor < exchange */
+ profitable = -profitable;
+ TALER_ARL_amount_subtract (&delta,
+ auditor,
+ exchange);
+ }
+ TALER_ARL_report (report_amount_arithmetic_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ operation),
+ GNUNET_JSON_pack_uint64 ("rowid",
+ rowid),
+ TALER_JSON_pack_amount ("exchange",
+ exchange),
+ TALER_JSON_pack_amount ("auditor",
+ auditor),
+ GNUNET_JSON_pack_int64 ("profitable",
+ profitable)));
+ if (0 != profitable)
+ {
+ target = (1 == profitable)
+ ? &total_arithmetic_delta_plus
+ : &total_arithmetic_delta_minus;
+ TALER_ARL_amount_add (target,
+ target,
+ &delta);
+ }
+}
+
+
+/**
+ * Report a (serious) inconsistency in the exchange's database.
+ *
+ * @param table affected table
+ * @param rowid affected row, 0 if row is missing
+ * @param diagnostic message explaining the problem
+ */
+static void
+report_row_inconsistency (const char *table,
+ uint64_t rowid,
+ const char *diagnostic)
+{
+ TALER_ARL_report (report_row_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("table",
+ table),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ GNUNET_JSON_pack_string ("diagnostic",
+ diagnostic)));
+}
+
+
+/**
+ * Obtain the purse fee for a purse created at @a time.
+ *
+ * @param atime when was the purse created
+ * @param[out] fee set to the purse fee
+ * @return #GNUNET_OK on success
+ */
+static enum GNUNET_GenericReturnValue
+get_purse_fee (struct GNUNET_TIME_Timestamp atime,
+ struct TALER_Amount *fee)
+{
+ struct TALER_MasterSignatureP master_sig;
+ struct GNUNET_TIME_Timestamp start_date;
+ struct GNUNET_TIME_Timestamp end_date;
+ struct TALER_GlobalFeeSet fees;
+ struct GNUNET_TIME_Relative ptimeout;
+ struct GNUNET_TIME_Relative hexp;
+ uint32_t pacl;
+
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
+ TALER_ARL_edb->get_global_fee (TALER_ARL_edb->cls,
+ atime,
+ &start_date,
+ &end_date,
+ &fees,
+ &ptimeout,
+ &hexp,
+ &pacl,
+ &master_sig))
+ {
+ char *diag;
+
+ GNUNET_asprintf (&diag,
+ "purse fee unavailable at %s\n",
+ GNUNET_TIME_timestamp2s (atime));
+ report_row_inconsistency ("purse-fee",
+ atime.abs_time.abs_value_us,
+ diag);
+ GNUNET_free (diag);
+ return GNUNET_SYSERR;
+ }
+ *fee = fees.purse;
+ return GNUNET_OK;
+}
+
+
+/* ***************************** Analyze purses ************************ */
+/* This logic checks the purses_requests, purse_deposits,
+ purse_refunds, purse_merges and account_merges */
+
+/**
+ * Summary data we keep per purse.
+ */
+struct PurseSummary
+{
+ /**
+ * Public key of the purse.
+ * Always set when the struct is first initialized.
+ */
+ struct TALER_PurseContractPublicKeyP purse_pub;
+
+ /**
+ * Balance of the purse from deposits (includes purse fee, excludes deposit
+ * fees), as calculated by auditor.
+ */
+ struct TALER_Amount balance;
+
+ /**
+ * Expected value of the purse, excludes purse fee.
+ */
+ struct TALER_Amount total_value;
+
+ /**
+ * Purse balance according to exchange DB.
+ */
+ struct TALER_Amount exchange_balance;
+
+ /**
+ * Contract terms of the purse.
+ */
+ struct TALER_PrivateContractHashP h_contract_terms;
+
+ /**
+ * Merge timestamp (as per exchange DB).
+ */
+ struct GNUNET_TIME_Timestamp merge_timestamp;
+
+ /**
+ * Purse creation date. This is when the merge
+ * fee is applied.
+ */
+ struct GNUNET_TIME_Timestamp creation_date;
+
+ /**
+ * Purse expiration date.
+ */
+ struct GNUNET_TIME_Timestamp expiration_date;
+
+ /**
+ * Did we have a previous purse info? Used to decide between UPDATE and
+ * INSERT later. Initialized in #load_auditor_purse_summary().
+ */
+ bool had_pi;
+
+ /**
+ * Was the purse deleted? FIXME: Not yet handled (do we need to? purse
+ * might just appear as expired eventually; but in the meantime, exchange
+ * may seem to have refunded the coins for no good reason...), also we do
+ * not yet check the deletion signature.
+ */
+ bool purse_deleted;
+
+ /**
+ * Was the purse refunded? FIXME: Not yet handled (do we need to?)
+ */
+ bool purse_refunded;
+
+};
+
+
+/**
+ * Load the auditor's remembered state about the purse into @a ps.
+ *
+ * @param[in,out] ps purse summary to (fully) initialize
+ * @return transaction status code
+ */
+static enum GNUNET_DB_QueryStatus
+load_auditor_purse_summary (struct PurseSummary *ps)
+{
+ enum GNUNET_DB_QueryStatus qs;
+ uint64_t rowid;
+
+ qs = TALER_ARL_adb->get_purse_info (TALER_ARL_adb->cls,
+ &ps->purse_pub,
+ &rowid,
+ &ps->balance,
+ &ps->expiration_date);
+ if (0 > qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ ps->had_pi = false;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &ps->balance));
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Creating fresh purse `%s'\n",
+ TALER_B2S (&ps->purse_pub));
+ return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
+ }
+ ps->had_pi = true;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Auditor remembers purse `%s' has balance %s\n",
+ TALER_B2S (&ps->purse_pub),
+ TALER_amount2s (&ps->balance));
+ return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
+}
+
+
+/**
+ * Closure to the various callbacks we make while checking a purse.
+ */
+struct PurseContext
+{
+ /**
+ * Map from hash of purse's public key to a `struct PurseSummary`.
+ */
+ struct GNUNET_CONTAINER_MultiHashMap *purses;
+
+ /**
+ * Transaction status code, set to error codes if applicable.
+ */
+ enum GNUNET_DB_QueryStatus qs;
+
+};
+
+
+/**
+ * Create a new reserve for @a reserve_pub in @a rc.
+ *
+ * @param[in,out] pc context to update
+ * @param purse_pub key for which to create a purse
+ * @return NULL on error
+ */
+static struct PurseSummary *
+setup_purse (struct PurseContext *pc,
+ const struct TALER_PurseContractPublicKeyP *purse_pub)
+{
+ struct PurseSummary *ps;
+ struct GNUNET_HashCode key;
+ enum GNUNET_DB_QueryStatus qs;
+
+ GNUNET_CRYPTO_hash (purse_pub,
+ sizeof (*purse_pub),
+ &key);
+ ps = GNUNET_CONTAINER_multihashmap_get (pc->purses,
+ &key);
+ if (NULL != ps)
+ return ps;
+ ps = GNUNET_new (struct PurseSummary);
+ ps->purse_pub = *purse_pub;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &ps->balance));
+ /* get purse meta-data from exchange DB */
+ qs = TALER_ARL_edb->select_purse (TALER_ARL_edb->cls,
+ purse_pub,
+ &ps->creation_date,
+ &ps->expiration_date,
+ &ps->total_value,
+ &ps->exchange_balance,
+ &ps->h_contract_terms,
+ &ps->merge_timestamp,
+ &ps->purse_deleted,
+ &ps->purse_refunded);
+ if (0 >= qs)
+ {
+ GNUNET_free (ps);
+ pc->qs = qs;
+ return NULL;
+ }
+ if (0 > (qs = load_auditor_purse_summary (ps)))
+ {
+ GNUNET_free (ps);
+ pc->qs = qs;
+ return NULL;
+ }
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (pc->purses,
+ &key,
+ ps,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ return ps;
+}
+
+
+/**
+ * Function called on purse requests.
+ *
+ * @param cls closure
+ * @param rowid which row in the database was the request stored in
+ * @param purse_pub public key of the purse
+ * @param merge_pub public key representing the merge capability
+ * @param purse_creation when was the purse created
+ * @param purse_expiration when would an unmerged purse expire
+ * @param h_contract_terms contract associated with the purse
+ * @param age_limit the age limit for deposits into the purse
+ * @param target_amount amount to be put into the purse
+ * @param purse_sig signature of the purse over the initialization data
+ * @return #GNUNET_OK to continue to iterate
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_requested (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_PurseMergePublicKeyP *merge_pub,
+ struct GNUNET_TIME_Timestamp purse_creation,
+ struct GNUNET_TIME_Timestamp purse_expiration,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ uint32_t age_limit,
+ const struct TALER_Amount *target_amount,
+ const struct TALER_PurseContractSignatureP *purse_sig)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+ struct GNUNET_HashCode key;
+
+ TALER_ARL_USE_PP (purse_request_serial_id) = rowid;
+ if (GNUNET_OK !=
+ TALER_wallet_purse_create_verify (purse_expiration,
+ h_contract_terms,
+ merge_pub,
+ age_limit,
+ target_amount,
+ purse_pub,
+ purse_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "purse-reqeust"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ target_amount),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ purse_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ target_amount);
+ }
+ GNUNET_CRYPTO_hash (purse_pub,
+ sizeof (*purse_pub),
+ &key);
+ ps = GNUNET_new (struct PurseSummary);
+ ps->purse_pub = *purse_pub;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &ps->balance));
+ ps->creation_date = purse_creation;
+ ps->expiration_date = purse_expiration;
+ ps->total_value = *target_amount;
+ ps->h_contract_terms = *h_contract_terms;
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (pc->purses,
+ &key,
+ ps,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse deposits that have been made, with
+ * the goal of auditing the deposit's execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param deposit deposit details
+ * @param reserve_pub which reserve is the purse merged into, NULL if unknown
+ * @param flags purse flags
+ * @param auditor_balance purse balance (according to the
+ * auditor during auditing)
+ * @param purse_total target amount the purse should reach
+ * @param denom_pub denomination public key of @a coin_pub
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_deposits (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_EXCHANGEDB_PurseDeposit *deposit,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *auditor_balance,
+ const struct TALER_Amount *purse_total,
+ const struct TALER_DenominationPublicKey *denom_pub)
+{
+ struct PurseContext *pc = cls;
+ struct TALER_Amount amount_minus_fee;
+ struct PurseSummary *ps;
+ const char *base_url
+ = (NULL == deposit->exchange_base_url)
+ ? TALER_ARL_exchange_url
+ : deposit->exchange_base_url;
+ struct TALER_DenominationHashP h_denom_pub;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (purse_deposits_serial_id));
+ TALER_ARL_USE_PP (purse_deposits_serial_id) = rowid + 1;
+
+ {
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
+ enum GNUNET_DB_QueryStatus qs;
+
+ qs = TALER_ARL_get_denomination_info (denom_pub,
+ &issue,
+ &h_denom_pub);
+ if (0 > qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ if (GNUNET_DB_STATUS_HARD_ERROR == qs)
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Hard database error trying to get denomination %s from database!\n",
+ TALER_B2S (denom_pub));
+ pc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ report_row_inconsistency ("purse-deposit",
+ rowid,
+ "denomination key not found");
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+ }
+ TALER_ARL_amount_subtract (&amount_minus_fee,
+ &deposit->amount,
+ &issue->fees.deposit);
+ }
+
+ if (GNUNET_OK !=
+ TALER_wallet_purse_deposit_verify (base_url,
+ &deposit->purse_pub,
+ &deposit->amount,
+ &h_denom_pub,
+ &deposit->h_age_commitment,
+ &deposit->coin_pub,
+ &deposit->coin_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "purse-deposit"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ &deposit->amount),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ &deposit->coin_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ &deposit->amount);
+ return GNUNET_OK;
+ }
+
+ ps = setup_purse (pc,
+ &deposit->purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("purse-deposit",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&ps->balance,
+ &ps->balance,
+ &amount_minus_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (purse_global_balance),
+ &TALER_ARL_USE_AB (purse_global_balance),
+ &amount_minus_fee);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse merges that have been made, with
+ * the goal of auditing the purse merge execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param partner_base_url where is the reserve, NULL for this exchange
+ * @param amount total amount expected in the purse
+ * @param balance current balance in the purse
+ * @param flags purse flags
+ * @param merge_pub merge capability key
+ * @param reserve_pub reserve the merge affects
+ * @param merge_sig signature affirming the merge
+ * @param purse_pub purse key
+ * @param merge_timestamp when did the merge happen
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_merged (
+ void *cls,
+ uint64_t rowid,
+ const char *partner_base_url,
+ const struct TALER_Amount *amount,
+ const struct TALER_Amount *balance,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_PurseMergePublicKeyP *merge_pub,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_PurseMergeSignatureP *merge_sig,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ struct GNUNET_TIME_Timestamp merge_timestamp)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (purse_merges_serial_id));
+ TALER_ARL_USE_PP (purse_merges_serial_id) = rowid + 1;
+
+ {
+ char *reserve_url;
+
+ reserve_url
+ = TALER_reserve_make_payto (NULL == partner_base_url
+ ? TALER_ARL_exchange_url
+ : partner_base_url,
+ reserve_pub);
+ if (GNUNET_OK !=
+ TALER_wallet_purse_merge_verify (reserve_url,
+ merge_timestamp,
+ purse_pub,
+ merge_pub,
+ merge_sig))
+ {
+ GNUNET_free (reserve_url);
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "merge-purse"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ merge_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ amount);
+ return GNUNET_OK;
+ }
+ GNUNET_free (reserve_url);
+ }
+
+ ps = setup_purse (pc,
+ purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("purse-merge",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ GNUNET_break (0 ==
+ GNUNET_TIME_timestamp_cmp (merge_timestamp,
+ ==,
+ ps->merge_timestamp));
+ TALER_ARL_amount_add (&ps->balance,
+ &ps->balance,
+ amount);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about account merge requests that have been
+ * made, with the goal of auditing the account merge execution.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param reserve_pub reserve affected by the merge
+ * @param purse_pub purse being merged
+ * @param h_contract_terms hash over contract of the purse
+ * @param purse_expiration when would the purse expire
+ * @param amount total amount in the purse
+ * @param min_age minimum age of all coins deposited into the purse
+ * @param flags how was the purse created
+ * @param purse_fee if a purse fee was paid, how high is it
+ * @param merge_timestamp when was the merge approved
+ * @param reserve_sig signature by reserve approving the merge
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_account_merged (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ struct GNUNET_TIME_Timestamp purse_expiration,
+ const struct TALER_Amount *amount,
+ uint32_t min_age,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *purse_fee,
+ struct GNUNET_TIME_Timestamp merge_timestamp,
+ const struct TALER_ReserveSignatureP *reserve_sig)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (purse_account_merge_serial_id));
+ TALER_ARL_USE_PP (purse_account_merge_serial_id) = rowid + 1;
+ if (GNUNET_OK !=
+ TALER_wallet_account_merge_verify (merge_timestamp,
+ purse_pub,
+ purse_expiration,
+ h_contract_terms,
+ amount,
+ purse_fee,
+ min_age,
+ flags,
+ reserve_pub,
+ reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "account-merge"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ purse_fee),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ purse_fee);
+ return GNUNET_OK;
+ }
+ ps = setup_purse (pc,
+ purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("account-merge",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (purse_global_balance),
+ &TALER_ARL_USE_AB (purse_global_balance),
+ purse_fee);
+ TALER_ARL_amount_add (&ps->balance,
+ &ps->balance,
+ purse_fee);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about purse decisions that have been made.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param purse_pub which purse was the decision made on
+ * @param refunded true if decision was to refund
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_decision (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ bool refunded)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps;
+ struct GNUNET_HashCode key;
+ enum GNUNET_DB_QueryStatus qs;
+ struct TALER_Amount purse_fee;
+ struct TALER_Amount balance_without_purse_fee;
+
+ TALER_ARL_USE_PP (purse_decision_serial_id) = rowid;
+ ps = setup_purse (pc,
+ purse_pub);
+ if (NULL == ps)
+ {
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == pc->qs)
+ {
+ report_row_inconsistency ("purse-decision",
+ rowid,
+ "purse not found");
+ }
+ else
+ {
+ /* Database trouble!? */
+ GNUNET_break (0);
+ }
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_OK !=
+ get_purse_fee (ps->creation_date,
+ &purse_fee))
+ {
+ report_row_inconsistency ("purse-request",
+ rowid,
+ "purse fee unavailable");
+ }
+ if (0 >
+ TALER_amount_subtract (&balance_without_purse_fee,
+ &ps->balance,
+ &purse_fee))
+ {
+ report_row_inconsistency ("purse-request",
+ rowid,
+ "purse fee higher than balance");
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &balance_without_purse_fee));
+ }
+
+ if (refunded)
+ {
+ if (-1 != TALER_amount_cmp (&balance_without_purse_fee,
+ &ps->total_value))
+ {
+ report_amount_arithmetic_inconsistency ("purse-decision: refund",
+ rowid,
+ &balance_without_purse_fee,
+ &ps->total_value,
+ 0);
+ }
+ }
+ else
+ {
+ if (-1 == TALER_amount_cmp (&balance_without_purse_fee,
+ &ps->total_value))
+ {
+ report_amount_arithmetic_inconsistency ("purse-decision: merge",
+ rowid,
+ &ps->total_value,
+ &balance_without_purse_fee,
+ 0);
+ TALER_ARL_amount_add (&total_balance_insufficient_loss,
+ &total_balance_insufficient_loss,
+ &ps->total_value);
+ }
+ }
+
+ qs = TALER_ARL_adb->delete_purse_info (TALER_ARL_adb->cls,
+ purse_pub);
+ GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS != qs);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ pc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+ GNUNET_CRYPTO_hash (purse_pub,
+ sizeof (*purse_pub),
+ &key);
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multihashmap_remove (pc->purses,
+ &key,
+ ps));
+ GNUNET_free (ps);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called on expired purses.
+ *
+ * @param cls closure
+ * @param purse_pub public key of the purse
+ * @param balance amount of money in the purse
+ * @param expiration_date when did the purse expire?
+ * @return #GNUNET_OK to continue to iterate
+ */
+static enum GNUNET_GenericReturnValue
+handle_purse_expired (
+ void *cls,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_Amount *balance,
+ struct GNUNET_TIME_Timestamp expiration_date)
+{
+ struct PurseContext *pc = cls;
+
+ (void) pc;
+ TALER_ARL_report (report_purse_not_closed_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("purse_pub",
+ purse_pub),
+ TALER_JSON_pack_amount ("balance",
+ balance),
+ TALER_JSON_pack_time_abs_human ("expired",
+ expiration_date.abs_time)));
+ TALER_ARL_amount_add (&total_delayed_decisions,
+ &total_delayed_decisions,
+ balance);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Check that the purse summary matches what the exchange database
+ * thinks about the purse, and update our own state of the purse.
+ *
+ * Remove all purses that we are happy with from the DB.
+ *
+ * @param cls our `struct PurseContext`
+ * @param key hash of the purse public key
+ * @param value a `struct PurseSummary`
+ * @return #GNUNET_OK to process more entries
+ */
+static enum GNUNET_GenericReturnValue
+verify_purse_balance (void *cls,
+ const struct GNUNET_HashCode *key,
+ void *value)
+{
+ struct PurseContext *pc = cls;
+ struct PurseSummary *ps = value;
+ enum GNUNET_GenericReturnValue ret;
+ enum GNUNET_DB_QueryStatus qs;
+
+ ret = GNUNET_OK;
+ if (internal_checks)
+ {
+ struct TALER_Amount pf;
+ struct TALER_Amount balance_without_purse_fee;
+
+ /* subtract purse fee from ps->balance to get actual balance we expect, as
+ we track the balance including purse fee, while the exchange subtracts
+ the purse fee early on. */
+ if (GNUNET_OK !=
+ get_purse_fee (ps->creation_date,
+ &pf))
+ {
+ GNUNET_break (0);
+ report_row_inconsistency ("purse",
+ 0,
+ "purse fee unavailable");
+ }
+ if (0 >
+ TALER_amount_subtract (&balance_without_purse_fee,
+ &ps->balance,
+ &pf))
+ {
+ report_row_inconsistency ("purse",
+ 0,
+ "purse fee higher than balance");
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &balance_without_purse_fee));
+ }
+
+ if (0 != TALER_amount_cmp (&ps->exchange_balance,
+ &balance_without_purse_fee))
+ {
+ report_amount_arithmetic_inconsistency ("purse-balance",
+ 0,
+ &ps->exchange_balance,
+ &balance_without_purse_fee,
+ 0);
+ }
+ }
+
+ if (ps->had_pi)
+ qs = TALER_ARL_adb->update_purse_info (TALER_ARL_adb->cls,
+ &ps->purse_pub,
+ &ps->balance);
+ else
+ qs = TALER_ARL_adb->insert_purse_info (TALER_ARL_adb->cls,
+ &ps->purse_pub,
+ &ps->balance,
+ ps->expiration_date);
+ GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS != qs);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ pc->qs = qs;
+ return GNUNET_SYSERR;
+ }
+
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multihashmap_remove (pc->purses,
+ key,
+ ps));
+ GNUNET_free (ps);
+ return ret;
+}
+
+
+/**
+ * Analyze purses for being well-formed.
+ *
+ * @param cls NULL
+ * @return transaction status code
+ */
+static enum GNUNET_DB_QueryStatus
+analyze_purses (void *cls)
+{
+ struct PurseContext pc;
+ enum GNUNET_DB_QueryStatus qsx;
+ enum GNUNET_DB_QueryStatus qs;
+ enum GNUNET_DB_QueryStatus qsp;
+
+ (void) cls;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Analyzing purses\n");
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (purse_account_merge_serial_id),
+ TALER_ARL_GET_PP (purse_decision_serial_id),
+ TALER_ARL_GET_PP (purse_deposits_serial_id),
+ TALER_ARL_GET_PP (purse_merges_serial_id),
+ TALER_ARL_GET_PP (purse_request_serial_id),
+ TALER_ARL_GET_PP (purse_open_counter),
+ NULL);
+ if (0 > qsp)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
+ return qsp;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsp)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+ "First analysis using this auditor, starting audit from scratch\n");
+ }
+ else
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Resuming purse audit at %llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_request_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_decision_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_account_merge_serial_id));
+ }
+ pc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (purse_global_balance),
+ NULL);
+ if (qsx < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
+ return qsx;
+ }
+ pc.purses = GNUNET_CONTAINER_multihashmap_create (512,
+ GNUNET_NO);
+
+ qs = TALER_ARL_edb->select_purse_requests_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_request_serial_id),
+ &handle_purse_requested,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ qs = TALER_ARL_edb->select_purse_merges_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_merges_serial_id),
+ &handle_purse_merged,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ qs = TALER_ARL_edb->select_purse_deposits_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_deposits_serial_id),
+ &handle_purse_deposits,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ /* Charge purse fee! */
+ qs = TALER_ARL_edb->select_account_merges_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_account_merge_serial_id),
+ &handle_account_merged,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ qs = TALER_ARL_edb->select_all_purse_decisions_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (purse_decision_serial_id),
+ &handle_purse_decision,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ qs = TALER_ARL_adb->select_purse_expired (
+ TALER_ARL_adb->cls,
+ &handle_purse_expired,
+ &pc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+
+ GNUNET_CONTAINER_multihashmap_iterate (pc.purses,
+ &verify_purse_balance,
+ &pc);
+ GNUNET_break (0 ==
+ GNUNET_CONTAINER_multihashmap_size (pc.purses));
+ GNUNET_CONTAINER_multihashmap_destroy (pc.purses);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != pc.qs)
+ return qs;
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsx)
+ {
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (purse_global_balance),
+ NULL);
+ }
+ else
+ {
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (purse_global_balance),
+ NULL);
+ }
+ if (0 >= qs)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (purse_account_merge_serial_id),
+ TALER_ARL_SET_PP (purse_decision_serial_id),
+ TALER_ARL_SET_PP (purse_deposits_serial_id),
+ TALER_ARL_SET_PP (purse_merges_serial_id),
+ TALER_ARL_SET_PP (purse_request_serial_id),
+ TALER_ARL_SET_PP (purse_open_counter),
+ NULL);
+ else
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (purse_account_merge_serial_id),
+ TALER_ARL_SET_PP (purse_decision_serial_id),
+ TALER_ARL_SET_PP (purse_deposits_serial_id),
+ TALER_ARL_SET_PP (purse_merges_serial_id),
+ TALER_ARL_SET_PP (purse_request_serial_id),
+ TALER_ARL_SET_PP (purse_open_counter),
+ NULL);
+ if (0 >= qs)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Failed to update auditor DB, not recording progress\n");
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Concluded purse audit step at %llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_request_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_decision_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_deposits_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ purse_account_merge_serial_id));
+ return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
+}
+
+
+/**
+ * Main function that will be run.
+ *
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be NULL!)
+ * @param c configuration
+ */
+static void
+run (void *cls,
+ char *const *args,
+ const char *cfgfile,
+ const struct GNUNET_CONFIGURATION_Handle *c)
+{
+ (void) cls;
+ (void) args;
+ (void) cfgfile;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Launching auditor\n");
+ if (GNUNET_OK !=
+ TALER_ARL_init (c))
+ {
+ global_ret = EXIT_FAILURE;
+ return;
+ }
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ purse_global_balance)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_balance_insufficient_loss));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_delayed_decisions));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_arithmetic_delta_plus));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_arithmetic_delta_minus));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_balance_purse_not_closed));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_bad_sig_loss));
+
+ GNUNET_assert (NULL !=
+ (report_row_inconsistencies = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_purse_balance_insufficient_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_purse_not_closed_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_amount_arithmetic_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_bad_sig_losses = json_array ()));
+ if (GNUNET_OK !=
+ TALER_ARL_setup_sessions_and_run (&analyze_purses,
+ NULL))
+ {
+ global_ret = EXIT_FAILURE;
+ return;
+ }
+ TALER_ARL_done (
+ GNUNET_JSON_PACK (
+ /* Globals (REVIEW!) */
+ TALER_JSON_pack_amount ("total_balance_insufficient",
+ &total_balance_insufficient_loss),
+ TALER_JSON_pack_amount ("total_delayed_purse_decisions",
+ &total_delayed_decisions),
+ GNUNET_JSON_pack_array_steal (
+ "purse_balance_insufficient_inconsistencies",
+ report_purse_balance_insufficient_inconsistencies),
+ TALER_JSON_pack_amount ("total_balance_purse_not_closed",
+ &total_balance_purse_not_closed),
+ TALER_JSON_pack_amount ("total_bad_sig_loss",
+ &total_bad_sig_loss),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
+ &total_arithmetic_delta_plus),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
+ &total_arithmetic_delta_minus),
+
+ /* Global 'balances' */
+ TALER_JSON_pack_amount ("total_purse_balance",
+ &TALER_ARL_USE_AB (purse_global_balance)),
+ GNUNET_JSON_pack_uint64 ("total_purse_count",
+ TALER_ARL_USE_PP (purse_open_counter)),
+
+ GNUNET_JSON_pack_array_steal ("purse_not_closed_inconsistencies",
+ report_purse_not_closed_inconsistencies),
+ GNUNET_JSON_pack_array_steal ("bad_sig_losses",
+ report_bad_sig_losses),
+ GNUNET_JSON_pack_array_steal ("row_inconsistencies",
+ report_row_inconsistencies),
+ GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies",
+ report_amount_arithmetic_inconsistencies),
+ /* Information about audited range ... */
+ TALER_JSON_pack_time_abs_human ("auditor_start_time",
+ start_time),
+ TALER_JSON_pack_time_abs_human ("auditor_end_time",
+ GNUNET_TIME_absolute_get ()),
+ GNUNET_JSON_pack_uint64 ("start_ppp_purse_merges_serial_id",
+ 0 /* not supported anymore */),
+ GNUNET_JSON_pack_uint64 ("start_ppp_purse_deposits_serial_id",
+ 0 /* not supported anymore */),
+ GNUNET_JSON_pack_uint64 ("start_ppp_account_merge_serial_id",
+ 0 /* not supported anymore */),
+ GNUNET_JSON_pack_uint64 ("end_ppp_purse_merges_serial_id",
+ TALER_ARL_USE_PP (
+ purse_merges_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppp_purse_deposits_serial_id",
+ TALER_ARL_USE_PP (
+ purse_deposits_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppp_account_merge_serial_id",
+ TALER_ARL_USE_PP (
+ purse_account_merge_serial_id))));
+}
+
+
+/**
+ * The main function to check the database's handling of purses.
+ *
+ * @param argc number of arguments from the command line
+ * @param argv command line arguments
+ * @return 0 ok, 1 on error
+ */
+int
+main (int argc,
+ char *const *argv)
+{
+ const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ GNUNET_GETOPT_option_flag ('i',
+ "internal",
+ "perform checks only applicable for exchange-internal audits",
+ &internal_checks),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
+ GNUNET_GETOPT_option_timetravel ('T',
+ "timetravel"),
+ GNUNET_GETOPT_OPTION_END
+ };
+ enum GNUNET_GenericReturnValue ret;
+
+ /* force linker to link against libtalerutil; if we do
+ not do this, the linker may "optimize" libtalerutil
+ away and skip #TALER_OS_init(), which we do need */
+ (void) TALER_project_data_default ();
+ if (GNUNET_OK !=
+ GNUNET_STRINGS_get_utf8_args (argc, argv,
+ &argc, &argv))
+ return EXIT_INVALIDARGUMENT;
+ ret = GNUNET_PROGRAM_run (
+ argc,
+ argv,
+ "taler-helper-auditor-purses",
+ gettext_noop ("Audit Taler exchange purse handling"),
+ options,
+ &run,
+ NULL);
+ GNUNET_free_nz ((void *) argv);
+ if (GNUNET_SYSERR == ret)
+ return EXIT_INVALIDARGUMENT;
+ if (GNUNET_NO == ret)
+ return EXIT_SUCCESS;
+ return global_ret;
+}
+
+
+/* end of taler-helper-auditor-purses.c */
diff --git a/src/auditor/taler-helper-auditor-render.py b/src/auditor/taler-helper-auditor-render.py
index 4b086cb62..b9c92b29c 100644
--- a/src/auditor/taler-helper-auditor-render.py
+++ b/src/auditor/taler-helper-auditor-render.py
@@ -53,4 +53,14 @@ jinjaEnv = jinja2.Environment(loader=StdinLoader(),
autoescape=False)
tmpl = jinjaEnv.get_template('stdin');
-print(tmpl.render(aggregation = jsonData1, coins = jsonData2, deposits = jsonData3, reserves = jsonData4, wire = jsonData5))
+try:
+ print(tmpl.render(aggregation = jsonData1, coins = jsonData2, deposits = jsonData3, reserves = jsonData4, wire = jsonData5))
+except jinja2.TemplateSyntaxError as error:
+ print("Template syntax error: {error.message} on line {error.lineno}.".format(error=error))
+ exit(1)
+except jinja2.UndefinedError as error:
+ print("Template undefined error: {error.message}.".format(error=error))
+ exit(1)
+except TypeError as error:
+ print("Template type error: {0}.".format(error.args[0]))
+ exit(1)
diff --git a/src/auditor/taler-helper-auditor-reserves.c b/src/auditor/taler-helper-auditor-reserves.c
index aa9c241bb..aa35c6a75 100644
--- a/src/auditor/taler-helper-auditor-reserves.c
+++ b/src/auditor/taler-helper-auditor-reserves.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2016-2021 Taler Systems SA
+ Copyright (C) 2016-2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero Public License as published by the Free Software
@@ -39,6 +39,14 @@
static int global_ret;
/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+/**
* After how long should idle reserves be closed?
*/
static struct GNUNET_TIME_Relative idle_reserve_expiration_time;
@@ -46,15 +54,29 @@ static struct GNUNET_TIME_Relative idle_reserve_expiration_time;
/**
* Checkpointing our progress for reserves.
*/
-static struct TALER_AUDITORDB_ProgressPointReserve ppr;
+static TALER_ARL_DEF_PP (reserves_reserve_in_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_out_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_recoup_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_open_serial_id);
+static TALER_ARL_DEF_PP (reserves_reserve_close_serial_id);
+static TALER_ARL_DEF_PP (reserves_purse_decisions_serial_id);
+static TALER_ARL_DEF_PP (reserves_account_merges_serial_id);
+static TALER_ARL_DEF_PP (reserves_history_requests_serial_id);
/**
- * Checkpointing our progress for reserves.
+ * Tracked global reserve balances.
*/
-static struct TALER_AUDITORDB_ProgressPointReserve ppr_start;
+static TALER_ARL_DEF_AB (reserves_reserve_total_balance);
+static TALER_ARL_DEF_AB (reserves_reserve_loss);
+static TALER_ARL_DEF_AB (reserves_withdraw_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_close_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_purse_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_open_fee_revenue);
+static TALER_ARL_DEF_AB (reserves_history_fee_revenue);
+
/**
- * Array of reports about row inconsitencies.
+ * Array of reports about row inconsistencies.
*/
static json_t *report_row_inconsistencies;
@@ -65,14 +87,14 @@ static json_t *report_row_inconsistencies;
static json_t *denomination_key_validity_withdraw_inconsistencies;
/**
- * Array of reports about reserve balance insufficient inconsitencies.
+ * Array of reports about reserve balance insufficient inconsistencies.
*/
static json_t *report_reserve_balance_insufficient_inconsistencies;
/**
- * Total amount reserves were charged beyond their balance.
+ * Array of reports about purse balance insufficient inconsistencies.
*/
-static struct TALER_Amount total_balance_insufficient_loss;
+static json_t *report_purse_balance_insufficient_inconsistencies;
/**
* Array of reports about reserve balance summary wrong in database.
@@ -81,18 +103,20 @@ static json_t *report_reserve_balance_summary_wrong_inconsistencies;
/**
* Total delta between expected and stored reserve balance summaries,
- * for positive deltas.
+ * for positive deltas. Used only when internal checks are
+ * enabled.
*/
static struct TALER_Amount total_balance_summary_delta_plus;
/**
* Total delta between expected and stored reserve balance summaries,
- * for negative deltas.
+ * for negative deltas. Used only when internal checks are
+ * enabled.
*/
static struct TALER_Amount total_balance_summary_delta_minus;
/**
- * Array of reports about reserve's not being closed inconsitencies.
+ * Array of reports about reserve's not being closed inconsistencies.
*/
static json_t *report_reserve_not_closed_inconsistencies;
@@ -118,21 +142,6 @@ static struct TALER_Amount total_arithmetic_delta_plus;
static struct TALER_Amount total_arithmetic_delta_minus;
/**
- * Expected balance in the escrow account.
- */
-static struct TALER_Amount total_escrow_balance;
-
-/**
- * Recoups we made on denominations that were not revoked (!?).
- */
-static struct TALER_Amount total_irregular_recoups;
-
-/**
- * Total withdraw fees earned.
- */
-static struct TALER_Amount total_withdraw_fee_income;
-
-/**
* Array of reports about coin operations with bad signatures.
*/
static json_t *report_bad_sig_losses;
@@ -205,8 +214,8 @@ report_amount_arithmetic_inconsistency (
if (0 != profitable)
{
target = (1 == profitable)
- ? &total_arithmetic_delta_plus
- : &total_arithmetic_delta_minus;
+ ? &total_arithmetic_delta_plus
+ : &total_arithmetic_delta_minus;
TALER_ARL_amount_add (target,
target,
&delta);
@@ -264,27 +273,21 @@ struct ReserveSummary
struct TALER_Amount total_out;
/**
- * Sum of withdraw fees encountered during this transaction.
+ * Sum of balance and fees encountered during this transaction.
*/
- struct TALER_Amount total_fee;
+ struct TALER_AUDITORDB_ReserveFeeBalance curr_balance;
/**
- * Previous balance of the reserve as remembered by the auditor.
+ * Previous balances of the reserve as remembered by the auditor.
* (updated based on @e total_in and @e total_out at the end).
*/
- struct TALER_Amount balance_at_previous_audit;
-
- /**
- * Previous withdraw fee balance of the reserve, as remembered by the auditor.
- * (updated based on @e total_fee at the end).
- */
- struct TALER_Amount a_withdraw_fee_balance;
+ struct TALER_AUDITORDB_ReserveFeeBalance prev_balance;
/**
* Previous reserve expiration data, as remembered by the auditor.
* (updated on-the-fly in #handle_reserve_in()).
*/
- struct GNUNET_TIME_Absolute a_expiration_date;
+ struct GNUNET_TIME_Timestamp a_expiration_date;
/**
* Which account did originally put money into the reserve?
@@ -297,7 +300,7 @@ struct ReserveSummary
* #load_auditor_reserve_summary() together with the a-* values
* (if available).
*/
- int had_ri;
+ bool had_ri;
};
@@ -318,10 +321,8 @@ load_auditor_reserve_summary (struct ReserveSummary *rs)
qs = TALER_ARL_adb->get_reserve_info (TALER_ARL_adb->cls,
&rs->reserve_pub,
- &TALER_ARL_master_pub,
&rowid,
- &rs->balance_at_previous_audit,
- &rs->a_withdraw_fee_balance,
+ &rs->prev_balance,
&rs->a_expiration_date,
&rs->sender_account);
if (0 > qs)
@@ -331,34 +332,38 @@ load_auditor_reserve_summary (struct ReserveSummary *rs)
}
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
- rs->had_ri = GNUNET_NO;
+ rs->had_ri = false;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.reserve_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.reserve_loss));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.withdraw_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.close_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (rs->total_in.currency,
+ &rs->prev_balance.purse_fee_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (rs->total_in.currency,
- &rs->balance_at_previous_audit));
+ &rs->prev_balance.open_fee_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (rs->total_in.currency,
- &rs->a_withdraw_fee_balance));
+ &rs->prev_balance.history_fee_balance));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Creating fresh reserve `%s' with starting balance %s\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&rs->balance_at_previous_audit));
+ "Creating fresh reserve `%s'\n",
+ TALER_B2S (&rs->reserve_pub));
return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
}
- rs->had_ri = GNUNET_YES;
- if ( (GNUNET_YES !=
- TALER_amount_cmp_currency (&rs->balance_at_previous_audit,
- &rs->a_withdraw_fee_balance)) ||
- (GNUNET_YES !=
- TALER_amount_cmp_currency (&rs->total_in,
- &rs->balance_at_previous_audit)) )
- {
- GNUNET_break (0);
- return GNUNET_DB_STATUS_HARD_ERROR;
- }
+ rs->had_ri = true;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Auditor remembers reserve `%s' has balance %s\n",
TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&rs->balance_at_previous_audit));
+ TALER_amount2s (&rs->prev_balance.reserve_balance));
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
}
@@ -390,6 +395,72 @@ struct ReserveContext
/**
+ * Create a new reserve for @a reserve_pub in @a rc.
+ *
+ * @param[in,out] rc context to update
+ * @param reserve_pub key for which to create a reserve
+ * @return NULL on error
+ */
+static struct ReserveSummary *
+setup_reserve (struct ReserveContext *rc,
+ const struct TALER_ReservePublicKeyP *reserve_pub)
+{
+ struct ReserveSummary *rs;
+ struct GNUNET_HashCode key;
+ enum GNUNET_DB_QueryStatus qs;
+
+ GNUNET_CRYPTO_hash (reserve_pub,
+ sizeof (*reserve_pub),
+ &key);
+ rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
+ &key);
+ if (NULL != rs)
+ return rs;
+ rs = GNUNET_new (struct ReserveSummary);
+ rs->reserve_pub = *reserve_pub;
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->total_in));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->total_out));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.reserve_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.reserve_loss));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.withdraw_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.close_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.purse_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.open_fee_balance));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.history_fee_balance));
+ if (0 > (qs = load_auditor_reserve_summary (rs)))
+ {
+ GNUNET_free (rs);
+ rc->qs = qs;
+ return NULL;
+ }
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (rc->reserves,
+ &key,
+ rs,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ return rs;
+}
+
+
+/**
* Function called with details about incoming wire transfers.
*
* @param cls our `struct ReserveContext`
@@ -401,72 +472,44 @@ struct ReserveContext
* @param execution_date when did we receive the funds
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
handle_reserve_in (void *cls,
uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_Amount *credit,
const char *sender_account_details,
uint64_t wire_reference,
- struct GNUNET_TIME_Absolute execution_date)
+ struct GNUNET_TIME_Timestamp execution_date)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
- struct GNUNET_TIME_Absolute expiry;
- enum GNUNET_DB_QueryStatus qs;
+ struct GNUNET_TIME_Timestamp expiry;
(void) wire_reference;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_in_serial_id);
- ppr.last_reserve_in_serial_id = rowid + 1;
-
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_in_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_in_serial_id) = rowid + 1;
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->sender_account = GNUNET_strdup (sender_account_details);
- rs->reserve_pub = *reserve_pub;
- rs->total_in = *credit;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (credit->currency,
- &rs->total_out));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (credit->currency,
- &rs->total_fee));
- if (0 > (qs = load_auditor_reserve_summary (rs)))
- {
- GNUNET_break (0);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
- }
- else
- {
- TALER_ARL_amount_add (&rs->total_in,
- &rs->total_in,
- credit);
- if (NULL == rs->sender_account)
- rs->sender_account = GNUNET_strdup (sender_account_details);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
+ if (NULL == rs->sender_account)
+ rs->sender_account = GNUNET_strdup (sender_account_details);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Additional incoming wire transfer for reserve `%s' of %s\n",
TALER_B2S (reserve_pub),
TALER_amount2s (credit));
- expiry = GNUNET_TIME_absolute_add (execution_date,
- idle_reserve_expiration_time);
- rs->a_expiration_date = GNUNET_TIME_absolute_max (rs->a_expiration_date,
- expiry);
+ expiry = GNUNET_TIME_absolute_to_timestamp (
+ GNUNET_TIME_absolute_add (execution_date.abs_time,
+ idle_reserve_expiration_time));
+ rs->a_expiration_date = GNUNET_TIME_timestamp_max (rs->a_expiration_date,
+ expiry);
+ TALER_ARL_amount_add (&rs->total_in,
+ &rs->total_in,
+ credit);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -487,42 +530,32 @@ handle_reserve_in (void *cls,
* @param amount_with_fee amount that was withdrawn
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
handle_reserve_out (void *cls,
uint64_t rowid,
- const struct GNUNET_HashCode *h_blind_ev,
+ const struct TALER_BlindedCoinHashP *h_blind_ev,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_ReserveSignatureP *reserve_sig,
- struct GNUNET_TIME_Absolute execution_date,
+ struct GNUNET_TIME_Timestamp execution_date,
const struct TALER_Amount *amount_with_fee)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
- const struct TALER_DenominationKeyValidityPS *issue;
- struct TALER_Amount withdraw_fee;
- struct TALER_Amount auditor_value;
+ const struct TALER_EXCHANGEDB_DenominationKeyInformation *issue;
struct TALER_Amount auditor_amount_with_fee;
- struct GNUNET_TIME_Absolute valid_start;
- struct GNUNET_TIME_Absolute expire_withdraw;
enum GNUNET_DB_QueryStatus qs;
- struct TALER_WithdrawRequestPS wsrd = {
- .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW),
- .purpose.size = htonl (sizeof (wsrd)),
- .reserve_pub = *reserve_pub,
- .h_coin_envelope = *h_blind_ev
- };
+ struct TALER_DenominationHashP h_denom_pub;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_out_serial_id);
- ppr.last_reserve_out_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_out_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_out_serial_id) = rowid + 1;
/* lookup denomination pub data (make sure denom_pub is valid, establish fees);
initializes wsrd.h_denomination_pub! */
qs = TALER_ARL_get_denomination_info (denom_pub,
&issue,
- &wsrd.h_denomination_pub);
+ &h_denom_pub);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -545,36 +578,37 @@ handle_reserve_out (void *cls,
}
/* check that execution date is within withdraw range for denom_pub */
- valid_start = GNUNET_TIME_absolute_ntoh (issue->start);
- expire_withdraw = GNUNET_TIME_absolute_ntoh (issue->expire_withdraw);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Checking withdraw timing: %llu, expire: %llu, timing: %llu\n",
- (unsigned long long) valid_start.abs_value_us,
- (unsigned long long) expire_withdraw.abs_value_us,
- (unsigned long long) execution_date.abs_value_us);
- if ( (valid_start.abs_value_us > execution_date.abs_value_us) ||
- (expire_withdraw.abs_value_us < execution_date.abs_value_us) )
+ (unsigned long long) issue->start.abs_time.abs_value_us,
+ (unsigned long long) issue->expire_withdraw.abs_time.abs_value_us,
+ (unsigned long long) execution_date.abs_time.abs_value_us);
+ if (GNUNET_TIME_timestamp_cmp (issue->start,
+ >,
+ execution_date) ||
+ GNUNET_TIME_timestamp_cmp (issue->expire_withdraw,
+ <,
+ execution_date))
{
TALER_ARL_report (denomination_key_validity_withdraw_inconsistencies,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_uint64 ("row",
rowid),
TALER_JSON_pack_time_abs_human ("execution_date",
- execution_date),
+ execution_date.abs_time),
GNUNET_JSON_pack_data_auto ("reserve_pub",
reserve_pub),
GNUNET_JSON_pack_data_auto ("denompub_h",
- &wsrd.h_denomination_pub)));
+ &h_denom_pub)));
}
/* check reserve_sig (first: setup remaining members of wsrd) */
- TALER_amount_hton (&wsrd.amount_with_fee,
- amount_with_fee);
if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW,
- &wsrd,
- &reserve_sig->eddsa_signature,
- &reserve_pub->eddsa_pub))
+ TALER_wallet_withdraw_verify (&h_denom_pub,
+ amount_with_fee,
+ h_blind_ev,
+ reserve_pub,
+ reserve_sig))
{
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
@@ -591,16 +625,12 @@ handle_reserve_out (void *cls,
amount_with_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
- return GNUNET_OK; /* exit function here, we cannot add this to the legitimate withdrawals */
+ return GNUNET_OK; /* exit function here, we cannot add this to the legitimate withdrawals */
}
- TALER_amount_ntoh (&withdraw_fee,
- &issue->fee_withdraw);
- TALER_amount_ntoh (&auditor_value,
- &issue->value);
TALER_ARL_amount_add (&auditor_amount_with_fee,
- &auditor_value,
- &withdraw_fee);
+ &issue->value,
+ &issue->fees.withdraw);
if (0 !=
TALER_amount_cmp (&auditor_amount_with_fee,
amount_with_fee))
@@ -609,43 +639,12 @@ handle_reserve_out (void *cls,
rowid,
"amount with fee from exchange does not match denomination value plus fee");
}
-
-
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->reserve_pub = *reserve_pub;
- rs->total_out = auditor_amount_with_fee;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount_with_fee->currency,
- &rs->total_in));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount_with_fee->currency,
- &rs->total_fee));
- qs = load_auditor_reserve_summary (rs);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
- }
- else
- {
- TALER_ARL_amount_add (&rs->total_out,
- &rs->total_out,
- &auditor_amount_with_fee);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Reserve `%s' reduced by %s from withdraw\n",
@@ -653,10 +652,16 @@ handle_reserve_out (void *cls,
TALER_amount2s (&auditor_amount_with_fee));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Increasing withdraw profits by fee %s\n",
- TALER_amount2s (&withdraw_fee));
- TALER_ARL_amount_add (&rs->total_fee,
- &rs->total_fee,
- &withdraw_fee);
+ TALER_amount2s (&issue->fees.withdraw));
+ TALER_ARL_amount_add (&rs->curr_balance.withdraw_fee_balance,
+ &rs->curr_balance.withdraw_fee_balance,
+ &issue->fees.withdraw);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_withdraw_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_withdraw_fee_revenue),
+ &issue->fees.withdraw);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ &auditor_amount_with_fee);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -679,22 +684,21 @@ handle_reserve_out (void *cls,
* @param coin_blind blinding factor used to blind the coin
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
handle_recoup_by_reserve (
void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute timestamp,
+ struct GNUNET_TIME_Timestamp timestamp,
const struct TALER_Amount *amount,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_CoinPublicInfo *coin,
const struct TALER_DenominationPublicKey *denom_pub,
const struct TALER_CoinSpendSignatureP *coin_sig,
- const struct TALER_DenominationBlindingKeyP *coin_blind)
+ const union GNUNET_CRYPTO_BlindingSecretP *coin_blind)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
- struct GNUNET_TIME_Absolute expiry;
+ struct GNUNET_TIME_Timestamp expiry;
struct TALER_MasterSignatureP msig;
uint64_t rev_rowid;
enum GNUNET_DB_QueryStatus qs;
@@ -702,44 +706,34 @@ handle_recoup_by_reserve (
(void) denom_pub;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_recoup_serial_id);
- ppr.last_reserve_recoup_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_recoup_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_recoup_serial_id) = rowid + 1;
/* We know that denom_pub matches denom_pub_hash because this
is how the SQL statement joined the tables. */
+ if (GNUNET_OK !=
+ TALER_wallet_recoup_verify (&coin->denom_pub_hash,
+ coin_blind,
+ &coin->coin_pub,
+ coin_sig))
{
- struct TALER_RecoupRequestPS pr = {
- .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_RECOUP),
- .purpose.size = htonl (sizeof (pr)),
- .h_denom_pub = coin->denom_pub_hash,
- .coin_pub = coin->coin_pub,
- .coin_blind = *coin_blind
- };
-
- if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_RECOUP,
- &pr,
- &coin_sig->eddsa_signature,
- &coin->coin_pub.eddsa_pub))
- {
- TALER_ARL_report (report_bad_sig_losses,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("operation",
- "recoup"),
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("loss",
- amount),
- GNUNET_JSON_pack_data_auto ("key_pub",
- &coin->coin_pub)));
- TALER_ARL_amount_add (&total_bad_sig_loss,
- &total_bad_sig_loss,
- amount);
- }
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "recoup"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ amount),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ &coin->coin_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ amount);
}
/* check that the coin was eligible for recoup!*/
rev = GNUNET_CONTAINER_multihashmap_get (rc->revoked,
- &coin->denom_pub_hash);
+ &coin->denom_pub_hash.hash);
if (NULL == rev)
{
qs = TALER_ARL_edb->get_denomination_revocation (TALER_ARL_edb->cls,
@@ -757,8 +751,8 @@ handle_recoup_by_reserve (
report_row_inconsistency ("recoup",
rowid,
"denomination key not in revocation set");
- TALER_ARL_amount_add (&total_irregular_recoups,
- &total_irregular_recoups,
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_reserve_loss),
+ &TALER_ARL_USE_AB (reserves_reserve_loss),
amount);
}
else
@@ -775,19 +769,22 @@ handle_recoup_by_reserve (
{
rev = "revoked";
}
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->revoked,
- &coin->denom_pub_hash,
- (void *) rev,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ GNUNET_assert (
+ GNUNET_OK ==
+ GNUNET_CONTAINER_multihashmap_put (
+ rc->revoked,
+ &coin->denom_pub_hash.hash,
+ (void *) rev,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
}
}
else
{
- rev_rowid = 0; /* reported elsewhere */
+ rev_rowid = 0; /* reported elsewhere */
}
if ( (NULL != rev) &&
- (0 == strcmp (rev, "master signature invalid")) )
+ (0 == strcmp (rev,
+ "master signature invalid")) )
{
TALER_ARL_report (report_bad_sig_losses,
GNUNET_JSON_PACK (
@@ -804,50 +801,25 @@ handle_recoup_by_reserve (
amount);
}
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->reserve_pub = *reserve_pub;
- rs->total_in = *amount;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount->currency,
- &rs->total_out));
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount->currency,
- &rs->total_fee));
- qs = load_auditor_reserve_summary (rs);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
- }
- else
- {
- TALER_ARL_amount_add (&rs->total_in,
- &rs->total_in,
- amount);
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
+ TALER_ARL_amount_add (&rs->total_in,
+ &rs->total_in,
+ amount);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Additional /recoup value to for reserve `%s' of %s\n",
TALER_B2S (reserve_pub),
TALER_amount2s (amount));
- expiry = GNUNET_TIME_absolute_add (timestamp,
- idle_reserve_expiration_time);
- rs->a_expiration_date = GNUNET_TIME_absolute_max (rs->a_expiration_date,
- expiry);
+ expiry = GNUNET_TIME_absolute_to_timestamp (
+ GNUNET_TIME_absolute_add (timestamp.abs_time,
+ idle_reserve_expiration_time));
+ rs->a_expiration_date = GNUNET_TIME_timestamp_max (rs->a_expiration_date,
+ expiry);
if (TALER_ARL_do_abort ())
return GNUNET_SYSERR;
return GNUNET_OK;
@@ -863,15 +835,15 @@ handle_recoup_by_reserve (
* @param[out] fee set to the closing fee
* @return #GNUNET_OK on success
*/
-static int
+static enum GNUNET_GenericReturnValue
get_closing_fee (const char *receiver_account,
- struct GNUNET_TIME_Absolute atime,
+ struct GNUNET_TIME_Timestamp atime,
struct TALER_Amount *fee)
{
struct TALER_MasterSignatureP master_sig;
- struct GNUNET_TIME_Absolute start_date;
- struct GNUNET_TIME_Absolute end_date;
- struct TALER_Amount wire_fee;
+ struct GNUNET_TIME_Timestamp start_date;
+ struct GNUNET_TIME_Timestamp end_date;
+ struct TALER_WireFeeSet fees;
char *method;
method = TALER_payto_get_method (receiver_account);
@@ -884,8 +856,7 @@ get_closing_fee (const char *receiver_account,
atime,
&start_date,
&end_date,
- &wire_fee,
- fee,
+ &fees,
&master_sig))
{
char *diag;
@@ -893,20 +864,103 @@ get_closing_fee (const char *receiver_account,
GNUNET_asprintf (&diag,
"closing fee for `%s' unavailable at %s\n",
method,
- GNUNET_STRINGS_absolute_time_to_string (atime));
+ GNUNET_TIME_timestamp2s (atime));
report_row_inconsistency ("closing-fee",
- atime.abs_value_us,
+ atime.abs_time.abs_value_us,
diag);
GNUNET_free (diag);
GNUNET_free (method);
return GNUNET_SYSERR;
}
+ *fee = fees.closing;
GNUNET_free (method);
return GNUNET_OK;
}
/**
+ * Function called about reserve opening operations.
+ *
+ * @param cls closure
+ * @param rowid row identifier used to uniquely identify the reserve closing operation
+ * @param reserve_payment how much to pay from the
+ * reserve's own balance for opening the reserve
+ * @param request_timestamp when was the request created
+ * @param reserve_expiration desired expiration time for the reserve
+ * @param purse_limit minimum number of purses the client
+ * wants to have concurrently open for this reserve
+ * @param reserve_pub public key of the reserve
+ * @param reserve_sig signature affirming the operation
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_reserve_open (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_Amount *reserve_payment,
+ struct GNUNET_TIME_Timestamp request_timestamp,
+ struct GNUNET_TIME_Timestamp reserve_expiration,
+ uint32_t purse_limit,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_ReserveSignatureP *reserve_sig)
+{
+ struct ReserveContext *rc = cls;
+ struct ReserveSummary *rs;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_open_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_open_serial_id) = rowid + 1;
+
+ rs = setup_reserve (rc,
+ reserve_pub);
+ if (NULL == rs)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_OK !=
+ TALER_wallet_reserve_open_verify (reserve_payment,
+ request_timestamp,
+ reserve_expiration,
+ purse_limit,
+ reserve_pub,
+ reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "reserve-open"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ reserve_payment),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ reserve_payment);
+ return GNUNET_OK;
+ }
+ TALER_ARL_amount_add (&rs->curr_balance.open_fee_balance,
+ &rs->curr_balance.open_fee_balance,
+ reserve_payment);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_open_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_open_fee_revenue),
+ reserve_payment);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ reserve_payment);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Additional open operation for reserve `%s' of %s\n",
+ TALER_B2S (reserve_pub),
+ TALER_amount2s (reserve_payment));
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+}
+
+
+/**
* Function called about reserve closing operations
* the aggregator triggered.
*
@@ -918,67 +972,40 @@ get_closing_fee (const char *receiver_account,
* @param reserve_pub public key of the reserve
* @param receiver_account where did we send the funds
* @param transfer_details details about the wire transfer
+ * @param close_request_row which close request triggered the operation?
+ * 0 if it was a timeout
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
handle_reserve_closed (
void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute execution_date,
+ struct GNUNET_TIME_Timestamp execution_date,
const struct TALER_Amount *amount_with_fee,
const struct TALER_Amount *closing_fee,
const struct TALER_ReservePublicKeyP *reserve_pub,
const char *receiver_account,
- const struct TALER_WireTransferIdentifierRawP *transfer_details)
+ const struct TALER_WireTransferIdentifierRawP *transfer_details,
+ uint64_t close_request_row)
{
struct ReserveContext *rc = cls;
- struct GNUNET_HashCode key;
struct ReserveSummary *rs;
- enum GNUNET_DB_QueryStatus qs;
(void) transfer_details;
/* should be monotonically increasing */
- GNUNET_assert (rowid >= ppr.last_reserve_close_serial_id);
- ppr.last_reserve_close_serial_id = rowid + 1;
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_reserve_close_serial_id));
+ TALER_ARL_USE_PP (reserves_reserve_close_serial_id) = rowid + 1;
- GNUNET_CRYPTO_hash (reserve_pub,
- sizeof (*reserve_pub),
- &key);
- rs = GNUNET_CONTAINER_multihashmap_get (rc->reserves,
- &key);
+ rs = setup_reserve (rc,
+ reserve_pub);
if (NULL == rs)
{
- rs = GNUNET_new (struct ReserveSummary);
- rs->reserve_pub = *reserve_pub;
- rs->total_out = *amount_with_fee;
- rs->total_fee = *closing_fee;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (amount_with_fee->currency,
- &rs->total_in));
- qs = load_auditor_reserve_summary (rs);
- if (0 > qs)
- {
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
- GNUNET_free (rs);
- rc->qs = qs;
- return GNUNET_SYSERR;
- }
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CONTAINER_multihashmap_put (rc->reserves,
- &key,
- rs,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
}
- else
{
struct TALER_Amount expected_fee;
- TALER_ARL_amount_add (&rs->total_out,
- &rs->total_out,
- amount_with_fee);
- TALER_ARL_amount_add (&rs->total_fee,
- &rs->total_fee,
- closing_fee);
/* verify closing_fee is correct! */
if (GNUNET_OK !=
get_closing_fee (receiver_account,
@@ -998,20 +1025,117 @@ handle_reserve_closed (
1);
}
}
- if (NULL == rs->sender_account)
+
+ TALER_ARL_amount_add (&rs->curr_balance.close_fee_balance,
+ &rs->curr_balance.close_fee_balance,
+ closing_fee);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_close_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_close_fee_revenue),
+ closing_fee);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ amount_with_fee);
+ if (0 != close_request_row)
{
- GNUNET_break (GNUNET_NO == rs->had_ri);
- report_row_inconsistency ("reserves_close",
- rowid,
- "target account not verified, auditor does not know reserve");
+ struct TALER_ReserveSignatureP reserve_sig;
+ struct GNUNET_TIME_Timestamp request_timestamp;
+ struct TALER_Amount close_balance;
+ struct TALER_Amount close_fee;
+ char *payto_uri;
+ enum GNUNET_DB_QueryStatus qs;
+
+ qs = TALER_ARL_edb->select_reserve_close_request_info (
+ TALER_ARL_edb->cls,
+ reserve_pub,
+ close_request_row,
+ &reserve_sig,
+ &request_timestamp,
+ &close_balance,
+ &close_fee,
+ &payto_uri);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "reserve close request unknown");
+ }
+ else
+ {
+ struct TALER_PaytoHashP h_payto;
+
+ TALER_payto_hash (payto_uri,
+ &h_payto);
+ if (GNUNET_OK !=
+ TALER_wallet_reserve_close_verify (
+ request_timestamp,
+ &h_payto,
+ reserve_pub,
+ &reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "close-request"),
+ GNUNET_JSON_pack_uint64 ("row",
+ close_request_row),
+ TALER_JSON_pack_amount ("loss",
+ amount_with_fee),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ amount_with_fee);
+ }
+ }
+ if ( (NULL == payto_uri) &&
+ (NULL == rs->sender_account) )
+ {
+ GNUNET_break (! rs->had_ri);
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account not verified, auditor does not know reserve");
+ }
+ if (NULL == payto_uri)
+ {
+ if ( (NULL == rs->sender_account) ||
+ (0 != strcmp (rs->sender_account,
+ receiver_account)) )
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account does not match origin account");
+ }
+ }
+ else
+ {
+ if (0 != strcmp (payto_uri,
+ receiver_account))
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account does not match origin account");
+ }
+ }
+ GNUNET_free (payto_uri);
}
- else if (0 != strcmp (rs->sender_account,
- receiver_account))
+ else
{
- report_row_inconsistency ("reserves_close",
- rowid,
- "target account does not match origin account");
+ if (NULL == rs->sender_account)
+ {
+ GNUNET_break (! rs->had_ri);
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account not verified, auditor does not know reserve");
+ }
+ else if (0 != strcmp (rs->sender_account,
+ receiver_account))
+ {
+ report_row_inconsistency ("reserves_close",
+ rowid,
+ "target account does not match origin account");
+ }
}
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Additional closing operation for reserve `%s' of %s\n",
TALER_B2S (reserve_pub),
@@ -1023,6 +1147,137 @@ handle_reserve_closed (
/**
+ * Function called with details about account merge requests that have been
+ * made, with the goal of accounting for the merge fee paid by the reserve (if
+ * applicable).
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param reserve_pub reserve affected by the merge
+ * @param purse_pub purse being merged
+ * @param h_contract_terms hash over contract of the purse
+ * @param purse_expiration when would the purse expire
+ * @param amount total amount in the purse
+ * @param min_age minimum age of all coins deposited into the purse
+ * @param flags how was the purse created
+ * @param purse_fee if a purse fee was paid, how high is it
+ * @param merge_timestamp when was the merge approved
+ * @param reserve_sig signature by reserve approving the merge
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+handle_account_merged (
+ void *cls,
+ uint64_t rowid,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ struct GNUNET_TIME_Timestamp purse_expiration,
+ const struct TALER_Amount *amount,
+ uint32_t min_age,
+ enum TALER_WalletAccountMergeFlags flags,
+ const struct TALER_Amount *purse_fee,
+ struct GNUNET_TIME_Timestamp merge_timestamp,
+ const struct TALER_ReserveSignatureP *reserve_sig)
+{
+ struct ReserveContext *rc = cls;
+ struct ReserveSummary *rs;
+
+ /* should be monotonically increasing */
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (reserves_account_merges_serial_id));
+ TALER_ARL_USE_PP (reserves_account_merges_serial_id) = rowid + 1;
+ if (GNUNET_OK !=
+ TALER_wallet_account_merge_verify (merge_timestamp,
+ purse_pub,
+ purse_expiration,
+ h_contract_terms,
+ amount,
+ purse_fee,
+ min_age,
+ flags,
+ reserve_pub,
+ reserve_sig))
+ {
+ TALER_ARL_report (report_bad_sig_losses,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("operation",
+ "account-merge"),
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("loss",
+ purse_fee),
+ GNUNET_JSON_pack_data_auto ("key_pub",
+ reserve_pub)));
+ TALER_ARL_amount_add (&total_bad_sig_loss,
+ &total_bad_sig_loss,
+ purse_fee);
+ return GNUNET_OK;
+ }
+ if ( (flags & TALER_WAMF_MERGE_MODE_MASK) !=
+ TALER_WAMF_MODE_CREATE_WITH_PURSE_FEE)
+ return GNUNET_OK; /* no impact on reserve balance */
+ rs = setup_reserve (rc,
+ reserve_pub);
+ if (NULL == rs)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_purse_fee_revenue),
+ &TALER_ARL_USE_AB (reserves_purse_fee_revenue),
+ purse_fee);
+ TALER_ARL_amount_add (&rs->curr_balance.purse_fee_balance,
+ &rs->curr_balance.purse_fee_balance,
+ purse_fee);
+ TALER_ARL_amount_add (&rs->total_out,
+ &rs->total_out,
+ purse_fee);
+ return GNUNET_OK;
+}
+
+
+/**
+ * Function called with details about a purse that was merged into an account.
+ * Only updates the reserve balance, the actual verifications are done in the
+ * purse helper.
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the refund in our DB
+ * @param purse_pub public key of the purse
+ * @param reserve_pub which reserve is the purse credited to
+ * @param purse_value what is the target value of the purse
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+purse_decision_cb (void *cls,
+ uint64_t rowid,
+ const struct TALER_PurseContractPublicKeyP *purse_pub,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_Amount *purse_value)
+{
+ struct ReserveContext *rc = cls;
+ struct ReserveSummary *rs;
+
+ GNUNET_assert (rowid >= TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id)); /* should be monotonically increasing */
+ TALER_ARL_USE_PP (reserves_purse_decisions_serial_id) = rowid + 1;
+ rs = setup_reserve (rc,
+ reserve_pub);
+ if (NULL == rs)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ TALER_ARL_amount_add (&rs->total_in,
+ &rs->total_in,
+ purse_value);
+ if (TALER_ARL_do_abort ())
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
+}
+
+
+/**
* Check that the reserve summary matches what the exchange database
* thinks about the reserve, and update our own state of the reserve.
*
@@ -1033,36 +1288,39 @@ handle_reserve_closed (
* @param value a `struct ReserveSummary`
* @return #GNUNET_OK to process more entries
*/
-static int
+static enum GNUNET_GenericReturnValue
verify_reserve_balance (void *cls,
const struct GNUNET_HashCode *key,
void *value)
{
struct ReserveContext *rc = cls;
struct ReserveSummary *rs = value;
- struct TALER_Amount balance;
+ struct TALER_Amount mbalance;
struct TALER_Amount nbalance;
enum GNUNET_DB_QueryStatus qs;
- int ret;
+ enum GNUNET_GenericReturnValue ret;
ret = GNUNET_OK;
/* Check our reserve summary balance calculation shows that
the reserve balance is acceptable (i.e. non-negative) */
- TALER_ARL_amount_add (&balance,
+ TALER_ARL_amount_add (&mbalance,
&rs->total_in,
- &rs->balance_at_previous_audit);
+ &rs->prev_balance.reserve_balance);
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&nbalance,
- &balance,
+ &mbalance,
&rs->total_out))
{
struct TALER_Amount loss;
TALER_ARL_amount_subtract (&loss,
&rs->total_out,
- &balance);
- TALER_ARL_amount_add (&total_balance_insufficient_loss,
- &total_balance_insufficient_loss,
+ &mbalance);
+ TALER_ARL_amount_add (&rs->curr_balance.reserve_loss,
+ &rs->prev_balance.reserve_loss,
+ &loss);
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_reserve_loss),
+ &TALER_ARL_USE_AB (reserves_reserve_loss),
&loss);
TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies,
GNUNET_JSON_PACK (
@@ -1072,8 +1330,13 @@ verify_reserve_balance (void *cls,
&loss)));
/* Continue with a reserve balance of zero */
GNUNET_assert (GNUNET_OK ==
- TALER_amount_set_zero (balance.currency,
- &nbalance));
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &rs->curr_balance.reserve_balance));
+ }
+ else
+ {
+ /* Update remaining reserve balance! */
+ rs->curr_balance.reserve_balance = nbalance;
}
if (internal_checks)
@@ -1094,7 +1357,7 @@ verify_reserve_balance (void *cls,
making an illegitimate gain over the amount it dropped.
We don't add the amount to some total simply because it is
not an actualized gain and could be trivially corrected by
- restoring the summary. *///
+ restoring the summary. */
TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_data_auto ("reserve_pub",
@@ -1111,17 +1374,17 @@ verify_reserve_balance (void *cls,
else
{
/* Check that exchange's balance matches our expected balance for the reserve */
- if (0 != TALER_amount_cmp (&nbalance,
+ if (0 != TALER_amount_cmp (&rs->curr_balance.reserve_balance,
&reserve.balance))
{
struct TALER_Amount delta;
- if (0 < TALER_amount_cmp (&nbalance,
+ if (0 < TALER_amount_cmp (&rs->curr_balance.reserve_balance,
&reserve.balance))
{
/* balance > reserve.balance */
TALER_ARL_amount_subtract (&delta,
- &nbalance,
+ &rs->curr_balance.reserve_balance,
&reserve.balance);
TALER_ARL_amount_add (&total_balance_summary_delta_plus,
&total_balance_summary_delta_plus,
@@ -1132,7 +1395,7 @@ verify_reserve_balance (void *cls,
/* balance < reserve.balance */
TALER_ARL_amount_subtract (&delta,
&reserve.balance,
- &nbalance);
+ &rs->curr_balance.reserve_balance);
TALER_ARL_amount_add (&total_balance_summary_delta_minus,
&total_balance_summary_delta_minus,
&delta);
@@ -1144,15 +1407,18 @@ verify_reserve_balance (void *cls,
TALER_JSON_pack_amount ("exchange",
&reserve.balance),
TALER_JSON_pack_amount ("auditor",
- &nbalance)));
+ &rs->curr_balance.
+ reserve_balance)));
}
}
- } /* end of 'if (internal_checks)' */
+ } /* end of 'if (internal_checks)' */
/* Check that reserve is being closed if it is past its expiration date
(and the closing fee would not exceed the remaining balance) */
- if (CLOSING_GRACE_PERIOD.rel_value_us <
- GNUNET_TIME_absolute_get_duration (rs->a_expiration_date).rel_value_us)
+ if (GNUNET_TIME_relative_cmp (CLOSING_GRACE_PERIOD,
+ <,
+ GNUNET_TIME_absolute_get_duration (
+ rs->a_expiration_date.abs_time)))
{
/* Reserve is expired */
struct TALER_Amount cfee;
@@ -1179,7 +1445,7 @@ verify_reserve_balance (void *cls,
TALER_JSON_pack_amount ("balance",
&nbalance),
TALER_JSON_pack_time_abs_human ("expiration_time",
- rs->a_expiration_date)));
+ rs->a_expiration_date.abs_time)));
}
}
else
@@ -1188,39 +1454,57 @@ verify_reserve_balance (void *cls,
TALER_ARL_amount_add (&total_balance_reserve_not_closed,
&total_balance_reserve_not_closed,
&nbalance);
- TALER_ARL_report (report_reserve_not_closed_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_data_auto ("reserve_pub",
- &rs->reserve_pub),
- TALER_JSON_pack_amount ("balance",
- &nbalance),
- TALER_JSON_pack_time_abs_human ("expiration_time",
- rs->a_expiration_date),
- GNUNET_JSON_pack_string ("diagnostic",
- "could not determine closing fee")));
+ TALER_ARL_report (
+ report_reserve_not_closed_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ &rs->reserve_pub),
+ TALER_JSON_pack_amount ("balance",
+ &nbalance),
+ TALER_JSON_pack_time_abs_human ("expiration_time",
+ rs->a_expiration_date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "could not determine closing fee")));
}
}
- /* Add withdraw fees we encountered to totals */
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Reserve reserve `%s' made %s in withdraw fees\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&rs->total_fee));
- TALER_ARL_amount_add (&rs->a_withdraw_fee_balance,
- &rs->a_withdraw_fee_balance,
- &rs->total_fee);
- TALER_ARL_amount_add (&total_escrow_balance,
- &total_escrow_balance,
+ /* We already computed the 'new' balance in 'curr_balance'
+ to include the previous balance, so this one is just
+ an assignment, not adding up! */
+ rs->prev_balance.reserve_balance = rs->curr_balance.reserve_balance;
+
+ /* Add up new totals to previous totals */
+ TALER_ARL_amount_add (&rs->prev_balance.reserve_loss,
+ &rs->prev_balance.reserve_loss,
+ &rs->curr_balance.reserve_loss);
+ TALER_ARL_amount_add (&rs->prev_balance.withdraw_fee_balance,
+ &rs->prev_balance.withdraw_fee_balance,
+ &rs->curr_balance.withdraw_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.close_fee_balance,
+ &rs->prev_balance.close_fee_balance,
+ &rs->curr_balance.close_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.purse_fee_balance,
+ &rs->prev_balance.purse_fee_balance,
+ &rs->curr_balance.purse_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.open_fee_balance,
+ &rs->prev_balance.open_fee_balance,
+ &rs->curr_balance.open_fee_balance);
+ TALER_ARL_amount_add (&rs->prev_balance.history_fee_balance,
+ &rs->prev_balance.history_fee_balance,
+ &rs->curr_balance.history_fee_balance);
+
+ /* Update global balance: add incoming first, then try
+ to subtract outgoing... */
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (reserves_reserve_total_balance),
+ &TALER_ARL_USE_AB (reserves_reserve_total_balance),
&rs->total_in);
- TALER_ARL_amount_add (&total_withdraw_fee_income,
- &total_withdraw_fee_income,
- &rs->total_fee);
{
struct TALER_Amount r;
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&r,
- &total_escrow_balance,
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance),
&rs->total_out))
{
/* We could not reduce our total balance, i.e. exchange allowed IN TOTAL (!)
@@ -1228,34 +1512,33 @@ verify_reserve_balance (void *cls,
went negative!). Woopsie. Calculate how badly it went and log. */
report_amount_arithmetic_inconsistency ("global escrow balance",
0,
- &total_escrow_balance, /* what we had */
- &rs->total_out, /* what we needed */
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance), /* what we had */
+ &rs->total_out, /* what we needed */
0 /* specific profit/loss does not apply to the total summary */);
/* We unexpectedly went negative, so a sane value to continue from
would be zero. */
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_escrow_balance));
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance)));
}
else
{
- total_escrow_balance = r;
+ TALER_ARL_USE_AB (reserves_reserve_total_balance) = r;
}
}
- if ( (0ULL == balance.value) &&
- (0U == balance.fraction) )
+ if (TALER_amount_is_zero (&rs->prev_balance.reserve_balance))
{
/* balance is zero, drop reserve details (and then do not update/insert) */
if (rs->had_ri)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Final balance of reserve `%s' is %s, dropping it\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&nbalance));
+ "Final balance of reserve `%s' is zero, dropping it\n",
+ TALER_B2S (&rs->reserve_pub));
qs = TALER_ARL_adb->del_reserve_info (TALER_ARL_adb->cls,
- &rs->reserve_pub,
- &TALER_ARL_master_pub);
+ &rs->reserve_pub);
if (0 >= qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -1266,9 +1549,8 @@ verify_reserve_balance (void *cls,
else
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Final balance of reserve `%s' is %s, no need to remember it\n",
- TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&nbalance));
+ "Final balance of reserve `%s' is zero, no need to remember it\n",
+ TALER_B2S (&rs->reserve_pub));
}
}
else
@@ -1277,20 +1559,16 @@ verify_reserve_balance (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Remembering final balance of reserve `%s' as %s\n",
TALER_B2S (&rs->reserve_pub),
- TALER_amount2s (&nbalance));
+ TALER_amount2s (&rs->prev_balance.reserve_balance));
if (rs->had_ri)
qs = TALER_ARL_adb->update_reserve_info (TALER_ARL_adb->cls,
&rs->reserve_pub,
- &TALER_ARL_master_pub,
- &nbalance,
- &rs->a_withdraw_fee_balance,
+ &rs->prev_balance,
rs->a_expiration_date);
else
qs = TALER_ARL_adb->insert_reserve_info (TALER_ARL_adb->cls,
&rs->reserve_pub,
- &TALER_ARL_master_pub,
- &nbalance,
- &rs->a_withdraw_fee_balance,
+ &rs->prev_balance,
rs->a_expiration_date,
rs->sender_account);
if (0 >= qs)
@@ -1300,7 +1578,7 @@ verify_reserve_balance (void *cls,
rc->qs = qs;
}
}
-
+ /* now we can discard the cached entry */
GNUNET_assert (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_remove (rc->reserves,
key,
@@ -1328,9 +1606,17 @@ analyze_reserves (void *cls)
(void) cls;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Analyzing reserves\n");
- qsp = TALER_ARL_adb->get_auditor_progress_reserve (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppr);
+ qsp = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (reserves_reserve_in_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_out_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_recoup_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_open_serial_id),
+ TALER_ARL_GET_PP (reserves_reserve_close_serial_id),
+ TALER_ARL_GET_PP (reserves_purse_decisions_serial_id),
+ TALER_ARL_GET_PP (reserves_account_merges_serial_id),
+ TALER_ARL_GET_PP (reserves_history_requests_serial_id),
+ NULL);
if (0 > qsp)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsp);
@@ -1343,19 +1629,36 @@ analyze_reserves (void *cls)
}
else
{
- ppr_start = ppr;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Resuming reserve audit at %llu/%llu/%llu/%llu\n",
- (unsigned long long) ppr.last_reserve_in_serial_id,
- (unsigned long long) ppr.last_reserve_out_serial_id,
- (unsigned long long) ppr.last_reserve_recoup_serial_id,
- (unsigned long long) ppr.last_reserve_close_serial_id);
+ "Resuming reserve audit at %llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_in_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_out_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_recoup_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_open_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_close_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_account_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_history_requests_serial_id));
}
rc.qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
- qsx = TALER_ARL_adb->get_reserve_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_withdraw_fee_income);
+ qsx = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (reserves_reserve_total_balance),
+ TALER_ARL_GET_AB (reserves_reserve_loss),
+ TALER_ARL_GET_AB (reserves_withdraw_fee_revenue),
+ TALER_ARL_GET_AB (reserves_close_fee_revenue),
+ TALER_ARL_GET_AB (reserves_purse_fee_revenue),
+ TALER_ARL_GET_AB (reserves_open_fee_revenue),
+ TALER_ARL_GET_AB (reserves_history_fee_revenue),
+ NULL);
if (qsx < 0)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx);
@@ -1365,10 +1668,9 @@ analyze_reserves (void *cls)
GNUNET_NO);
rc.revoked = GNUNET_CONTAINER_multihashmap_create (4,
GNUNET_NO);
-
qs = TALER_ARL_edb->select_reserves_in_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_in_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_in_serial_id),
&handle_reserve_in,
&rc);
if (qs < 0)
@@ -1378,7 +1680,7 @@ analyze_reserves (void *cls)
}
qs = TALER_ARL_edb->select_withdrawals_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_out_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_out_serial_id),
&handle_reserve_out,
&rc);
if (qs < 0)
@@ -1388,7 +1690,7 @@ analyze_reserves (void *cls)
}
qs = TALER_ARL_edb->select_recoup_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_recoup_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_recoup_serial_id),
&handle_recoup_by_reserve,
&rc);
if (qs < 0)
@@ -1396,9 +1698,19 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs;
}
+ qs = TALER_ARL_edb->select_reserve_open_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (reserves_reserve_open_serial_id),
+ &handle_reserve_open,
+ &rc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
qs = TALER_ARL_edb->select_reserve_closed_above_serial_id (
TALER_ARL_edb->cls,
- ppr.last_reserve_close_serial_id,
+ TALER_ARL_USE_PP (reserves_reserve_close_serial_id),
&handle_reserve_closed,
&rc);
if (qs < 0)
@@ -1406,7 +1718,31 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs;
}
-
+ /* process purse_decisions (to credit reserve) */
+ if (0 >
+ (qs = TALER_ARL_edb->select_purse_decisions_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (reserves_purse_decisions_serial_id),
+ false, /* only go for merged purses! */
+ &purse_decision_cb,
+ &rc)))
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
+ if (0 > rc.qs)
+ return rc.qs;
+ /* Charge purse fee! */
+ qs = TALER_ARL_edb->select_account_merges_above_serial_id (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (reserves_account_merges_serial_id),
+ &handle_account_merged,
+ &rc);
+ if (qs < 0)
+ {
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ return qs;
+ }
GNUNET_CONTAINER_multihashmap_iterate (rc.reserves,
&verify_reserve_balance,
&rc);
@@ -1414,23 +1750,33 @@ analyze_reserves (void *cls)
GNUNET_CONTAINER_multihashmap_size (rc.reserves));
GNUNET_CONTAINER_multihashmap_destroy (rc.reserves);
GNUNET_CONTAINER_multihashmap_destroy (rc.revoked);
-
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != rc.qs)
return qs;
-
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qsx)
{
- qs = TALER_ARL_adb->insert_reserve_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_withdraw_fee_income);
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (reserves_reserve_total_balance),
+ TALER_ARL_SET_AB (reserves_reserve_loss),
+ TALER_ARL_SET_AB (reserves_withdraw_fee_revenue),
+ TALER_ARL_SET_AB (reserves_close_fee_revenue),
+ TALER_ARL_SET_AB (reserves_purse_fee_revenue),
+ TALER_ARL_SET_AB (reserves_open_fee_revenue),
+ TALER_ARL_SET_AB (reserves_history_fee_revenue),
+ NULL);
}
else
{
- qs = TALER_ARL_adb->update_reserve_summary (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &total_escrow_balance,
- &total_withdraw_fee_income);
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (reserves_reserve_total_balance),
+ TALER_ARL_SET_AB (reserves_reserve_loss),
+ TALER_ARL_SET_AB (reserves_withdraw_fee_revenue),
+ TALER_ARL_SET_AB (reserves_close_fee_revenue),
+ TALER_ARL_SET_AB (reserves_purse_fee_revenue),
+ TALER_ARL_SET_AB (reserves_open_fee_revenue),
+ TALER_ARL_SET_AB (reserves_history_fee_revenue),
+ NULL);
}
if (0 >= qs)
{
@@ -1438,13 +1784,29 @@ analyze_reserves (void *cls)
return qs;
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsp)
- qs = TALER_ARL_adb->update_auditor_progress_reserve (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppr);
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (reserves_reserve_in_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_out_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_recoup_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_open_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_close_serial_id),
+ TALER_ARL_SET_PP (reserves_purse_decisions_serial_id),
+ TALER_ARL_SET_PP (reserves_account_merges_serial_id),
+ TALER_ARL_SET_PP (reserves_history_requests_serial_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_auditor_progress_reserve (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &ppr);
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (reserves_reserve_in_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_out_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_recoup_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_open_serial_id),
+ TALER_ARL_SET_PP (reserves_reserve_close_serial_id),
+ TALER_ARL_SET_PP (reserves_purse_decisions_serial_id),
+ TALER_ARL_SET_PP (reserves_account_merges_serial_id),
+ TALER_ARL_SET_PP (reserves_history_requests_serial_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -1453,11 +1815,23 @@ analyze_reserves (void *cls)
return qs;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Concluded reserve audit step at %llu/%llu/%llu/%llu\n",
- (unsigned long long) ppr.last_reserve_in_serial_id,
- (unsigned long long) ppr.last_reserve_out_serial_id,
- (unsigned long long) ppr.last_reserve_recoup_serial_id,
- (unsigned long long) ppr.last_reserve_close_serial_id);
+ "Concluded reserve audit step at %llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_in_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_out_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_recoup_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_open_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_reserve_close_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_account_merges_serial_id),
+ (unsigned long long) TALER_ARL_USE_PP (
+ reserves_history_requests_serial_id));
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
}
@@ -1503,16 +1877,33 @@ run (void *cls,
"Starting audit\n");
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_escrow_balance));
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ reserves_reserve_loss)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ reserves_withdraw_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_irregular_recoups));
+ &TALER_ARL_USE_AB (
+ reserves_close_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_withdraw_fee_income));
+ &TALER_ARL_USE_AB (
+ reserves_purse_fee_revenue)));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_balance_insufficient_loss));
+ &TALER_ARL_USE_AB (
+ reserves_open_fee_revenue)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (
+ reserves_history_fee_revenue)));
+ // REVIEW:
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_balance_summary_delta_plus));
@@ -1531,6 +1922,7 @@ run (void *cls,
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_bad_sig_loss));
+
GNUNET_assert (NULL !=
(report_row_inconsistencies = json_array ()));
GNUNET_assert (NULL !=
@@ -1543,6 +1935,9 @@ run (void *cls,
(report_reserve_balance_insufficient_inconsistencies
= json_array ()));
GNUNET_assert (NULL !=
+ (report_purse_balance_insufficient_inconsistencies
+ = json_array ()));
+ GNUNET_assert (NULL !=
(report_reserve_not_closed_inconsistencies
= json_array ()));
GNUNET_assert (NULL !=
@@ -1559,12 +1954,6 @@ run (void *cls,
}
TALER_ARL_done (
GNUNET_JSON_PACK (
- GNUNET_JSON_pack_array_steal (
- "reserve_balance_insufficient_inconsistencies",
- report_reserve_balance_insufficient_inconsistencies),
- /* Tested in test-auditor.sh #3 */
- TALER_JSON_pack_amount ("total_loss_balance_insufficient",
- &total_balance_insufficient_loss),
/* Tested in test-auditor.sh #3 */
GNUNET_JSON_pack_array_steal (
"reserve_balance_summary_wrong_inconsistencies",
@@ -1573,23 +1962,49 @@ run (void *cls,
&total_balance_summary_delta_plus),
TALER_JSON_pack_amount ("total_balance_summary_delta_minus",
&total_balance_summary_delta_minus),
- /* blocks #2 */
+ /* Tested in test-auditor.sh #21 */
+ TALER_JSON_pack_amount ("total_balance_reserve_not_closed",
+ &total_balance_reserve_not_closed),
+ /* Tested in test-auditor.sh #7 */
+ TALER_JSON_pack_amount ("total_bad_sig_loss",
+ &total_bad_sig_loss),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
+ &total_arithmetic_delta_plus),
+ TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
+ &total_arithmetic_delta_minus),
+
+ /* Global 'balances' */
TALER_JSON_pack_amount ("total_escrow_balance",
- &total_escrow_balance),
+ &TALER_ARL_USE_AB (
+ reserves_reserve_total_balance)),
+ /* Tested in test-auditor.sh #3 */
+ TALER_JSON_pack_amount ("total_irregular_loss",
+ &TALER_ARL_USE_AB (reserves_reserve_loss)),
TALER_JSON_pack_amount ("total_withdraw_fee_income",
- &total_withdraw_fee_income),
+ &TALER_ARL_USE_AB (
+ reserves_withdraw_fee_revenue)),
+ TALER_JSON_pack_amount ("total_close_fee_income",
+ &TALER_ARL_USE_AB (reserves_close_fee_revenue)),
+ TALER_JSON_pack_amount ("total_purse_fee_income",
+ &TALER_ARL_USE_AB (reserves_purse_fee_revenue)),
+ TALER_JSON_pack_amount ("total_open_fee_income",
+ &TALER_ARL_USE_AB (reserves_open_fee_revenue)),
+ TALER_JSON_pack_amount ("total_history_fee_income",
+ &TALER_ARL_USE_AB (reserves_history_fee_revenue)),
+
+ /* Detailed report tables */
+ GNUNET_JSON_pack_array_steal (
+ "reserve_balance_insufficient_inconsistencies",
+ report_reserve_balance_insufficient_inconsistencies),
+ GNUNET_JSON_pack_array_steal (
+ "purse_balance_insufficient_inconsistencies",
+ report_purse_balance_insufficient_inconsistencies),
/* Tested in test-auditor.sh #21 */
GNUNET_JSON_pack_array_steal ("reserve_not_closed_inconsistencies",
report_reserve_not_closed_inconsistencies),
- /* Tested in test-auditor.sh #21 */
- TALER_JSON_pack_amount ("total_balance_reserve_not_closed",
- &total_balance_reserve_not_closed),
/* Tested in test-auditor.sh #7 */
GNUNET_JSON_pack_array_steal ("bad_sig_losses",
report_bad_sig_losses),
- /* Tested in test-auditor.sh #7 */
- TALER_JSON_pack_amount ("total_bad_sig_loss",
- &total_bad_sig_loss),
/* Tested in test-revocation.sh #4 */
GNUNET_JSON_pack_array_steal ("row_inconsistencies",
report_row_inconsistencies),
@@ -1599,32 +2014,52 @@ run (void *cls,
denomination_key_validity_withdraw_inconsistencies),
GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies",
report_amount_arithmetic_inconsistencies),
- TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
- &total_arithmetic_delta_plus),
- TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
- &total_arithmetic_delta_minus),
+
+ /* Information about audited range ... */
TALER_JSON_pack_time_abs_human ("auditor_start_time",
start_time),
TALER_JSON_pack_time_abs_human ("auditor_end_time",
GNUNET_TIME_absolute_get ()),
- TALER_JSON_pack_amount ("total_irregular_recoups",
- &total_irregular_recoups),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_in_serial_id",
- ppr_start.last_reserve_in_serial_id),
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_out_serial_id",
- ppr_start.last_reserve_out_serial_id),
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_recoup_serial_id",
- ppr_start.last_reserve_recoup_serial_id),
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_reserve_open_serial_id",
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("start_ppr_reserve_close_serial_id",
- ppr_start.last_reserve_close_serial_id),
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_purse_decisions_serial_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_account_merges_serial_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("start_ppr_history_requests_serial_id",
+ 0 /* no longer supported */),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_in_serial_id",
- ppr.last_reserve_in_serial_id),
+ TALER_ARL_USE_PP (
+ reserves_reserve_in_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_out_serial_id",
- ppr.last_reserve_out_serial_id),
+ TALER_ARL_USE_PP (
+ reserves_reserve_out_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_recoup_serial_id",
- ppr.last_reserve_recoup_serial_id),
+ TALER_ARL_USE_PP (
+ reserves_reserve_recoup_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_reserve_open_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_reserve_open_serial_id)),
GNUNET_JSON_pack_uint64 ("end_ppr_reserve_close_serial_id",
- ppr.last_reserve_close_serial_id)));
+ TALER_ARL_USE_PP (
+ reserves_reserve_close_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_purse_decisions_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_purse_decisions_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_account_merges_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_account_merges_serial_id)),
+ GNUNET_JSON_pack_uint64 ("end_ppr_history_requests_serial_id",
+ TALER_ARL_USE_PP (
+ reserves_history_requests_serial_id))));
}
@@ -1644,11 +2079,10 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/taler-helper-auditor-wire.c b/src/auditor/taler-helper-auditor-wire.c
index 2cd076ac9..d48ac1f18 100644
--- a/src/auditor/taler-helper-auditor-wire.c
+++ b/src/auditor/taler-helper-auditor-wire.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2017-2021 Taler Systems SA
+ Copyright (C) 2017-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -53,6 +53,20 @@
/**
+ * Run in test mode. Exit when idle instead of
+ * going to sleep and waiting for more work.
+ *
+ * FIXME: not yet implemented!
+ */
+static int test_mode;
+
+struct TALER_AUDITORDB_WireAccountProgressPoint
+{
+ uint64_t last_reserve_in_serial_id;
+ uint64_t last_wire_out_serial_id;
+};
+
+/**
* Information we keep for each supported account.
*/
struct WireAccount
@@ -93,14 +107,34 @@ struct WireAccount
struct TALER_AUDITORDB_WireAccountProgressPoint start_pp;
/**
- * Where we are in the inbound (CREDIT) transaction history.
+ * Where we are in the inbound transaction history.
+ */
+ uint64_t wire_off_in;
+
+ /**
+ * Where we are in the outbound transaction history.
+ */
+ uint64_t wire_off_out;
+
+ /**
+ * Label under which we store our pp's reserve_in_serial_id.
*/
- uint64_t in_wire_off;
+ char *label_reserve_in_serial_id;
/**
- * Where we are in the inbound (DEBIT) transaction history.
+ * Label under which we store our pp's reserve_in_serial_id.
*/
- uint64_t out_wire_off;
+ char *label_wire_out_serial_id;
+
+ /**
+ * Label under which we store our wire_off_in.
+ */
+ char *label_wire_off_in;
+
+ /**
+ * Label under which we store our wire_off_out.
+ */
+ char *label_wire_off_out;
/**
* Return value when we got this account's progress point.
@@ -122,7 +156,7 @@ struct ReserveClosure
/**
* When was the reserve closed?
*/
- struct GNUNET_TIME_Absolute execution_date;
+ struct GNUNET_TIME_Timestamp execution_date;
/**
* Amount transferred (amount remaining minus fee).
@@ -183,20 +217,17 @@ static enum GNUNET_DB_QueryStatus qsx_gwap;
/**
* Last reserve_in / wire_out serial IDs seen.
*/
-static struct TALER_AUDITORDB_WireProgressPoint pp;
+static TALER_ARL_DEF_PP (wire_reserve_close_id);
+static TALER_ARL_DEF_PP (wire_batch_deposit_id);
+static TALER_ARL_DEF_PP (wire_aggregation_id);
/**
- * Last reserve_in / wire_out serial IDs seen.
- */
-static struct TALER_AUDITORDB_WireProgressPoint start_pp;
-
-/**
- * Array of reports about row inconsitencies in wire_out table.
+ * Array of reports about row inconsistencies in wire_out table.
*/
static json_t *report_wire_out_inconsistencies;
/**
- * Array of reports about row inconsitencies in reserves_in table.
+ * Array of reports about row inconsistencies in reserves_in table.
*/
static json_t *report_reserve_in_inconsistencies;
@@ -204,7 +235,7 @@ static json_t *report_reserve_in_inconsistencies;
* Array of reports about wrong bank account being recorded for
* incoming wire transfers.
*/
-static json_t *report_missattribution_in_inconsistencies;
+static json_t *report_misattribution_in_inconsistencies;
/**
* Array of reports about row inconsistencies.
@@ -228,6 +259,16 @@ static json_t *report_row_minor_inconsistencies;
static json_t *report_lags;
/**
+ * Array of reports about lagging transactions from deposits due to missing KYC.
+ */
+static json_t *report_kyc_lags;
+
+/**
+ * Array of reports about lagging transactions from deposits due to pending or frozen AML decisions.
+ */
+static json_t *report_aml_lags;
+
+/**
* Array of reports about lagging transactions from reserve closures.
*/
static json_t *report_closure_lags;
@@ -267,7 +308,7 @@ static struct TALER_Amount total_bad_amount_in_minus;
* for incoming funds and may thus wire funds to the wrong
* destination when closing the reserve.
*/
-static struct TALER_Amount total_missattribution_in;
+static struct TALER_Amount total_misattribution_in;
/**
* Total amount which the exchange did not transfer in time.
@@ -285,6 +326,36 @@ static struct TALER_Amount total_closure_amount_lag;
static struct TALER_Amount total_wire_format_amount;
/**
+ * Total amount credited to exchange accounts.
+ */
+static struct TALER_Amount total_wire_in;
+
+/**
+ * Total amount debited to exchange accounts.
+ */
+static struct TALER_Amount total_wire_out;
+
+/**
+ * Total amount of profits drained.
+ */
+static TALER_ARL_DEF_AB (total_drained);
+
+/**
+ * Final balance at the end of this iteration.
+ */
+static TALER_ARL_DEF_AB (final_balance);
+
+/**
+ * Starting balance at the beginning of this iteration.
+ */
+static struct TALER_Amount start_balance;
+
+/**
+ * True if #start_balance was initialized.
+ */
+static bool had_start_balance;
+
+/**
* Amount of zero in our currency.
*/
static struct TALER_Amount zero;
@@ -304,6 +375,12 @@ static struct GNUNET_CURL_RescheduleContext *rc;
*/
static int internal_checks;
+/**
+ * Should we ignore if the bank does not know our bank
+ * account?
+ */
+static int ignore_account_404;
+
/* ***************************** Shutdown **************************** */
/**
@@ -361,7 +438,7 @@ struct ReserveOutInfo
* @param value the `struct ReserveInInfo` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
free_rii (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -386,7 +463,7 @@ free_rii (void *cls,
* @param value the `struct ReserveOutInfo` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
free_roi (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -411,7 +488,7 @@ free_roi (void *cls,
* @param value the `struct ReserveClosure` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
free_rc (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -463,11 +540,11 @@ do_shutdown (void *cls)
TALER_JSON_pack_amount ("total_wire_in_delta_minus",
&total_bad_amount_in_minus),
/* Tested in test-auditor.sh #9 */
- GNUNET_JSON_pack_array_steal ("missattribution_in_inconsistencies",
- report_missattribution_in_inconsistencies),
+ GNUNET_JSON_pack_array_steal ("misattribution_in_inconsistencies",
+ report_misattribution_in_inconsistencies),
/* Tested in test-auditor.sh #9 */
- TALER_JSON_pack_amount ("total_missattribution_in",
- &total_missattribution_in),
+ TALER_JSON_pack_amount ("total_misattribution_in",
+ &total_misattribution_in),
GNUNET_JSON_pack_array_steal ("row_inconsistencies",
report_row_inconsistencies),
/* Tested in test-auditor.sh #10/#17 */
@@ -479,12 +556,24 @@ do_shutdown (void *cls)
/* Tested in test-auditor.sh #19 */
GNUNET_JSON_pack_array_steal ("wire_format_inconsistencies",
report_wire_format_inconsistencies),
+ TALER_JSON_pack_amount ("total_wire_in",
+ &total_wire_in),
+ TALER_JSON_pack_amount ("total_wire_out",
+ &total_wire_out),
+ TALER_JSON_pack_amount ("total_drained",
+ &TALER_ARL_USE_AB (total_drained)),
+ TALER_JSON_pack_amount ("final_balance",
+ &TALER_ARL_USE_AB (final_balance)),
/* Tested in test-auditor.sh #1 */
TALER_JSON_pack_amount ("total_amount_lag",
&total_amount_lag),
/* Tested in test-auditor.sh #1 */
GNUNET_JSON_pack_array_steal ("lag_details",
report_lags),
+ GNUNET_JSON_pack_array_steal ("lag_aml_details",
+ report_aml_lags),
+ GNUNET_JSON_pack_array_steal ("lag_kyc_details",
+ report_kyc_lags),
/* Tested in test-auditor.sh #22 */
TALER_JSON_pack_amount ("total_closure_amount_lag",
&total_closure_amount_lag),
@@ -495,22 +584,28 @@ do_shutdown (void *cls)
start_time),
TALER_JSON_pack_time_abs_human ("wire_auditor_end_time",
GNUNET_TIME_absolute_get ()),
- GNUNET_JSON_pack_uint64 ("start_pp_reserve_close_uuid",
- start_pp.last_reserve_close_uuid),
- GNUNET_JSON_pack_uint64 ("end_pp_reserve_close_uuid",
- pp.last_reserve_close_uuid),
- TALER_JSON_pack_time_abs_human ("start_pp_last_timestamp",
- start_pp.last_timestamp),
- TALER_JSON_pack_time_abs_human ("end_pp_last_timestamp",
- pp.last_timestamp),
+ GNUNET_JSON_pack_uint64 ("start_pp_reserve_close_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("end_pp_reserve_close_id",
+ TALER_ARL_USE_PP (wire_reserve_close_id)),
+ GNUNET_JSON_pack_uint64 ("start_pp_last_batch_deposit_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("end_pp_last_batch_deposit_id",
+ TALER_ARL_USE_PP (wire_batch_deposit_id)),
+ GNUNET_JSON_pack_uint64 ("start_pp_last_aggregation_serial_id",
+ 0 /* no longer supported */),
+ GNUNET_JSON_pack_uint64 ("end_pp_last_aggregation_serial_id",
+ TALER_ARL_USE_PP (wire_aggregation_id)),
GNUNET_JSON_pack_array_steal ("account_progress",
report_account_progress)));
report_wire_out_inconsistencies = NULL;
report_reserve_in_inconsistencies = NULL;
report_row_inconsistencies = NULL;
report_row_minor_inconsistencies = NULL;
- report_missattribution_in_inconsistencies = NULL;
+ report_misattribution_in_inconsistencies = NULL;
report_lags = NULL;
+ report_kyc_lags = NULL;
+ report_aml_lags = NULL;
report_closure_lags = NULL;
report_account_progress = NULL;
report_wire_format_inconsistencies = NULL;
@@ -558,6 +653,10 @@ do_shutdown (void *cls)
GNUNET_CONTAINER_DLL_remove (wa_head,
wa_tail,
wa);
+ GNUNET_free (wa->label_reserve_in_serial_id);
+ GNUNET_free (wa->label_wire_out_serial_id);
+ GNUNET_free (wa->label_wire_off_in);
+ GNUNET_free (wa->label_wire_off_out);
GNUNET_free (wa);
}
if (NULL != ctx)
@@ -585,7 +684,7 @@ do_shutdown (void *cls)
* @param value the `struct ReserveClosure` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
check_pending_rc (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -599,20 +698,21 @@ check_pending_rc (void *cls,
&rc->amount);
if ( (0 != rc->amount.value) ||
(0 != rc->amount.fraction) )
- TALER_ARL_report (report_closure_lags,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rc->rowid),
- TALER_JSON_pack_amount ("amount",
- &rc->amount),
- TALER_JSON_pack_time_abs_human ("deadline",
- rc->execution_date),
- GNUNET_JSON_pack_data_auto ("wtid",
- &rc->wtid),
- GNUNET_JSON_pack_string ("account",
- rc->receiver_account)));
- pp.last_reserve_close_uuid
- = GNUNET_MIN (pp.last_reserve_close_uuid,
+ TALER_ARL_report (
+ report_closure_lags,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rc->rowid),
+ TALER_JSON_pack_amount ("amount",
+ &rc->amount),
+ TALER_JSON_pack_time_abs_human ("deadline",
+ rc->execution_date.abs_time),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ &rc->wtid),
+ GNUNET_JSON_pack_string ("account",
+ rc->receiver_account)));
+ TALER_ARL_USE_PP (wire_reserve_close_id)
+ = GNUNET_MIN (TALER_ARL_USE_PP (wire_reserve_close_id),
rc->rowid);
return GNUNET_OK;
}
@@ -634,12 +734,12 @@ hash_rc (const char *receiver_account,
size_t slen = strlen (receiver_account);
char buf[sizeof (struct TALER_WireTransferIdentifierRawP) + slen];
- memcpy (buf,
- wtid,
- sizeof (*wtid));
- memcpy (&buf[sizeof (*wtid)],
- receiver_account,
- slen);
+ GNUNET_memcpy (buf,
+ wtid,
+ sizeof (*wtid));
+ GNUNET_memcpy (&buf[sizeof (*wtid)],
+ receiver_account,
+ slen);
GNUNET_CRYPTO_hash (buf,
sizeof (buf),
key);
@@ -655,6 +755,42 @@ hash_rc (const char *receiver_account,
static enum GNUNET_DB_QueryStatus
commit (enum GNUNET_DB_QueryStatus qs)
{
+ if (qs >= 0)
+ {
+ if (had_start_balance)
+ {
+ struct TALER_Amount sum;
+
+ TALER_ARL_amount_add (&sum,
+ &total_wire_in,
+ &start_balance);
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (final_balance),
+ &sum,
+ &total_wire_out);
+ qs = TALER_ARL_adb->update_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (total_drained),
+ TALER_ARL_SET_AB (final_balance),
+ NULL);
+ }
+ else
+ {
+ TALER_ARL_amount_subtract (&TALER_ARL_USE_AB (final_balance),
+ &total_wire_in,
+ &total_wire_out);
+ qs = TALER_ARL_adb->insert_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_AB (total_drained),
+ TALER_ARL_SET_AB (final_balance),
+ NULL);
+ }
+ }
+ else
+ {
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (final_balance)));
+ }
if (0 > qs)
{
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
@@ -683,26 +819,33 @@ commit (enum GNUNET_DB_QueryStatus qs)
GNUNET_JSON_pack_uint64 ("end_reserve_in",
wa->pp.last_reserve_in_serial_id),
GNUNET_JSON_pack_uint64 ("start_wire_out",
- wa->start_pp.
- last_wire_out_serial_id),
+ wa->start_pp.last_wire_out_serial_id),
GNUNET_JSON_pack_uint64 ("end_wire_out",
wa->pp.last_wire_out_serial_id))));
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == wa->qsx)
- qs = TALER_ARL_adb->update_wire_auditor_account_progress (
+ qs = TALER_ARL_adb->update_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- wa->ai->section_name,
- &wa->pp,
- wa->in_wire_off,
- wa->out_wire_off);
+ wa->label_reserve_in_serial_id,
+ wa->pp.last_reserve_in_serial_id,
+ wa->label_wire_out_serial_id,
+ wa->pp.last_wire_out_serial_id,
+ wa->label_wire_off_in,
+ wa->wire_off_in,
+ wa->label_wire_off_out,
+ wa->wire_off_out,
+ NULL);
else
- qs = TALER_ARL_adb->insert_wire_auditor_account_progress (
+ qs = TALER_ARL_adb->insert_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- wa->ai->section_name,
- &wa->pp,
- wa->in_wire_off,
- wa->out_wire_off);
+ wa->label_reserve_in_serial_id,
+ wa->pp.last_reserve_in_serial_id,
+ wa->label_wire_out_serial_id,
+ wa->pp.last_wire_out_serial_id,
+ wa->label_wire_off_in,
+ wa->wire_off_in,
+ wa->label_wire_off_out,
+ wa->wire_off_out,
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -715,13 +858,19 @@ commit (enum GNUNET_DB_QueryStatus qs)
&check_pending_rc,
NULL);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsx_gwap)
- qs = TALER_ARL_adb->update_wire_auditor_progress (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &pp);
+ qs = TALER_ARL_adb->update_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (wire_reserve_close_id),
+ TALER_ARL_SET_PP (wire_batch_deposit_id),
+ TALER_ARL_SET_PP (wire_aggregation_id),
+ NULL);
else
- qs = TALER_ARL_adb->insert_wire_auditor_progress (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &pp);
+ qs = TALER_ARL_adb->insert_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_SET_PP (wire_reserve_close_id),
+ TALER_ARL_SET_PP (wire_batch_deposit_id),
+ TALER_ARL_SET_PP (wire_aggregation_id),
+ NULL);
if (0 >= qs)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -730,8 +879,9 @@ commit (enum GNUNET_DB_QueryStatus qs)
return qs;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Concluded audit step at %s\n",
- GNUNET_STRINGS_absolute_time_to_string (pp.last_timestamp));
+ "Concluded audit step at %llu/%llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (wire_aggregation_id),
+ (unsigned long long) TALER_ARL_USE_PP (wire_batch_deposit_id));
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
{
@@ -768,74 +918,341 @@ commit (enum GNUNET_DB_QueryStatus qs)
/* ***************************** Analyze required transfers ************************ */
/**
- * Function called on deposits that are past their due date
- * and have not yet seen a wire transfer.
+ * Closure for import_wire_missing_cb().
+ */
+struct ImportMissingWireContext
+{
+ /**
+ * Set to maximum row ID encountered.
+ */
+ uint64_t max_batch_deposit_uuid;
+
+ /**
+ * Set to database errors in callback.
+ */
+ enum GNUNET_DB_QueryStatus err;
+};
+
+
+/**
+ * Function called on deposits that need to be checked for their
+ * wire transfer.
*
- * @param cls closure
- * @param rowid deposit table row of the coin's deposit
- * @param coin_pub public key of the coin
- * @param amount value of the deposit, including fee
- * @param wire where should the funds be wired
- * @param deadline what was the requested wire transfer deadline
- * @param tiny did the exchange defer this transfer because it is too small?
- * NOTE: only valid in internal audit mode!
- * @param done did the exchange claim that it made a transfer?
- * NOTE: only valid in internal audit mode!
+ * @param cls closure, points to a `struct ImportMissingWireContext`
+ * @param batch_deposit_serial_id serial of the entry in the batch deposits table
+ * @param total_amount value of the missing deposits, including fee
+ * @param wire_target_h_payto where should the funds be wired
+ * @param deadline what was the earliest requested wire transfer deadline
*/
static void
-wire_missing_cb (void *cls,
- uint64_t rowid,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *amount,
- const json_t *wire,
- struct GNUNET_TIME_Absolute deadline,
- /* bool? */ int tiny,
- /* bool? */ int done)
+import_wire_missing_cb (void *cls,
+ uint64_t batch_deposit_serial_id,
+ const struct TALER_Amount *total_amount,
+ const struct TALER_PaytoHashP *wire_target_h_payto,
+ struct GNUNET_TIME_Timestamp deadline)
+{
+ struct ImportMissingWireContext *wc = cls;
+ enum GNUNET_DB_QueryStatus qs;
+
+ if (wc->err < 0)
+ return; /* already failed */
+ GNUNET_assert (batch_deposit_serial_id > wc->max_batch_deposit_uuid);
+ wc->max_batch_deposit_uuid = batch_deposit_serial_id;
+ qs = TALER_ARL_adb->insert_pending_deposit (
+ TALER_ARL_adb->cls,
+ batch_deposit_serial_id,
+ wire_target_h_payto,
+ total_amount,
+ deadline);
+ if (qs < 0)
+ wc->err = qs;
+}
+
+
+/**
+ * Information about a delayed wire transfer and the possible
+ * reasons for the delay.
+ */
+struct ReasonDetail
{
- json_t *rep;
+ /**
+ * Total amount that should have been transferred.
+ */
+ struct TALER_Amount total_amount;
- (void) cls;
+ /**
+ * Earliest deadline for an expected transfer to the account.
+ */
+ struct GNUNET_TIME_Timestamp deadline;
+
+ /**
+ * Target account, NULL if even that is not known (due to
+ * exchange lacking required entry in wire_targets table).
+ */
+ char *payto_uri;
+
+ /**
+ * Reasons due to pending KYC requests.
+ */
+ char *kyc_pending;
+
+ /**
+ * AML decision state for the target account.
+ */
+ enum TALER_AmlDecisionState status;
+
+ /**
+ * Current AML threshold for the account, may be an invalid account if the
+ * default threshold applies.
+ */
+ struct TALER_Amount aml_limit;
+};
+
+/**
+ * Closure for report_wire_missing_cb().
+ */
+struct ReportMissingWireContext
+{
+ /**
+ * Map from wire_target_h_payto to `struct ReasonDetail`.
+ */
+ struct GNUNET_CONTAINER_MultiShortmap *map;
+
+ /**
+ * Set to database errors in callback.
+ */
+ enum GNUNET_DB_QueryStatus err;
+};
+
+
+/**
+ * Closure for #clear_finished_transfer_cb().
+ */
+struct AggregationContext
+{
+ /**
+ * Set to maximum row ID encountered.
+ */
+ uint64_t max_aggregation_serial;
+
+ /**
+ * Set to database errors in callback.
+ */
+ enum GNUNET_DB_QueryStatus err;
+};
+
+
+/**
+ * Free memory allocated in @a value.
+ *
+ * @param cls unused
+ * @param key unused
+ * @param value must be a `struct ReasonDetail`
+ * @return #GNUNET_YES if we should continue to
+ * iterate,
+ * #GNUNET_NO if not.
+ */
+static enum GNUNET_GenericReturnValue
+free_report_entry (void *cls,
+ const struct GNUNET_ShortHashCode *key,
+ void *value)
+{
+ struct ReasonDetail *rd = value;
+
+ GNUNET_free (rd->kyc_pending);
+ GNUNET_free (rd->payto_uri);
+ GNUNET_free (rd);
+ return GNUNET_YES;
+}
+
+
+/**
+ * We had an entry in our map of wire transfers that
+ * should have been performed. Generate report.
+ *
+ * @param cls unused
+ * @param key unused
+ * @param value must be a `struct ReasonDetail`
+ * @return #GNUNET_YES if we should continue to
+ * iterate,
+ * #GNUNET_NO if not.
+ */
+static enum GNUNET_GenericReturnValue
+generate_report (void *cls,
+ const struct GNUNET_ShortHashCode *key,
+ void *value)
+{
+ struct ReasonDetail *rd = value;
+
+ /* For now, we simplify and only check that the
+ amount was tiny */
+ if (0 > TALER_amount_cmp (&rd->total_amount,
+ &tiny_amount))
+ return free_report_entry (cls,
+ key,
+ value); /* acceptable, amount was tiny */
+ // TODO: maybe split total_amount_lag up by category below?
TALER_ARL_amount_add (&total_amount_lag,
&total_amount_lag,
- amount);
- if (internal_checks)
+ &rd->total_amount);
+ if (NULL != rd->kyc_pending)
{
- /* In internal mode, we insist that the entry was
- actually marked as tiny. */
- if ( (GNUNET_YES == tiny) &&
- (0 > TALER_amount_cmp (amount,
- &tiny_amount)) )
- return; /* acceptable, amount was tiny */
+ json_t *rep;
+
+ rep = GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("total_amount",
+ &rd->total_amount),
+ TALER_JSON_pack_time_abs_human ("deadline",
+ rd->deadline.abs_time),
+ GNUNET_JSON_pack_string ("kyc_pending",
+ rd->kyc_pending),
+ GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_string ("account",
+ rd->payto_uri)));
+ TALER_ARL_report (report_kyc_lags,
+ rep);
+ }
+ else if (TALER_AML_NORMAL != rd->status)
+ {
+ const char *sstatus = "<undefined>";
+ json_t *rep;
+
+ switch (rd->status)
+ {
+ case TALER_AML_NORMAL:
+ GNUNET_assert (0);
+ break;
+ case TALER_AML_PENDING:
+ sstatus = "pending";
+ break;
+ case TALER_AML_FROZEN:
+ sstatus = "frozen";
+ break;
+ }
+ rep = GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("total_amount",
+ &rd->total_amount),
+ GNUNET_JSON_pack_allow_null (
+ TALER_JSON_pack_amount ("aml_limit",
+ TALER_amount_is_valid (&rd->aml_limit)
+ ? &rd->aml_limit
+ : NULL)),
+ TALER_JSON_pack_time_abs_human ("deadline",
+ rd->deadline.abs_time),
+ GNUNET_JSON_pack_string ("aml_status",
+ sstatus),
+ GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_string ("account",
+ rd->payto_uri)));
+ TALER_ARL_report (report_aml_lags,
+ rep);
+ }
+ else
+ {
+ json_t *rep;
+
+ rep = GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("total_amount",
+ &rd->total_amount),
+ TALER_JSON_pack_time_abs_human ("deadline",
+ rd->deadline.abs_time),
+ GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_string ("account",
+ rd->payto_uri)));
+ TALER_ARL_report (report_lags,
+ rep);
+ }
+
+ return free_report_entry (cls,
+ key,
+ value);
+}
+
+
+/**
+ * Function called on deposits that are past their due date
+ * and have not yet seen a wire transfer.
+ *
+ * @param cls closure, points to a `struct ReportMissingWireContext`
+ * @param batch_deposit_serial_id row in the database for which the wire transfer is missing
+ * @param total_amount value of the missing deposits, including fee
+ * @param wire_target_h_payto hash of payto-URI where the funds should have been wired
+ * @param deadline what was the earliest requested wire transfer deadline
+ */
+static void
+report_wire_missing_cb (void *cls,
+ uint64_t batch_deposit_serial_id,
+ const struct TALER_Amount *total_amount,
+ const struct TALER_PaytoHashP *wire_target_h_payto,
+ struct GNUNET_TIME_Timestamp deadline)
+{
+ struct ReportMissingWireContext *rc = cls;
+ struct ReasonDetail *rd;
+
+ rd = GNUNET_CONTAINER_multishortmap_get (rc->map,
+ &wire_target_h_payto->hash);
+ if (NULL == rd)
+ {
+ rd = GNUNET_new (struct ReasonDetail);
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multishortmap_put (
+ rc->map,
+ &wire_target_h_payto->hash,
+ rd,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+ rc->err = TALER_ARL_edb->select_justification_for_missing_wire (
+ TALER_ARL_edb->cls,
+ wire_target_h_payto,
+ &rd->payto_uri,
+ &rd->kyc_pending,
+ &rd->status,
+ &rd->aml_limit);
+ rd->total_amount = *total_amount;
+ rd->deadline = deadline;
}
else
{
- /* External auditors do not replicate tiny, so they
- only check that the amount is tiny */
- if (0 > TALER_amount_cmp (amount,
- &tiny_amount))
- return; /* acceptable, amount was tiny */
+ TALER_ARL_amount_add (&rd->total_amount,
+ &rd->total_amount,
+ total_amount);
+ rd->deadline = GNUNET_TIME_timestamp_min (rd->deadline,
+ deadline);
}
- rep = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("amount",
- amount),
- TALER_JSON_pack_time_abs_human ("deadline",
- deadline),
- GNUNET_JSON_pack_data_auto ("coin_pub",
- coin_pub),
- GNUNET_JSON_pack_object_incref ("account",
- (json_t *) wire));
- if (internal_checks)
+}
+
+
+/**
+ * Function called on aggregations that were done for
+ * a (batch) deposit.
+ *
+ * @param cls closure
+ * @param tracking_serial_id where in the table are we
+ * @param batch_deposit_serial_id which batch deposit was aggregated
+ */
+static void
+clear_finished_transfer_cb (
+ void *cls,
+ uint64_t tracking_serial_id,
+ uint64_t batch_deposit_serial_id)
+{
+ struct AggregationContext *ac = cls;
+ enum GNUNET_DB_QueryStatus qs;
+
+ if (0 > ac->err)
+ return; /* already failed */
+ GNUNET_assert (ac->max_aggregation_serial < tracking_serial_id);
+ ac->max_aggregation_serial = tracking_serial_id;
+ qs = TALER_ARL_adb->delete_pending_deposit (
+ TALER_ARL_adb->cls,
+ batch_deposit_serial_id);
+ if (0 == qs)
{
- /* the 'done' bit is only useful in 'internal' mode */
- GNUNET_assert (0 ==
- json_object_set (rep,
- "claimed_done",
- json_string ((done) ? "yes" : "no")));
+ /* Aggregated something twice or other error, report! */
+ GNUNET_break (0);
+ // FIXME: report more nicely!
}
- TALER_ARL_report (report_lags,
- rep);
+ if (0 > qs)
+ ac->err = qs;
}
@@ -846,31 +1263,78 @@ wire_missing_cb (void *cls,
static void
check_for_required_transfers (void)
{
- struct GNUNET_TIME_Absolute next_timestamp;
+ struct ImportMissingWireContext wc = {
+ .max_batch_deposit_uuid = TALER_ARL_USE_PP (wire_batch_deposit_id),
+ .err = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
+ };
+ struct GNUNET_TIME_Absolute deadline;
enum GNUNET_DB_QueryStatus qs;
+ struct ReportMissingWireContext rc = {
+ .err = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
+ };
+ struct AggregationContext ac = {
+ .max_aggregation_serial = TALER_ARL_USE_PP (wire_aggregation_id),
+ .err = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
+ };
- next_timestamp = GNUNET_TIME_absolute_get ();
- (void) GNUNET_TIME_round_abs (&next_timestamp);
+ qs = TALER_ARL_edb->select_batch_deposits_missing_wire (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (wire_batch_deposit_id),
+ &import_wire_missing_cb,
+ &wc);
+ if ( (0 > qs) || (0 > wc.err) )
+ {
+ GNUNET_break (0);
+ GNUNET_break ( (GNUNET_DB_STATUS_SOFT_ERROR == qs) ||
+ (GNUNET_DB_STATUS_SOFT_ERROR == wc.err) );
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ TALER_ARL_USE_PP (wire_batch_deposit_id) = wc.max_batch_deposit_uuid;
+ qs = TALER_ARL_edb->select_aggregations_above_serial (
+ TALER_ARL_edb->cls,
+ TALER_ARL_USE_PP (wire_aggregation_id),
+ &clear_finished_transfer_cb,
+ &ac);
+ if ( (0 > qs) || (0 > ac.err) )
+ {
+ GNUNET_break (0);
+ GNUNET_break ( (GNUNET_DB_STATUS_SOFT_ERROR == qs) ||
+ (GNUNET_DB_STATUS_SOFT_ERROR == ac.err) );
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ TALER_ARL_USE_PP (wire_aggregation_id) = ac.max_aggregation_serial;
/* Subtract #GRACE_PERIOD, so we can be a bit behind in processing
without immediately raising undue concern */
- next_timestamp = GNUNET_TIME_absolute_subtract (next_timestamp,
- GRACE_PERIOD);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Analyzing exchange's unfinished deposits (deadline: %s)\n",
- GNUNET_STRINGS_absolute_time_to_string (next_timestamp));
- qs = TALER_ARL_edb->select_deposits_missing_wire (TALER_ARL_edb->cls,
- pp.last_timestamp,
- next_timestamp,
- &wire_missing_cb,
- &next_timestamp);
- if (0 > qs)
+ deadline = GNUNET_TIME_absolute_subtract (GNUNET_TIME_absolute_get (),
+ GRACE_PERIOD);
+ rc.map = GNUNET_CONTAINER_multishortmap_create (1024,
+ GNUNET_NO);
+ qs = TALER_ARL_adb->select_pending_deposits (
+ TALER_ARL_adb->cls,
+ deadline,
+ &report_wire_missing_cb,
+ &rc);
+ if ( (0 > qs) || (0 > rc.err) )
{
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
+ GNUNET_break (0);
+ GNUNET_break ( (GNUNET_DB_STATUS_SOFT_ERROR == qs) ||
+ (GNUNET_DB_STATUS_SOFT_ERROR == rc.err) );
+ GNUNET_CONTAINER_multishortmap_iterate (rc.map,
+ &free_report_entry,
+ NULL);
+ GNUNET_CONTAINER_multishortmap_destroy (rc.map);
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return;
}
- pp.last_timestamp = next_timestamp;
+ GNUNET_CONTAINER_multishortmap_iterate (rc.map,
+ &generate_report,
+ NULL);
+ GNUNET_CONTAINER_multishortmap_destroy (rc.map);
/* conclude with success */
commit (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT);
GNUNET_SCHEDULER_shutdown ();
@@ -903,25 +1367,27 @@ conclude_wire_out (void)
static void
check_time_difference (const char *table,
uint64_t rowid,
- struct GNUNET_TIME_Absolute want,
- struct GNUNET_TIME_Absolute have)
+ struct GNUNET_TIME_Timestamp want,
+ struct GNUNET_TIME_Timestamp have)
{
struct GNUNET_TIME_Relative delta;
char *details;
- if (have.abs_value_us > want.abs_value_us)
- delta = GNUNET_TIME_absolute_get_difference (want,
- have);
+ if (GNUNET_TIME_timestamp_cmp (have, >, want))
+ delta = GNUNET_TIME_absolute_get_difference (want.abs_time,
+ have.abs_time);
else
- delta = GNUNET_TIME_absolute_get_difference (have,
- want);
- if (delta.rel_value_us <= TIME_TOLERANCE.rel_value_us)
+ delta = GNUNET_TIME_absolute_get_difference (have.abs_time,
+ want.abs_time);
+ if (GNUNET_TIME_relative_cmp (delta,
+ <=,
+ TIME_TOLERANCE))
return;
GNUNET_asprintf (&details,
"execution date mismatch (%s)",
- GNUNET_STRINGS_relative_time_to_string (delta,
- GNUNET_YES));
+ GNUNET_TIME_relative2s (delta,
+ true));
TALER_ARL_report (report_row_minor_inconsistencies,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("table",
@@ -942,16 +1408,16 @@ check_time_difference (const char *table,
* @param rowid unique serial ID for the refresh session in our DB
* @param date timestamp of the transfer (roughly)
* @param wtid wire transfer subject
- * @param wire wire transfer details of the receiver
+ * @param payto_uri wire transfer details of the receiver
* @param amount amount that was wired
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
wire_out_cb (void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute date,
+ struct GNUNET_TIME_Timestamp date,
const struct TALER_WireTransferIdentifierRawP *wtid,
- const json_t *wire,
+ const char *payto_uri,
const struct TALER_Amount *amount)
{
struct WireAccount *wa = cls;
@@ -960,9 +1426,12 @@ wire_out_cb (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Exchange wire OUT at %s of %s with WTID %s\n",
- GNUNET_STRINGS_absolute_time_to_string (date),
+ GNUNET_TIME_timestamp2s (date),
TALER_amount2s (amount),
TALER_B2S (wtid));
+ TALER_ARL_amount_add (&total_wire_out,
+ &total_wire_out,
+ amount);
GNUNET_CRYPTO_hash (wtid,
sizeof (struct TALER_WireTransferIdentifierRawP),
&key);
@@ -972,24 +1441,25 @@ wire_out_cb (void *cls,
{
/* Wire transfer was not made (yet) at all (but would have been
justified), so the entire amount is missing / still to be done.
- This is moderately harmless, it might just be that the aggreator
+ This is moderately harmless, it might just be that the aggregator
has not yet fully caught up with the transfers it should do. */
- TALER_ARL_report (report_wire_out_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("amount_wired",
- &zero),
- TALER_JSON_pack_amount ("amount_justified",
- amount),
- GNUNET_JSON_pack_data_auto ("wtid",
- wtid),
- TALER_JSON_pack_time_abs_human ("timestamp",
- date),
- GNUNET_JSON_pack_string ("diagnostic",
- "wire transfer not made (yet?)"),
- GNUNET_JSON_pack_string ("account_section",
- wa->ai->section_name)));
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("amount_wired",
+ &zero),
+ TALER_JSON_pack_amount ("amount_justified",
+ amount),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "wire transfer not made (yet?)"),
+ GNUNET_JSON_pack_string ("account_section",
+ wa->ai->section_name)));
TALER_ARL_amount_add (&total_bad_amount_out_minus,
&total_bad_amount_out_minus,
amount);
@@ -997,82 +1467,79 @@ wire_out_cb (void *cls,
return GNUNET_SYSERR;
return GNUNET_OK;
}
+ if (0 != strcasecmp (payto_uri,
+ roi->details.credit_account_uri))
{
- char *payto_uri;
-
- payto_uri = TALER_JSON_wire_to_payto (wire);
- if (0 != strcasecmp (payto_uri,
- roi->details.credit_account_uri))
- {
- /* Destination bank account is wrong in actual wire transfer, so
- we should count the wire transfer as entirely spurious, and
- additionally consider the justified wire transfer as missing. */
- TALER_ARL_report (report_wire_out_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("amount_wired",
- &roi->details.amount),
- TALER_JSON_pack_amount ("amount_justified",
- &zero),
- GNUNET_JSON_pack_data_auto ("wtid", wtid),
- TALER_JSON_pack_time_abs_human ("timestamp",
- date),
- GNUNET_JSON_pack_string ("diagnostic",
- "receiver account mismatch"),
- GNUNET_JSON_pack_string ("target",
- payto_uri),
- GNUNET_JSON_pack_string ("account_section",
- wa->ai->section_name)));
- TALER_ARL_amount_add (&total_bad_amount_out_plus,
- &total_bad_amount_out_plus,
- &roi->details.amount);
- TALER_ARL_report (report_wire_out_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("amount_wired",
- &zero),
- TALER_JSON_pack_amount ("amount_justified",
- amount),
- GNUNET_JSON_pack_data_auto ("wtid",
- wtid),
- TALER_JSON_pack_time_abs_human ("timestamp",
- date),
- GNUNET_JSON_pack_string ("diagnostic",
- "receiver account mismatch"),
- GNUNET_JSON_pack_string ("target",
- roi->details.
- credit_account_uri),
- GNUNET_JSON_pack_string ("account_section",
- wa->ai->section_name)));
- TALER_ARL_amount_add (&total_bad_amount_out_minus,
- &total_bad_amount_out_minus,
- amount);
- GNUNET_free (payto_uri);
- goto cleanup;
- }
- GNUNET_free (payto_uri);
+ /* Destination bank account is wrong in actual wire transfer, so
+ we should count the wire transfer as entirely spurious, and
+ additionally consider the justified wire transfer as missing. */
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("amount_wired",
+ &roi->details.amount),
+ TALER_JSON_pack_amount ("amount_justified",
+ &zero),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "receiver account mismatch"),
+ GNUNET_JSON_pack_string ("target",
+ payto_uri),
+ GNUNET_JSON_pack_string ("account_section",
+ wa->ai->section_name)));
+ TALER_ARL_amount_add (&total_bad_amount_out_plus,
+ &total_bad_amount_out_plus,
+ &roi->details.amount);
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("amount_wired",
+ &zero),
+ TALER_JSON_pack_amount ("amount_justified",
+ amount),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "receiver account mismatch"),
+ GNUNET_JSON_pack_string ("target",
+ roi->details.
+ credit_account_uri),
+ GNUNET_JSON_pack_string ("account_section",
+ wa->ai->section_name)));
+ TALER_ARL_amount_add (&total_bad_amount_out_minus,
+ &total_bad_amount_out_minus,
+ amount);
+ goto cleanup;
}
if (0 != TALER_amount_cmp (&roi->details.amount,
amount))
{
- TALER_ARL_report (report_wire_out_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rowid),
- TALER_JSON_pack_amount ("amount_justified",
- amount),
- TALER_JSON_pack_amount ("amount_wired",
- &roi->details.amount),
- GNUNET_JSON_pack_data_auto ("wtid",
- wtid),
- TALER_JSON_pack_time_abs_human ("timestamp",
- date),
- GNUNET_JSON_pack_string ("diagnostic",
- "wire amount does not match"),
- GNUNET_JSON_pack_string ("account_section",
- wa->ai->section_name)));
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rowid),
+ TALER_JSON_pack_amount ("amount_justified",
+ amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &roi->details.amount),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "wire amount does not match"),
+ GNUNET_JSON_pack_string ("account_section",
+ wa->ai->section_name)));
if (0 < TALER_amount_cmp (amount,
&roi->details.amount))
{
@@ -1142,7 +1609,7 @@ struct CheckMatchContext
* @param key key of @a value in #reserve_closures
* @param value a `struct ReserveClosure`
*/
-static int
+static enum GNUNET_GenericReturnValue
check_rc_matches (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -1172,16 +1639,17 @@ check_rc_matches (void *cls,
/**
- * Check whether the given transfer was justified by a reserve closure. If
- * not, complain that we failed to match an entry from #out_map. This means a
- * wire transfer was made without proper justification.
+ * Check whether the given transfer was justified by a reserve closure or
+ * profit drain. If not, complain that we failed to match an entry from
+ * #out_map. This means a wire transfer was made without proper
+ * justification.
*
* @param cls a `struct WireAccount`
* @param key unused key
* @param value the `struct ReserveOutInfo` to report
- * @return #GNUNET_OK
+ * @return #GNUNET_OK on success
*/
-static int
+static enum GNUNET_GenericReturnValue
complain_out_not_found (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -1204,23 +1672,148 @@ complain_out_not_found (void *cls,
&ctx);
if (ctx.found)
return GNUNET_OK;
- TALER_ARL_report (report_wire_out_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- 0),
- TALER_JSON_pack_amount ("amount_wired",
- &roi->details.amount),
- TALER_JSON_pack_amount ("amount_justified",
- &zero),
- GNUNET_JSON_pack_data_auto ("wtid",
- &roi->details.wtid),
- TALER_JSON_pack_time_abs_human ("timestamp",
- roi->details.
- execution_date),
- GNUNET_JSON_pack_string ("account_section",
- wa->ai->section_name),
- GNUNET_JSON_pack_string ("diagnostic",
- "justification for wire transfer not found")));
+ /* check for profit drain */
+ {
+ enum GNUNET_DB_QueryStatus qs;
+ uint64_t serial;
+ char *account_section;
+ char *payto_uri;
+ struct GNUNET_TIME_Timestamp request_timestamp;
+ struct TALER_Amount amount;
+ struct TALER_MasterSignatureP master_sig;
+
+ qs = TALER_ARL_edb->get_drain_profit (TALER_ARL_edb->cls,
+ &roi->details.wtid,
+ &serial,
+ &account_section,
+ &payto_uri,
+ &request_timestamp,
+ &amount,
+ &master_sig);
+ switch (qs)
+ {
+ case GNUNET_DB_STATUS_HARD_ERROR:
+ GNUNET_break (0);
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
+ return GNUNET_SYSERR;
+ case GNUNET_DB_STATUS_SOFT_ERROR:
+ /* should fail on commit later ... */
+ GNUNET_break (0);
+ return GNUNET_NO;
+ case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+ /* not a profit drain */
+ break;
+ case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Profit drain of %s to %s found!\n",
+ TALER_amount2s (&amount),
+ payto_uri);
+ if (GNUNET_OK !=
+ TALER_exchange_offline_profit_drain_verify (
+ &roi->details.wtid,
+ request_timestamp,
+ &amount,
+ account_section,
+ payto_uri,
+ &TALER_ARL_master_pub,
+ &master_sig))
+ {
+ GNUNET_break (0);
+ TALER_ARL_report (report_row_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("table",
+ "profit_drains"),
+ GNUNET_JSON_pack_uint64 ("row",
+ serial),
+ GNUNET_JSON_pack_data_auto ("id",
+ &roi->details.wtid),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "invalid signature")));
+ TALER_ARL_amount_add (&total_bad_amount_out_plus,
+ &total_bad_amount_out_plus,
+ &amount);
+ }
+ else if (0 !=
+ strcasecmp (payto_uri,
+ roi->details.credit_account_uri))
+ {
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ serial),
+ TALER_JSON_pack_amount ("amount_wired",
+ &roi->details.amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &amount),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ &roi->details.wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ roi->details.execution_date.abs_time),
+ GNUNET_JSON_pack_string ("account",
+ wa->ai->section_name),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "wrong target account")));
+ TALER_ARL_amount_add (&total_bad_amount_out_plus,
+ &total_bad_amount_out_plus,
+ &amount);
+ }
+ else if (0 !=
+ TALER_amount_cmp (&amount,
+ &roi->details.amount))
+ {
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ serial),
+ TALER_JSON_pack_amount ("amount_justified",
+ &roi->details.amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &amount),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ &roi->details.wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ roi->details.execution_date.abs_time),
+ GNUNET_JSON_pack_string ("account",
+ wa->ai->section_name),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "profit drain amount incorrect")));
+ TALER_ARL_amount_add (&total_bad_amount_out_minus,
+ &total_bad_amount_out_minus,
+ &roi->details.amount);
+ TALER_ARL_amount_add (&total_bad_amount_out_plus,
+ &total_bad_amount_out_plus,
+ &amount);
+ }
+ GNUNET_free (account_section);
+ GNUNET_free (payto_uri);
+ /* profit drain was correct */
+ TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_drained),
+ &TALER_ARL_USE_AB (total_drained),
+ &amount);
+ return GNUNET_OK;
+ }
+ }
+
+ TALER_ARL_report (
+ report_wire_out_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ 0),
+ TALER_JSON_pack_amount ("amount_wired",
+ &roi->details.amount),
+ TALER_JSON_pack_amount ("amount_justified",
+ &zero),
+ GNUNET_JSON_pack_data_auto ("wtid",
+ &roi->details.wtid),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ roi->details.execution_date.abs_time),
+ GNUNET_JSON_pack_string ("account_section",
+ wa->ai->section_name),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "justification for wire transfer not found")));
TALER_ARL_amount_add (&total_bad_amount_out_plus,
&total_bad_amount_out_plus,
&roi->details.amount);
@@ -1250,6 +1843,7 @@ check_exchange_wire_out (struct WireAccount *wa)
{
enum GNUNET_DB_QueryStatus qs;
+ GNUNET_assert (NULL == wa->dhh);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing exchange's wire OUT table for account `%s'\n",
wa->ai->section_name);
@@ -1283,90 +1877,92 @@ check_exchange_wire_out (struct WireAccount *wa)
* transactions).
*
* @param cls `struct WireAccount` with current wire account to process
- * @param http_status_code http status of the request
- * @param ec error code in case something went wrong
- * @param row_off identification of the position at which we are querying
- * @param details details about the wire transfer
- * @param json original response in JSON format
- * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
- */
-static int
+ * @param dhr HTTP response details
+ */
+static void
history_debit_cb (void *cls,
- unsigned int http_status_code,
- enum TALER_ErrorCode ec,
- uint64_t row_off,
- const struct TALER_BANK_DebitDetails *details,
- const json_t *json)
+ const struct TALER_BANK_DebitHistoryResponse *dhr)
{
struct WireAccount *wa = cls;
struct ReserveOutInfo *roi;
size_t slen;
- (void) json;
- if (NULL == details)
+ wa->dhh = NULL;
+ switch (dhr->http_status)
{
- wa->dhh = NULL;
- if (TALER_EC_NONE != ec)
+ case MHD_HTTP_OK:
+ for (unsigned int i = 0; i<dhr->details.ok.details_length; i++)
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Error fetching debit history of account %s: %u/%u!\n",
- wa->ai->section_name,
- http_status_code,
- (unsigned int) ec);
- commit (GNUNET_DB_STATUS_HARD_ERROR);
- global_ret = EXIT_FAILURE;
- GNUNET_SCHEDULER_shutdown ();
- return GNUNET_SYSERR;
+ const struct TALER_BANK_DebitDetails *dd
+ = &dhr->details.ok.details[i];
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Analyzing bank DEBIT at %s of %s with WTID %s\n",
+ GNUNET_TIME_timestamp2s (dd->execution_date),
+ TALER_amount2s (&dd->amount),
+ TALER_B2S (&dd->wtid));
+ /* Update offset */
+ wa->wire_off_out = dd->serial_id;
+ slen = strlen (dd->credit_account_uri) + 1;
+ roi = GNUNET_malloc (sizeof (struct ReserveOutInfo)
+ + slen);
+ GNUNET_CRYPTO_hash (&dd->wtid,
+ sizeof (dd->wtid),
+ &roi->subject_hash);
+ roi->details.amount = dd->amount;
+ roi->details.execution_date = dd->execution_date;
+ roi->details.wtid = dd->wtid;
+ roi->details.credit_account_uri = (const char *) &roi[1];
+ GNUNET_memcpy (&roi[1],
+ dd->credit_account_uri,
+ slen);
+ if (GNUNET_OK !=
+ GNUNET_CONTAINER_multihashmap_put (out_map,
+ &roi->subject_hash,
+ roi,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
+ {
+ char *diagnostic;
+
+ GNUNET_asprintf (&diagnostic,
+ "duplicate subject hash `%s'",
+ TALER_B2S (&roi->subject_hash));
+ TALER_ARL_amount_add (&total_wire_format_amount,
+ &total_wire_format_amount,
+ &dd->amount);
+ TALER_ARL_report (report_wire_format_inconsistencies,
+ GNUNET_JSON_PACK (
+ TALER_JSON_pack_amount ("amount",
+ &dd->amount),
+ GNUNET_JSON_pack_uint64 ("wire_offset",
+ dd->serial_id),
+ GNUNET_JSON_pack_string ("diagnostic",
+ diagnostic)));
+ GNUNET_free (diagnostic);
+ }
}
check_exchange_wire_out (wa);
- return GNUNET_OK;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Analyzing bank DEBIT at %s of %s with WTID %s\n",
- GNUNET_STRINGS_absolute_time_to_string (details->execution_date),
- TALER_amount2s (&details->amount),
- TALER_B2S (&details->wtid));
- /* Update offset */
- wa->out_wire_off = row_off;
- slen = strlen (details->credit_account_uri) + 1;
- roi = GNUNET_malloc (sizeof (struct ReserveOutInfo)
- + slen);
- GNUNET_CRYPTO_hash (&details->wtid,
- sizeof (details->wtid),
- &roi->subject_hash);
- roi->details.amount = details->amount;
- roi->details.execution_date = details->execution_date;
- roi->details.wtid = details->wtid;
- roi->details.credit_account_uri = (const char *) &roi[1];
- memcpy (&roi[1],
- details->credit_account_uri,
- slen);
- if (GNUNET_OK !=
- GNUNET_CONTAINER_multihashmap_put (out_map,
- &roi->subject_hash,
- roi,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
- {
- char *diagnostic;
-
- GNUNET_asprintf (&diagnostic,
- "duplicate subject hash `%s'",
- TALER_B2S (&roi->subject_hash));
- TALER_ARL_amount_add (&total_wire_format_amount,
- &total_wire_format_amount,
- &details->amount);
- TALER_ARL_report (report_wire_format_inconsistencies,
- GNUNET_JSON_PACK (
- TALER_JSON_pack_amount ("amount",
- &details->amount),
- GNUNET_JSON_pack_uint64 ("wire_offset",
- row_off),
- GNUNET_JSON_pack_string ("diagnostic",
- diagnostic)));
- GNUNET_free (diagnostic);
- return GNUNET_OK;
+ return;
+ case MHD_HTTP_NO_CONTENT:
+ check_exchange_wire_out (wa);
+ return;
+ case MHD_HTTP_NOT_FOUND:
+ if (ignore_account_404)
+ {
+ check_exchange_wire_out (wa);
+ return;
+ }
+ break;
+ default:
+ break;
}
- return GNUNET_OK;
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error fetching debit history of account %s: %u/%u!\n",
+ wa->ai->section_name,
+ dhr->http_status,
+ (unsigned int) dhr->ec);
+ commit (GNUNET_DB_STATUS_HARD_ERROR);
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
}
@@ -1397,10 +1993,12 @@ process_debits (void *cls)
"Checking bank DEBIT records of account `%s'\n",
wa->ai->section_name);
GNUNET_assert (NULL == wa->dhh);
+ // FIXME: handle the case where more than INT32_MAX transactions exist.
+ // (CG: used to be INT64_MAX, changed by MS to INT32_MAX, why? To be discussed with him!)
wa->dhh = TALER_BANK_debit_history (ctx,
wa->ai->auth,
- wa->out_wire_off,
- INT64_MAX,
+ wa->wire_off_out,
+ INT32_MAX,
GNUNET_TIME_UNIT_ZERO,
&history_debit_cb,
wa);
@@ -1423,8 +2021,9 @@ process_debits (void *cls)
static void
begin_debit_audit (void)
{
+ GNUNET_assert (NULL == out_map);
out_map = GNUNET_CONTAINER_multihashmap_create (1024,
- GNUNET_YES);
+ true);
process_debits (wa_head);
}
@@ -1439,8 +2038,11 @@ begin_debit_audit (void)
static void
conclude_credit_history (void)
{
- GNUNET_CONTAINER_multihashmap_destroy (in_map);
- in_map = NULL;
+ if (NULL != in_map)
+ {
+ GNUNET_CONTAINER_multihashmap_destroy (in_map);
+ in_map = NULL;
+ }
/* credit done, now check debits */
begin_debit_audit ();
}
@@ -1459,14 +2061,14 @@ conclude_credit_history (void)
* @param execution_date when did we receive the funds
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
reserve_in_cb (void *cls,
uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_Amount *credit,
const char *sender_account_details,
uint64_t wire_reference,
- struct GNUNET_TIME_Absolute execution_date)
+ struct GNUNET_TIME_Timestamp execution_date)
{
struct WireAccount *wa = cls;
struct ReserveInInfo *rii;
@@ -1475,9 +2077,12 @@ reserve_in_cb (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing exchange wire IN (%llu) at %s of %s with reserve_pub %s\n",
(unsigned long long) rowid,
- GNUNET_STRINGS_absolute_time_to_string (execution_date),
+ GNUNET_TIME_timestamp2s (execution_date),
TALER_amount2s (credit),
TALER_B2S (reserve_pub));
+ TALER_ARL_amount_add (&total_wire_in,
+ &total_wire_in,
+ credit);
slen = strlen (sender_account_details) + 1;
rii = GNUNET_malloc (sizeof (struct ReserveInInfo) + slen);
rii->rowid = rowid;
@@ -1485,9 +2090,9 @@ reserve_in_cb (void *cls,
rii->details.execution_date = execution_date;
rii->details.reserve_pub = *reserve_pub;
rii->details.debit_account_uri = (const char *) &rii[1];
- memcpy (&rii[1],
- sender_account_details,
- slen);
+ GNUNET_memcpy (&rii[1],
+ sender_account_details,
+ slen);
GNUNET_CRYPTO_hash (&wire_reference,
sizeof (uint64_t),
&rii->row_off_hash);
@@ -1503,7 +2108,7 @@ reserve_in_cb (void *cls,
"reserves_in"),
GNUNET_JSON_pack_uint64 ("row",
rowid),
- GNUNET_JSON_pack_data_auto ("wire_offset_hash",
+ GNUNET_JSON_pack_data_auto ("id",
&rii->row_off_hash),
GNUNET_JSON_pack_string ("diagnostic",
"duplicate wire offset")));
@@ -1527,7 +2132,7 @@ reserve_in_cb (void *cls,
* @param value the `struct ReserveInInfo` to free
* @return #GNUNET_OK
*/
-static int
+static enum GNUNET_GenericReturnValue
complain_in_not_found (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -1536,23 +2141,23 @@ complain_in_not_found (void *cls,
struct ReserveInInfo *rii = value;
(void) key;
- TALER_ARL_report (report_reserve_in_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rii->rowid),
- TALER_JSON_pack_amount ("amount_exchange_expected",
- &rii->details.amount),
- TALER_JSON_pack_amount ("amount_wired",
- &zero),
- GNUNET_JSON_pack_data_auto ("reserve_pub",
- &rii->details.reserve_pub),
- TALER_JSON_pack_time_abs_human ("timestamp",
- rii->details.
- execution_date),
- GNUNET_JSON_pack_string ("account",
- wa->ai->section_name),
- GNUNET_JSON_pack_string ("diagnostic",
- "incoming wire transfer claimed by exchange not found")));
+ TALER_ARL_report (
+ report_reserve_in_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rii->rowid),
+ TALER_JSON_pack_amount ("amount_exchange_expected",
+ &rii->details.amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &zero),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ &rii->details.reserve_pub),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ rii->details.execution_date.abs_time),
+ GNUNET_JSON_pack_string ("account",
+ wa->ai->section_name),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "incoming wire transfer claimed by exchange not found")));
TALER_ARL_amount_add (&total_bad_amount_in_minus,
&total_bad_amount_in_minus,
&rii->details.amount);
@@ -1571,50 +2176,19 @@ process_credits (void *cls);
/**
- * This function is called for all transactions that
- * are credited to the exchange's account (incoming
- * transactions).
+ * We got all of the incoming transactions for @a wa,
+ * finish processing the account.
*
- * @param cls `struct WireAccount` we are processing
- * @param http_status HTTP status returned by the bank
- * @param ec error code in case something went wrong
- * @param row_off identification of the position at which we are querying
- * @param details details about the wire transfer
- * @param json raw response
- * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
- */
-static int
-history_credit_cb (void *cls,
- unsigned int http_status,
- enum TALER_ErrorCode ec,
- uint64_t row_off,
- const struct TALER_BANK_CreditDetails *details,
- const json_t *json)
+ * @param[in,out] wa wire account to process
+ */
+static void
+conclude_account (struct WireAccount *wa)
{
- struct WireAccount *wa = cls;
- struct ReserveInInfo *rii;
- struct GNUNET_HashCode key;
-
- (void) json;
- if (NULL == details)
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Reconciling CREDIT processing of account `%s'\n",
+ wa->ai->section_name);
+ if (NULL != in_map)
{
- wa->chh = NULL;
- if (TALER_EC_NONE != ec)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Error fetching credit history of account %s: %u/%s!\n",
- wa->ai->section_name,
- http_status,
- TALER_ErrorCode_get_hint (ec));
- commit (GNUNET_DB_STATUS_HARD_ERROR);
- global_ret = EXIT_FAILURE;
- GNUNET_SCHEDULER_shutdown ();
- return GNUNET_SYSERR;
- }
- /* end of operation */
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Reconciling CREDIT processing of account `%s'\n",
- wa->ai->section_name);
GNUNET_CONTAINER_multihashmap_iterate (in_map,
&complain_in_not_found,
wa);
@@ -1622,16 +2196,32 @@ history_credit_cb (void *cls,
GNUNET_CONTAINER_multihashmap_iterate (in_map,
&free_rii,
NULL);
- process_credits (wa->next);
- return GNUNET_OK;
}
+ process_credits (wa->next);
+}
+
+
+/**
+ * Analyze credit transaction @a details into @a wa.
+ *
+ * @param[in,out] wa account that received the transfer
+ * @param details transfer details
+ * @return true on success, false to stop loop at this point
+ */
+static bool
+analyze_credit (struct WireAccount *wa,
+ const struct TALER_BANK_CreditDetails *details)
+{
+ struct ReserveInInfo *rii;
+ struct GNUNET_HashCode key;
+
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing bank CREDIT at %s of %s with Reserve-pub %s\n",
- GNUNET_STRINGS_absolute_time_to_string (details->execution_date),
+ GNUNET_TIME_timestamp2s (details->execution_date),
TALER_amount2s (&details->amount),
TALER_B2S (&details->reserve_pub));
- GNUNET_CRYPTO_hash (&row_off,
- sizeof (row_off),
+ GNUNET_CRYPTO_hash (&details->serial_id,
+ sizeof (details->serial_id),
&key);
rii = GNUNET_CONTAINER_multihashmap_get (in_map,
&key);
@@ -1639,55 +2229,54 @@ history_credit_cb (void *cls,
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Failed to find wire transfer at `%s' in exchange database. Audit ends at this point in time.\n",
- GNUNET_STRINGS_absolute_time_to_string (
- details->execution_date));
- wa->chh = NULL;
+ GNUNET_TIME_timestamp2s (details->execution_date));
process_credits (wa->next);
- return GNUNET_SYSERR; /* not an error, just end of processing */
+ return false; /* not an error, just end of processing */
}
/* Update offset */
- wa->in_wire_off = row_off;
+ wa->wire_off_in = details->serial_id;
/* compare records with expected data */
if (0 != GNUNET_memcmp (&details->reserve_pub,
&rii->details.reserve_pub))
{
- TALER_ARL_report (report_reserve_in_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rii->rowid),
- GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
- TALER_JSON_pack_amount ("amount_exchange_expected",
- &rii->details.amount),
- TALER_JSON_pack_amount ("amount_wired",
- &zero),
- GNUNET_JSON_pack_data_auto ("reserve_pub",
- &rii->details.reserve_pub),
- TALER_JSON_pack_time_abs_human ("timestamp",
- rii->details.
- execution_date),
- GNUNET_JSON_pack_string ("diagnostic",
- "wire subject does not match")));
+ TALER_ARL_report (
+ report_reserve_in_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rii->rowid),
+ GNUNET_JSON_pack_uint64 ("bank_row",
+ details->serial_id),
+ TALER_JSON_pack_amount ("amount_exchange_expected",
+ &rii->details.amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &zero),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ &rii->details.reserve_pub),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ rii->details.execution_date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "wire subject does not match")));
TALER_ARL_amount_add (&total_bad_amount_in_minus,
&total_bad_amount_in_minus,
&rii->details.amount);
- TALER_ARL_report (report_reserve_in_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rii->rowid),
- GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
- TALER_JSON_pack_amount ("amount_exchange_expected",
- &zero),
- TALER_JSON_pack_amount ("amount_wired",
- &details->amount),
- GNUNET_JSON_pack_data_auto ("reserve_pub",
- &details->reserve_pub),
- TALER_JSON_pack_time_abs_human ("timestamp",
- details->execution_date),
- GNUNET_JSON_pack_string ("diagnostic",
- "wire subject does not match")));
+ TALER_ARL_report (
+ report_reserve_in_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rii->rowid),
+ GNUNET_JSON_pack_uint64 ("bank_row",
+ details->serial_id),
+ TALER_JSON_pack_amount ("amount_exchange_expected",
+ &zero),
+ TALER_JSON_pack_amount ("amount_wired",
+ &details->amount),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ &details->reserve_pub),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ details->execution_date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "wire subject does not match")));
TALER_ARL_amount_add (&total_bad_amount_in_plus,
&total_bad_amount_in_plus,
@@ -1697,22 +2286,23 @@ history_credit_cb (void *cls,
if (0 != TALER_amount_cmp (&rii->details.amount,
&details->amount))
{
- TALER_ARL_report (report_reserve_in_inconsistencies,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_uint64 ("row",
- rii->rowid),
- GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
- TALER_JSON_pack_amount ("amount_exchange_expected",
- &rii->details.amount),
- TALER_JSON_pack_amount ("amount_wired",
- &details->amount),
- GNUNET_JSON_pack_data_auto ("reserve_pub",
- &details->reserve_pub),
- TALER_JSON_pack_time_abs_human ("timestamp",
- details->execution_date),
- GNUNET_JSON_pack_string ("diagnostic",
- "wire amount does not match")));
+ TALER_ARL_report (
+ report_reserve_in_inconsistencies,
+ GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("row",
+ rii->rowid),
+ GNUNET_JSON_pack_uint64 ("bank_row",
+ details->serial_id),
+ TALER_JSON_pack_amount ("amount_exchange_expected",
+ &rii->details.amount),
+ TALER_JSON_pack_amount ("amount_wired",
+ &details->amount),
+ GNUNET_JSON_pack_data_auto ("reserve_pub",
+ &details->reserve_pub),
+ TALER_JSON_pack_time_abs_human ("timestamp",
+ details->execution_date.abs_time),
+ GNUNET_JSON_pack_string ("diagnostic",
+ "wire amount does not match")));
if (0 < TALER_amount_cmp (&details->amount,
&rii->details.amount))
{
@@ -1743,23 +2333,24 @@ history_credit_cb (void *cls,
if (0 != strcasecmp (details->debit_account_uri,
rii->details.debit_account_uri))
{
- TALER_ARL_report (report_missattribution_in_inconsistencies,
+ TALER_ARL_report (report_misattribution_in_inconsistencies,
GNUNET_JSON_PACK (
TALER_JSON_pack_amount ("amount",
&rii->details.amount),
GNUNET_JSON_pack_uint64 ("row",
rii->rowid),
GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
+ details->serial_id),
GNUNET_JSON_pack_data_auto (
"reserve_pub",
&rii->details.reserve_pub)));
- TALER_ARL_amount_add (&total_missattribution_in,
- &total_missattribution_in,
+ TALER_ARL_amount_add (&total_misattribution_in,
+ &total_misattribution_in,
&rii->details.amount);
}
- if (details->execution_date.abs_value_us !=
- rii->details.execution_date.abs_value_us)
+ if (GNUNET_TIME_timestamp_cmp (details->execution_date,
+ !=,
+ rii->details.execution_date))
{
TALER_ARL_report (report_row_minor_inconsistencies,
GNUNET_JSON_PACK (
@@ -1768,7 +2359,7 @@ history_credit_cb (void *cls,
GNUNET_JSON_pack_uint64 ("row",
rii->rowid),
GNUNET_JSON_pack_uint64 ("bank_row",
- row_off),
+ details->serial_id),
GNUNET_JSON_pack_string ("diagnostic",
"execution date mismatch")));
}
@@ -1777,7 +2368,60 @@ cleanup:
free_rii (NULL,
&key,
rii));
- return GNUNET_OK;
+ return true;
+}
+
+
+/**
+ * This function is called for all transactions that
+ * are credited to the exchange's account (incoming
+ * transactions).
+ *
+ * @param cls `struct WireAccount` we are processing
+ * @param chr HTTP response returned by the bank
+ */
+static void
+history_credit_cb (void *cls,
+ const struct TALER_BANK_CreditHistoryResponse *chr)
+{
+ struct WireAccount *wa = cls;
+
+ wa->chh = NULL;
+ switch (chr->http_status)
+ {
+ case MHD_HTTP_OK:
+ for (unsigned int i = 0; i<chr->details.ok.details_length; i++)
+ {
+ const struct TALER_BANK_CreditDetails *cd
+ = &chr->details.ok.details[i];
+
+ if (! analyze_credit (wa,
+ cd))
+ return;
+ }
+ conclude_account (wa);
+ return;
+ case MHD_HTTP_NO_CONTENT:
+ conclude_account (wa);
+ return;
+ case MHD_HTTP_NOT_FOUND:
+ if (ignore_account_404)
+ {
+ conclude_account (wa);
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error fetching credit history of account %s: %u/%s!\n",
+ wa->ai->section_name,
+ chr->http_status,
+ TALER_ErrorCode_get_hint (chr->ec));
+ commit (GNUNET_DB_STATUS_HARD_ERROR);
+ global_ret = EXIT_FAILURE;
+ GNUNET_SCHEDULER_shutdown ();
}
@@ -1826,10 +2470,12 @@ process_credits (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting bank CREDIT history of account `%s'\n",
wa->ai->section_name);
+ // NOTE: handle the case where more than INT32_MAX transactions exist.
+ // (CG: used to be INT64_MAX, changed by MS to INT32_MAX, why? To be discussed with him!)
wa->chh = TALER_BANK_credit_history (ctx,
wa->ai->auth,
- wa->in_wire_off,
- INT64_MAX,
+ wa->wire_off_in,
+ INT32_MAX,
GNUNET_TIME_UNIT_ZERO,
&history_credit_cb,
wa);
@@ -1851,6 +2497,7 @@ process_credits (void *cls)
static void
begin_credit_audit (void)
{
+ GNUNET_assert (NULL == in_map);
in_map = GNUNET_CONTAINER_multihashmap_create (1024,
GNUNET_YES);
/* now go over all bank accounts and check delta with in_map */
@@ -1859,8 +2506,7 @@ begin_credit_audit (void)
/**
- * Function called about reserve closing operations
- * the aggregator triggered.
+ * Function called about reserve closing operations the aggregator triggered.
*
* @param cls closure
* @param rowid row identifier used to uniquely identify the reserve closing operation
@@ -1870,22 +2516,26 @@ begin_credit_audit (void)
* @param reserve_pub public key of the reserve
* @param receiver_account where did we send the funds, in payto://-format
* @param wtid identifier used for the wire transfer
+ * @param close_request_row which close request triggered the operation?
+ * 0 if it was a timeout (not used)
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-static int
+static enum GNUNET_GenericReturnValue
reserve_closed_cb (void *cls,
uint64_t rowid,
- struct GNUNET_TIME_Absolute execution_date,
+ struct GNUNET_TIME_Timestamp execution_date,
const struct TALER_Amount *amount_with_fee,
const struct TALER_Amount *closing_fee,
const struct TALER_ReservePublicKeyP *reserve_pub,
const char *receiver_account,
- const struct TALER_WireTransferIdentifierRawP *wtid)
+ const struct TALER_WireTransferIdentifierRawP *wtid,
+ uint64_t close_request_row)
{
struct ReserveClosure *rc;
struct GNUNET_HashCode key;
(void) cls;
+ (void) close_request_row;
rc = GNUNET_new (struct ReserveClosure);
if (TALER_ARL_SR_INVALID_NEGATIVE ==
TALER_ARL_amount_subtract_neg (&rc->amount,
@@ -1898,7 +2548,7 @@ reserve_closed_cb (void *cls,
"reserves_closures"),
GNUNET_JSON_pack_uint64 ("row",
rowid),
- GNUNET_JSON_pack_data_auto ("reserve_pub",
+ GNUNET_JSON_pack_data_auto ("id",
reserve_pub),
TALER_JSON_pack_amount ("amount_with_fee",
amount_with_fee),
@@ -1911,8 +2561,8 @@ reserve_closed_cb (void *cls,
return GNUNET_SYSERR;
return GNUNET_OK;
}
- pp.last_reserve_close_uuid
- = GNUNET_MAX (pp.last_reserve_close_uuid,
+ TALER_ARL_USE_PP (wire_reserve_close_id)
+ = GNUNET_MAX (TALER_ARL_USE_PP (wire_reserve_close_id),
rowid + 1);
rc->receiver_account = GNUNET_strdup (receiver_account);
rc->wtid = *wtid;
@@ -1939,6 +2589,8 @@ reserve_closed_cb (void *cls,
static enum GNUNET_DB_QueryStatus
begin_transaction (void)
{
+ enum GNUNET_DB_QueryStatus qs;
+
if (GNUNET_SYSERR ==
TALER_ARL_edb->preflight (TALER_ARL_edb->cls))
{
@@ -1967,17 +2619,66 @@ begin_transaction (void)
GNUNET_break (0);
return GNUNET_DB_STATUS_HARD_ERROR;
}
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &TALER_ARL_USE_AB (total_drained)));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_wire_in));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TALER_ARL_currency,
+ &total_wire_out));
+ qs = TALER_ARL_adb->get_balance (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_AB (total_drained),
+ TALER_ARL_GET_AB (final_balance),
+ NULL);
+ switch (qs)
+ {
+ case GNUNET_DB_STATUS_HARD_ERROR:
+ GNUNET_break (0);
+ return qs;
+ case GNUNET_DB_STATUS_SOFT_ERROR:
+ GNUNET_break (0);
+ return qs;
+ case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+ had_start_balance = false;
+ break;
+ case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+ had_start_balance = true;
+ break;
+ }
for (struct WireAccount *wa = wa_head;
NULL != wa;
wa = wa->next)
{
- wa->qsx = TALER_ARL_adb->get_wire_auditor_account_progress (
+ GNUNET_asprintf (&wa->label_reserve_in_serial_id,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "reserve_in_serial_id");
+ GNUNET_asprintf (&wa->label_wire_out_serial_id,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "wire_out_serial_id");
+ GNUNET_asprintf (&wa->label_wire_off_in,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "wire_off_in");
+ GNUNET_asprintf (&wa->label_wire_off_out,
+ "wire-%s-%s",
+ wa->ai->section_name,
+ "wire_off_out");
+ wa->qsx = TALER_ARL_adb->get_auditor_progress (
TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- wa->ai->section_name,
- &wa->pp,
- &wa->in_wire_off,
- &wa->out_wire_off);
+ wa->label_reserve_in_serial_id,
+ &wa->pp.last_reserve_in_serial_id,
+ wa->label_wire_out_serial_id,
+ &wa->pp.last_wire_out_serial_id,
+ wa->label_wire_off_in,
+ &wa->wire_off_in,
+ wa->label_wire_off_out,
+ &wa->wire_off_out,
+ NULL);
if (0 > wa->qsx)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == wa->qsx);
@@ -1985,9 +2686,12 @@ begin_transaction (void)
}
wa->start_pp = wa->pp;
}
- qsx_gwap = TALER_ARL_adb->get_wire_auditor_progress (TALER_ARL_adb->cls,
- &TALER_ARL_master_pub,
- &pp);
+ qsx_gwap = TALER_ARL_adb->get_auditor_progress (
+ TALER_ARL_adb->cls,
+ TALER_ARL_GET_PP (wire_reserve_close_id),
+ TALER_ARL_GET_PP (wire_batch_deposit_id),
+ TALER_ARL_GET_PP (wire_aggregation_id),
+ NULL);
if (0 > qsx_gwap)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx_gwap);
@@ -2000,11 +2704,11 @@ begin_transaction (void)
}
else
{
- start_pp = pp;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Resuming wire audit at %s / %llu\n",
- GNUNET_STRINGS_absolute_time_to_string (pp.last_timestamp),
- (unsigned long long) pp.last_reserve_close_uuid);
+ "Resuming wire audit at %llu / %llu / %llu\n",
+ (unsigned long long) TALER_ARL_USE_PP (wire_reserve_close_id),
+ (unsigned long long) TALER_ARL_USE_PP (wire_batch_deposit_id),
+ (unsigned long long) TALER_ARL_USE_PP (wire_aggregation_id));
}
{
@@ -2012,7 +2716,7 @@ begin_transaction (void)
qs = TALER_ARL_edb->select_reserve_closed_above_serial_id (
TALER_ARL_edb->cls,
- pp.last_reserve_close_uuid,
+ TALER_ARL_USE_PP (wire_reserve_close_id),
&reserve_closed_cb,
NULL);
if (0 > qs)
@@ -2114,11 +2818,15 @@ run (void *cls,
GNUNET_assert (NULL !=
(report_row_inconsistencies = json_array ()));
GNUNET_assert (NULL !=
- (report_missattribution_in_inconsistencies
+ (report_misattribution_in_inconsistencies
= json_array ()));
GNUNET_assert (NULL !=
(report_lags = json_array ()));
GNUNET_assert (NULL !=
+ (report_aml_lags = json_array ()));
+ GNUNET_assert (NULL !=
+ (report_kyc_lags = json_array ()));
+ GNUNET_assert (NULL !=
(report_closure_lags = json_array ()));
GNUNET_assert (NULL !=
(report_account_progress = json_array ()));
@@ -2136,7 +2844,7 @@ run (void *cls,
&total_bad_amount_in_minus));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
- &total_missattribution_in));
+ &total_misattribution_in));
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&total_amount_lag));
@@ -2190,11 +2898,14 @@ main (int argc,
"internal",
"perform checks only applicable for exchange-internal audits",
&internal_checks),
- GNUNET_GETOPT_option_base32_auto ('m',
- "exchange-key",
- "KEY",
- "public key of the exchange (Crockford base32 encoded)",
- &TALER_ARL_master_pub),
+ GNUNET_GETOPT_option_flag ('I',
+ "ignore-not-found",
+ "continue, even if the bank account of the exchange was not found",
+ &ignore_account_404),
+ GNUNET_GETOPT_option_flag ('t',
+ "test",
+ "run in test mode and exit when idle",
+ &test_mode),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
diff --git a/src/auditor/test-auditor.sh b/src/auditor/test-auditor.sh
index 44b3c7b59..2cfea0532 100755
--- a/src/auditor/test-auditor.sh
+++ b/src/auditor/test-auditor.sh
@@ -1,4 +1,24 @@
#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2023 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
+#
+# shellcheck disable=SC2317
+# shellcheck disable=SC1091
+#
+#
# Setup database which was generated from a perfectly normal
# exchange-wallet interaction and run the auditor against it.
#
@@ -6,10 +26,11 @@
#
# Requires 'jq' tool and Postgres superuser rights!
set -eu
+#set -x
# Set of numbers for all the testcases.
# When adding new tests, increase the last number:
-ALL_TESTS=`seq 0 32`
+ALL_TESTS=$(seq 0 33)
# $TESTS determines which tests we should run.
# This construction is used to make it easy to
@@ -27,60 +48,105 @@ TESTS=${1:-$ALL_TESTS}
# VALGRIND=valgrind
VALGRIND=""
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+# Number of seconds to let libeuifn background
+# tasks apply a cycle of payment submission and
+# history request.
+LIBEUFIN_SETTLE_TIME=1
+
+. setup.sh
+
-# Exit, with error message (hard failure)
-function exit_fail() {
- echo $1
- exit 1
+# Cleanup exchange and libeufin between runs.
+function cleanup()
+{
+ if [ ! -z "${EPID:-}" ]
+ then
+ echo -n "Stopping exchange $EPID..."
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ echo "DONE"
+ unset EPID
+ fi
+ stop_libeufin
}
# Cleanup to run whenever we exit
-function cleanup()
+function exit_cleanup()
{
- for n in `jobs -p`
+ echo "Running exit-cleanup"
+ if [ ! -z "${POSTGRES_PATH:-}" ]
+ then
+ echo "Stopping Postgres at ${POSTGRES_PATH}"
+ "${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ stop \
+ &> /dev/null \
+ || true
+ fi
+ cleanup
+ for n in $(jobs -p)
do
- kill $n 2> /dev/null || true
+ kill "$n" 2> /dev/null || true
done
- wait
+ wait || true
+ echo "DONE"
}
# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
+trap exit_cleanup EXIT
# Operations to run before the actual audit
function pre_audit () {
# Launch bank
- echo -n "Launching bank "
- taler-bank-manage-testing $CONF postgres:///$DB serve 2>bank.err >bank.log &
- for n in `seq 1 80`
+ echo -n "Launching libeufin-bank"
+ export CONF
+ export MY_TMP_DIR
+ launch_libeufin
+ for n in $(seq 1 80)
do
echo -n "."
sleep 0.1
OK=1
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null && break
+ wget http://localhost:8082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ && break
OK=0
done
- if [ 1 != $OK ]
+ if [ 1 != "$OK" ]
then
- exit_skip "Failed to launch bank"
+ exit_skip "Failed to launch libeufin-bank"
fi
echo " DONE"
- if test ${1:-no} = "aggregator"
+ if [ "${1:-no}" = "aggregator" ]
then
echo -n "Running exchange aggregator ..."
- taler-exchange-aggregator -L INFO -t -c $CONF 2> aggregator.log || exit_fail "FAIL"
+ taler-exchange-aggregator \
+ -y \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/aggregator.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange closer ..."
- taler-exchange-closer -L INFO -t -c $CONF 2> closer.log || exit_fail "FAIL"
+ taler-exchange-closer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/closer.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange transfer ..."
- taler-exchange-transfer -L INFO -t -c $CONF 2> transfer.log || exit_fail "FAIL"
+ taler-exchange-transfer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/transfer.log" \
+ || exit_fail "FAIL"
echo " DONE"
fi
}
@@ -91,26 +157,92 @@ function audit_only () {
echo -n "Running audit(s) ..."
# Restart so that first run is always fresh, and second one is incremental
- taler-auditor-dbinit -r -c $CONF
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation.json 2> test-audit-aggregation.log || exit_fail "aggregation audit failed"
+ taler-auditor-dbinit \
+ -r \
+ -c "$CONF"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-aggregation.out" \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation.err" \
+ || exit_fail "aggregation audit failed (see ${MY_TMP_DIR}/test-audit-aggregation.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation-inc.json 2> test-audit-aggregation-inc.log || exit_fail "incremental aggregation audit failed"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-aggregation-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation-inc.err" \
+ || exit_fail "incremental aggregation audit failed (see ${MY_TMP_DIR}/test-audit-aggregation-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins.json 2> test-audit-coins.log || exit_fail "coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-coins.out" \
+ 2> "${MY_TMP_DIR}/test-audit-coins.err" \
+ || exit_fail "coin audit failed (see ${MY_TMP_DIR}/test-audit-coins.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins-inc.json 2> test-audit-coins-inc.log || exit_fail "incremental coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-coins-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-coins-inc.err" \
+ || exit_fail "incremental coin audit failed (see ${MY_TMP_DIR}/test-audit-coins-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits.json 2> test-audit-deposits.log || exit_fail "deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-deposits.out" \
+ 2> "${MY_TMP_DIR}/test-audit-deposits.err" \
+ || exit_fail "deposits audit failed (see ${MY_TMP_DIR}/test-audit-deposits.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits-inc.json 2> test-audit-deposits-inc.log || exit_fail "incremental deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-deposits-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-deposits-inc.err" \
+ || exit_fail "incremental deposits audit failed (see ${MY_TMP_DIR}/test-audit-deposits-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves.json 2> test-audit-reserves.log || exit_fail "reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-reserves.out" \
+ 2> "${MY_TMP_DIR}/test-audit-reserves.err" \
+ || exit_fail "reserves audit failed (see ${MY_TMP_DIR}/test-audit-reserves.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves-inc.json 2> test-audit-reserves-inc.log || exit_fail "incremental reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-reserves-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-reserves-inc.err" \
+ || exit_fail "incremental reserves audit failed (see ${MY_TMP_DIR}/test-audit-reserves-inc.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire.json 2> test-wire-audit.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-wire.out" \
+ 2> "${MY_TMP_DIR}/test-audit-wire.err" \
+ || exit_fail "wire audit failed (see ${MY_TMP_DIR}/test-audit-wire.*)"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire-inc.json 2> test-wire-audit-inc.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -t \
+ > "${MY_TMP_DIR}/test-audit-wire-inc.out" \
+ 2> "${MY_TMP_DIR}/test-audit-wire-inc.err" \
+ || exit_fail "wire audit inc failed (see ${MY_TMP_DIR}/test-audit-wire-inc.*)"
echo -n "."
echo " DONE"
@@ -119,16 +251,11 @@ function audit_only () {
# Cleanup to run after the auditor
function post_audit () {
- taler-exchange-dbinit -c $CONF -g || exit_fail "exchange DB GC failed"
-
+ taler-exchange-dbinit \
+ -c "$CONF" \
+ -g \
+ || exit_fail "exchange DB GC failed"
cleanup
- echo -n "TeXing ."
- taler-helper-auditor-render.py test-audit-aggregation.json test-audit-coins.json test-audit-deposits.json test-audit-reserves.json test-audit-wire.json < ../../contrib/auditor-report.tex.j2 > test-report.tex || exit_fail "Renderer failed"
-
- echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null || exit_fail "pdflatex failed"
- echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null
echo " DONE"
}
@@ -137,143 +264,207 @@ function post_audit () {
# generation. Pass "aggregator" as $1 to run
# $ taler-exchange-aggregator
# before auditor (to trigger pending wire transfers).
+# Pass "drain" as $2 to run a drain operation as well.
function run_audit () {
- pre_audit ${1:-no}
+ pre_audit "${1:-no}"
+ if [ "${2:-no}" = "drain" ]
+ then
+ echo -n "Starting exchange..."
+ taler-exchange-httpd \
+ -c "${CONF}" \
+ -L INFO \
+ 2> "${MY_TMP_DIR}/exchange-httpd-drain.err" &
+ EPID=$!
+
+ # Wait for all services to be available
+ for n in $(seq 1 50)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # exchange
+ wget "http://localhost:8081/seed" \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ || continue
+ OK=1
+ break
+ done
+ echo "... DONE."
+ export CONF
+
+ echo -n "Running taler-exchange-offline drain "
+
+ taler-exchange-offline \
+ -L DEBUG \
+ -c "${CONF}" \
+ drain TESTKUDOS:0.1 \
+ exchange-account-1 payto://iban/SANDBOXX/DE360679?receiver-name=Exchange+Drain \
+ upload \
+ 2> "${MY_TMP_DIR}/taler-exchange-offline-drain.log" \
+ || exit_fail "offline draining failed"
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ unset EPID
+ echo -n "Running taler-exchange-drain ..."
+ printf "\n" | taler-exchange-drain \
+ -L DEBUG \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/taler-exchange-drain.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+
+ echo -n "Running taler-exchange-transfer ..."
+ taler-exchange-transfer \
+ -L INFO \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/drain-transfer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ fi
audit_only
post_audit
-
}
# Do a full reload of the (original) database
-full_reload()
+function full_reload()
{
- echo -n "Doing full reload of the database... "
- dropdb $DB 2> /dev/null || true
- createdb -T template0 $DB || exit_skip "could not create database"
+ echo -n "Doing full reload of the database (loading ${BASEDB}.sql into $DB at $PGHOST)... "
+ dropdb "$DB" 2> /dev/null || true
+ createdb -T template0 "$DB" \
+ || exit_skip "could not create database $DB (at $PGHOST)"
# Import pre-generated database, -q(ietly) using single (-1) transaction
- psql -Aqt $DB -q -1 -f ${BASEDB}.sql > /dev/null || exit_skip "Failed to load database"
+ psql -Aqt "$DB" \
+ -q \
+ -1 \
+ -f "${BASEDB}.sql" \
+ > /dev/null \
+ || exit_skip "Failed to load database $DB from ${BASEDB}.sql"
echo "DONE"
+ # Technically, this call shouldn't be needed as libeufin should already be stopped here...
+ stop_libeufin
}
function test_0() {
-echo "===========0: normal run with aggregator==========="
-run_audit aggregator
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for deposit confirmation emergencies... "
-jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+ echo "===========0: normal run with aggregator==========="
+ run_audit aggregator
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-echo PASS
+ echo PASS
-LOSS=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
-fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
-echo PASS
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ echo "PASS"
-echo -n "Checking for unexpected arithmetic differences "
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
-fi
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
-echo PASS
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
-echo -n "Checking for unexpected wire out differences "
-jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
-echo PASS
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
-# cannot easily undo aggregator, hence full reload
-full_reload
+ # cannot easily undo aggregator, hence full reload
+ full_reload
}
@@ -282,121 +473,147 @@ full_reload
# transfer lag!
function test_1() {
-echo "===========1: normal run==========="
-run_audit
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-
-echo PASS
-
-echo -n "Check for lag detection... "
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
- jq -e .lag_details[0] < test-audit-wire.json > /dev/null || exit_fail "Lag not detected in run without aggregator at age $DELTA"
+ echo "===========1: normal run==========="
+ run_audit
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency detected in ordinary run";
+ echo "PASS"
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency by count detected in ordinary run"
+ echo "PASS"
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo "PASS"
+
+ echo -n "Check for lag detection... "
- LAG=`jq -r .total_amount_lag < test-audit-wire.json`
- if test $LAG = "TESTKUDOS:0"
+ # Check wire transfer lag reported (no aggregator!)
+ # NOTE: This test is EXPECTED to fail for ~1h after
+ # re-generating the test database as we do not
+ # report lag of less than 1h (see GRACE_PERIOD in
+ # taler-helper-auditor-wire.c)
+ jq -e .lag_details[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ || exit_fail "Lag not detected in run without aggregator"
+
+ LAG=$(jq -r .total_amount_lag < test-audit-wire.json)
+ if [ "$LAG" = "TESTKUDOS:0" ]
then
exit_fail "Expected total lag to be non-zero"
fi
echo "PASS"
-else
- echo "SKIP (database too new)"
-fi
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
-# Database was unmodified, no need to undo
-echo "OK"
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ # Database was unmodified, no need to undo
+ echo "OK"
}
# Change amount of wire transfer reported by exchange
function test_2() {
-echo "===========2: reserves_in inconsistency==========="
-echo "UPDATE reserves_in SET credit_val=5 WHERE reserve_in_serial_id=1" | psql -At $DB
+ echo "===========2: reserves_in inconsistency ==========="
+ echo "UPDATE exchange.reserves_in SET credit_val=5 WHERE reserve_in_serial_id=1" \
+ | psql -At "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-ROW=`jq .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json`
-if test $ROW != 1
-then
- exit_fail "Row $ROW is wrong"
-fi
-WIRED=`jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:10"
-then
- exit_fail "Amount wrong"
-fi
-EXPECTED=`jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json`
-if test $EXPECTED != "TESTKUDOS:5"
-then
- exit_fail "Expected amount wrong"
-fi
+ echo -n "Testing inconsistency detection... "
+ ROW=$(jq .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json)
+ if [ "$ROW" != 1 ]
+ then
+ exit_fail "Row $ROW is wrong"
+ fi
+ WIRED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Amount wrong"
+ fi
+ EXPECTED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json)
+ if [ "$EXPECTED" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Expected amount wrong"
+ fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
-fi
-DELTA=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $DELTA != "TESTKUDOS:5"
-then
- exit_fail "Expected total wire delta plus wrong, got $DELTA"
-fi
-echo PASS
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
+ fi
+ DELTA=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$DELTA" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $DELTA"
+ fi
+ echo "PASS"
-# Undo database modification
-echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" \
+ | psql -Aqt "$DB"
}
@@ -405,61 +622,62 @@ echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql
# lower than what exchange claims to have received.
function test_3() {
-echo "===========3: reserves_in inconsistency==========="
-echo "UPDATE reserves_in SET credit_val=15 WHERE reserve_in_serial_id=1" | psql -Aqt $DB
+ echo "===========3: reserves_in inconsistency==========="
+ echo "UPDATE exchange.reserves_in SET credit_val=15 WHERE reserve_in_serial_id=1" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-EXPECTED=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json`
-if test $EXPECTED != "TESTKUDOS:5.01"
-then
- exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (auditor)"
-fi
+ EXPECTED=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json)
+ if [ "$EXPECTED" != "TESTKUDOS:5.01" ]
+ then
+ exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (auditor)"
+ fi
-EXPECTED=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json`
-if test $EXPECTED != "TESTKUDOS:0.01"
-then
- exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (exchange)"
-fi
+ EXPECTED=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json)
+ if [ "$EXPECTED" != "TESTKUDOS:0.01" ]
+ then
+ exit_fail "Expected reserve balance summary amount wrong, got $EXPECTED (exchange)"
+ fi
-WIRED=`jq -r .total_loss_balance_insufficient < test-audit-reserves.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Wrong total loss from insufficient balance, got $WIRED"
-fi
+ WIRED=$(jq -r .total_irregular_loss < test-audit-reserves.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total loss from insufficient balance, got $WIRED"
+ fi
-ROW=`jq -e .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json`
-if test $ROW != 1
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ ROW=$(jq -e .reserve_in_amount_inconsistencies[0].row < test-audit-wire.json)
+ if [ "$ROW" != 1 ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-WIRED=`jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:15"
-then
- exit_fail "Wrong amount_exchange_expected, got $WIRED"
-fi
+ WIRED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:15" ]
+ then
+ exit_fail "Wrong amount_exchange_expected, got $WIRED"
+ fi
-WIRED=`jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:10"
-then
- exit_fail "Wrong amount_wired, got $WIRED"
-fi
+ WIRED=$(jq -r .reserve_in_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Wrong amount_wired, got $WIRED"
+ fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:5"
-then
- exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
-fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
+ fi
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Wrong total wire_in_delta_plus, got $WIRED"
-fi
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total wire_in_delta_plus, got $WIRED"
+ fi
-# Undo database modification
-echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql -Aqt "$DB"
}
@@ -468,45 +686,52 @@ echo "UPDATE reserves_in SET credit_val=10 WHERE reserve_in_serial_id=1" | psql
# lower than what exchange claims to have received.
function test_4() {
-echo "===========4: deposit wire target wrong================="
-# Original target bank account was 43, changing to 44
-SERIAL=`echo "SELECT deposit_serial_id FROM deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql $DB -Aqt`
-OLD_WIRE=`echo "SELECT wire FROM deposits WHERE deposit_serial_id=${SERIAL};" | psql $DB -Aqt`
-echo "UPDATE deposits SET wire='{\"payto_uri\":\"payto://x-taler-bank/localhost:8082/44\",\"salt\":\"test-salt\"}' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
+ echo "===========4: deposit wire target wrong================="
+ # Original target bank account was 43, changing to 44
+ SERIAL=$(echo "SELECT deposit_serial_id FROM exchange.deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql "$DB" -Aqt)
+ OLD_WIRE_ID=$(echo "SELECT wire_target_h_payto FROM exchange.deposits WHERE deposit_serial_id=${SERIAL};" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "INSERT INTO exchange.wire_targets (payto_uri, wire_target_h_payto) VALUES ('payto://x-taler-bank/localhost/testuser-xxlargtp', '\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b');" \
+ | psql "$DB" \
+ -Aqt \
+ > /dev/null
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b' WHERE deposit_serial_id=${SERIAL}" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
+ echo -n "Testing inconsistency detection... "
-jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
+ jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != ${SERIAL}
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "${SERIAL}" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "deposit"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
-echo PASS
-# Undo:
-echo "UPDATE deposits SET wire='$OLD_WIRE' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
+ echo PASS
+ # Undo:
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='$OLD_WIRE_ID' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt "$DB"
}
@@ -515,42 +740,44 @@ echo "UPDATE deposits SET wire='$OLD_WIRE' WHERE deposit_serial_id=${SERIAL}" |
# Test where h_contract_terms in the deposit table is wrong
# (=> bad signature)
function test_5() {
-echo "===========5: deposit contract hash wrong================="
-# Modify h_wire hash, so it is inconsistent with 'wire'
-SERIAL=`echo "SELECT deposit_serial_id FROM deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql $DB -Aqt`
-OLD_H=`echo "SELECT h_contract_terms FROM deposits WHERE deposit_serial_id=$SERIAL;" | psql $DB -Aqt`
-echo "UPDATE deposits SET h_contract_terms='\x12bb676444955c98789f219148aa31899d8c354a63330624d3d143222cf3bb8b8e16f69accd5a8773127059b804c1955696bf551dd7be62719870613332aa8d5' WHERE deposit_serial_id=$SERIAL" | psql -Aqt $DB
+ echo "===========5: deposit contract hash wrong================="
+ # Modify h_wire hash, so it is inconsistent with 'wire'
+ SERIAL=$(echo "SELECT deposit_serial_id FROM exchange.deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql "$DB" -Aqt)
+ OLD_H=$(echo "SELECT h_contract_terms FROM exchange.deposits WHERE deposit_serial_id=$SERIAL;" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET h_contract_terms='\x12bb676444955c98789f219148aa31899d8c354a63330624d3d143222cf3bb8b8e16f69accd5a8773127059b804c1955696bf551dd7be62719870613332aa8d5' WHERE deposit_serial_id=$SERIAL" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Checking bad signature detection... "
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != $SERIAL
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ echo -n "Checking bad signature detection... "
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "$SERIAL" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "deposit"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
-echo PASS
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
+ echo PASS
-# Undo:
-echo "UPDATE deposits SET h_contract_terms='${OLD_H}' WHERE deposit_serial_id=$SERIAL" | psql -Aqt $DB
+ # Undo:
+ echo "UPDATE exchange.deposits SET h_contract_terms='${OLD_H}' WHERE deposit_serial_id=$SERIAL" | psql -Aqt "$DB"
}
@@ -558,40 +785,42 @@ echo "UPDATE deposits SET h_contract_terms='${OLD_H}' WHERE deposit_serial_id=$S
# Test where denom_sig in known_coins table is wrong
# (=> bad signature)
function test_6() {
-echo "===========6: known_coins signature wrong================="
-# Modify denom_sig, so it is wrong
-OLD_SIG=`echo 'SELECT denom_sig FROM known_coins LIMIT 1;' | psql $DB -Aqt`
-COIN_PUB=`echo "SELECT coin_pub FROM known_coins WHERE denom_sig='$OLD_SIG';" | psql $DB -Aqt`
-echo "UPDATE known_coins SET denom_sig='\x287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ echo "===========6: known_coins signature wrong================="
+ # Modify denom_sig, so it is wrong
+ OLD_SIG=$(echo 'SELECT denom_sig FROM exchange.known_coins LIMIT 1;' | psql "$DB" -Aqt)
+ COIN_PUB=$(echo "SELECT coin_pub FROM exchange.known_coins WHERE denom_sig='$OLD_SIG';" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != "1"
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "1" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS == "TESTKUDOS:0"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "melt"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "melt" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS == "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
-# Undo
-echo "UPDATE known_coins SET denom_sig='$OLD_SIG' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ # Undo
+ echo "UPDATE exchange.known_coins SET denom_sig='$OLD_SIG' WHERE coin_pub='$COIN_PUB'" | psql -Aqt "$DB"
}
@@ -599,51 +828,53 @@ echo "UPDATE known_coins SET denom_sig='$OLD_SIG' WHERE coin_pub='$COIN_PUB'" |
# Test where h_wire in the deposit table is wrong
function test_7() {
-echo "===========7: reserves_out signature wrong================="
-# Modify reserve_sig, so it is bogus
-HBE=`echo 'SELECT h_blind_ev FROM reserves_out LIMIT 1;' | psql $DB -Aqt`
-OLD_SIG=`echo "SELECT reserve_sig FROM reserves_out WHERE h_blind_ev='$HBE';" | psql $DB -Aqt`
-A_VAL=`echo "SELECT amount_with_fee_val FROM reserves_out WHERE h_blind_ev='$HBE';" | psql $DB -Aqt`
-A_FRAC=`echo "SELECT amount_with_fee_frac FROM reserves_out WHERE h_blind_ev='$HBE';" | psql $DB -Aqt`
-# Normalize, we only deal with cents in this test-case
-A_FRAC=`expr $A_FRAC / 1000000 || true`
-echo "UPDATE reserves_out SET reserve_sig='\x9ef381a84aff252646a157d88eded50f708b2c52b7120d5a232a5b628f9ced6d497e6652d986b581188fb014ca857fd5e765a8ccc4eb7e2ce9edcde39accaa4b' WHERE h_blind_ev='$HBE'" | psql -Aqt $DB
-
-run_audit
-
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-reserves.json`
-if test $OP != "withdraw"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ echo "===========7: reserves_out signature wrong================="
+ # Modify reserve_sig, so it is bogus
+ HBE=$(echo 'SELECT h_blind_ev FROM exchange.reserves_out LIMIT 1;' | psql "$DB" -Aqt)
+ OLD_SIG=$(echo "SELECT reserve_sig FROM exchange.reserves_out WHERE h_blind_ev='$HBE';" | psql "$DB" -Aqt)
+ A_VAL=$(echo "SELECT amount_with_fee_val FROM exchange.reserves_out WHERE h_blind_ev='$HBE';" | psql "$DB" -Aqt)
+ A_FRAC=$(echo "SELECT amount_with_fee_frac FROM exchange.reserves_out WHERE h_blind_ev='$HBE';" | psql "$DB" -Aqt)
+ # Normalize, we only deal with cents in this test-case
+ A_FRAC=$(( A_FRAC / 1000000))
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.reserves_out SET reserve_sig='\x9ef381a84aff252646a157d88eded50f708b2c52b7120d5a232a5b628f9ced6d497e6652d986b581188fb014ca857fd5e765a8ccc4eb7e2ce9edcde39accaa4b' WHERE h_blind_ev='$HBE'" \
+ | psql -Aqt "$DB"
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-reserves.json`
-LOSS_TOTAL=`jq -r .total_bad_sig_loss < test-audit-reserves.json`
-if test $LOSS != $LOSS_TOTAL
-then
- exit_fail "Expected loss $LOSS and total loss $LOSS_TOTAL do not match"
-fi
-if test $A_FRAC != 0
-then
- if [ $A_FRAC -lt 10 ]
+ run_audit
+
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-reserves.json)
+ if [ "$OP" != "withdraw" ]
then
- A_PREV="0"
- else
- A_PREV=""
+ exit_fail "Wrong operation, got $OP"
fi
- if test $LOSS != "TESTKUDOS:$A_VAL.$A_PREV$A_FRAC"
+
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-reserves.json)
+ LOSS_TOTAL=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "$LOSS_TOTAL" ]
then
- exit_fail "Expected loss TESTKUDOS:$A_VAL.$A_PREV$A_FRAC but got $LOSS"
+ exit_fail "Expected loss $LOSS and total loss $LOSS_TOTAL do not match"
fi
-else
- if test $LOSS != "TESTKUDOS:$A_VAL"
+ if [ "$A_FRAC" != 0 ]
then
- exit_fail "Expected loss TESTKUDOS:$A_VAL but got $LOSS"
+ if [ "$A_FRAC" -lt 10 ]
+ then
+ A_PREV="0"
+ else
+ A_PREV=""
+ fi
+ if [ "$LOSS" != "TESTKUDOS:$A_VAL.$A_PREV$A_FRAC" ]
+ then
+ exit_fail "Expected loss TESTKUDOS:$A_VAL.$A_PREV$A_FRAC but got $LOSS"
+ fi
+ else
+ if [ "$LOSS" != "TESTKUDOS:$A_VAL" ]
+ then
+ exit_fail "Expected loss TESTKUDOS:$A_VAL but got $LOSS"
+ fi
fi
-fi
-# Undo:
-echo "UPDATE reserves_out SET reserve_sig='$OLD_SIG' WHERE h_blind_ev='$HBE'" | psql -Aqt $DB
+ # Undo:
+ echo "UPDATE exchange.reserves_out SET reserve_sig='$OLD_SIG' WHERE h_blind_ev='$HBE'" | psql -Aqt "$DB"
}
@@ -651,475 +882,459 @@ echo "UPDATE reserves_out SET reserve_sig='$OLD_SIG' WHERE h_blind_ev='$HBE'" |
# Test wire transfer subject disagreement!
function test_8() {
-echo "===========8: wire-transfer-subject disagreement==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_WTID=`echo "SELECT subject FROM app_banktransaction WHERE id='$OLD_ID';" | psql $DB -Aqt`
-NEW_WTID="CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG"
-echo "UPDATE app_banktransaction SET subject='$NEW_WTID' WHERE id='$OLD_ID';" | psql -Aqt $DB
+ echo "===========8: wire-transfer-subject disagreement==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt) \
+ || exit_fail "Failed to SELECT FROM NexusBankTransactions nexus DB!"
+ OLD_WTID=$(echo "SELECT \"reservePublicKey\" FROM TalerIncomingPayments WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -Aqt)
+ NEW_WTID="CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG"
+ echo "UPDATE TalerIncomingPayments SET \"reservePublicKey\"='$NEW_WTID' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q \
+ || exit_fail "Failed to update TalerIncomingPayments"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-DIAG=`jq -r .reserve_in_amount_inconsistencies[0].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xwire subject does not match"
-then
- exit_fail "Diagnostic wrong: $DIAG (0)"
-fi
-WTID=`jq -r .reserve_in_amount_inconsistencies[0].reserve_pub < test-audit-wire.json`
-if test x$WTID != x"$OLD_WTID" -a x$WTID != x"$NEW_WTID"
-then
- exit_fail "WTID reported wrong: $WTID"
-fi
-EX_A=`jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json`
-if test x$WTID = x$OLD_WTID -a x$EX_A != x"TESTKUDOS:10"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
-if test x$WTID = x$NEW_WTID -a x$EX_A != x"TESTKUDOS:0"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
-DIAG=`jq -r .reserve_in_amount_inconsistencies[1].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xwire subject does not match"
-then
- exit_fail "Diagnostic wrong: $DIAG (1)"
-fi
-WTID=`jq -r .reserve_in_amount_inconsistencies[1].reserve_pub < test-audit-wire.json`
-if test $WTID != "$OLD_WTID" -a $WTID != "$NEW_WTID"
-then
- exit_fail "WTID reported wrong: $WTID (wanted: $NEW_WTID or $OLD_WTID)"
-fi
-EX_A=`jq -r .reserve_in_amount_inconsistencies[1].amount_exchange_expected < test-audit-wire.json`
-if test $WTID = "$OLD_WTID" -a $EX_A != "TESTKUDOS:10"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
-if test $WTID = "$NEW_WTID" -a $EX_A != "TESTKUDOS:0"
-then
- exit_fail "Amount reported wrong: $EX_A"
-fi
+ echo -n "Testing inconsistency detection... "
+ DIAG=$(jq -r .reserve_in_amount_inconsistencies[0].diagnostic < test-audit-wire.json)
+ if [ "x$DIAG" != "xwire subject does not match" ]
+ then
+ exit_fail "Diagnostic wrong: $DIAG (0)"
+ fi
+ WTID=$(jq -r .reserve_in_amount_inconsistencies[0].reserve_pub < test-audit-wire.json)
+ if [ "$WTID" != "$OLD_WTID" ] && [ "$WTID" != "$NEW_WTID" ]
+ then
+ exit_fail "WTID reported wrong: $WTID (wanted $OLD_WTID or $NEW_WTID)"
+ fi
+ EX_A=$(jq -r .reserve_in_amount_inconsistencies[0].amount_exchange_expected < test-audit-wire.json)
+ if [ "$WTID" = "$OLD_WTID" ] && [ "$EX_A" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
+ if [ "$WTID" = "$NEW_WTID" ] && [ "$EX_A" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
+ DIAG=$(jq -r .reserve_in_amount_inconsistencies[1].diagnostic < test-audit-wire.json)
+ if [ "$DIAG" != "wire subject does not match" ]
+ then
+ exit_fail "Diagnostic wrong: $DIAG (1)"
+ fi
+ WTID=$(jq -r .reserve_in_amount_inconsistencies[1].reserve_pub < test-audit-wire.json)
+ if [ "$WTID" != "$OLD_WTID" ] && [ "$WTID" != "$NEW_WTID" ]
+ then
+ exit_fail "WTID reported wrong: $WTID (wanted: $NEW_WTID or $OLD_WTID)"
+ fi
+ EX_A=$(jq -r .reserve_in_amount_inconsistencies[1].amount_exchange_expected < test-audit-wire.json)
+ if [ "$WTID" = "$OLD_WTID" ] && [ "$EX_A" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
+ if [ "$WTID" = "$NEW_WTID" ] && [ "$EX_A" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Amount reported wrong: $EX_A"
+ fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:10"
-then
- exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
-fi
-DELTA=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $DELTA != "TESTKUDOS:10"
-then
- exit_fail "Expected total wire delta plus wrong, got $DELTA"
-fi
-echo PASS
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Wrong total wire_in_delta_minus, got $WIRED"
+ fi
+ DELTA=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$DELTA" != "TESTKUDOS:10" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $DELTA"
+ fi
+ echo "PASS"
-# Undo database modification
-echo "UPDATE app_banktransaction SET subject='$OLD_WTID' WHERE id='$OLD_ID';" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE TalerIncomingPayments SET \"reservePublicKey\"='$OLD_WTID' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q
}
-
# Test wire origin disagreement!
function test_9() {
-echo "===========9: wire-origin disagreement==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_ACC=`echo "SELECT debit_account_id FROM app_banktransaction WHERE id='$OLD_ID';" | psql $DB -Aqt`
-echo "UPDATE app_banktransaction SET debit_account_id=1 WHERE id='$OLD_ID';" | psql -Aqt $DB
+ echo "===========9: wire-origin disagreement==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt)
+ OLD_ACC=$(echo 'SELECT "incomingPaytoUri" FROM TalerIncomingPayments WHERE payment='"'$OLD_ID';" | psql "${DB}" -Aqt)
+ echo "UPDATE TalerIncomingPayments SET \"incomingPaytoUri\"='payto://iban/SANDBOXX/DE144373?receiver-name=New+Exchange+Company' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .missattribution_in_inconsistencies[0].amount < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
-echo PASS
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .misattribution_in_inconsistencies[0].amount < test-audit-wire.json)
+ if test "x$AMOUNT" != "xTESTKUDOS:10"
+ then
+ exit_fail "Reported amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if test "x$AMOUNT" != "xTESTKUDOS:10"
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
+ echo PASS
-# Undo database modification
-echo "UPDATE app_banktransaction SET debit_account_id=$OLD_ACC WHERE id='$OLD_ID';" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE TalerIncomingPayments SET \"incomingPaytoUri\"='$OLD_ACC' WHERE payment='$OLD_ID';" \
+ | psql "${DB}" -q
}
# Test wire_in timestamp disagreement!
function test_10() {
+ NOW_MS=$(date +%s)000
+ echo "===========10: wire-timestamp disagreement==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt)
+ OLD_DATE=$(echo "SELECT \"timestampMs\" FROM TalerIncomingPayments WHERE payment='$OLD_ID';" | psql "${DB}" -Aqt)
+ echo "UPDATE TalerIncomingPayments SET \"timestampMs\"=$NOW_MS WHERE payment=$OLD_ID;" | psql "${DB}" -q
-echo "===========10: wire-timestamp disagreement==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_DATE=`echo "SELECT date FROM app_banktransaction WHERE id='$OLD_ID';" | psql $DB -Aqt`
-echo "UPDATE app_banktransaction SET date=NOW() WHERE id=$OLD_ID;" | psql -Aqt $DB
-
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-DIAG=`jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xexecution date mismatch"
-then
- exit_fail "Reported diagnostic wrong: $DIAG"
-fi
-TABLE=`jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json`
-if test "x$TABLE" != "xreserves_in"
-then
- exit_fail "Reported table wrong: $TABLE"
-fi
-echo PASS
+ echo -n "Testing inconsistency detection... "
+ DIAG=$(jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json)
+ if test "x$DIAG" != "xexecution date mismatch"
+ then
+ exit_fail "Reported diagnostic wrong: $DIAG"
+ fi
+ TABLE=$(jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json)
+ if test "x$TABLE" != "xreserves_in"
+ then
+ exit_fail "Reported table wrong: $TABLE"
+ fi
+ echo "PASS"
-# Undo database modification
-echo "UPDATE app_banktransaction SET date='$OLD_DATE' WHERE id=$OLD_ID;" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE TalerIncomingPayments SET \"timestampMs\"='$OLD_DATE' WHERE payment=$OLD_ID;" | psql "${DB}" -q
}
# Test for extra outgoing wire transfer.
+# In case of changing the subject in the Nexus
+# ingested table: '.batches[0].batchTransactions[0].details.unstructuredRemittanceInformation'
function test_11() {
+ echo "===========11: spurious outgoing transfer ==========="
+ # Technically, this call shouldn't be needed, as libeufin should already be stopped here.
+ stop_libeufin
+ echo "FIXME: test needs update to new libeufin-bank schema"
+ exit 0
+ OLD_ID=$(echo "SELECT id FROM NexusBankTransactions WHERE amount='10' AND currency='TESTKUDOS' ORDER BY id LIMIT 1;" | psql "${DB}" -Aqt)
+ OLD_TX=$(echo "SELECT \"transactionJson\" FROM NexusBankTransactions WHERE id='$OLD_ID';" | psql "${DB}" -Aqt)
+ # Change wire transfer to be FROM the exchange (#2) to elsewhere!
+ # (Note: this change also causes a missing incoming wire transfer, but
+ # this test is only concerned about the outgoing wire transfer
+ # being detected as such, and we simply ignore the other
+ # errors being reported.)
+ OTHER_IBAN=$(echo -e "SELECT iban FROM BankAccounts WHERE label='fortytwo'" | psql "${DB}" -Aqt)
+ NEW_TX=$(echo "$OLD_TX" | jq .batches[0].batchTransactions[0].details.creditDebitIndicator='"DBIT"' | jq 'del(.batches[0].batchTransactions[0].details.debtor)' | jq 'del(.batches[0].batchTransactions[0].details.debtorAccount)' | jq 'del(.batches[0].batchTransactions[0].details.debtorAgent)' | jq '.batches[0].batchTransactions[0].details.creditor'='{"name": "Forty Two"}' | jq .batches[0].batchTransactions[0].details.creditorAccount='{"iban": "'"$OTHER_IBAN"'"}' | jq .batches[0].batchTransactions[0].details.creditorAgent='{"bic": "SANDBOXX"}' | jq .batches[0].batchTransactions[0].details.unstructuredRemittanceInformation='"CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG http://exchange.example.com/"')
+ echo -e "UPDATE NexusBankTransactions SET \"transactionJson\"='""$NEW_TX""' WHERE id=$OLD_ID" \
+ | psql "${DB}" -q
+ # Now fake that the exchange prepared this payment (= it POSTed to /transfer)
+ # This step is necessary, because the TWG table that accounts for outgoing
+ # payments needs it. Worth noting here is the column 'rawConfirmation' that
+ # points to the transaction from the main Nexus ledger; without that column set,
+ # a prepared payment won't appear as actually outgoing.
+ echo -e "INSERT INTO PaymentInitiations (\"bankAccount\",\"preparationDate\",\"submissionDate\",sum,currency,\"endToEndId\",\"paymentInformationId\",\"instructionId\",subject,\"creditorIban\",\"creditorBic\",\"creditorName\",submitted,\"messageId\",\"rawConfirmation\") VALUES (1,1,1,10,'TESTKUDOS','NOTGIVEN','unused','unused','CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG http://exchange.example.com/','""$OTHER_IBAN""','SANDBOXX','Forty Two',false,1,$OLD_ID)" \
+ | psql "${DB}" -q
+ # Now populate the TWG table that accounts for outgoing payments, in
+ # order to let /history/outgoing return one result.
+ echo -e "INSERT INTO TalerRequestedPayments (facade,payment,\"requestUid\",amount,\"exchangeBaseUrl\",wtid,\"creditAccount\") VALUES (1,1,'unused','TESTKUDOS:10','http://exchange.example.com/','CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG','payto://iban/SANDBOXX/""$OTHER_IBAN""?receiver-name=Forty+Two')" \
+ | psql "${DB}" -q
-echo "===========11: spurious outgoing transfer ==========="
-OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE amount='TESTKUDOS:10' ORDER BY id LIMIT 1;" | psql $DB -Aqt`
-OLD_ACC=`echo "SELECT debit_account_id FROM app_banktransaction WHERE id=$OLD_ID;" | psql $DB -Aqt`
-OLD_SUBJECT=`echo "SELECT subject FROM app_banktransaction WHERE id=$OLD_ID;" | psql $DB -Aqt`
-# Change wire transfer to be FROM the exchange (#2) to elsewhere!
-# (Note: this change also causes a missing incoming wire transfer, but
-# this test is only concerned about the outgoing wire transfer
-# being detected as such, and we simply ignore the other
-# errors being reported.)
-echo -e "UPDATE app_banktransaction SET debit_account_id=2,credit_account_id=1,subject='CK9QBFY972KR32FVA1MW958JWACEB6XCMHHKVFMCH1A780Q12SVG http://exchange.example.com/' WHERE id=$OLD_ID;" | psql -Aqt $DB
-
-run_audit
-
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported wired amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:10"
-then
- exit_fail "Reported total plus amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:0"
-then
- exit_fail "Reported total minus amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json`
-if test "x$AMOUNT" != "xTESTKUDOS:0"
-then
- exit_fail "Reported justified amount wrong: $AMOUNT"
-fi
-DIAG=`jq -r .wire_out_amount_inconsistencies[0].diagnostic < test-audit-wire.json`
-if test "x$DIAG" != "xjustification for wire transfer not found"
-then
- exit_fail "Reported diagnostic wrong: $DIAG"
-fi
-echo PASS
+ run_audit
-# Undo database modification (exchange always has account #2)
-echo "UPDATE app_banktransaction SET debit_account_id=$OLD_ACC,credit_account_id=2,subject='$OLD_SUBJECT' WHERE id=$OLD_ID;" | psql -Aqt $DB
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:10" ]
+ then
+ exit_fail "Reported wired amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:10" ]
+ then
+ exit_fail "Reported total plus amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:0" ]
+ then
+ exit_fail "Reported total minus amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json)
+ if [ "x$AMOUNT" != "xTESTKUDOS:0" ]
+ then
+ exit_fail "Reported justified amount wrong: $AMOUNT"
+ fi
+ DIAG=$(jq -r .wire_out_amount_inconsistencies[0].diagnostic < test-audit-wire.json)
+ if [ "x$DIAG" != "xjustification for wire transfer not found" ]
+ then
+ exit_fail "Reported diagnostic wrong: $DIAG"
+ fi
+ echo "PASS"
+ full_reload
}
-
# Test for hanging/pending refresh.
function test_12() {
-echo "===========12: incomplete refresh ==========="
-OLD_ACC=`echo "DELETE FROM refresh_revealed_coins;" | psql $DB -Aqt`
+ echo "===========12: incomplete refresh ==========="
+ OLD_ACC=$(echo "DELETE FROM exchange.refresh_revealed_coins;" | psql "$DB" -Aqt)
-run_audit
-
-echo -n "Testing hung refresh detection... "
-
-HANG=`jq -er .refresh_hanging[0].amount < test-audit-coins.json`
-TOTAL_HANG=`jq -er .total_refresh_hanging < test-audit-coins.json`
-if test x$HANG = TESTKUDOS:0
-then
- exit_fail "Hanging amount zero"
-fi
-if test x$TOTAL_HANG = TESTKUDOS:0
-then
- exit_fail "Total hanging amount zero"
-fi
-
-echo PASS
+ run_audit
+ echo -n "Testing hung refresh detection... "
-# cannot easily undo DELETE, hence full reload
-full_reload
+ HANG=$(jq -er .refresh_hanging[0].amount < test-audit-coins.json)
+ TOTAL_HANG=$(jq -er .total_refresh_hanging < test-audit-coins.json)
+ if [ "$HANG" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Hanging amount zero"
+ fi
+ if [ "$TOTAL_HANG" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Total hanging amount zero"
+ fi
+ echo "PASS"
+ # cannot easily undo DELETE, hence full reload
+ full_reload
}
# Test for wrong signature on refresh.
function test_13() {
-echo "===========13: wrong melt signature ==========="
-# Modify denom_sig, so it is wrong
-COIN_ID=`echo "SELECT old_known_coin_id FROM refresh_commitments LIMIT 1;" | psql $DB -Aqt`
-OLD_SIG=`echo "SELECT old_coin_sig FROM refresh_commitments WHERE old_known_coin_id='$COIN_ID';" | psql $DB -Aqt`
-NEW_SIG="\xba588af7c13c477dca1ac458f65cc484db8fba53b969b873f4353ecbd815e6b4c03f42c0cb63a2b609c2d726e612fd8e0c084906a41f409b6a23a08a83c89a02"
-echo "UPDATE refresh_commitments SET old_coin_sig='$NEW_SIG' WHERE old_known_coin_id='$COIN_ID'" | psql -Aqt $DB
+ echo "===========13: wrong melt signature ==========="
+ # Modify denom_sig, so it is wrong
+ COIN_PUB=$(echo "SELECT old_coin_pub FROM exchange.refresh_commitments LIMIT 1;" | psql "$DB" -Aqt)
+ OLD_SIG=$(echo "SELECT old_coin_sig FROM exchange.refresh_commitments WHERE old_coin_pub='$COIN_PUB';" | psql "$DB" -Aqt)
+ NEW_SIG="\xba588af7c13c477dca1ac458f65cc484db8fba53b969b873f4353ecbd815e6b4c03f42c0cb63a2b609c2d726e612fd8e0c084906a41f409b6a23a08a83c89a02"
+ echo "UPDATE exchange.refresh_commitments SET old_coin_sig='$NEW_SIG' WHERE old_coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
+ echo -n "Testing inconsistency detection... "
-OP=`jq -er .bad_sig_losses[0].operation < test-audit-coins.json`
-if test x$OP != xmelt
-then
- exit_fail "Operation wrong, got $OP"
-fi
+ OP=$(jq -er .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "melt" ]
+ then
+ exit_fail "Operation wrong, got $OP"
+ fi
-LOSS=`jq -er .bad_sig_losses[0].loss < test-audit-coins.json`
-TOTAL_LOSS=`jq -er .total_bad_sig_loss < test-audit-coins.json`
-if test x$LOSS != x$TOTAL_LOSS
-then
- exit_fail "Loss inconsistent, got $LOSS and $TOTAL_LOSS"
-fi
-if test x$TOTAL_LOSS = TESTKUDOS:0
-then
- exit_fail "Loss zero"
-fi
+ LOSS=$(jq -er .bad_sig_losses[0].loss < test-audit-coins.json)
+ TOTAL_LOSS=$(jq -er .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "$TOTAL_LOSS" ]
+ then
+ exit_fail "Loss inconsistent, got $LOSS and $TOTAL_LOSS"
+ fi
+ if [ "$TOTAL_LOSS" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Loss zero"
+ fi
-echo PASS
+ echo "PASS"
-# cannot easily undo DELETE, hence full reload
-full_reload
+ # cannot easily undo DELETE, hence full reload
+ full_reload
}
# Test for wire fee disagreement
function test_14() {
-echo "===========14: wire-fee disagreement==========="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-wire-auditor.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========14: wire-fee disagreement==========="
# Wire fees are only checked/generated once there are
# actual outgoing wire transfers, so we need to run the
# aggregator here.
pre_audit aggregator
- echo "UPDATE wire_fee SET wire_fee_frac=100;" | psql -Aqt $DB
+ echo "UPDATE exchange.wire_fee SET wire_fee_frac=100;" \
+ | psql -Aqt "$DB"
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- TABLE=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
- if test "x$TABLE" != "xwire-fee"
+ TABLE=$(jq -r .row_inconsistencies[0].table < test-audit-aggregation.json)
+ if [ "$TABLE" != "wire-fee" ]
then
exit_fail "Reported table wrong: $TABLE"
fi
- DIAG=`jq -r .row_inconsistencies[0].diagnostic < test-audit-aggregation.json`
- if test "x$DIAG" != "xwire fee signature invalid at given time"
+ DIAG=$(jq -r .row_inconsistencies[0].diagnostic < test-audit-aggregation.json)
+ if [ "$DIAG" != "wire fee signature invalid at given time" ]
then
exit_fail "Reported diagnostic wrong: $DIAG"
fi
- echo PASS
+ echo "PASS"
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
-
}
-
-# Test where h_wire in the deposit table is wrong
+# Test where salt in the deposit table is wrong
function test_15() {
-echo "===========15: deposit wire hash wrong================="
-
-# Check wire transfer lag reported (no aggregator!)
+ echo "===========15: deposit wire salt wrong================="
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
-
- # Modify h_wire hash, so it is inconsistent with 'wire'
- echo "UPDATE deposits SET h_wire='\x973e52d193a357940be9ef2939c19b0575ee1101f52188c3c01d9005b7d755c397e92624f09cfa709104b3b65605fe5130c90d7e1b7ee30f8fc570f39c16b853' WHERE deposit_serial_id=1" | psql -Aqt $DB
+ # Modify wire_salt hash, so it is inconsistent
+ SALT=$(echo "SELECT wire_salt FROM exchange.deposits WHERE deposit_serial_id=1;" | psql -Aqt "$DB")
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET wire_salt='\x1197cd7f7b0e13ab1905fedb36c536a2' WHERE deposit_serial_id=1;" \
+ | psql -Aqt "$DB"
- # The auditor checks h_wire consistency only for
- # coins where the wire transfer has happened, hence
- # run aggregator first to get this test to work.
- run_audit aggregator
+ run_audit
echo -n "Testing inconsistency detection... "
- TABLE=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
- if test "x$TABLE" != "xaggregation" -a "x$TABLE" != "xdeposits"
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
then
- exit_fail "Reported table wrong: $TABLE"
+ exit_fail "Reported operation wrong: $OP"
fi
- echo PASS
+ echo "PASS"
- # cannot easily undo aggregator, hence full reload
- full_reload
+ # Restore DB
+ echo "UPDATE exchange.deposits SET wire_salt='$SALT' WHERE deposit_serial_id=1;" \
+ | psql -Aqt "$DB"
-else
- echo "Test skipped (database too new)"
-fi
}
# Test where wired amount (wire out) is wrong
function test_16() {
-echo "===========16: incorrect wire_out amount================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========16: incorrect wire_out amount================="
+
+ # Check wire transfer lag reported (no aggregator!)
# First, we need to run the aggregator so we even
# have a wire_out to modify.
pre_audit aggregator
- # Modify wire amount, such that it is inconsistent with 'aggregation'
- # (exchange account is #2, so the logic below should select the outgoing
- # wire transfer):
- OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE debit_account_id=2 ORDER BY id LIMIT 1;" | psql $DB -Aqt`
- OLD_AMOUNT=`echo "SELECT amount FROM app_banktransaction WHERE id='${OLD_ID}';" | psql $DB -Aqt`
+ stop_libeufin
+ OLD_AMOUNT=$(echo "SELECT amount FROM TalerRequestedPayments WHERE id='1';" | psql "${DB}" -Aqt)
NEW_AMOUNT="TESTKUDOS:50"
- echo "UPDATE app_banktransaction SET amount='${NEW_AMOUNT}' WHERE id='${OLD_ID}';" | psql -Aqt $DB
-
+ echo "UPDATE TalerRequestedPayments SET amount='${NEW_AMOUNT}' WHERE id='1';" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json`
- if test "x$AMOUNT" != "x$OLD_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json)
+ if [ "$AMOUNT" != "$OLD_AMOUNT" ]
then
exit_fail "Reported justified amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
- if test "x$AMOUNT" != "x$NEW_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$AMOUNT" != "$NEW_AMOUNT" ]
then
exit_fail "Reported wired amount wrong: $AMOUNT"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" != "xTESTKUDOS:0"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported total wired amount minus wrong: $TOTAL_AMOUNT"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" = "xTESTKUDOS:0"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" = "TESTKUDOS:0" ]
then
exit_fail "Reported total wired amount plus wrong: $TOTAL_AMOUNT"
fi
- echo PASS
+ echo "PASS"
+ stop_libeufin
echo "Second modification: wire nothing"
NEW_AMOUNT="TESTKUDOS:0"
- echo "UPDATE app_banktransaction SET amount='${NEW_AMOUNT}' WHERE id='${OLD_ID}';" | psql -Aqt $DB
-
+ echo "UPDATE TalerRequestedPayments SET amount='${NEW_AMOUNT}' WHERE id='1';" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
-
+ stop_libeufin
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json`
- if test "x$AMOUNT" != "x$OLD_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_justified < test-audit-wire.json)
+ if [ "$AMOUNT" != "$OLD_AMOUNT" ]
then
exit_fail "Reported justified amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json`
- if test "x$AMOUNT" != "x$NEW_AMOUNT"
+ AMOUNT=$(jq -r .wire_out_amount_inconsistencies[0].amount_wired < test-audit-wire.json)
+ if [ "$AMOUNT" != "$NEW_AMOUNT" ]
then
exit_fail "Reported wired amount wrong: $AMOUNT"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" != "x$OLD_AMOUNT"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" != "$OLD_AMOUNT" ]
then
exit_fail "Reported total wired amount minus wrong: $TOTAL_AMOUNT (wanted $OLD_AMOUNT)"
fi
- TOTAL_AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
- if test "x$TOTAL_AMOUNT" != "xTESTKUDOS:0"
+ TOTAL_AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$TOTAL_AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported total wired amount plus wrong: $TOTAL_AMOUNT"
fi
- echo PASS
+ echo "PASS"
post_audit
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
-
}
-
# Test where wire-out timestamp is wrong
function test_17() {
-echo "===========17: incorrect wire_out timestamp================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========17: incorrect wire_out timestamp================="
# First, we need to run the aggregator so we even
# have a wire_out to modify.
pre_audit aggregator
-
- # Modify wire amount, such that it is inconsistent with 'aggregation'
- # (exchange account is #2, so the logic below should select the outgoing
- # wire transfer):
- OLD_ID=`echo "SELECT id FROM app_banktransaction WHERE debit_account_id=2 ORDER BY id LIMIT 1;" | psql $DB -Aqt`
- OLD_DATE=`echo "SELECT date FROM app_banktransaction WHERE id='${OLD_ID}';" | psql $DB -Aqt`
+ stop_libeufin
+ OLD_ID=1
+ OLD_PREP=$(echo "SELECT payment FROM TalerRequestedPayments WHERE id='${OLD_ID}';" | psql "${DB}" -Aqt)
+ OLD_DATE=$(echo "SELECT \"preparationDate\" FROM PaymentInitiations WHERE id='${OLD_ID}';" | psql "${DB}" -Aqt)
# Note: need - interval '1h' as "NOW()" may otherwise be exactly what is already in the DB
# (due to rounding, if this machine is fast...)
- echo "UPDATE app_banktransaction SET date=NOW()- interval '1 hour' WHERE id='${OLD_ID}';" | psql -Aqt $DB
-
+ NOW_1HR=$(( $(date +%s) - 3600))
+ echo "UPDATE PaymentInitiations SET \"preparationDate\"='$NOW_1HR' WHERE id='${OLD_PREP}';" \
+ | psql "${DB}" -q
+ launch_libeufin
+ echo "DONE"
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- TABLE=`jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json`
- if test "x$TABLE" != "xwire_out"
+ TABLE=$(jq -r .row_minor_inconsistencies[0].table < test-audit-wire.json)
+ if [ "$TABLE" != "wire_out" ]
then
exit_fail "Reported table wrong: $TABLE"
fi
- DIAG=`jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json`
- DIAG=`echo "$DIAG" | awk '{print $1 " " $2 " " $3}'`
- if test "x$DIAG" != "xexecution date mismatch"
+ DIAG=$(jq -r .row_minor_inconsistencies[0].diagnostic < test-audit-wire.json)
+ DIAG=$(echo "$DIAG" | awk '{print $1 " " $2 " " $3}')
+ if [ "$DIAG" != "execution date mismatch" ]
then
exit_fail "Reported diagnostic wrong: $DIAG"
fi
- echo PASS
+ echo "PASS"
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
-
}
@@ -1127,64 +1342,67 @@ fi
# Test where we trigger an emergency.
function test_18() {
-echo "===========18: emergency================="
+ echo "===========18: emergency================="
-echo "DELETE FROM reserves_out;" | psql -Aqt $DB
+ echo "DELETE FROM exchange.reserves_out;" \
+ | psql -Aqt "$DB" -q
-run_audit
-
-echo -n "Testing emergency detection... "
-
-jq -e .reserve_balance_summary_wrong_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Reserve balance inconsistency not detected"
-
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null || exit_fail "Emergency not detected"
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null || exit_fail "Emergency by count not detected"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null || exit_fail "Escrow balance calculation impossibility not detected"
-
-echo PASS
-
-echo -n "Testing loss calculation... "
+ run_audit
-AMOUNT=`jq -r .emergencies_loss < test-audit-coins.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported amount wrong: $AMOUNT"
-fi
-AMOUNT=`jq -r .emergencies_loss_by_count < test-audit-coins.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported amount wrong: $AMOUNT"
-fi
+ echo -n "Testing emergency detection... "
+ jq -e .reserve_balance_summary_wrong_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ || exit_fail "Reserve balance inconsistency not detected"
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Emergency not detected"
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Emergency by count not detected"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Escrow balance calculation impossibility not detected"
+ echo "PASS"
-echo PASS
+ echo -n "Testing loss calculation... "
+ AMOUNT=$(jq -r .emergencies_loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported amount wrong: $AMOUNT"
+ fi
+ AMOUNT=$(jq -r .emergencies_loss_by_count < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported amount wrong: $AMOUNT"
+ fi
+ echo "PASS"
-# cannot easily undo broad DELETE operation, hence full reload
-full_reload
+ # cannot easily undo broad DELETE operation, hence full reload
+ full_reload
}
# Test where reserve closure was done properly
function test_19() {
-echo "===========19: reserve closure done properly ================="
-
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========19: reserve closure done properly ================="
- OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- RES_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_uuid='${RES_UUID}';" | psql $DB -Aqt`
+ OLD_TIME=$(echo "SELECT execution_date FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_VAL=$(echo "SELECT credit_val FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ RES_PUB=$(echo "SELECT reserve_pub FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_EXP=$(echo "SELECT expiration_date FROM exchange.reserves WHERE reserve_pub='${RES_PUB}';" | psql "$DB" -Aqt)
VAL_DELTA=1
- NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
- NEW_EXP=`expr $OLD_EXP - 3024000000000 || true` # 5 weeks
- NEW_CREDIT=`expr $OLD_VAL + $VAL_DELTA || true`
- echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
- echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
+ NEW_TIME=$(( OLD_TIME - 3024000000000)) # 5 weeks
+ NEW_EXP=$(( OLD_EXP - 3024000000000)) # 5 weeks
+ NEW_CREDIT=$(( OLD_VAL + VAL_DELTA))
+ echo "UPDATE exchange.reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
# Need to run with the aggregator so the reserve closure happens
run_audit aggregator
@@ -1202,89 +1420,90 @@ then
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
}
# Test where reserve closure was not done properly
function test_20() {
-echo "===========20: reserve closure missing ================="
-
-OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
-OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
-RES_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
-NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
-NEW_CREDIT=`expr $OLD_VAL + 100 || true`
-echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
-echo "UPDATE reserves SET current_balance_val=100+current_balance_val WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
-
-# This time, run without the aggregator so the reserve closure is skipped!
-run_audit
+ echo "===========20: reserve closure missing ================="
+
+ OLD_TIME=$(echo "SELECT execution_date FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_VAL=$(echo "SELECT credit_val FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ RES_PUB=$(echo "SELECT reserve_pub FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ NEW_TIME=$(( OLD_TIME - 3024000000000 )) # 5 weeks
+ NEW_CREDIT=$(( OLD_VAL + 100 ))
+ echo "UPDATE exchange.reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=100+current_balance_val WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
+
+ # This time, run without the aggregator so the reserve closure is skipped!
+ run_audit
-echo -n "Testing reserve closure missing detected... "
-jq -e .reserve_not_closed_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Reserve not closed inconsistency not detected"
-echo "PASS"
+ echo -n "Testing reserve closure missing detected... "
+ jq -e .reserve_not_closed_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ || exit_fail "Reserve not closed inconsistency not detected"
+ echo "PASS"
-AMOUNT=`jq -r .total_balance_reserve_not_closed < test-audit-reserves.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
+ AMOUNT=$(jq -r .total_balance_reserve_not_closed < test-audit-reserves.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
-# Undo
-echo "UPDATE reserves_in SET execution_date='${OLD_TIME}',credit_val=${OLD_VAL} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
-echo "UPDATE reserves SET current_balance_val=current_balance_val-100 WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
+ # Undo
+ echo "UPDATE exchange.reserves_in SET execution_date='${OLD_TIME}',credit_val=${OLD_VAL} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=current_balance_val-100 WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
}
# Test reserve closure reported but wire transfer missing detection
function test_21() {
-echo "===========21: reserve closure missreported ================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========21: reserve closure missreported ================="
- OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- RES_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
- OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_uuid='${RES_UUID}';" | psql $DB -Aqt`
+ OLD_TIME=$(echo "SELECT execution_date FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_VAL=$(echo "SELECT credit_val FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ RES_PUB=$(echo "SELECT reserve_pub FROM exchange.reserves_in WHERE reserve_in_serial_id=1;" | psql "$DB" -Aqt)
+ OLD_EXP=$(echo "SELECT expiration_date FROM exchange.reserves WHERE reserve_pub='${RES_PUB}';" | psql "$DB" -Aqt)
VAL_DELTA=1
- NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
- NEW_EXP=`expr $OLD_EXP - 3024000000000 || true` # 5 weeks
- NEW_CREDIT=`expr $OLD_VAL + $VAL_DELTA || true`
- echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
- echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
+ NEW_TIME=$(( OLD_TIME - 3024000000000 )) # 5 weeks
+ NEW_EXP=$(( OLD_EXP - 3024000000000 )) # 5 weeks
+ NEW_CREDIT=$(( OLD_VAL + VAL_DELTA ))
+ echo "UPDATE exchange.reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" \
+ | psql -Aqt "$DB"
+ echo "UPDATE exchange.reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" \
+ | psql -Aqt "$DB"
# Need to first run the aggregator so the transfer is marked as done exists
pre_audit aggregator
-
-
+ stop_libeufin
# remove transaction from bank DB
- echo "DELETE FROM app_banktransaction WHERE debit_account_id=2 AND amount='TESTKUDOS:${VAL_DELTA}';" | psql -Aqt $DB
-
+ # Currently emulating this (to be deleted):
+ echo "DELETE FROM TalerRequestedPayments WHERE amount='TESTKUDOS:${VAL_DELTA}'" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
post_audit
echo -n "Testing lack of reserve closure transaction detected... "
- jq -e .reserve_lag_details[0] < test-audit-wire.json > /dev/null || exit_fail "Reserve closure lag not detected"
+ jq -e .reserve_lag_details[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ || exit_fail "Reserve closure lag not detected"
- AMOUNT=`jq -r .reserve_lag_details[0].amount < test-audit-wire.json`
- if test "x$AMOUNT" != "xTESTKUDOS:${VAL_DELTA}"
+ AMOUNT=$(jq -r .reserve_lag_details[0].amount < test-audit-wire.json)
+ if [ "$AMOUNT" != "TESTKUDOS:${VAL_DELTA}" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .total_closure_amount_lag < test-audit-wire.json`
- if test "x$AMOUNT" != "xTESTKUDOS:${VAL_DELTA}"
+ AMOUNT=$(jq -r .total_closure_amount_lag < test-audit-wire.json)
+ if [ "$AMOUNT" != "TESTKUDOS:${VAL_DELTA}" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
@@ -1293,35 +1512,32 @@ then
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
}
# Test use of withdraw-expired denomination key
function test_22() {
-echo "===========22: denomination key expired ================="
+ echo "===========22: denomination key expired ================="
-S_DENOM=`echo 'SELECT denominations_serial FROM reserves_out LIMIT 1;' | psql $DB -Aqt`
+ S_DENOM=$(echo 'SELECT denominations_serial FROM exchange.reserves_out LIMIT 1;' | psql "$DB" -Aqt)
-OLD_START=`echo "SELECT valid_from FROM denominations WHERE denominations_serial='${S_DENOM}';" | psql $DB -Aqt`
-OLD_WEXP=`echo "SELECT expire_withdraw FROM denominations WHERE denominations_serial='${S_DENOM}';" | psql $DB -Aqt`
-# Basically expires 'immediately', so that the withdraw must have been 'invalid'
-NEW_WEXP=`expr $OLD_START + 1 || true`
+ OLD_START=$(echo "SELECT valid_from FROM exchange.denominations WHERE denominations_serial='${S_DENOM}';" | psql "$DB" -Aqt)
+ OLD_WEXP=$(echo "SELECT expire_withdraw FROM exchange.denominations WHERE denominations_serial='${S_DENOM}';" | psql "$DB" -Aqt)
+ # Basically expires 'immediately', so that the withdraw must have been 'invalid'
+ NEW_WEXP=$OLD_START
-echo "UPDATE denominations SET expire_withdraw=${NEW_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET expire_withdraw=${NEW_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Denomination key withdraw inconsistency not detected"
+ echo -n "Testing inconsistency detection... "
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Denomination key withdraw inconsistency for $S_DENOM not detected"
-echo PASS
+ echo "PASS"
-# Undo modification
-echo "UPDATE denominations SET expire_withdraw=${OLD_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt $DB
+ # Undo modification
+ echo "UPDATE exchange.denominations SET expire_withdraw=${OLD_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt "$DB"
}
@@ -1329,50 +1545,46 @@ echo "UPDATE denominations SET expire_withdraw=${OLD_WEXP} WHERE denominations_s
# Test calculation of wire-out amounts
function test_23() {
-echo "===========23: wire out calculations ================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========23: wire out calculations ================="
# Need to first run the aggregator so the transfer is marked as done exists
pre_audit aggregator
- OLD_AMOUNT=`echo "SELECT amount_frac FROM wire_out WHERE wireout_uuid=1;" | psql $DB -Aqt`
- NEW_AMOUNT=`expr $OLD_AMOUNT - 1000000 || true`
- echo "UPDATE wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt $DB
+ OLD_AMOUNT=$(echo "SELECT amount_frac FROM exchange.wire_out WHERE wireout_uuid=1;" | psql "$DB" -Aqt)
+ NEW_AMOUNT=$(( OLD_AMOUNT - 1000000 ))
+ echo "UPDATE exchange.wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" \
+ | psql -Aqt "$DB"
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null || exit_fail "Wire out inconsistency not detected"
+ jq -e .wire_out_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ || exit_fail "Wire out inconsistency not detected"
- ROW=`jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json`
- if test $ROW != 1
+ ROW=$(jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json)
+ if [ "$ROW" != 1 ]
then
exit_fail "Row wrong"
fi
- AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0.01"
+ AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0.01" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- echo PASS
+ echo "PASS"
echo "Second pass: changing how amount is wrong to other direction"
- NEW_AMOUNT=`expr $OLD_AMOUNT + 1000000 || true`
- echo "UPDATE wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt $DB
+ NEW_AMOUNT=$(( OLD_AMOUNT + 1000000 ))
+ echo "UPDATE exchange.wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt "$DB"
pre_audit
audit_only
@@ -1382,29 +1594,25 @@ then
jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null || exit_fail "Wire out inconsistency not detected"
- ROW=`jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json`
- if test $ROW != 1
+ ROW=$(jq .wire_out_inconsistencies[0].rowid < test-audit-aggregation.json)
+ if [ "$ROW" != 1 ]
then
exit_fail "Row wrong"
fi
- AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .total_wire_out_delta_minus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
then
exit_fail "Reported amount wrong: $AMOUNT"
fi
- AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit-aggregation.json`
- if test "x$AMOUNT" != "xTESTKUDOS:0.01"
+ AMOUNT=$(jq -r .total_wire_out_delta_plus < test-audit-aggregation.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0.01" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- echo PASS
-
+ echo "PASS"
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
}
@@ -1412,175 +1620,173 @@ fi
# Test for missing deposits in exchange database.
function test_24() {
-echo "===========24: deposits missing ==========="
-# Modify denom_sig, so it is wrong
-CNT=`echo "SELECT COUNT(*) FROM deposit_confirmations;" | psql -Aqt $DB`
-if test x$CNT = x0
-then
- echo "Skipping deposits missing test: no deposit confirmations in database!"
-else
- echo "DELETE FROM deposits;" | psql -Aqt $DB
- echo "DELETE FROM deposits WHERE deposit_serial_id=1;" | psql -Aqt $DB
+ echo "===========24: deposits missing ==========="
+ # Modify denom_sig, so it is wrong
+ CNT=$(echo "SELECT COUNT(*) FROM auditor.deposit_confirmations;" | psql -Aqt "$DB")
+ if [ "$CNT" = "0" ]
+ then
+ echo "Skipping deposits missing test: no deposit confirmations in database!"
+ else
+ echo "DELETE FROM exchange.deposits;" | psql -Aqt "$DB"
+ echo "DELETE FROM exchange.deposits WHERE deposit_serial_id=1;" \
+ | psql -Aqt "$DB"
- run_audit
+ run_audit
- echo -n "Testing inconsistency detection... "
+ echo -n "Testing inconsistency detection... "
- jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null || exit_fail "Deposit confirmation inconsistency NOT detected"
+ jq -e .deposit_confirmation_inconsistencies[0] \
+ < test-audit-deposits.json \
+ > /dev/null \
+ || exit_fail "Deposit confirmation inconsistency NOT detected"
- AMOUNT=`jq -er .missing_deposit_confirmation_total < test-audit-deposits.json`
- if test x$AMOUNT = xTESTKUDOS:0
- then
- exit_fail "Expected non-zero total missing deposit confirmation amount"
- fi
- COUNT=`jq -er .missing_deposit_confirmation_count < test-audit-deposits.json`
- if test x$AMOUNT = x0
- then
- exit_fail "Expected non-zero total missing deposit confirmation count"
- fi
+ AMOUNT=$(jq -er .missing_deposit_confirmation_total < test-audit-deposits.json)
+ if [ "$AMOUNT" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected non-zero total missing deposit confirmation amount"
+ fi
+ COUNT=$(jq -er .missing_deposit_confirmation_count < test-audit-deposits.json)
+ if [ "$AMOUNT" = "0" ]
+ then
+ exit_fail "Expected non-zero total missing deposit confirmation count"
+ fi
- echo PASS
+ echo "PASS"
- # cannot easily undo DELETE, hence full reload
- full_reload
-fi
+ # cannot easily undo DELETE, hence full reload
+ full_reload
+ fi
}
# Test for inconsistent coin history.
function test_25() {
-echo "=========25: inconsistent coin history========="
-
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "=========25: inconsistent coin history========="
# Drop refund, so coin history is bogus.
- echo "DELETE FROM refunds WHERE refund_serial_id=1;" | psql -Aqt $DB
+ echo "DELETE FROM exchange.refunds WHERE refund_serial_id=1;" \
+ | psql -At "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- jq -e .coin_inconsistencies[0] < test-audit-aggregation.json > /dev/null || exit_fail "Coin inconsistency NOT detected"
+ jq -e .coin_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ || exit_fail "Coin inconsistency NOT detected"
# Note: if the wallet withdrew much more than it spent, this might indeed
# go legitimately unnoticed.
- jq -e .emergencies[0] < test-audit-coins.json > /dev/null || exit_fail "Denomination value emergency NOT reported"
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Denomination value emergency NOT reported"
- AMOUNT=`jq -er .total_coin_delta_minus < test-audit-aggregation.json`
- if test x$AMOUNT = xTESTKUDOS:0
+ AMOUNT=$(jq -er .total_coin_delta_minus < test-audit-aggregation.json)
+ if [ "$AMOUNT" = "TESTKUDOS:0" ]
then
exit_fail "Expected non-zero total inconsistency amount from coins"
fi
# Note: if the wallet withdrew much more than it spent, this might indeed
# go legitimately unnoticed.
- COUNT=`jq -er .emergencies_risk_by_amount < test-audit-coins.json`
- if test x$AMOUNT = xTESTKUDOS:0
+ COUNT=$(jq -er .emergencies_risk_by_amount < test-audit-coins.json)
+ if [ "$COUNT" = "TESTKUDOS:0" ]
then
exit_fail "Expected non-zero emergency-by-amount"
fi
- echo PASS
+ echo "PASS"
# cannot easily undo DELETE, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
}
# Test for deposit wire target malformed
function test_26() {
-echo "===========26: deposit wire target malformed ================="
-# Expects 'payto_uri', not 'url' (also breaks signature, but we cannot even check that).
-SERIAL=`echo "SELECT deposit_serial_id FROM deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql $DB -Aqt`
-OLD_WIRE=`echo "SELECT wire FROM deposits WHERE deposit_serial_id=${SERIAL};" | psql $DB -Aqt`
-echo "UPDATE deposits SET wire='{\"url\":\"payto://x-taler-bank/localhost:8082/44\",\"salt\":\"test-salt\"}' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
-
-run_audit
+ echo "===========26: deposit wire target malformed ================="
+ # Expects 'payto_uri', not 'url' (also breaks signature, but we cannot even check that).
+ SERIAL=$(echo "SELECT deposit_serial_id FROM exchange.deposits WHERE amount_with_fee_val=3 AND amount_with_fee_frac=0 ORDER BY deposit_serial_id LIMIT 1" | psql "$DB" -Aqt)
+ OLD_WIRE_ID=$(echo "SELECT wire_target_h_payto FROM exchange.deposits WHERE deposit_serial_id=${SERIAL};" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "INSERT INTO exchange.wire_targets (payto_uri, wire_target_h_payto) VALUES ('payto://x-taler-bank/localhost/testuser-xxlargtp', '\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b');" \
+ | psql "$DB" -Aqt
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='\x1e8f31936b3cee8f8afd3aac9e38b5db42d45b721ffc4eb1e5b9ddaf1565660b' WHERE deposit_serial_id=${SERIAL}" \
+ | psql -Aqt "$DB"
-echo -n "Testing inconsistency detection... "
+ run_audit
-jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
+ echo -n "Testing inconsistency detection... "
-ROW=`jq -e .bad_sig_losses[0].row < test-audit-coins.json`
-if test $ROW != ${SERIAL}
-then
- exit_fail "Row wrong, got $ROW"
-fi
+ jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad signature not detected"
-LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong deposit bad signature loss, got $LOSS"
-fi
+ ROW=$(jq -e .bad_sig_losses[0].row < test-audit-coins.json)
+ if [ "$ROW" != "${SERIAL}" ]
+ then
+ exit_fail "Row wrong, got $ROW"
+ fi
-OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
-if test $OP != "deposit"
-then
- exit_fail "Wrong operation, got $OP"
-fi
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong deposit bad signature loss, got $LOSS"
+ fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:3"
-then
- exit_fail "Wrong total bad sig loss, got $LOSS"
-fi
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-coins.json)
+ if [ "$OP" != "deposit" ]
+ then
+ exit_fail "Wrong operation, got $OP"
+ fi
-echo PASS
-# Undo:
-echo "UPDATE deposits SET wire='$OLD_WIRE' WHERE deposit_serial_id=${SERIAL}" | psql -Aqt $DB
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Wrong total bad sig loss, got $LOSS"
+ fi
+ echo "PASS"
+ # Undo:
+ echo "UPDATE exchange.deposits SET wire_target_h_payto='$OLD_WIRE_ID' WHERE deposit_serial_id=${SERIAL}" \
+ | psql -Aqt "$DB"
}
# Test for duplicate wire transfer subject
function test_27() {
-echo "===========27: duplicate WTID detection ================="
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
+ echo "===========27: duplicate WTID detection ================="
pre_audit aggregator
-
+ stop_libeufin
# Obtain data to duplicate.
- ID=`echo "SELECT id FROM app_banktransaction WHERE debit_account_id=2 LIMIT 1" | psql $DB -Aqt`
- WTID=`echo "SELECT subject FROM app_banktransaction WHERE debit_account_id=2 LIMIT 1" | psql $DB -Aqt`
- UUID="992e8936-a64d-4845-87d7-021440330f8a"
- echo "INSERT INTO app_banktransaction (amount,subject,date,credit_account_id,debit_account_id,cancelled,request_uid) VALUES ('TESTKUDOS:1','$WTID',NOW(),12,2,'f','$UUID')" | psql -Aqt $DB
-
+ WTID=$(echo SELECT wtid FROM TalerRequestedPayments WHERE id=1 | psql "${DB}" -Aqt)
+ OTHER_IBAN=$(echo -e "SELECT iban FROM BankAccounts WHERE label='fortytwo'" | psql "${DB}" -Aqt)
+ # 'rawConfirmation' is set to 2 here, that doesn't
+ # point to any record. That's only needed to set a non null value.
+ echo -e "INSERT INTO PaymentInitiations (\"bankAccount\",\"preparationDate\",\"submissionDate\",sum,currency,\"endToEndId\",\"paymentInformationId\",\"instructionId\",subject,\"creditorIban\",\"creditorBic\",\"creditorName\",submitted,\"messageId\",\"rawConfirmation\") VALUES (1,$(date +%s),$(( $(date +%s) + 2)),10,'TESTKUDOS','NOTGIVEN','unused','unused','$WTID http://exchange.example.com/','$OTHER_IBAN','SANDBOXX','Forty Two',false,1,2)" \
+ | psql "${DB}" -q
+ echo -e "INSERT INTO TalerRequestedPayments (facade,payment,\"requestUid\",amount,\"exchangeBaseUrl\",wtid,\"creditAccount\") VALUES (1,2,'unused','TESTKUDOS:1','http://exchange.example.com/','$WTID','payto://iban/SANDBOXX/$OTHER_IBAN?receiver-name=Forty+Two')" \
+ | psql "${DB}" -q
+ launch_libeufin
audit_only
post_audit
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .wire_format_inconsistencies[0].amount < test-audit-wire.json`
- if test "${AMOUNT}" != "TESTKUDOS:1"
+ AMOUNT=$(jq -r .wire_format_inconsistencies[0].amount < test-audit-wire.json)
+ if [ "${AMOUNT}" != "TESTKUDOS:1" ]
then
exit_fail "Amount wrong, got ${AMOUNT}"
fi
- AMOUNT=`jq -r .total_wire_format_amount < test-audit-wire.json`
- if test "${AMOUNT}" != "TESTKUDOS:1"
+ AMOUNT=$(jq -r .total_wire_format_amount < test-audit-wire.json)
+ if [ "${AMOUNT}" != "TESTKUDOS:1" ]
then
exit_fail "Wrong total wire format amount, got $AMOUNT"
fi
# cannot easily undo aggregator, hence full reload
full_reload
-else
- echo "Test skipped (database too new)"
-fi
-
}
@@ -1589,47 +1795,37 @@ fi
# Test where denom_sig in known_coins table is wrong
# (=> bad signature) AND the coin is used in aggregation
function test_28() {
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
echo "===========28: known_coins signature wrong================="
# Modify denom_sig, so it is wrong
- OLD_SIG=`echo 'SELECT denom_sig FROM known_coins LIMIT 1;' | psql $DB -Aqt`
- COIN_PUB=`echo "SELECT coin_pub FROM known_coins WHERE denom_sig='$OLD_SIG';" | psql $DB -Aqt`
- echo "UPDATE known_coins SET denom_sig='\x287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ OLD_SIG=$(echo 'SELECT denom_sig FROM exchange.known_coins LIMIT 1;' | psql "$DB" -Aqt)
+ COIN_PUB=$(echo "SELECT coin_pub FROM exchange.known_coins WHERE denom_sig='$OLD_SIG';" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- ROW=`jq -e .bad_sig_losses[0].row < test-audit-aggregation.json`
- if test $ROW != "1"
- then
- exit_fail "Row wrong, got $ROW"
- fi
-
- LOSS=`jq -r .bad_sig_losses[0].loss < test-audit-aggregation.json`
- if test $LOSS == "TESTKUDOS:0"
+ LOSS=$(jq -r .bad_sig_losses[0].loss < test-audit-aggregation.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
then
exit_fail "Wrong deposit bad signature loss, got $LOSS"
fi
- OP=`jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json`
- if test $OP != "wire"
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json)
+ if [ "$OP" != "wire" ]
then
exit_fail "Wrong operation, got $OP"
fi
- TAB=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
- if test $TAB != "deposit"
+ TAB=$(jq -r .row_inconsistencies[0].table < test-audit-aggregation.json)
+ if [ "$TAB" != "deposit" ]
then
exit_fail "Wrong table for row inconsistency, got $TAB"
fi
- LOSS=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
- if test $LOSS == "TESTKUDOS:0"
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" == "TESTKUDOS:0" ]
then
exit_fail "Wrong total bad sig loss, got $LOSS"
fi
@@ -1637,10 +1833,6 @@ then
echo "OK"
# cannot easily undo aggregator, hence full reload
full_reload
-
-else
- echo "Test skipped (database too new)"
-fi
}
@@ -1648,27 +1840,27 @@ fi
# Test where fees known to the auditor differ from those
# accounted for by the exchange
function test_29() {
-echo "===========29: withdraw fee inconsistency ================="
+ echo "===========29: withdraw fee inconsistency ================="
-echo "UPDATE denominations SET fee_withdraw_frac=5000000 WHERE coin_val=1;" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET fee_withdraw_frac=5000000 WHERE coin_val=1;" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .total_balance_summary_delta_minus < test-audit-reserves.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .total_balance_summary_delta_minus < test-audit-reserves.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
-PROFIT=`jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json`
-if test "x$PROFIT" != "x-1"
-then
- exit_fail "Reported wrong profitability: $PROFIT"
-fi
-echo "OK"
-# Undo
-echo "UPDATE denominations SET fee_withdraw_frac=2000000 WHERE coin_val=1;" | psql -Aqt $DB
+ PROFIT=$(jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json)
+ if [ "$PROFIT" != "-1" ]
+ then
+ exit_fail "Reported wrong profitability: $PROFIT"
+ fi
+ echo "OK"
+ # Undo
+ echo "UPDATE exchange.denominations SET fee_withdraw_frac=2000000 WHERE coin_val=1;" | psql -Aqt "$DB"
}
@@ -1676,28 +1868,28 @@ echo "UPDATE denominations SET fee_withdraw_frac=2000000 WHERE coin_val=1;" | ps
# Test where fees known to the auditor differ from those
# accounted for by the exchange
function test_30() {
-echo "===========30: melt fee inconsistency ================="
+ echo "===========30: melt fee inconsistency ================="
-echo "UPDATE denominations SET fee_refresh_frac=5000000 WHERE coin_val=10;" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET fee_refresh_frac=5000000 WHERE coin_val=10;" | psql -Aqt "$DB"
-run_audit
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .bad_sig_losses[0].loss < test-audit-coins.json`
-if test "x$AMOUNT" == "xTESTKUDOS:0"
-then
- exit_fail "Reported total amount wrong: $AMOUNT"
-fi
+ run_audit
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .bad_sig_losses[0].loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Reported total amount wrong: $AMOUNT"
+ fi
-PROFIT=`jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json`
-if test "x$PROFIT" != "x-1"
-then
- exit_fail "Reported profitability wrong: $PROFIT"
-fi
+ PROFIT=$(jq -r .amount_arithmetic_inconsistencies[0].profitable < test-audit-coins.json)
+ if [ "$PROFIT" != "-1" ]
+ then
+ exit_fail "Reported profitability wrong: $PROFIT"
+ fi
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run"
-echo "OK"
-# Undo
-echo "UPDATE denominations SET fee_refresh_frac=3000000 WHERE coin_val=1;" | psql -Aqt $DB
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run"
+ echo "OK"
+ # Undo
+ echo "UPDATE exchange.denominations SET fee_refresh_frac=3000000 WHERE coin_val=10;" | psql -Aqt "$DB"
}
@@ -1706,39 +1898,27 @@ echo "UPDATE denominations SET fee_refresh_frac=3000000 WHERE coin_val=1;" | psq
# accounted for by the exchange
function test_31() {
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
-
echo "===========31: deposit fee inconsistency ================="
- echo "UPDATE denominations SET fee_deposit_frac=5000000 WHERE coin_val=8;" | psql -Aqt $DB
+ echo "UPDATE exchange.denominations SET fee_deposit_frac=5000000 WHERE coin_val=8;" | psql -Aqt "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .total_bad_sig_loss < test-audit-coins.json`
- if test "x$AMOUNT" == "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- OP=`jq -r --arg dep "deposit" '.bad_sig_losses[] | select(.operation == $dep) | .operation'< test-audit-coins.json | head -n1`
- if test "x$OP" != "xdeposit"
+ OP=$(jq -r --arg dep "deposit" '.bad_sig_losses[] | select(.operation == $dep) | .operation'< test-audit-coins.json | head -n1)
+ if [ "$OP" != "deposit" ]
then
exit_fail "Reported wrong operation: $OP"
fi
echo "OK"
# Undo
- echo "UPDATE denominations SET fee_deposit_frac=2000000 WHERE coin_val=8;" | psql -Aqt $DB
-
-else
- echo "Test skipped (database too new)"
-fi
-
+ echo "UPDATE exchange.denominations SET fee_deposit_frac=2000000 WHERE coin_val=8;" | psql -Aqt "$DB"
}
@@ -1748,30 +1928,25 @@ fi
# (=> bad signature)
function test_32() {
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
-
echo "===========32: known_coins signature wrong w. aggregation================="
# Modify denom_sig, so it is wrong
- OLD_SIG=`echo 'SELECT denom_sig FROM known_coins LIMIT 1;' | psql $DB -At`
- COIN_PUB=`echo "SELECT coin_pub FROM known_coins WHERE denom_sig='$OLD_SIG';" | psql $DB -At`
- echo "UPDATE known_coins SET denom_sig='\x287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" | psql -Aqt $DB
+ OLD_SIG=$(echo 'SELECT denom_sig FROM exchange.known_coins LIMIT 1;' | psql "$DB" -Aqt)
+ COIN_PUB=$(echo "SELECT coin_pub FROM exchange.known_coins WHERE denom_sig='$OLD_SIG';" | psql "$DB" -Aqt)
+# shellcheck disable=SC2028
+ echo "UPDATE exchange.known_coins SET denom_sig='\x0000000100000000287369672d76616c200a2028727361200a2020287320233542383731423743393036444643303442424430453039353246413642464132463537303139374131313437353746324632323332394644443146324643333445393939413336363430334233413133324444464239413833353833464536354442374335434445304441453035374438363336434541423834463843323843344446304144363030343430413038353435363039373833434431333239393736423642433437313041324632414132414435413833303432434346314139464635394244434346374436323238344143354544364131373739463430353032323241373838423837363535453434423145443831364244353638303232413123290a2020290a20290b' WHERE coin_pub='$COIN_PUB'" \
+ | psql -Aqt "$DB"
run_audit aggregator
echo -n "Testing inconsistency detection... "
- AMOUNT=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
- if test "x$AMOUNT" == "xTESTKUDOS:0"
+ AMOUNT=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
then
exit_fail "Reported total amount wrong: $AMOUNT"
fi
- OP=`jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json`
- if test "x$OP" != "xwire"
+ OP=$(jq -r .bad_sig_losses[0].operation < test-audit-aggregation.json)
+ if [ "$OP" != "wire" ]
then
exit_fail "Reported wrong operation: $OP"
fi
@@ -1779,32 +1954,166 @@ then
echo "OK"
# Cannot undo aggregation, do full reload
full_reload
-
-fi
}
+function test_33() {
+
+ echo "===========33: normal run with aggregator and profit drain==========="
+ run_audit aggregator drain
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo PASS
+
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
+
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ echo PASS
+
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
+
+ DRAINED=$(jq -r .total_drained < test-audit-wire.json)
+ if [ "$DRAINED" != "TESTKUDOS:0.1" ]
+ then
+ exit_fail "Wrong amount drained, got unexpected drain of $DRAINED"
+ fi
+
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
+
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
+
+ # cannot easily undo aggregator, hence full reload
+ full_reload
+
+}
+
+
# *************** Main test loop starts here **************
# Run all the tests against the database given in $1.
# Sets $fail to 0 on success, non-zero on failure.
-check_with_database()
+function check_with_database()
{
- BASEDB=$1
+ BASEDB="$1"
+ CONF="$1.conf"
echo "Running test suite with database $BASEDB using configuration $CONF"
-
- # Setup database-specific globals
- MASTER_PUB=`cat ${BASEDB}.mpub`
-
- # Determine database age
- echo "Calculating database age based on ${BASEDB}.age"
- AGE=`cat ${BASEDB}.age`
- NOW=`date +%s`
- # NOTE: expr "fails" if the result is zero.
- DATABASE_AGE=`expr ${NOW} - ${AGE} || true`
- echo "Database age is ${DATABASE_AGE} seconds"
+ MASTER_PRIV_FILE="${BASEDB}.mpriv"
+ taler-config \
+ -f \
+ -c "${CONF}" \
+ -s exchange-offline \
+ -o MASTER_PRIV_FILE \
+ -V "${MASTER_PRIV_FILE}"
# Load database
full_reload
@@ -1813,7 +2122,7 @@ check_with_database()
fail=0
for i in $TESTS
do
- test_$i
+ "test_$i"
if test 0 != $fail
then
break
@@ -1826,60 +2135,121 @@ check_with_database()
-
-
# *************** Main logic starts here **************
# ####### Setup globals ######
-# Postgres database to use
-DB=taler-auditor-test
-
-# Configuration file to use
-CONF=test-auditor.conf
+# Postgres database to use (must match configuration file)
+export DB="auditor-basedb"
# test required commands exist
echo "Testing for jq"
jq -h > /dev/null || exit_skip "jq required"
-echo "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip "taler-bank-manage required"
+echo "Testing for faketime"
+faketime -h > /dev/null || exit_skip "faketime required"
+# NOTE: really check for all three libeufin commands?
+echo "Testing for libeufin"
+libeufin-bank --help >/dev/null 2> /dev/null </dev/null || exit_skip "libeufin required"
echo "Testing for pdflatex"
which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null || exit_skip "taler-wallet-cli required"
-# check if we should regenerate the database
-if test -n "${1:-}"
-then
- echo "Custom run, will only run on existing DB."
+
+echo -n "Testing for Postgres"
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo " FOUND (in path) at $INITDB_BIN"
else
- echo -n "Testing for taler-wallet-cli"
- if taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null
+ HAVE_INITDB=$(find /usr -name "initdb" 2> /dev/null \
+ | head -1 2> /dev/null \
+ | grep postgres) \
+ || exit_skip " MISSING"
+ echo " FOUND at $(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+
+MY_TMP_DIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+echo "Using $MY_TMP_DIR for logging and temporary data"
+TMPDIR="$MY_TMP_DIR/postgres"
+mkdir -p "$TMPDIR"
+echo -n "Setting up Postgres DB at $TMPDIR ..."
+$INITDB_BIN \
+ --no-sync \
+ --auth=trust \
+ -D "${TMPDIR}" \
+ > "${MY_TMP_DIR}/postgres-dbinit.log" \
+ 2> "${MY_TMP_DIR}/postgres-dbinit.err"
+echo "DONE"
+
+# Once we move to PG16, we can use:
+# --set listen_addresses='' \
+# --set fsync=off \
+# --set max_wal_senders=0 \
+# --set synchronous_commit=off \
+# --set wal_level=minimal \
+# --set unix_socket_directories="${TMPDIR}/sockets" \
+
+
+SOCKETDIR="${TMPDIR}/sockets"
+mkdir "${SOCKETDIR}"
+
+echo -n "Launching Postgres service"
+
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l "${MY_TMP_DIR}/postgres.log" \
+ start \
+ > "${MY_TMP_DIR}/postgres-start.log" \
+ 2> "${MY_TMP_DIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+MYDIR="${MY_TMP_DIR}/basedb"
+mkdir -p "${MYDIR}"
+
+if [ -z $REUSE_BASEDB_DIR ]
+then
+ echo "Generating fresh database at $MYDIR"
+
+ if faketime -f '-1 d' ./generate-auditor-basedb.sh -d "$MYDIR/$DB"
then
- MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX`
- echo " FOUND. Generating fresh database at $MYDIR"
- if ./generate-auditor-basedb.sh $MYDIR/basedb
- then
- check_with_database $MYDIR/basedb
- if test x$fail != x0
- then
- exit $fail
- else
- echo "Cleaning up $MYDIR..."
- rm -rf $MYDIR || echo "Removing $MYDIR failed"
- fi
- else
- echo "Generation failed, running only on existing DB"
- fi
+ echo -n "Reset 'auditor-basedb' database at $PGHOST ..."
+ dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+ createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB' at $PGHOST"
+ echo " DONE"
else
- echo " NOT FOUND, running only on existing DB"
+ echo "Generation failed"
+ exit 1
fi
+else
+ echo "Reusing existing database from ${REUSE_BASEDB_DIR}"
+ cp -r "${REUSE_BASEDB_DIR}/basedb"/* "${MYDIR}/"
fi
-# run tests with pre-build database, if one is available
-if test -r auditor-basedb.mpub
+check_with_database "$MYDIR/$DB"
+if [ "$fail" != "0" ]
then
- check_with_database "auditor-basedb"
-else
- echo "Lacking auditor-basedb.mpub, skipping test"
- fail=77
+ exit "$fail"
+fi
+
+if [ -z $REUSE_BASEDB_DIR ]
+then
+ echo "Run 'export REUSE_BASEDB_DIR=${MY_TMP_DIR}' to re-run tests against the same database"
fi
-exit $fail
+exit 0
diff --git a/src/auditor/test-kyc.sh b/src/auditor/test-kyc.sh
new file mode 100755
index 000000000..2c4fa6594
--- /dev/null
+++ b/src/auditor/test-kyc.sh
@@ -0,0 +1,751 @@
+#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2023 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
+#
+# shellcheck disable=SC2317
+# shellcheck disable=SC1091
+#
+#
+# Setup database which was generated from a perfectly normal
+# exchange-wallet interaction with KYC enabled and transactions
+# blocked due to KYC and run the auditor against it.
+#
+# Check that the auditor report is as expected.
+#
+# Requires 'jq' tool and Postgres superuser rights!
+#
+set -eu
+#set -x
+
+# Set of numbers for all the testcases.
+# When adding new tests, increase the last number:
+ALL_TESTS=$(seq 0 1)
+
+# $TESTS determines which tests we should run.
+# This construction is used to make it easy to
+# only run a subset of the tests. To only run a subset,
+# pass the numbers of the tests to run as the FIRST
+# argument to test-kyc.sh, i.e.:
+#
+# $ test-kyc.sh "1 3"
+#
+# to run tests 1 and 3 only. By default, all tests are run.
+#
+TESTS=${1:-$ALL_TESTS}
+
+# Global variable to run the auditor processes under valgrind
+# VALGRIND=valgrind
+VALGRIND=""
+
+# Number of seconds to let libeuifn background
+# tasks apply a cycle of payment submission and
+# history request.
+LIBEUFIN_SETTLE_TIME=1
+
+. setup.sh
+
+
+# Cleanup exchange and libeufin between runs.
+function cleanup()
+{
+ if test ! -z "${EPID:-}"
+ then
+ echo -n "Stopping exchange $EPID..."
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ echo "DONE"
+ unset EPID
+ fi
+ stop_libeufin
+}
+
+# Cleanup to run whenever we exit
+function exit_cleanup()
+{
+ echo "Running exit-cleanup"
+ if test ! -z "${POSTGRES_PATH:-}"
+ then
+ echo "Stopping Postgres at ${POSTGRES_PATH}"
+ "${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ stop \
+ &> /dev/null \
+ || true
+ fi
+ cleanup
+ for n in $(jobs -p)
+ do
+ kill "$n" 2> /dev/null || true
+ done
+ wait || true
+ echo "DONE"
+}
+
+# Install cleanup handler (except for kill -9)
+trap exit_cleanup EXIT
+
+
+
+# Operations to run before the actual audit
+function pre_audit () {
+ # Launch bank
+ echo -n "Launching bank"
+ launch_libeufin
+ for n in $(seq 1 80)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=1
+ wget http://localhost:18082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ && break
+ OK=0
+ done
+ if [ 1 != "$OK" ]
+ then
+ exit_skip "Failed to launch Sandbox"
+ fi
+ sleep "$LIBEUFIN_SETTLE_TIME"
+ for n in $(seq 1 80)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=1
+ wget http://localhost:8082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ && break
+ OK=0
+ done
+ if [ 1 != "$OK" ]
+ then
+ exit_skip "Failed to launch Nexus"
+ fi
+ echo " DONE"
+ if test "${1:-no}" = "aggregator"
+ then
+ echo -n "Running exchange aggregator ..."
+ taler-exchange-aggregator \
+ -y \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/aggregator.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ echo -n "Running exchange closer ..."
+ taler-exchange-closer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/closer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ echo -n "Running exchange transfer ..."
+ taler-exchange-transfer \
+ -L "INFO" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/transfer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+ fi
+}
+
+# actual audit run
+function audit_only () {
+ # Run the auditor!
+ echo -n "Running audit(s) ..."
+
+ # Restart so that first run is always fresh, and second one is incremental
+ taler-auditor-dbinit \
+ -r \
+ -c "$CONF"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation.json \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation.log" \
+ || exit_fail "aggregation audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-aggregation-inc.log" \
+ || exit_fail "incremental aggregation audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins.json \
+ 2> "${MY_TMP_DIR}/test-audit-coins.log" \
+ || exit_fail "coin audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-coins \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-coins-inc.log" \
+ || exit_fail "incremental coin audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits.json \
+ 2> "${MY_TMP_DIR}/test-audit-deposits.log" \
+ || exit_fail "deposits audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-deposits \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-deposits-inc.log" \
+ || exit_fail "incremental deposits audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves.json \
+ 2> "${MY_TMP_DIR}/test-audit-reserves.log" \
+ || exit_fail "reserves audit failed"
+ echo -n "."
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves-inc.json \
+ 2> "${MY_TMP_DIR}/test-audit-reserves-inc.log" \
+ || exit_fail "incremental reserves audit failed"
+ echo -n "."
+ rm -f "${MY_TMP_DIR}/test-wire-audit.log"
+ thaw() {
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire.json \
+ 2>> "${MY_TMP_DIR}/test-wire-audit.log"
+ }
+ thaw || ( echo -e " FIRST CALL TO taler-helper-auditor-wire FAILED,\nRETRY AFTER TWO SECONDS..." | tee -a "${MY_TMP_DIR}/test-wire-audit.log"
+ sleep 2
+ thaw || exit_fail "wire audit failed" )
+ echo -n "."
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L DEBUG \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire-inc.json \
+ 2> "${MY_TMP_DIR}/test-wire-audit-inc.log" \
+ || exit_fail "wire audit inc failed"
+ echo -n "."
+
+ echo " DONE"
+}
+
+
+# Cleanup to run after the auditor
+function post_audit () {
+ taler-exchange-dbinit \
+ -c "$CONF" \
+ -g \
+ || exit_fail "exchange DB GC failed"
+
+ cleanup
+ echo -n "TeXing ."
+ taler-helper-auditor-render.py \
+ test-audit-aggregation.json \
+ test-audit-coins.json \
+ test-audit-deposits.json \
+ test-audit-reserves.json \
+ test-audit-wire.json \
+ < ../../contrib/auditor-report.tex.j2 \
+ > test-report.tex \
+ || exit_fail "Renderer failed"
+
+ echo -n "."
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null \
+ || exit_fail "pdflatex failed"
+ echo -n "."
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null
+ echo " DONE"
+}
+
+
+# Run audit process on current database, including report
+# generation. Pass "aggregator" as $1 to run
+# $ taler-exchange-aggregator
+# before auditor (to trigger pending wire transfers).
+# Pass "drain" as $2 to run a drain operation as well.
+function run_audit () {
+ pre_audit "${1:-no}"
+ if test "${2:-no}" = "drain"
+ then
+ echo -n "Starting exchange..."
+ taler-exchange-httpd \
+ -c "${CONF}" \
+ -L INFO \
+ 2> "${MY_TMP_DIR}/exchange-httpd-drain.err" &
+ EPID=$!
+
+ # Wait for all services to be available
+ for n in $(seq 1 50)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # exchange
+ wget "http://localhost:8081/seed" \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null \
+ || continue
+ OK=1
+ break
+ done
+ echo "... DONE."
+ export CONF
+
+ echo -n "Running taler-exchange-offline drain "
+
+ taler-exchange-offline \
+ -L DEBUG \
+ -c "${CONF}" \
+ drain TESTKUDOS:0.1 \
+ exchange-account-1 payto://iban/SANDBOXX/DE360679?receiver-name=Exchange+Drain \
+ upload \
+ 2> "${MY_TMP_DIR}/taler-exchange-offline-drain.log" \
+ || exit_fail "offline draining failed"
+ kill -TERM "$EPID"
+ wait "$EPID" || true
+ unset EPID
+ echo -n "Running taler-exchange-drain ..."
+ printf "\n" | taler-exchange-drain \
+ -L DEBUG \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/taler-exchange-drain.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+
+ echo -n "Running taler-exchange-transfer ..."
+ taler-exchange-transfer \
+ -L INFO \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/drain-transfer.log" \
+ || exit_fail "FAIL"
+ echo " DONE"
+
+ audit_only
+ post_audit
+}
+
+
+# Do a full reload of the (original) database
+function full_reload()
+{
+ echo -n "Doing full reload of the database (loading ${BASEDB}.sql into $DB at $PGHOST)... "
+ dropdb "$DB" 2> /dev/null || true
+ createdb -T template0 "$DB" \
+ || exit_skip "could not create database $DB (at $PGHOST)"
+ # Import pre-generated database, -q(ietly) using single (-1) transaction
+ psql -Aqt "$DB" \
+ -q \
+ -1 \
+ -f "${BASEDB}.sql" \
+ > /dev/null \
+ || exit_skip "Failed to load database $DB from ${BASEDB}.sql"
+ echo "DONE"
+ # Technically, this call shouldn't be needed as libeufin should already be stopped here...
+ stop_libeufin
+}
+
+
+function test_0() {
+
+ echo "===========0: normal run with aggregator==========="
+ run_audit aggregator
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo PASS
+
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
+
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ echo "PASS"
+
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
+
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
+
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
+
+ # cannot easily undo aggregator, hence full reload
+ full_reload
+
+}
+
+
+# Run without aggregator, hence auditor should detect wire
+# transfer lag!
+function test_1() {
+
+ echo "===========1: normal run==========="
+ run_audit
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency detected in ordinary run";
+ echo "PASS"
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency by count detected in ordinary run"
+ echo "PASS"
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo "PASS"
+
+ echo -n "Check for lag detection... "
+
+ # Check wire transfer lag reported (no aggregator!)
+ # NOTE: This test is EXPECTED to fail for ~1h after
+ # re-generating the test database as we do not
+ # report lag of less than 1h (see GRACE_PERIOD in
+ # taler-helper-auditor-wire.c)
+ jq -e .lag_details[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ || exit_fail "Lag not detected in run without aggregator"
+
+ LAG=$(jq -r .total_amount_lag < test-audit-wire.json)
+ if [ "$LAG" = "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total lag to be non-zero"
+ fi
+ echo "PASS"
+
+
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ # Database was unmodified, no need to undo
+ echo "OK"
+}
+
+
+
+# *************** Main test loop starts here **************
+
+
+# Run all the tests against the database given in $1.
+# Sets $fail to 0 on success, non-zero on failure.
+function check_with_database()
+{
+ BASEDB="$1"
+ CONF="$1.conf"
+ echo "Running test suite with database $BASEDB using configuration $CONF"
+ MASTER_PRIV_FILE="${BASEDB}.mpriv"
+ taler-config \
+ -f \
+ -c "${CONF}" \
+ -s exchange-offline \
+ -o MASTER_PRIV_FILE \
+ -V "${MASTER_PRIV_FILE}"
+ MASTER_PUB=$(gnunet-ecc -p "$MASTER_PRIV_FILE")
+
+ echo "MASTER PUB is ${MASTER_PUB} using file ${MASTER_PRIV_FILE}"
+
+ # Load database
+ full_reload
+
+ # Run test suite
+ fail=0
+ for i in $TESTS
+ do
+ "test_$i"
+ if test 0 != $fail
+ then
+ break
+ fi
+ done
+ echo "Cleanup (disabled, leaving database $DB behind)"
+ # dropdb $DB
+}
+
+
+
+
+# *************** Main logic starts here **************
+
+# ####### Setup globals ######
+# Postgres database to use (must match configuration file)
+export DB="auditor-basedb"
+
+# test required commands exist
+echo "Testing for jq"
+jq -h > /dev/null || exit_skip "jq required"
+echo "Testing for faketime"
+faketime -h > /dev/null || exit_skip "faketime required"
+# NOTE: really check for all three libeufin commands?
+echo "Testing for libeufin-bank"
+libeufin-bank --help >/dev/null 2> /dev/null </dev/null || exit_skip "libeufin-bank required"
+echo "Testing for pdflatex"
+which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null || exit_skip "taler-wallet-cli required"
+
+
+echo -n "Testing for Postgres"
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo " FOUND (in path) at $INITDB_BIN"
+else
+ HAVE_INITDB=$(find /usr -name "initdb" | head -1 2> /dev/null | grep postgres) \
+ || exit_skip " MISSING"
+ echo " FOUND at $(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+
+MY_TMP_DIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+echo "Using $MY_TMP_DIR for logging and temporary data"
+TMPDIR="$MY_TMP_DIR/postgres"
+mkdir -p "$TMPDIR"
+echo -n "Setting up Postgres DB at $TMPDIR ..."
+$INITDB_BIN \
+ --no-sync \
+ --auth=trust \
+ -D "${TMPDIR}" \
+ > "${MY_TMP_DIR}/postgres-dbinit.log" \
+ 2> "${MY_TMP_DIR}/postgres-dbinit.err"
+echo "DONE"
+SOCKETDIR="${TMPDIR}/sockets"
+mkdir "${SOCKETDIR}"
+echo -n "Launching Postgres service"
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ start \
+ > "${MY_TMP_DIR}/postgres-start.log" \
+ 2> "${MY_TMP_DIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+
+MYDIR="${MY_TMP_DIR}/basedb"
+mkdir -p "${MYDIR}"
+echo "Generating fresh database at $MYDIR"
+if faketime -f '-1 d' ./generate-auditor-basedb.sh \
+ -c generate-kyc-basedb.conf \
+ -d "$MYDIR/$DB"
+then
+ echo -n "Reset 'auditor-basedb' database at $PGHOST ..."
+ dropdb "auditor-basedb" >/dev/null 2>/dev/null || true
+ createdb "auditor-basedb" || exit_skip "Could not create database '$BASEDB' at $PGHOST"
+ echo " DONE"
+ check_with_database "$MYDIR/$DB"
+ if [ "$fail" != "0" ]
+ then
+ exit "$fail"
+ fi
+else
+ echo "Generation failed"
+ exit 1
+fi
+
+exit 0
diff --git a/src/auditor/test-revocation.sh b/src/auditor/test-revocation.sh
index ad62b518e..277b102fb 100755
--- a/src/auditor/test-revocation.sh
+++ b/src/auditor/test-revocation.sh
@@ -1,15 +1,33 @@
#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2022 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
# Setup database which was generated from a exchange-wallet interaction
# with revocations and run the auditor against it.
#
# Check that the auditor report is as expected.
#
+# shellcheck disable=SC2317
+#
# Requires 'jq' tool and Postgres superuser rights!
set -eu
+# set -x
# Set of numbers for all the testcases.
# When adding new tests, increase the last number:
-ALL_TESTS=`seq 0 4`
+ALL_TESTS=$(seq 0 4)
# $TESTS determines which tests we should run.
# This construction is used to make it easy to
@@ -26,62 +44,114 @@ TESTS=${1:-$ALL_TESTS}
# Global variable to run the auditor processes under valgrind
# VALGRIND=valgrind
VALGRIND=""
+LOGLEVEL="INFO"
-# Exit, with status code "skip" (no 'real' failure)
-function exit_skip() {
- echo $1
- exit 77
-}
+. setup.sh
-# Exit, with error message (hard failure)
-function exit_fail() {
- echo $1
- exit 1
+# Cleanup to run whenever we exit
+function cleanup()
+{
+ if [ ! -z "${EPID:-}" ]
+ then
+ echo -n "Stopping exchange $EPID..."
+ kill -TERM "$EPID"
+ wait "$EPID"
+ echo " DONE"
+ unset EPID
+ fi
+ stop_libeufin
}
# Cleanup to run whenever we exit
-function cleanup()
+function exit_cleanup()
{
- for n in `jobs -p`
+ echo "Running exit-cleanup"
+ if [ ! -z "${POSTGRES_PATH:-}" ]
+ then
+ echo "Stopping Postgres at ${POSTGRES_PATH}"
+ "${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ stop \
+ &> /dev/null \
+ || true
+ fi
+ cleanup
+ for n in $(jobs -p)
do
- kill $n 2> /dev/null || true
+ kill "$n" 2> /dev/null || true
done
wait
+ echo "DONE"
}
# Install cleanup handler (except for kill -9)
-trap cleanup EXIT
+trap exit_cleanup EXIT
# Operations to run before the actual audit
function pre_audit () {
# Launch bank
echo -n "Launching bank "
- taler-bank-manage-testing $CONF postgres:///$DB serve 2>bank.err >bank.log &
- for n in `seq 1 80`
+ launch_libeufin
+ for n in $(seq 1 80)
do
echo -n "."
sleep 0.1
OK=1
- wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null && break
+ wget http://localhost:18082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null && break
OK=0
done
- if [ 1 != $OK ]
+ if [ 1 != "$OK" ]
then
- exit_skip "Failed to launch bank"
+ exit_skip "Failed to launch Sandbox"
+ fi
+ for n in $(seq 1 80)
+ do
+ echo -n "."
+ sleep 0.1
+ OK=1
+ wget http://localhost:8082/ \
+ -o /dev/null \
+ -O /dev/null \
+ >/dev/null && break
+ OK=0
+ done
+ if [ 1 != "$OK" ]
+ then
+ exit_skip "Failed to launch Nexus"
fi
echo " DONE"
-
- if test ${1:-no} = "aggregator"
+ if [ "${1:-no}" = "aggregator" ]
then
- echo -n "Running exchange aggregator ..."
- taler-exchange-aggregator -L INFO -t -c $CONF 2> aggregator.log || exit_fail "FAIL"
+ export CONF
+ echo -n "Running exchange aggregator ... (config: $CONF)"
+ taler-exchange-aggregator \
+ -L "$LOGLEVEL" \
+ -t \
+ -c "$CONF" \
+ -y \
+ 2> "${MY_TMP_DIR}/aggregator.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange closer ..."
- taler-exchange-closer -L INFO -t -c $CONF 2> closer.log || exit_fail "FAIL"
+ taler-exchange-closer \
+ -L "$LOGLEVEL" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/closer.log" \
+ || exit_fail "FAIL"
echo " DONE"
echo -n "Running exchange transfer ..."
- taler-exchange-transfer -L INFO -t -c $CONF 2> transfer.log || exit_fail "FAIL"
+ taler-exchange-transfer \
+ -L "$LOGLEVEL" \
+ -t \
+ -c "$CONF" \
+ 2> "${MY_TMP_DIR}/transfer.log" \
+ || exit_fail "FAIL"
echo " DONE"
fi
}
@@ -89,31 +159,96 @@ function pre_audit () {
# actual audit run
function audit_only () {
# Run the auditor!
- echo -n "Running audit(s) ..."
+ echo -n "Running audit(s) ... (conf is $CONF)"
# Restart so that first run is always fresh, and second one is incremental
- taler-auditor-dbinit -r -c $CONF
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation.json 2> test-audit-aggregation.log || exit_fail "aggregation audit failed"
+ taler-auditor-dbinit \
+ -r \
+ -c "$CONF"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation.json \
+ 2> test-audit-aggregation.log \
+ || exit_fail "aggregation audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-aggregation -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-aggregation-inc.json 2> test-audit-aggregation-inc.log || exit_fail "incremental aggregation audit failed"
+ $VALGRIND taler-helper-auditor-aggregation \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-aggregation-inc.json \
+ 2> test-audit-aggregation-inc.log \
+ || exit_fail "incremental aggregation audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins.json 2> test-audit-coins.log || exit_fail "coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins.json \
+ 2> test-audit-coins.log \
+ || exit_fail "coin audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-coins -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-coins-inc.json 2> test-audit-coins-inc.log || exit_fail "incremental coin audit failed"
+ $VALGRIND taler-helper-auditor-coins \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-coins-inc.json \
+ 2> test-audit-coins-inc.log \
+ || exit_fail "incremental coin audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits.json 2> test-audit-deposits.log || exit_fail "deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits.json \
+ 2> test-audit-deposits.log \
+ || exit_fail "deposits audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-deposits -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-deposits-inc.json 2> test-audit-deposits-inc.log || exit_fail "incremental deposits audit failed"
+ $VALGRIND taler-helper-auditor-deposits \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-deposits-inc.json \
+ 2> test-audit-deposits-inc.log \
+ || exit_fail "incremental deposits audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves.json 2> test-audit-reserves.log || exit_fail "reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves.json \
+ 2> test-audit-reserves.log \
+ || exit_fail "reserves audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-reserves -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-reserves-inc.json 2> test-audit-reserves-inc.log || exit_fail "incremental reserves audit failed"
+ $VALGRIND taler-helper-auditor-reserves \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-reserves-inc.json \
+ 2> test-audit-reserves-inc.log \
+ || exit_fail "incremental reserves audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire.json 2> test-wire-audit.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire.json \
+ 2> test-wire-audit.log \
+ || exit_fail "wire audit failed"
echo -n "."
- $VALGRIND taler-helper-auditor-wire -i -L DEBUG -c $CONF -m $MASTER_PUB > test-audit-wire-inc.json 2> test-wire-audit-inc.log || exit_fail "wire audit failed"
+ $VALGRIND taler-helper-auditor-wire \
+ -i \
+ -L "$LOGLEVEL" \
+ -c "$CONF" \
+ -m "$MASTER_PUB" \
+ > test-audit-wire-inc.json \
+ 2> test-wire-audit-inc.log \
+ || exit_fail "wire audit failed"
echo -n "."
-
echo " DONE"
}
@@ -121,14 +256,23 @@ function audit_only () {
# Cleanup to run after the auditor
function post_audit () {
cleanup
- echo "DONE"
echo -n "TeXing ."
- taler-helper-auditor-render.py test-audit-aggregation.json test-audit-coins.json test-audit-deposits.json test-audit-reserves.json test-audit-wire.json < ../../contrib/auditor-report.tex.j2 > test-report.tex || exit_fail "Renderer failed"
-
+ taler-helper-auditor-render.py \
+ test-audit-aggregation.json \
+ test-audit-coins.json \
+ test-audit-deposits.json \
+ test-audit-reserves.json \
+ test-audit-wire.json \
+ < ../../contrib/auditor-report.tex.j2 \
+ > test-report.tex \
+ || exit_fail "Renderer failed"
echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null || exit_fail "pdflatex failed"
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null \
+ || exit_fail "pdflatex failed"
echo -n "."
- timeout 10 pdflatex test-report.tex >/dev/null
+ timeout 10 pdflatex test-report.tex \
+ >/dev/null
echo " DONE"
}
@@ -138,143 +282,158 @@ function post_audit () {
# $ taler-exchange-aggregator
# before auditor (to trigger pending wire transfers).
function run_audit () {
- pre_audit ${1:-no}
+ pre_audit "${1:-no}"
audit_only
post_audit
-
}
# Do a full reload of the (original) database
-full_reload()
+function full_reload()
{
echo -n "Doing full reload of the database... "
- dropdb $DB 2> /dev/null || true
- createdb -T template0 $DB || exit_skip "could not create database"
+ dropdb "$DB" 2> /dev/null || true
+ createdb -T template0 "$DB" \
+ || exit_skip "could not create database $DB (at $PGHOST)"
# Import pre-generated database, -q(ietly) using single (-1) transaction
- psql -Aqt $DB -q -1 -f ${BASEDB}.sql > /dev/null || exit_skip "Failed to load database"
+ psql -Aqt "$DB" \
+ -q \
+ -1 \
+ -f "${BASEDB}.sql" \
+ > /dev/null \
+ || exit_skip "Failed to load database $DB from ${BASEDB}.sql"
echo "DONE"
}
function test_0() {
+ echo "===========0: normal run with aggregator==========="
+ run_audit aggregator
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
+ echo -n "Test for deposit confirmation emergencies... "
+ jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
+
+ echo PASS
+
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
+ fi
+ LOSS=$(jq -r .total_bad_sig_loss < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
+ fi
-echo "===========0: normal run with aggregator==========="
-run_audit aggregator
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for deposit confirmation emergencies... "
-jq -e .deposit_confirmation_inconsistencies[0] < test-audit-deposits.json > /dev/null && exit_fail "Unexpected deposit confirmation inconsistency detected" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected denomination key withdraw inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .lag_details[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected lag detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-
-echo PASS
-
-LOSS=`jq -r .total_bad_sig_loss < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from aggregation, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from coins, got unexpected loss of $LOSS"
-fi
-LOSS=`jq -r .total_bad_sig_loss < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong total bad sig loss from reserves, got unexpected loss of $LOSS"
-fi
-
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
-echo PASS
-
-echo -n "Checking for unexpected arithmetic differences "
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-coins.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_plus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
-fi
-LOSS=`jq -r .total_arithmetic_delta_minus < test-audit-reserves.json`
-if test $LOSS != "TESTKUDOS:0"
-then
- exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
-fi
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
+ echo "PASS"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
-jq -e .amount_arithmetic_inconsistencies[0] < test-audit-reserves.json > /dev/null && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
-echo PASS
+ echo -n "Checking for unexpected arithmetic differences "
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregations, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-aggregation.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from aggregation, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from coins, got unexpected minus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_plus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected plus of $LOSS"
+ fi
+ LOSS=$(jq -r .total_arithmetic_delta_minus < test-audit-reserves.json)
+ if [ "$LOSS" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Wrong arithmetic delta from reserves, got unexpected minus of $LOSS"
+ fi
-echo -n "Checking for unexpected wire out differences "
-jq -e .wire_out_inconsistencies[0] < test-audit-aggregation.json > /dev/null && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
-echo PASS
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from aggregations detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from coins detected in ordinary run"
+ jq -e .amount_arithmetic_inconsistencies[0] \
+ < test-audit-reserves.json \
+ > /dev/null \
+ && exit_fail "Unexpected arithmetic inconsistencies from reserves detected in ordinary run"
+ echo "PASS"
-# cannot easily undo aggregator, hence full reload
-full_reload
+ echo -n "Checking for unexpected wire out differences "
+ jq -e .wire_out_inconsistencies[0] \
+ < test-audit-aggregation.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistencies detected in ordinary run"
+ echo "PASS"
+ # cannot easily undo aggregator, hence full reload
+ full_reload
}
@@ -282,80 +441,84 @@ full_reload
# transfer lag!
function test_1() {
-echo "===========1: normal run==========="
-run_audit
-
-echo "Checking output"
-# if an emergency was detected, that is a bug and we should fail
-echo -n "Test for emergencies... "
-jq -e .emergencies[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency detected in ordinary run" || echo PASS
-echo -n "Test for emergencies by count... "
-jq -e .emergencies_by_count[0] < test-audit-coins.json > /dev/null && exit_fail "Unexpected emergency by count detected in ordinary run" || echo PASS
-
-echo -n "Test for wire inconsistencies... "
-jq -e .wire_out_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
-jq -e .reserve_in_amount_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
-jq -e .missattribution_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected missattribution inconsistency detected in ordinary run"
-jq -e .row_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected row inconsistency detected in ordinary run"
-jq -e .row_minor_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
-jq -e .wire_format_inconsistencies[0] < test-audit-wire.json > /dev/null && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
-
-# TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
-# TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
-
-echo PASS
-
-echo -n "Check for lag detection... "
-
-# Check wire transfer lag reported (no aggregator!)
-# NOTE: This test is EXPECTED to fail for ~1h after
-# re-generating the test database as we do not
-# report lag of less than 1h (see GRACE_PERIOD in
-# taler-helper-auditor-wire.c)
-if [ $DATABASE_AGE -gt 3600 ]
-then
- jq -e .lag_details[0] < test-audit-wire.json > /dev/null || exit_fail "Lag not detected in run without aggregator at age $DELTA"
+ echo "===========1: normal run==========="
+ run_audit
+
+ echo "Checking output"
+ # if an emergency was detected, that is a bug and we should fail
+ echo -n "Test for emergencies... "
+ jq -e .emergencies[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency detected in ordinary run" \
+ || echo "PASS"
+ echo -n "Test for emergencies by count... "
+ jq -e .emergencies_by_count[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ && exit_fail "Unexpected emergency by count detected in ordinary run" \
+ || echo "PASS"
+
+ echo -n "Test for wire inconsistencies... "
+ jq -e .wire_out_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire out inconsistency detected in ordinary run"
+ jq -e .reserve_in_amount_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected reserve in inconsistency detected in ordinary run"
+ jq -e .misattribution_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected misattribution inconsistency detected in ordinary run"
+ jq -e .row_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected row inconsistency detected in ordinary run"
+ jq -e .row_minor_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected minor row inconsistency detected in ordinary run"
+ jq -e .wire_format_inconsistencies[0] \
+ < test-audit-wire.json \
+ > /dev/null \
+ && exit_fail "Unexpected wire format inconsistencies detected in ordinary run"
+
+ # TODO: check operation balances are correct (once we have all transaction types and wallet is deterministic)
+ # TODO: check revenue summaries are correct (once we have all transaction types and wallet is deterministic)
- LAG=`jq -r .total_amount_lag < test-audit-wire.json`
- if test $LAG = "TESTKUDOS:0"
- then
- exit_fail "Expected total lag to be non-zero"
- fi
echo "PASS"
-else
- echo "SKIP (database too new)"
-fi
-
-echo -n "Test for wire amounts... "
-WIRED=`jq -r .total_wire_in_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_in_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_plus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta plus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_wire_out_delta_minus < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total wire delta minus wrong, got $WIRED"
-fi
-WIRED=`jq -r .total_missattribution_in < test-audit-wire.json`
-if test $WIRED != "TESTKUDOS:0"
-then
- exit_fail "Expected total missattribution in wrong, got $WIRED"
-fi
+ echo -n "Test for wire amounts... "
+ WIRED=$(jq -r .total_wire_in_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_in_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_plus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta plus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_wire_out_delta_minus < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total wire delta minus wrong, got $WIRED"
+ fi
+ WIRED=$(jq -r .total_misattribution_in < test-audit-wire.json)
+ if [ "$WIRED" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Expected total misattribution in wrong, got $WIRED"
+ fi
-# Database was unmodified, no need to undo
-echo "OK"
+ # Database was unmodified, no need to undo
+ echo "OK"
}
@@ -363,38 +526,38 @@ echo "OK"
# Change recoup amount
function test_2() {
-echo "===========2: recoup amount inconsistency==========="
-echo "UPDATE recoup SET amount_val=5 WHERE recoup_uuid=1" | psql -Aqt $DB
+ echo "===========2: recoup amount inconsistency==========="
+ echo "UPDATE exchange.recoup SET amount_val=5 WHERE recoup_uuid=1" | psql -Aqt "$DB"
-run_audit
+ run_audit
-# Reserve balance is now wrong
-echo -n "Testing inconsistency detection... "
-AMOUNT=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json`
-if test $AMOUNT != "TESTKUDOS:3"
-then
- exit_fail "Reserve auditor amount $AMOUNT is wrong"
-fi
-AMOUNT=`jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json`
-if test $AMOUNT != "TESTKUDOS:0"
-then
- exit_fail "Reserve exchange amount $AMOUNT is wrong"
-fi
-# Coin spent exceeded coin's value
-AMOUNT=`jq -r .amount_arithmetic_inconsistencies[0].auditor < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:2"
-then
- exit_fail "Coin auditor amount $AMOUNT is wrong"
-fi
-AMOUNT=`jq -r .amount_arithmetic_inconsistencies[0].exchange < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:5"
-then
- exit_fail "Coin exchange amount $AMOUNT is wrong"
-fi
-echo OK
+ # Reserve balance is now wrong
+ echo -n "Testing inconsistency detection... "
+ AMOUNT=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].auditor < test-audit-reserves.json)
+ if [ "$AMOUNT" != "TESTKUDOS:3" ]
+ then
+ exit_fail "Reserve auditor amount $AMOUNT is wrong"
+ fi
+ AMOUNT=$(jq -r .reserve_balance_summary_wrong_inconsistencies[0].exchange < test-audit-reserves.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Reserve exchange amount $AMOUNT is wrong"
+ fi
+ # Coin spent exceeded coin's value
+ AMOUNT=$(jq -r .amount_arithmetic_inconsistencies[0].auditor < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:2" ]
+ then
+ exit_fail "Coin auditor amount $AMOUNT is wrong"
+ fi
+ AMOUNT=$(jq -r .amount_arithmetic_inconsistencies[0].exchange < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Coin exchange amount $AMOUNT is wrong"
+ fi
+ echo "OK"
-# Undo database modification
-echo "UPDATE recoup SET amount_val=2 WHERE recoup_uuid=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.recoup SET amount_val=2 WHERE recoup_uuid=1" | psql -Aqt "$DB"
}
@@ -402,27 +565,27 @@ echo "UPDATE recoup SET amount_val=2 WHERE recoup_uuid=1" | psql -Aqt $DB
# Change recoup-refresh amount
function test_3() {
-echo "===========3: recoup-refresh amount inconsistency==========="
-echo "UPDATE recoup_refresh SET amount_val=5 WHERE recoup_refresh_uuid=1" | psql -Aqt $DB
+ echo "===========3: recoup-refresh amount inconsistency==========="
+ echo "UPDATE exchange.recoup_refresh SET amount_val=5 WHERE recoup_refresh_uuid=1" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-# Coin spent exceeded coin's value
-AMOUNT=`jq -r .total_arithmetic_delta_minus < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:5"
-then
- exit_fail "Arithmetic delta minus amount $AMOUNT is wrong"
-fi
-AMOUNT=`jq -r .total_arithmetic_delta_plus < test-audit-coins.json`
-if test $AMOUNT != "TESTKUDOS:0"
-then
- exit_fail "Arithmetic delta plus amount $AMOUNT is wrong"
-fi
-echo OK
+ echo -n "Testing inconsistency detection... "
+ # Coin spent exceeded coin's value
+ AMOUNT=$(jq -r .total_arithmetic_delta_minus < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:5" ]
+ then
+ exit_fail "Arithmetic delta minus amount $AMOUNT is wrong"
+ fi
+ AMOUNT=$(jq -r .total_arithmetic_delta_plus < test-audit-coins.json)
+ if [ "$AMOUNT" != "TESTKUDOS:0" ]
+ then
+ exit_fail "Arithmetic delta plus amount $AMOUNT is wrong"
+ fi
+ echo "OK"
-# Undo database modification
-echo "UPDATE recoup_refresh SET amount_val=0 WHERE recoup_refresh_uuid=1" | psql -Aqt $DB
+ # Undo database modification
+ echo "UPDATE exchange.recoup_refresh SET amount_val=0 WHERE recoup_refresh_uuid=1" | psql -Aqt "$DB"
}
@@ -430,72 +593,68 @@ echo "UPDATE recoup_refresh SET amount_val=0 WHERE recoup_refresh_uuid=1" | psql
# Void recoup-refresh entry by 'unrevoking' denomination
function test_4() {
-echo "===========4: invalid recoup==========="
-echo "DELETE FROM denomination_revocations;" | psql -Aqt $DB
+ echo "===========4: invalid recoup==========="
+ echo "DELETE FROM exchange.denomination_revocations;" | psql -Aqt "$DB"
-run_audit
+ run_audit
-echo -n "Testing inconsistency detection... "
-# Coin spent exceeded coin's value
-jq -e .bad_sig_losses[0] < test-audit-coins.json > /dev/null || exit_fail "Bad recoup not detected"
-AMOUNT=`jq -r .total_bad_sig_losses < test-audit-coins.json`
-if test $AMOUNT == "TESTKUDOS:0"
-then
- exit_fail "Total bad sig losses are wrong"
-fi
-TAB=`jq -r .row_inconsistencies[0].table < test-audit-reserves.json`
-if test $TAB != "recoup"
-then
- exit_fail "Wrong table for row inconsistency, got $TAB"
-fi
-echo OK
-
-# Undo database modification (can't easily undo DELETE, so full reload)
-full_reload
+ echo -n "Testing inconsistency detection... "
+ # Coin spent exceeded coin's value
+ jq -e .bad_sig_losses[0] \
+ < test-audit-coins.json \
+ > /dev/null \
+ || exit_fail "Bad recoup not detected"
+ AMOUNT=$(jq -r .irregular_loss < test-audit-coins.json)
+ if [ "$AMOUNT" == "TESTKUDOS:0" ]
+ then
+ exit_fail "Total bad sig losses are wrong"
+ fi
+ TAB=$(jq -r .row_inconsistencies[0].table < test-audit-reserves.json)
+ if [ "$TAB" != "recoup" ]
+ then
+ exit_fail "Wrong table for row inconsistency, got $TAB"
+ fi
+ echo "OK"
+ # Undo database modification (can't easily undo DELETE, so full reload)
+ full_reload
}
-
# *************** Main test loop starts here **************
# Run all the tests against the database given in $1.
# Sets $fail to 0 on success, non-zero on failure.
-check_with_database()
+function check_with_database()
{
- BASEDB=$1
+ BASEDB="$1"
+ # Configuration file to use
+ CONF="$1.conf"
echo "Running test suite with database $BASEDB using configuration $CONF"
- # Setup database-specific globals
- MASTER_PUB=`cat ${BASEDB}.mpub`
+ MASTER_PRIV_FILE="${BASEDB}.mpriv"
+ taler-config -f -c "${CONF}" -s exchange-offline -o MASTER_PRIV_FILE -V "${MASTER_PRIV_FILE}"
+ MASTER_PUB=$(gnunet-ecc -p "$MASTER_PRIV_FILE")
- # Determine database age
- echo "Calculating database age based on ${BASEDB}.age"
- AGE=`cat ${BASEDB}.age`
- NOW=`date +%s`
- # NOTE: expr "fails" if the result is zero.
- DATABASE_AGE=`expr ${NOW} - ${AGE} || true`
- echo "Database age is ${DATABASE_AGE} seconds"
+ echo "MASTER PUB is ${MASTER_PUB} using file ${MASTER_PRIV_FILE}"
# Load database
full_reload
-
# Run test suite
fail=0
for i in $TESTS
do
- test_$i
- if test 0 != $fail
+ "test_$i"
+ if [ 0 != "$fail" ]
then
break
fi
done
# echo "Cleanup (disabled, leaving database $DB behind)"
- dropdb $DB
- rm -f test-audit.log test-wire-audit.log
+ dropdb "$DB"
}
@@ -503,54 +662,91 @@ check_with_database()
# *************** Main logic starts here **************
# ####### Setup globals ######
-# Postgres database to use (must match test-auditor.conf)
-DB=taler-auditor-test
+# Postgres database to use
+DB=revoke-basedb
-# Configuration file to use
-CONF=test-auditor.conf
# test required commands exist
echo "Testing for jq"
jq -h > /dev/null || exit_skip "jq required"
-echo "Testing for taler-bank-manage"
-taler-bank-manage --help >/dev/null </dev/null || exit_skip "taler-bank-manage required"
+echo "Testing for faketime"
+faketime -h > /dev/null \
+ || exit_skip "faketime required"
+echo "Testing for libeufin-bank"
+libeufin-bank --help \
+ >/dev/null \
+ 2> /dev/null \
+ </dev/null \
+ || exit_skip "libeufin-bank required"
echo "Testing for pdflatex"
which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
-
-# check if we should regenerate the database
-if test -n "${1:-}"
-then
- echo "Custom run, will only run on existing DB."
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h \
+ >/dev/null \
+ </dev/null \
+ 2>/dev/null \
+ || exit_skip "taler-wallet-cli required"
+
+echo -n "Testing for Postgres "
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo "FOUND (in path) at $INITDB_BIN"
else
- echo -n "Testing for taler-wallet-cli"
- if taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null
+ HAVE_INITDB=$(find /usr -name "initdb" | head -1 2> /dev/null | grep postgres) || exit_skip " MISSING"
+ echo "FOUND at " "$(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+echo -n "Setting up Postgres DB"
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+MY_TMP_DIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+TMPDIR="${MY_TMP_DIR}/postgres/"
+mkdir -p "$TMPDIR"
+echo -n "Setting up Postgres DB at $TMPDIR ..."
+"$INITDB_BIN" \
+ --no-sync \
+ --auth=trust \
+ -D "${TMPDIR}" \
+ > "${MY_TMP_DIR}/postgres-dbinit.log" \
+ 2> "${MY_TMP_DIR}/postgres-dbinit.err"
+echo " DONE"
+mkdir "${TMPDIR}/sockets"
+echo -n "Launching Postgres service at $POSTGRES_PATH"
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ start \
+ > "${MY_TMP_DIR}/postgres-start.log" \
+ 2> "${MY_TMP_DIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+
+echo "Generating fresh database at $MY_TMP_DIR"
+if faketime -f '-1 d' ./generate-revoke-basedb.sh "$MY_TMP_DIR/$DB"
+then
+ check_with_database "$MY_TMP_DIR/$DB"
+ if [ "x$fail" != "x0" ]
then
- MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX`
- echo " FOUND. Generating fresh database at $MYDIR"
- if ./generate-revoke-basedb.sh $MYDIR/basedb
- then
- check_with_database $MYDIR/basedb
- if test x$fail != x0
- then
- exit $fail
- else
- echo "Cleaning up $MYDIR..."
- rm -rf $MYDIR || echo "Removing $MYDIR failed"
- fi
- else
- echo "Generation failed, running only on existing DB"
- fi
+ exit "$fail"
else
- echo " NOT FOUND, running only on existing DB"
+ echo "Cleaning up $MY_TMP_DIR..."
+ rm -rf "$MY_TMP_DIR" || echo "Removing $MY_TMP_DIR failed"
fi
-fi
-
-# run tests with pre-build database, if one is available
-if test -r revoke-basedb.mpub
-then
- check_with_database "revoke-basedb"
else
- fail=77
+ echo "Generation failed"
fi
-exit $fail
+exit 0
diff --git a/src/auditor/test-sync.sh b/src/auditor/test-sync.sh
index 24de92ebe..bcef908aa 100755
--- a/src/auditor/test-sync.sh
+++ b/src/auditor/test-sync.sh
@@ -1,42 +1,167 @@
-#!/bin/sh
+#!/bin/bash
+#
+# This file is part of TALER
+# Copyright (C) 2014-2023 Taler Systems SA
+#
+# TALER is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/license>
+#
+# shellcheck disable=SC2317
set -eu
-echo -n "Testing synchronization logic ..."
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+ echo "SKIPPING test: $1"
+ exit 77
+}
-dropdb talercheck-in 2> /dev/null || true
-dropdb talercheck-out 2> /dev/null || true
+# Exit, with error message (hard failure)
+function exit_fail() {
+ echo "FAILING test: $1"
+ exit 1
+}
-createdb talercheck-in || exit 77
-createdb talercheck-out || exit 77
-echo -n "."
+# Cleanup to run whenever we exit
+function cleanup() {
+ if [ -n "${POSTGRES_PATH:-}" ]
+ then
+ "${POSTGRES_PATH}/pg_ctl" -D "$TMPDIR" stop &> /dev/null || true
+ fi
+ for n in $(jobs -p)
+ do
+ kill "$n" 2> /dev/null || true
+ done
+ wait
+}
-taler-exchange-dbinit -c test-sync-out.conf
-echo -n "."
-psql talercheck-in < auditor-basedb.sql >/dev/null 2> /dev/null
+# Install cleanup handler (except for kill -9)
+trap cleanup EXIT
-echo -n "."
-taler-auditor-sync -s test-sync-in.conf -d test-sync-out.conf -t
+function check_with_database()
+{
+ echo -n "Testing synchronization logic ..."
-for table in denominations denomination_revocations reserves reserves_in reserves_close reserves_out auditors auditor_denom_sigs exchange_sign_keys signkey_revocations known_coins refresh_commitments refresh_revealed_coins refresh_transfer_keys deposits refunds wire_out aggregation_tracking wire_fee recoup recoup_refresh
-do
+ dropdb talercheck-in 2> /dev/null || true
+ dropdb talercheck-out 2> /dev/null || true
+
+ createdb talercheck-in || exit 77
+ createdb talercheck-out || exit 77
echo -n "."
- CIN=`echo "SELECT COUNT(*) FROM $table" | psql talercheck-in -Aqt`
- COUT=`echo "SELECT COUNT(*) FROM $table" | psql talercheck-out -Aqt`
- if test ${CIN} != ${COUT}
- then
- dropdb talercheck-in
- dropdb talercheck-out
- echo "FAIL"
- echo "Record count mismatch: $CIN / $COUT in table $table"
- exit 1
- fi
-done
+ taler-exchange-dbinit -c test-sync-out.conf
+ echo -n "."
+ psql -Aqt talercheck-in \
+ -q -1 \
+ -f "$1.sql" \
+ >/dev/null \
+ || exit_skip "Failed to load database"
+
+ echo -n "."
+ taler-auditor-sync \
+ -s test-sync-in.conf \
+ -d test-sync-out.conf -t
-echo -n ". "
-dropdb talercheck-in
-dropdb talercheck-out
+ # cs_nonce_locks excluded: no point
+ for table in denominations denomination_revocations wire_targets reserves reserves_in reserves_close reserves_out auditors auditor_denom_sigs exchange_sign_keys signkey_revocations extensions policy_details policy_fulfillments known_coins refresh_commitments refresh_revealed_coins refresh_transfer_keys deposits refunds wire_out aggregation_tracking wire_fee recoup recoup_refresh
+ do
+ echo -n "."
+ CIN=$(echo "SELECT COUNT(*) FROM exchange.$table" | psql talercheck-in -Aqt)
+ COUT=$(echo "SELECT COUNT(*) FROM exchange.$table" | psql talercheck-out -Aqt)
-echo "PASS"
+ if [ "${CIN}" != "${COUT}" ]
+ then
+ dropdb talercheck-in
+ dropdb talercheck-out
+ echo "FAIL"
+ exit_fail "Record count mismatch: $CIN / $COUT in table $table"
+ fi
+ done
+
+ echo -n ". "
+ dropdb talercheck-in
+ dropdb talercheck-out
+
+ echo "PASS"
+ fail=0
+}
+
+# test required commands exist
+echo "Testing for jq"
+jq -h > /dev/null || exit_skip "jq required"
+echo "Testing for faketime"
+faketime -h > /dev/null || exit_skip "faketime required"
+echo "Testing for libeufin-bank"
+libeufin-bank --help >/dev/null </dev/null 2> /dev/null || exit_skip "libeufin-bank required"
+echo "Testing for pdflatex"
+which pdflatex > /dev/null </dev/null || exit_skip "pdflatex required"
+echo "Testing for taler-wallet-cli"
+taler-wallet-cli -h >/dev/null </dev/null 2>/dev/null || exit_skip "taler-wallet-cli required"
+
+echo -n "Testing for Postgres"
+# Available directly in path?
+INITDB_BIN=$(command -v initdb) || true
+if [[ -n "$INITDB_BIN" ]]; then
+ echo " FOUND (in path) at $INITDB_BIN"
+else
+ HAVE_INITDB=$(find /usr -name "initdb" | head -1 2> /dev/null | grep postgres) || exit_skip " MISSING"
+ echo " FOUND at " "$(dirname "$HAVE_INITDB")"
+ INITDB_BIN=$(echo "$HAVE_INITDB" | grep bin/initdb | grep postgres | sort -n | tail -n1)
+fi
+echo -n "Setting up Postgres DB"
+POSTGRES_PATH=$(dirname "$INITDB_BIN")
+MYDIR=$(mktemp -d /tmp/taler-auditor-basedbXXXXXX)
+TMPDIR="$MYDIR/postgres/"
+mkdir -p "$TMPDIR"
+"$INITDB_BIN" --no-sync --auth=trust -D "${TMPDIR}" \
+ > "${MYDIR}/postgres-dbinit.log" \
+ 2> "${MYDIR}/postgres-dbinit.err"
+echo " DONE"
+mkdir "${TMPDIR}/sockets"
+echo -n "Launching Postgres service"
+cat - >> "$TMPDIR/postgresql.conf" <<EOF
+unix_socket_directories='${TMPDIR}/sockets'
+fsync=off
+max_wal_senders=0
+synchronous_commit=off
+wal_level=minimal
+listen_addresses=''
+EOF
+grep -v host \
+ < "$TMPDIR/pg_hba.conf" \
+ > "$TMPDIR/pg_hba.conf.new"
+mv "$TMPDIR/pg_hba.conf.new" "$TMPDIR/pg_hba.conf"
+"${POSTGRES_PATH}/pg_ctl" \
+ -D "$TMPDIR" \
+ -l /dev/null \
+ start \
+ > "${MYDIR}/postgres-start.log" \
+ 2> "${MYDIR}/postgres-start.err"
+echo " DONE"
+PGHOST="$TMPDIR/sockets"
+export PGHOST
+
+echo "Generating fresh database at $MYDIR"
+if faketime -f '-1 d' ./generate-auditor-basedb.sh -d "$MYDIR/auditor-basedb"
+then
+ check_with_database "$MYDIR/auditor-basedb"
+ if [ x$fail != x0 ]
+ then
+ exit "$fail"
+ else
+ echo "Cleaning up $MYDIR..."
+ rm -rf "$MYDIR" || echo "Removing $MYDIR failed"
+ fi
+else
+ echo "Generation failed"
+ exit 77
+fi
exit 0