From f417bf2d7b841bbd518b101d5181e0bdd8501402 Mon Sep 17 00:00:00 2001 From: motty Date: Sun, 9 Apr 2023 10:31:22 +0900 Subject: [PATCH] mod for monacoin --- configure.ac | 2 + contrib/guix/libexec/build.sh | 2 +- contrib/linearize/example-linearize.cfg | 8 +- contrib/linearize/linearize-hashes.py | 2 +- contrib/macdeploy/macdeployqtplus | 2 +- contrib/qos/tc.sh | 8 +- contrib/seeds/nodes_main.txt | 760 ++--------------------- contrib/seeds/nodes_test.txt | 24 +- contrib/signet/miner | 6 +- contrib/zmq/zmq_sub.py | 10 +- src/Makefile.am | 24 +- src/amount.h | 4 +- src/chain.h | 5 + src/chainparams.cpp | 303 +++++----- src/chainparams.h | 9 + src/chainparamsbase.cpp | 10 +- src/chainparamsseeds.h | 764 ++---------------------- src/clientversion.cpp | 2 +- src/consensus/params.h | 2 + src/init.cpp | 3 + src/net_processing.cpp | 2 +- src/node/blockstorage.cpp | 6 +- src/node/blockstorage.h | 2 +- src/pow.cpp | 218 ++++++- src/primitives/block.cpp | 16 + src/primitives/block.h | 4 + src/qt/intro.cpp | 2 +- src/qt/splashscreen.cpp | 2 +- src/rpc/mining.cpp | 14 +- src/rpc/net.cpp | 16 +- src/txdb.cpp | 10 +- src/util/strencodings.h | 2 + src/validation.cpp | 25 +- src/wallet/scriptpubkeyman.cpp | 4 +- src/wallet/wallet.h | 4 +- 35 files changed, 642 insertions(+), 1635 deletions(-) diff --git a/configure.ac b/configure.ac index 9f4aa9eb0f..32d8998d46 100644 --- a/configure.ac +++ b/configure.ac @@ -332,6 +332,8 @@ AC_ARG_ENABLE([external-signer], AC_LANG_PUSH([C++]) +CFLAGS="$CFLAGS -fPIC" + dnl Check for a flag to turn compiler warnings into errors. This is helpful for checks which may dnl appear to succeed because by default they merely emit warnings when they fail. dnl diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index 6ed8d7323b..257edc5959 100755 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -237,7 +237,7 @@ mkdir -p "$OUTDIR" ########################### # CONFIGFLAGS -CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests --disable-fuzz-binary" +CONFIGFLAGS="--enable-reduce-exports --disable-tests --disable-bench --disable-gui-tests --disable-fuzz-binary" case "$HOST" in *linux*) CONFIGFLAGS+=" --disable-threadlocal" ;; esac diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg index 8cb03fa80a..3f715e950d 100644 --- a/contrib/linearize/example-linearize.cfg +++ b/contrib/linearize/example-linearize.cfg @@ -5,16 +5,16 @@ rpcpassword=somepassword host=127.0.0.1 #mainnet default -port=8332 +port=9402 #testnet default -#port=18332 +#port=19402 #regtest default -#port=18443 +#port=19443 #signet default -#port=38332 +#port=39402 # bootstrap.dat hashlist settings (linearize-hashes) max_height=313000 diff --git a/contrib/linearize/linearize-hashes.py b/contrib/linearize/linearize-hashes.py index 673491ec1f..b1c6045d6d 100755 --- a/contrib/linearize/linearize-hashes.py +++ b/contrib/linearize/linearize-hashes.py @@ -120,7 +120,7 @@ def get_rpc_cookie(): if 'host' not in settings: settings['host'] = '127.0.0.1' if 'port' not in settings: - settings['port'] = 8332 + settings['port'] = 9402 if 'min_height' not in settings: settings['min_height'] = 0 if 'max_height' not in settings: diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus index 2fa7794926..8a692799fc 100755 --- a/contrib/macdeploy/macdeployqtplus +++ b/contrib/macdeploy/macdeployqtplus @@ -514,7 +514,7 @@ icvp = { 'gridOffsetX': 0.0, 'textSize': 12.0, 'viewOptionsVersion': 1, - 'backgroundImageAlias': b'\x00\x00\x00\x00\x02\x1e\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x94\\\xb0H+\x00\x05\x00\x00\x00\x98\x0fbackground.tiff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xd19\xb0\xf8\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\r\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b.background\x00\x00\x10\x00\x08\x00\x00\xd1\x94\\\xb0\x00\x00\x00\x11\x00\x08\x00\x00\xd19\xb0\xf8\x00\x00\x00\x01\x00\x04\x00\x00\x00\x98\x00\x0e\x00 \x00\x0f\x00b\x00a\x00c\x00k\x00g\x00r\x00o\x00u\x00n\x00d\x00.\x00t\x00i\x00f\x00f\x00\x0f\x00\x02\x00\x00\x00\x12\x00\x1c/.background/background.tiff\x00\x14\x01\x06\x00\x00\x00\x00\x01\x06\x00\x02\x00\x00\x0cMacintosh HD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x97\xab\xc3H+\x00\x00\x01\x88[\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02u\xab\x8d\xd1\x94\\\xb0devrddsk\xff\xff\xff\xff\x00\x00\t \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07monacoin\x00\x00\x10\x00\x08\x00\x00\xce\x97\xab\xc3\x00\x00\x00\x11\x00\x08\x00\x00\xd1\x94\\\xb0\x00\x00\x00\x01\x00\x14\x01\x88[\x88\x00\x16\xa9\t\x00\x08\xfaR\x00\x08\xfaQ\x00\x02d\x8e\x00\x0e\x00\x02\x00\x00\x00\x0f\x00\x1a\x00\x0c\x00M\x00a\x00c\x00i\x00n\x00t\x00o\x00s\x00h\x00 \x00H\x00D\x00\x13\x00\x01/\x00\x00\x15\x00\x02\x00\x14\xff\xff\x00\x00\xff\xff\x00\x00', + 'backgroundImageAlias': b'\x00\x00\x00\x00\x02\x1e\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x94\\\xb0H+\x00\x05\x00\x00\x00\x98\x0fbackground.tiff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xd19\xb0\xf8\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\r\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b.background\x00\x00\x10\x00\x08\x00\x00\xd1\x94\\\xb0\x00\x00\x00\x11\x00\x08\x00\x00\xd19\xb0\xf8\x00\x00\x00\x01\x00\x04\x00\x00\x00\x98\x00\x0e\x00 \x00\x0f\x00b\x00a\x00c\x00k\x00g\x00r\x00o\x00u\x00n\x00d\x00.\x00t\x00i\x00f\x00f\x00\x0f\x00\x02\x00\x00\x00\x12\x00\x1c/.background/background.tiff\x00\x14\x01\x06\x00\x00\x00\x00\x01\x06\x00\x02\x00\x00\x0cMacintosh HD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x97\xab\xc3H+\x00\x00\x01\x88[\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02u\xab\x8d\xd1\x94\\\xb0devrddsk\xff\xff\xff\xff\x00\x00\t \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07bitcoin\x00\x00\x10\x00\x08\x00\x00\xce\x97\xab\xc3\x00\x00\x00\x11\x00\x08\x00\x00\xd1\x94\\\xb0\x00\x00\x00\x01\x00\x14\x01\x88[\x88\x00\x16\xa9\t\x00\x08\xfaR\x00\x08\xfaQ\x00\x02d\x8e\x00\x0e\x00\x02\x00\x00\x00\x0f\x00\x1a\x00\x0c\x00M\x00a\x00c\x00i\x00n\x00t\x00o\x00s\x00h\x00 \x00H\x00D\x00\x13\x00\x01/\x00\x00\x15\x00\x02\x00\x14\xff\xff\x00\x00\xff\xff\x00\x00', 'backgroundColorBlue': 1.0, 'iconSize': 96.0, 'backgroundColorGreen': 1.0, diff --git a/contrib/qos/tc.sh b/contrib/qos/tc.sh index 0f0cbc2509..0feacd0b60 100755 --- a/contrib/qos/tc.sh +++ b/contrib/qos/tc.sh @@ -53,10 +53,10 @@ fi # --set-mark marks packages matching these criteria with the number "4" (v6) # these packets are filtered by the tc filter with "handle 2" # this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT} -iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2 -iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2 +iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 9401 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2 +iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 9401 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2 if [ -n "${LOCALNET_V6}" ] ; then - ip6tables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4 - ip6tables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4 + ip6tables -t mangle -A OUTPUT -p tcp -m tcp --dport 9401 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4 + ip6tables -t mangle -A OUTPUT -p tcp -m tcp --sport 9401 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4 fi diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt index b9dfdb4b0a..4caa92fa4a 100644 --- a/contrib/seeds/nodes_main.txt +++ b/contrib/seeds/nodes_main.txt @@ -1,696 +1,64 @@ -2.39.173.126:8333 -3.14.168.201:48333 -4.36.112.44:8333 -5.8.18.31:8333 -5.14.200.167:8333 -5.56.20.2:8333 -5.102.146.99:8333 -5.103.137.146:9333 -5.128.87.126:8333 -5.133.65.82:8333 -5.187.55.242:8333 -5.188.62.24:8333 -5.188.62.33:8333 -5.199.133.193:8333 -8.38.89.152:8333 -13.231.20.249:8333 -18.27.79.17:8333 -20.184.15.116:8433 -23.28.205.97:8333 -23.106.252.230:8333 -23.175.0.202:8333 -23.175.0.212:8333 -23.241.250.252:8333 -23.245.24.154:8333 -24.86.184.66:8333 -24.116.246.9:8333 -24.141.34.166:8333 -24.155.196.246:8333 -24.157.130.222:8333 -24.188.176.255:8333 -24.237.70.53:8333 -27.124.4.67:8333 -31.17.70.80:8333 -31.21.8.32:8333 -31.45.118.10:8333 -31.132.17.56:8333 -31.134.121.223:8333 -32.214.183.114:8333 -35.137.236.32:8333 -35.185.145.105:8333 -35.209.51.212:8333 -35.245.175.76:8333 -37.116.95.41:8333 -37.143.9.107:8333 -37.143.116.43:8333 -37.191.244.149:8333 -37.211.78.253:8333 -37.221.209.222:24333 -37.228.92.110:8333 -43.225.62.107:8333 -43.225.157.152:8333 -45.36.184.6:8333 -45.48.168.16:8333 -45.85.85.8:8333 -45.85.85.9:8333 -45.129.180.214:8333 -45.149.78.128:8333 -45.151.125.218:8333 -45.154.255.46:8333 -45.155.157.239:8333 -46.28.132.34:8333 -46.28.204.21:8333 -46.32.50.98:8333 -46.59.13.35:8333 -46.128.40.173:8333 -46.128.140.193:8333 -46.146.248.89:8333 -46.166.162.45:20001 -46.188.15.6:8333 -46.229.165.142:8333 -46.229.238.187:8333 -46.249.83.82:8333 -46.254.217.169:8333 -47.74.191.34:8333 -47.115.53.163:8333 -47.187.26.135:8333 -47.222.103.234:8333 -47.253.5.99:8333 -49.232.82.76:8333 -49.247.215.43:8333 -50.2.13.166:8333 -50.34.39.72:8333 -50.45.232.189:8333 -50.68.104.92:8333 -51.68.36.57:8333 -51.154.60.34:8333 -52.169.238.66:8333 -54.197.30.223:8333 -54.227.66.57:8333 -58.158.0.86:8333 -58.171.135.242:8333 -58.229.208.158:8333 -60.244.109.19:8333 -62.38.75.208:8333 -62.74.143.11:8333 -62.80.227.49:8333 -62.152.58.16:9421 -62.210.167.199:8333 -62.234.188.160:8333 -62.251.54.163:8333 -63.227.116.162:8333 -65.19.155.82:8333 -65.95.49.102:8333 -66.18.172.21:8333 -66.240.237.155:8333 -67.210.228.203:8333 -69.30.215.42:8333 -69.59.18.206:8333 -69.64.33.71:8333 -69.119.193.9:8333 -69.209.23.72:8333 -70.123.125.237:8333 -70.185.56.136:8333 -71.38.90.235:8333 -72.12.73.70:8333 -72.53.134.182:8333 -72.225.7.80:8333 -72.234.182.39:8333 -72.250.184.57:8333 -73.83.103.79:8333 -74.118.137.119:8333 -74.133.100.74:8333 -74.215.219.214:8333 -74.220.255.190:8333 -75.158.39.231:8333 -77.53.53.196:8333 -77.70.16.245:8333 -77.105.87.97:8333 -77.120.113.69:8433 -77.120.122.22:8433 -77.166.83.167:8333 -77.247.178.130:8333 -78.27.139.13:8333 -78.63.28.146:8333 -78.83.103.4:8333 -78.141.123.99:8333 -79.77.33.131:8333 -79.77.133.30:8333 -79.101.1.25:8333 -79.117.192.229:8333 -79.133.228.55:8333 -79.146.21.163:8333 -80.89.203.172:8001 -80.93.213.246:8333 -80.192.98.110:8334 -80.229.28.60:8333 -80.232.247.210:8333 -80.242.39.76:8333 -80.253.94.252:8333 -81.0.198.25:8333 -81.7.13.84:8333 -81.117.225.245:8333 -81.135.137.225:8333 -81.171.22.143:8333 -81.191.233.134:8333 -81.232.78.75:8333 -81.242.91.23:8333 -82.29.58.109:8333 -82.136.99.22:8333 -82.149.97.25:17567 -82.165.19.48:8333 -82.194.153.233:8333 -82.197.215.125:8333 -82.199.102.10:8333 -82.200.205.30:8333 -82.202.68.231:8333 -82.221.128.31:8333 -82.228.6.131:8333 -83.85.139.94:8333 -83.99.245.20:8333 -83.137.41.10:8333 -83.174.209.87:8333 -83.217.8.31:44420 -84.38.3.249:8333 -84.38.185.122:8333 -84.92.92.247:8333 -84.192.16.234:8333 -84.194.158.124:8333 -84.212.145.24:8333 -84.212.244.95:8333 -84.216.51.36:8333 -84.255.249.163:8333 -85.25.255.147:8333 -85.70.156.209:8333 -85.145.142.46:8333 -85.170.233.95:8333 -85.184.138.108:8333 -85.190.0.5:8333 -85.191.200.51:8333 -85.192.191.6:18500 -85.194.238.131:8333 -85.195.54.110:8333 -85.214.161.252:8333 -85.214.185.51:8333 -85.241.106.203:8333 -85.246.168.252:8333 -86.56.238.247:8333 -87.61.90.230:8333 -87.79.68.86:8333 -87.79.94.221:8333 -87.120.8.5:20008 -87.246.46.132:8333 -87.247.111.222:8333 -88.84.222.252:8333 -88.86.243.241:8333 -88.87.93.52:1691 -88.119.197.200:8333 -88.129.253.94:8333 -88.147.244.250:8333 -88.208.3.195:8333 -88.212.44.33:8333 -88.214.57.95:8333 -89.106.199.38:8333 -89.108.126.228:8333 -89.115.120.43:8333 -89.133.68.65:8333 -89.190.19.162:8333 -89.248.172.10:8333 -90.146.153.21:8333 -90.182.165.18:8333 -91.106.188.229:8333 -91.193.237.116:8333 -91.204.99.178:8333 -91.204.149.5:8333 -91.214.70.63:8333 -91.228.152.236:8333 -92.12.154.115:8333 -92.249.143.44:8333 -93.12.66.98:8333 -93.46.54.4:8333 -93.115.20.130:8333 -93.123.180.164:8333 -93.189.145.169:8333 -93.241.228.102:8333 -94.19.7.55:8333 -94.19.128.204:8333 -94.52.112.227:8333 -94.154.96.130:8333 -94.156.174.201:8333 -94.158.246.183:8333 -94.177.171.73:8333 -94.199.178.233:8100 -94.237.125.30:8333 -94.247.134.77:8333 -95.48.228.45:8333 -95.69.249.63:8333 -95.82.146.70:8333 -95.83.73.31:8333 -95.84.164.43:8333 -95.87.226.56:8333 -95.110.234.93:8333 -95.163.71.126:8333 -95.164.65.194:8333 -95.174.66.211:8333 -95.211.174.137:8333 -95.216.11.156:8433 -96.47.114.108:8333 -97.84.232.105:8333 -97.99.205.241:8333 -98.25.193.114:8333 -99.115.25.13:8333 -101.32.19.184:8333 -101.100.174.240:8333 -102.132.245.16:8333 -103.14.244.190:8333 -103.76.48.5:8333 -103.84.84.250:8335 -103.99.168.150:8333 -103.109.101.216:8333 -103.122.247.102:8333 -103.129.13.45:8333 -103.198.192.14:20008 -103.224.119.99:8333 -103.231.191.7:8333 -103.235.230.196:8333 -104.171.242.155:8333 -104.238.220.199:8333 -106.163.158.127:8333 -107.150.41.179:8333 -107.159.93.103:8333 -108.183.77.12:8333 -109.9.175.65:8333 -109.99.63.159:8333 -109.110.81.90:8333 -109.123.213.130:8333 -109.134.232.81:8333 -109.169.20.168:8333 -109.199.241.148:8333 -109.229.210.6:8333 -109.236.105.40:8333 -109.248.206.13:8333 -111.42.74.65:8333 -111.90.140.179:8333 -112.215.205.236:8333 -113.52.135.125:8333 -114.23.246.137:8333 -115.47.141.250:8885 -115.70.110.4:8333 -116.34.189.55:8333 -118.103.126.140:28333 -118.189.187.219:8333 -119.3.208.236:8333 -119.8.47.225:8333 -119.17.151.61:8333 -120.25.24.30:8333 -120.241.34.10:8333 -121.98.205.100:8333 -122.112.148.153:8339 -122.116.42.140:8333 -124.217.235.180:8333 -125.236.215.133:8333 -129.13.189.212:8333 -130.185.77.105:8333 -131.188.40.191:8333 -131.193.220.15:8333 -135.23.124.239:8333 -136.33.185.32:8333 -136.56.170.96:8333 -137.226.34.46:8333 -138.229.26.42:8333 -139.9.249.234:8333 -141.101.8.36:8333 -143.176.224.104:8333 -144.2.69.224:8333 -144.34.161.65:18333 -144.91.116.44:8333 -144.137.29.181:8333 -148.66.50.50:8335 -148.72.150.231:8333 -148.170.212.44:8333 -149.167.99.190:8333 -154.92.16.191:8333 -154.221.27.21:8333 -156.19.19.90:8333 -156.241.5.190:8333 -157.13.61.76:8333 -157.13.61.80:8333 -157.230.166.98:14391 -158.75.203.2:8333 -158.181.125.150:8333 -158.181.226.33:8333 -159.100.242.254:8333 -159.100.248.234:8333 -159.138.87.18:8333 -160.16.0.30:8333 -162.0.227.54:8333 -162.0.227.56:8333 -162.62.18.226:8333 -162.209.1.233:8333 -162.243.175.86:8333 -162.244.80.208:8333 -162.250.188.87:8333 -162.250.189.53:8333 -163.158.202.112:8333 -163.158.243.230:8333 -165.73.62.31:8333 -166.62.82.103:32771 -166.70.94.106:8333 -167.86.90.239:8333 -169.44.34.203:8333 -172.93.101.73:8333 -172.105.7.47:8333 -173.23.103.30:8000 -173.53.79.6:8333 -173.70.12.86:8333 -173.89.28.137:8333 -173.176.184.54:8333 -173.208.128.10:8333 -173.254.204.69:8333 -173.255.204.124:8333 -174.94.155.224:8333 -174.114.102.41:8333 -174.114.124.12:8333 -176.10.227.59:8333 -176.31.224.214:8333 -176.74.136.237:8333 -176.99.2.207:8333 -176.106.191.2:8333 -176.160.228.9:8333 -176.191.182.3:8333 -176.212.185.153:8333 -176.241.137.183:8333 -177.38.215.73:8333 -178.16.222.146:8333 -178.132.2.246:8333 -178.143.191.171:8333 -178.148.172.209:8333 -178.148.226.180:8333 -178.150.96.46:8333 -178.182.227.50:8333 -178.236.137.63:8333 -178.255.42.126:8333 -180.150.52.37:8333 -181.39.32.99:8333 -181.48.77.26:8333 -181.52.223.52:8333 -181.238.51.152:8333 -183.88.223.208:8333 -183.110.220.210:30301 -184.95.58.166:8336 -184.164.147.82:41333 -184.171.208.109:8333 -185.25.48.39:8333 -185.25.48.184:8333 -185.64.116.15:8333 -185.80.219.132:8333 -185.85.3.140:8333 -185.95.219.53:8333 -185.108.244.41:8333 -185.134.233.121:8333 -185.145.128.21:8333 -185.148.3.227:8333 -185.153.196.240:8333 -185.158.114.184:8333 -185.165.168.196:8333 -185.181.230.74:8333 -185.185.26.141:8111 -185.186.208.162:8333 -185.189.132.178:57780 -185.211.59.50:8333 -185.233.148.146:8333 -185.238.129.113:8333 -185.249.199.106:8333 -185.251.161.54:8333 -187.189.153.136:8333 -188.37.24.190:8333 -188.42.40.234:18333 -188.61.46.36:8333 -188.68.45.143:8333 -188.127.229.105:8333 -188.134.6.84:8333 -188.134.8.36:8333 -188.214.129.65:20012 -188.230.168.114:8333 -189.34.14.93:8333 -189.207.46.32:8333 -190.211.204.68:8333 -191.209.21.188:8333 -192.3.11.20:8333 -192.3.185.210:8333 -192.65.170.15:8333 -192.65.170.50:8333 -192.146.137.18:8333 -192.157.202.178:8333 -192.227.80.83:8333 -193.10.203.23:8334 -193.25.6.206:8333 -193.42.110.30:8333 -193.58.196.212:8333 -193.106.28.8:8333 -193.189.190.123:8333 -193.194.163.35:8333 -193.194.163.53:8333 -194.14.246.205:8333 -194.36.91.253:8333 -194.126.113.135:8333 -194.135.135.69:8333 -195.56.63.4:8333 -195.56.63.5:8333 -195.67.139.54:8333 -195.135.194.8:8333 -195.202.169.149:8333 -195.206.105.42:8333 -195.209.249.164:8333 -198.1.231.6:8333 -198.200.43.215:8333 -199.182.184.204:8333 -199.247.7.208:8333 -199.247.249.188:8333 -200.7.252.118:8333 -200.20.186.254:8333 -200.83.166.136:8333 -202.55.87.45:8333 -202.79.167.65:8333 -202.108.211.135:8333 -202.169.102.73:8333 -203.130.48.117:8885 -203.132.95.10:8333 -203.151.166.123:8333 -204.93.113.108:8333 -204.111.241.195:8333 -206.124.149.66:8333 -207.115.102.98:8333 -207.229.46.150:8333 -208.76.252.198:8333 -208.100.13.56:8333 -208.100.178.175:8333 -208.110.99.105:8333 -209.6.210.179:8333 -209.133.220.74:8333 -209.141.57.57:8333 -211.27.147.67:8333 -212.34.225.118:8333 -212.89.173.216:8333 -212.99.226.36:9020 -212.237.96.98:8333 -213.89.131.53:8333 -216.38.129.164:8333 -216.134.165.55:8333 -216.146.251.8:8333 -216.189.190.95:8333 -216.226.128.189:8333 -216.236.164.82:8333 -217.19.216.210:8333 -217.26.32.10:8333 -217.64.47.138:8333 -217.64.133.220:8333 -217.92.55.246:8333 -218.31.113.245:8333 -218.255.242.114:8333 -220.133.39.61:8333 -223.16.30.175:8333 -[2001:19f0:6001:306f:ec4:7aff:fe8f:66ec]:8333 -[2001:1bc0:cc::a001]:8333 -[2001:1c02:2f18:d00:b62e:99ff:fe49:d492]:8333 -[2001:4100:0:64::93]:8333 -[2001:4100:0:64:dcaf:afff:fe00:6707]:8333 -[2001:470:a:c13::2]:8333 -[2001:4801:7819:74:b745:b9d5:ff10:a61a]:8333 -[2001:4ba0:fffa:5d::93]:8333 -[2001:610:1908:ff01:f816:3eff:fe33:2e32]:8333 -[2001:638:a000:4140::ffff:191]:8333 -[2001:648:2800:131:4b1f:f6fc:20f7:f99f]:8333 -[2001:678:7dc:8::2]:8333 -[2001:678:cc8::1:10:88]:20008 -[2001:67c:1220:80c::93e5:dd2]:8333 -[2001:67c:1220:80c:e5dc:ad0c:9289:c28f]:8333 -[2001:67c:16dc:1201:5054:ff:fe17:4dac]:8333 -[2001:67c:2354:2::22]:8333 -[2001:67c:26b4:12:7ae3:b5ff:fe04:6f9c]:8333 -[2001:67c:2f0::20:fa]:8333 -[2001:718:801:311:5054:ff:fe19:c483]:8333 -[2001:8d8:87c:7c00::99:3c1]:8333 -[2001:8f1:1404:3700:8e49:715a:2e09:b634]:9444 -[2001:b07:5d29:99a5:194b:3874:d65e:a90d]:8333 -[2001:ba8:1f1:f0fe::2]:8333 -[2001:bc8:1200:0:dac4:97ff:fe2a:3554]:20008 -[2001:da8:100d:22:10fa:d85f:10f2:21fd]:8333 -[2001:da8:8001:7a39:f035:7d:b99f:eb79]:8333 -[2001:e42:103:100::30]:8333 -[2400:2412:103:c900:825:8f20:eaff:65c2]:8333 -[2400:4052:e20:4f00:69fe:bb33:7b1c:a1ca]:8333 -[2401:1800:7800:105:be76:4eff:fe1c:b35]:8333 -[2401:3900:2:1::2]:8333 -[2401:b140::44:150]:8333 -[2401:d002:4402:0:8f28:591a:6ea0:c683]:8333 -[2403:6200:8821:3d68:195b:87e9:6819:d5c8]:8333 -[2405:6580:2140:3a00:c28c:983:364b:5d70]:8333 -[2405:9800:b911:a18a:58eb:cd3c:9d82:ea4a]:8333 -[2405:aa00:2::40]:8333 -[2409:10:ca20:1df0:224:e8ff:fe1f:60d9]:8333 -[2409:8a1e:a9af:3660:1c5a:5b6b:8a2d:9848]:8333 -[2409:8a1e:a9af:3660:404:39ba:88f2:e8df]:8333 -[240b:10:9141:400:49b4:3a2e:1e5:84c]:8333 -[240d:1a:759:6000:a7b1:451a:8874:e1ac]:8333 -[240d:1a:759:6000:ddab:3141:4da0:8878]:8333 -[2600:8805:2400:14e:12dd:b1ff:fef2:3013]:8333 -[2601:602:8d80:b63:dc3e:24ff:fe92:5eb]:8333 -[2602:ffb6:4:2798:f816:3eff:fe2f:5441]:8333 -[2602:ffb6:4:739e:f816:3eff:fe00:c2b3]:8333 -[2602:ffb8::208:72:57:200]:8333 -[2604:1380:4111:9300::1]:8333 -[2604:4300:a:2e:21b:21ff:fe11:392]:8333 -[2604:4500::2e06]:8112 -[2604:5500:706a:4000:fc79:b9bb:1d7:c325]:8333 -[2604:5500:c134:4000::3fc]:32797 -[2604:6800:5e11:162:5c8f:d2ff:fe26:146f]:8333 -[2605:4d00::50]:8333 -[2605:6400:20:13bf:df1d:181c:83bb:22e8]:8333 -[2605:ae00:203::203]:8333 -[2605:c000:2a0a:1::102]:8333 -[2607:f2c0:f00e:300::54]:8333 -[2607:f2f8:ad40:bc1::1]:8333 -[2607:f470:8:1048:ae1f:6bff:fe70:7240]:8333 -[2607:ff28:800f:97:225:90ff:fe75:1110]:8333 -[2620:11c:5001:1118:d267:e5ff:fee9:e673]:8333 -[2620:6e:a000:2001::6]:8333 -[2804:14d:4c93:9809:9769:da80:1832:3480]:8333 -[2a00:1328:e101:c00::163]:8333 -[2a00:1398:4:2a03:215:5dff:fed6:1033]:8333 -[2a00:13a0:3015:1:85:14:79:26]:8333 -[2a00:1630:14::101]:8333 -[2a00:1768:2001:27::ef6a]:8333 -[2a00:1828:a004:2::666]:8333 -[2a00:1838:36:17::38cb]:8333 -[2a00:1838:36:7d::d3c6]:8333 -[2a00:1c10:2:709:58f7:e0ff:fe24:a0ba]:22220 -[2a00:1c10:2:709::217]:22220 -[2a00:1f40:5001:100::31]:8333 -[2a00:6020:1395:1400:baf7:2d43:60b3:198b]:8333 -[2a00:7c80:0:10b::3faf]:8333 -[2a00:8a60:e012:a00::21]:8333 -[2a00:ab00:603:84::3]:8333 -[2a00:bbe0:cc:0:62a4:4cff:fe23:7510]:8333 -[2a00:ca8:a1f:3025:f949:e442:c940:13e8]:8333 -[2a00:d2a0:a:3d00:1cdf:38bb:a7d6:c251]:8333 -[2a00:d880:11::20e]:8333 -[2a00:ec0:7207:9100:5f8f:25dd:2574:3982]:8333 -[2a00:f820:433::36]:8333 -[2a01:138:a017:b018::42]:8333 -[2a01:430:17:1::ffff:1153]:8333 -[2a01:490:16:301::2]:8333 -[2a01:4b00:807c:1b00:cda1:c6a:2bad:2418]:8333 -[2a01:4b00:80e7:5405::1]:8333 -[2a01:4f8:192:4212::2]:8433 -[2a01:7a0:2:137c::3]:8333 -[2a01:7a7:2:1467:ec4:7aff:fee2:5690]:8333 -[2a01:7c8:d002:10f:5054:ff:fe5c:dac7]:8333 -[2a01:7c8:d002:318:5054:ff:febe:cbb1]:8333 -[2a01:8740:1:ffc5::8c6a]:8333 -[2a01:cb00:f98:ca00:5054:ff:fed4:763d]:8333 -[2a01:cb14:cf6:bc00:21e5:f12e:32c8:145]:8333 -[2a01:d0:0:1c::245]:8333 -[2a01:d0:bef2::12]:8333 -[2a01:e35:2e40:6830:211:32ff:fea6:de3d]:8333 -[2a02:1205:c6aa:60c0:70d8:aaee:a82d:993c]:8333 -[2a02:169:502::614]:8333 -[2a02:180:1:1::5b8f:538c]:8333 -[2a02:348:62:5ef7::1]:8333 -[2a02:390:9000:0:218:7dff:fe10:be33]:8333 -[2a02:7aa0:1619::adc:8de0]:8333 -[2a02:7b40:b0df:8925::1]:8333 -[2a02:7b40:b905:37db::1]:8333 -[2a02:810d:8cbf:f3a8:96c6:91ff:fe17:ae1d]:8333 -[2a02:8389:1c0:9680:201:2eff:fe82:b3cc]:8333 -[2a02:a454:a516:1:517:928:7e0d:957c]:8333 -[2a02:af8:fab0:804:151:236:34:161]:8333 -[2a02:af8:fab0:808:85:234:145:132]:8333 -[2a02:e00:fff0:1e2::a]:8333 -[2a03:2260:3006:d:d307:5d1d:32ca:1fe8]:8333 -[2a03:6000:870:0:46:23:87:218]:8333 -[2a03:9da0:f6:1::2]:8333 -[2a03:c980:db:47::]:8333 -[2a03:e2c0:1ce::2]:8333 -[2a04:3544:1000:1510:706c:abff:fe6c:501c]:8333 -[2a04:52c0:101:383::2a87]:8333 -[2a04:52c0:101:3fb::4c27]:8333 -[2a04:ee41:83:50df:d908:f71d:2a86:b337]:8333 -[2a05:6d40:b94e:d100:225:90ff:fe0d:cfc2]:8333 -[2a05:e5c0:0:100:250:56ff:feb9:d6cb]:8333 -[2a05:fc87:1:6::2]:8333 -[2a05:fc87:4::8]:8333 -[2a07:5741:0:115d::1]:8333 -[2a07:a880:4601:1062:b4b4:bd2a:39d4:7acf]:51401 -[2a07:abc4::1:946]:8333 -[2a07:b400:1:34c::2:1002]:8333 -[2a0a:8c41::b4]:8333 -[2a0a:c801:1:7::183]:8333 -[2a0b:ae40:3:4a0a::15]:8333 -[2a0f:df00:0:254::46]:8333 -[2c0f:f598:5:1:1001::1]:8333 -[2c0f:fce8:0:400:b7c::1]:8333 - -# manually added 2021-03 for minimal torv3 bootstrap support -2g5qfdkn2vvcbqhzcyvyiitg4ceukybxklraxjnu7atlhd22gdwywaid.onion:8333 -2jmtxvyup3ijr7u6uvu7ijtnojx4g5wodvaedivbv74w4vzntxbrhvad.onion:8333 -37m62wn7dz3uqpathpc4qfmgrbupachj52nt3jbtbjugpbu54kbud7yd.onion:8333 -5g72ppm3krkorsfopcm2bi7wlv4ohhs4u4mlseymasn7g7zhdcyjpfid.onion:8333 -7cgwjuwi5ehvcay4tazy7ya6463bndjk6xzrttw5t3xbpq4p22q6fyid.onion:8333 -7pyrpvqdhmayxggpcyqn5l3m5vqkw3qubnmgwlpya2mdo6x7pih7r7id.onion:8333 -b64xcbleqmwgq2u46bh4hegnlrzzvxntyzbmucn3zt7cssm7y4ubv3id.onion:8333 -ejxefzf5fpst4mg2rib7grksvscl7p6fvjp6agzgfc2yglxnjtxc3aid.onion:8333 -fjdyxicpm4o42xmedlwl3uvk5gmqdfs5j37wir52327vncjzvtpfv7yd.onion:8333 -fpz6r5ppsakkwypjcglz6gcnwt7ytfhxskkfhzu62tnylcknh3eq6pad.onion:8333 -fzhn4uoxfbfss7h7d6ffbn266ca432ekbbzvqtsdd55ylgxn4jucm5qd.onion:8333 -gxo5anvfnffnftfy5frkgvplq3rpga2ie3tcblo2vl754fvnhgorn5yd.onion:8333 -ifdu5qvbofrt4ekui2iyb3kbcyzcsglazhx2hn4wfskkrx2v24qxriid.onion:8333 -itz3oxsihs62muvknc237xabl5f6w6rfznfhbpayrslv2j2ubels47yd.onion:8333 -lrjh6fywjqttmlifuemq3puhvmshxzzyhoqx7uoufali57eypuenzzid.onion:8333 -m7cbpjolo662uel7rpaid46as2otcj44vvwg3gccodnvaeuwbm3anbyd.onion:8333 -opnyfyeiibe5qo5a3wbxzbb4xdiagc32bbce46owmertdknta5mi7uyd.onion:8333 -owjsdxmzla6d7lrwkbmetywqym5cyswpihciesfl5qdv2vrmwsgy4uqd.onion:8333 -q7kgmd7n7h27ds4fg7wocgniuqb3oe2zxp4nfe4skd5da6wyipibqzqd.onion:8333 -rp7k2go3s5lyj3fnj6zn62ktarlrsft2ohlsxkyd7v3e3idqyptvread.onion:8333 -sys54sv4xv3hn3sdiv3oadmzqpgyhd4u4xphv4xqk64ckvaxzm57a7yd.onion:8333 -tddeij4qigtjr6jfnrmq6btnirmq5msgwcsdpcdjr7atftm7cxlqztid.onion:8333 -vi5bnbxkleeqi6hfccjochnn65lcxlfqs4uwgmhudph554zibiusqnad.onion:8333 -xqt25cobm5zqucac3634zfght72he6u3eagfyej5ellbhcdgos7t2had.onion:8333 - -# manually added 2021-08 for minimal i2p bootstrap support -4hllr6w55mbtemb3ebvlzl4zj6qke4si7zcob5qdyg63mjgq624a.b32.i2p:0 -6s33jtpvwzkiej3nff5qm72slgqljxhxn62hdt6m7nvynqsxqdda.b32.i2p:0 -a5qsnv3maw77mlmmzlcglu6twje6ttctd3fhpbfwcbpmewx6fczq.b32.i2p:0 -bitcornrd36coazsbzsz4pdebyzvaplmsalq4kpoljmn6cg6x5zq.b32.i2p:0 -c4gfnttsuwqomiygupdqqqyy5y5emnk5c73hrfvatri67prd7vyq.b32.i2p:0 -dhtq2p76tyhi442aidb3vd2bv7yxxjuddpb2jydnnrl2ons5bhha.b32.i2p:0 -gehtac45oaghz54ypyopim64mql7oad2bqclla74l6tfeolzmodq.b32.i2p:0 -h3r6bkn46qxftwja53pxiykntegfyfjqtnzbm6iv6r5mungmqgmq.b32.i2p:0 -hnbbyjpxx54623l555sta7pocy3se4sdgmuebi5k6reesz5rjp6q.b32.i2p:0 -i3hcdakiz2tyvggkwefvdjoi7444kgvd2mbdfizjvv43q7zukezq.b32.i2p:0 -jz3s4eurm5vzjresf4mwo7oni4bk36daolwxh4iqtewakylgkxmq.b32.i2p:0 -kokkmpquqlkptu5hkmzqlttsmtwxicldr4so7wqsufk6bwf32nma.b32.i2p:0 -kvrde7mcgjhz3xzeltwy4gs2rxdfbnbs2wc67mh2pt43wjmjnmbq.b32.i2p:0 -shh2ewyegnuwnmdse5kl5toybdvzkvk2yj4zcowz6iwhhh3ykdfa.b32.i2p:0 -wwbw7nqr3ahkqv62cuqfwgtneekvvpnuc4i4f6yo7tpoqjswvcwa.b32.i2p:0 -zsxwyo6qcn3chqzwxnseusqgsnuw3maqnztkiypyfxtya4snkoka.b32.i2p:0 +5.188.104.245:9401 +20.54.215.29:9401 +27.125.190.37:9401 +31.25.241.224:9401 +40.76.174.245:9401 +50.220.121.211:6138 +51.15.134.227:9401 +51.15.229.159:9401 +51.210.34.62:2592 +52.194.165.3:9401 +52.196.56.1:9401 +66.151.242.154:9401 +83.221.211.116:9401 +86.105.51.204:9401 +89.151.191.206:9401 +95.217.78.80:9401 +102.67.136.247:9401 +108.61.183.37:9401 +115.187.65.96:9401 +118.27.30.112:9401 +118.27.118.250:9401 +118.240.211.146:9401 +124.208.29.53:9401 +133.167.69.247:9401 +133.242.175.106:9401 +138.68.233.135:9401 +145.239.0.106:9401 +147.192.120.14:9401 +153.126.176.183:9401 +160.16.0.30:9401 +160.16.241.100:9401 +176.9.101.7:9401 +178.238.224.213:9401 +182.254.137.231:9401 +185.174.173.20:9401 +207.148.112.22:9401 +210.136.42.253:9401 +219.94.252.199:9401 +[2001:41d0:700:46a::]:9401 +[2001:bc8:4400:2b00::1d:101]:9401 +[2001:e42:102:1505:160:16:59:6]:9401 +[2001:e42:102:1533:160:16:115:120]:9401 +[2001:e42:102:1822:160:16:241:100]:9401 +[2001:e42:103:100::30]:9401 +[2400:2412:720:9100:ec40:a6e5:549:f941]:9401 +[2400:2650:2320:6100:f577:a0d:a1d2:b4ba]:9401 +[2400:4052:e20:4f00:69fe:bb33:7b1c:a1ca]:9401 +[2403:3a00:202:1202:219:94:252:199]:9401 +[240b:10:c100:a800:f1da:ef5d:9e05:ef41]:9401 +[240b:11:940:be00:e143:7b82:413e:f168]:9401 +[240b:12:4900:e100:d5f2:f6ef:a1c0:8e84]:9401 +[240d:1a:1ff:8f00:782e:809a:4711:da72]:9401 +[2a01:4f8:151:430c::2]:9401 +3ntwsmcygwgem7tn.onion:9401 +44ngmr6t6fihlibi.onion:8333 +6hy7lk263xu2pfey.onion:9401 +bf6wbngwi5hyn2rc.onion:9401 +bnfggqoydm45uway.onion:9401 +ffnszymfj2rbhgsr.onion:9401 +i6x35txiuxfg2xhf.onion:9401 +jcrdbinamw6jov4c.onion:9401 +kwtz24xuzwp25m44.onion:9401 +mmhw5y4mquh5jkjy.onion:8333 +v6g5w46hgahte7ff.onion:9401 diff --git a/contrib/seeds/nodes_test.txt b/contrib/seeds/nodes_test.txt index 118bec280e..3b992c1543 100644 --- a/contrib/seeds/nodes_test.txt +++ b/contrib/seeds/nodes_test.txt @@ -1,16 +1,8 @@ -# List of fixed seed nodes for testnet - -# Onion nodes -35k2va6vyw4oo5ly2quvcszgdqr56kcnfgcqpnpcffut4jn3mhhwgbid.onion:18333 -blo2esfvk2rr7sr4jspmu3vt2vpgr5rigflsj645fnku7v4qmljurtid.onion:18333 -fuckcswupr5rmlvx2kqqrrosxvjyong4hatmuvxsvtcwe4dsh5rus7qd.onion:18333 -gblylyacjlitd2ywdmo2qqylwtdky7kgeqfvlhiw4zdag4x62tx54hyd.onion:18333 -gzwpduv33l7yze3bcdzj3inebiyjwddjnwvnjhh5wvnv4me76mjt2kad.onion:18333 -h3rphzofxzq52tb63mg5f6kc4my3fkcrgh3m5qryeatts43iljbawiid.onion:18333 -kf4qlhek34b3kgyxyodlmvgm4bxfrjsbjtgayyaiuyhr2eoyfgtm3bad.onion:18333 -mc7k47ndjvvhcgs54wmjzxvate4rtuybbjoryikdssjhcxlx27psbyqd.onion:18333 -mrhiniicugfo7mgrwv3wtolk3tptlcw2uq7ih6sq43fa4k4zbilut3yd.onion:18333 -uiudyws3qizgmepfoh7wwjmsoxoxut4qrmotjjhrn247xnjopr7sfcid.onion:18333 -zc2wvoqcezcrf64trji6jmhtss34a5ds5ntzdhqegzvex3ynrd7nxcad.onion:18333 -zd5m3dgdn46naj36pxvvcalfw2paecle6sdxq64ptwxtxjomkywpklqd.onion:18333 - +153.120.39.89:19403 +150.95.174.118:19403 +54.168.44.205:19403 +62.77.155.31:19403 +160.16.208.215:19403 +13.231.140.70:19403 +[2001:bc8:47a4:5e::1]:19403 +st6b252yoffjzt5d.onion:12920 diff --git a/contrib/signet/miner b/contrib/signet/miner index 8164370aea..d31acecd82 100755 --- a/contrib/signet/miner +++ b/contrib/signet/miner @@ -323,7 +323,7 @@ def next_block_delta(last_nbits, last_hash, ultimate_target, do_poisson): # 4) if doing poisson, use the last hash to pick a uniformly random number in [0,1), and work out a random multiplier to vary the average by # 5) cap the resulting interval between 1 second and 1 hour to avoid extremes - INTERVAL = 600.0*2016/2015 # 10 minutes, adjusted for the off-by-one bug + INTERVAL = 90.0*2016/2015 # 1.5 minutes, adjusted for the off-by-one bug current_target = nbits_to_target(last_nbits) retarget_factor = ultimate_target / current_target @@ -371,7 +371,7 @@ def do_generate(args): if args.nbits is not None: logging.error("Cannot specify --nbits and --min-nbits") return 1 - args.nbits = "1e0377ae" + args.nbits = "1f060000" logging.info("Using nbits=%s" % (args.nbits)) if args.set_block_time is None: @@ -513,7 +513,7 @@ def do_generate(args): next_is_mine = next_block_is_mine(block.hash, my_blocks) logging.debug("Block hash %s payout to %s", block.hash, reward_addr) - logging.info("Mined %s at height %d; next in %s (%s)", bstr, tmpl["height"], seconds_to_hms(next_delta), ("mine" if next_is_mine else "backup")) + logging.info("Mined %s at height %d; bits %s; next in %s (%s)", bstr, tmpl["height"], tmpl["bits"], seconds_to_hms(next_delta), ("mine" if next_is_mine else "backup")) if r != "": logging.warning("submitblock returned %s for height %d hash %s", r, tmpl["height"], block.hash) lastheader = block.hash diff --git a/contrib/zmq/zmq_sub.py b/contrib/zmq/zmq_sub.py index 757f2859f9..2fc90d4f3a 100755 --- a/contrib/zmq/zmq_sub.py +++ b/contrib/zmq/zmq_sub.py @@ -8,11 +8,11 @@ Monacoin should be started with the command line arguments: monacoind -testnet -daemon \ - -zmqpubrawtx=tcp://127.0.0.1:28332 \ - -zmqpubrawblock=tcp://127.0.0.1:28332 \ - -zmqpubhashtx=tcp://127.0.0.1:28332 \ - -zmqpubhashblock=tcp://127.0.0.1:28332 \ - -zmqpubsequence=tcp://127.0.0.1:28332 + -zmqpubrawtx=tcp://127.0.0.1:28402 \ + -zmqpubrawblock=tcp://127.0.0.1:28402 \ + -zmqpubhashtx=tcp://127.0.0.1:28402 \ + -zmqpubhashblock=tcp://127.0.0.1:28402 \ + -zmqpubsequence=tcp://127.0.0.1:28402 We use the asyncio library here. `self.handle()` installs itself as a future at the end of the function. Since it never returns with the event diff --git a/src/Makefile.am b/src/Makefile.am index 423f039b43..9d5aa8a48f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -460,6 +460,9 @@ crypto_libmonacoin_crypto_base_a_SOURCES = \ crypto/muhash.cpp \ crypto/ripemd160.cpp \ crypto/ripemd160.h \ + crypto/scrypt.cpp \ + crypto/scrypt-sse2.cpp \ + crypto/scrypt.h \ crypto/sha1.cpp \ crypto/sha1.h \ crypto/sha256.cpp \ @@ -528,7 +531,26 @@ libmonacoin_consensus_a_SOURCES = \ uint256.h \ util/strencodings.cpp \ util/strencodings.h \ - version.h + version.h \ + crypto/Lyra2RE/Lyra2RE.c \ + crypto/Lyra2RE/Lyra2RE.h \ + crypto/Lyra2RE/Lyra2.c \ + crypto/Lyra2RE/Lyra2.h \ + crypto/Lyra2RE/Sponge.c \ + crypto/Lyra2RE/Sponge.h \ + crypto/Lyra2RE/blake.c \ + crypto/Lyra2RE/sph_blake.h \ + crypto/Lyra2RE/groestl.c \ + crypto/Lyra2RE/sph_groestl.h \ + crypto/Lyra2RE/keccak.c \ + crypto/Lyra2RE/sph_keccak.h \ + crypto/Lyra2RE/skein.c \ + crypto/Lyra2RE/sph_skein.h \ + crypto/Lyra2RE/cubehash.c \ + crypto/Lyra2RE/sph_cubehash.h \ + crypto/Lyra2RE/bmw.c \ + crypto/Lyra2RE/sph_bmw.h \ + crypto/Lyra2RE/sph_types.h # common: shared between monacoind, and monacoin-qt and non-server tools libmonacoin_common_a_CPPFLAGS = $(AM_CPPFLAGS) $(MONACOIN_INCLUDES) diff --git a/src/amount.h b/src/amount.h index 990926b0e4..5f8bf13bf1 100644 --- a/src/amount.h +++ b/src/amount.h @@ -16,13 +16,13 @@ static const CAmount COIN = 100000000; /** No amount larger than this (in satoshi) is valid. * * Note that this constant is *not* the total money supply, which in Monacoin - * currently happens to be less than 21,000,000 MONA for various reasons, but + * currently happens to be less than 105,120,000 MONA for various reasons, but * rather a sanity check. As this sanity check is used by consensus-critical * validation code, the exact value of the MAX_MONEY constant is consensus * critical; in unusual circumstances like a(nother) overflow bug that allowed * for the creation of coins out of thin air modification could lead to a fork. * */ -static const CAmount MAX_MONEY = 21000000 * COIN; +static const CAmount MAX_MONEY = 105120000 * COIN; inline bool MoneyRange(const CAmount& nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } #endif // MONACOIN_AMOUNT_H diff --git a/src/chain.h b/src/chain.h index 9818a875a4..facc1d7322 100644 --- a/src/chain.h +++ b/src/chain.h @@ -247,6 +247,11 @@ class CBlockIndex { return *phashBlock; } + + uint256 GetBlockPoWHash() const + { + return GetBlockHeader().GetPoWHash(); + } /** * Check whether this block's and all previous blocks' transactions have been diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 39cc3d40b0..7e2ecbef72 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -50,8 +50,8 @@ static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesi */ static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward) { - const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; - const CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; + const char* pszTimestamp = "Dec. 31th 2013 Japan, The winning numbers of the 2013 Year-End Jumbo Lottery:23-130916"; + const CScript genesisOutputScript = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG; return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward); } @@ -64,22 +64,23 @@ class CMainParams : public CChainParams { strNetworkID = CBaseChainParams::MAIN; consensus.signet_blocks = false; consensus.signet_challenge.clear(); - consensus.nSubsidyHalvingInterval = 210000; - consensus.BIP16Exception = uint256S("0x00000000000002dc756eebf4f49723ed8d30cc28a5f108eb94b1ba88ac4f9c22"); - consensus.BIP34Height = 227931; - consensus.BIP34Hash = uint256S("0x000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8"); - consensus.BIP65Height = 388381; // 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0 - consensus.BIP66Height = 363725; // 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931 - consensus.CSVHeight = 419328; // 000000000000000004a1b34462cb8aeebd5799177f7a29cf28f2d1961716b5b5 - consensus.SegwitHeight = 481824; // 0000000000000000001c8018d9cb3b742ef25114f27563e3fc4a1902167f9893 - consensus.MinBIP9WarningHeight = 483840; // segwit activation height + miner confirmation window - consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks - consensus.nPowTargetSpacing = 10 * 60; + consensus.nSubsidyHalvingInterval = 1051200; + consensus.BIP16Exception = uint256S("0xff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6"); + consensus.BIP34Height = 0; + consensus.BIP34Hash = uint256S("ff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6"); + consensus.BIP65Height = 977759; + consensus.BIP66Height = 977759; + consensus.CSVHeight = 977760; // 00cdaf76200737d9a7f94cc058fb132868c18c50c0342c77fc5a5bf0ee78be0c + consensus.SegwitHeight = 977760; // 00cdaf76200737d9a7f94cc058fb132868c18c50c0342c77fc5a5bf0ee78be0c + consensus.MinBIP9WarningHeight = 987840; // segwit activation height + miner confirmation window + consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.nPowTargetTimespan = 1.1 * 24 * 60 * 60; // 1.1 days + consensus.nPowTargetSpacing = 1.5 * 60; // 1.5 minutes + consensus.nPowTargetTimespanDigishield = 1.5 * 60; consensus.fPowAllowMinDifficultyBlocks = false; consensus.fPowNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 1815; // 90% of 2016 - consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing + consensus.nRuleChangeActivationThreshold = 7560; // 75% of 10080 + consensus.nMinerConfirmationWindow = 10080; // 3.5 days / nPowTargetSpacing * 4 * 0.75 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -87,54 +88,52 @@ class CMainParams : public CChainParams { // Deployment of Taproot (BIPs 340-342) consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2; - consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = 1619222400; // April 24th, 2021 - consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1628640000; // August 11th, 2021 - consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 709632; // Approximately November 12th, 2021 + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay + + consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000001027706bee55d78e52"); + consensus.defaultAssumeValid = uint256S("0xc764cd31edc53344e215e7e5dee4e668eecf71bf6064c9ddb9112b7c2ba79f78"); // 2940000 - consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000001fa4663bbbe19f82de910280"); - consensus.defaultAssumeValid = uint256S("0x00000000000000000008a89e854d57e5667df88f1cdef6fde2fbca1de5b639ad"); // 691719 + // Hardfork params + nSwitchKGWblock = 80000; + nSwitchDIGIblock = 140000; + nSwitchLyra2REv2_DGW = 450000; /** * The message start string is designed to be unlikely to occur in normal data. * The characters are rarely used upper ASCII, not valid as UTF-8, and produce * a large 32-bit integer with any alignment. */ - pchMessageStart[0] = 0xf9; - pchMessageStart[1] = 0xbe; - pchMessageStart[2] = 0xb4; - pchMessageStart[3] = 0xd9; - nDefaultPort = 8333; + pchMessageStart[0] = 0xfb; + pchMessageStart[1] = 0xc0; + pchMessageStart[2] = 0xb6; + pchMessageStart[3] = 0xdb; + nDefaultPort = 9401; nPruneAfterHeight = 100000; - m_assumed_blockchain_size = 420; - m_assumed_chain_state_size = 6; + m_assumed_blockchain_size = 22; + m_assumed_chain_state_size = 3; - genesis = CreateGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, 50 * COIN); + genesis = CreateGenesisBlock(1388479472, 1234534, 0x1e0ffff0, 1, 50 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")); - assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); + assert(consensus.hashGenesisBlock == uint256S("0xff9f1c0116d19de7c9963845e129f9ed1bfc0b376eb54fd7afa42e0d418c8bb6")); + assert(genesis.hashMerkleRoot == uint256S("0x35e405a8a46f4dbc1941727aaf338939323c3b955232d0317f8731fe07ac4ba6")); // Note that of those which support the service bits prefix, most only support a subset of // possible options. // This is fine at runtime as we'll fall back to using them as an addrfetch if they don't support the // service bits we want, but we should get them updated to support all service bits wanted by any // release ASAP to avoid it where possible. - vSeeds.emplace_back("seed.monacoin.sipa.be"); // Pieter Wuille, only supports x1, x5, x9, and xd - vSeeds.emplace_back("dnsseed.bluematt.me"); // Matt Corallo, only supports x9 - vSeeds.emplace_back("dnsseed.monacoin.dashjr.org"); // Luke Dashjr - vSeeds.emplace_back("seed.monacoinstats.com"); // Christian Decker, supports x1 - xf - vSeeds.emplace_back("seed.monacoin.jonasschnelli.ch"); // Jonas Schnelli, only supports x1, x5, x9, and xd - vSeeds.emplace_back("seed.btc.petertodd.org"); // Peter Todd, only supports x1, x5, x9, and xd - vSeeds.emplace_back("seed.monacoin.sprovoost.nl"); // Sjors Provoost - vSeeds.emplace_back("dnsseed.emzy.de"); // Stephan Oeste - vSeeds.emplace_back("seed.monacoin.wiz.biz"); // Jason Maurice - - base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,0); - base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,5); - base58Prefixes[SECRET_KEY] = std::vector(1,128); + vSeeds.emplace_back("dnsseed.monacoin.org"); + vSeeds.emplace_back("dnsseed.tamami-foundation.org"); + + base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,50); // M + base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,55); // P + base58Prefixes[SECRET_KEY] = std::vector(1,176); base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E}; base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4}; - bech32_hrp = "bc"; + bech32_hrp = "mona"; vFixedSeeds = std::vector(std::begin(chainparams_seed_main), std::end(chainparams_seed_main)); @@ -145,19 +144,20 @@ class CMainParams : public CChainParams { checkpointData = { { - { 11111, uint256S("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")}, - { 33333, uint256S("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")}, - { 74000, uint256S("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")}, - {105000, uint256S("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")}, - {134444, uint256S("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")}, - {168000, uint256S("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")}, - {193000, uint256S("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")}, - {210000, uint256S("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")}, - {216116, uint256S("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")}, - {225430, uint256S("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")}, - {250000, uint256S("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")}, - {279000, uint256S("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")}, - {295000, uint256S("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")}, + { 1500, uint256S("0x9f42d51d18d0a8914a00664c433a0ca4be3eed02f9374d790bffbd3d3053d41d") }, + { 4000, uint256S("0x2c60edac7d9f44d90d1e218af2a8085e78b735185c5bf42f9fe9dbd0e604c97b") }, + { 8000, uint256S("0x61d4d053b1a4c6deb4c7e806cedd876f25b51da6c51b209109579c7b9892e5c2") }, + { 16000, uint256S("0x3c4a8887bb3ae0599abfefe765f7c911fbfe98b3f23d7f70b05bf49cf62ebdaf") }, + { 32000, uint256S("0xc0703986c1c6a9052478db5e52432e5a1e55d6b6362b85f0ffdbb61ce3311b77") }, + { 58700, uint256S("0xa9c5d9878864b77ba52b068787b83ce2fcf526c5899f40af51c9d441eeb4c84d") }, + { 80000, uint256S("0xc99b83da7328b58251d16f4646da222b0280f180bd208efa5e3256c9eb6ea2be") }, + { 115000, uint256S("0x75e642c003e5bd748b679472e981b7b2f81f344b3f197029f84470256cef33e4") }, + { 189250, uint256S("0x1bea3d5c25a8097eef2e70ece4beb6c502b895fe00056552948309beb3497c99") }, + { 300000, uint256S("0x11095515590421444ba29396d9122c234baced79be8b32604acc37cf094558ab") }, + { 444000, uint256S("0x3ed05516cdce4db93b135189592c7e2b37d768f99a1819a1d2ea3a8e5b8439a8") }, + { 904000, uint256S("0x353f5b7f9440e1d830bd1c265c69fb0e7c7988e343b2202a704406d04a8cd02e") }, + { 1377000, uint256S("0x8ee1fd0a836d804422a100fb5c1ca7626c7a35b492c234146797f4a50f38eea8") }, + { 1639000, uint256S("0x99274770cb96287f9f105f6dd5512795ee87ec68ddd06699f90c0d574a07aa4c") }, } }; @@ -166,10 +166,10 @@ class CMainParams : public CChainParams { }; chainTxData = ChainTxData{ - // Data from RPC: getchaintxstats 4096 00000000000000000008a89e854d57e5667df88f1cdef6fde2fbca1de5b639ad - /* nTime */ 1626697539, - /* nTxCount */ 656509474, - /* dTxRate */ 2.424920418708139, + // Data from RPC: getchaintxstats 4096 0000000000000000000b9d2ec5a352ecba0592946514a92f14319dc2b367fc72 + /* nTime */ 1555770134, + /* nTxCount */ 4266356, + /* dTxRate */ 0.02, }; } }; @@ -183,22 +183,23 @@ class CTestNetParams : public CChainParams { strNetworkID = CBaseChainParams::TESTNET; consensus.signet_blocks = false; consensus.signet_challenge.clear(); - consensus.nSubsidyHalvingInterval = 210000; - consensus.BIP16Exception = uint256S("0x00000000dd30457c001f4095d208cc1296b0eed002427aa599874af7a432b105"); - consensus.BIP34Height = 21111; - consensus.BIP34Hash = uint256S("0x0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8"); - consensus.BIP65Height = 581885; // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6 - consensus.BIP66Height = 330776; // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182 - consensus.CSVHeight = 770112; // 00000000025e930139bac5c6c31a403776da130831ab85be56578f3fa75369bb - consensus.SegwitHeight = 834624; // 00000000002b980fcd729daaa248fd9316a5200e9b367f4ff2c42453e84201ca - consensus.MinBIP9WarningHeight = 836640; // segwit activation height + miner confirmation window - consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks - consensus.nPowTargetSpacing = 10 * 60; + consensus.nSubsidyHalvingInterval = 1051200; + consensus.BIP16Exception = uint256S("0xa2b106ceba3be0c6d097b2a6a6aacf9d638ba8258ae478158f449c321061e0b2"); + consensus.BIP34Height = 0; + consensus.BIP34Hash = uint256S("a2b106ceba3be0c6d097b2a6a6aacf9d638ba8258ae478158f449c321061e0b2"); + consensus.BIP65Height = -1; + consensus.BIP66Height = -1; + consensus.CSVHeight = 300; // 746481baefad145d7309a8b44dca1acce5d6442988afbae2595796cae9ae1eb2 + consensus.SegwitHeight = 300; // 746481baefad145d7309a8b44dca1acce5d6442988afbae2595796cae9ae1eb2 + consensus.MinBIP9WarningHeight = 400; // segwit activation height + miner confirmation window + consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.nPowTargetTimespan = 1.1 * 24 * 60 * 60; // 1.1 days + consensus.nPowTargetSpacing = 1.5 * 60; // 1.5 minutes + consensus.nPowTargetTimespanDigishield = 1.5 * 60; consensus.fPowAllowMinDifficultyBlocks = true; consensus.fPowNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 1512; // 75% for testchains - consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing + consensus.nRuleChangeActivationThreshold = 75; // 75% for testchains + consensus.nMinerConfirmationWindow = 100; // nPowTargetTimespan / nPowTargetSpacing consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -206,42 +207,45 @@ class CTestNetParams : public CChainParams { // Deployment of Taproot (BIPs 340-342) consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2; - consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = 1619222400; // April 24th, 2021 - consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1628640000; // August 11th, 2021 + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay - consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000005180c3bd8290da33a1a"); - consensus.defaultAssumeValid = uint256S("0x0000000000004ae2f3896ca8ecd41c460a35bf6184e145d91558cece1c688a76"); // 2010000 + consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000000535d5fc3c9d2"); + consensus.defaultAssumeValid = uint256S("0x96cf1e01433486c480434a1384d897b9c395ad41dc33b0ea2c0e7fdcee34cfcf"); // 500000 - pchMessageStart[0] = 0x0b; - pchMessageStart[1] = 0x11; - pchMessageStart[2] = 0x09; - pchMessageStart[3] = 0x07; - nDefaultPort = 18333; + // Hardfork params + nSwitchKGWblock = 10; + nSwitchDIGIblock = 20; + nSwitchLyra2REv2_DGW = 30; + + pchMessageStart[0] = 0xfd; + pchMessageStart[1] = 0xd2; + pchMessageStart[2] = 0xc8; + pchMessageStart[3] = 0xf1; + nDefaultPort = 19403; nPruneAfterHeight = 1000; - m_assumed_blockchain_size = 40; - m_assumed_chain_state_size = 2; + m_assumed_blockchain_size = 2; + m_assumed_chain_state_size = 1; - genesis = CreateGenesisBlock(1296688602, 414098458, 0x1d00ffff, 1, 50 * COIN); + genesis = CreateGenesisBlock(1488924140, 2122860, 0x1e0ffff0, 1, 50 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943")); - assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); + assert(consensus.hashGenesisBlock == uint256S("0xa2b106ceba3be0c6d097b2a6a6aacf9d638ba8258ae478158f449c321061e0b2")); + assert(genesis.hashMerkleRoot == uint256S("0x35e405a8a46f4dbc1941727aaf338939323c3b955232d0317f8731fe07ac4ba6")); vFixedSeeds.clear(); vSeeds.clear(); // nodes with support for servicebits filtering should be at the top - vSeeds.emplace_back("testnet-seed.monacoin.jonasschnelli.ch"); - vSeeds.emplace_back("seed.tbtc.petertodd.org"); - vSeeds.emplace_back("seed.testnet.monacoin.sprovoost.nl"); - vSeeds.emplace_back("testnet-seed.bluematt.me"); // Just a static list of stable node(s), only supports x9 + vSeeds.emplace_back("testnet-dnsseed.monacoin.org"); + vSeeds.emplace_back("testnet-dnsseed.tamami-foundation.org"); - base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,111); - base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,196); + base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,111); // m or n + base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,117); // p base58Prefixes[SECRET_KEY] = std::vector(1,239); base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; - bech32_hrp = "tb"; + bech32_hrp = "tmona"; vFixedSeeds = std::vector(std::begin(chainparams_seed_test), std::end(chainparams_seed_test)); @@ -252,7 +256,9 @@ class CTestNetParams : public CChainParams { checkpointData = { { - {546, uint256S("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")}, + { 0, uint256S("0xa2b106ceba3be0c6d097b2a6a6aacf9d638ba8258ae478158f449c321061e0b2") }, + { 290000, uint256S("0xcf8cd5c31a4a3d2e8edd22b38d0f9022fd944d41ea198ece4a009afa82186fac") }, + { 500000, uint256S("0x96cf1e01433486c480434a1384d897b9c395ad41dc33b0ea2c0e7fdcee34cfcf") }, } }; @@ -261,10 +267,10 @@ class CTestNetParams : public CChainParams { }; chainTxData = ChainTxData{ - // Data from RPC: getchaintxstats 4096 0000000000004ae2f3896ca8ecd41c460a35bf6184e145d91558cece1c688a76 - /* nTime */ 1625727096, - /* nTxCount */ 60408943, - /* dTxRate */ 0.08379062270367649, + // Data from RPC: getchaintxstats 4096 000000000000006433d1efec504c53ca332b64963c425395515b01977bd7b3b0 + /* nTime */ 1555327590, + /* nTxCount */ 505979, + /* dTxRate */ 0.007, }; } }; @@ -279,20 +285,17 @@ class SigNetParams : public CChainParams { vSeeds.clear(); if (!args.IsArgSet("-signetchallenge")) { - bin = ParseHex("512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"); - vSeeds.emplace_back("178.128.221.177"); - vSeeds.emplace_back("2a01:7c8:d005:390::5"); - vSeeds.emplace_back("v7ajjeirttkbnt32wpy3c6w3emwnfr3fkla7hpxcfokr3ysd3kqtzmqd.onion:38333"); + bin = ParseHex("51210231b5f51797712bf3fa79e32c1fcff8b569449f8251891ce89368ab67274771f22102c580aeea5ae388c0764a8cc17b34cbdafb91349dd3e135a92c7641807e5434e452ae"); - consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000000008546553c03"); - consensus.defaultAssumeValid = uint256S("0x000000187d4440e5bff91488b700a140441e089a8aaea707414982460edbfe54"); // 47200 + consensus.nMinimumChainWork = uint256{}; + consensus.defaultAssumeValid = uint256{}; // 0 m_assumed_blockchain_size = 1; m_assumed_chain_state_size = 0; chainTxData = ChainTxData{ - // Data from RPC: getchaintxstats 4096 000000187d4440e5bff91488b700a140441e089a8aaea707414982460edbfe54 - /* nTime */ 1626696658, - /* nTxCount */ 387761, - /* dTxRate */ 0.04035946932424404, + // Data from RPC: getchaintxstats 4096 0000002a1de0f46379358c1fd09906f7ac59adf3712323ed90eb59e4c183c020 + /* nTime */ 0, + /* nTxCount */ 0, + /* dTxRate */ 0, }; } else { const auto signet_challenge = args.GetArgs("-signetchallenge"); @@ -320,7 +323,7 @@ class SigNetParams : public CChainParams { strNetworkID = CBaseChainParams::SIGNET; consensus.signet_blocks = true; consensus.signet_challenge.assign(bin.begin(), bin.end()); - consensus.nSubsidyHalvingInterval = 210000; + consensus.nSubsidyHalvingInterval = 1051200; consensus.BIP16Exception = uint256{}; consensus.BIP34Height = 1; consensus.BIP34Hash = uint256{}; @@ -328,14 +331,15 @@ class SigNetParams : public CChainParams { consensus.BIP66Height = 1; consensus.CSVHeight = 1; consensus.SegwitHeight = 1; - consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks - consensus.nPowTargetSpacing = 10 * 60; + consensus.nPowTargetTimespan = 1.1 * 24 * 60 * 60; // 1.1 days + consensus.nPowTargetSpacing = 1.5 * 60; // 1.5 minutes + consensus.nPowTargetTimespanDigishield = 1.5 * 60; consensus.fPowAllowMinDifficultyBlocks = false; consensus.fPowNoRetargeting = false; - consensus.nRuleChangeActivationThreshold = 1815; // 90% of 2016 - consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing + consensus.nRuleChangeActivationThreshold = 75; // 75% of 100 + consensus.nMinerConfirmationWindow = 100; // nPowTargetTimespan / nPowTargetSpacing consensus.MinBIP9WarningHeight = 0; - consensus.powLimit = uint256S("00000377ae000000000000000000000000000000000000000000000000000000"); + consensus.powLimit = uint256S("000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -347,29 +351,34 @@ class SigNetParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay + // Hardfork params + nSwitchKGWblock = -1; + nSwitchDIGIblock = -1; + nSwitchLyra2REv2_DGW = 1; + // message start is defined as the first 4 bytes of the sha256d of the block script CHashWriter h(SER_DISK, 0); h << consensus.signet_challenge; uint256 hash = h.GetHash(); memcpy(pchMessageStart, hash.begin(), 4); - nDefaultPort = 38333; + nDefaultPort = 39403; nPruneAfterHeight = 1000; - genesis = CreateGenesisBlock(1598918400, 52613770, 0x1e0377ae, 1, 50 * COIN); + genesis = CreateGenesisBlock(1488924140, 2122860, 0x1e0ffff0, 1, 50 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6")); - assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); + assert(consensus.hashGenesisBlock == uint256S("0xa2b106ceba3be0c6d097b2a6a6aacf9d638ba8258ae478158f449c321061e0b2")); + assert(genesis.hashMerkleRoot == uint256S("0x35e405a8a46f4dbc1941727aaf338939323c3b955232d0317f8731fe07ac4ba6")); vFixedSeeds.clear(); - base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,111); - base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,196); + base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,111); // m or n + base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,117); // p base58Prefixes[SECRET_KEY] = std::vector(1,239); base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; - bech32_hrp = "tb"; + bech32_hrp = "tmona"; fDefaultConsistencyChecks = false; fRequireStandard = true; @@ -390,16 +399,17 @@ class CRegTestParams : public CChainParams { consensus.signet_challenge.clear(); consensus.nSubsidyHalvingInterval = 150; consensus.BIP16Exception = uint256(); - consensus.BIP34Height = 500; // BIP34 activated on regtest (Used in functional tests) + consensus.BIP34Height = 1; // Always active unless overridden consensus.BIP34Hash = uint256(); - consensus.BIP65Height = 1351; // BIP65 activated on regtest (Used in functional tests) - consensus.BIP66Height = 1251; // BIP66 activated on regtest (Used in functional tests) - consensus.CSVHeight = 432; // CSV activated on regtest (Used in rpc activation tests) - consensus.SegwitHeight = 0; // SEGWIT is always activated on regtest unless overridden + consensus.BIP65Height = 1; // Always active unless overridden + consensus.BIP66Height = 1; // Always active unless overridden + consensus.CSVHeight = 1; // Always active unless overridden + consensus.SegwitHeight = 0; // Always active unless overridden consensus.MinBIP9WarningHeight = 0; consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks - consensus.nPowTargetSpacing = 10 * 60; + consensus.nPowTargetTimespan = 1.1 * 24 * 60 * 60; // 1.5 days + consensus.nPowTargetSpacing = 1.5 * 60; // 1.5 minutes + consensus.nPowTargetTimespanDigishield = 1.5 * 60; consensus.fPowAllowMinDifficultyBlocks = true; consensus.fPowNoRetargeting = true; consensus.nRuleChangeActivationThreshold = 108; // 75% for testchains @@ -418,21 +428,26 @@ class CRegTestParams : public CChainParams { consensus.nMinimumChainWork = uint256{}; consensus.defaultAssumeValid = uint256{}; + // Hardfork params + nSwitchKGWblock = 20; + nSwitchDIGIblock = 40; + nSwitchLyra2REv2_DGW = 60; + pchMessageStart[0] = 0xfa; pchMessageStart[1] = 0xbf; pchMessageStart[2] = 0xb5; pchMessageStart[3] = 0xda; - nDefaultPort = 18444; + nDefaultPort = 20444; nPruneAfterHeight = args.GetBoolArg("-fastprune", false) ? 100 : 1000; m_assumed_blockchain_size = 0; m_assumed_chain_state_size = 0; UpdateActivationParametersFromArgs(args); - genesis = CreateGenesisBlock(1296688602, 2, 0x207fffff, 1, 50 * COIN); + genesis = CreateGenesisBlock(1296688602, 1, 0x207fffff, 1, 50 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")); - assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); + assert(consensus.hashGenesisBlock == uint256S("0x7543a69d7c2fcdb29a5ebec2fc064c074a35253b6f3072c8a749473aa590a29c")); +// assert(genesis.hashMerkleRoot == uint256S("0x97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9")); vFixedSeeds.clear(); //!< Regtest mode doesn't have any fixed seeds. vSeeds.clear(); //!< Regtest mode doesn't have any DNS seeds. @@ -444,19 +459,11 @@ class CRegTestParams : public CChainParams { checkpointData = { { - {0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")}, + {0, uint256S("3121f07c5791eea22d053e5a5fcfef0032a2ed38b434a7a53639c63b2ca74718")}, } }; m_assumeutxo_data = MapAssumeutxo{ - { - 110, - {AssumeutxoHash{uint256S("0x1ebbf5850204c0bdb15bf030f47c7fe91d45c44c712697e4509ba67adb01c618")}, 110}, - }, - { - 200, - {AssumeutxoHash{uint256S("0x51c8d11d8b5c1de51543c579736e786aa2736206d1e11e627568029ce092cf62")}, 200}, - }, }; chainTxData = ChainTxData{ @@ -465,13 +472,13 @@ class CRegTestParams : public CChainParams { 0 }; - base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,111); - base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,196); + base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,111); // m or n + base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,117); // p base58Prefixes[SECRET_KEY] = std::vector(1,239); base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; - bech32_hrp = "bcrt"; + bech32_hrp = "rmona"; } /** diff --git a/src/chainparams.h b/src/chainparams.h index 3cf0b411e4..8ffe7c8cc1 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -116,6 +116,11 @@ class CChainParams const std::string& Bech32HRP() const { return bech32_hrp; } const std::vector& FixedSeeds() const { return vFixedSeeds; } const CCheckpointData& Checkpoints() const { return checkpointData; } + void UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout); + + int SwitchKGWblock() const { return nSwitchKGWblock; } + int SwitchDIGIblock() const { return nSwitchDIGIblock; } + int SwitchLyra2REv2_DGWblock() const { return nSwitchLyra2REv2_DGW; } //! Get allowed assumeutxo configuration. //! @see ChainstateManager @@ -144,6 +149,10 @@ class CChainParams CCheckpointData checkpointData; MapAssumeutxo m_assumeutxo_data; ChainTxData chainTxData; + + int nSwitchKGWblock; + int nSwitchDIGIblock; + int nSwitchLyra2REv2_DGW; }; /** diff --git a/src/chainparamsbase.cpp b/src/chainparamsbase.cpp index e71b4bc859..d504744ad8 100644 --- a/src/chainparamsbase.cpp +++ b/src/chainparamsbase.cpp @@ -37,19 +37,19 @@ const CBaseChainParams& BaseParams() } /** - * Port numbers for incoming Tor connections (8334, 18334, 38334, 18445) have + * Port numbers for incoming Tor connections (9404, 19404, 39404, 19445) have * been chosen arbitrarily to keep ranges of used ports tight. */ std::unique_ptr CreateBaseChainParams(const std::string& chain) { if (chain == CBaseChainParams::MAIN) { - return std::make_unique("", 8332, 8334); + return std::make_unique("", 9402, 9404); } else if (chain == CBaseChainParams::TESTNET) { - return std::make_unique("testnet3", 18332, 18334); + return std::make_unique("testnet3", 19402, 19404); } else if (chain == CBaseChainParams::SIGNET) { - return std::make_unique("signet", 38332, 38334); + return std::make_unique("signet", 39402, 39404); } else if (chain == CBaseChainParams::REGTEST) { - return std::make_unique("regtest", 18443, 18445); + return std::make_unique("regtest", 19443, 19445); } throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain)); } diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index 93525d1977..1afd0fd05c 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -7,712 +7,68 @@ * Each line contains a BIP155 serialized (networkID, addr, port) tuple. */ static const uint8_t chainparams_seed_main[] = { - 0x01,0x04,0x02,0x27,0xad,0x7e,0x20,0x8d, - 0x01,0x04,0x03,0x0e,0xa8,0xc9,0xbc,0xcd, - 0x01,0x04,0x04,0x24,0x70,0x2c,0x20,0x8d, - 0x01,0x04,0x05,0x08,0x12,0x1f,0x20,0x8d, - 0x01,0x04,0x05,0x0e,0xc8,0xa7,0x20,0x8d, - 0x01,0x04,0x05,0x38,0x14,0x02,0x20,0x8d, - 0x01,0x04,0x05,0x66,0x92,0x63,0x20,0x8d, - 0x01,0x04,0x05,0x67,0x89,0x92,0x24,0x75, - 0x01,0x04,0x05,0x80,0x57,0x7e,0x20,0x8d, - 0x01,0x04,0x05,0x85,0x41,0x52,0x20,0x8d, - 0x01,0x04,0x05,0xbb,0x37,0xf2,0x20,0x8d, - 0x01,0x04,0x05,0xbc,0x3e,0x18,0x20,0x8d, - 0x01,0x04,0x05,0xbc,0x3e,0x21,0x20,0x8d, - 0x01,0x04,0x05,0xc7,0x85,0xc1,0x20,0x8d, - 0x01,0x04,0x08,0x26,0x59,0x98,0x20,0x8d, - 0x01,0x04,0x0d,0xe7,0x14,0xf9,0x20,0x8d, - 0x01,0x04,0x12,0x1b,0x4f,0x11,0x20,0x8d, - 0x01,0x04,0x14,0xb8,0x0f,0x74,0x20,0xf1, - 0x01,0x04,0x17,0x1c,0xcd,0x61,0x20,0x8d, - 0x01,0x04,0x17,0x6a,0xfc,0xe6,0x20,0x8d, - 0x01,0x04,0x17,0xaf,0x00,0xca,0x20,0x8d, - 0x01,0x04,0x17,0xaf,0x00,0xd4,0x20,0x8d, - 0x01,0x04,0x17,0xf1,0xfa,0xfc,0x20,0x8d, - 0x01,0x04,0x17,0xf5,0x18,0x9a,0x20,0x8d, - 0x01,0x04,0x18,0x56,0xb8,0x42,0x20,0x8d, - 0x01,0x04,0x18,0x74,0xf6,0x09,0x20,0x8d, - 0x01,0x04,0x18,0x8d,0x22,0xa6,0x20,0x8d, - 0x01,0x04,0x18,0x9b,0xc4,0xf6,0x20,0x8d, - 0x01,0x04,0x18,0x9d,0x82,0xde,0x20,0x8d, - 0x01,0x04,0x18,0xbc,0xb0,0xff,0x20,0x8d, - 0x01,0x04,0x18,0xed,0x46,0x35,0x20,0x8d, - 0x01,0x04,0x1b,0x7c,0x04,0x43,0x20,0x8d, - 0x01,0x04,0x1f,0x11,0x46,0x50,0x20,0x8d, - 0x01,0x04,0x1f,0x15,0x08,0x20,0x20,0x8d, - 0x01,0x04,0x1f,0x2d,0x76,0x0a,0x20,0x8d, - 0x01,0x04,0x1f,0x84,0x11,0x38,0x20,0x8d, - 0x01,0x04,0x1f,0x86,0x79,0xdf,0x20,0x8d, - 0x01,0x04,0x20,0xd6,0xb7,0x72,0x20,0x8d, - 0x01,0x04,0x23,0x89,0xec,0x20,0x20,0x8d, - 0x01,0x04,0x23,0xb9,0x91,0x69,0x20,0x8d, - 0x01,0x04,0x23,0xd1,0x33,0xd4,0x20,0x8d, - 0x01,0x04,0x23,0xf5,0xaf,0x4c,0x20,0x8d, - 0x01,0x04,0x25,0x74,0x5f,0x29,0x20,0x8d, - 0x01,0x04,0x25,0x8f,0x09,0x6b,0x20,0x8d, - 0x01,0x04,0x25,0x8f,0x74,0x2b,0x20,0x8d, - 0x01,0x04,0x25,0xbf,0xf4,0x95,0x20,0x8d, - 0x01,0x04,0x25,0xd3,0x4e,0xfd,0x20,0x8d, - 0x01,0x04,0x25,0xdd,0xd1,0xde,0x5f,0x0d, - 0x01,0x04,0x25,0xe4,0x5c,0x6e,0x20,0x8d, - 0x01,0x04,0x2b,0xe1,0x3e,0x6b,0x20,0x8d, - 0x01,0x04,0x2b,0xe1,0x9d,0x98,0x20,0x8d, - 0x01,0x04,0x2d,0x24,0xb8,0x06,0x20,0x8d, - 0x01,0x04,0x2d,0x30,0xa8,0x10,0x20,0x8d, - 0x01,0x04,0x2d,0x55,0x55,0x08,0x20,0x8d, - 0x01,0x04,0x2d,0x55,0x55,0x09,0x20,0x8d, - 0x01,0x04,0x2d,0x81,0xb4,0xd6,0x20,0x8d, - 0x01,0x04,0x2d,0x95,0x4e,0x80,0x20,0x8d, - 0x01,0x04,0x2d,0x97,0x7d,0xda,0x20,0x8d, - 0x01,0x04,0x2d,0x9a,0xff,0x2e,0x20,0x8d, - 0x01,0x04,0x2d,0x9b,0x9d,0xef,0x20,0x8d, - 0x01,0x04,0x2e,0x1c,0x84,0x22,0x20,0x8d, - 0x01,0x04,0x2e,0x1c,0xcc,0x15,0x20,0x8d, - 0x01,0x04,0x2e,0x20,0x32,0x62,0x20,0x8d, - 0x01,0x04,0x2e,0x3b,0x0d,0x23,0x20,0x8d, - 0x01,0x04,0x2e,0x80,0x28,0xad,0x20,0x8d, - 0x01,0x04,0x2e,0x80,0x8c,0xc1,0x20,0x8d, - 0x01,0x04,0x2e,0x92,0xf8,0x59,0x20,0x8d, - 0x01,0x04,0x2e,0xa6,0xa2,0x2d,0x4e,0x21, - 0x01,0x04,0x2e,0xbc,0x0f,0x06,0x20,0x8d, - 0x01,0x04,0x2e,0xe5,0xa5,0x8e,0x20,0x8d, - 0x01,0x04,0x2e,0xe5,0xee,0xbb,0x20,0x8d, - 0x01,0x04,0x2e,0xf9,0x53,0x52,0x20,0x8d, - 0x01,0x04,0x2e,0xfe,0xd9,0xa9,0x20,0x8d, - 0x01,0x04,0x2f,0x4a,0xbf,0x22,0x20,0x8d, - 0x01,0x04,0x2f,0x73,0x35,0xa3,0x20,0x8d, - 0x01,0x04,0x2f,0xbb,0x1a,0x87,0x20,0x8d, - 0x01,0x04,0x2f,0xde,0x67,0xea,0x20,0x8d, - 0x01,0x04,0x2f,0xfd,0x05,0x63,0x20,0x8d, - 0x01,0x04,0x31,0xe8,0x52,0x4c,0x20,0x8d, - 0x01,0x04,0x31,0xf7,0xd7,0x2b,0x20,0x8d, - 0x01,0x04,0x32,0x02,0x0d,0xa6,0x20,0x8d, - 0x01,0x04,0x32,0x22,0x27,0x48,0x20,0x8d, - 0x01,0x04,0x32,0x2d,0xe8,0xbd,0x20,0x8d, - 0x01,0x04,0x32,0x44,0x68,0x5c,0x20,0x8d, - 0x01,0x04,0x33,0x44,0x24,0x39,0x20,0x8d, - 0x01,0x04,0x33,0x9a,0x3c,0x22,0x20,0x8d, - 0x01,0x04,0x34,0xa9,0xee,0x42,0x20,0x8d, - 0x01,0x04,0x36,0xc5,0x1e,0xdf,0x20,0x8d, - 0x01,0x04,0x36,0xe3,0x42,0x39,0x20,0x8d, - 0x01,0x04,0x3a,0x9e,0x00,0x56,0x20,0x8d, - 0x01,0x04,0x3a,0xab,0x87,0xf2,0x20,0x8d, - 0x01,0x04,0x3a,0xe5,0xd0,0x9e,0x20,0x8d, - 0x01,0x04,0x3c,0xf4,0x6d,0x13,0x20,0x8d, - 0x01,0x04,0x3e,0x26,0x4b,0xd0,0x20,0x8d, - 0x01,0x04,0x3e,0x4a,0x8f,0x0b,0x20,0x8d, - 0x01,0x04,0x3e,0x50,0xe3,0x31,0x20,0x8d, - 0x01,0x04,0x3e,0x98,0x3a,0x10,0x24,0xcd, - 0x01,0x04,0x3e,0xd2,0xa7,0xc7,0x20,0x8d, - 0x01,0x04,0x3e,0xea,0xbc,0xa0,0x20,0x8d, - 0x01,0x04,0x3e,0xfb,0x36,0xa3,0x20,0x8d, - 0x01,0x04,0x3f,0xe3,0x74,0xa2,0x20,0x8d, - 0x01,0x04,0x41,0x13,0x9b,0x52,0x20,0x8d, - 0x01,0x04,0x41,0x5f,0x31,0x66,0x20,0x8d, - 0x01,0x04,0x42,0x12,0xac,0x15,0x20,0x8d, - 0x01,0x04,0x42,0xf0,0xed,0x9b,0x20,0x8d, - 0x01,0x04,0x43,0xd2,0xe4,0xcb,0x20,0x8d, - 0x01,0x04,0x45,0x1e,0xd7,0x2a,0x20,0x8d, - 0x01,0x04,0x45,0x3b,0x12,0xce,0x20,0x8d, - 0x01,0x04,0x45,0x40,0x21,0x47,0x20,0x8d, - 0x01,0x04,0x45,0x77,0xc1,0x09,0x20,0x8d, - 0x01,0x04,0x45,0xd1,0x17,0x48,0x20,0x8d, - 0x01,0x04,0x46,0x7b,0x7d,0xed,0x20,0x8d, - 0x01,0x04,0x46,0xb9,0x38,0x88,0x20,0x8d, - 0x01,0x04,0x47,0x26,0x5a,0xeb,0x20,0x8d, - 0x01,0x04,0x48,0x0c,0x49,0x46,0x20,0x8d, - 0x01,0x04,0x48,0x35,0x86,0xb6,0x20,0x8d, - 0x01,0x04,0x48,0xe1,0x07,0x50,0x20,0x8d, - 0x01,0x04,0x48,0xea,0xb6,0x27,0x20,0x8d, - 0x01,0x04,0x48,0xfa,0xb8,0x39,0x20,0x8d, - 0x01,0x04,0x49,0x53,0x67,0x4f,0x20,0x8d, - 0x01,0x04,0x4a,0x76,0x89,0x77,0x20,0x8d, - 0x01,0x04,0x4a,0x85,0x64,0x4a,0x20,0x8d, - 0x01,0x04,0x4a,0xd7,0xdb,0xd6,0x20,0x8d, - 0x01,0x04,0x4a,0xdc,0xff,0xbe,0x20,0x8d, - 0x01,0x04,0x4b,0x9e,0x27,0xe7,0x20,0x8d, - 0x01,0x04,0x4d,0x35,0x35,0xc4,0x20,0x8d, - 0x01,0x04,0x4d,0x46,0x10,0xf5,0x20,0x8d, - 0x01,0x04,0x4d,0x69,0x57,0x61,0x20,0x8d, - 0x01,0x04,0x4d,0x78,0x71,0x45,0x20,0xf1, - 0x01,0x04,0x4d,0x78,0x7a,0x16,0x20,0xf1, - 0x01,0x04,0x4d,0xa6,0x53,0xa7,0x20,0x8d, - 0x01,0x04,0x4d,0xf7,0xb2,0x82,0x20,0x8d, - 0x01,0x04,0x4e,0x1b,0x8b,0x0d,0x20,0x8d, - 0x01,0x04,0x4e,0x3f,0x1c,0x92,0x20,0x8d, - 0x01,0x04,0x4e,0x53,0x67,0x04,0x20,0x8d, - 0x01,0x04,0x4e,0x8d,0x7b,0x63,0x20,0x8d, - 0x01,0x04,0x4f,0x4d,0x21,0x83,0x20,0x8d, - 0x01,0x04,0x4f,0x4d,0x85,0x1e,0x20,0x8d, - 0x01,0x04,0x4f,0x65,0x01,0x19,0x20,0x8d, - 0x01,0x04,0x4f,0x75,0xc0,0xe5,0x20,0x8d, - 0x01,0x04,0x4f,0x85,0xe4,0x37,0x20,0x8d, - 0x01,0x04,0x4f,0x92,0x15,0xa3,0x20,0x8d, - 0x01,0x04,0x50,0x59,0xcb,0xac,0x1f,0x41, - 0x01,0x04,0x50,0x5d,0xd5,0xf6,0x20,0x8d, - 0x01,0x04,0x50,0xc0,0x62,0x6e,0x20,0x8e, - 0x01,0x04,0x50,0xe5,0x1c,0x3c,0x20,0x8d, - 0x01,0x04,0x50,0xe8,0xf7,0xd2,0x20,0x8d, - 0x01,0x04,0x50,0xf2,0x27,0x4c,0x20,0x8d, - 0x01,0x04,0x50,0xfd,0x5e,0xfc,0x20,0x8d, - 0x01,0x04,0x51,0x00,0xc6,0x19,0x20,0x8d, - 0x01,0x04,0x51,0x07,0x0d,0x54,0x20,0x8d, - 0x01,0x04,0x51,0x75,0xe1,0xf5,0x20,0x8d, - 0x01,0x04,0x51,0x87,0x89,0xe1,0x20,0x8d, - 0x01,0x04,0x51,0xab,0x16,0x8f,0x20,0x8d, - 0x01,0x04,0x51,0xbf,0xe9,0x86,0x20,0x8d, - 0x01,0x04,0x51,0xe8,0x4e,0x4b,0x20,0x8d, - 0x01,0x04,0x51,0xf2,0x5b,0x17,0x20,0x8d, - 0x01,0x04,0x52,0x1d,0x3a,0x6d,0x20,0x8d, - 0x01,0x04,0x52,0x88,0x63,0x16,0x20,0x8d, - 0x01,0x04,0x52,0x95,0x61,0x19,0x44,0x9f, - 0x01,0x04,0x52,0xa5,0x13,0x30,0x20,0x8d, - 0x01,0x04,0x52,0xc2,0x99,0xe9,0x20,0x8d, - 0x01,0x04,0x52,0xc5,0xd7,0x7d,0x20,0x8d, - 0x01,0x04,0x52,0xc7,0x66,0x0a,0x20,0x8d, - 0x01,0x04,0x52,0xc8,0xcd,0x1e,0x20,0x8d, - 0x01,0x04,0x52,0xca,0x44,0xe7,0x20,0x8d, - 0x01,0x04,0x52,0xdd,0x80,0x1f,0x20,0x8d, - 0x01,0x04,0x52,0xe4,0x06,0x83,0x20,0x8d, - 0x01,0x04,0x53,0x55,0x8b,0x5e,0x20,0x8d, - 0x01,0x04,0x53,0x63,0xf5,0x14,0x20,0x8d, - 0x01,0x04,0x53,0x89,0x29,0x0a,0x20,0x8d, - 0x01,0x04,0x53,0xae,0xd1,0x57,0x20,0x8d, - 0x01,0x04,0x53,0xd9,0x08,0x1f,0xad,0x84, - 0x01,0x04,0x54,0x26,0x03,0xf9,0x20,0x8d, - 0x01,0x04,0x54,0x26,0xb9,0x7a,0x20,0x8d, - 0x01,0x04,0x54,0x5c,0x5c,0xf7,0x20,0x8d, - 0x01,0x04,0x54,0xc0,0x10,0xea,0x20,0x8d, - 0x01,0x04,0x54,0xc2,0x9e,0x7c,0x20,0x8d, - 0x01,0x04,0x54,0xd4,0x91,0x18,0x20,0x8d, - 0x01,0x04,0x54,0xd4,0xf4,0x5f,0x20,0x8d, - 0x01,0x04,0x54,0xd8,0x33,0x24,0x20,0x8d, - 0x01,0x04,0x54,0xff,0xf9,0xa3,0x20,0x8d, - 0x01,0x04,0x55,0x19,0xff,0x93,0x20,0x8d, - 0x01,0x04,0x55,0x46,0x9c,0xd1,0x20,0x8d, - 0x01,0x04,0x55,0x91,0x8e,0x2e,0x20,0x8d, - 0x01,0x04,0x55,0xaa,0xe9,0x5f,0x20,0x8d, - 0x01,0x04,0x55,0xb8,0x8a,0x6c,0x20,0x8d, - 0x01,0x04,0x55,0xbe,0x00,0x05,0x20,0x8d, - 0x01,0x04,0x55,0xbf,0xc8,0x33,0x20,0x8d, - 0x01,0x04,0x55,0xc0,0xbf,0x06,0x48,0x44, - 0x01,0x04,0x55,0xc2,0xee,0x83,0x20,0x8d, - 0x01,0x04,0x55,0xc3,0x36,0x6e,0x20,0x8d, - 0x01,0x04,0x55,0xd6,0xa1,0xfc,0x20,0x8d, - 0x01,0x04,0x55,0xd6,0xb9,0x33,0x20,0x8d, - 0x01,0x04,0x55,0xf1,0x6a,0xcb,0x20,0x8d, - 0x01,0x04,0x55,0xf6,0xa8,0xfc,0x20,0x8d, - 0x01,0x04,0x56,0x38,0xee,0xf7,0x20,0x8d, - 0x01,0x04,0x57,0x3d,0x5a,0xe6,0x20,0x8d, - 0x01,0x04,0x57,0x4f,0x44,0x56,0x20,0x8d, - 0x01,0x04,0x57,0x4f,0x5e,0xdd,0x20,0x8d, - 0x01,0x04,0x57,0x78,0x08,0x05,0x4e,0x28, - 0x01,0x04,0x57,0xf6,0x2e,0x84,0x20,0x8d, - 0x01,0x04,0x57,0xf7,0x6f,0xde,0x20,0x8d, - 0x01,0x04,0x58,0x54,0xde,0xfc,0x20,0x8d, - 0x01,0x04,0x58,0x56,0xf3,0xf1,0x20,0x8d, - 0x01,0x04,0x58,0x57,0x5d,0x34,0x06,0x9b, - 0x01,0x04,0x58,0x77,0xc5,0xc8,0x20,0x8d, - 0x01,0x04,0x58,0x81,0xfd,0x5e,0x20,0x8d, - 0x01,0x04,0x58,0x93,0xf4,0xfa,0x20,0x8d, - 0x01,0x04,0x58,0xd0,0x03,0xc3,0x20,0x8d, - 0x01,0x04,0x58,0xd4,0x2c,0x21,0x20,0x8d, - 0x01,0x04,0x58,0xd6,0x39,0x5f,0x20,0x8d, - 0x01,0x04,0x59,0x6a,0xc7,0x26,0x20,0x8d, - 0x01,0x04,0x59,0x6c,0x7e,0xe4,0x20,0x8d, - 0x01,0x04,0x59,0x73,0x78,0x2b,0x20,0x8d, - 0x01,0x04,0x59,0x85,0x44,0x41,0x20,0x8d, - 0x01,0x04,0x59,0xbe,0x13,0xa2,0x20,0x8d, - 0x01,0x04,0x59,0xf8,0xac,0x0a,0x20,0x8d, - 0x01,0x04,0x5a,0x92,0x99,0x15,0x20,0x8d, - 0x01,0x04,0x5a,0xb6,0xa5,0x12,0x20,0x8d, - 0x01,0x04,0x5b,0x6a,0xbc,0xe5,0x20,0x8d, - 0x01,0x04,0x5b,0xc1,0xed,0x74,0x20,0x8d, - 0x01,0x04,0x5b,0xcc,0x63,0xb2,0x20,0x8d, - 0x01,0x04,0x5b,0xcc,0x95,0x05,0x20,0x8d, - 0x01,0x04,0x5b,0xd6,0x46,0x3f,0x20,0x8d, - 0x01,0x04,0x5b,0xe4,0x98,0xec,0x20,0x8d, - 0x01,0x04,0x5c,0x0c,0x9a,0x73,0x20,0x8d, - 0x01,0x04,0x5c,0xf9,0x8f,0x2c,0x20,0x8d, - 0x01,0x04,0x5d,0x0c,0x42,0x62,0x20,0x8d, - 0x01,0x04,0x5d,0x2e,0x36,0x04,0x20,0x8d, - 0x01,0x04,0x5d,0x73,0x14,0x82,0x20,0x8d, - 0x01,0x04,0x5d,0x7b,0xb4,0xa4,0x20,0x8d, - 0x01,0x04,0x5d,0xbd,0x91,0xa9,0x20,0x8d, - 0x01,0x04,0x5d,0xf1,0xe4,0x66,0x20,0x8d, - 0x01,0x04,0x5e,0x13,0x07,0x37,0x20,0x8d, - 0x01,0x04,0x5e,0x13,0x80,0xcc,0x20,0x8d, - 0x01,0x04,0x5e,0x34,0x70,0xe3,0x20,0x8d, - 0x01,0x04,0x5e,0x9a,0x60,0x82,0x20,0x8d, - 0x01,0x04,0x5e,0x9c,0xae,0xc9,0x20,0x8d, - 0x01,0x04,0x5e,0x9e,0xf6,0xb7,0x20,0x8d, - 0x01,0x04,0x5e,0xb1,0xab,0x49,0x20,0x8d, - 0x01,0x04,0x5e,0xc7,0xb2,0xe9,0x1f,0xa4, - 0x01,0x04,0x5e,0xed,0x7d,0x1e,0x20,0x8d, - 0x01,0x04,0x5e,0xf7,0x86,0x4d,0x20,0x8d, - 0x01,0x04,0x5f,0x30,0xe4,0x2d,0x20,0x8d, - 0x01,0x04,0x5f,0x45,0xf9,0x3f,0x20,0x8d, - 0x01,0x04,0x5f,0x52,0x92,0x46,0x20,0x8d, - 0x01,0x04,0x5f,0x53,0x49,0x1f,0x20,0x8d, - 0x01,0x04,0x5f,0x54,0xa4,0x2b,0x20,0x8d, - 0x01,0x04,0x5f,0x57,0xe2,0x38,0x20,0x8d, - 0x01,0x04,0x5f,0x6e,0xea,0x5d,0x20,0x8d, - 0x01,0x04,0x5f,0xa3,0x47,0x7e,0x20,0x8d, - 0x01,0x04,0x5f,0xa4,0x41,0xc2,0x20,0x8d, - 0x01,0x04,0x5f,0xae,0x42,0xd3,0x20,0x8d, - 0x01,0x04,0x5f,0xd3,0xae,0x89,0x20,0x8d, - 0x01,0x04,0x5f,0xd8,0x0b,0x9c,0x20,0xf1, - 0x01,0x04,0x60,0x2f,0x72,0x6c,0x20,0x8d, - 0x01,0x04,0x61,0x54,0xe8,0x69,0x20,0x8d, - 0x01,0x04,0x61,0x63,0xcd,0xf1,0x20,0x8d, - 0x01,0x04,0x62,0x19,0xc1,0x72,0x20,0x8d, - 0x01,0x04,0x63,0x73,0x19,0x0d,0x20,0x8d, - 0x01,0x04,0x65,0x20,0x13,0xb8,0x20,0x8d, - 0x01,0x04,0x65,0x64,0xae,0xf0,0x20,0x8d, - 0x01,0x04,0x66,0x84,0xf5,0x10,0x20,0x8d, - 0x01,0x04,0x67,0x0e,0xf4,0xbe,0x20,0x8d, - 0x01,0x04,0x67,0x4c,0x30,0x05,0x20,0x8d, - 0x01,0x04,0x67,0x54,0x54,0xfa,0x20,0x8f, - 0x01,0x04,0x67,0x63,0xa8,0x96,0x20,0x8d, - 0x01,0x04,0x67,0x6d,0x65,0xd8,0x20,0x8d, - 0x01,0x04,0x67,0x7a,0xf7,0x66,0x20,0x8d, - 0x01,0x04,0x67,0x81,0x0d,0x2d,0x20,0x8d, - 0x01,0x04,0x67,0xc6,0xc0,0x0e,0x4e,0x28, - 0x01,0x04,0x67,0xe0,0x77,0x63,0x20,0x8d, - 0x01,0x04,0x67,0xe7,0xbf,0x07,0x20,0x8d, - 0x01,0x04,0x67,0xeb,0xe6,0xc4,0x20,0x8d, - 0x01,0x04,0x68,0xab,0xf2,0x9b,0x20,0x8d, - 0x01,0x04,0x68,0xee,0xdc,0xc7,0x20,0x8d, - 0x01,0x04,0x6a,0xa3,0x9e,0x7f,0x20,0x8d, - 0x01,0x04,0x6b,0x96,0x29,0xb3,0x20,0x8d, - 0x01,0x04,0x6b,0x9f,0x5d,0x67,0x20,0x8d, - 0x01,0x04,0x6c,0xb7,0x4d,0x0c,0x20,0x8d, - 0x01,0x04,0x6d,0x09,0xaf,0x41,0x20,0x8d, - 0x01,0x04,0x6d,0x63,0x3f,0x9f,0x20,0x8d, - 0x01,0x04,0x6d,0x6e,0x51,0x5a,0x20,0x8d, - 0x01,0x04,0x6d,0x7b,0xd5,0x82,0x20,0x8d, - 0x01,0x04,0x6d,0x86,0xe8,0x51,0x20,0x8d, - 0x01,0x04,0x6d,0xa9,0x14,0xa8,0x20,0x8d, - 0x01,0x04,0x6d,0xc7,0xf1,0x94,0x20,0x8d, - 0x01,0x04,0x6d,0xe5,0xd2,0x06,0x20,0x8d, - 0x01,0x04,0x6d,0xec,0x69,0x28,0x20,0x8d, - 0x01,0x04,0x6d,0xf8,0xce,0x0d,0x20,0x8d, - 0x01,0x04,0x6f,0x2a,0x4a,0x41,0x20,0x8d, - 0x01,0x04,0x6f,0x5a,0x8c,0xb3,0x20,0x8d, - 0x01,0x04,0x70,0xd7,0xcd,0xec,0x20,0x8d, - 0x01,0x04,0x71,0x34,0x87,0x7d,0x20,0x8d, - 0x01,0x04,0x72,0x17,0xf6,0x89,0x20,0x8d, - 0x01,0x04,0x73,0x2f,0x8d,0xfa,0x22,0xb5, - 0x01,0x04,0x73,0x46,0x6e,0x04,0x20,0x8d, - 0x01,0x04,0x74,0x22,0xbd,0x37,0x20,0x8d, - 0x01,0x04,0x76,0x67,0x7e,0x8c,0x6e,0xad, - 0x01,0x04,0x76,0xbd,0xbb,0xdb,0x20,0x8d, - 0x01,0x04,0x77,0x03,0xd0,0xec,0x20,0x8d, - 0x01,0x04,0x77,0x08,0x2f,0xe1,0x20,0x8d, - 0x01,0x04,0x77,0x11,0x97,0x3d,0x20,0x8d, - 0x01,0x04,0x78,0x19,0x18,0x1e,0x20,0x8d, - 0x01,0x04,0x78,0xf1,0x22,0x0a,0x20,0x8d, - 0x01,0x04,0x79,0x62,0xcd,0x64,0x20,0x8d, - 0x01,0x04,0x7a,0x70,0x94,0x99,0x20,0x93, - 0x01,0x04,0x7a,0x74,0x2a,0x8c,0x20,0x8d, - 0x01,0x04,0x7c,0xd9,0xeb,0xb4,0x20,0x8d, - 0x01,0x04,0x7d,0xec,0xd7,0x85,0x20,0x8d, - 0x01,0x04,0x81,0x0d,0xbd,0xd4,0x20,0x8d, - 0x01,0x04,0x82,0xb9,0x4d,0x69,0x20,0x8d, - 0x01,0x04,0x83,0xbc,0x28,0xbf,0x20,0x8d, - 0x01,0x04,0x83,0xc1,0xdc,0x0f,0x20,0x8d, - 0x01,0x04,0x87,0x17,0x7c,0xef,0x20,0x8d, - 0x01,0x04,0x88,0x21,0xb9,0x20,0x20,0x8d, - 0x01,0x04,0x88,0x38,0xaa,0x60,0x20,0x8d, - 0x01,0x04,0x89,0xe2,0x22,0x2e,0x20,0x8d, - 0x01,0x04,0x8a,0xe5,0x1a,0x2a,0x20,0x8d, - 0x01,0x04,0x8b,0x09,0xf9,0xea,0x20,0x8d, - 0x01,0x04,0x8d,0x65,0x08,0x24,0x20,0x8d, - 0x01,0x04,0x8f,0xb0,0xe0,0x68,0x20,0x8d, - 0x01,0x04,0x90,0x02,0x45,0xe0,0x20,0x8d, - 0x01,0x04,0x90,0x22,0xa1,0x41,0x47,0x9d, - 0x01,0x04,0x90,0x5b,0x74,0x2c,0x20,0x8d, - 0x01,0x04,0x90,0x89,0x1d,0xb5,0x20,0x8d, - 0x01,0x04,0x94,0x42,0x32,0x32,0x20,0x8f, - 0x01,0x04,0x94,0x48,0x96,0xe7,0x20,0x8d, - 0x01,0x04,0x94,0xaa,0xd4,0x2c,0x20,0x8d, - 0x01,0x04,0x95,0xa7,0x63,0xbe,0x20,0x8d, - 0x01,0x04,0x9a,0x5c,0x10,0xbf,0x20,0x8d, - 0x01,0x04,0x9a,0xdd,0x1b,0x15,0x20,0x8d, - 0x01,0x04,0x9c,0x13,0x13,0x5a,0x20,0x8d, - 0x01,0x04,0x9c,0xf1,0x05,0xbe,0x20,0x8d, - 0x01,0x04,0x9d,0x0d,0x3d,0x4c,0x20,0x8d, - 0x01,0x04,0x9d,0x0d,0x3d,0x50,0x20,0x8d, - 0x01,0x04,0x9d,0xe6,0xa6,0x62,0x38,0x37, - 0x01,0x04,0x9e,0x4b,0xcb,0x02,0x20,0x8d, - 0x01,0x04,0x9e,0xb5,0x7d,0x96,0x20,0x8d, - 0x01,0x04,0x9e,0xb5,0xe2,0x21,0x20,0x8d, - 0x01,0x04,0x9f,0x64,0xf2,0xfe,0x20,0x8d, - 0x01,0x04,0x9f,0x64,0xf8,0xea,0x20,0x8d, - 0x01,0x04,0x9f,0x8a,0x57,0x12,0x20,0x8d, - 0x01,0x04,0xa0,0x10,0x00,0x1e,0x20,0x8d, - 0x01,0x04,0xa2,0x00,0xe3,0x36,0x20,0x8d, - 0x01,0x04,0xa2,0x00,0xe3,0x38,0x20,0x8d, - 0x01,0x04,0xa2,0x3e,0x12,0xe2,0x20,0x8d, - 0x01,0x04,0xa2,0xd1,0x01,0xe9,0x20,0x8d, - 0x01,0x04,0xa2,0xf3,0xaf,0x56,0x20,0x8d, - 0x01,0x04,0xa2,0xf4,0x50,0xd0,0x20,0x8d, - 0x01,0x04,0xa2,0xfa,0xbc,0x57,0x20,0x8d, - 0x01,0x04,0xa2,0xfa,0xbd,0x35,0x20,0x8d, - 0x01,0x04,0xa3,0x9e,0xca,0x70,0x20,0x8d, - 0x01,0x04,0xa3,0x9e,0xf3,0xe6,0x20,0x8d, - 0x01,0x04,0xa5,0x49,0x3e,0x1f,0x20,0x8d, - 0x01,0x04,0xa6,0x3e,0x52,0x67,0x80,0x03, - 0x01,0x04,0xa6,0x46,0x5e,0x6a,0x20,0x8d, - 0x01,0x04,0xa7,0x56,0x5a,0xef,0x20,0x8d, - 0x01,0x04,0xa9,0x2c,0x22,0xcb,0x20,0x8d, - 0x01,0x04,0xac,0x5d,0x65,0x49,0x20,0x8d, - 0x01,0x04,0xac,0x69,0x07,0x2f,0x20,0x8d, - 0x01,0x04,0xad,0x17,0x67,0x1e,0x1f,0x40, - 0x01,0x04,0xad,0x35,0x4f,0x06,0x20,0x8d, - 0x01,0x04,0xad,0x46,0x0c,0x56,0x20,0x8d, - 0x01,0x04,0xad,0x59,0x1c,0x89,0x20,0x8d, - 0x01,0x04,0xad,0xb0,0xb8,0x36,0x20,0x8d, - 0x01,0x04,0xad,0xd0,0x80,0x0a,0x20,0x8d, - 0x01,0x04,0xad,0xfe,0xcc,0x45,0x20,0x8d, - 0x01,0x04,0xad,0xff,0xcc,0x7c,0x20,0x8d, - 0x01,0x04,0xae,0x5e,0x9b,0xe0,0x20,0x8d, - 0x01,0x04,0xae,0x72,0x66,0x29,0x20,0x8d, - 0x01,0x04,0xae,0x72,0x7c,0x0c,0x20,0x8d, - 0x01,0x04,0xb0,0x0a,0xe3,0x3b,0x20,0x8d, - 0x01,0x04,0xb0,0x1f,0xe0,0xd6,0x20,0x8d, - 0x01,0x04,0xb0,0x4a,0x88,0xed,0x20,0x8d, - 0x01,0x04,0xb0,0x63,0x02,0xcf,0x20,0x8d, - 0x01,0x04,0xb0,0x6a,0xbf,0x02,0x20,0x8d, - 0x01,0x04,0xb0,0xa0,0xe4,0x09,0x20,0x8d, - 0x01,0x04,0xb0,0xbf,0xb6,0x03,0x20,0x8d, - 0x01,0x04,0xb0,0xd4,0xb9,0x99,0x20,0x8d, - 0x01,0x04,0xb0,0xf1,0x89,0xb7,0x20,0x8d, - 0x01,0x04,0xb1,0x26,0xd7,0x49,0x20,0x8d, - 0x01,0x04,0xb2,0x10,0xde,0x92,0x20,0x8d, - 0x01,0x04,0xb2,0x84,0x02,0xf6,0x20,0x8d, - 0x01,0x04,0xb2,0x8f,0xbf,0xab,0x20,0x8d, - 0x01,0x04,0xb2,0x94,0xac,0xd1,0x20,0x8d, - 0x01,0x04,0xb2,0x94,0xe2,0xb4,0x20,0x8d, - 0x01,0x04,0xb2,0x96,0x60,0x2e,0x20,0x8d, - 0x01,0x04,0xb2,0xb6,0xe3,0x32,0x20,0x8d, - 0x01,0x04,0xb2,0xec,0x89,0x3f,0x20,0x8d, - 0x01,0x04,0xb2,0xff,0x2a,0x7e,0x20,0x8d, - 0x01,0x04,0xb4,0x96,0x34,0x25,0x20,0x8d, - 0x01,0x04,0xb5,0x27,0x20,0x63,0x20,0x8d, - 0x01,0x04,0xb5,0x30,0x4d,0x1a,0x20,0x8d, - 0x01,0x04,0xb5,0x34,0xdf,0x34,0x20,0x8d, - 0x01,0x04,0xb5,0xee,0x33,0x98,0x20,0x8d, - 0x01,0x04,0xb7,0x58,0xdf,0xd0,0x20,0x8d, - 0x01,0x04,0xb7,0x6e,0xdc,0xd2,0x76,0x5d, - 0x01,0x04,0xb8,0x5f,0x3a,0xa6,0x20,0x90, - 0x01,0x04,0xb8,0xa4,0x93,0x52,0xa1,0x75, - 0x01,0x04,0xb8,0xab,0xd0,0x6d,0x20,0x8d, - 0x01,0x04,0xb9,0x19,0x30,0x27,0x20,0x8d, - 0x01,0x04,0xb9,0x19,0x30,0xb8,0x20,0x8d, - 0x01,0x04,0xb9,0x40,0x74,0x0f,0x20,0x8d, - 0x01,0x04,0xb9,0x50,0xdb,0x84,0x20,0x8d, - 0x01,0x04,0xb9,0x55,0x03,0x8c,0x20,0x8d, - 0x01,0x04,0xb9,0x5f,0xdb,0x35,0x20,0x8d, - 0x01,0x04,0xb9,0x6c,0xf4,0x29,0x20,0x8d, - 0x01,0x04,0xb9,0x86,0xe9,0x79,0x20,0x8d, - 0x01,0x04,0xb9,0x91,0x80,0x15,0x20,0x8d, - 0x01,0x04,0xb9,0x94,0x03,0xe3,0x20,0x8d, - 0x01,0x04,0xb9,0x99,0xc4,0xf0,0x20,0x8d, - 0x01,0x04,0xb9,0x9e,0x72,0xb8,0x20,0x8d, - 0x01,0x04,0xb9,0xa5,0xa8,0xc4,0x20,0x8d, - 0x01,0x04,0xb9,0xb5,0xe6,0x4a,0x20,0x8d, - 0x01,0x04,0xb9,0xb9,0x1a,0x8d,0x1f,0xaf, - 0x01,0x04,0xb9,0xba,0xd0,0xa2,0x20,0x8d, - 0x01,0x04,0xb9,0xbd,0x84,0xb2,0xe1,0xb4, - 0x01,0x04,0xb9,0xd3,0x3b,0x32,0x20,0x8d, - 0x01,0x04,0xb9,0xe9,0x94,0x92,0x20,0x8d, - 0x01,0x04,0xb9,0xee,0x81,0x71,0x20,0x8d, - 0x01,0x04,0xb9,0xf9,0xc7,0x6a,0x20,0x8d, - 0x01,0x04,0xb9,0xfb,0xa1,0x36,0x20,0x8d, - 0x01,0x04,0xbb,0xbd,0x99,0x88,0x20,0x8d, - 0x01,0x04,0xbc,0x25,0x18,0xbe,0x20,0x8d, - 0x01,0x04,0xbc,0x2a,0x28,0xea,0x47,0x9d, - 0x01,0x04,0xbc,0x3d,0x2e,0x24,0x20,0x8d, - 0x01,0x04,0xbc,0x44,0x2d,0x8f,0x20,0x8d, - 0x01,0x04,0xbc,0x7f,0xe5,0x69,0x20,0x8d, - 0x01,0x04,0xbc,0x86,0x06,0x54,0x20,0x8d, - 0x01,0x04,0xbc,0x86,0x08,0x24,0x20,0x8d, - 0x01,0x04,0xbc,0xd6,0x81,0x41,0x4e,0x2c, - 0x01,0x04,0xbc,0xe6,0xa8,0x72,0x20,0x8d, - 0x01,0x04,0xbd,0x22,0x0e,0x5d,0x20,0x8d, - 0x01,0x04,0xbd,0xcf,0x2e,0x20,0x20,0x8d, - 0x01,0x04,0xbe,0xd3,0xcc,0x44,0x20,0x8d, - 0x01,0x04,0xbf,0xd1,0x15,0xbc,0x20,0x8d, - 0x01,0x04,0xc0,0x03,0x0b,0x14,0x20,0x8d, - 0x01,0x04,0xc0,0x03,0xb9,0xd2,0x20,0x8d, - 0x01,0x04,0xc0,0x41,0xaa,0x0f,0x20,0x8d, - 0x01,0x04,0xc0,0x41,0xaa,0x32,0x20,0x8d, - 0x01,0x04,0xc0,0x92,0x89,0x12,0x20,0x8d, - 0x01,0x04,0xc0,0x9d,0xca,0xb2,0x20,0x8d, - 0x01,0x04,0xc0,0xe3,0x50,0x53,0x20,0x8d, - 0x01,0x04,0xc1,0x0a,0xcb,0x17,0x20,0x8e, - 0x01,0x04,0xc1,0x19,0x06,0xce,0x20,0x8d, - 0x01,0x04,0xc1,0x2a,0x6e,0x1e,0x20,0x8d, - 0x01,0x04,0xc1,0x3a,0xc4,0xd4,0x20,0x8d, - 0x01,0x04,0xc1,0x6a,0x1c,0x08,0x20,0x8d, - 0x01,0x04,0xc1,0xbd,0xbe,0x7b,0x20,0x8d, - 0x01,0x04,0xc1,0xc2,0xa3,0x23,0x20,0x8d, - 0x01,0x04,0xc1,0xc2,0xa3,0x35,0x20,0x8d, - 0x01,0x04,0xc2,0x0e,0xf6,0xcd,0x20,0x8d, - 0x01,0x04,0xc2,0x24,0x5b,0xfd,0x20,0x8d, - 0x01,0x04,0xc2,0x7e,0x71,0x87,0x20,0x8d, - 0x01,0x04,0xc2,0x87,0x87,0x45,0x20,0x8d, - 0x01,0x04,0xc3,0x38,0x3f,0x04,0x20,0x8d, - 0x01,0x04,0xc3,0x38,0x3f,0x05,0x20,0x8d, - 0x01,0x04,0xc3,0x43,0x8b,0x36,0x20,0x8d, - 0x01,0x04,0xc3,0x87,0xc2,0x08,0x20,0x8d, - 0x01,0x04,0xc3,0xca,0xa9,0x95,0x20,0x8d, - 0x01,0x04,0xc3,0xce,0x69,0x2a,0x20,0x8d, - 0x01,0x04,0xc3,0xd1,0xf9,0xa4,0x20,0x8d, - 0x01,0x04,0xc6,0x01,0xe7,0x06,0x20,0x8d, - 0x01,0x04,0xc6,0xc8,0x2b,0xd7,0x20,0x8d, - 0x01,0x04,0xc7,0xb6,0xb8,0xcc,0x20,0x8d, - 0x01,0x04,0xc7,0xf7,0x07,0xd0,0x20,0x8d, - 0x01,0x04,0xc7,0xf7,0xf9,0xbc,0x20,0x8d, - 0x01,0x04,0xc8,0x07,0xfc,0x76,0x20,0x8d, - 0x01,0x04,0xc8,0x14,0xba,0xfe,0x20,0x8d, - 0x01,0x04,0xc8,0x53,0xa6,0x88,0x20,0x8d, - 0x01,0x04,0xca,0x37,0x57,0x2d,0x20,0x8d, - 0x01,0x04,0xca,0x4f,0xa7,0x41,0x20,0x8d, - 0x01,0x04,0xca,0x6c,0xd3,0x87,0x20,0x8d, - 0x01,0x04,0xca,0xa9,0x66,0x49,0x20,0x8d, - 0x01,0x04,0xcb,0x82,0x30,0x75,0x22,0xb5, - 0x01,0x04,0xcb,0x84,0x5f,0x0a,0x20,0x8d, - 0x01,0x04,0xcb,0x97,0xa6,0x7b,0x20,0x8d, - 0x01,0x04,0xcc,0x5d,0x71,0x6c,0x20,0x8d, - 0x01,0x04,0xcc,0x6f,0xf1,0xc3,0x20,0x8d, - 0x01,0x04,0xce,0x7c,0x95,0x42,0x20,0x8d, - 0x01,0x04,0xcf,0x73,0x66,0x62,0x20,0x8d, - 0x01,0x04,0xcf,0xe5,0x2e,0x96,0x20,0x8d, - 0x01,0x04,0xd0,0x4c,0xfc,0xc6,0x20,0x8d, - 0x01,0x04,0xd0,0x64,0x0d,0x38,0x20,0x8d, - 0x01,0x04,0xd0,0x64,0xb2,0xaf,0x20,0x8d, - 0x01,0x04,0xd0,0x6e,0x63,0x69,0x20,0x8d, - 0x01,0x04,0xd1,0x06,0xd2,0xb3,0x20,0x8d, - 0x01,0x04,0xd1,0x85,0xdc,0x4a,0x20,0x8d, - 0x01,0x04,0xd1,0x8d,0x39,0x39,0x20,0x8d, - 0x01,0x04,0xd3,0x1b,0x93,0x43,0x20,0x8d, - 0x01,0x04,0xd4,0x22,0xe1,0x76,0x20,0x8d, - 0x01,0x04,0xd4,0x59,0xad,0xd8,0x20,0x8d, - 0x01,0x04,0xd4,0x63,0xe2,0x24,0x23,0x3c, - 0x01,0x04,0xd4,0xed,0x60,0x62,0x20,0x8d, - 0x01,0x04,0xd5,0x59,0x83,0x35,0x20,0x8d, - 0x01,0x04,0xd8,0x26,0x81,0xa4,0x20,0x8d, - 0x01,0x04,0xd8,0x86,0xa5,0x37,0x20,0x8d, - 0x01,0x04,0xd8,0x92,0xfb,0x08,0x20,0x8d, - 0x01,0x04,0xd8,0xbd,0xbe,0x5f,0x20,0x8d, - 0x01,0x04,0xd8,0xe2,0x80,0xbd,0x20,0x8d, - 0x01,0x04,0xd8,0xec,0xa4,0x52,0x20,0x8d, - 0x01,0x04,0xd9,0x13,0xd8,0xd2,0x20,0x8d, - 0x01,0x04,0xd9,0x1a,0x20,0x0a,0x20,0x8d, - 0x01,0x04,0xd9,0x40,0x2f,0x8a,0x20,0x8d, - 0x01,0x04,0xd9,0x40,0x85,0xdc,0x20,0x8d, - 0x01,0x04,0xd9,0x5c,0x37,0xf6,0x20,0x8d, - 0x01,0x04,0xda,0x1f,0x71,0xf5,0x20,0x8d, - 0x01,0x04,0xda,0xff,0xf2,0x72,0x20,0x8d, - 0x01,0x04,0xdc,0x85,0x27,0x3d,0x20,0x8d, - 0x01,0x04,0xdf,0x10,0x1e,0xaf,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x19,0xf0,0x60,0x01,0x30,0x6f,0x0e,0xc4,0x7a,0xff,0xfe,0x8f,0x66,0xec,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x1b,0xc0,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x01,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x1c,0x02,0x2f,0x18,0x0d,0x00,0xb6,0x2e,0x99,0xff,0xfe,0x49,0xd4,0x92,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x41,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x41,0x00,0x00,0x00,0x00,0x64,0xdc,0xaf,0xaf,0xff,0xfe,0x00,0x67,0x07,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x04,0x70,0x00,0x0a,0x0c,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x48,0x01,0x78,0x19,0x00,0x74,0xb7,0x45,0xb9,0xd5,0xff,0x10,0xa6,0x1a,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x4b,0xa0,0xff,0xfa,0x00,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x10,0x19,0x08,0xff,0x01,0xf8,0x16,0x3e,0xff,0xfe,0x33,0x2e,0x32,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x38,0xa0,0x00,0x41,0x40,0x00,0x00,0x00,0x00,0xff,0xff,0x01,0x91,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x48,0x28,0x00,0x01,0x31,0x4b,0x1f,0xf6,0xfc,0x20,0xf7,0xf9,0x9f,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x78,0x07,0xdc,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x78,0x0c,0xc8,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x88,0x4e,0x28, - 0x02,0x10,0x20,0x01,0x06,0x7c,0x12,0x20,0x08,0x0c,0x00,0x00,0x00,0x00,0x93,0xe5,0x0d,0xd2,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x7c,0x12,0x20,0x08,0x0c,0xe5,0xdc,0xad,0x0c,0x92,0x89,0xc2,0x8f,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x7c,0x16,0xdc,0x12,0x01,0x50,0x54,0x00,0xff,0xfe,0x17,0x4d,0xac,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x7c,0x23,0x54,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x7c,0x26,0xb4,0x00,0x12,0x7a,0xe3,0xb5,0xff,0xfe,0x04,0x6f,0x9c,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x06,0x7c,0x02,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xfa,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x07,0x18,0x08,0x01,0x03,0x11,0x50,0x54,0x00,0xff,0xfe,0x19,0xc4,0x83,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x08,0xd8,0x08,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x03,0xc1,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x08,0xf1,0x14,0x04,0x37,0x00,0x8e,0x49,0x71,0x5a,0x2e,0x09,0xb6,0x34,0x24,0xe4, - 0x02,0x10,0x20,0x01,0x0b,0x07,0x5d,0x29,0x99,0xa5,0x19,0x4b,0x38,0x74,0xd6,0x5e,0xa9,0x0d,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x0b,0xa8,0x01,0xf1,0xf0,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x0b,0xc8,0x12,0x00,0x00,0x00,0xda,0xc4,0x97,0xff,0xfe,0x2a,0x35,0x54,0x4e,0x28, - 0x02,0x10,0x20,0x01,0x0d,0xa8,0x10,0x0d,0x00,0x22,0x10,0xfa,0xd8,0x5f,0x10,0xf2,0x21,0xfd,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x0d,0xa8,0x80,0x01,0x7a,0x39,0xf0,0x35,0x00,0x7d,0xb9,0x9f,0xeb,0x79,0x20,0x8d, - 0x02,0x10,0x20,0x01,0x0e,0x42,0x01,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x20,0x8d, - 0x02,0x10,0x24,0x00,0x24,0x12,0x01,0x03,0xc9,0x00,0x08,0x25,0x8f,0x20,0xea,0xff,0x65,0xc2,0x20,0x8d, - 0x02,0x10,0x24,0x00,0x40,0x52,0x0e,0x20,0x4f,0x00,0x69,0xfe,0xbb,0x33,0x7b,0x1c,0xa1,0xca,0x20,0x8d, - 0x02,0x10,0x24,0x01,0x18,0x00,0x78,0x00,0x01,0x05,0xbe,0x76,0x4e,0xff,0xfe,0x1c,0x0b,0x35,0x20,0x8d, - 0x02,0x10,0x24,0x01,0x39,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x24,0x01,0xb1,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x01,0x50,0x20,0x8d, - 0x02,0x10,0x24,0x01,0xd0,0x02,0x44,0x02,0x00,0x00,0x8f,0x28,0x59,0x1a,0x6e,0xa0,0xc6,0x83,0x20,0x8d, - 0x02,0x10,0x24,0x03,0x62,0x00,0x88,0x21,0x3d,0x68,0x19,0x5b,0x87,0xe9,0x68,0x19,0xd5,0xc8,0x20,0x8d, - 0x02,0x10,0x24,0x05,0x65,0x80,0x21,0x40,0x3a,0x00,0xc2,0x8c,0x09,0x83,0x36,0x4b,0x5d,0x70,0x20,0x8d, - 0x02,0x10,0x24,0x05,0x98,0x00,0xb9,0x11,0xa1,0x8a,0x58,0xeb,0xcd,0x3c,0x9d,0x82,0xea,0x4a,0x20,0x8d, - 0x02,0x10,0x24,0x05,0xaa,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x8d, - 0x02,0x10,0x24,0x09,0x00,0x10,0xca,0x20,0x1d,0xf0,0x02,0x24,0xe8,0xff,0xfe,0x1f,0x60,0xd9,0x20,0x8d, - 0x02,0x10,0x24,0x09,0x8a,0x1e,0xa9,0xaf,0x36,0x60,0x1c,0x5a,0x5b,0x6b,0x8a,0x2d,0x98,0x48,0x20,0x8d, - 0x02,0x10,0x24,0x09,0x8a,0x1e,0xa9,0xaf,0x36,0x60,0x04,0x04,0x39,0xba,0x88,0xf2,0xe8,0xdf,0x20,0x8d, - 0x02,0x10,0x24,0x0b,0x00,0x10,0x91,0x41,0x04,0x00,0x49,0xb4,0x3a,0x2e,0x01,0xe5,0x08,0x4c,0x20,0x8d, - 0x02,0x10,0x24,0x0d,0x00,0x1a,0x07,0x59,0x60,0x00,0xa7,0xb1,0x45,0x1a,0x88,0x74,0xe1,0xac,0x20,0x8d, - 0x02,0x10,0x24,0x0d,0x00,0x1a,0x07,0x59,0x60,0x00,0xdd,0xab,0x31,0x41,0x4d,0xa0,0x88,0x78,0x20,0x8d, - 0x02,0x10,0x26,0x00,0x88,0x05,0x24,0x00,0x01,0x4e,0x12,0xdd,0xb1,0xff,0xfe,0xf2,0x30,0x13,0x20,0x8d, - 0x02,0x10,0x26,0x01,0x06,0x02,0x8d,0x80,0x0b,0x63,0xdc,0x3e,0x24,0xff,0xfe,0x92,0x05,0xeb,0x20,0x8d, - 0x02,0x10,0x26,0x02,0xff,0xb6,0x00,0x04,0x27,0x98,0xf8,0x16,0x3e,0xff,0xfe,0x2f,0x54,0x41,0x20,0x8d, - 0x02,0x10,0x26,0x02,0xff,0xb6,0x00,0x04,0x73,0x9e,0xf8,0x16,0x3e,0xff,0xfe,0x00,0xc2,0xb3,0x20,0x8d, - 0x02,0x10,0x26,0x02,0xff,0xb8,0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x72,0x00,0x57,0x02,0x00,0x20,0x8d, - 0x02,0x10,0x26,0x04,0x13,0x80,0x41,0x11,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x26,0x04,0x43,0x00,0x00,0x0a,0x00,0x2e,0x02,0x1b,0x21,0xff,0xfe,0x11,0x03,0x92,0x20,0x8d, - 0x02,0x10,0x26,0x04,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x06,0x1f,0xb0, - 0x02,0x10,0x26,0x04,0x55,0x00,0x70,0x6a,0x40,0x00,0xfc,0x79,0xb9,0xbb,0x01,0xd7,0xc3,0x25,0x20,0x8d, - 0x02,0x10,0x26,0x04,0x55,0x00,0xc1,0x34,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xfc,0x80,0x1d, - 0x02,0x10,0x26,0x04,0x68,0x00,0x5e,0x11,0x01,0x62,0x5c,0x8f,0xd2,0xff,0xfe,0x26,0x14,0x6f,0x20,0x8d, - 0x02,0x10,0x26,0x05,0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x20,0x8d, - 0x02,0x10,0x26,0x05,0x64,0x00,0x00,0x20,0x13,0xbf,0xdf,0x1d,0x18,0x1c,0x83,0xbb,0x22,0xe8,0x20,0x8d, - 0x02,0x10,0x26,0x05,0xae,0x00,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x20,0x8d, - 0x02,0x10,0x26,0x05,0xc0,0x00,0x2a,0x0a,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x20,0x8d, - 0x02,0x10,0x26,0x07,0xf2,0xc0,0xf0,0x0e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x20,0x8d, - 0x02,0x10,0x26,0x07,0xf2,0xf8,0xad,0x40,0x0b,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x26,0x07,0xf4,0x70,0x00,0x08,0x10,0x48,0xae,0x1f,0x6b,0xff,0xfe,0x70,0x72,0x40,0x20,0x8d, - 0x02,0x10,0x26,0x07,0xff,0x28,0x80,0x0f,0x00,0x97,0x02,0x25,0x90,0xff,0xfe,0x75,0x11,0x10,0x20,0x8d, - 0x02,0x10,0x26,0x20,0x01,0x1c,0x50,0x01,0x11,0x18,0xd2,0x67,0xe5,0xff,0xfe,0xe9,0xe6,0x73,0x20,0x8d, - 0x02,0x10,0x26,0x20,0x00,0x6e,0xa0,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x20,0x8d, - 0x02,0x10,0x28,0x04,0x01,0x4d,0x4c,0x93,0x98,0x09,0x97,0x69,0xda,0x80,0x18,0x32,0x34,0x80,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x13,0x28,0xe1,0x01,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x63,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x13,0x98,0x00,0x04,0x2a,0x03,0x02,0x15,0x5d,0xff,0xfe,0xd6,0x10,0x33,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x13,0xa0,0x30,0x15,0x00,0x01,0x00,0x85,0x00,0x14,0x00,0x79,0x00,0x26,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x16,0x30,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x17,0x68,0x20,0x01,0x00,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0xef,0x6a,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x18,0x28,0xa0,0x04,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x66,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x18,0x38,0x00,0x36,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xcb,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x18,0x38,0x00,0x36,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0xd3,0xc6,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x1c,0x10,0x00,0x02,0x07,0x09,0x58,0xf7,0xe0,0xff,0xfe,0x24,0xa0,0xba,0x56,0xcc, - 0x02,0x10,0x2a,0x00,0x1c,0x10,0x00,0x02,0x07,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x17,0x56,0xcc, - 0x02,0x10,0x2a,0x00,0x1f,0x40,0x50,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x60,0x20,0x13,0x95,0x14,0x00,0xba,0xf7,0x2d,0x43,0x60,0xb3,0x19,0x8b,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x7c,0x80,0x00,0x00,0x01,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xaf,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x8a,0x60,0xe0,0x12,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0xab,0x00,0x06,0x03,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0xbb,0xe0,0x00,0xcc,0x00,0x00,0x62,0xa4,0x4c,0xff,0xfe,0x23,0x75,0x10,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x0c,0xa8,0x0a,0x1f,0x30,0x25,0xf9,0x49,0xe4,0x42,0xc9,0x40,0x13,0xe8,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0xd2,0xa0,0x00,0x0a,0x3d,0x00,0x1c,0xdf,0x38,0xbb,0xa7,0xd6,0xc2,0x51,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0xd8,0x80,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0e,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0x0e,0xc0,0x72,0x07,0x91,0x00,0x5f,0x8f,0x25,0xdd,0x25,0x74,0x39,0x82,0x20,0x8d, - 0x02,0x10,0x2a,0x00,0xf8,0x20,0x04,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x01,0x38,0xa0,0x17,0xb0,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x04,0x30,0x00,0x17,0x00,0x01,0x00,0x00,0x00,0x00,0xff,0xff,0x11,0x53,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x04,0x90,0x00,0x16,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x4b,0x00,0x80,0x7c,0x1b,0x00,0xcd,0xa1,0x0c,0x6a,0x2b,0xad,0x24,0x18,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x4b,0x00,0x80,0xe7,0x54,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x04,0xf8,0x01,0x92,0x42,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0xf1, - 0x02,0x10,0x2a,0x01,0x07,0xa0,0x00,0x02,0x13,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x07,0xa7,0x00,0x02,0x14,0x67,0x0e,0xc4,0x7a,0xff,0xfe,0xe2,0x56,0x90,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x07,0xc8,0xd0,0x02,0x01,0x0f,0x50,0x54,0x00,0xff,0xfe,0x5c,0xda,0xc7,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x07,0xc8,0xd0,0x02,0x03,0x18,0x50,0x54,0x00,0xff,0xfe,0xbe,0xcb,0xb1,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x87,0x40,0x00,0x01,0xff,0xc5,0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x6a,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0xcb,0x00,0x0f,0x98,0xca,0x00,0x50,0x54,0x00,0xff,0xfe,0xd4,0x76,0x3d,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0xcb,0x14,0x0c,0xf6,0xbc,0x00,0x21,0xe5,0xf1,0x2e,0x32,0xc8,0x01,0x45,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x00,0xd0,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x45,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x00,0xd0,0xbe,0xf2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x20,0x8d, - 0x02,0x10,0x2a,0x01,0x0e,0x35,0x2e,0x40,0x68,0x30,0x02,0x11,0x32,0xff,0xfe,0xa6,0xde,0x3d,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x12,0x05,0xc6,0xaa,0x60,0xc0,0x70,0xd8,0xaa,0xee,0xa8,0x2d,0x99,0x3c,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x01,0x69,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x14,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x01,0x80,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x5b,0x8f,0x53,0x8c,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x03,0x48,0x00,0x62,0x5e,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x03,0x90,0x90,0x00,0x00,0x00,0x02,0x18,0x7d,0xff,0xfe,0x10,0xbe,0x33,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x7a,0xa0,0x16,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0xdc,0x8d,0xe0,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x7b,0x40,0xb0,0xdf,0x89,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x7b,0x40,0xb9,0x05,0x37,0xdb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x81,0x0d,0x8c,0xbf,0xf3,0xa8,0x96,0xc6,0x91,0xff,0xfe,0x17,0xae,0x1d,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x83,0x89,0x01,0xc0,0x96,0x80,0x02,0x01,0x2e,0xff,0xfe,0x82,0xb3,0xcc,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0xa4,0x54,0xa5,0x16,0x00,0x01,0x05,0x17,0x09,0x28,0x7e,0x0d,0x95,0x7c,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x0a,0xf8,0xfa,0xb0,0x08,0x04,0x01,0x51,0x02,0x36,0x00,0x34,0x01,0x61,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x0a,0xf8,0xfa,0xb0,0x08,0x08,0x00,0x85,0x02,0x34,0x01,0x45,0x01,0x32,0x20,0x8d, - 0x02,0x10,0x2a,0x02,0x0e,0x00,0xff,0xf0,0x01,0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x20,0x8d, - 0x02,0x10,0x2a,0x03,0x22,0x60,0x30,0x06,0x00,0x0d,0xd3,0x07,0x5d,0x1d,0x32,0xca,0x1f,0xe8,0x20,0x8d, - 0x02,0x10,0x2a,0x03,0x60,0x00,0x08,0x70,0x00,0x00,0x00,0x46,0x00,0x23,0x00,0x87,0x02,0x18,0x20,0x8d, - 0x02,0x10,0x2a,0x03,0x9d,0xa0,0x00,0xf6,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x2a,0x03,0xc9,0x80,0x00,0xdb,0x00,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x8d, - 0x02,0x10,0x2a,0x03,0xe2,0xc0,0x01,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x2a,0x04,0x35,0x44,0x10,0x00,0x15,0x10,0x70,0x6c,0xab,0xff,0xfe,0x6c,0x50,0x1c,0x20,0x8d, - 0x02,0x10,0x2a,0x04,0x52,0xc0,0x01,0x01,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x87,0x20,0x8d, - 0x02,0x10,0x2a,0x04,0x52,0xc0,0x01,0x01,0x03,0xfb,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x27,0x20,0x8d, - 0x02,0x10,0x2a,0x04,0xee,0x41,0x00,0x83,0x50,0xdf,0xd9,0x08,0xf7,0x1d,0x2a,0x86,0xb3,0x37,0x20,0x8d, - 0x02,0x10,0x2a,0x05,0x6d,0x40,0xb9,0x4e,0xd1,0x00,0x02,0x25,0x90,0xff,0xfe,0x0d,0xcf,0xc2,0x20,0x8d, - 0x02,0x10,0x2a,0x05,0xe5,0xc0,0x00,0x00,0x01,0x00,0x02,0x50,0x56,0xff,0xfe,0xb9,0xd6,0xcb,0x20,0x8d, - 0x02,0x10,0x2a,0x05,0xfc,0x87,0x00,0x01,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x8d, - 0x02,0x10,0x2a,0x05,0xfc,0x87,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x8d, - 0x02,0x10,0x2a,0x07,0x57,0x41,0x00,0x00,0x11,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x2a,0x07,0xa8,0x80,0x46,0x01,0x10,0x62,0xb4,0xb4,0xbd,0x2a,0x39,0xd4,0x7a,0xcf,0xc8,0xc9, - 0x02,0x10,0x2a,0x07,0xab,0xc4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x46,0x20,0x8d, - 0x02,0x10,0x2a,0x07,0xb4,0x00,0x00,0x01,0x03,0x4c,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x02,0x20,0x8d, - 0x02,0x10,0x2a,0x0a,0x8c,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb4,0x20,0x8d, - 0x02,0x10,0x2a,0x0a,0xc8,0x01,0x00,0x01,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0x20,0x8d, - 0x02,0x10,0x2a,0x0b,0xae,0x40,0x00,0x03,0x4a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x20,0x8d, - 0x02,0x10,0x2a,0x0f,0xdf,0x00,0x00,0x00,0x02,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x20,0x8d, - 0x02,0x10,0x2c,0x0f,0xf5,0x98,0x00,0x05,0x00,0x01,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x02,0x10,0x2c,0x0f,0xfc,0xe8,0x00,0x00,0x04,0x00,0x0b,0x7c,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x8d, - 0x04,0x20,0xd1,0xbb,0x02,0x8d,0x4d,0xd5,0x6a,0x20,0xc0,0xf9,0x16,0x2b,0x84,0x22,0x66,0xe0,0x89,0x45,0x60,0x37,0x52,0xe2,0x0b,0xa5,0xb4,0xf8,0x26,0xb3,0x8f,0x5a,0x30,0xed,0x20,0x8d, - 0x04,0x20,0xd2,0x59,0x3b,0xd7,0x14,0x7e,0xd0,0x98,0xfe,0x9e,0xa5,0x69,0xf4,0x26,0x6d,0x72,0x6f,0xc3,0x76,0xce,0x1d,0x40,0x41,0xa2,0xa1,0xaf,0xf9,0x6e,0x57,0x2d,0x9d,0xc3,0x20,0x8d, - 0x04,0x20,0xdf,0xd9,0xed,0x59,0xbf,0x1e,0x77,0x48,0x3c,0x13,0x3b,0xc5,0xc8,0x15,0x86,0x88,0x68,0xf0,0x08,0xe9,0xee,0x9b,0x3d,0xa4,0x33,0x0a,0x68,0x67,0x86,0x9d,0xe2,0x83,0x20,0x8d, - 0x04,0x20,0xe9,0xbf,0xa7,0xbd,0x9b,0x54,0x54,0xe8,0xc8,0xae,0x78,0x99,0xa0,0xa3,0xf6,0x5d,0x78,0xe3,0x9e,0x5c,0xa7,0x18,0xb9,0x13,0x0c,0x04,0x9b,0xf3,0x7f,0x27,0x18,0xb0,0x20,0x8d, - 0x04,0x20,0xf8,0x8d,0x64,0xd2,0xc8,0xe9,0x0f,0x51,0x03,0x1c,0x98,0x33,0x8f,0xe0,0x1e,0xe7,0xb6,0x16,0x8d,0x2a,0xf5,0xf3,0x19,0xce,0xdd,0x9e,0xee,0x17,0xc3,0x8f,0xd6,0xa1,0x20,0x8d, - 0x04,0x20,0xfb,0xf1,0x17,0xd6,0x03,0x3b,0x01,0x8b,0x98,0xcf,0x16,0x20,0xde,0xaf,0x6c,0xed,0x60,0xab,0x6e,0x14,0x0b,0x58,0x6b,0x2d,0xf8,0x06,0x98,0x37,0x7a,0xff,0x7a,0x0f,0x20,0x8d, - 0x04,0x20,0x0f,0xb9,0x71,0x05,0x64,0x83,0x2c,0x68,0x6a,0x9c,0xf0,0x4f,0xc3,0x90,0xcd,0x5c,0x73,0x9a,0xdd,0xb3,0xc6,0x42,0xca,0x09,0xbb,0xcc,0xfe,0x29,0x49,0x9f,0xc7,0x28,0x20,0x8d, - 0x04,0x20,0x22,0x6e,0x42,0xe4,0xbd,0x2b,0xe5,0x3e,0x30,0xda,0x8a,0x03,0xf3,0x45,0x52,0xac,0x84,0xbf,0xbf,0xc5,0xaa,0x5f,0xe0,0x1b,0x26,0x28,0xb5,0x83,0x2e,0xed,0x4c,0xee,0x20,0x8d, - 0x04,0x20,0x2a,0x47,0x8b,0xa0,0x4f,0x67,0x1d,0xcd,0x5d,0x84,0x1a,0xec,0xbd,0xd2,0xaa,0xe9,0x99,0x01,0x96,0x5d,0x4e,0xff,0x64,0x47,0xba,0xde,0xbf,0x56,0x89,0x39,0xac,0xde,0x20,0x8d, - 0x04,0x20,0x2b,0xf3,0xe8,0xf5,0xef,0x90,0x14,0xab,0x61,0xe9,0x11,0x97,0x9f,0x18,0x4d,0xb4,0xff,0x89,0x94,0xf7,0x92,0x94,0x53,0xe6,0x9e,0xd4,0xdb,0x85,0x89,0x4d,0x3e,0xc9,0x20,0x8d, - 0x04,0x20,0x2e,0x4e,0xde,0x51,0xd7,0x28,0x4b,0x29,0x7c,0xff,0x1f,0x8a,0x50,0xb7,0x5e,0xf0,0x81,0xcd,0xe8,0x8a,0x08,0x73,0x58,0x4e,0x43,0x1f,0x7b,0x85,0x9a,0xed,0xe2,0x68,0x20,0x8d, - 0x04,0x20,0x35,0xdd,0xd0,0x36,0xa5,0x69,0x4a,0xd2,0xcc,0xb8,0xe9,0x62,0xa3,0x55,0xeb,0x86,0xe2,0xf3,0x03,0x48,0x26,0xe6,0x20,0xad,0xda,0xaa,0xff,0xde,0x16,0xad,0x39,0x9d,0x20,0x8d, - 0x04,0x20,0x41,0x47,0x4e,0xc2,0xa1,0x71,0x63,0x3e,0x11,0x54,0x46,0x91,0x80,0xed,0x41,0x16,0x32,0x29,0x19,0x60,0xc9,0xef,0xa3,0xb7,0x96,0x2c,0x94,0xa8,0xdf,0x55,0xd7,0x21,0x20,0x8d, - 0x04,0x20,0x44,0xf3,0xb7,0x5e,0x48,0x3c,0xbd,0xa6,0x52,0xaa,0x68,0xb5,0xbf,0xdc,0x01,0x5f,0x4b,0xeb,0x7a,0x25,0xcb,0x4a,0x70,0xbc,0x18,0x8c,0x97,0x5d,0x27,0x54,0x09,0x17,0x20,0x8d, - 0x04,0x20,0x5c,0x52,0x7f,0x17,0x16,0x4c,0x27,0x36,0x2d,0x05,0xa1,0x19,0x0d,0xbe,0x87,0xab,0x24,0x7b,0xe7,0x38,0x3b,0xa1,0x7f,0xd1,0xd4,0x28,0x16,0x8e,0xfc,0x98,0x7d,0x08,0x20,0x8d, - 0x04,0x20,0x67,0xc4,0x17,0xa5,0xcb,0x77,0xbd,0xaa,0x11,0x7f,0x8b,0xc0,0x81,0xf3,0xc0,0x96,0x9d,0x31,0x27,0x9c,0xad,0x6c,0x6d,0x98,0x42,0x70,0xdb,0x50,0x12,0x96,0x0b,0x36,0x20,0x8d, - 0x04,0x20,0x73,0xdb,0x82,0xe0,0x88,0x40,0x49,0xd8,0x3b,0xa0,0xdd,0x83,0x7c,0x84,0x3c,0xb8,0xd0,0x03,0x0b,0x7a,0x08,0x44,0x4e,0x79,0xd6,0x61,0x23,0x31,0xa9,0xb3,0x07,0x58,0x20,0x8d, - 0x04,0x20,0x75,0x93,0x21,0xdd,0x99,0x58,0x3c,0x3f,0xae,0x36,0x50,0x58,0x49,0xe2,0xd0,0xc3,0x3a,0x2c,0x4a,0xcf,0x41,0xc4,0x82,0x48,0xab,0xec,0x07,0x5d,0x56,0x2c,0xb4,0x8d,0x20,0x8d, - 0x04,0x20,0x87,0xd4,0x66,0x0f,0xed,0xf9,0xf5,0xf1,0xcb,0x85,0x37,0xec,0xe1,0x19,0xa8,0xa4,0x03,0xb7,0x13,0x59,0xbb,0xf8,0xd2,0x93,0x92,0x50,0xfa,0x30,0x7a,0xd8,0x43,0xd0,0x20,0x8d, - 0x04,0x20,0x8b,0xfe,0xad,0x19,0xdb,0x97,0x57,0x84,0xec,0xad,0x4f,0xb2,0xdf,0x69,0x53,0x04,0x57,0x19,0x16,0x7a,0x71,0xd7,0x2b,0xab,0x03,0xfd,0x76,0x4d,0xa0,0x70,0xc3,0xe7,0x20,0x8d, - 0x04,0x20,0x96,0x25,0xde,0x4a,0xbc,0xbd,0x76,0x76,0xee,0x43,0x45,0x76,0xe0,0x0d,0x99,0x83,0xcd,0x83,0x8f,0x94,0xe5,0xde,0x7a,0xf2,0xf0,0x57,0xb8,0x25,0x54,0x17,0xcb,0x3b,0x20,0x8d, - 0x04,0x20,0x98,0xc6,0x44,0x27,0x90,0x41,0xa6,0x98,0xf9,0x25,0x6c,0x59,0x0f,0x06,0x6d,0x44,0x59,0x0e,0xb2,0x46,0xb0,0xa4,0x37,0x88,0x69,0x8f,0xc1,0x32,0xcd,0x9f,0x15,0xd7,0x20,0x8d, - 0x04,0x20,0xaa,0x3a,0x16,0x86,0xea,0x59,0x09,0x04,0x78,0xe5,0x10,0x92,0xe1,0x1d,0xad,0xf7,0x56,0x2b,0xac,0xb0,0x97,0x29,0x63,0x30,0xf4,0x1b,0xcf,0xde,0xf3,0x28,0x0a,0x29,0x20,0x8d, - 0x04,0x20,0xbc,0x27,0xae,0x89,0xc1,0x67,0x73,0x0a,0x08,0x02,0xdf,0xb7,0xcc,0x94,0xc7,0x9f,0xf4,0x72,0x7a,0x9b,0x20,0x0c,0x5c,0x11,0x3d,0x22,0xd6,0x13,0x88,0x66,0x74,0xbf,0x20,0x8d, - 0x05,0x20,0xe1,0xd6,0xb8,0xfa,0xdd,0xeb,0x03,0x32,0x30,0x3b,0x20,0x6a,0xbc,0xaf,0x99,0x4f,0xa0,0xa2,0x72,0x48,0xfe,0x44,0xe0,0xf6,0x03,0xc1,0xbd,0xb6,0x24,0xd0,0xf6,0xb8,0x00,0x00, - 0x05,0x20,0xf4,0xb7,0xb4,0xcd,0xf5,0xb6,0x54,0x82,0x27,0x6d,0x29,0x7b,0x06,0x7f,0x52,0x59,0xa0,0xb4,0xdc,0xf7,0x6f,0xb4,0x71,0xcf,0xcc,0xfb,0x6b,0x86,0xc2,0x57,0x80,0xc6,0x00,0x00, - 0x05,0x20,0x07,0x61,0x26,0xd7,0x6c,0x05,0xbf,0xf6,0x2d,0x8c,0xca,0xc4,0x65,0xd3,0xd3,0xb2,0x49,0xe9,0xcc,0x53,0x1e,0xca,0x77,0x84,0xb6,0x10,0x5e,0xc2,0x5a,0xfe,0x28,0xb3,0x00,0x00, - 0x05,0x20,0x0a,0x26,0x27,0x45,0xb1,0x1e,0xfc,0x27,0x03,0x32,0x0e,0x65,0x9e,0x3c,0x64,0x0e,0x33,0x50,0x3d,0x6c,0x90,0x17,0x0e,0x29,0xee,0x5a,0x58,0xdf,0x08,0xde,0xbf,0x73,0x00,0x00, - 0x05,0x20,0x17,0x0c,0x56,0xce,0x72,0xa5,0xa0,0xe6,0x23,0x06,0xa3,0xc7,0x08,0x43,0x18,0xee,0x3a,0x46,0x35,0x5d,0x17,0xf6,0x78,0x96,0xa0,0x9c,0x51,0xef,0xbe,0x23,0xfd,0x71,0x00,0x00, - 0x05,0x20,0x19,0xe7,0x0d,0x3f,0xfe,0x9e,0x0e,0x8e,0x73,0x40,0x40,0xc3,0xba,0x8f,0x41,0xaf,0xf1,0x7b,0xa6,0x83,0x1b,0xc3,0xa4,0xe0,0x6d,0x6c,0x57,0xa7,0x36,0x5d,0x09,0xce,0x00,0x00, - 0x05,0x20,0x31,0x0f,0x30,0x0b,0x9d,0x70,0x0c,0x7c,0xf7,0x98,0x7e,0x1c,0xf4,0x33,0xdc,0x64,0x17,0xf7,0x00,0x7a,0x0c,0x04,0xb5,0x83,0xfc,0x5f,0xa6,0x52,0x39,0x79,0x63,0x87,0x00,0x00, - 0x05,0x20,0x3e,0xe3,0xe0,0xa9,0xbc,0xf4,0x2e,0x59,0xd9,0x20,0xee,0xdf,0x74,0x61,0x4d,0x99,0x0c,0x5c,0x15,0x30,0x9b,0x72,0x16,0x79,0x15,0xf4,0x7a,0xca,0x34,0xcc,0x81,0x99,0x00,0x00, - 0x05,0x20,0x3b,0x42,0x1c,0x25,0xf7,0xbf,0x79,0xed,0x6d,0x7d,0xef,0x65,0x30,0x7d,0xee,0x16,0x37,0x22,0x72,0x43,0x33,0x28,0x40,0xa3,0xaa,0xf4,0x48,0x49,0x67,0xb1,0x4b,0xfd,0x00,0x00, - 0x05,0x20,0x46,0xce,0x21,0x81,0x48,0xce,0xa7,0x8a,0x98,0xca,0xb1,0x0b,0x51,0xa5,0xc8,0xff,0x39,0xc5,0x1a,0xa3,0xd3,0x02,0x32,0xa3,0x29,0xad,0x79,0xb8,0x7f,0x34,0x51,0x33,0x00,0x00, - 0x05,0x20,0x4e,0x77,0x2e,0x12,0x91,0x67,0x6b,0x94,0xc4,0x92,0x2f,0x19,0x67,0x7d,0xcd,0x47,0x02,0xad,0xf8,0x60,0x72,0xed,0x73,0xf1,0x10,0x99,0x2c,0x05,0x61,0x66,0x55,0xd9,0x00,0x00, - 0x05,0x20,0x53,0x94,0xa6,0x3e,0x14,0x82,0xd4,0xf9,0xd3,0xa7,0x53,0x33,0x05,0xce,0x72,0x64,0xed,0x74,0x09,0x63,0x8f,0x24,0xef,0xda,0x12,0xa1,0x55,0xe0,0xd8,0xbb,0xd3,0x58,0x00,0x00, - 0x05,0x20,0x55,0x62,0x32,0x7d,0x82,0x32,0x4f,0x9d,0xdf,0x24,0x5c,0xed,0x8e,0x1a,0x5a,0x8d,0xc6,0x50,0xb4,0x32,0xd5,0x85,0xef,0xb0,0xfa,0x7c,0xf9,0xbb,0x25,0x89,0x6b,0x03,0x00,0x00, - 0x05,0x20,0x91,0xcf,0xa2,0x5b,0x04,0x33,0x69,0x66,0xb0,0x72,0x27,0x54,0xbe,0xcd,0xd8,0x08,0xeb,0x95,0x55,0x5a,0xc2,0x79,0x91,0x3a,0xd9,0xf2,0x2c,0x73,0x9f,0x78,0x50,0xca,0x00,0x00, - 0x05,0x20,0xb5,0x83,0x6f,0xb6,0x11,0xd8,0x0e,0xa8,0x57,0xda,0x15,0x20,0x5b,0x1a,0x6d,0x21,0x15,0x5a,0xbd,0xb4,0x17,0x11,0xc2,0xfb,0x0e,0xfc,0xde,0xe8,0x26,0x56,0xa8,0xac,0x00,0x00, - 0x05,0x20,0xcc,0xaf,0x6c,0x3b,0xd0,0x13,0x76,0x23,0xc3,0x36,0xbb,0x64,0x4a,0x4a,0x06,0x93,0x69,0x6d,0xb0,0x10,0x6e,0x66,0xa4,0x61,0xf8,0x2d,0xe7,0x80,0x72,0x4d,0x53,0x94,0x00,0x00, + 0x01,0x04,0x05,0xbc,0x68,0xf5,0x24,0xb9, + 0x01,0x04,0x14,0x36,0xd7,0x1d,0x24,0xb9, + 0x01,0x04,0x1b,0x7d,0xbe,0x25,0x24,0xb9, + 0x01,0x04,0x1f,0x19,0xf1,0xe0,0x24,0xb9, + 0x01,0x04,0x28,0x4c,0xae,0xf5,0x24,0xb9, + 0x01,0x04,0x32,0xdc,0x79,0xd3,0x17,0xfa, + 0x01,0x04,0x33,0x0f,0x86,0xe3,0x24,0xb9, + 0x01,0x04,0x33,0x0f,0xe5,0x9f,0x24,0xb9, + 0x01,0x04,0x33,0xd2,0x22,0x3e,0x0a,0x20, + 0x01,0x04,0x34,0xc2,0xa5,0x03,0x24,0xb9, + 0x01,0x04,0x34,0xc4,0x38,0x01,0x24,0xb9, + 0x01,0x04,0x42,0x97,0xf2,0x9a,0x24,0xb9, + 0x01,0x04,0x53,0xdd,0xd3,0x74,0x24,0xb9, + 0x01,0x04,0x56,0x69,0x33,0xcc,0x24,0xb9, + 0x01,0x04,0x59,0x97,0xbf,0xce,0x24,0xb9, + 0x01,0x04,0x5f,0xd9,0x4e,0x50,0x24,0xb9, + 0x01,0x04,0x66,0x43,0x88,0xf7,0x24,0xb9, + 0x01,0x04,0x6c,0x3d,0xb7,0x25,0x24,0xb9, + 0x01,0x04,0x73,0xbb,0x41,0x60,0x24,0xb9, + 0x01,0x04,0x76,0x1b,0x1e,0x70,0x24,0xb9, + 0x01,0x04,0x76,0x1b,0x76,0xfa,0x24,0xb9, + 0x01,0x04,0x76,0xf0,0xd3,0x92,0x24,0xb9, + 0x01,0x04,0x7c,0xd0,0x1d,0x35,0x24,0xb9, + 0x01,0x04,0x85,0xa7,0x45,0xf7,0x24,0xb9, + 0x01,0x04,0x85,0xf2,0xaf,0x6a,0x24,0xb9, + 0x01,0x04,0x8a,0x44,0xe9,0x87,0x24,0xb9, + 0x01,0x04,0x91,0xef,0x00,0x6a,0x24,0xb9, + 0x01,0x04,0x93,0xc0,0x78,0x0e,0x24,0xb9, + 0x01,0x04,0x99,0x7e,0xb0,0xb7,0x24,0xb9, + 0x01,0x04,0xa0,0x10,0x00,0x1e,0x24,0xb9, + 0x01,0x04,0xa0,0x10,0xf1,0x64,0x24,0xb9, + 0x01,0x04,0xb0,0x09,0x65,0x07,0x24,0xb9, + 0x01,0x04,0xb2,0xee,0xe0,0xd5,0x24,0xb9, + 0x01,0x04,0xb6,0xfe,0x89,0xe7,0x24,0xb9, + 0x01,0x04,0xb9,0xae,0xad,0x14,0x24,0xb9, + 0x01,0x04,0xcf,0x94,0x70,0x16,0x24,0xb9, + 0x01,0x04,0xd2,0x88,0x2a,0xfd,0x24,0xb9, + 0x01,0x04,0xdb,0x5e,0xfc,0xc7,0x24,0xb9, + 0x02,0x10,0x20,0x01,0x41,0xd0,0x07,0x00,0x04,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0xb9, + 0x02,0x10,0x20,0x01,0x0b,0xc8,0x44,0x00,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x01,0x01,0x24,0xb9, + 0x02,0x10,0x20,0x01,0x0e,0x42,0x01,0x02,0x15,0x05,0x01,0x60,0x00,0x16,0x00,0x59,0x00,0x06,0x24,0xb9, + 0x02,0x10,0x20,0x01,0x0e,0x42,0x01,0x02,0x15,0x33,0x01,0x60,0x00,0x16,0x01,0x15,0x01,0x20,0x24,0xb9, + 0x02,0x10,0x20,0x01,0x0e,0x42,0x01,0x02,0x18,0x22,0x01,0x60,0x00,0x16,0x02,0x41,0x01,0x00,0x24,0xb9, + 0x02,0x10,0x20,0x01,0x0e,0x42,0x01,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x24,0xb9, + 0x02,0x10,0x24,0x00,0x24,0x12,0x07,0x20,0x91,0x00,0xec,0x40,0xa6,0xe5,0x05,0x49,0xf9,0x41,0x24,0xb9, + 0x02,0x10,0x24,0x00,0x26,0x50,0x23,0x20,0x61,0x00,0xf5,0x77,0x0a,0x0d,0xa1,0xd2,0xb4,0xba,0x24,0xb9, + 0x02,0x10,0x24,0x00,0x40,0x52,0x0e,0x20,0x4f,0x00,0x69,0xfe,0xbb,0x33,0x7b,0x1c,0xa1,0xca,0x24,0xb9, + 0x02,0x10,0x24,0x03,0x3a,0x00,0x02,0x02,0x12,0x02,0x02,0x19,0x00,0x94,0x02,0x52,0x01,0x99,0x24,0xb9, + 0x02,0x10,0x24,0x0b,0x00,0x10,0xc1,0x00,0xa8,0x00,0xf1,0xda,0xef,0x5d,0x9e,0x05,0xef,0x41,0x24,0xb9, + 0x02,0x10,0x24,0x0b,0x00,0x11,0x09,0x40,0xbe,0x00,0xe1,0x43,0x7b,0x82,0x41,0x3e,0xf1,0x68,0x24,0xb9, + 0x02,0x10,0x24,0x0b,0x00,0x12,0x49,0x00,0xe1,0x00,0xd5,0xf2,0xf6,0xef,0xa1,0xc0,0x8e,0x84,0x24,0xb9, + 0x02,0x10,0x24,0x0d,0x00,0x1a,0x01,0xff,0x8f,0x00,0x78,0x2e,0x80,0x9a,0x47,0x11,0xda,0x72,0x24,0xb9, + 0x02,0x10,0x2a,0x01,0x04,0xf8,0x01,0x51,0x43,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x24,0xb9, }; static const uint8_t chainparams_seed_test[] = { - 0x04,0x20,0xdf,0x55,0xaa,0x83,0xd5,0xc5,0xb8,0xe7,0x75,0x78,0xd4,0x29,0x51,0x4b,0x26,0x1c,0x23,0xdf,0x28,0x4d,0x29,0x85,0x07,0xb5,0xe2,0x29,0x69,0x3e,0x25,0xbb,0x61,0xcf,0x47,0x9d, - 0x04,0x20,0x0a,0xdd,0xa2,0x48,0xb5,0x56,0xa3,0x1f,0xca,0x3c,0x4c,0x9e,0xca,0x6e,0xb3,0xd5,0x5e,0x68,0xf6,0x28,0x31,0x57,0x24,0xfb,0x9d,0x2b,0x55,0x4f,0xd7,0x90,0x62,0xd3,0x47,0x9d, - 0x04,0x20,0x2d,0x04,0xa1,0x4a,0xd4,0x7c,0x7b,0x16,0x2e,0xb7,0xd2,0xa1,0x08,0xc5,0xd2,0xbd,0x53,0x87,0x34,0xdc,0x38,0x26,0xca,0x56,0xf2,0xac,0xc5,0x62,0x70,0x72,0x3f,0x63,0x47,0x9d, - 0x04,0x20,0x30,0x57,0x85,0xe0,0x02,0x4a,0xd1,0x31,0xeb,0x16,0x1b,0x1d,0xa8,0x43,0x0b,0xb4,0xc6,0xac,0x7d,0x46,0x24,0x0b,0x55,0x9d,0x16,0xe6,0x46,0x03,0x72,0xfe,0xd4,0xef,0x47,0x9d, - 0x04,0x20,0x36,0x6c,0xf1,0xd2,0xbb,0xda,0xff,0x8c,0x93,0x61,0x10,0xf2,0x9d,0xa1,0xa4,0x0a,0x30,0x9b,0x0c,0x69,0x6d,0xaa,0xd4,0x9c,0xfd,0xb5,0x5b,0x5e,0x30,0x9f,0xf3,0x13,0x47,0x9d, - 0x04,0x20,0x3e,0xe2,0xf3,0xe5,0xc5,0xbe,0x61,0xdd,0x4c,0x3e,0xdb,0x0d,0xd2,0xf9,0x42,0xe3,0x31,0xb2,0xa8,0x51,0x31,0xf6,0xce,0xc2,0x38,0x20,0x27,0x39,0x73,0x68,0x5a,0x42,0x47,0x9d, - 0x04,0x20,0x51,0x79,0x05,0x9c,0x8a,0xdf,0x03,0xb5,0x1b,0x17,0xc3,0x86,0xb6,0x54,0xcc,0xe0,0x6e,0x58,0xa6,0x41,0x4c,0xcc,0x0c,0x60,0x08,0xa6,0x0f,0x1d,0x11,0xd8,0x29,0xa6,0x47,0x9d, - 0x04,0x20,0x60,0xbe,0xae,0x7d,0xa3,0x4d,0x6a,0x71,0x1a,0x5d,0xe5,0x98,0x9c,0xde,0xa0,0x99,0x39,0x19,0xd3,0x01,0x0a,0x5d,0x1c,0x21,0x43,0x94,0x92,0x71,0x5d,0x77,0xd7,0xdf,0x47,0x9d, - 0x04,0x20,0x64,0x4e,0x86,0xa1,0x02,0xa1,0x8a,0xef,0xb0,0xd1,0xb5,0x77,0x69,0xb9,0x6a,0xdc,0xdf,0x35,0x8a,0xda,0xa4,0x3e,0x83,0xfa,0x50,0xe6,0xca,0x0e,0x2b,0x99,0x0a,0x17,0x47,0x9d, - 0x04,0x20,0xa2,0x28,0x3c,0x5a,0x5b,0x82,0x32,0x66,0x11,0xe5,0x71,0xff,0x6b,0x25,0x92,0x75,0xdd,0x7a,0x4f,0x90,0x8b,0x1d,0x34,0xa4,0xf1,0x6e,0xb9,0xfb,0xb5,0x2e,0x7c,0x7f,0x47,0x9d, - 0x04,0x20,0xc8,0xb5,0x6a,0xba,0x02,0x26,0x45,0x12,0xfb,0x93,0x8a,0x51,0xe4,0xb0,0xf3,0x94,0xb7,0xc0,0x74,0x72,0xeb,0x67,0x91,0x9e,0x04,0x36,0x6a,0x4b,0xef,0x0d,0x88,0xfe,0x47,0x9d, - 0x04,0x20,0xc8,0xfa,0xcd,0x8c,0xc3,0x6f,0x3c,0xd0,0x27,0x7e,0x7d,0xeb,0x51,0x01,0x65,0xb6,0x9e,0x02,0x09,0x64,0xf4,0x87,0x78,0x7b,0x8f,0x9d,0xaf,0x3b,0xa5,0xcc,0x56,0x2c,0x47,0x9d, + 0x01,0x04,0x99,0x78,0x27,0x59,0x4b,0xcb, + 0x01,0x04,0x96,0x5f,0xae,0x76,0x4b,0xcb, + 0x01,0x04,0x36,0xa8,0x2c,0xcd,0x4b,0xcb, + 0x01,0x04,0x3e,0x4d,0x9b,0x1f,0x4b,0xcb, + 0x01,0x04,0xa0,0x10,0xd0,0xd7,0x4b,0xcb, + 0x01,0x04,0x0d,0xe7,0x8c,0x46,0x4b,0xcb, + 0x02,0x10,0x20,0x01,0x0b,0xc8,0x47,0xa4,0x00,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x4b,0xcb, }; #endif // MONACOIN_CHAINPARAMSSEEDS_H diff --git a/src/clientversion.cpp b/src/clientversion.cpp index 950b79322b..afb358e9dd 100644 --- a/src/clientversion.cpp +++ b/src/clientversion.cpp @@ -12,7 +12,7 @@ * for both monacoind and monacoin-qt, to make it harder for attackers to * target servers or GUI users specifically. */ -const std::string CLIENT_NAME("Satoshi"); +const std::string CLIENT_NAME("MonacoinCore"); #ifdef HAVE_BUILD_INFO diff --git a/src/consensus/params.h b/src/consensus/params.h index 8b90c98b26..4eece57d65 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -102,7 +102,9 @@ struct Params { bool fPowNoRetargeting; int64_t nPowTargetSpacing; int64_t nPowTargetTimespan; + int64_t nPowTargetTimespanDigishield ; int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; } + int64_t DifficultyAdjustmentIntervalDigishield() const { return nPowTargetTimespanDigishield / nPowTargetSpacing; } /** The best chain should have at least this much work */ uint256 nMinimumChainWork; /** By default assume that the signatures in ancestors of this block are valid */ diff --git a/src/init.cpp b/src/init.cpp index 65ea1eca3e..b2a0596df3 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -104,6 +104,8 @@ static const bool DEFAULT_REST_ENABLE = false; static const char* DEFAULT_ASMAP_FILENAME="ip_asn.map"; +ChainstateManager* g_chainman = nullptr; + /** * The PID file facilities. */ @@ -1178,6 +1180,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) assert(!node.chainman); node.chainman = std::make_unique(); ChainstateManager& chainman = *node.chainman; + g_chainman = &chainman; assert(!node.peerman); node.peerman = PeerManager::make(chainparams, *node.connman, *node.addrman, node.banman.get(), diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 44f9879a23..d686fb4b1d 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -1145,7 +1145,7 @@ void PeerManagerImpl::ReattemptInitialBroadcast(CScheduler& scheduler) // Schedule next run for 10-15 minutes in the future. // We add randomness on every cycle to avoid the possibility of P2P fingerprinting. - const std::chrono::milliseconds delta = std::chrono::minutes{10} + GetRandMillis(std::chrono::minutes{5}); + const std::chrono::milliseconds delta = std::chrono::minutes{1} + GetRandMillis(std::chrono::minutes{1}); scheduler.scheduleFromNow([&] { ReattemptInitialBroadcast(scheduler); }, delta); } diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp index b64fc8d944..35202568c4 100644 --- a/src/node/blockstorage.cpp +++ b/src/node/blockstorage.cpp @@ -362,7 +362,7 @@ bool WriteUndoDataForBlock(const CBlockUndo& blockundo, BlockValidationState& st return true; } -bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, const Consensus::Params& consensusParams) +bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, int nHeight, const Consensus::Params& consensusParams) { block.SetNull(); @@ -380,7 +380,7 @@ bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, const Consensus::P } // Check the header - if (!CheckProofOfWork(block.GetHash(), block.nBits, consensusParams)) { + if (!CheckProofOfWork(block.GetPoWHash(nHeight >= Params().SwitchLyra2REv2_DGWblock()), block.nBits, consensusParams)) { return error("ReadBlockFromDisk: Errors in block header at %s", pos.ToString()); } @@ -396,7 +396,7 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus { const FlatFilePos block_pos{WITH_LOCK(cs_main, return pindex->GetBlockPos())}; - if (!ReadBlockFromDisk(block, block_pos, consensusParams)) { + if (!ReadBlockFromDisk(block, block_pos, pindex->nHeight, consensusParams)) { return false; } if (block.GetHash() != pindex->GetBlockHash()) { diff --git a/src/node/blockstorage.h b/src/node/blockstorage.h index d6ee553261..b6b02c3efb 100644 --- a/src/node/blockstorage.h +++ b/src/node/blockstorage.h @@ -67,7 +67,7 @@ uint64_t CalculateCurrentUsage(); void UnlinkPrunedFiles(const std::set& setFilesToPrune); /** Functions for disk access for blocks */ -bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, const Consensus::Params& consensusParams); +bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, int nHeight, const Consensus::Params& consensusParams); bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams); bool ReadRawBlockFromDisk(std::vector& block, const FlatFilePos& pos, const CMessageHeader::MessageStartChars& message_start); bool ReadRawBlockFromDisk(std::vector& block, const CBlockIndex* pindex, const CMessageHeader::MessageStartChars& message_start); diff --git a/src/pow.cpp b/src/pow.cpp index 1414d37564..7893c6a478 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -9,14 +9,176 @@ #include #include #include +#include +#include +#include + +#include +#include +#include + +unsigned int static KimotoGravityWell(const CBlockIndex* pindexLast, const CBlockHeader *pblock, uint64_t TargetBlocksSpacingSeconds, uint64_t PastBlocksMin, uint64_t PastBlocksMax, const Consensus::Params& params) { + /* current difficulty formula, megacoin - kimoto gravity well */ + const CBlockIndex *BlockLastSolved = pindexLast; + const CBlockIndex *BlockReading = pindexLast; + const CBlockHeader *BlockCreating = pblock; + BlockCreating = BlockCreating; + uint64_t PastBlocksMass = 0; + int64_t PastRateActualSeconds = 0; + int64_t PastRateTargetSeconds = 0; + double PastRateAdjustmentRatio = double(1); + arith_uint256 PastDifficultyAverage; + arith_uint256 PastDifficultyAveragePrev; + double EventHorizonDeviation; + double EventHorizonDeviationFast; + double EventHorizonDeviationSlow; + + if (BlockLastSolved == NULL || BlockLastSolved->nHeight == 0 || (uint64_t)BlockLastSolved->nHeight < PastBlocksMin) { return UintToArith256(params.powLimit).GetCompact(); } + + for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0; i++) { + if (PastBlocksMax > 0 && i > PastBlocksMax) { break; } + PastBlocksMass++; + + if (i == 1) { + PastDifficultyAverage.SetCompact(BlockReading->nBits); + } else if (arith_uint256().SetCompact(BlockReading->nBits) > PastDifficultyAveragePrev) { + PastDifficultyAverage = PastDifficultyAveragePrev + ((arith_uint256().SetCompact(BlockReading->nBits) - PastDifficultyAveragePrev) / i); + } else { + PastDifficultyAverage = PastDifficultyAveragePrev - ((PastDifficultyAveragePrev - arith_uint256().SetCompact(BlockReading->nBits)) / i); + } + PastDifficultyAveragePrev = PastDifficultyAverage; + + PastRateActualSeconds = BlockLastSolved->GetBlockTime() - BlockReading->GetBlockTime(); + PastRateTargetSeconds = TargetBlocksSpacingSeconds * PastBlocksMass; + PastRateAdjustmentRatio = double(1); + if (PastRateActualSeconds < 0) { PastRateActualSeconds = 0; } + if (PastRateActualSeconds != 0 && PastRateTargetSeconds != 0) { + PastRateAdjustmentRatio = double(PastRateTargetSeconds) / double(PastRateActualSeconds); + } + EventHorizonDeviation = 1 + (0.7084 * std::pow((double(PastBlocksMass)/double(144)), -1.228)); + EventHorizonDeviationFast = EventHorizonDeviation; + EventHorizonDeviationSlow = 1 / EventHorizonDeviation; + + if (PastBlocksMass >= PastBlocksMin) { + if ((PastRateAdjustmentRatio <= EventHorizonDeviationSlow) || (PastRateAdjustmentRatio >= EventHorizonDeviationFast)) { assert(BlockReading); break; } + } + if (BlockReading->pprev == NULL) { assert(BlockReading); break; } + BlockReading = BlockReading->pprev; + } + + arith_uint256 bnNew(PastDifficultyAverage); + if (PastRateActualSeconds != 0 && PastRateTargetSeconds != 0) { + bnNew *= PastRateActualSeconds; + bnNew /= PastRateTargetSeconds; + } + if (bnNew > UintToArith256(params.powLimit)) { bnNew = UintToArith256(params.powLimit); } + + return bnNew.GetCompact(); +} + + +unsigned int static DarkGravityWave(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params) { + /* current difficulty formula, dash - DarkGravity v3, written by Evan Duffield - evan@dashpay.io */ + const CBlockIndex *BlockLastSolved = pindexLast; + const CBlockIndex *BlockReading = pindexLast; + int64_t nActualTimespan = 0; + int64_t LastBlockTime = 0; + int64_t PastBlocksMin = 24; + int64_t PastBlocksMax = 24; + int64_t CountBlocks = 0; + arith_uint256 PastDifficultyAverage; + arith_uint256 PastDifficultyAveragePrev; + + if (BlockLastSolved == NULL || BlockLastSolved->nHeight < Params().SwitchLyra2REv2_DGWblock() + PastBlocksMin) { + return UintToArith256(params.powLimit).GetCompact(); + } + + for (unsigned int i = 1; BlockReading && BlockReading->nHeight >= Params().SwitchLyra2REv2_DGWblock(); i++) { + if (PastBlocksMax > 0 && i > PastBlocksMax) { break; } + CountBlocks++; + + if(CountBlocks <= PastBlocksMin) { + if (CountBlocks == 1) { PastDifficultyAverage.SetCompact(BlockReading->nBits); } + else { PastDifficultyAverage = ((PastDifficultyAveragePrev * CountBlocks)+(arith_uint256().SetCompact(BlockReading->nBits))) / (CountBlocks+1); } + PastDifficultyAveragePrev = PastDifficultyAverage; + } + + if(LastBlockTime > 0){ + int64_t Diff = (LastBlockTime - BlockReading->GetBlockTime()); + nActualTimespan += Diff; + } + LastBlockTime = BlockReading->GetBlockTime(); + + if (BlockReading->pprev == NULL) { assert(BlockReading); break; } + BlockReading = BlockReading->pprev; + } + + arith_uint256 bnNew(PastDifficultyAverage); + + int64_t _nTargetTimespan = CountBlocks*params.nPowTargetSpacing; + + if (nActualTimespan < _nTargetTimespan/3) + nActualTimespan = _nTargetTimespan/3; + if (nActualTimespan > _nTargetTimespan*3) + nActualTimespan = _nTargetTimespan*3; + + // Retarget + bnNew *= nActualTimespan; + bnNew /= _nTargetTimespan; + + if (bnNew > UintToArith256(params.powLimit)){ + bnNew = UintToArith256(params.powLimit); + } + + return bnNew.GetCompact(); +} + +unsigned int static GetNextWorkRequired_V2(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params) +{ + static const int64_t BlocksTargetSpacing = params.nPowTargetSpacing; + unsigned int TimeDaySeconds = 60 * 60 * 24; + int64_t PastSecondsMin = TimeDaySeconds * 0.25; + int64_t PastSecondsMax = TimeDaySeconds * 7; + uint64_t PastBlocksMin = PastSecondsMin / BlocksTargetSpacing; + uint64_t PastBlocksMax = PastSecondsMax / BlocksTargetSpacing; + + if (params.fPowNoRetargeting) + { + return pindexLast->nBits; + } + + return KimotoGravityWell(pindexLast, pblock, BlocksTargetSpacing, PastBlocksMin, PastBlocksMax, params); +} unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params) { assert(pindexLast != nullptr); unsigned int nProofOfWorkLimit = UintToArith256(params.powLimit).GetCompact(); + // Genesis block + if (pindexLast == NULL) + return nProofOfWorkLimit; + + if (params.fPowNoRetargeting) + return pindexLast->nBits; + + if(pindexLast->nHeight+1 >= Params().SwitchLyra2REv2_DGWblock()) + { + // DGWv3 + return DarkGravityWave(pindexLast, pblock, params); + } + else if(pindexLast->nHeight+1 >= Params().SwitchKGWblock() && pindexLast->nHeight+1 < Params().SwitchDIGIblock()){ + // KGW + return GetNextWorkRequired_V2(pindexLast, pblock, params); + } + + int64_t adjustmentInterval = params.DifficultyAdjustmentInterval(); + if ((pindexLast->nHeight+1) >= Params().SwitchDIGIblock()) { + adjustmentInterval = params.DifficultyAdjustmentIntervalDigishield(); + } + // Only change once per difficulty adjustment interval - if ((pindexLast->nHeight+1) % params.DifficultyAdjustmentInterval() != 0) + if ((pindexLast->nHeight+1) % adjustmentInterval != 0) { if (params.fPowAllowMinDifficultyBlocks) { @@ -24,12 +186,14 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead // If the new block's timestamp is more than 2* 10 minutes // then allow mining of a min-difficulty block. if (pblock->GetBlockTime() > pindexLast->GetBlockTime() + params.nPowTargetSpacing*2) + { return nProofOfWorkLimit; + } else { // Return the last non-special-min-difficulty-rules-block const CBlockIndex* pindex = pindexLast; - while (pindex->pprev && pindex->nHeight % params.DifficultyAdjustmentInterval() != 0 && pindex->nBits == nProofOfWorkLimit) + while (pindex->pprev && pindex->nHeight % adjustmentInterval != 0 && pindex->nBits == nProofOfWorkLimit) pindex = pindex->pprev; return pindex->nBits; } @@ -38,9 +202,17 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead } // Go back by what we want to be 14 days worth of blocks - int nHeightFirst = pindexLast->nHeight - (params.DifficultyAdjustmentInterval()-1); - assert(nHeightFirst >= 0); - const CBlockIndex* pindexFirst = pindexLast->GetAncestor(nHeightFirst); + // Monacoin: This fixes an issue where a 51% attack can change difficulty at will. + // Go back the full period unless it's the first retarget after genesis. Code courtesy of Art Forz + int blockstogoback = adjustmentInterval-1; + if ((pindexLast->nHeight+1) != adjustmentInterval) + blockstogoback = adjustmentInterval; + + // Go back by what we want to be 14 days worth of blocks + const CBlockIndex* pindexFirst = pindexLast; + for (int i = 0; pindexFirst && i < blockstogoback; i++) + pindexFirst = pindexFirst->pprev; + assert(pindexFirst); return CalculateNextWorkRequired(pindexLast, pindexFirst->GetBlockTime(), params); @@ -49,21 +221,45 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nFirstBlockTime, const Consensus::Params& params) { if (params.fPowNoRetargeting) + { return pindexLast->nBits; + } + + bool fNewDifficultyProtocol = ((pindexLast->nHeight+1) >= Params().SwitchDIGIblock()); + int64_t targetTimespan = params.nPowTargetTimespan; + if (fNewDifficultyProtocol) { + targetTimespan = params.nPowTargetTimespanDigishield; + } // Limit adjustment step int64_t nActualTimespan = pindexLast->GetBlockTime() - nFirstBlockTime; - if (nActualTimespan < params.nPowTargetTimespan/4) - nActualTimespan = params.nPowTargetTimespan/4; - if (nActualTimespan > params.nPowTargetTimespan*4) - nActualTimespan = params.nPowTargetTimespan*4; + + if (fNewDifficultyProtocol) //DigiShield implementation - thanks to RealSolid & WDC for this code + { + // amplitude filter - thanks to daft27 for this code + nActualTimespan = targetTimespan + (nActualTimespan - targetTimespan)/8; + if (nActualTimespan < (targetTimespan - (targetTimespan/4)) ) nActualTimespan = (targetTimespan - (targetTimespan/4)); + if (nActualTimespan > (targetTimespan + (targetTimespan/2)) ) nActualTimespan = (targetTimespan + (targetTimespan/2)); + } + else{ + if (nActualTimespan < params.nPowTargetTimespan/4) + nActualTimespan = params.nPowTargetTimespan/4; + if (nActualTimespan > params.nPowTargetTimespan*4) + nActualTimespan = params.nPowTargetTimespan*4; + } // Retarget - const arith_uint256 bnPowLimit = UintToArith256(params.powLimit); arith_uint256 bnNew; bnNew.SetCompact(pindexLast->nBits); + // Monacoin: intermediate uint256 can overflow by 1 bit + const arith_uint256 bnPowLimit = UintToArith256(params.powLimit); + bool fShift = bnNew.bits() > bnPowLimit.bits() - 1; + if (fShift) + bnNew >>= 1; bnNew *= nActualTimespan; - bnNew /= params.nPowTargetTimespan; + bnNew /= targetTimespan; + if (fShift) + bnNew <<= 1; if (bnNew > bnPowLimit) bnNew = bnPowLimit; diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp index 50a30cb511..be4c138bf8 100644 --- a/src/primitives/block.cpp +++ b/src/primitives/block.cpp @@ -7,12 +7,28 @@ #include #include +#include +#include +#include +#include uint256 CBlockHeader::GetHash() const { return SerializeHash(*this); } +uint256 CBlockHeader::GetPoWHash(bool bLyra2REv2) const +{ + uint256 thash; + if(bLyra2REv2){ + lyra2re2_hash(BEGIN(nVersion), BEGIN(thash)); + } + else{ + scrypt_1024_1_1_256(BEGIN(nVersion), BEGIN(thash)); + } + return thash; +} + std::string CBlock::ToString() const { std::stringstream s; diff --git a/src/primitives/block.h b/src/primitives/block.h index 962c73c857..117e09cf38 100644 --- a/src/primitives/block.h +++ b/src/primitives/block.h @@ -7,6 +7,8 @@ #define MONACOIN_PRIMITIVES_BLOCK_H #include +#include +#include #include #include @@ -52,6 +54,8 @@ class CBlockHeader uint256 GetHash() const; + uint256 GetPoWHash(bool bLyra2REv2 = false) const; + int64_t GetBlockTime() const { return (int64_t)nTime; diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp index 9df3cca86a..e975bbe263 100644 --- a/src/qt/intro.cpp +++ b/src/qt/intro.cpp @@ -135,7 +135,7 @@ Intro::Intro(QWidget *parent, int64_t blockchain_size_gb, int64_t chain_state_si ui->lblExplanation1->setText(ui->lblExplanation1->text() .arg(PACKAGE_NAME) .arg(m_blockchain_size_gb) - .arg(2009) + .arg(2014) .arg(tr("Monacoin")) ); ui->lblExplanation2->setText(ui->lblExplanation2->text().arg(PACKAGE_NAME)); diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp index 39dfa9ce8b..a47f1150dc 100644 --- a/src/qt/splashscreen.cpp +++ b/src/qt/splashscreen.cpp @@ -43,7 +43,7 @@ SplashScreen::SplashScreen(const NetworkStyle* networkStyle) // define text to place QString titleText = PACKAGE_NAME; QString versionText = QString("Version %1").arg(QString::fromStdString(FormatFullVersion())); - QString copyrightText = QString::fromUtf8(CopyrightHolders(strprintf("\xc2\xA9 %u-%u ", 2009, COPYRIGHT_YEAR)).c_str()); + QString copyrightText = QString::fromUtf8(CopyrightHolders(strprintf("\xc2\xA9 %u-%u ", 2013, COPYRIGHT_YEAR)).c_str()); QString titleAddText = networkStyle->getTitleAddText(); QString font = QApplication::font().toString(); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 54bdc71c87..2b22dbd88a 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -109,7 +109,7 @@ static RPCHelpMan getnetworkhashps() }; } -static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t& max_tries, unsigned int& extra_nonce, uint256& block_hash) +static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t& max_tries, unsigned int& extra_nonce, uint256& block_hash, int nHeight) { block_hash.SetNull(); @@ -120,7 +120,7 @@ static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t& CChainParams chainparams(Params()); - while (max_tries > 0 && block.nNonce < std::numeric_limits::max() && !CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus()) && !ShutdownRequested()) { + while (max_tries > 0 && block.nNonce < std::numeric_limits::max() && !CheckProofOfWork(block.GetPoWHash(nHeight+1 >= Params().SwitchLyra2REv2_DGWblock()), block.nBits, chainparams.GetConsensus()) && !ShutdownRequested()) { ++block.nNonce; --max_tries; } @@ -160,7 +160,7 @@ static UniValue generateBlocks(ChainstateManager& chainman, const CTxMemPool& me CBlock *pblock = &pblocktemplate->block; uint256 block_hash; - if (!GenerateBlock(chainman, *pblock, nMaxTries, nExtraNonce, block_hash)) { + if (!GenerateBlock(chainman, *pblock, nMaxTries, nExtraNonce, block_hash, nHeight)) { break; } @@ -392,7 +392,13 @@ static RPCHelpMan generateblock() uint64_t max_tries{DEFAULT_MAX_TRIES}; unsigned int extra_nonce{0}; - if (!GenerateBlock(chainman, block, max_tries, extra_nonce, block_hash) || block_hash.IsNull()) { + int nHeight = 0; + { // Don't keep cs_main locked + LOCK(cs_main); + nHeight = chainman.ActiveChain().Height(); + } + + if (!GenerateBlock(chainman, block, max_tries, extra_nonce, block_hash, nHeight) || block_hash.IsNull()) { throw JSONRPCError(RPC_MISC_ERROR, "Failed to make block."); } diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index bfd17bb453..eea5a1824e 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -290,8 +290,8 @@ static RPCHelpMan addnode() }, RPCResult{RPCResult::Type::NONE, "", ""}, RPCExamples{ - HelpExampleCli("addnode", "\"192.168.0.6:8333\" \"onetry\"") - + HelpExampleRpc("addnode", "\"192.168.0.6:8333\", \"onetry\"") + HelpExampleCli("addnode", "\"192.168.0.6:9401\" \"onetry\"") + + HelpExampleRpc("addnode", "\"192.168.0.6:9401\", \"onetry\"") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { @@ -348,8 +348,8 @@ static RPCHelpMan addconnection() { RPCResult::Type::STR, "connection_type", "Type of connection opened." }, }}, RPCExamples{ - HelpExampleCli("addconnection", "\"192.168.0.6:8333\" \"outbound-full-relay\"") - + HelpExampleRpc("addconnection", "\"192.168.0.6:8333\" \"outbound-full-relay\"") + HelpExampleCli("addconnection", "\"192.168.0.6:9401\" \"outbound-full-relay\"") + + HelpExampleRpc("addconnection", "\"192.168.0.6:9401\" \"outbound-full-relay\"") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { @@ -400,9 +400,9 @@ static RPCHelpMan disconnectnode() }, RPCResult{RPCResult::Type::NONE, "", ""}, RPCExamples{ - HelpExampleCli("disconnectnode", "\"192.168.0.6:8333\"") + HelpExampleCli("disconnectnode", "\"192.168.0.6:9401\"") + HelpExampleCli("disconnectnode", "\"\" 1") - + HelpExampleRpc("disconnectnode", "\"192.168.0.6:8333\"") + + HelpExampleRpc("disconnectnode", "\"192.168.0.6:9401\"") + HelpExampleRpc("disconnectnode", "\"\", 1") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue @@ -925,8 +925,8 @@ static RPCHelpMan addpeeraddress() }, }, RPCExamples{ - HelpExampleCli("addpeeraddress", "\"1.2.3.4\" 8333") - + HelpExampleRpc("addpeeraddress", "\"1.2.3.4\", 8333") + HelpExampleCli("addpeeraddress", "\"1.2.3.4\" 9401") + + HelpExampleRpc("addpeeraddress", "\"1.2.3.4\", 9401") }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { diff --git a/src/txdb.cpp b/src/txdb.cpp index 4b76bee5ab..b07b97d72d 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -299,8 +299,14 @@ bool CBlockTreeDB::LoadBlockIndexGuts(const Consensus::Params& consensusParams, pindexNew->nStatus = diskindex.nStatus; pindexNew->nTx = diskindex.nTx; - if (!CheckProofOfWork(pindexNew->GetBlockHash(), pindexNew->nBits, consensusParams)) - return error("%s: CheckProofOfWork failed: %s", __func__, pindexNew->ToString()); + // Monacoin: Disable PoW Sanity check while loading block index from disk. + // We use the sha256 hash for the block index for performance reasons, which is recorded for later use. + // CheckProofOfWork() uses the scrypt hash which is discarded after a block is accepted. + // While it is technically feasible to verify the PoW, doing so takes several minutes as it + // requires recomputing every PoW hash during every Monacoin startup. + // We opt instead to simply trust the data that is on your local disk. + //if (!CheckProofOfWork(pindexNew->GetBlockHash(), pindexNew->nBits, consensusParams)) + // return error("%s: CheckProofOfWork failed: %s", __func__, pindexNew->ToString()); pcursor->Next(); } else { diff --git a/src/util/strencodings.h b/src/util/strencodings.h index cc52a9608b..bcabb080e6 100644 --- a/src/util/strencodings.h +++ b/src/util/strencodings.h @@ -17,6 +17,8 @@ #include #include +#define BEGIN(a) ((char*)&(a)) + /** Used by SanitizeString() */ enum SafeChars { diff --git a/src/validation.cpp b/src/validation.cpp index e060899ea0..d5ff75f096 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -127,6 +127,8 @@ int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE; uint256 hashAssumeValid; arith_uint256 nMinimumChainWork; +extern ChainstateManager* g_chainman; + CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE); // Internal stuff @@ -1789,9 +1791,8 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state, // Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the // two in the chain that violate it. This prevents exploiting the issue against nodes during their // initial block download. - bool fEnforceBIP30 = !((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256S("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) || - (pindex->nHeight==91880 && pindex->GetBlockHash() == uint256S("0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721"))); - + bool fEnforceBIP30 = true; + // Once BIP34 activated it was not possible to create new duplicate coinbases and thus other than starting // with the 2 existing duplicate coinbase pairs, not possible to create overwriting txs. But by the // time BIP34 activated, in each of the existing pairs the duplicate coinbase had overwritten the first @@ -1818,7 +1819,7 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state, // future consensus change to do a new and improved version of BIP34 that // will actually prevent ever creating any duplicate coinbases in the // future. - static constexpr int BIP34_IMPLIES_BIP30_LIMIT = 1983702; + // static constexpr int BIP34_IMPLIES_BIP30_LIMIT = 1983702; // There is no potential to create a duplicate coinbase at block 209,921 // because this is still before the BIP34 height and so explicit BIP30 @@ -1856,7 +1857,7 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state, // TODO: Remove BIP30 checking from block height 1,983,702 on, once we have a // consensus change that ensures coinbases at those heights can not // duplicate earlier coinbases. - if (fEnforceBIP30 || pindex->nHeight >= BIP34_IMPLIES_BIP30_LIMIT) { + if (fEnforceBIP30) { for (const auto& tx : block.vtx) { for (size_t o = 0; o < tx->vout.size(); o++) { if (view.HaveCoin(COutPoint(tx->GetHash(), o))) { @@ -3005,8 +3006,15 @@ void CChainState::ReceivedBlockTransactions(const CBlock& block, CBlockIndex* pi static bool CheckBlockHeader(const CBlockHeader& block, BlockValidationState& state, const Consensus::Params& consensusParams, bool fCheckPOW = true) { + // Get prev block index + CBlockIndex* pindexPrev = g_chainman->m_blockman.LookupBlockIndex(block.hashPrevBlock); + int nHeight = 0; + if (pindexPrev) { + nHeight = pindexPrev->nHeight + 1; + } + // Check proof of work matches claimed amount - if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, consensusParams)) + if (fCheckPOW && !CheckProofOfWork(block.GetPoWHash(nHeight >= Params().SwitchLyra2REv2_DGWblock()), block.nBits, consensusParams)) return state.Invalid(BlockValidationResult::BLOCK_INVALID_HEADER, "high-hash", "proof of work failed"); return true; @@ -4249,7 +4257,10 @@ void CChainState::LoadExternalBlockFile(FILE* fileIn, FlatFilePos* dbp) while (range.first != range.second) { std::multimap::iterator it = range.first; std::shared_ptr pblockrecursive = std::make_shared(); - if (ReadBlockFromDisk(*pblockrecursive, it->second, m_params.GetConsensus())) { + uint256 hash = block.GetHash(); + LOCK(cs_main); + int nHeight = m_blockman.LookupBlockIndex(hash)->nHeight; + if (ReadBlockFromDisk(*pblockrecursive, it->second, nHeight, m_params.GetConsensus())) { LogPrint(BCLog::REINDEX, "%s: Processing out of order child %s of %s\n", __func__, pblockrecursive->GetHash().ToString(), head.ToString()); LOCK(cs_main); diff --git a/src/wallet/scriptpubkeyman.cpp b/src/wallet/scriptpubkeyman.cpp index 73433214f1..3a3cb16e55 100644 --- a/src/wallet/scriptpubkeyman.cpp +++ b/src/wallet/scriptpubkeyman.cpp @@ -1915,11 +1915,11 @@ bool DescriptorScriptPubKeyMan::SetupDescriptorGeneration(const CExtKey& master_ } // no default case, so the compiler can warn about missing cases assert(!desc_prefix.empty()); - // Mainnet derives at 0', testnet and regtest derive at 1' + // Mainnet derives at 22', testnet and regtest derive at 1' if (Params().IsTestChain()) { desc_prefix += "/1'"; } else { - desc_prefix += "/0'"; + desc_prefix += "/22'"; } std::string internal_path = internal ? "/1" : "/0"; diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index cdc319e581..98bf05ff8c 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -66,11 +66,11 @@ std::unique_ptr MakeWalletDatabase(const std::string& name, cons //! -paytxfee default constexpr CAmount DEFAULT_PAY_TX_FEE = 0; //! -fallbackfee default -static const CAmount DEFAULT_FALLBACK_FEE = 0; +static const CAmount DEFAULT_FALLBACK_FEE = 2000000; //! -discardfee default static const CAmount DEFAULT_DISCARD_FEE = 10000; //! -mintxfee default -static const CAmount DEFAULT_TRANSACTION_MINFEE = 1000; +static const CAmount DEFAULT_TRANSACTION_MINFEE = 100000; /** * maximum fee increase allowed to do partial spend avoidance, even for nodes with this feature disabled by default *