Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
- index 3c80203..83bfad2 100644
- --- a/.github/ISSUE_TEMPLATE.md
- +++ b/.github/ISSUE_TEMPLATE.md
- @@ -1,10 +1,10 @@
- <!--- Remove sections that do not apply -->
- -This issue tracker is only for technical issues related to litecoin-core.
- +This issue tracker is only for technical issues related to litecoincash-core.
- -General litecoin questions and/or support requests and are best directed to the [litecointalk.io forums](https://litecointalk.io/).
- +General litecoincash questions and/or support requests and are best directed to the [litecoincashtalk.io forums](https://litecoincashtalk.io/).
- -For reporting security issues, please contact the Litecoin developers on the #litecoin-dev Freenode IRC channel or alternatively you can email us at contact@litecoin.org.
- +For reporting security issues, please contact the LitecoinCash developers on the #litecoincash-dev Freenode IRC channel or alternatively you can email us at info@litecoinca.sh.
- ### Describe the issue
- @@ -23,7 +23,7 @@ Tell us what happens instead
- ### Screenshots.
- If the issue is related to the GUI, screenshots can be added to this issue via drag & drop.
- -### What version of litecoin-core are you using?
- +### What version of litecoincash-core are you using?
- List the version number/commit ID, and if it is an official binary, self compiled or a distribution package such as PPA.
- ### Machine specs:
- diff --git a/.gitignore b/.gitignore
- index a2034a6..230ddc1 100644
- --- a/.gitignore
- +++ b/.gitignore
- @@ -1,13 +1,13 @@
- *.tar.gz
- *.exe
- -src/litecoin
- -src/litecoind
- -src/litecoin-cli
- -src/litecoin-tx
- -src/test/test_litecoin
- -src/test/test_litecoin_fuzzy
- -src/qt/test/test_litecoin-qt
- +src/litecoincash
- +src/litecoincashd
- +src/litecoincash-cli
- +src/litecoincash-tx
- +src/test/test_litecoincash
- +src/test/test_litecoincash_fuzzy
- +src/qt/test/test_litecoincash-qt
- # autoreconf
- Makefile.in
- @@ -74,12 +74,12 @@ src/qt/test/moc*.cpp
- # Compilation and Qt preprocessor part
- *.qm
- Makefile
- -litecoin-qt
- -Litecoin-Qt.app
- +litecoincash-qt
- +LitecoinCash-Qt.app
- # Unit-tests
- Makefile.test
- -litecoin-qt_test
- +litecoincash-qt_test
- # Resources cpp
- qrc_*.cpp
- @@ -92,7 +92,7 @@ build
- *.gcno
- *.gcda
- /*.info
- -test_litecoin.coverage/
- +test_litecoincash.coverage/
- total.coverage/
- coverage_percent.txt
- diff --git a/.travis.yml b/.travis.yml
- index fd98c4d..212bdd0 100644
- --- a/.travis.yml
- +++ b/.travis.yml
- @@ -1,7 +1,7 @@
- sudo: required
- dist: trusty
- os: linux
- -language: minimal
- +language: generic
- cache:
- directories:
- - depends/built
- @@ -20,30 +20,31 @@ env:
- - SDK_URL=https://bitcoincore.org/depends-sources/sdks
- - PYTHON_DEBUG=1
- - WINEDEBUG=fixme-all
- - - LITECOIN_SCRYPT=0
- + - LITECOINCASH_SCRYPT=0
- matrix:
- # ARM
- - HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf" DEP_OPTS="NO_QT=1" CHECK_DOC=0 GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports"
- # Win32
- - - HOST=i686-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 python3-dev python3-pip nsis g++-mingw-w64-i686 wine1.6 bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports" LITECOIN_SCRYPT=1
- + - HOST=i686-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 python3-dev python3-pip nsis g++-mingw-w64-i686 wine1.6 bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports" LITECOINCASH_SCRYPT=1
- # 32-bit + dash
- - - HOST=i686-pc-linux-gnu PACKAGES="g++-multilib bc python3-zmq python3-dev python3-pip" DEP_OPTS="NO_QT=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash" LITECOIN_SCRYPT=1
- + - HOST=i686-pc-linux-gnu PACKAGES="g++-multilib bc python3-zmq python3-dev python3-pip" DEP_OPTS="NO_QT=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash" LITECOINCASH_SCRYPT=1
- # Win64
- - - HOST=x86_64-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 python3-dev python3-pip nsis g++-mingw-w64-x86-64 wine1.6 bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports --enable-sse2" LITECOIN_SCRYPT=1
- + - HOST=x86_64-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 python3-dev python3-pip nsis g++-mingw-w64-x86-64 wine1.6 bc" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-reduce-exports --enable-sse2" LITECOINCASH_SCRYPT=1
- # x86_64 Linux (uses qt5 dev package instead of depends Qt to speed up build and avoid timeout)
- - - HOST=x86_64-unknown-linux-gnu PACKAGES="python3-zmq python3-dev python3-pip qtbase5-dev qttools5-dev-tools protobuf-compiler libdbus-1-dev libharfbuzz-dev" DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --enable-glibc-back-compat --enable-reduce-exports --enable-sse2 CPPFLAGS=-DDEBUG_LOCKORDER" LITECOIN_SCRYPT=1
- + - HOST=x86_64-unknown-linux-gnu PACKAGES="python3-zmq python3-dev python3-pip qtbase5-dev qttools5-dev-tools protobuf-compiler libdbus-1-dev libharfbuzz-dev" DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --enable-glibc-back-compat --enable-reduce-exports --enable-sse2 CPPFLAGS=-DDEBUG_LOCKORDER" LITECOINCASH_SCRYPT=1
- # x86_64 Linux, No wallet
- - - HOST=x86_64-unknown-linux-gnu PACKAGES="python3 python3-dev python3-pip" DEP_OPTS="NO_WALLET=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports --enable-sse2" LITECOIN_SCRYPT=1
- + - HOST=x86_64-unknown-linux-gnu PACKAGES="python3 python3-dev python3-pip" DEP_OPTS="NO_WALLET=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports --enable-sse2" LITECOINCASH_SCRYPT=1
- # Cross-Mac
- - HOST=x86_64-apple-darwin11 PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev" BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --enable-sse2" OSX_SDK=10.11 GOAL="deploy"
- before_install:
- - export PATH=$(echo $PATH | tr ':' "\n" | sed '/\/opt\/python/d' | tr "\n" ":" | sed "s|::|:|g")
- + - export PATH=$(echo $PATH | tr ':' "\n" | sed '/\/opt\/pyenv/d' | tr "\n" ":" | sed "s|::|:|g")
- install:
- - if [ -n "$DPKG_ADD_ARCH" ]; then sudo dpkg --add-architecture "$DPKG_ADD_ARCH" ; fi
- - if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get update; fi
- - if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get install --no-install-recommends --no-upgrade -qq $PACKAGES; fi
- - - if [ "$LITECOIN_SCRYPT" = 1 ]; then travis_retry sudo pip3 install litecoin_scrypt; fi
- + - if [ "$LITECOINCASH_SCRYPT" = 1 ]; then travis_retry sudo pip3 install litecoincash_scrypt; fi
- before_script:
- - if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then contrib/devtools/commit-script-check.sh $TRAVIS_COMMIT_RANGE; fi
- - unset CC; unset CXX
- @@ -53,9 +54,9 @@ before_script:
- - if [ -n "$OSX_SDK" -a -f depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz ]; then tar -C depends/SDKs -xf depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz; fi
- - make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS
- script:
- - - if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "litecoin-project/litecoin" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then while read LINE; do travis_retry gpg --keyserver hkp://subset.pool.sks-keyservers.net --recv-keys $LINE; done < contrib/verify-commits/trusted-keys; fi
- - - if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "litecoin-project/litecoin" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then git fetch --unshallow; fi
- - - if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "litecoin-project/litecoin" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then contrib/verify-commits/verify-commits.sh; fi
- + - if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "litecoincash-project/litecoincash" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then while read LINE; do travis_retry gpg --keyserver hkp://subset.pool.sks-keyservers.net --recv-keys $LINE; done < contrib/verify-commits/trusted-keys; fi
- + - if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "litecoincash-project/litecoincash" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then git fetch --unshallow; fi
- + - if [ "$CHECK_DOC" = 1 -a "$TRAVIS_REPO_SLUG" = "litecoincash-project/litecoincash" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then contrib/verify-commits/verify-commits.sh; fi
- - export TRAVIS_COMMIT_LOG=`git log --format=fuller -1`
- - if [ -n "$USE_SHELL" ]; then export CONFIG_SHELL="$USE_SHELL"; fi
- - OUTDIR=$BASE_OUTDIR/$TRAVIS_PULL_REQUEST/$TRAVIS_JOB_NUMBER-$HOST
- @@ -65,7 +66,7 @@ script:
- - mkdir build && cd build
- - ../configure --cache-file=config.cache $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG || ( cat config.log && false)
- - make distdir VERSION=$HOST
- - - cd litecoin-$HOST
- + - cd litecoincash-$HOST
- - ./configure --cache-file=../config.cache $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG || ( cat config.log && false)
- - make $MAKEJOBS $GOAL || ( echo "Build failure. Verbose build follows." && make $GOAL V=1 ; false )
- - export LD_LIBRARY_PATH=$TRAVIS_BUILD_DIR/depends/$HOST/lib
- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
- index 893c72c..734eb79 100644
- --- a/CONTRIBUTING.md
- +++ b/CONTRIBUTING.md
- @@ -1,7 +1,7 @@
- -Contributing to Litecoin Core
- +Contributing to LitecoinCash Core
- ============================
- -The Litecoin Core project operates an open contributor model where anyone is
- +The LitecoinCash Core project operates an open contributor model where anyone is
- welcome to contribute towards development in the form of peer review, testing
- and patches. This document explains the practical process and guidelines for
- contributing.
- @@ -157,10 +157,10 @@ where possible keep them short, uncomplex and easy to verify.
- "Decision Making" Process
- -------------------------
- -The following applies to code changes to the Litecoin Core project, and is not to be confused with overall Litecoin
- +The following applies to code changes to the LitecoinCash Core project, and is not to be confused with overall LitecoinCash
- Network Protocol consensus changes.
- -Whether a pull request is merged into Litecoin Core rests with the project merge
- +Whether a pull request is merged into LitecoinCash Core rests with the project merge
- maintainers and ultimately the project lead.
- Maintainers will take into consideration if a patch is in line with the general
- @@ -178,7 +178,7 @@ In general, all pull requests must:
- - Where bugs are fixed, where possible, there should be unit tests
- demonstrating the bug and also proving the fix. This helps prevent regression.
- -Patches that change Litecoin consensus rules are considerably more involved than
- +Patches that change LitecoinCash consensus rules are considerably more involved than
- normal because they affect the entire ecosystem and so must be preceded by
- extensive mailing list discussions and have a numbered BIP. While each case will
- be different, one should be prepared to expend more time and effort than for
- @@ -219,7 +219,7 @@ higher in terms of discussion and peer review requirements, keeping in mind that
- mistakes could be very costly to the wider community. This includes refactoring
- of consensus critical code.
- -Where a patch set proposes to change the Litecoin consensus, it must have been
- +Where a patch set proposes to change the LitecoinCash consensus, it must have been
- discussed extensively on the mailing list and IRC, be accompanied by a widely
- discussed BIP and have a generally widely perceived technical consensus of being
- a worthwhile change based on the judgement of the maintainers.
- @@ -259,12 +259,14 @@ about:
- Release Policy
- --------------
- -The project leader is the release manager for each Litecoin Core release.
- +The project leader is the release manager for each LitecoinCash Core release.
- Copyright
- ---------
- -Copyright 2018 The Litecoin Core Developers
- +Copyright (c) 2018 The LitecoinCash Core developers
- +
- +- litecoin: Copyright 2018 The Litecoin Core developers
- - bitcoin: Copyright (c) 2009-2018 Bitcoin Core Developers (MIT License)
- By contributing to this repository, you agree to license your work under the
- diff --git a/COPYING b/COPYING
- index 9700e9e..f1ab3bc 100644
- --- a/COPYING
- +++ b/COPYING
- @@ -1,8 +1,8 @@
- The MIT License (MIT)
- Copyright (c) 2009-2018 The Bitcoin Core developers
- -Copyright (c) 2009-2018 Bitcoin Developers
- Copyright (c) 2011-2018 The Litecoin Core developers
- +Copyright (c) 2018 The LitecoinCash Core developers
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- diff --git a/Makefile.am b/Makefile.am
- index dfcd5ce..18877cf 100644
- --- a/Makefile.am
- +++ b/Makefile.am
- @@ -25,7 +25,7 @@ BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EX
- empty :=
- space := $(empty) $(empty)
- -OSX_APP=Litecoin-Qt.app
- +OSX_APP=LitecoinCash-Qt.app
- OSX_VOLNAME = $(subst $(space),-,$(PACKAGE_NAME))
- OSX_DMG = $(OSX_VOLNAME).dmg
- OSX_BACKGROUND_SVG=background.svg
- @@ -44,9 +44,6 @@ DIST_CONTRIB = $(top_srcdir)/contrib/bitcoin-cli.bash-completion \
- $(top_srcdir)/contrib/bitcoind.bash-completion \
- $(top_srcdir)/contrib/init \
- $(top_srcdir)/contrib/rpm
- -DIST_SHARE = \
- - $(top_srcdir)/share/genbuild.sh \
- - $(top_srcdir)/share/rpcuser
- BIN_CHECKS=$(top_srcdir)/contrib/devtools/symbol-check.py \
- $(top_srcdir)/contrib/devtools/security-check.py
- @@ -95,7 +92,7 @@ $(OSX_APP)/Contents/Resources/bitcoin.icns: $(OSX_INSTALLER_ICONS)
- $(MKDIR_P) $(@D)
- $(INSTALL_DATA) $< $@
- -$(OSX_APP)/Contents/MacOS/Litecoin-Qt: $(BITCOIN_QT_BIN)
- +$(OSX_APP)/Contents/MacOS/LitecoinCash-Qt: $(BITCOIN_QT_BIN)
- $(MKDIR_P) $(@D)
- STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $< $@
- @@ -105,7 +102,7 @@ $(OSX_APP)/Contents/Resources/Base.lproj/InfoPlist.strings:
- OSX_APP_BUILT=$(OSX_APP)/Contents/PkgInfo $(OSX_APP)/Contents/Resources/empty.lproj \
- $(OSX_APP)/Contents/Resources/bitcoin.icns $(OSX_APP)/Contents/Info.plist \
- - $(OSX_APP)/Contents/MacOS/Litecoin-Qt $(OSX_APP)/Contents/Resources/Base.lproj/InfoPlist.strings
- + $(OSX_APP)/Contents/MacOS/LitecoinCash-Qt $(OSX_APP)/Contents/Resources/Base.lproj/InfoPlist.strings
- osx_volname:
- echo $(OSX_VOLNAME) >$@
- @@ -130,7 +127,7 @@ $(APP_DIST_DIR)/Applications:
- @rm -f $@
- @cd $(@D); $(LN_S) /Applications $(@F)
- -$(APP_DIST_EXTRAS): $(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Litecoin-Qt
- +$(APP_DIST_EXTRAS): $(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/LitecoinCash-Qt
- $(OSX_DMG): $(APP_DIST_EXTRAS)
- $(GENISOIMAGE) -no-cache-inodes -D -l -probe -V "$(OSX_VOLNAME)" -no-pad -r -dir-mode 0755 -apple -o $@ dist
- @@ -145,7 +142,7 @@ $(APP_DIST_DIR)/.background/$(OSX_BACKGROUND_IMAGE): $(OSX_BACKGROUND_IMAGE_DPIF
- $(APP_DIST_DIR)/.DS_Store: $(OSX_DSSTORE_GEN)
- $(PYTHON) $< "$@" "$(OSX_VOLNAME)"
- -$(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Litecoin-Qt: $(OSX_APP_BUILT) $(OSX_PACKAGING)
- +$(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/LitecoinCash-Qt: $(OSX_APP_BUILT) $(OSX_PACKAGING)
- INSTALLNAMETOOL=$(INSTALLNAMETOOL) OTOOL=$(OTOOL) STRIP=$(STRIP) $(PYTHON) $(OSX_DEPLOY_SCRIPT) $(OSX_APP) -translations-dir=$(QT_TRANSLATION_DIR) -add-qt-tr $(OSX_QT_TRANSLATIONS) -verbose 2
- deploydir: $(APP_DIST_EXTRAS)
- @@ -216,7 +213,7 @@ endif
- dist_noinst_SCRIPTS = autogen.sh
- -EXTRA_DIST = $(DIST_SHARE) test/functional/test_runner.py test/functional $(DIST_CONTRIB) $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) $(BIN_CHECKS)
- +EXTRA_DIST = $(top_srcdir)/share/genbuild.sh test/functional/test_runner.py test/functional $(DIST_CONTRIB) $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) $(BIN_CHECKS)
- EXTRA_DIST += \
- test/util/bitcoin-util-test.py \
- @@ -252,7 +249,6 @@ EXTRA_DIST += \
- test/util/data/txcreatemultisig3.json \
- test/util/data/txcreatemultisig4.hex \
- test/util/data/txcreatemultisig4.json \
- - test/util/data/txcreatemultisig5.json \
- test/util/data/txcreateoutpubkey1.hex \
- test/util/data/txcreateoutpubkey1.json \
- test/util/data/txcreateoutpubkey2.hex \
- diff --git a/README.md b/README.md
- index ad95a1d..90ef53d 100644
- --- a/README.md
- +++ b/README.md
- @@ -1,76 +1,38 @@
- -Litecoin Core integration/staging tree
- +LitecoinCash Core integration/staging tree
- =====================================
- -[![Build Status](https://travis-ci.org/litecoin-project/litecoin.svg?branch=master)](https://travis-ci.org/litecoin-project/litecoin)
- +[![Build Status](https://travis-ci.org/litecoincash-project/litecoincash.svg?branch=master)](https://travis-ci.org/litecoincash-project/litecoincash)
- -https://litecoin.org
- +https://litecoinca.sh
- -What is Litecoin?
- -----------------
- +What is LitecoinCash?
- +---------------------
- -Litecoin is an experimental digital currency that enables instant payments to
- -anyone, anywhere in the world. Litecoin uses peer-to-peer technology to operate
- -with no central authority: managing transactions and issuing money are carried
- -out collectively by the network. Litecoin Core is the name of open source
- -software which enables the use of this currency.
- +Litecoin Cash is a SHA256 fork of Litecoin. For full details, as well as prebuilt binaries for
- +Windows, Mac and Linux, please visit our website.
- -For more information, as well as an immediately useable, binary version of
- -the Litecoin Core software, see [https://litecoin.org](https://litecoin.org).
- +Litecoin Cash Core is the full node software that makes up the backbone of the LCC network.
- License
- -------
- -Litecoin Core is released under the terms of the MIT license. See [COPYING](COPYING) for more
- +LitecoinCash Core is released under the terms of the MIT license. See [COPYING](COPYING) for more
- information or see https://opensource.org/licenses/MIT.
- Development Process
- -------------------
- The `master` branch is regularly built and tested, but is not guaranteed to be
- -completely stable. [Tags](https://github.com/litecoin-project/litecoin/tags) are created
- -regularly to indicate new official, stable release versions of Litecoin Core.
- +completely stable. [Tags](https://github.com/litecoincash-project/litecoincash/tags) are created
- +regularly to indicate new official, stable release versions of LitecoinCash Core.
- -The contribution workflow is described in [CONTRIBUTING.md](CONTRIBUTING.md).
- -
- -The developer [mailing list](https://groups.google.com/forum/#!forum/litecoin-dev)
- -should be used to discuss complicated or controversial changes before working
- -on a patch set.
- -
- -Developer IRC can be found on Freenode at #litecoin-dev.
- -
- -Testing
- --------
- -
- -Testing and code review is the bottleneck for development; we get more pull
- -requests than we can review and test on short notice. Please be patient and help out by testing
- -other people's pull requests, and remember this is a security-critical project where any mistake might cost people
- -lots of money.
- -
- -### Automated Testing
- -
- -Developers are strongly encouraged to write [unit tests](src/test/README.md) for new code, and to
- -submit new unit tests for old code. Unit tests can be compiled and run
- -(assuming they weren't disabled in configure) with: `make check`. Further details on running
- -and extending unit tests can be found in [/src/test/README.md](/src/test/README.md).
- -
- -There are also [regression and integration tests](/test), written
- -in Python, that are run automatically on the build server.
- -These tests can be run (if the [test dependencies](/test) are installed) with: `test/functional/test_runner.py`
- -
- -The Travis CI system makes sure that every pull request is built for Windows, Linux, and OS X, and that unit/sanity tests are run automatically.
- -
- -### Manual Quality Assurance (QA) Testing
- -
- -Changes should be tested by somebody other than the developer who wrote the
- -code. This is especially important for large or high-risk changes. It is useful
- -to add a test plan to the pull request description if testing the changes is
- -not straightforward.
- +To contact the developers, please use the community channels shown on our website.
- Translations
- ------------
- We only accept translation fixes that are submitted through [Bitcoin Core's Transifex page](https://www.transifex.com/projects/p/bitcoin/).
- -Translations are converted to Litecoin periodically.
- +Translations are converted to LitecoinCash periodically.
- Translations are periodically pulled from Transifex and merged into the git repository. See the
- [translation process](doc/translation_process.md) for details on how this works.
- diff --git a/autogen.sh b/autogen.sh
- old mode 100755
- new mode 100644
- diff --git a/configure.ac b/configure.ac
- index fbc820b..0af92a6 100644
- --- a/configure.ac
- +++ b/configure.ac
- @@ -2,22 +2,22 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
- AC_PREREQ([2.60])
- define(_CLIENT_VERSION_MAJOR, 0)
- define(_CLIENT_VERSION_MINOR, 15)
- -define(_CLIENT_VERSION_REVISION, 1)
- -define(_CLIENT_VERSION_BUILD, 0)
- +define(_CLIENT_VERSION_REVISION, 0)
- +define(_CLIENT_VERSION_BUILD, 1)
- define(_CLIENT_VERSION_IS_RELEASE, true)
- define(_COPYRIGHT_YEAR, 2018)
- define(_COPYRIGHT_HOLDERS,[The %s developers])
- -define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Litecoin Core]])
- -AC_INIT([Litecoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/litecoin-project/litecoin/issues],[litecoin],[https://litecoin.org/])
- +define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[LitecoinCash Core]])
- +AC_INIT([LitecoinCash Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/litecoincash-project/litecoincash/issues],[litecoincash],[https://litecoinca.sh/])
- AC_CONFIG_SRCDIR([src/validation.cpp])
- AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
- AC_CONFIG_AUX_DIR([build-aux])
- AC_CONFIG_MACRO_DIR([build-aux/m4])
- -BITCOIN_DAEMON_NAME=litecoind
- -BITCOIN_GUI_NAME=litecoin-qt
- -BITCOIN_CLI_NAME=litecoin-cli
- -BITCOIN_TX_NAME=litecoin-tx
- +BITCOIN_DAEMON_NAME=litecoincashd
- +BITCOIN_GUI_NAME=litecoincash-qt
- +BITCOIN_CLI_NAME=litecoincash-cli
- +BITCOIN_TX_NAME=litecoincash-tx
- dnl Unless the user specified ARFLAGS, force it to be cr
- AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to <cr> if not set])
- @@ -1036,11 +1036,11 @@ AC_SUBST(UNIVALUE_LIBS)
- BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
- -AC_MSG_CHECKING([whether to build litecoind])
- +AC_MSG_CHECKING([whether to build litecoincashd])
- AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
- AC_MSG_RESULT($build_bitcoind)
- -AC_MSG_CHECKING([whether to build utils (litecoin-cli litecoin-tx)])
- +AC_MSG_CHECKING([whether to build utils (litecoincash-cli litecoincash-tx)])
- AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
- AC_MSG_RESULT($build_bitcoin_utils)
- @@ -1141,7 +1141,7 @@ if test x$bitcoin_enable_qt != xno; then
- AC_MSG_WARN("xgettext is required to update qt translations")
- fi
- - AC_MSG_CHECKING([whether to build test_litecoin-qt])
- + AC_MSG_CHECKING([whether to build test_litecoincash-qt])
- if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
- AC_MSG_RESULT([yes])
- BUILD_TEST_QT="yes"
- @@ -1152,7 +1152,7 @@ fi
- AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
- -AC_MSG_CHECKING([whether to build test_litecoin])
- +AC_MSG_CHECKING([whether to build test_litecoincash])
- if test x$use_tests = xyes; then
- AC_MSG_RESULT([yes])
- BUILD_TEST="yes"
- @@ -1249,7 +1249,6 @@ AC_SUBST(QR_LIBS)
- AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
- AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
- AC_CONFIG_FILES([doc/Doxyfile])
- -AC_CONFIG_LINKS([contrib/filter-lcov.py:contrib/filter-lcov.py])
- AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
- AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
- diff --git a/contrib/README.md b/contrib/README.md
- index b01ea2c..a02135d 100644
- --- a/contrib/README.md
- +++ b/contrib/README.md
- @@ -13,7 +13,7 @@ Construct a linear, no-fork, best version of the blockchain.
- ### [Qos](/contrib/qos) ###
- -A Linux bash script that will set up traffic control (tc) to limit the outgoing bandwidth for connections to the Litecoin network. This means one can have an always-on litecoind instance running, and another local litecoind/litecoin-qt instance which connects to this node and receives blocks from it.
- +A Linux bash script that will set up traffic control (tc) to limit the outgoing bandwidth for connections to the LitecoinCash network. This means one can have an always-on litecoincashd instance running, and another local litecoincashd/litecoincash-qt instance which connects to this node and receives blocks from it.
- ### [Seeds](/contrib/seeds) ###
- Utility to generate the pnSeed[] array that is compiled into the client.
- @@ -22,20 +22,20 @@ Build Tools and Keys
- ---------------------
- ### [Debian](/contrib/debian) ###
- -Contains files used to package litecoind/litecoin-qt
- -for Debian-based Linux systems. If you compile litecoind/litecoin-qt yourself, there are some useful files here.
- +Contains files used to package litecoincashd/litecoincash-qt
- +for Debian-based Linux systems. If you compile litecoincashd/litecoincash-qt yourself, there are some useful files here.
- ### [Gitian-descriptors](/contrib/gitian-descriptors) ###
- Notes on getting Gitian builds up and running using KVM.
- ### [Gitian-keys](/contrib/gitian-keys)
- -PGP keys used for signing Litecoin Core [Gitian release](/doc/release-process.md) results.
- +PGP keys used for signing LitecoinCash Core [Gitian release](/doc/release-process.md) results.
- ### [MacDeploy](/contrib/macdeploy) ###
- Scripts and notes for Mac builds.
- ### [RPM](/contrib/rpm) ###
- -RPM spec file for building litecoin-core on RPM based distributions
- +RPM spec file for building litecoincash-core on RPM based distributions
- ### [Gitian-build](/contrib/gitian-build.sh) ###
- Script for running full Gitian builds.
- @@ -44,7 +44,7 @@ Test and Verify Tools
- ---------------------
- ### [TestGen](/contrib/testgen) ###
- -Utilities to generate test vectors for the data-driven Litecoin tests.
- +Utilities to generate test vectors for the data-driven LitecoinCash tests.
- ### [Verify Binaries](/contrib/verifybinaries) ###
- -This script attempts to download and verify the signature file SHA256SUMS.asc from litecoin.org.
- +This script attempts to download and verify the signature file SHA256SUMS.asc from litecoincash.org.
- diff --git a/contrib/ci/build-linux.sh b/contrib/ci/build-linux.sh
- new file mode 100644
- index 0000000..aee83bf
- --- /dev/null
- +++ b/contrib/ci/build-linux.sh
- @@ -0,0 +1,7 @@
- +#!/bin/bash
- +if [ -f ./.fullbuild ]; then
- + echo "Running full Linux build";
- + make clean;
- + ./autogen.sh && CONFIG_SITE=$PWD/depends/x86_64-pc-linux-gnu/share/config.site ./configure --prefix=/;
- +fi
- +make -j 24 && strip src/qt/litecoincash-qt
- diff --git a/contrib/ci/build-win.sh b/contrib/ci/build-win.sh
- new file mode 100644
- index 0000000..1c4a77b
- --- /dev/null
- +++ b/contrib/ci/build-win.sh
- @@ -0,0 +1,7 @@
- +#!/bin/bash
- +if [ -f ./.fullbuild ]; then
- + echo "Running full Windows build";
- + make clean;
- + ./autogen.sh && CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=/;
- +fi
- +make -j 24 && strip src/qt/litecoincash-qt.exe
- diff --git a/contrib/debian/examples/bitcoin.conf b/contrib/debian/examples/bitcoin.conf
- index 61c744c..3cf6892 100644
- --- a/contrib/debian/examples/bitcoin.conf
- +++ b/contrib/debian/examples/bitcoin.conf
- @@ -110,7 +110,7 @@
- #rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96
- # Listen for RPC connections on this TCP port:
- -#rpcport=9332
- +#rpcport=62457
- # You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind
- # running on another host using this option:
- diff --git a/contrib/debian/rules b/contrib/debian/rules
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/check-doc.py b/contrib/devtools/check-doc.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/clang-format-diff.py b/contrib/devtools/clang-format-diff.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/commit-script-check.sh b/contrib/devtools/commit-script-check.sh
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/copyright_header.py b/contrib/devtools/copyright_header.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh
- old mode 100755
- new mode 100644
- index 41839b5..8e34620
- --- a/contrib/devtools/gen-manpages.sh
- +++ b/contrib/devtools/gen-manpages.sh
- @@ -4,15 +4,15 @@ TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)}
- SRCDIR=${SRCDIR:-$TOPDIR/src}
- MANDIR=${MANDIR:-$TOPDIR/doc/man}
- -BITCOIND=${BITCOIND:-$SRCDIR/litecoind}
- -BITCOINCLI=${BITCOINCLI:-$SRCDIR/litecoin-cli}
- -BITCOINTX=${BITCOINTX:-$SRCDIR/litecoin-tx}
- -BITCOINQT=${BITCOINQT:-$SRCDIR/qt/litecoin-qt}
- +BITCOIND=${BITCOIND:-$SRCDIR/litecoincashd}
- +BITCOINCLI=${BITCOINCLI:-$SRCDIR/litecoincash-cli}
- +BITCOINTX=${BITCOINTX:-$SRCDIR/litecoincash-tx}
- +BITCOINQT=${BITCOINQT:-$SRCDIR/qt/litecoincash-qt}
- -[ ! -x $BITCOIND ] && echo "$LITECOIND not found or not executable." && exit 1
- +[ ! -x $BITCOIND ] && echo "$LITECOINCASHD not found or not executable." && exit 1
- # The autodetected version git tag can screw up manpage output a little bit
- -BTCVER=($($LITECOINCLI --version | head -n1 | awk -F'[ -]' '{ print $6, $7 }'))
- +BTCVER=($($LITECOINCASHCLI --version | head -n1 | awk -F'[ -]' '{ print $6, $7 }'))
- # Create a footer file with copyright content.
- # This gets autodetected fine for bitcoind if --version-string is not set,
- diff --git a/contrib/devtools/git-subtree-check.sh b/contrib/devtools/git-subtree-check.sh
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/github-merge.py b/contrib/devtools/github-merge.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/optimize-pngs.py b/contrib/devtools/optimize-pngs.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/security-check.py b/contrib/devtools/security-check.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/test-security-check.py b/contrib/devtools/test-security-check.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/devtools/update-translations.py b/contrib/devtools/update-translations.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/filter-lcov.py b/contrib/filter-lcov.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/gitian-build.sh b/contrib/gitian-build.sh
- old mode 100755
- new mode 100644
- index d43ec9b..389e66a
- --- a/contrib/gitian-build.sh
- +++ b/contrib/gitian-build.sh
- @@ -17,7 +17,7 @@ osx=true
- SIGNER=
- VERSION=
- commit=false
- -url=https://github.com/litecoin-project/litecoin
- +url=https://github.com/litecoincash-project/litecoincash
- proc=2
- mem=2000
- lxc=true
- @@ -31,7 +31,7 @@ commitFiles=true
- read -d '' usage <<- EOF
- Usage: $scriptName [-c|u|v|b|s|B|o|h|j|m|] signer version
- -Run this script from the directory containing the litecoin, gitian-builder, gitian.sigs.ltc, and litecoin-detached-sigs.
- +Run this script from the directory containing the litecoincash, gitian-builder, gitian.sigs.lch, and litecoincash-detached-sigs.
- Arguments:
- signer GPG signer to sign each build assert file
- @@ -39,7 +39,7 @@ version Version number, commit, or branch to build. If building a commit or bra
- Options:
- -c|--commit Indicate that the version argument is for a commit or branch
- --u|--url Specify the URL of the repository. Default is https://github.com/litecoin-project/litecoin
- +-u|--url Specify the URL of the repository. Default is https://github.com/litecoincash-project/litecoincash
- -v|--verify Verify the gitian build
- -b|--build Do a gitian build
- -s|--sign Make signed binaries for Windows and Mac OSX
- @@ -232,8 +232,8 @@ echo ${COMMIT}
- if [[ $setup = true ]]
- then
- sudo apt-get install ruby apache2 git apt-cacher-ng python-vm-builder qemu-kvm qemu-utils
- - git clone https://github.com/litecoin-project/gitian.sigs.ltc.git
- - git clone https://github.com/litecoin-project/litecoin-detached-sigs.git
- + git clone https://github.com/litecoincash-project/gitian.sigs.lch.git
- + git clone https://github.com/litecoincash-project/litecoincash-detached-sigs.git
- git clone https://github.com/devrandom/gitian-builder.git
- pushd ./gitian-builder
- if [[ -n "$USE_LXC" ]]
- @@ -247,7 +247,7 @@ then
- fi
- # Set up build
- -pushd ./litecoin
- +pushd ./litecoincash
- git fetch
- git checkout ${COMMIT}
- popd
- @@ -256,7 +256,7 @@ popd
- if [[ $build = true ]]
- then
- # Make output folder
- - mkdir -p ./litecoin-binaries/${VERSION}
- + mkdir -p ./litecoincash-binaries/${VERSION}
- # Build Dependencies
- echo ""
- @@ -266,7 +266,7 @@ then
- mkdir -p inputs
- wget -N -P inputs $osslPatchUrl
- wget -N -P inputs $osslTarUrl
- - make -C ../litecoin/depends download SOURCES_PATH=`pwd`/cache/common
- + make -C ../litecoincash/depends download SOURCES_PATH=`pwd`/cache/common
- # Linux
- if [[ $linux = true ]]
- @@ -274,9 +274,9 @@ then
- echo ""
- echo "Compiling ${VERSION} Linux"
- echo ""
- - ./bin/gbuild -j ${proc} -m ${mem} --commit litecoin=${COMMIT} --url litecoin=${url} ../litecoin/contrib/gitian-descriptors/gitian-linux.yml
- - ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-linux.yml
- - mv build/out/litecoin-*.tar.gz build/out/src/litecoin-*.tar.gz ../litecoin-binaries/${VERSION}
- + ./bin/gbuild -j ${proc} -m ${mem} --commit litecoincash=${COMMIT} --url litecoincash=${url} ../litecoincash/contrib/gitian-descriptors/gitian-linux.yml
- + ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-linux.yml
- + mv build/out/litecoincash-*.tar.gz build/out/src/litecoincash-*.tar.gz ../litecoincash-binaries/${VERSION}
- fi
- # Windows
- if [[ $windows = true ]]
- @@ -284,10 +284,10 @@ then
- echo ""
- echo "Compiling ${VERSION} Windows"
- echo ""
- - ./bin/gbuild -j ${proc} -m ${mem} --commit litecoin=${COMMIT} --url litecoin=${url} ../litecoin/contrib/gitian-descriptors/gitian-win.yml
- - ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-win-unsigned --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-win.yml
- - mv build/out/litecoin-*-win-unsigned.tar.gz inputs/litecoin-win-unsigned.tar.gz
- - mv build/out/litecoin-*.zip build/out/litecoin-*.exe ../litecoin-binaries/${VERSION}
- + ./bin/gbuild -j ${proc} -m ${mem} --commit litecoincash=${COMMIT} --url litecoincash=${url} ../litecoincash/contrib/gitian-descriptors/gitian-win.yml
- + ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-win-unsigned --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-win.yml
- + mv build/out/litecoincash-*-win-unsigned.tar.gz inputs/litecoincash-win-unsigned.tar.gz
- + mv build/out/litecoincash-*.zip build/out/litecoincash-*.exe ../litecoincash-binaries/${VERSION}
- fi
- # Mac OSX
- if [[ $osx = true ]]
- @@ -295,10 +295,10 @@ then
- echo ""
- echo "Compiling ${VERSION} Mac OSX"
- echo ""
- - ./bin/gbuild -j ${proc} -m ${mem} --commit litecoin=${COMMIT} --url litecoin=${url} ../litecoin/contrib/gitian-descriptors/gitian-osx.yml
- - ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-osx.yml
- - mv build/out/litecoin-*-osx-unsigned.tar.gz inputs/litecoin-osx-unsigned.tar.gz
- - mv build/out/litecoin-*.tar.gz build/out/litecoin-*.dmg ../litecoin-binaries/${VERSION}
- + ./bin/gbuild -j ${proc} -m ${mem} --commit litecoincash=${COMMIT} --url litecoincash=${url} ../litecoincash/contrib/gitian-descriptors/gitian-osx.yml
- + ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-osx.yml
- + mv build/out/litecoincash-*-osx-unsigned.tar.gz inputs/litecoincash-osx-unsigned.tar.gz
- + mv build/out/litecoincash-*.tar.gz build/out/litecoincash-*.dmg ../litecoincash-binaries/${VERSION}
- fi
- popd
- @@ -325,27 +325,27 @@ then
- echo ""
- echo "Verifying v${VERSION} Linux"
- echo ""
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-linux ../litecoin/contrib/gitian-descriptors/gitian-linux.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-linux ../litecoincash/contrib/gitian-descriptors/gitian-linux.yml
- # Windows
- echo ""
- echo "Verifying v${VERSION} Windows"
- echo ""
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-win-unsigned ../litecoin/contrib/gitian-descriptors/gitian-win.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-win-unsigned ../litecoincash/contrib/gitian-descriptors/gitian-win.yml
- # Mac OSX
- echo ""
- echo "Verifying v${VERSION} Mac OSX"
- echo ""
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-osx-unsigned ../litecoin/contrib/gitian-descriptors/gitian-osx.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-osx-unsigned ../litecoincash/contrib/gitian-descriptors/gitian-osx.yml
- # Signed Windows
- echo ""
- echo "Verifying v${VERSION} Signed Windows"
- echo ""
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-osx-signed ../litecoin/contrib/gitian-descriptors/gitian-osx-signer.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-osx-signed ../litecoincash/contrib/gitian-descriptors/gitian-osx-signer.yml
- # Signed Mac OSX
- echo ""
- echo "Verifying v${VERSION} Signed Mac OSX"
- echo ""
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-osx-signed ../litecoin/contrib/gitian-descriptors/gitian-osx-signer.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-osx-signed ../litecoincash/contrib/gitian-descriptors/gitian-osx-signer.yml
- popd
- fi
- @@ -360,10 +360,10 @@ then
- echo ""
- echo "Signing ${VERSION} Windows"
- echo ""
- - ./bin/gbuild -i --commit signature=${COMMIT} ../litecoin/contrib/gitian-descriptors/gitian-win-signer.yml
- - ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-win-signed --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-win-signer.yml
- - mv build/out/litecoin-*win64-setup.exe ../litecoin-binaries/${VERSION}
- - mv build/out/litecoin-*win32-setup.exe ../litecoin-binaries/${VERSION}
- + ./bin/gbuild -i --commit signature=${COMMIT} ../litecoincash/contrib/gitian-descriptors/gitian-win-signer.yml
- + ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-win-signed --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-win-signer.yml
- + mv build/out/litecoincash-*win64-setup.exe ../litecoincash-binaries/${VERSION}
- + mv build/out/litecoincash-*win32-setup.exe ../litecoincash-binaries/${VERSION}
- fi
- # Sign Mac OSX
- if [[ $osx = true ]]
- @@ -371,9 +371,9 @@ then
- echo ""
- echo "Signing ${VERSION} Mac OSX"
- echo ""
- - ./bin/gbuild -i --commit signature=${COMMIT} ../litecoin/contrib/gitian-descriptors/gitian-osx-signer.yml
- - ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-osx-signed --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-osx-signer.yml
- - mv build/out/litecoin-osx-signed.dmg ../litecoin-binaries/${VERSION}/litecoin-${VERSION}-osx.dmg
- + ./bin/gbuild -i --commit signature=${COMMIT} ../litecoincash/contrib/gitian-descriptors/gitian-osx-signer.yml
- + ./bin/gsign -p $signProg --signer $SIGNER --release ${VERSION}-osx-signed --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-osx-signer.yml
- + mv build/out/litecoincash-osx-signed.dmg ../litecoincash-binaries/${VERSION}/litecoincash-${VERSION}-osx.dmg
- fi
- popd
- diff --git a/contrib/gitian-descriptors/README.md b/contrib/gitian-descriptors/README.md
- index 7b76ba3..1d88d83 100644
- --- a/contrib/gitian-descriptors/README.md
- +++ b/contrib/gitian-descriptors/README.md
- @@ -19,7 +19,7 @@ Sanity checks:
- Once you've got the right hardware and software:
- - git clone git://github.com/litecoin-project/litecoin.git
- + git clone git://github.com/litecoincash-project/litecoincash.git
- git clone git://github.com/devrandom/gitian-builder.git
- mkdir gitian-builder/inputs
- cd gitian-builder/inputs
- @@ -61,5 +61,5 @@ Here's a description of Gavin's setup on OSX 10.6:
- 5. Still inside Ubuntu, tell gitian-builder to use LXC, then follow the "Once you've got the right hardware and software" instructions above:
- export USE_LXC=1
- - git clone git://github.com/litecoin-project/litecoin.git
- + git clone git://github.com/litecoincash-project/litecoincash.git
- ... etc
- diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml
- index 9919605..29b65af 100644
- --- a/contrib/gitian-descriptors/gitian-linux.yml
- +++ b/contrib/gitian-descriptors/gitian-linux.yml
- @@ -1,5 +1,5 @@
- ---
- -name: "litecoin-linux-0.15"
- +name: "litecoincash-linux-0.15"
- enable_cache: true
- suites:
- - "trusty"
- @@ -28,8 +28,8 @@ packages:
- - "ca-certificates"
- - "python"
- remotes:
- -- "url": "https://github.com/litecoin-project/litecoin.git"
- - "dir": "litecoin"
- +- "url": "https://bitbucket.org/l8team/litecoincash/"
- + "dir": "litecoincash"
- files: []
- script: |
- @@ -113,7 +113,7 @@ script: |
- chmod +x ${WRAP_DIR}/${prog}
- done
- - cd litecoin
- + cd litecoincash
- BASEPREFIX=`pwd`/depends
- # Build dependencies for each host
- for i in $HOSTS; do
- @@ -135,13 +135,13 @@ script: |
- ./autogen.sh
- CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/
- make dist
- - SOURCEDIST=`echo litecoin-*.tar.gz`
- + SOURCEDIST=`echo litecoincash-*.tar.gz`
- DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'`
- # Correct tar file order
- mkdir -p temp
- pushd temp
- tar xf ../$SOURCEDIST
- - find litecoin-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
- + find litecoincash-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
- popd
- # Workaround for tarball not building with the bare tag version (prep)
- @@ -182,13 +182,13 @@ script: |
- find . -name "lib*.a" -delete
- rm -rf ${DISTNAME}/lib/pkgconfig
- - # Litecoin: Delete libbitcoin from binary distribution for now, see #192
- + # LitecoinCash: Delete libbitcoin from binary distribution for now, see #192
- rm -rf ${DISTNAME}/lib/
- rm -rf ${DISTNAME}/include/
- - # Litecoin: ends
- + # LitecoinCash: ends
- find ${DISTNAME}/bin -type f -executable -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \;
- - #find ${DISTNAME}/lib -type f -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \; # Litecoin: see issue 192
- + #find ${DISTNAME}/lib -type f -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \; # LitecoinCash: see issue 192
- find ${DISTNAME} -not -name "*.dbg" | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz
- find ${DISTNAME} -name "*.dbg" | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}-debug.tar.gz
- cd ../../
- diff --git a/contrib/gitian-descriptors/gitian-osx-signer.yml b/contrib/gitian-descriptors/gitian-osx-signer.yml
- index 7845834..7ff4130 100644
- --- a/contrib/gitian-descriptors/gitian-osx-signer.yml
- +++ b/contrib/gitian-descriptors/gitian-osx-signer.yml
- @@ -1,5 +1,5 @@
- ---
- -name: "litecoin-dmg-signer"
- +name: "litecoincash-dmg-signer"
- suites:
- - "trusty"
- architectures:
- @@ -7,10 +7,10 @@ architectures:
- packages:
- - "faketime"
- remotes:
- -- "url": "https://github.com/litecoin-project/litecoin-detached-sigs.git"
- +- "url": "https://github.com/litecoincash-project/litecoincash-detached-sigs.git"
- "dir": "signature"
- files:
- -- "litecoin-osx-unsigned.tar.gz"
- +- "litecoincash-osx-unsigned.tar.gz"
- script: |
- WRAP_DIR=$HOME/wrapped
- mkdir -p ${WRAP_DIR}
- @@ -27,8 +27,8 @@ script: |
- chmod +x ${WRAP_DIR}/${prog}
- done
- - UNSIGNED=litecoin-osx-unsigned.tar.gz
- - SIGNED=litecoin-osx-signed.dmg
- + UNSIGNED=litecoincash-osx-unsigned.tar.gz
- + SIGNED=litecoincash-osx-signed.dmg
- tar -xf ${UNSIGNED}
- OSX_VOLNAME="$(cat osx_volname)"
- diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml
- index 2abaddc..45e3a18 100644
- --- a/contrib/gitian-descriptors/gitian-osx.yml
- +++ b/contrib/gitian-descriptors/gitian-osx.yml
- @@ -1,5 +1,5 @@
- ---
- -name: "litecoin-osx-0.15"
- +name: "litecoincash-osx-0.15"
- enable_cache: true
- suites:
- - "trusty"
- @@ -28,8 +28,8 @@ packages:
- - "python-setuptools"
- - "fonts-tuffy"
- remotes:
- -- "url": "https://github.com/litecoin-project/litecoin.git"
- - "dir": "litecoin"
- +- "url": "https://bitbucket.org/l8team/litecoincash/"
- + "dir": "litecoincash"
- files:
- - "MacOSX10.11.sdk.tar.gz"
- script: |
- @@ -83,7 +83,7 @@ script: |
- create_per-host_faketime_wrappers "2000-01-01 12:00:00"
- export PATH=${WRAP_DIR}:${PATH}
- - cd litecoin
- + cd litecoincash
- BASEPREFIX=`pwd`/depends
- mkdir -p ${BASEPREFIX}/SDKs
- @@ -104,14 +104,14 @@ script: |
- ./autogen.sh
- CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/
- make dist
- - SOURCEDIST=`echo litecoin-*.tar.gz`
- + SOURCEDIST=`echo litecoincash-*.tar.gz`
- DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'`
- # Correct tar file order
- mkdir -p temp
- pushd temp
- tar xf ../$SOURCEDIST
- - find litecoin-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
- + find litecoincash-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
- popd
- # Workaround for tarball not building with the bare tag version (prep)
- diff --git a/contrib/gitian-descriptors/gitian-win-signer.yml b/contrib/gitian-descriptors/gitian-win-signer.yml
- index 331bf89..f3da37e 100644
- --- a/contrib/gitian-descriptors/gitian-win-signer.yml
- +++ b/contrib/gitian-descriptors/gitian-win-signer.yml
- @@ -1,5 +1,5 @@
- ---
- -name: "litecoin-win-signer"
- +name: "litecoincash-win-signer"
- suites:
- - "trusty"
- architectures:
- @@ -8,12 +8,12 @@ packages:
- - "libssl-dev"
- - "autoconf"
- remotes:
- -- "url": "https://github.com/litecoin-project/litecoin-detached-sigs.git"
- +- "url": "https://github.com/litecoincash-project/litecoincash-detached-sigs.git"
- "dir": "signature"
- files:
- - "osslsigncode-1.7.1.tar.gz"
- - "osslsigncode-Backports-to-1.7.1.patch"
- -- "litecoin-win-unsigned.tar.gz"
- +- "litecoincash-win-unsigned.tar.gz"
- script: |
- BUILD_DIR=`pwd`
- SIGDIR=${BUILD_DIR}/signature/win
- @@ -23,7 +23,7 @@ script: |
- echo "a8c4e9cafba922f89de0df1f2152e7be286aba73f78505169bc351a7938dd911 osslsigncode-Backports-to-1.7.1.patch" | sha256sum -c
- mkdir -p ${UNSIGNED_DIR}
- - tar -C ${UNSIGNED_DIR} -xf litecoin-win-unsigned.tar.gz
- + tar -C ${UNSIGNED_DIR} -xf litecoincash-win-unsigned.tar.gz
- tar xf osslsigncode-1.7.1.tar.gz
- cd osslsigncode-1.7.1
- diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml
- index d4a9d9f..7c220db 100644
- --- a/contrib/gitian-descriptors/gitian-win.yml
- +++ b/contrib/gitian-descriptors/gitian-win.yml
- @@ -1,5 +1,5 @@
- ---
- -name: "litecoin-win-0.15"
- +name: "litecoincash-win-0.15"
- enable_cache: true
- suites:
- - "trusty"
- @@ -22,8 +22,8 @@ packages:
- - "ca-certificates"
- - "python"
- remotes:
- -- "url": "https://github.com/litecoin-project/litecoin.git"
- - "dir": "litecoin"
- +- "url": "https://bitbucket.org/l8team/litecoincash/"
- + "dir": "litecoincash"
- files: []
- script: |
- WRAP_DIR=$HOME/wrapped
- @@ -101,7 +101,7 @@ script: |
- create_per-host_linker_wrapper "2000-01-01 12:00:00"
- export PATH=${WRAP_DIR}:${PATH}
- - cd litecoin
- + cd litecoincash
- BASEPREFIX=`pwd`/depends
- # Build dependencies for each host
- for i in $HOSTS; do
- @@ -119,14 +119,14 @@ script: |
- ./autogen.sh
- CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/
- make dist
- - SOURCEDIST=`echo litecoin-*.tar.gz`
- + SOURCEDIST=`echo litecoincash-*.tar.gz`
- DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'`
- # Correct tar file order
- mkdir -p temp
- pushd temp
- tar xf ../$SOURCEDIST
- - find litecoin-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
- + find litecoincash-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
- mkdir -p $OUTDIR/src
- cp ../$SOURCEDIST $OUTDIR/src
- popd
- @@ -155,7 +155,7 @@ script: |
- make deploy
- make install DESTDIR=${INSTALLPATH}
- rename 's/-setup\.exe$/-setup-unsigned.exe/' *-setup.exe
- - cp -f litecoin-*setup*.exe $OUTDIR/
- + cp -f litecoincash-*setup*.exe $OUTDIR/
- cd installed
- mv ${DISTNAME}/bin/*.dll ${DISTNAME}/lib/
- find . -name "lib*.la" -delete
- @@ -171,7 +171,7 @@ script: |
- cp -rf contrib/windeploy $BUILD_DIR
- cd $BUILD_DIR/windeploy
- mkdir unsigned
- - cp $OUTDIR/litecoin-*setup-unsigned.exe unsigned/
- + cp $OUTDIR/litecoincash-*setup-unsigned.exe unsigned/
- find . | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-win-unsigned.tar.gz
- mv ${OUTDIR}/${DISTNAME}-x86_64-*-debug.zip ${OUTDIR}/${DISTNAME}-win64-debug.zip
- mv ${OUTDIR}/${DISTNAME}-i686-*-debug.zip ${OUTDIR}/${DISTNAME}-win32-debug.zip
- diff --git a/contrib/gitian-keys/achow101-key.pgp b/contrib/gitian-keys/achow101-key.pgp
- deleted file mode 100644
- index 030fd5c..0000000
- --- a/contrib/gitian-keys/achow101-key.pgp
- +++ /dev/null
- @@ -1,52 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1
- -
- -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
- -Khvd4+XHE/ecjLOPvLweAg==
- -=+hz7
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/aschildbach-key.pgp b/contrib/gitian-keys/aschildbach-key.pgp
- deleted file mode 100644
- index df06e19..0000000
- Binary files a/contrib/gitian-keys/aschildbach-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/bluematt-key.pgp b/contrib/gitian-keys/bluematt-key.pgp
- deleted file mode 100644
- index 2389d46..0000000
- Binary files a/contrib/gitian-keys/bluematt-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/btcdrak-key.pgp b/contrib/gitian-keys/btcdrak-key.pgp
- deleted file mode 100644
- index f00dc72..0000000
- Binary files a/contrib/gitian-keys/btcdrak-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/cdecker-key.pgp b/contrib/gitian-keys/cdecker-key.pgp
- deleted file mode 100644
- index 928a74b..0000000
- Binary files a/contrib/gitian-keys/cdecker-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/centaur1-key.pgp b/contrib/gitian-keys/centaur1-key.pgp
- deleted file mode 100644
- index 71a42e5..0000000
- --- a/contrib/gitian-keys/centaur1-key.pgp
- +++ /dev/null
- @@ -1,30 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1.4.12 (GNU/Linux)
- -
- -mQENBFTjy20BCAC7q/tpPQ9tdEALpDqe8kpVAT5ysOJDLDeFEE1J5O8NuDFuibiN
- -XYkb2nAt4Vdr23in9z0LAiTSgr7znndnab/rOSn6pXbXQfLTHrSnAeClTHVQVPSq
- -m5kNg1vWvNxFtIpZ/fGsc6LLmIHxdgeLn+NOpvNx7RzF/N5ctX51vMxMUeDq3daZ
- -tLneJVRj5tXHRJcjW62cyiNFasYAZ3JC8wjwzr0SOndc7kygbEVCTWNkTAGd1Lax
- -KSJW6TjhBPK7j+RljS5nfx/Tf+OG4AoA7/53593YL7Shfx8rwWVIeF4nS6efFnuf
- -eIj+aS5haGyFvNgw8DE7QUCrPiUxeA8wuXu7ABEBAAG0H2NlbnRhdXIgPGNlbnRh
- -dXJAcGhvbmVib29rLmNvbT6JATgEEwECACIFAlTjy20CGwMGCwkIBwMCBhUIAgkK
- -CwQWAgMBAh4BAheAAAoJEP+V+qlxaXQF8r4IAKnE8D9AOTdM/YvYxpCeI6ndEUUs
- -8NcotpbIBJ67vr1Dsot7Ee0PrmIYOiInA+T81lPUDecJYrnemVefhquiyJ5VJ4/d
- -z2zUKBfxjeOsj/PHgcowVxMco8fNEWQa2fZX6X8RVADIsUnIIwpRFVUcbssK/3xJ
- -k46vjWwYNQywht/ZgFBesOgywyz5GozmwrK6TixJxKk8M69GFz2fHhJjp1bxDZuk
- -Rs3YmWeOcCasoJ6GbvIboKQSPHGyEOCqIuiBL63YMa0n1FU0ooDteNZ04eRinIhc
- -fo9JC66fQrUFn8CmmRTtdZOrZ/efYjQtfLAunCkzSM3p6DE9u4Y7d8E5Ar65AQ0E
- -VOPLbQEIANhxtouZuQmw+k89toBWXw75s+csxKHKZuhw8QntaFyFYq3IOnIeV1sK
- -PRENkWsqDInjEM8k9eZ6pnS11EQ1rrFffss+mprTbL3I4S489tJETYZKHrmmox7h
- -ustRi5eXBEmGeKW0mqpb/9r4okpTaIfs+EJ4C9jj0ghWkqU0acyzanJiUY/0R46F
- -vPfGfHnhZ5TAl3eiL0H2JkF6taG8K1XOLemahdZHE9wJh0ZFWnDDkA1l6j2rtYga
- -jEi/ucOp5GkmumxbFiVgponDBqBpsscRrCV6SbZs9gz3dQNgqe5A3CKGZRuVCY6s
- -djRJelgqCF5+dV0fAT0oF3C/3E5KAgcAEQEAAYkBHwQYAQIACQUCVOPLbQIbDAAK
- -CRD/lfqpcWl0BUSxCACjEFwQSHcfZINWD+KdNMayxyHQlBwsEDX+xQkgnn+/Q3hW
- -9VI3SSSfFV3ustlUa3IaNHwuWzsrSqG6mLG47LAQ6vPAWVh723gVCpyJf42Oms/e
- -qeyn0f/PT/6RuNMXQeHbfddmRp4PFjyKOms5Bmf3oi4t4JSvOS4yABBBKzhDQYC9
- -e+qv6Y1sDYpSiCxstQLzIHKiB5bfZ8Szfk09EyyLdqLGkiB0MFhHoXWwQxKiLVc+
- -xNFj2a/jw0rQVgN5DZgHBWU5WqvS5CWIczi+2S9MFI26iBhCn3urZToaaQ/DObqC
- -qmekFrJ/GOj5vB1Mm014lWjG2X3EovLZ1XkgWI7W
- -=vtNZ
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/cfields-key.pgp b/contrib/gitian-keys/cfields-key.pgp
- deleted file mode 100644
- index 6b0bd24..0000000
- --- a/contrib/gitian-keys/cfields-key.pgp
- +++ /dev/null
- @@ -1,52 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1.4.12 (GNU/Linux)
- -
- -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
- -MrD0ofsytfy1LQ==
- -=DE4h
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/coblee-key.pgp b/contrib/gitian-keys/coblee-key.pgp
- deleted file mode 100644
- index 8efbdaf..0000000
- --- a/contrib/gitian-keys/coblee-key.pgp
- +++ /dev/null
- @@ -1,116 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
- -Comment: GPGTools - http://gpgtools.org
- -
- -mQINBE3zxrgBEAClsDj56PD9OheUjteWspOstSGxARKo05jeyK3wSM+dT7GIysxE
- -/0vyI7JS4GdYtFFIGbaPQRPgE+fs7BuSjQ5THHpOzna0lpxzE9lEmR1n2IntUpSL
- -7u2818Bu8HI5Tjjpw5VbCWjnbPfi2CfIoOgHUngRHy0cDBE86Ty/OmI7+2CwV0Ns
- -+Neo4NDJrMDmlOHr96+HZst33JKyeVJ+u8GzT0m3ilupGi/8UDDm0IDe61ZxAFqt
- -9NQyIi76rp8rD3yP/yH2PimmSjnFNiIhTAG6dEz97XN3pvzEkgBbPtd2c857SNb1
- -zBGrORWBeIDbvHKGVfMPL6mt0MRTkGDlI3kf0dNooxNHZrtJNWRe3KeZpSo2fJbl
- -vYojpSqfZmGch+IJbC2KAqowfIzBuEVnyifoFQgS7gi7jBUHVYLamdUSY7cHRgCW
- -Qn/xj9liagk8QKS5L13q8rPDi466M84m/hp6HYMuSA9mhqDdp/JHA03lxHYOMSkf
- -QM5sZMeUGF9sEi/xaexV/KC9tzqhtmHHjn7GS5bwj/FrESFpCPaZAWCXzIuacmJ+
- -lYAxf4uiBcC0qe4mU9AffmhYnNj4CCtW9CzpMP+gI/s0rdvgWuRgaE1LBTzdYFU2
- -aVi61d8QY4PLiAsaMxm8gS/fwTnMSktLYhI4erOFa95+MVn18fVtxavgpQARAQAB
- -tCJDaGFybGVzIExlZSA8Y2hvY29ib0BhbHVtLm1pdC5lZHU+iQI4BBMBAgAiBQJN
- -88a4AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCCisH5TvJgU4KLD/4m
- -gbHmYlLqckM/wBg++pyf0ccnJqT05KiBD5NA0tNyGbcy6Ea+ppACsoFbr6zsSkhF
- -2HvKms2bZQrkZh7eCd8BxsQfJ1IiW1cZBa9v395ce0Xb7yyqHd1OhXokyhEAVgFo
- -lI1UP2eerkc/FGUGE5k3XPmMlpv1K54GGMozJNc7pScBR48e/cNQo0eizEKzZJH1
- -d1fqrBVDyXMOEtkJyuPemCJgMmQ0heODCX1HxmoyuSmqtLSkjJOziCNGy1bbXpdp
- -G/imbRVQNVJCURDsztu17HHBMhJeN/xkGn830s3Eb6lQFkSMMtgwNqHbZfGflOSH
- -bfxvbFsQeqotlwED+Rzbsb+Xoua6I0SANPQVhf7gtlL7cWDOGTMsbbhhpSOI36/F
- -Qs51vItjBrWD+uYB8H5Cv6vkUvxVvn/70pD7pwyHwF5iHGfqvqCnEay0N5IMEuw2
- -VgpCBpcZgWuAFGtmMpEmB/N5D9BBRUiWpI45aQTs9SCIGOR4dAJg1M5pmdy+GIyD
- -VcTO9o2reqAbEmBc0uq3olZfVV81JvABmQ7KX3QKI0UaQGFCUqeL/f84jrNiaO7S
- -ye0pTZQ6pomD4H94882kTyEtSR9YbsvP77/+bBv/gNUDd93Nn22IYSe0Hrg6eSAJ
- -GZR05xghFRlEtGfuDy8kEckWd6CjLdG2Vk+noKmLJIhGBBARAgAGBQJRoHvPAAoJ
- -EGvd/o5Uoqzxq18AnRksV8DKJTRm9vBFVxUn1x7YJPb/AJ46ujshfyV2/CRqri1W
- -Y61SIJNfLYkBHAQQAQIABgUCU25gWwAKCRBvxMn38b6P6jrsB/469FbknpI2CB77
- -uXuvphvuxP87rsYm6nO76gYpJ77mD0f3g3a5jAKHMBt85RkN33s+25Mys190HEua
- -1sdo0NPBJL+Ox8kid9Z09Gc9Giga1ANYILCVL9kZrJbNh3BidQop7mSs00mmM80d
- -6C2qqyuerjS7z3enxd9RW/5uxrbmUkj0J9ocFHDV30V8BbYuKlGfz5ZItcnEHtPV
- -0TnryWrpuKGonkIQ6F5xbMXLguIXZePqrc0eqWy3tsBhEHo1ajTNFfWZ8VFY9/Lu
- -hiC6VPA4mxVFgqdpIegS6lPsjvhEGo0HUmtceL3IBQ58W7ikYRP0opteZY2B0zXT
- -MXONm2zGiQQcBBABAgAGBQJR0NtFAAoJELEXnrc0fcENzt4gAJSC+XKbSfVy82TP
- -mK0jTazJyDX5E8NaxgigwqsvOwZpPGdOfTO67VX6MMBBPpmFv1S9/b3opMbGdBI1
- -fbZWIzp1/uuqOQ/NWVJIi4c3Yaqapcd0zvozxqq3KfbjrIOUj1rJVBsMus0jwvTd
- -bHxN2ei2K7jR00sW4xfx+ryfItMKRNUBW6ezeLbnSBun/9y0ghs14pBgi28F7i1m
- -P6DA8l0fFfxMe6KyQmsCzfHb5Ze7Nn9Num9rseowhO5IoW6znNBY7hFj47Y6k2XB
- -xGKu090vLt25vMO1g06yEqLuzOnB7GmwwBCi9ox/nXcrd5JaDlzcad7y+kPRAqjW
- -KSyOPIEWe4vSOtQuVA38rvWdXQBRLTc/JB2XNO5vEaErnFqOLIu72mOkijl2r1Ww
- -0/YsdIcY+u++w5SHoN/92RWeTF+kljztEdK+qPPbk7ATkpUwhYacu+Yn2+PVWuJ1
- -YsWGvDH8hlE1OJgk0lJtpKeWMaTefxIF7Xv6iUiVgjWzN69onGy37v8ds4o0rsDk
- -aCyLokHiOc6II0np08i45Ac/w0IPQAvX3LRJKcLWrqrvlEBfDh9bMGBfkcrumxi2
- -y69nDioKxpfIIIGHtCqXwijWb5SCzG7UGJ+wjmz8jrdJH8wSHbeLdJya2hyabcqu
- -RTm2DBe4U/V9n06oayZi+VY3qrQi114b72RQqzfMIaJoeqQka91Vu0zDLHcoyQVC
- -pvI6R1pJ9/xGTPUYO3Q9MRW3gkwfwXZoAQblaCNbAgwmUPYqenvdR9JrqOpuGVTo
- -z2aYYojFsBDcZTJ/O8UTpUU8NLgHT27LQnQcJ3UrSe+crFBpfSLESweumIbki8e1
- -5Sf4OOqBUTtoFvby9h+xkHzIWXlJRVvv/uqoHJ5bNGYBAUmgDilW7qREZAbhBlth
- -8ThoYurzyniqfIlAQzsogYF5EDqJCZM+9NMzQeDFCKBQm8auev5JgoRcAX85uRcO
- -wm6dhxo0qH8mpzMiDVhdzetoX7fJVwJlIM6JqKk1DUEY0p/+SjuEEzuZAkpH0XJW
- -dgXOLbMC7/QWslBaMtLt9FiUHrTKXf9taPhHF9qpdUhyjR4trJUBZ62xp8FgLsxk
- -xIg33HM2hlA3CZM1apUXSNHNIyic6B1PCPtH0Zj85Trxr1WVdP3+z5jJQ6qo5PUd
- -hatwi55oM9JNGSETI6y2D4rub7KQbzrLUa+qFatlOrMNs+kQSgVWkvPlytAUdYpG
- -zwbvuHthqeF0jf7asqsMueiUw6SAUU91yQPdofBdOWmv265niEiFMkQET7AVw6I+
- -ziaPB1FL/2eg6jg6LBOo+27eEXqFqXirhp+FNsI1qNFXXg+jr1KOGHP5rFS1WiOQ
- -Pgs2W2qJBBwEEgECAAYFAlHbh3sACgkQvQKUJCH0iJ8U1iAAmmn0kiLjWGntxrQi
- -361hwIMBiymYTDNf6itNaHoRQpQ8qRhaIuxq0syYasF1zkUN6aJLtdIlHzwPjKvO
- -YXgtTEz6v4uB+9xl2UPp8YGys9mA79LEkmmOlLB73A65w9Gsp/r7i2nS8AO2iQkD
- -qtJkMsl85d66KyAcgMU1yssyH3MK/0DXfqxxw9BU+56p9vs8kHR5IuBv1gcSc4+8
- -GGbcVFb7pcuBIy8Qes6kpsI7+EVyP/KBOSbDtMgigXLN0Buv13V1fnRbDdrs7Lhh
- -B/E8FQnZ0jiYdUk8re5hU7XiUZkpjOXENaIw/ZR3IXod0SfjTRi9h49xdJ0SflBz
- -zhzFEsrCEcg3phnAsyrjUj80MKZF6iCDujFJ5iGhDvrXE/PiueX6PPAn/XkznthN
- -LhsXs/Z1flHn+L0YsmUmCZnFEUZCYWhMczdwEpEXdvvWFxFXdvbOJl1hJ1JIg75V
- -wMZ09jINMF4Tr0UKqOi6YKRRkhhXP2iZUc2H5LvX8fNN3WHIQDiSdiBkjTkDnWKY
- -ixsyg+wXC32YYHvtdr9h/hOGTes1MyW5WlaglCHDaChsHease2TRk754GfnM/sey
- -hyIfUcQgH2Ac8iDag046RwCzCUmmDVGvcJ4/cxqn6G8iTiH8Wlyw56/XWe07ZJYI
- -4cjqu9KOubAcO/R3UJxOoaKCYwiz8SFMITtE2t6/bdUqMRkmaolYnorN/0dpw0tK
- -Ao5aZwJVwSIxwczjTUc1lANMY7+QY4G621d86GX9VRzCmOtvXL8QjKxX3Au3fcp7
- -DmOvdnPx5ExrXn5nevEsxKLHp7mBOWoomwl2IFTGOJpSxaeU7NMK7ZN2rzEw9YjO
- -Uk6KPT4ZkdrSkQShf39s18Jf6dDCVBzAZxpwJgM9PZEv4Qrqwg/ilRJa0ojjNHq8
- -ikm99jYpmn3yuc7vjbae3SXjp5Q7UVhX5T1j1oQCuMtdWBOIu0wMFb5k1g6w5G3I
- -NV8Ok/5NyEBNM0/bjOC6e0QzUVa+kssgtY5N684NPKDao8EiIRZjTFK8lZNA7BJX
- -49HgJFtibf7jRxVYWyKqUeb/0A6BOacE6Zh0tWf4owyjkNW0kZB8j1y6+p2o0vku
- -5ri+4O+sFk2OPFdXlxtMv4eUpV8NYmhbli7Q0HH2h8148YEkaBxbHXRrvcUIIQvZ
- -mAJuEfZCPeCgWzCUjMmxexJfoC75VlEzmfir1lDAYLpVbbpGd332yKeybMOKQKwB
- -utJvAYLVbzHOpwG+/lpiZGBu8odH4FrQxfiuduJAHVBQ5ae+Nf/kRrXWtmsLrYVB
- -ApmEGlbYq8YGYE3odm4XCmisAR4/34ZCdq1m+AbYfDt769Av3nfs6GrczUhGTLuu
- -OWSYl7Qla2V5YmFzZS5pby9jb2JsZWUgPGNvYmxlZUBrZXliYXNlLmlvPokCLQQT
- -AQoAFwUCTfPGuAIbAwMLCQcDFQoIAh4BAheAAAoJEIKKwflO8mBTSAcQAJiSy/cI
- -f7Qw8od9rrfvtlXpHUbnFeztwT/RaXMop3v962GojHAInNuiHrcFubINqkwrHMwo
- -MsVKb+3tEgs88yXGNMvcJy5lQs0ee+OWNwx3On8pMBR0XwTAkrZ1Um6zuS/dat62
- -V0gtnm1JgFxSF4lHDtZUvIWGwxToNYuSON73VEUpKIPVLLOT4bbQj/TuoxaJ+rZ5
- -3FxaOfvWVnnSJO+Is4zzo6uadY0VMKcd989wyGeE2x0suWuVID/VQFqdTUO8p3vk
- -QL9TLKJIezKD347v4jzeLdOghBHlhBRDpKUjPikLgS5074IwsiQ9HzCl3zyJTjL8
- -R4YLvM1QLGW1ZB1DDbIwWZpmk1ZOrhsVUrMrBt2GHRB4xaRPnq4EYRu0nlHnQvuw
- -1ZZskA4bgDGLf/yQZCzb64lGvxTY8DMZJcQUv75ROPRRFRZhC/qfJEtL2zFccH/i
- -pUQJ/Ze2zERWV6Cn6TymIdB2du+sBafn1oflMatcNqPLY2/iJ7gMRSOPCPIFrv8E
- -irJOQ/OxRSNIrrNND5Hj7uQZXHb0EcdMP6UsrDTi/yZaW3ma4EfuTOfimSlHtbx3
- -dPzkWNWyv1SEF30GYK2La02zEl3fwFXkqD5vzkuZ7pa3hWQ87n7obRDh+UTOoZ2/
- -vh5mbEApVt4eTFQBHouXgxR1KexM66aAmWyKuQINBE3zxrgBEAColGLJYSaI+eJE
- -QTEkpz9S4+7Tf/qoBo5mPO2jOOP77ZwLLpYsMkMOtDWhiyMer6uLf49XrLJltCG4
- -CNMbUUWIMhDEDA+iXhFOU1PljRBvzJfNZI3sWs/42/ieA32ldSjEuVwGPRa9V5DS
- -zasLunhiYl5E9AZOjpjjqhM8HO7cTSShExlZcKgHf6313SKm/qJeFeC24BRu4aaZ
- -RKiEB9w6XBP55vu139QmCt2EUXYKYPAgtOUnzUDqW+V2Z6oiDFHzFu0/9DtQyZdW
- -3anVxudeogs6xy+GNbMNFG9lu+c66qvhc/GLCr9CoHWHvB5T4hyfgKy0knO+j5AW
- -oEnQe7+adQ/6uGGyBtxzP5DotbBSB7OB5jDyIrB2uroHnAp7IONc0E83afxyYAxW
- -ws00C2qsG5htjP1dpSPpgcHSGvf2BWTpz8453mXNrY644RXyGsZiXOJOwfa/Ttoe
- -K1SA78Pj2LkQ13ES7Y6GX2zR8cqKlAwFmXKMk76X8J6hb9h4rYgSzHkJQO9TjCq7
- -05eF66K2Z76ZC9A5QE19Gea7Tx5b/GkpvYtOt/gx6P/Png6z8A1oGGGLWevSUxHL
- -TrBZTnjmeHQG5Nx+po5zuM8BxRxFGLn2NI8UxgdpKV0cZOX+p/WVSUoC+DNyl5fy
- -xBKMTgeqYAqYNh7UDyruX5E+tlYF7wARAQABiQIfBBgBAgAJBQJN88a4AhsMAAoJ
- -EIKKwflO8mBT6cIP/RFn8rgRK1IbJsBl3DJPx7yHmavp52t2vN+4ZHqkhnpzbEuF
- -T2nWSetUQJ5J9LHoSkHoHn1yGFEQctlvNqR35xX3PKHrCYv6XNHkUUj3pCcQPP7a
- -enxqzyB9tNgyz8DqbnXNbqELhPvs60ffmsEXgq2dNO+/wbpPW1+Yd6F5Q2X1g1dl
- -JufFpFV0RTQFaCviESMV+lTgFAONEpDK3wnByLukABLVKVrzq/xGly6OqeP4Rh9T
- -vSYi/x3iqv+2wn5XZ5aGTIqWHVFbFfwqCO4US4KdVXodubegED529TfwMzgDBfAD
- -C7HNtrgEBBs9mLT5ypv9xvyJxoMNf1ATfKucRrRDbtSwZk3sh2LgZgXb/AAC9sZi
- -9E6OEhXaWpx+tZNFon2vfzIcpYQzC6rFezRGAOP2asTVqdmrtJDClHttydASNP5A
- -KzLoc+hAmNdpMxaTnAwANVKtJggMoS+YyINISiCFNDli+qKkl2VYXa6NK9GZGiwO
- -VrIAFCpt1F/R+/aY+gPO9Cu+ZuJY/XKSkUqrupqrXgc1KAtkfLEc3JuirG9rbJWD
- -LR0kStjiczm4zW3CTzS4UwF3a5vPlMyftAvOF+/895E8HzrO3lpT6/SwUDPUTEmv
- -3ktcq4L0ZiX3uBiBnagbi4RREILfVk4vo5kBKxymtUB8mUtVL19rR0zwINuZ
- -=teP+
- ------END PGP PUBLIC KEY BLOCK-----
- \ No newline at end of file
- diff --git a/contrib/gitian-keys/devrandom-key.pgp b/contrib/gitian-keys/devrandom-key.pgp
- deleted file mode 100644
- index 7189812..0000000
- Binary files a/contrib/gitian-keys/devrandom-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/erkmos.pgp b/contrib/gitian-keys/erkmos.pgp
- deleted file mode 100644
- index 9d3f060..0000000
- Binary files a/contrib/gitian-keys/erkmos.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/fanquake-key.pgp b/contrib/gitian-keys/fanquake-key.pgp
- deleted file mode 100644
- index 9c03ff4..0000000
- --- a/contrib/gitian-keys/fanquake-key.pgp
- +++ /dev/null
- @@ -1,63 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG/MacGPG2 v2.0.26
- -
- -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
- -XwbdK0Zpx/oDtRHpuDMGKJBV2LWAZYkEbFsmtg==
- -=3o2I
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/gavinandresen-key.pgp b/contrib/gitian-keys/gavinandresen-key.pgp
- deleted file mode 100644
- index f81f44e..0000000
- Binary files a/contrib/gitian-keys/gavinandresen-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/jl2012-key.pgp b/contrib/gitian-keys/jl2012-key.pgp
- deleted file mode 100644
- index 984f555..0000000
- --- a/contrib/gitian-keys/jl2012-key.pgp
- +++ /dev/null
- @@ -1,275 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: SKS 1.1.5
- -Comment: Hostname: pgp.mit.edu
- -
- -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
- -Ww8nn+QC38ITGK9hVF+eVkuR
- -=j8C/
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/jonasschnelli-key.pgp b/contrib/gitian-keys/jonasschnelli-key.pgp
- deleted file mode 100644
- index 3831eae..0000000
- --- a/contrib/gitian-keys/jonasschnelli-key.pgp
- +++ /dev/null
- @@ -1,110 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1
- -
- -mQINBFSBrDIBEACrZEqObmtlTf7fOKttE39qqisFfMg0VeEPS37uETMGYsgTEvzv
- -kfMsXCGsGFLQ78XsHqUeW4uQrtpJH3nUP/Sua1Q12K3lNKTSvVQyEpKoPJwXZahp
- -jm6GA1ApDxZ/KlmxyobR3X0urnMYNZobl5IKJXlxoKGl4OkGNeFlh42pCXZDnR9n
- -1Y17ZcDdybkWcqPbDAz8ilOQcFMhDBFg3Di3IVMAaDZP1uwWFb5vx60YB5NhkOpF
- -nZUH09NJx/7u7QdGPSHOdzW4Xo1HUYtYNDkdOvgZtxpbYEFIaBtVBURMUGwAFagA
- -3a6qaGnCBWEQftyISLiqcKqKqXudOg/cLa1CAiQFkz+IBhY9BCGDRnB8Dcae6EGI
- -Djt2lqZTuMSiheTWeNFMGBioHfPLedcwae8KflrIBC+hNS4ay6HJdIc03WMQ4JKK
- -At8Y8CRLym30/RlqZ2v8CHYqg9Ddlz3+g5JkRKaJTQwFRcX46/tAX+I2NZ8Ra1ea
- -rF5cRHuCk/oaw5ZXYhj4zJO74rjAoSewAARlrTMSM541atJU1u6aWT7rNiF9QKIj
- -i8vEufUxN0YfdmvDD3OXwbO7GnfWXS4sPklFIRACp+Y4ib+QnRY0/qGE0yh3RAG4
- -r/dyIQ1m3z7Pc9eyPKAhE4S7SxAwoR4yOqQ5NAfZXgFuqWzkW51gkQgGzQARAQAB
- -tCtKb25hcyBTY2huZWxsaSA8am9uYXMuc2NobmVsbGlAaW5jbHVkZTcuY2g+iQI+
- -BBMBAgAoBQJUgawyAhsDBQkDwmcABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
- -CRAicOMMUic59iKUD/93DF04C3lptLjtrhyd4wgpBMJV8yzagGyG+Wk0UR7elQw4
- -F1MIvEtIFpuGrcnNfKcqeGGmnnKFTeBjkmgcYvej2fW9XlRA1HgIS0t0ttDv8uVX
- -vy1xVj1qISB+17EiftxJjCOl2pZFEVpLQ7sSgqnVRMsCS45ag6rioGxtq1j3ifQN
- -TENnJWhzOXvwzZhLgsyWLjeYvTDbzfAQLpZFowAMibOwu6ObCkn4dhaW+lI3AnPu
- -76pLsrOljqGvXes6o2d28vjqMrlmsz2xVEJ4bnRPUbLv3bUl6t+19XpiMj94ZCZX
- -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
- -S5rowLE=
- -=ZVPf
- ------END PGP PUBLIC KEY BLOCK-----
- \ No newline at end of file
- diff --git a/contrib/gitian-keys/jtimon-key.pgp b/contrib/gitian-keys/jtimon-key.pgp
- deleted file mode 100644
- index 88d0de1..0000000
- Binary files a/contrib/gitian-keys/jtimon-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/laanwj-key.pgp b/contrib/gitian-keys/laanwj-key.pgp
- deleted file mode 100644
- index eed232a..0000000
- Binary files a/contrib/gitian-keys/laanwj-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/losh11-key.pgp b/contrib/gitian-keys/losh11-key.pgp
- deleted file mode 100644
- index c618cf1..0000000
- --- a/contrib/gitian-keys/losh11-key.pgp
- +++ /dev/null
- @@ -1,51 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -
- -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
- -VmOTAm8aV1oZPiPawSXApIaX9kGBDrhv4Q==
- -=lf7y
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/luke-jr-key.pgp b/contrib/gitian-keys/luke-jr-key.pgp
- deleted file mode 100644
- index a2d34e7..0000000
- Binary files a/contrib/gitian-keys/luke-jr-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/marcofalke-key.pgp b/contrib/gitian-keys/marcofalke-key.pgp
- deleted file mode 100644
- index ee62650..0000000
- --- a/contrib/gitian-keys/marcofalke-key.pgp
- +++ /dev/null
- @@ -1,69 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1
- -
- -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
- -=GC3s
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/michagogo-key.pgp b/contrib/gitian-keys/michagogo-key.pgp
- deleted file mode 100644
- index 47bc404..0000000
- --- a/contrib/gitian-keys/michagogo-key.pgp
- +++ /dev/null
- @@ -1,59 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1.4.12 (GNU/Linux)
- -
- -mQENBFGeqJ4BCADb7SI3/+q93gIvN0AGRg9Mtz73OLIOzCHeeoyn+tp7JcYNzxkQ
- -9lfeXiEfn72Sh8gHkLtLIqr7HlIMo8DxSS8JPRVjlJGkNyAW4SeEwN2wNa5OV8k0
- -N4jBa9a1csFyCyrEkPKvkUpBkQDvNXjNxyEhHwyZqPanKxy6NXIHOJji8ObOMQXI
- -T9HwJrpjRth3u4uKG968JBTEyAXAmkt0Zidl1Ykgzcedk4mJSE9uZCW8DjSv2wML
- -XcQz8+dYsoskT3KRdkowLHxAfj1BNyNc1+rKLghliM5vSQWi+Lbhi1Bxh4sY1UwA
- -lKnAGqrnAGyIvCtkwTq5QI6ufF2ZY44bvVgpABEBAAG0IU1pY2hhZ29nbyA8bWlj
- -aGFnb2dvQHNlcnZlci5mYWtlPokBOAQTAQIAIgUCUZ6ongIbAwYLCQgHAwIGFQgC
- -CQoLBBYCAwECHgECF4AACgkQgsXACWKOzwzMUAgAuqUmK10xE5C3lUym2f72z0t6
- -a2NM5Wfjr9//Y1/okC36C5XAMEtN2UwckPzzJ5p5D5y5yzwfZq5Jd8Py29VQIMsV
- -7FbC1a0H3D+bCyX+JJ6FAmUbnWOQ/+mydYc74RvD8iwjePNT6kziZNv6dMGctJTl
- -0alwjtQYgyGkeYKnIxbcyjHX/IawLUrunb/6mSKun87T8+NM/omfFCTc3l8TakpM
- -0wyNYRiUkIfUBvB8sDUU3A80qKN/hqRKvlFu3+/kMiAc9ZYQrbmsB+sYWdmM+4zw
- -8NBw3yuYzWyPuoa4PR5ZmS9F11WLMR5vTRCdLudAqYsWu3LtV6vAIvlOUa2LMLRg
- -TWljaGFnb2dvIChSZWdpc3RlcmVkIG5pY2sgbWljaGFnb2dvIG9uIGZyZWVub2Rl
- -IGFzIG9mIE9jdG9iZXIgMTIsIDIwMTMpIDxtaWNoYWdvZ29Ac2VydmVyLmZha2U+
- -iQE4BBMBAgAiBQJSWarzAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCC
- -xcAJYo7PDA7nB/91wAiaMlU5nHLUu0anhNQbGvUdFgKK1zO90S5KzUdJcY438jcS
- -UJW1az8l9U9JBRIfPRYVhz/Z1TAJ+dCzD7D8BXHFeGEr0zNOh87ly9aB5du7dpN2
- -oSBD6wLcJpqxt4h+XjSS2CX98/2ZIJxXENE2KySaTXP39Xl3eNwvJTUBA4XlcMey
- -J8KMp/IERli4H0O7vRyLgu3yYpUArTqAonzG1g2lfB35PQJfeInrRSniQ336otnZ
- -A8qwJ63kfUtWVDRz0g1fnvtiLGPivDJaI5hyIaUeJPaXU1+sg7YNroDu60o2NGZh
- -F+0IjHlvRfzzA+F9Vw38rpSqR3BmCdjf6Sv3iQEcBBABAgAGBQJSWa9/AAoJEH+r
- -EUJn5PoE/hgH/1T2dAthVucA/hzY0nl4SMjbg+dzNlYBq00Qwx8DRKVjk5et8+kY
- -oPI3DGILcr+ELnxNekeMv9WQBBtJanUh1K5ohZ6ohoR7lG18LXf5HCdspflB5Me6
- -LMA6iMryEP6gIs9GFuoGe2YQavm58YrkqhcPu34dGN7kdurfEXLvDfVlh5ZbKCsP
- -Gyd7Pbz04SpqykgK1udiTsLVjc70Xhv+jAMqeaCugDX6TLEwjVmZH/xsyKk2Uh3V
- -Oib5FXADAtKH+vSqqhFpXrw7R/NaBzvCbas8l61DFHiUg1/bo8vsV8MtGcyZmzXJ
- -C5Gm0njtGOil/g7JF9siUrpxs9Yyt/h+T2W0W01pY2hhZ29nbyAoVXNlciBhY2Nv
- -dW50IG1pY2hhZ29nbyBvbiBHaXRodWIgYXMgb2YgT2N0b2JlciAxMiwgMjAxMykg
- -PG1pY2hhZ29nb0BzZXJ2ZXIuZmFrZT6JATcEEwECACIFAlJZqxkCGwMGCwkIBwMC
- -BhUIAgkKCwQWAgMBAh4BAheAAAoJEILFwAlijs8M+1AH+IU78ARblqTnJeSl0iWH
- -mEsg4IBK30Q6/exDAcqOEm1Yc171uw2WnGmIvPYOQqxrRTvj3LoQ816dU6jrj6vY
- -s+XX0R2hxy7ILh17D/3UKnHcddu7rmc7pNEqZeBXaMughqQaPOWkAIe52+qK5tsl
- -sWllzTYE4jo29uZ3dAtDcKEJjBo/pIXnu1GOslE1+V4X1H9WDlwrS/JXHzyDQAjt
- -maPR+3gNesDanhrRmrnT3ZXW2ZVd3vGBibhia8PWUhU1uwOH23ySWXncgsHH0Zad
- -UMjd4w3YliZP/mLn2ghAxHB70IO7lgAgN3HYZeFoufP3pcK440A+CezfQiRcjHl/
- -oIkBHAQQAQIABgUCUlmvfwAKCRB/qxFCZ+T6BOq9CACItsrUZPKGeWSTkMHknMrV
- -K5vxIXJVCBb+Tppc0Q/J5p4EkW/RFhTwIP2zw8NLDKMh5oO9md4LXhvfIZkqQJFo
- -6ZtLa3Vf+Kj7uyxezBo4QHA+G7tDsRGaMKVrEMiyLCwS1+hg9VaNzsf7zmQW7mYE
- -vTLMHp3cVaSU7Mh2Dl8rnAaM/DpTUZQwZ+32Qrb/Z4HSa4f278iqoFpjEbBE2KCr
- -vT5yEVvpCZ4lwSgA2a+uTlRTvVV6NA/kpsxU64tmhuEOjy+ToDqJ8wv4mqvWZxMv
- -C6OhfVaXBy3U9gG8aQV0ffXGs+TbCtv8ApHd6E1/AVk0oyZGJaBVrEl688bBIWd/
- -uQENBFGeqJ4BCADFmgR7oEGkFFB5qXnuNYFq1nUGDAh0dLNtAD3J6EMxUZEXdmp+
- -DQHJw6/eDRQaG9EbjNZheycbVUoI8K2Y/Z268HQueGuIEIJv6cZYXoXdWCbDD4fn
- -HMNUX2wNlpDqWxb7PNUEtfU9hI3gmHGlr5OiEh3iV06uiZg4n2rbWPbj45m5LJzv
- -wpCrUA+pLcl9Xjw2cajaSTjdXHk9gvXTCo6s2ZS3/3Q4l+xuzZp1MGNzPQHASMKs
- -wecSJKkYg6W8I5WsVlPd9a8oQCc/Nfz7BPw31MRVR/SF5FAMqaXx5uLwghVdHB2i
- -cLURsOtJlCfP8W06gB7yS+MH45Jq/oxBRiJBABEBAAGJAR8EGAECAAkFAlGeqJ4C
- -GwwACgkQgsXACWKOzwwT4wgAy6ICcnBZ9l2jSu+ldy57F6jf5kpKZgB9NV8V2mMA
- -NeY1wMQ4VTVpU4t3s4E2LYtGNJNkPQVHbt1Pf4dGPasvMPaHMamgwgyqgYixqs0x
- -D5PdKzVrfnjwTTr/ZAFdccSPmvy5/hbY0geQ/+mzdbL07+xaT58JIoG5nySDKhmC
- -VeOvhDZtXMVAhEWBDPEgh/H9sEuBgMgZrzfE1j3q802qiXeQs6WtadWlQ1RN9Iq1
- -ZzIi6u9/BifEIRI0pO/WwKOZdXLTemFUoakoe7uT3A74N96t0G9LZVihYbEoO+Pc
- -5IaHPBV5VLeR3TB1LnnjHVf/Fwi8cnGy50kNWjcbMyEDag==
- -=jyQ4
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/oharareidryan-key.pgp b/contrib/gitian-keys/oharareidryan-key.pgp
- deleted file mode 100644
- index 2c83a8e..0000000
- --- a/contrib/gitian-keys/oharareidryan-key.pgp
- +++ /dev/null
- @@ -1,52 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1
- -
- -mQINBFjCAtkBEADKSVwMdoPzhEoZocADNvVxkD3FHktkwy0CJzqfjxB8yr0vrppL
- -v9jta/xvb0eg58BXkxX3wkJ9o4XUEUqxwH4GLuvL4aDlbQbLgxxQ1PaQNhKTkVAh
- -2NG8cRX6BPqy46appqZTbK2oU5xkV6OCQZ4xEdBD2fRHE4ndfZIrzAbHRgl7c7eO
- -VXXh5GEjuMKeK8sOx9/KtBf0rqBdugEihoXojVmQJf/J7KmiKu1u6vLd3vnw/xnQ
- -OADUoMyWEu07l1dSPEIEQ0/Tdzkwk13QNcpAXBptl6cupt5c6D96mzMD+qYn105H
- -IN2QvSSol0Vx1uQ5qSVGE1oxu9kVZNpbtrNUSRc6DhAwGuzA5jRo2mjN5KATvEOo
- -NdOXfXgATMKsTikYwMulSgSFruJJAMKBiGSnf2hzPbMxxybFYHTnD5zA2XP6Xi9f
- -2EusrYAdlit86py1z1jZCIX1Woo6H+8dRotQbRtnesq+BTkoY50iyq4WyTUQuX3f
- -X0DR5fs7TByst/OuqoQS5wVh1poYUkM5D2qzAfOF/wglPltMCmt5oVmaUKmYBDDd
- -MI6D51h8R5FomCavKV2mJJHnN/ENC0JYP/9zZV8oEfB5WUabnINpI8qUBbmHf/Id
- -7sWAFInbAoYl49l03X1Qli/TRiD4ntjNlCQbH7EynzI1v0S3TMwy2/8q5QARAQAB
- -tCtSeWFuIE8nSGFyYS1SZWlkIDxvaGFyYXJlaWQucnlhbkBnbWFpbC5jb20+iQI4
- -BBMBAgAiBQJYwgLZAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRB1Uu55
- -U8MCr2HTD/9YOPNT1cAkF3bsw0QYWhXegTsyC6KrJVpYuJ4o/VPP2/sJMjUOYTZw
- -6SvYkmvTOmupW5r1tDMGuLn5FoTeMtlMin4ZB8Oir65Sf9Fb9sWzTHk0/DmHTRUM
- -iefit8YFAXciPlEBC4Y72txUMgfNAOBl4HJ0MctJcHDyymp1Tt9LqmCsy8T729Eu
- -padjyvDyIL/WE4+mo5ueRMksCn4Wd9Pc5X2tRjwITegUBAhzpxselZWWZkId9Gz3
- -R9erC8SkaH3s5EQksx9JNeWoYbqXkyyp5l42tGKqrh7mInVaEddIUkLadkZqYtiq
- -nDHlQwsSS5BTC5bn4uvUTyLQLskydW3isiRdc+Ea3e093dCO25BGj/aQSJpeEBk5
- -ng5fQAyFzH3cXt1i7OCfznSstWA4QpYGp/73QOwzC/4xLfoyax0nH9Wl4Qn4MDN3
- -s9HRFi/24r4/AOim0GPXPyja63uIhWT+Z4ikEveM41HHp5fL+SJisQMSpd+m8Bwb
- -koCQRa0iVU9Gxe6UTh73G2mLQtQXpLOiOin8AXKDooMpnyxRWXUXW0yjb5ldkhlP
- -izjyZzELnqxySClu28/YWcPlEf+aUSbHs63SDFkty3M8nd7QDade73yk8GmZ8a9i
- -460exTSv92mVDZdk3ZMSc3uupdwLQ4pcBT4eNI/a18CY1sUcbty9JbkCDQRYwgLZ
- -ARAAyucakQkd/RrwTRMWOk+txtVFPq8emmA99yUKRu0592JJc6BN6W1VjxfMGLeY
- -fybHr7yOkvduVnzJy7WLtvKJWE9WC1vU/Fumsc3VW0SDxlbNiBXN8wGW43O6SEuf
- -DHnhvoQq+XEf8wVWib1FAGS7mHKQ83pgiL6R+vAGoKDJW8UPxcos7V+WwGrIpM00
- -DOa1+GX41unUdQd/T8ZuQdpB5K6eKEHw8nszSuae6ks6m3qipsUgVjESzNUvzk0u
- -oqSc1fWNoVeBipPbWy+6Ix2ZT00hXaXBLUAKNU999lGPUDkQhL+/eVSeWce3sXj/
- -xY7OEJbYTaXhLvfaoCFl1b0iioUckiY6PwMSNU1/GhHZU3xDr2AM3jawvk9rXXyB
- -gY0NQIWfmA1vZ2IqMfb0iwHT1iPtCp45HEDgjZeuJD4143gB7sW1R/4h4rgGh92f
- -21K7giUkxWv/U7CwRwgBr+gZQWQBfjc4OxDaq2rupvptgo/n2W6Fav/jChcxPrnW
- -nEsZaRm1iIhXZu04m8dBPeByjdC96WG/ajKln5amcwhr3n98N1VAI99l5aW1QsBA
- -eMNVzZ+ee17lZETy4FAEsntsf5xET8FhzPvxDO8sZdhADhLVmZ3VW7OEbRi10DLj
- -5d6GxcdFq2jYxJo7DlnIK5qiPDoqSl0GSnFETzEQ2uhsyYsAEQEAAYkCHwQYAQIA
- -CQUCWMIC2QIbDAAKCRB1Uu55U8MCr+tbD/49wUlBImMxhjgC/9lYBiX4T6JK5bWp
- -l98+oOk7bgZwuKR+qUDTJlolGIBZXA4fYDHkfvkaEH10zDG0iHDWIyLS3wDV48Lx
- -c9mPQ1iVgxkfEk7s4X3W7Nv7Epj/JfMkKLHcMs6bZppLM9qGiO1TTMtSijQsYW27
- -b8+eKxHNLuUnw1lblWdxZ+NzPeXaYDyHPUTuHbw3522WdSz0AeGb3j0v5pCt0G+3
- -QaUERpnsdaH0nqwROpH8qIZNVDrQAkyN76w47YMR5i00ESX/uzxeX494mtfJvHKd
- -qXlrIU2ZateRAPgaZOyLnb4s8ZdNSE3tGpcWxDesk4wEKclSIeTaeeqvqpo3BbKy
- -4VmM4s323w8ViqB5IQjip/J8JA+YlG+sI1IsuZbuEvs4mb4DBHbQZyxgAp5Pwlni
- -B/SrbDNjAWRmTr7L3H5PxKsIxV+ARYS6p5vSptxxotViEQlKcSL4flxeg4W6RhBz
- -uKdSXlw32rxYA9ejel1Gm8wwUqRqb24Ntpw0ky1C4MTPV8shAYPlwZSm4YjHQ6xi
- -ac/mIDCXy2ESnwKWJGK8YMxIPWiqy36khN6qFzd8eZ/8T8y+3KBT561h4bt4UoUQ
- -aL6zFmltW6Ac/Wcz0/GX2BwOjozlbZQjba1ku6r7JBB/Z++xyCAw1NlhJuKGr5Ii
- -L3GQhtqZb+1qxg==
- -=/Urh
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/petertodd-key.pgp b/contrib/gitian-keys/petertodd-key.pgp
- deleted file mode 100644
- index 5ee82a6..0000000
- --- a/contrib/gitian-keys/petertodd-key.pgp
- +++ /dev/null
- @@ -1,1901 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -
- -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
- -peBNXREPb4kkfF+RpT7HWD0u+i6sWb5+Yzt+vuRip7JkVu+7FDefLJ6ke0nEu6xJ
- -+HbAmZznOjnAg3o8M+XD9NIJT8Z5yB+ikQ3AZuZ1bJfNC85++oKGq14xJSvcA/4f
- -hLdGNmj05ijBMYLsdzDL+Wkdl/69sultxs4nD6mhlw2epZtiw5qj4dgbzz7p6O78
- -3pZgXBvy5UFxgxx8hZsjDAayodfyebFNSLXC06uVjafFbtbQZc83UfJAxwaW0jF6
- -cl0n7nquGPk1TNMVCHOd9VNCdhPlFJHctUbIv0+HNrzgWCrmN1JzP4BJZsIK/Oqs
- -j1SoFdGwxRWpSNwgO3WJASIEEAECAAwFAlKOadAFAwASdQAACgkQlxC4m8pXrXz8
- -wQgAj0li8ga7DxoPNue6DzfKUbXw/LqjZUgs+d/MlHiEXS9hEMBDKLAnpDVIwSQl
- -Ldu7UvanjpWK5UVj4jTMnNKjJXHRlFc1WBRrehOFej6tob//cd3czFKDG+IewnQX
- -OLI7TA3uP5rg9PikGJOUW7wHUwunBdQl9XpLJe2XIhR7BAC4ppYl14OLDXM87f4J
- -grEDv8po/xdY+s2ysI31g8/v8mg2ROromZ12HMrsirqyVb+dyNFxcQi9U9ZC6h8V
- -00G4+duTjJt8YpQ/DYybVpMmVa40ePV+Z113OFZn9JdKs3p0kSi8csyLyItyJ62K
- -c3/yfspKE3ZDrd+FVJ/VJXUIXohGBBARAgAGBQJTGOluAAoJEHc3YWR7U2QV/1AA
- -n1bPtu6ZiSp+10U6yMmEvc9jWGlbAJ9tSDXgb9k3bFr1scJJ5kBsFJLGJYkCHAQQ
- -AQoABgUCUp+JYAAKCRCkTD3TpUjY4lRZEACqIACFZ0JHma1seks08qGrOYAIJxd7
- -VS7Pgk4w8/kYaoXePs+F2Liaevnd06aCytJBxa32yR9fsgoPwoF2I4tRMCBn68Sn
- -lw/te9SU7M9Prrf8Rq02gEO7a2kqAH6ZNcUHdQDw2U0Rj4ArnZkHUh2Ey4TJwVUc
- -tZzeXxlpgqYRTBLNaJyyBP53N8A+nHtpcqJYdxDYMMdTYVNs8epvRMcRfO/dWnnR
- -lnco1ptge3cwm7E1/zX96/7GTPDwvtWseo0PF9W6wbaWTNm3c71iDXJbNbcVWdFt
- -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
- -rjxmAAoJEDzYwH8LXOFOWPwIAIlL4BdP6UUCqktIiVtFpHpcLdwJoElOOlxmpWen
- -tQH8yNVrHdHaHgNzG5KMQNK/9RUvVeOQZX4g0/a11/GvwcY5pKNVSD1Jev4GSthf
- -585s6DyEGV/ptBYLLDFtSZdwttN+psNjCW3nk8cWY3cV0xZ6rOq22nz42puv9Q51
- -TnaxBZk5kjROOetXQapW02twdC4k9tXLzuxjZ5w4zul9j0DFvXXIENHRMZVQDODr
- -e9SkkzfvYyhqLMB5hFMZK7bnY6LvtWWM+aLZRa1B/j+thWwhM0JnCyKtqOXS8sGK
- -rfpj7et2f66fi+i2yNhk/UBBHGwNlhYkeZG+ovcWTAtRjdGJASIEEAECAAwFAlQX
- -PQ4FAwASdQAACgkQlxC4m8pXrXyvNQgAq8NazgIJu3cuGoIkel7tDAdPjFtQuznc
- -pARNRSwVyG2jdZHOrNf76AoZK0NIqcenuKVyLe/o/U9+P4ufbBPajqnhSqEiu4f0
- -mk1TWoJxWC2jW+Ew2ZLNu0adtoAqBE+FDCieAObUKF++4cxiU4r5npilADucQ4Fy
- -UGLTA5RUQy4j9w0rQJ4xCAhzxBT/SiULlKQgEpj2XdOOiHSMS76fbIkw991L8ECN
- -/1DiNDAzbExE2BwS0WwPb3KUiT0ookS91Q2i6mWaJbCa4iJUvK3i2YTxPpFb4N2e
- -YmCCvKMLT4RC/2JQlUSjEozMImdYbFh1c0snzXmRatWK9THyyFuXx9HTt9O1ARAA
- -AQEAAAAAAAAAAAAAAAD/2P/gABBKRklGAAEBAQBIAEgAAP/bAEMAEAsMDgwKEA4N
- -DhIREBMYKRsYFhYYMiQmHik7ND49OjQ5OEFJXlBBRVlGODlSb1NZYWRpamk/T3N7
- -cmZ6XmdpZf/bAEMBERISGBUYMBsbMGVDOUNlZWVlZWVlZWVlZWVlZWVlZWVlZWVl
- -ZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZf/AABEIASAA8AMBIgACEQEDEQH/
- -xAAaAAACAwEBAAAAAAAAAAAAAAADBAABAgUG/8QAMBAAAgIBBAAGAQMFAAIDAAAA
- -AQIAAxEEEiExBRMiQVFhcRQygQYjQpGhFbEzUsH/xAAYAQEBAQEBAAAAAAAAAAAA
- -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
- -ddcnY0NWKj4kmBPS7HHne8wIZ3uXvZSxZWxoKocVY1vsC4sE3o5CYKGnFkyDb57S
- -e+S2M5C8ert29tMeN4q7cAnujRwfiHtgWZUYbyoAX8r/hJ58IVNNBWgajbQIpDI6
- -W7OQJsOsdVWY4xByg2K/uhJPD33T5bIc5Q42T447WE03acsbfwZad2aYFC5wNyoT
- -EuZ15dLysj8cwo9+A42Ks1dtVRhVgRUZw0cf3+2kiQYb/j0lP5x220bRcMJbdlLF
- -lhaLlH83UBiV+lDtOi4DpkBvbHmo5l9QEnqDxTuEto6zVevvbDbbW5LfsqUXLUBq
- -ivEL0hv8CPsX1iWoXntEqHdDiD/pge1L+at4KMXwV5y/JceTsHZOT5TrImVbeqGA
- -Bsodm+PUeQczM8xLWHYoM0lWij22D5u8mV8GdQ0J609mFKkO0trj5xWF76EaHoMZ
- -DX2cKafHI9nBUXcpe29riQJIBBIBCgAyBQJUmemYKxpodHRwOi8vd3d3LmhlYWRz
- -dHJvbmcuZGUva2V5c2lnbmluZy1wb2xpY3kACgkQ7Okh2oY7lfcaPhAAqpnJX7Ay
- -hrl5iwMw6syaTWPO3yge76z8BU9KNacxcARR9wm8jfqV+OtCfPvFBTFPZb2FCPJL
- -8MX98bRe4Il8dqRTgciQ34zcCE1S/f8cOIv8AJShEcWatvVGpaLk+WWSE666D1b4
- -ZHEDovBBf69jCdO4guNhLfQUO2TTVqsbvxbEFjwCCfdYDjSgPZp83xkaLwn7JY0Q
- -ZDMfnvu3lHZ6FZ2nRhJaKrCUUfi7AfzOhlXn1B/vB3o/Sb1pw9zp3ZQTQ/WsdwmN
- -M95PqLQCrsFfujnG3KBBEBwe8Kl+0eDxL74DmcAt1iVQt8ZeITiTEIzNNyRrD2Hx
- -BKk64PFfhxVsV4YdHQoqhS03p9X6DBvkdpS/esa1b4hFQzaMi2LB6Q+WkCgZ40VD
- -vyP2Z/tCTDTrWKztu0oV3GiCEj8CxypFr12TrpiUZykLnp7jhNdIqavUDFu2riRs
- -1zZFgcLJXoSHgumg4Nc/UFqt3d3632FNhtEyaP7piTRS3ib97VfmTfNR1b1uUtuu
- -4kpo3MLzkfkOH3Kni0pdsmeOc+nmwk5qco+AI9U1mgwfAVgI97wZ8c7pNOTs6chb
- -6o8mLolx6dCCkYv52UcyFdup8VgcgBjdYUx3usqoabnh5Zd5AbxXMyGrzOmWe8u1
- -0cVJlHI8xXlyBxNUXQWZK/CIrYrY2nHIOrWJARwEEAECAAYFAlO9qtoACgkQA89K
- -CrPHmmOlUAgAgEXa2DEsLkKYRV3GgBTirsvMNXKIX1H/guafRh7M/SECVzwRoQIM
- -h7B+3ZciLoZnuKAJlDzuMEivy37bzqxRGAu3bJEPAClb+B/os+5a/gk55RvxwbOy
- -kFOd/FCwfSvzq7B0UiJWEXvAneYSMz2jl7V0nMGlxKh5jP5KQhqPbdlSZOWbQTqN
- -jeFSLz6uSlFHBg6BwgS3K9+2Rosn7XSlfgmGM5CNLJjKcaEAVjn3Kdf07VLHYXrd
- -8LLN0XbaSomWEf1Bm/rDKUZSd86AzL6oUEnXWvRyMAUR4kVoBh5rrb46zMnko2ei
- -O8OcMoI5QNRZhobiU9cSqIg9KBIme50lwYkCHAQSAQIABgUCUvrvcwAKCRDAgIOr
- -Xn6kChwAD/0TtJBehf3MnFDRy2xZlAI7bd/19hfD5yvaVzKXcYggqP0jvfpKrgNs
- -TH6EzJnPthG9aAnukd3CbxhNMiTC0U5u7TaVDHzGPpen7Gdb1l7WV1GSRrOOdfEk
- -DaqJodL6BXQNJu4S7gTwYKLXgwsK57Tx4zbjrHV9faDtIrMQ8Y6ST/HbNn1jhHqs
- -Cms2Ns3Y8k54xSS5irT5sV8++B3pZnqJ578FQJmopuXtSrK+u2TgR96VQolhdWOg
- -aZRhzvTKxHHJuBg1TWCGgrfGqQU1R/6VbOrfBsAJwOU6r4yfCiJqXl55HgHK9aUc
- -TlCjLe0kq+h9AaILfHwbk+TFTJm6VA73YCh2QN4rvfiit8jl5QDuwKV2RBln8unr
- -nzvSjwff//VUFAXk7pbPz/mvEdYPNpWlX0Y8O5mkZbe17Umcy0fDqkAiMScZNfGO
- -01JelEKeF0GykRPrfQTlBwYcsws+jvoBCXxkTHcuDUDYIxSQV/yHqKVbfVPXbOPg
- -LpfmkhaYp6phO/YXVcraeGqV2XUKINiU6eJRyZAI4UWA/KgigFXiknddHgucgLXL
- -uzF4vNFZqwO5xhRmKpN74SZhgE5/unCezQsXF0yv4By2JtBmiDIZHbk3MRLiJifM
- -WKOghoSHL3nGsboKZG2HePmCcZ9K3pjlKpuD3NX0tGZ4UuATCy2PbYkCOQQTAQIA
- -IwUCU6/gyBwaaHR0cDovL290dG9kdi5jb20vc2lncG9saWN5AAoJECO601HJFrZ9
- -xB8QANlST04D6RAQtM9nHBTW8yc+5o7+wCY/A3QcraBNPnseemcMC+Gu78jFBrqH
- -0yzGLxyxV9olD12C7KKckdzzSw1I3rAhTSe+EWioW2rSSmu23EpPipxjxM8n3It+
- -cHabJqfvNnfkKQdEUqyZGIF+g1F92yuFuYVtJPPUpSa27SWoK2RBHFLM+hdPhFg6
- -DYPo8z88VkK4RAqY507ZUEUvQZJqKZehBcHOnLm+nVp6v5fD8nWJ1b3fKgnQp52C
- -gKs7qU77kw1ECdrNrtXwc8v3rNGKYcgGRz6ovWHFVyRXtb6QMGrtbwddnbevksC5
- -QUUj0KTwN6atVa+IoCH1DUp7/RVc3tf4GnEsTKHG7x9IRR9+zoPsxUYhRLUsxeav
- -s+Sp1WjoXngB+jXDXqMT5ePJtSZe6wRy0lQ4ehdxc/ZVR2zlXaO5P/Ir90EELOZq
- -McMQyEElHY6Y/CUSkGADXEgvfuom0tdQhZC/lm30KHObmqBpGplNWPseBwFErMpi
- -wfxMkDsLiMGoTHEgmQ3sS4MLdlz5lcxc4VZW4nfyTHdUdQkat1xaOW1GGm5EntSQ
- -7CeOoGVYZS1n09rshpPgSB8328I5PIf2pkd2RU+w8QmgAhNGfvbPS8TMwKxp/VP/
- -piJELaX+aUmRIcYNOx3dxFIY5Jsh7nD4FFP/NMIshw9zy7vViQSxBBIBAgCbBQJR
- -lWzOlBpodHRwOi8vd3d3LmplbnNlcmF0LmRlL2ZpbGVzL29wZW5wZ3AvQTRGRjIy
- -NzktY2VydC1wb2xpY3ktMjAxMy0wNS0xNy50eHQ/c2hhNTEyc3VtPThjODU4MmYy
- -NTI5OTI0ZGQ2OTI5N2I3NGMzNDBhMGEyOWExYzFkNzViMTgxYmZmNjAyZmRkZDc5
- -ZTdmMDQ5NjQACgkQTh95mqT/Inkrgx//dL5nGlDq3x14gzjd1sxlPZZJNiuRhGrr
- -bV+qdoEUYc06suO81JeVrvClnrZH7Vzn/+MoT8A8hcwhJQK0XiwYNIDOL4AgB/o3
- -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
- -qdMk6BcyUaVzP0dxcnJj2CygYl2RD5dfIp8PzSilTHNfXGbJr9xPTcAjamXhUoJZ
- -p8/C1ODwf2y11EB8CLDVVZmqgtxUOJNfh6is3cfzbYF8O2CX9ai5x9UykV9g////
- -////////////////////////////////////////////////////////////////
- -////////////////////////////////////////////////////////////////
- -////////////////////////////////////////////////////////////////
- -////////////////////////////////////////////////////////////////
- -////////////////////////////////////////////////////////////////
- -////////////////////////////////////////////////////////////////
- -////////////////////////////////////////////////////////////////
- -/////////////////////////////////////////////4kBHAQTAQIABgUCVK48
- -ZgAKCRA82MB/C1zhTgoVB/9j6/khep6CXjyIoghxycm/4qhuCs2M8kM6G1B2W0sv
- -lkaeqha+A96lCS43YoaRWkto2k496rrHfoC5f/8Vb36nQS7hd59DYANbtr5KJzwf
- -yYsP/7+bkaiuC1E5SqmHjFiYYe7enQWdrcbsDfj420ScL9t2P0gO3vKJ5S8m7hkc
- -a4OdCmYJkdaYxJcHK7BC4vkJmbxfnmmyGJaEPP/oxNCeZiyL37Y62N4DqCQpDj5C
- -Ngk5w93+6H4oI8CIMzWEQZt9bZ2k9ipGobYhaLgVk5UMWkVJ8CuZESCgHLCuz7hG
- -gDoDmXTnz3zbp038QPusF9zb307DEsWq7XwJB33/ljm4uQENBE+Xo6MBCADB0197
- -HdK48SqvipyPB49vlzfP6KHfcACZCg1JTqOt8KRJFwTP3PTi/GJuUvt4io1UVG29
- -+3e2X8eDbrxufP0YPr+0IbTE/EMgXizNN28Zf/VIR7bEv9oFXfn/4L3B2L8rf61v
- -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
- -H+s0csYdhw0hL8w60bPXHSWu9wu6zlUJEY8G4pKjisEokYY7Aje/oEGfg8KJLHXA
- -hYrPauW++O/NFCZ6ZNimFf40JRSjSUGzTKuBYW0/25dfV017De1XZvD+Qd198CfA
- -9ojvBP2Rn7PYQkCMYA7xsViNz+tD0eC+BRdyO0cffCzoOOHHXy/1KSOnCry+JReA
- -jnpviOsUyfY2bqGsmOpxyo5VfZ3OoHOOV7nucBEmQojuhl/xvU+Lc2airaR6UIAm
- -jWDWrrkBjQRTG+GcAQwAk8T4liMdVQMjh6WFsmY38lEGu5FxirVSrMKjVQAq52XO
- -l0I2jc6zTdqzyinW0sEswcQhmkTANzCspaU2kIBr/QVbdtPxPakwysV3RsqHPlAI
- -rVQIdBU7ENnE9uzRzJtZfc5m+buknQ3MBjMdXlAceO4w7i+uhu5zXW4tSVwgKzhU
- -uy1IexvK7ni4EZHzsOAarFbZpHozUqNZol7ALJrWkpQWqjuJZEIN0vefgSf3AV/r
- -vGFlbI/PwEWDZlYlwDV9scuHRqqu0S1LArcLDmf78vnnclZYVUNl2kaVgRKmu2ra
- -CWCSctmkyC5rqM9Xj+6B0ZVxhXReqfCnRn06Zwf7WwJuMWMfbAfZjDbksIMgKWpT
- -/8UrH2RrI/6b4w5hXa7/C8zp8H109f7xcRgdLyj748P0bsrrVSfUWxMP+XRRGPY0
- -4spkhNUVFlYc2BroIRXS+REKuI5WfWnUeSNWfAqbexaHRSgQQIydN2qp2sSxAe6Q
- -FE3aXZyCHC4DMqIlUml7ABEBAAGJA7IEGAEIAG4FAlMb4ZxeFIAAAAAAFQBAYmxv
- -Y2toYXNoQGJpdGNvaW4ub3JnMDAwMDAwMDAwMDAwMDAwMGY0ZjViYTMzNDc5MWE0
- -MTAyOTE3ZTRkM2YyMmY2YWQ3ZjJjNGYxNWQ5NzMwN2ZlMgIbAgUJCWYBgAI4CRB/
- -qxFCZ+T6BMFsIAQZAQgAlQUCUxvhnF4UgAAAAAAVAEBibG9ja2hhc2hAYml0Y29p
- -bi5vcmcwMDAwMDAwMDAwMDAwMDAwZjRmNWJhMzM0NzkxYTQxMDI5MTdlNGQzZjIy
- -ZjZhZDdmMmM0ZjE1ZDk3MzA3ZmUyLxSAAAAAABUAEXBrYS1hZGRyZXNzQGdudXBn
- -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
- -=BHZ+
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/prab-key.pgp b/contrib/gitian-keys/prab-key.pgp
- deleted file mode 100644
- index 0870c88..0000000
- --- a/contrib/gitian-keys/prab-key.pgp
- +++ /dev/null
- @@ -1,81 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v2
- -
- -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
- -RFdDYRHByRDDL1I=
- -=dOwX
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/rromanchuk-key.pgp b/contrib/gitian-keys/rromanchuk-key.pgp
- deleted file mode 100644
- index d8e42f7..0000000
- --- a/contrib/gitian-keys/rromanchuk-key.pgp
- +++ /dev/null
- @@ -1,52 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -
- -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
- -uQ==
- -=52us
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/sipa-key.pgp b/contrib/gitian-keys/sipa-key.pgp
- deleted file mode 100644
- index a1930dd..0000000
- Binary files a/contrib/gitian-keys/sipa-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/tcatm-key.pgp b/contrib/gitian-keys/tcatm-key.pgp
- deleted file mode 100644
- index baaec76..0000000
- Binary files a/contrib/gitian-keys/tcatm-key.pgp and /dev/null differ
- diff --git a/contrib/gitian-keys/thrasher-key.pgp b/contrib/gitian-keys/thrasher-key.pgp
- deleted file mode 100644
- index b26780c..0000000
- --- a/contrib/gitian-keys/thrasher-key.pgp
- +++ /dev/null
- @@ -1,48 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: SKS 1.1.5
- -
- -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
- -BJmeK2ooFRT+IJ6zeoXM0z6s
- -=20sn
- ------END PGP PUBLIC KEY BLOCK-----
- \ No newline at end of file
- diff --git a/contrib/gitian-keys/ultragtx-key.pgp b/contrib/gitian-keys/ultragtx-key.pgp
- deleted file mode 100644
- index 9e44785..0000000
- --- a/contrib/gitian-keys/ultragtx-key.pgp
- +++ /dev/null
- @@ -1,52 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Comment: GPGTools - https://gpgtools.org
- -
- -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
- -zjm4471aLA==
- -=4Bh0
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/void-main.pgp b/contrib/gitian-keys/void-main.pgp
- deleted file mode 100644
- index d479f54..0000000
- --- a/contrib/gitian-keys/void-main.pgp
- +++ /dev/null
- @@ -1,30 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Comment: GPGTools - https://gpgtools.org
- -
- -mQENBFMipGEBCADd+Y8YvwDq6YuM6e3wxd/fysnucAoE+qEbo9oW+HbCXaGN15CA
- -jJtDeustHTVpqs+5zFORyLuHBpTTZMOSEKoSDH8gSvqI5bcnkx+2+IWCJX5rOlKl
- -JZh+S35lTGZSlZhmPcArSBS9J6Z8eWknlBtRXg/I9iErWNmF41jRw+oPkwk4NY6k
- -RXQt0yzzwIwRDCI25XHUbU9OXT5Q2ZVverMAUtrmWk0Ft54xHeKbyN3PkVbk9l6E
- -D+FABeZhLyQbA5GJ4RRapAw2zW162GZVHsh1JWIW+yEeasDpc+9sV6A/BSrKnXo9
- -gs/SPNV1NJF3ssKX8f5aObfBfUh6ab1tzPMHABEBAAG0JFBlbmcgU3VuIDx2b2lk
- -bWFpbjEzMTMxMTNAZ21haWwuY29tPokBPQQTAQoAJwUCUyKkYQIbAwUJB4YfgAUL
- -CQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRD1gOecBwaHqFqvCACrYGefW1/dxpjJ
- -cEqJjtRN+Eqf/abtLrQblCpeMAcuPPASUL+a9vuCj+xurMXK+rw+iK9hN59FCp2W
- -bM0/lhZOsPlkDXKltikKQhAGcq6ollmj+2frSJ4h7DBnmcaFMQEeaoDvjzEHxtAv
- -oDpmgRlSy3VVAt7i/6BzxQoHMj9mm7ecGo+OBzOvb+/c6S17tBX4r+llngkjK5Nx
- -UQGmPTfOwnyMo/S67AYcI3ts7TH0dIihEnf6cUtPgr/qigAsRSNNUTthZUAr42eX
- -sCczJmdUCRTolJwAA793kRZU/uXcaUSfWirALNLjSc8ser0pEXO739JtDr3DIjJo
- -NRuS2iHNuQENBFMipGEBCADF6MmAgIsw0qv00v5274VtgpvE2Iz8IZ0puWOgszy4
- -60QFpU2bdc9ziJbBc199QkJQqVhqyzBP+93EajAwkZPz7X87+CsTSp8kIZfFrKgB
- -9u3liy4uvX/+qjBdQeFQ0x5IsMIPlfWNH33Cthe5kZSozaT3jYNrhOii4thBPVMr
- -ou86bffhv5tZd0Gj0B0jWPFeB1RvneyIMX7hyhCY0hnjXz5MmrJsTwfKB4afgfwr
- -WWLwbre4v7I9pmXVkphf6KEOILUs4XSUWoylTHv87SbajO219bid4lWxa+bwq1Ap
- -Ru7vjrY9RaZq48xs8uKgpIquv9bWvqN/5nG3To7ddPhZABEBAAGJASUEGAEKAA8F
- -AlMipGECGwwFCQeGH4AACgkQ9YDnnAcGh6hrSggAtovP4YNqMj6lrx29CE+uPrC7
- -QSIgGbANj/YPpICK8Jk9p7XLnAGaNUWVICTg+fU4iSxr/jrHXrHmvRklkioYxwXw
- -0pdAnGaPSls6+xttX3DH1tSHU7Gu4yBPc4r8fbvB8LF6G8jQePBhJmvXHp9f96cZ
- -wTbiF1dxiANEvO4QHwIKamcxGGcG8249KTNUdas3Xb0s3OPSDpQ/ZE0L0WdEUnVT
- -kqJ3FE3yPxy+pxhjHnppiY8LAnP2dVo6LcYYC7I3zy7UNejdDocc21bN4s+DByrP
- -cCytI5SnYOTsxAl5xSASqTnvz0mteHWOIy9EOyM385tGx2pyavzW5fy0ZB4AFQ==
- -=yfwn
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/wtogami-key.pgp b/contrib/gitian-keys/wtogami-key.pgp
- deleted file mode 100644
- index e0f6c4c..0000000
- --- a/contrib/gitian-keys/wtogami-key.pgp
- +++ /dev/null
- @@ -1,131 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1.4.13 (GNU/Linux)
- -
- -mQQNBFHOzpUBIADYwJ1vC5npnYCthOtiSna/siS6tdol0OXc82QRgK4Q2YeFCkpN
- -Fw/T5YK34BLVGWDHPoafG2+r1nXIuMZnJIiGw6QVOL2sP9f7PrMmzck5KJPHD14Y
- -GRd9BPkhmt3dXzOCjhig7jI6hKEYayfJNUNs9nlZEvl4QWIBMmk+IyqQz3f1HMfl
- -/GkFDShBYF8Ny7Ktlx7AaXymajm4DCrTkbj5V2ZDqJgyQM549EoPSwXBQYrEjye3
- -g2viC8rUFRFWFjdnx7jFEb1uhx71YGuqiLxKihUW9pbSNK2cLweFazHSVmh+B/pz
- -fxHfUn+ijLSIAnprTmc/rq89un/iiPt0O/mspcCZ6hE5pFIyX+SC+9PrGz+bFSmw
- -PkMOZzG489G8k4t/uZsit6helkl0emg6JiXLTmS/oTuT7B9Z9/MeEhOXFcxUb0fr
- -2aZkEmH5d1oxSBis3D5nylmNJXOUSCpJAZ8E5Sr/5FbF9IPR+NSzosVacqCx5Dxj
- -vJ7HpZKn6pJfmwrghVXQv04NRTcxbHNmwd98cofBtWX8yBO8M2M+jZrU+BVDUbb/
- -A1oAyIbUUswBP768Oh11bELhCly774VwBqTojm2yodLGSyysx4zoa6qL7myfor0m
- -a+K29y8WH9XGmKGMdUOg+q9z+ODky9aToGvEo2eVhKIlJsk0aFAGy/8awy6qRIIj
- -UqLMq6XoFcYlE7SmnFUDDDPlBK/NkFFqySpFhKNRyt69Ea9kYXOxDnf/EnBwHn8m
- -PiFQpeZqgnmhyj8Nk1SSQBgUi07NyXdQ/WIYpWmqqqfHRVQgSE9C1920T1zg/E97
- -n5yYjI/gQQwq9wikkJmog6Ny7MSiwIU4LYV0pTUdI4//EJMId2FH8YEUfvG5ds+F
- -H/o/D4CAJ86KjspizfH8jEjhn0Rm/OtrxLz1rwA1gtF//P3TYNWw5qruL4stP3Rx
- -9Gve8Bm7oCBU73UT2ZJomEsWE3oqXinLRl3YCsjGDg/d3ySD6i0/BBROLIeXkh3M
- -M1CNCqREDGLA0vxQi1o7Zi7ZA4gWPSzvi/8KtSzY1iAQODxWUmOICRP7KQODWJmt
- -roTqhKgZ39wlR6eqkO8ZfAvRYsjvkL+EZFbbKbHxVJLhKchd2qHS+/Q3ov4SFzWY
- -/cE0ChOPDM587Jkps2bynKQAzQ6810FXmJc0ztrPeD3PEbuyY4KNJV8HGViRDJXi
- -wvs8eqfvTDGDPl4aLYVCKO9VqZ2OJvqhRhh71LQ2xRrX1LGnYLnUGCMuEQYKvMcI
- -TSssM/VAfeWAPJDklD0lVNJ7d9Z5ugvJHFc01SaaB47Aod2SPWp5DeiY4A8dcy2w
- -7f4Wx6FcdP1RXqaRZKCapBooN04vsvGllCshABEBAAG0KFdhcnJlbiBUb2dhbWkg
- -KDIwMTMpIDx3dG9nYW1pQGdtYWlsLmNvbT6JBDgEEwECACIFAlHOzpUCGwMGCwkI
- -BwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJELEXnrc0fcENY4Ef/23L9iC/39ekJ8Is
- -1IZdCoDD7/DgVaZqydDcy/ha9uaDFY4MQ0h9RZYo1axVBth/Yxzh1XnvitW8HFKn
- -DXn5wJI++KWpdLMUsTrc2iWsjAGgicmN5bkQvfTnRwn2pF17EUUEhZ8YyE3qMSVD
- -rDBECLAswT4Oiq9r9yw3VCFsRaxz5bhk9AAzWjam4H7mAfaEAOUvuX221v+KGSDM
- -UsGAAe+GjMPL8KnGgEbISlSUF1Ubcw3EChcqjf3BID2gMLkAnGAoxlCZSYievytg
- -71mcHyIf9yF861QrGcrCh6/objtRdt4IDUVwo9wapunRmYCdZux4ApD0Hit8nAsm
- -QtxftSK6FWBTOCIRoOQTjwE8qj9GYTIbUFppX66Dzh00td5NKkWz0PVze7YSk2hC
- -KCVBYyUYHgkQYVlYLZw7dBrXSXv7ph95vc93RDS031cU7tPOrthqnMmhtg1WAwzH
- -xc2v3az9Gsw1RyxBAOVpkB0AFODiEiVg46xqmxaBPXfQOg/buZA2l4gK4U/pVUZH
- -72lle2CbBw6FoSx40Y3GYZWB2uEdXBTNLlhX7q2Jvo8WdeTxEv5ACZsjI7K/wrzt
- -nmvCHefOmVf4tefkXy1MyEvBt2+Ek9bHmHDL1BSk/JdJzJtam2uaP5pGum/PwIUW
- -KBatmHKZUKwgOIml9btB413C4zSK3GQmC5Y/+TxYybACIdxTDqPSczVZ5Q+jSywX
- -shdOoLXDRyrYhT2sHjZ1W29B8ebokqwousF77EA94sqfQvDDnmFpvfq9+m0WYtOh
- -PFF/yxOtlbPJYX7mnC8+dUgobSA4AR5Yrclt+levgivIyNuBwzevHRDMreMZKl2J
- -uiOT8tkuu66fAwEltIowjjV7TBRfij4QLXl/zfFo8jKU8efL3xluXoRn7g+E5FZ3
- -19KTF/DWMcttfeTUYVnv0QTnstb1RGnVj7w8JMy90mKdMQFpl7IzHd2n6LrhEw1V
- -1AaPF7EcQBOlvsvlZdIFQrFyhKozKoGi3wRrl/bNdebxjIjPzfN9GgbiufFjz2d7
- -DMR9GFXfUMVxLncaqBBy1X7MV17ZF7K4uw6DET4fRoecb4N5mJVUxvYq4iZApnNP
- -npgGdmlcyPD6o3ynx/vkw78m13Gfgw8i2OaUY7xBdOyNVEvkJZBLaC2hw+TKLaZa
- -v0RExtAO0i0QO4Y1eo78Pl9jOpz0wkJ4KG0270l1Jza4IyaIhYRDWagWOfOp/cXU
- -cvKKiuJhLOsX1Bapz+O2Aor9+EwWRdPd3BzE2ABdmKHPwrKobNp75wrCpQ5mZifn
- -DSTJRMPQQJV3wGfB2sP0NE47U8w5CCmVK8gEuqYr6wBl/CCq5tjiRc63VM+to5V4
- -tVNTCJWIRgQQEQIABgUCUc7PqwAKCRBr3f6OVKKs8cYAAKCFCLJ5wc+iAVCFRevh
- -xTcJct0fiQCePHpY37CIeP8s9BH8GqCDftUqh8SIRgQQEQIABgUCUc7YwAAKCRDd
- -f+mrhdawLOVxAJ9Tjud26LtbM2mWcPj2eT7dhqgZrQCdGyMwMMVzp40lsCK44PrV
- -+mpFO7KJAhwEEAECAAYFAlHO0BkACgkQw35HI5aSdvXfLw//c2zZxXg4bI2W7gkB
- -ZQJIOWnmPZfhrXQNeFuetyGoWTm4ZWxW362AdDGiQSGNNkXqeBPOitKOkRyZP/Z3
- -h1vwkLkwdFZyWXK00BzYBKfjThWV1BAnArQLewSiLlE7qSnsPEY6FW0PNv711cbL
- -lXSUP1/lW25Nx7L76GAF6sHreoIdglE8YH5y310JuFnqPa0uaJG+qDo8Mb+WkyLy
- -Q2A3Atws1tIB9vHsq2FCt9ACyAEA3AqtHR4uMFmIWpUYy77fJAZdzLZTWf0X5XYw
- -XILNPOl/I0iZrq3LYQAvJfIwjWAC/lm6uTLlvkIJHKyhcIT+RocjMV7bY9ezrC5i
- -Cag3gaOZ7USMt0h59KdmBaHHNa32n3PSHg9XWljqoWMRjuaRdcA7ofK0BHDJbHWE
- -cldKXC09laWOXbyNmJsfug/23vNE7fS/cAKSIgEWszEwHJCahB2i/HqOQF0DUGpq
- -3s5oIXs2xIuN0yT6yIIiQnTU/FkWDDu4D1OZNrDW6QG3cde0PRak/0fr4Kv4iB3E
- -CAzlsRBlWKNu/eE4QBx6cbvLqjriijhGAF+8Y1zvRKNKPr96hSsETfVytuKDTp6F
- -u7PAarrSATGXI92Hy3ThAZla0VOYUyeWPktqUMDNq90tIBZbwKpOMMqvJmZfgdOU
- -4ldDq1f5+2WhAt1aTL1GJVCuYcCJAhwEEAECAAYFAlHO3MQACgkQnSOpPExjO3Gi
- -jxAAsD+luooqqoz3A28ZxwfCDV+ovazQ4Bw6hVU0zKKZIz/2H4jwmLtLSHtucCRM
- -xRksZmnqf1p2nn+BKBXDInx9vI9HziMu7fWkzhuovAIf9+X/l6EYV1kQx0bIM1qU
- -BxXWPgGdrgSZZHl9Qff/BOBnrI8NJmVBDzOh3BSs0BrSR7aFbkSNbjk/JcP0JEyk
- -j6wDKQsop/Ca5AboLL0uQPgTvhxCu4VROKjhu7o3s7G3xlxTpimwYklDQuYFaGKj
- -ZNIGFq2orfIMBnj7ZEQVXzhWltlHcgPVP5TDfgd4pVUbyUB6ras7odJWWIHnUFmj
- -1l5bGidIwRXGFusE4iR8pR528LG2KxNDNQYipsKRY9m+wH+N7gbSgK8DxmocvieV
- -vcILFS5VrPLbEO2oC13NMljmvua3ovDB0CEh9rybaH+/oA+VDS2L3pkgATTju+Vx
- -6+mVdlvnrA4mJ5BoLHzrleKybS4ZkbtVBh1KOYmo95NgVifRvpVPB6hKzwqcjYFV
- -fVYBxTryTBRyd9MLsqpPKnGLBENTFvKDxRCK3iioNyVhXdS0z/UyF1C2hwNTpnjY
- -pGCu+Es3SILJg2TvQcwLM0OoYBA1bcONm2XbkTrdCpTOtQcSewQSkijREunx14iu
- -pvNSWeNmbjQU7gNYhvwcBgh90tWgNCfqTtSa5xSe46tmv0SJAhwEEAECAAYFAlHQ
- -1hgACgkQZwn/QC8Dr2hT/g/+OFUYPXfWo0+ILdxyTGP/v2mSw/X3dBCEYUqefWxD
- -umcwnksey+thEGFBlxbwpyOfAoTzZLUupaG6BacVgRUvv8bTne4v2H1d22aBXyjC
- -HMtQPhupn/giamu8q8hCPFrDp6inIAeFuz1GmQaH6xWO5eYBuYXQtxlvZLWBsuMT
- -74en4e3vjczxGmJu/nvM9ugcYsexA/zcN6SRGr7t2pV4ZElPzPBRyAzhYqhP1YlB
- -Rydz60OjgcWYEoJKWhJOfmFJ3ZoNGAz4TGoBkDIq4olCF0/cxqrtHN+ZnEOLwiZ7
- -4ZX90avcjEFtM+Wb5dBHNpni4ISoHcVI1X0ye6tuAOOt7RywbET/0oIW5iSNMgJ0
- -X4XYgOIQ2+a8yjGBjo9I57k0vp1mL6Ji/eaa0dlppcCGnzvSHss+O0qO212pg5Yk
- -GGfjX1y1ZeSP3ca9C2XyOGIVw2d2Iu7OyqAv/N81xt6ZgG3qixQC0nmgOmn7Kh2B
- -20W12KpLxKS8RQdHawGau3MBGKeqbfK6/eAzm22yD4/yJAoW4hKgm84z3FbKUN8w
- -ulYMK9hS2c4egpoDAOJ/QZLLXFWiyi7/sHZz69G2AweWCjOJh28Otg0cUHoLo7jw
- -oO/L0rCsOQMbUuIumYXBPHNnDwv1xfv2lT8tVzf6GksFJBAw0DybxOMTaOg45Lhz
- -jGS5BA0EUc7OlQEgAN6t+BV705uoCsdHtQBq/HKGGD5tBiOzy7Wd4nF/c6EWzET4
- -QUnmw6bDnqjxrk9MWniPDf1O9MvuB4qIY6g9kEjZ+VSQpWUZpZ5bMXCNHrfh9J2Q
- -6oLWqDmpeZv2OI0O9wxT62QaFei2qBtimSnBudLSCnvmU3S0h1PflmJsbj+tVcko
- -w2yOh2bjH1jkVAODHvEbxqyD6fiZhbfUVbPC49SBmXv8Gv0UywNSkP+iqJdwZAb0
- -XtjRx4WjZCkTwJAnbM4CJ63+5Hd83BtWZAZbGAh76XY/cSkDirXtXC+2LNUmP5W2
- -QY+ur5Bvz8LHaqJMXLAtePdkv5kpd+jXBrZieXUtqovxZaQTinl7C3L2TZd/ivxD
- -F3Rko9BFDuXXcdZrxBY5b3146IvSPp1y0WmHRxhAPb+RuiHQMt8K92nOhPyvtWXB
- -mWz0GnW9L6+CW4LKSPRSnE057hyxYNP/DcDd+fWFH+MmhU9noqHfJXSaLVzdI5PI
- -L8N44AndPIojnlxrxRs7Ik/nW6cTV9H3agg+24yyTdFkACbfIS6wWXOHeHuBzmO6
- -VI7pXOZJ9vZT7zI7M/hVci0R3putsGqgRfByRWWQ2DNeyrwUHexZNR/NYz1uhvA6
- -dBfKcuAwqxbdSrW/BxJ+iJWdkgYGCV67VLlO6S9sO33HgOanpPr5R9V1KsFVh4dN
- -j6BjZ4ALE5FPNW+iONnuXvtZbN2cBlBzMDeFC9oZoYCs1Pkmk8xUY2sAXPUt1R0G
- -D/miIb7ig1N52j9P6vv6fPs1ghmc/hGkhaXyjS54B5T33V6M9g+yba9mIgi8ZxZa
- -G+4rlFFKA4HS7wYYRJoqMvnc/qBYvoWLaPu3Xq6AXrJyuAaN+e3L8++cWbYHBXF9
- -qt+Q2RFL0FNiYUQuwkiaerysnm1a0H7ZtJ4zjl4ZgA1Ej7QcylTIbgFW3L7FnyMH
- -/5weLLN2wdjAtzjhRPYJLbV6V/gFbbpCpr+caDUaxSNizQuhhzVI5UrJegaHCCrx
- -DCiwWRFYzN5pqhtgzcaImK76DmPIk+Yrsum5KJZQeGfzKxvF0YnwxU0bxFzcDZJD
- -X2oCJn828Aw2j0nIlVlrrao0JMkvTBeZehO/11U68M2vKGEqrsQOb/BTXyLCeZwn
- -UGow1WvYfRxEZTrhhiYw94EH06gbqmKG1xsuV4LDI5z63/6ACcQW3orMbMymJCky
- -4HiNVZ7SNeGoYe380CJCwv6GN1opKTAWp84cr2KzhAzONGqNWNpUhznAXlI+GzCc
- -D2H330L1atMqZHjgpEfrkowvJ7WBM5KFKDfylaTKhYvfZcTOZs5OmRZSW3U54wRD
- -RMP0d2+k3vRililNhHIErHbjhYFc6zubVbBhvUMAEQEAAYkEHwQYAQIACQUCUc7O
- -lQIbDAAKCRCxF563NH3BDSX2IACugAdZqX+o/+pTkSrj+NEAcP0ZMci8w5nm/yOP
- -VlGyY6PXGuQKcBtvz3LWtIDdddMc/bD/zmZPwSzTx1MMOWc+gjR0azXe2RrdMHYk
- -8pb4X4Op2Nkasoc/8hNsRKaU24WUAQMqrRREIVBEOuHGl1A52Lj+aFB04rRHrkMl
- -AqjB5bwArPorIBdM417EEl4hjEZ9BpQxbUgBhTgGTZuc1u9PsKz1YvQ79YJIRmSH
- -n72Zaf35zY55eOQeoVBzGmFPq+/UFqtRNWA7jmRhHvMz/yR33B/RSxyTJuPb79zi
- -2mIZOrViG3X/UNL4qtOc1cKXQBi+FjHAMlGrCc+D5lnyOhEvqoEuvQic7V6C8Pvk
- -9q+jngn2Gs4pdJO8FOnwaC5xp/ZNE0v7x/KtAHyBA6iKcaepgoRQPSt1ONiHyfh1
- -iGgJn+Y6IHx4YDYKEY0UIzHhCfWUl8XZWcf4wLGEbGztkRbkCFqrsja5IeaO7umB
- -i6C4f95uSGjV7SiIMJOE8xo/m2g4VCnnmk7U996JwtBMKREMMqa3ABK4trfBL3Kq
- -P6I6ZTlA/C5svkVUVwWOMZau9kLDsxv8keGrFteZtfYa1KPAROFwNuBU82UW0KtX
- -QQbZoBKt1o3LhqEu+hXU3iKocYWSbBThH8u6vPNgSnW2Qcv3gcUU3jGmYeHrGiUO
- -SuEWxwlKUxCxBNfmz1FGswlwve1LsS3RTz/XB/L6Ubhq5L7FevrXz8152kuMqnpy
- -m93sXkL1eJVo07hH+otcRnMzy4vUar9z/N12t3hfTffx29PBKUCc2PKPVpLfJX2i
- -hieHk23fhLnptjc3lm9S+bHO3rqEWHqgNgNp9bpuwiLRsIy6qTtmC8jxXkGXvQrS
- -+2Hv6+jRfDcqEAK3vqi1XL7Td81KRjnheBtsKpjS2PFatK3uTo6v1oRWJCdRCxg1
- -HT6a9KvZ+DNKcxlQISKAOLX72qpziaDl4CpBdQy4Zg2pr9oYkLdlfkaDK/OH4J3M
- -wJiVf/uNPPd+yy6xZXK0SPZHf+mf5Yt+Sim93hIbdS9AMdvHKB5n3DR27H+/okPj
- -w3J9z85hxgP5KspizQR6t77AWddPRy/l3BBZeb+HiaeKGBJeSNWXpkPXHkdjLW8U
- -QStzFR8r15FWJTmamIknjJ3XNbytMCpu8cj2ZVZdyjPcHEBL3WbNYYtauSuYmyUO
- -yXBaecM/KoTdvHiERU/mMuf7f1ftftCHehZoNaP+BeIbIud9IHIdrSQBCW+RC1Y1
- -8opDLMtnIOX3OnyCN38ELYcuNLMJxBqnQgi7MVDVcT1+BN/+lFQtG44+rPUkK+T1
- -Jk1/tIJqcyc1BfY6uFHFXWWnqQnjl0XpZo+/bMDxTVy8yND2
- -=icdI
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/xinxi-wang-key.pgp b/contrib/gitian-keys/xinxi-wang-key.pgp
- deleted file mode 100644
- index a110643..0000000
- --- a/contrib/gitian-keys/xinxi-wang-key.pgp
- +++ /dev/null
- @@ -1,52 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Comment: GPGTools - https://gpgtools.org
- -
- -mQINBFggghgBEADPQaTJVx8sryaooH8M17O1FBEx5A3TOWvqibWZvDajc4zpHExn
- -E6R2ElvSyYvC1N2MkfDHoxxqmDsr9m/TRFgLIib+pfC6YLDUXC+PjBlS71yYGDQG
- -XHwfbMeSDAX3KnhXTMp9cH6UrQb0EXUvKILCMCzaKF4XbAEZOJVbrNQoc1mZNOZ3
- -JpVjctruJf3Dv+R5Ka1iLZ/k7AaAA0IW/oZRUAJb6g2P0zPFLLAndtw8zg3X79Kf
- -0pMmj5MIkGrn4zkUeSRrNHf+x+xF9gWJosrnzuzHtJpQsGUQ5hRGK/joXJZIniWy
- -0+ABuD+AH017GKXsB2hfPDrjvClJwh5dRzMv2pvlpz5wboa890+IQVOQW9G4PQsu
- -NNthdffnwoA748henlAJW6FTqrk59xVfrtgxqCpcxlFE3rpAVrgdVS1XUZNzKpo7
- -H9PFJi4TDhqkjgyNaEMERlLiWKVFwXYDEwhKrdHGOCuQehGMB/c8ePaahFmkAOJ5
- -3QbUoIxrEnvhzk/HscJ/XmTA9WXh0j+m272mkP36WvxUG+EgLcBAeQcowm9t0xd+
- -k7FmkW4Q0nGYYCfL4b4EgCpxpcia4k1aMVQNtCvriBiHLiq3u2eSwbmcbgGCCmJ7
- -8YJsc9a+6i7xXFS7AuZBZeJmgKh3JbNxu8WJusfGJD/OTESbZxv+kIqXwwARAQAB
- -tCBYaW54aSBXYW5nIDx4aW54aS53YW5nQGllZWUub3JnPokCPQQTAQoAJwUCWCCC
- -GAIbAwUJB4YfgAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRA+9pdQO/cxhycf
- -EACFCz6yEQbgps7kcour/3c+a8x1BEcyZW1/Dq1nw1egTumtWuYymES7wkS54soT
- -WL1p1N9S5U811/44lC/GdVnmJnsxWjC7tQ7i+Pn3RnQT76kEbYaBu/Hc3Rjjohz2
- -G/aJJpYufhntn6R40o45cyDtRLRRAtgAzI62odc5Z6bxM8UZeMXgUcaCDjIsYaqj
- -1rld3WSEoJ6fcd27mxPtvda0GEci7uTpURFoXOpEE/LsFtFc54/Uh2DRf+aJnzpj
- -aY6PVT44PmAoWf+PQl14QNGcB53XoIr2o5dIJ94JjpEALVOnraxcEXkX/KIqtbVz
- -qg4qXXEwT4z78gVn460JsB08Ww9/pkvA1J6zvZrxZIoKyNYVbrgjLdWVeyMFE+CT
- -i/Na3WdgEehNjLY8R/2QgBX2vUZYzOT9rj0zRyuFE9X1H0ol8niSwQjci/PH9NM7
- -lvy3tEiJUGLleUaVrHcOCH5CPpVpO0mG+8KHbU7FaOQahp/BgrJFNHjTkf1QD6Li
- -syO7BKAqyIEbSxPy8HOhP0NSEOG6aSnLdS6pSaIiEF68Wg9kfMcjMJD7pgiQlkxs
- -h25WBBBP788Pes/aBBBhKxj134lj0kSJJUSbKRvRzJZiuZtOodiVjprF4hV3DFhT
- -QMBiT/NIQ0U7dhxYYzPuKtU+FNULGQt6j2pjWECnwLexWbkCDQRYIIIYARAAz2lu
- -p8itonHELYpewF5nHm0nIyheQFmtIGGh6kEUzKQWkUiwN5dmbUGPICfGkpLxe1dD
- -+hYg+K5xA5SAzChOC5wkaohbhNWJNeTZ1D87+ocHJ8lAqElHP+uUYAlGbEf3A8n9
- -MFUHz+w8dCM/Zcdn6JhfJbTQOnUqvYU0jrJ6+mGRye12lZsoQCesp7YF3jrPSqCK
- -SJKT4u3otXdy078DGxhcv2l6xtfYFl0ej6k6UMEH7TH0GTrGuqsWUkzQHyCtQ6/5
- -JqLUTnIqVyz9/J2DZokDvbihaFfcYmIhWRPbHWjvI3Lc4s2z5t0s87PkcOak5eF0
- -CJfh12wh3icETr37lqu5Z+QHz4rbZcziolXjxobi4P4QsfwGME4nzue2vtLdqvm+
- -2Rjf4Zgd2G/sHktKFsmIcTv8Xuk8lR0scsLqBYU4KgTDokixBGCUgee1GABG2i47
- -CP7VkaVSalKGBVvm8gdpEdNwIrYyxcKeLEcFsZo9zO3beoc9zSLLAcG+hO23q/pV
- -DHhvjOSLK06sf2GLNuA08Cm/TbIN+wXhuSgRw4/2QRBfuvMATKEw4a4T1Z6FVOep
- -HA+MC31AAIULBh57RLRjt6oPm3kZEN7jhMvxdZIv8+HxkjwQH6WHyPLkZjOLFqyX
- -j0H7XeGVB4QOfDDZHF4jxENpID23yHivoBF65LEAEQEAAYkCJQQYAQoADwUCWCCC
- -GAIbDAUJB4YfgAAKCRA+9pdQO/cxh9mfD/9hFWAx2CAw7Oa16lBtHw2PX/JLXo6t
- -LHw9iJ7tVPz4I58liGhwJJ26KsUeQQmNBQDlGPNx0Pw+FaTacRDFLl0zhzo/0dy4
- -GMjjFqusJcMmiMRlLkCSeDfsclG45NT2TQUndNxzIwEHFij7XMxyHngMUR1Uj7aB
- -UvRzQHEju7vpl6z83BKf6nKeAAlnkshy4R89Dkl5D0bJ87zQU+t9BC4OlOLt72Gy
- -S1Mo2neC7FIDIXORHwEDt3nMmyfAzd/leuZV6bIl5NbZvUZ0IQF5fxIUJbJPIzq9
- -TVDYaTeNJ6jyGPjQyQ3z5d9m93FZzN2e0lkp0KmXXlAYmD4LI8BkyMRKnXFae89T
- -62IOEyMPMEs2EDCIlamT3SlLhv60CiCWosSJVvlUiS6s6Ys/z+ijbIrkwWXpuB7V
- -VALAkJT8O9BF5h8MYqa3vXW8ZC5zbBCmmKRHb2kmZs7ayFXV6Rttig0uqY7E8KSt
- -WsXUKBZn20qVc9XojajnnV4iyphGhmuyp5Ob4l+0s19usgJmOVSxAxazDeS53xYL
- -JvQe6aeF2vW4NKLr1M7zUHeUfgW7q+LlD3WUAH9an1RSxQOX3io5dooqpXca4vSq
- -jbbbTwmu0i4jx4XR+rdwyxc+lwP78rjI1qdIuwy56a2ZBXK/jGNkCyKGfvxGMPMb
- -0u+0aDtxP3qPLw==
- -=qp0v
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/gitian-keys/zhiyan-key.pgp b/contrib/gitian-keys/zhiyan-key.pgp
- deleted file mode 100644
- index 29d0a59..0000000
- --- a/contrib/gitian-keys/zhiyan-key.pgp
- +++ /dev/null
- @@ -1,51 +0,0 @@
- ------BEGIN PGP PUBLIC KEY BLOCK-----
- -Version: GnuPG v1
- -
- -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
- -=2+by
- ------END PGP PUBLIC KEY BLOCK-----
- diff --git a/contrib/linearize/README.md b/contrib/linearize/README.md
- index 071c13a..93aa67d 100644
- --- a/contrib/linearize/README.md
- +++ b/contrib/linearize/README.md
- @@ -1,5 +1,5 @@
- # Linearize
- -Construct a linear, no-fork, best version of the Litecoin blockchain. The scripts
- +Construct a linear, no-fork, best version of the LitecoinCash blockchain. The scripts
- run using Python 3 but are compatible with Python 2.
- ## Step 1: Download hash list
- @@ -12,7 +12,7 @@ Required configuration file settings for linearize-hashes:
- Optional config file setting for linearize-hashes:
- * RPC: `host` (Default: `127.0.0.1`)
- -* RPC: `port` (Default: `9332`)
- +* RPC: `port` (Default: `62457`)
- * Blockchain: `min_height`, `max_height`
- * `rev_hash_bytes`: If true, the written block hash list will be
- byte-reversed. (In other words, the hash returned by getblockhash will have its
- @@ -21,7 +21,7 @@ standalone hash lists but safe to use with linearize-data.py, which will output
- the same data no matter which byte format is chosen.
- The `linearize-hashes` script requires a connection, local or remote, to a
- -JSON-RPC server. Running `litecoind` or `litecoin-qt -server` will be sufficient.
- +JSON-RPC server. Running `litecoincashd` or `litecoincash-qt -server` will be sufficient.
- ## Step 2: Copy local block data
- @@ -39,7 +39,7 @@ will be printed.
- respectively, to the current time and to the timestamp of the most recent block
- written to the script's blockchain.
- * `genesis`: The hash of the genesis block in the blockchain.
- -* `input`: litecoind blocks/ directory containing blkNNNNN.dat
- +* `input`: litecoincashd blocks/ directory containing blkNNNNN.dat
- * `hashlist`: text file containing list of block hashes created by
- linearize-hashes.py.
- * `max_out_sz`: Maximum size for files created by the `output_file` option.
- diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg
- index 6b026cf..1feeac6 100644
- --- a/contrib/linearize/example-linearize.cfg
- +++ b/contrib/linearize/example-linearize.cfg
- @@ -1,10 +1,10 @@
- -# litecoind RPC settings (linearize-hashes)
- +# litecoincashd RPC settings (linearize-hashes)
- rpcuser=someuser
- rpcpassword=somepassword
- #datadir=~/.bitcoin
- host=127.0.0.1
- -port=9332
- -#port=19332
- +port=62457
- +#port=62455
- # bootstrap.dat hashlist settings (linearize-hashes)
- max_height=313000
- @@ -14,12 +14,12 @@ max_height=313000
- # mainnet
- netmagic=fbc0b6db
- genesis=12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2
- -input=/home/example/.litecoin/blocks
- +input=/home/example/.litecoincash/blocks
- # testnet
- #netmagic=fdd2c8f1
- #genesis=4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0
- -#input=/home/example/.litecoin/testnet3/blocks
- +#input=/home/example/.litecoincash/testnet3/blocks
- # "output" option causes blockchain files to be written to the given location,
- # with "output_file" ignored. If not used, "output_file" is used instead.
- diff --git a/contrib/linearize/linearize-data.py b/contrib/linearize/linearize-data.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/linearize/linearize-hashes.py b/contrib/linearize/linearize-hashes.py
- old mode 100755
- new mode 100644
- index cc405b6..c4e975d
- --- a/contrib/linearize/linearize-hashes.py
- +++ b/contrib/linearize/linearize-hashes.py
- @@ -125,7 +125,7 @@ if __name__ == '__main__':
- if 'host' not in settings:
- settings['host'] = '127.0.0.1'
- if 'port' not in settings:
- - settings['port'] = 9332
- + settings['port'] = 62457
- if 'min_height' not in settings:
- settings['min_height'] = 0
- if 'max_height' not in settings:
- diff --git a/contrib/macdeploy/README.md b/contrib/macdeploy/README.md
- index 50cc94d..bfbdd1f 100644
- --- a/contrib/macdeploy/README.md
- +++ b/contrib/macdeploy/README.md
- @@ -11,5 +11,5 @@ This script should not be run manually, instead, after building as usual:
- During the process, the disk image window will pop up briefly where the fancy
- settings are applied. This is normal, please do not interfere.
- -When finished, it will produce `Litecoin-Core.dmg`.
- +When finished, it will produce `LitecoinCash-Core.dmg`.
- diff --git a/contrib/macdeploy/custom_dsstore.py b/contrib/macdeploy/custom_dsstore.py
- old mode 100755
- new mode 100644
- index c8bb6d1..195e8f4
- --- a/contrib/macdeploy/custom_dsstore.py
- +++ b/contrib/macdeploy/custom_dsstore.py
- @@ -45,8 +45,8 @@ alias = Alias.from_bytes(icvp['backgroundImageAlias'])
- alias.volume.name = package_name_ns
- alias.volume.posix_path = '/Volumes/' + package_name_ns
- alias.volume.disk_image_alias.target.filename = package_name_ns + '.temp.dmg'
- -alias.volume.disk_image_alias.target.carbon_path = 'Macintosh HD:Users:\x00litecoinuser:\x00Documents:\x00litecoin:\x00litecoin:\x00' + package_name_ns + '.temp.dmg'
- -alias.volume.disk_image_alias.target.posix_path = 'Users/litecoinuser/Documents/litecoin/litecoin/' + package_name_ns + '.temp.dmg'
- +alias.volume.disk_image_alias.target.carbon_path = 'Macintosh HD:Users:\x00litecoincashuser:\x00Documents:\x00litecoincash:\x00litecoincash:\x00' + package_name_ns + '.temp.dmg'
- +alias.volume.disk_image_alias.target.posix_path = 'Users/litecoincashuser/Documents/litecoincash/litecoincash/' + package_name_ns + '.temp.dmg'
- alias.target.carbon_path = package_name_ns + ':.background:\x00background.tiff'
- icvp['backgroundImageAlias'] = biplist.Data(alias.to_bytes())
- ds['.']['icvp'] = icvp
- @@ -54,7 +54,7 @@ ds['.']['icvp'] = icvp
- ds['.']['vSrn'] = ('long', 1)
- ds['Applications']['Iloc'] = (370, 156)
- -ds['Litecoin-Qt.app']['Iloc'] = (128, 156)
- +ds['LitecoinCash-Qt.app']['Iloc'] = (128, 156)
- ds.flush()
- ds.close()
- diff --git a/contrib/macdeploy/detached-sig-apply.sh b/contrib/macdeploy/detached-sig-apply.sh
- old mode 100755
- new mode 100644
- diff --git a/contrib/macdeploy/detached-sig-create.sh b/contrib/macdeploy/detached-sig-create.sh
- old mode 100755
- new mode 100644
- index a3fc318..fac20ee
- --- a/contrib/macdeploy/detached-sig-create.sh
- +++ b/contrib/macdeploy/detached-sig-create.sh
- @@ -6,7 +6,7 @@
- set -e
- ROOTDIR=dist
- -BUNDLE="${ROOTDIR}/Litecoin-Qt.app"
- +BUNDLE="${ROOTDIR}/LitecoinCash-Qt.app"
- CODESIGN=codesign
- TEMPDIR=sign.temp
- TEMPLIST=${TEMPDIR}/signatures.txt
- diff --git a/contrib/macdeploy/extract-osx-sdk.sh b/contrib/macdeploy/extract-osx-sdk.sh
- old mode 100755
- new mode 100644
- diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist
- index 1dd36c9..8c2a1c2 100644
- --- a/contrib/macdeploy/fancy.plist
- +++ b/contrib/macdeploy/fancy.plist
- @@ -22,7 +22,7 @@
- <integer>370</integer>
- <integer>156</integer>
- </array>
- - <key>Litecoin-Qt.app</key>
- + <key>LitecoinCash-Qt.app</key>
- <array>
- <integer>128</integer>
- <integer>156</integer>
- diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus
- old mode 100755
- new mode 100644
- index 6d4b15c..dc3693a
- --- a/contrib/macdeploy/macdeployqtplus
- +++ b/contrib/macdeploy/macdeployqtplus
- @@ -155,7 +155,7 @@ class FrameworkInfo(object):
- class ApplicationBundleInfo(object):
- def __init__(self, path):
- self.path = path
- - appName = "Litecoin-Qt"
- + appName = "LitecoinCash-Qt"
- self.binaryPath = os.path.join(path, "Contents", "MacOS", appName)
- if not os.path.exists(self.binaryPath):
- raise RuntimeError("Could not find bundle binary for " + path)
- @@ -603,7 +603,7 @@ else:
- # ------------------------------------------------
- -target = os.path.join("dist", "Litecoin-Qt.app")
- +target = os.path.join("dist", "LitecoinCash-Qt.app")
- if verbose >= 2:
- print("+ Copying source bundle +")
- diff --git a/contrib/qos/README.md b/contrib/qos/README.md
- index d569b6a..e0e89ca 100644
- --- a/contrib/qos/README.md
- +++ b/contrib/qos/README.md
- @@ -1,5 +1,5 @@
- ### Qos ###
- -This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Litecoin network. It limits outbound TCP traffic with a source or destination port of 9333, but not if the destination IP is within a LAN (defined as 192.168.x.x).
- +This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the LitecoinCash network. It limits outbound TCP traffic with a source or destination port of 9333, but not if the destination IP is within a LAN (defined as 192.168.x.x).
- -This means one can have an always-on litecoind instance running, and another local litecoind/litecoin-qt instance which connects to this node and receives blocks from it.
- +This means one can have an always-on litecoincashd instance running, and another local litecoincashd/litecoincash-qt instance which connects to this node and receives blocks from it.
- diff --git a/contrib/qos/tc.sh b/contrib/qos/tc.sh
- index 8f9bb7a..5bfad72 100644
- --- a/contrib/qos/tc.sh
- +++ b/contrib/qos/tc.sh
- @@ -6,7 +6,7 @@
- IF="eth0"
- #limit of the network interface in question
- LINKCEIL="1gbit"
- -#limit outbound Litecoin protocol traffic to this rate
- +#limit outbound LitecoinCash protocol traffic to this rate
- LIMIT="160kbit"
- #defines the address space for which you wish to disable rate limiting
- LOCALNET="192.168.0.0/16"
- diff --git a/contrib/rpm/bitcoin.spec b/contrib/rpm/bitcoin.spec
- index ca089f7..3cb2e81 100644
- --- a/contrib/rpm/bitcoin.spec
- +++ b/contrib/rpm/bitcoin.spec
- @@ -332,9 +332,9 @@ if [ `%{_sbindir}/sestatus |grep -c "disabled"` -eq 0 ]; then
- for selinuxvariant in %{selinux_variants}; do
- %{_sbindir}/semodule -s ${selinuxvariant} -i %{_datadir}/selinux/${selinuxvariant}/bitcoin.pp &> /dev/null || :
- done
- -%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 9332
- +%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 62457
- %{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 9333
- -%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 19332
- +%{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 62455
- %{_sbindir}/semanage port -a -t bitcoin_port_t -p tcp 19333
- %{_sbindir}/fixfiles -R bitcoin-server restore &> /dev/null || :
- %{_sbindir}/restorecon -R %{_localstatedir}/lib/bitcoin || :
- @@ -351,9 +351,9 @@ fi
- # SELinux
- if [ $1 -eq 0 ]; then
- if [ `%{_sbindir}/sestatus |grep -c "disabled"` -eq 0 ]; then
- - %{_sbindir}/semanage port -d -p tcp 9332
- + %{_sbindir}/semanage port -d -p tcp 62457
- %{_sbindir}/semanage port -d -p tcp 9333
- - %{_sbindir}/semanage port -d -p tcp 19332
- + %{_sbindir}/semanage port -d -p tcp 62455
- %{_sbindir}/semanage port -d -p tcp 19333
- for selinuxvariant in %{selinux_variants}; do
- %{_sbindir}/semodule -s ${selinuxvariant} -r bitcoin &> /dev/null || :
- diff --git a/contrib/seeds/README.md b/contrib/seeds/README.md
- index 9d2ffe3..e42fc5f 100644
- --- a/contrib/seeds/README.md
- +++ b/contrib/seeds/README.md
- @@ -8,7 +8,7 @@ and remove old versions as necessary.
- The seeds compiled into the release are created from poolers's DNS seed data, like this:
- - curl -s https://www.litecoinpool.org/seeds.txt > seeds_main.txt
- + curl -s https://www.litecoincashpool.org/seeds.txt > seeds_main.txt
- python3 makeseeds.py < seeds_main.txt > nodes_main.txt
- python3 generate-seeds.py . > ../../src/chainparamsseeds.h
- diff --git a/contrib/seeds/generate-seeds.py b/contrib/seeds/generate-seeds.py
- old mode 100755
- new mode 100644
- index c753491..310d08f
- --- a/contrib/seeds/generate-seeds.py
- +++ b/contrib/seeds/generate-seeds.py
- @@ -120,7 +120,7 @@ def main():
- g.write('#ifndef BITCOIN_CHAINPARAMSSEEDS_H\n')
- g.write('#define BITCOIN_CHAINPARAMSSEEDS_H\n')
- g.write('/**\n')
- - g.write(' * List of fixed seed nodes for the litecoin network\n')
- + g.write(' * List of fixed seed nodes for the litecoincash network\n')
- g.write(' * AUTOGENERATED by contrib/seeds/generate-seeds.py\n')
- g.write(' *\n')
- g.write(' * Each line contains a 16-byte IPv6 address and a port.\n')
- diff --git a/contrib/seeds/makeseeds.py b/contrib/seeds/makeseeds.py
- old mode 100755
- new mode 100644
- index 940d1e2..ecae116
- --- a/contrib/seeds/makeseeds.py
- +++ b/contrib/seeds/makeseeds.py
- @@ -30,7 +30,7 @@ import collections
- PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$")
- PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$")
- PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$")
- -PATTERN_AGENT = re.compile(r"^(/Satoshi:0.13.(0|1|2|99)/|/LitecoinCore:0.13.(0|1|2|99)/|/LitecoinCore:0.14.(0|1|2|99)/|/LitecoinCore:0.15.(0|1|2|99)/)$")
- +PATTERN_AGENT = re.compile(r"^(/Satoshi:0.13.(0|1|2|99)/|/LitecoinCashCore:0.13.(0|1|2|99)/|/LitecoinCashCore:0.14.(0|1|2|99)/)$")
- def parseline(line):
- sline = line.split()
- diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt
- index c96ee49..d0fab49 100644
- --- a/contrib/seeds/nodes_main.txt
- +++ b/contrib/seeds/nodes_main.txt
- @@ -1,325 +1,5 @@
- -5.19.171.173:10333
- -5.39.64.7:9333
- -5.39.174.116:9333
- -5.45.69.13:9333
- -5.70.60.59:9333
- -5.83.128.199:9333
- -5.164.223.102:9333
- -5.255.86.7:9333
- -14.152.121.45:9333
- -14.162.208.157:9333
- -23.89.193.201:9333
- -23.92.221.66:9333
- -23.111.173.210:9333
- -23.227.204.78:9333
- -23.249.72.123:9333
- -24.32.201.82:9333
- -24.42.207.95:9333
- -24.113.234.227:9333
- -24.220.69.242:9333
- -31.220.7.131:9333
- -34.193.68.10:9333
- -35.194.152.236:33661
- -35.198.168.198:9333
- -36.249.108.60:9333
- -37.61.209.144:9333
- -37.97.181.86:9333
- -37.120.161.147:9333
- -37.148.195.230:9333
- -37.157.183.16:9333
- -37.221.209.222:9333
- -38.27.99.44:9333
- -38.108.92.49:9333
- -45.77.131.4:9333
- -45.77.248.13:9333
- -46.21.146.245:9333
- -46.28.201.68:9333
- -46.32.50.98:9333
- -46.37.191.113:9333
- -46.38.56.110:9333
- -46.229.168.201:9333
- -46.238.238.176:9333
- -46.254.240.86:10333
- -47.54.207.91:9333
- -47.55.95.227:9333
- -47.74.228.154:9333
- -47.89.48.243:9333
- -47.93.232.59:9333
- -47.187.1.83:9333
- -49.228.206.9:9333
- -50.63.166.27:9333
- -52.50.244.44:9333
- -52.229.171.108:9333
- -54.153.120.32:9333
- -54.166.208.190:9333
- -60.40.43.189:9333
- -60.191.106.148:9333
- -62.152.54.44:9333
- -62.152.58.16:9679
- -62.212.141.33:9333
- -63.141.246.42:9333
- -63.224.55.76:9333
- -64.34.231.140:9333
- -65.44.118.194:9333
- -65.189.240.126:9333
- -66.187.65.6:9333
- -66.196.5.33:9333
- -67.6.226.221:9333
- -68.97.201.76:9333
- -68.102.158.172:9333
- -68.114.233.44:9333
- -68.171.16.250:9333
- -68.198.36.180:9333
- -69.27.173.227:10333
- -69.112.110.247:9333
- -69.172.169.188:9333
- -70.63.170.86:9333
- -70.95.219.136:9333
- -70.118.197.69:9333
- -70.124.168.12:9333
- -71.120.16.218:9333
- -72.185.120.29:9333
- -72.234.251.203:9333
- -74.66.93.22:9333
- -74.80.235.180:10333
- -74.208.221.224:9333
- -76.12.247.45:9333
- -76.107.8.67:9333
- -77.37.156.166:9333
- -77.90.195.67:9333
- -77.110.11.52:9333
- -78.129.241.145:9333
- -79.135.200.27:9333
- -79.157.88.48:9333
- -80.83.191.199:9333
- -80.101.93.34:9333
- -80.122.43.78:9333
- -80.209.234.173:9333
- -80.211.132.197:9333
- -80.218.108.14:9333
- -81.24.101.140:9333
- -81.27.96.37:9333
- -81.94.197.250:9333
- -81.111.118.56:9333
- -82.202.162.5:9333
- -83.162.196.192:9333
- -83.183.110.251:9333
- -83.212.97.34:9333
- -84.85.102.113:9333
- -84.215.80.43:9333
- -84.234.52.190:37700
- -85.21.144.226:9333
- -85.143.137.206:9333
- -85.145.248.184:9333
- -85.194.238.130:9333
- -85.195.242.52:9333
- -85.214.68.122:9333
- -85.245.167.246:9333
- -86.2.87.19:9333
- -86.166.234.4:9333
- -87.79.94.221:9333
- -87.236.27.155:9333
- -87.249.207.89:9333
- -88.99.184.7:9333
- -88.191.51.7:9333
- -88.191.247.11:9333
- -88.202.202.221:9333
- -88.208.3.82:9333
- -89.22.104.48:9333
- -89.179.153.171:9333
- -89.212.75.6:9333
- -89.221.215.56:9333
- -89.221.241.44:9333
- -89.238.77.69:9333
- -91.109.112.90:9333
- -91.109.112.94:9333
- -91.126.118.164:9333
- -91.195.42.134:9333
- -91.197.44.43:9333
- -91.227.47.247:9333
- -91.228.155.63:9333
- -91.240.142.228:9333
- -92.63.88.125:9333
- -92.107.160.77:9333
- -92.222.180.15:9333
- -93.100.51.48:9333
- -93.104.210.112:9333
- -94.156.174.65:9333
- -94.210.62.73:9333
- -94.242.232.92:9333
- -94.254.21.81:9333
- -95.79.102.209:10333
- -95.154.90.99:9333
- -95.174.101.14:9333
- -95.211.136.86:9333
- -95.211.189.3:9333
- -95.213.137.3:9333
- -95.213.182.182:9333
- -96.19.28.91:9333
- -96.27.8.242:9333
- -97.91.224.251:9333
- -98.198.104.57:9333
- -99.69.17.146:9333
- -101.100.141.69:9333
- -103.56.136.105:9333
- -103.82.56.25:9333
- -103.203.50.58:9333
- -103.218.3.122:9333
- -103.242.66.36:3880
- -104.35.96.255:9333
- -104.219.251.145:9333
- -104.238.198.165:9333
- -104.239.230.131:28001
- -107.155.120.131:9333
- -107.180.69.235:9333
- -107.183.37.154:9333
- -108.170.26.210:11333
- -108.222.149.83:9333
- -109.75.172.40:9333
- -109.88.85.177:9333
- -109.111.178.181:10333
- -109.172.77.204:9333
- -109.195.179.63:9333
- -109.236.88.229:9333
- -110.4.40.147:9333
- -113.105.139.42:9333
- -116.62.224.23:15896
- -118.163.120.179:9333
- -118.163.122.208:9333
- -119.9.116.68:9333
- -119.15.100.120:9333
- -119.28.12.152:9333
- -119.28.177.66:9333
- -119.205.234.81:9333
- -120.92.117.37:10001
- -121.54.175.90:10333
- -121.54.175.191:10333
- -134.119.221.115:9333
- -136.30.44.86:9333
- -136.144.155.115:9333
- -138.197.156.129:9333
- -139.199.90.223:9333
- -143.89.121.207:9333
- -144.76.220.17:9002
- -147.229.13.210:9333
- -148.66.58.194:9333
- -152.186.36.86:9333
- -158.129.212.236:9333
- -158.129.212.251:9333
- -159.203.110.137:9333
- -159.253.21.46:9333
- -162.213.252.46:9333
- -166.70.94.106:9333
- -167.88.15.89:6001
- -168.235.81.143:9333
- -169.44.34.88:9333
- -169.57.145.101:9333
- -171.25.221.40:9333
- -172.104.104.203:9333
- -173.32.12.108:9333
- -173.51.177.2:9333
- -173.71.68.101:9333
- -173.80.190.86:9333
- -173.209.44.34:9333
- -173.209.53.114:9333
- -173.249.8.133:9333
- -173.255.204.124:9333
- -174.97.240.26:9333
- -174.117.242.205:9333
- -176.99.7.253:9333
- -176.102.192.8:9333
- -176.126.167.10:9333
- -176.221.43.121:9333
- -178.12.118.128:9333
- -178.15.158.237:9333
- -178.20.55.234:9333
- -178.155.51.54:9333
- -178.238.236.130:10333
- -182.255.61.202:28374
- -184.61.213.5:9333
- -184.70.33.190:9333
- -184.70.254.238:9333
- -184.95.48.202:9333
- -185.8.165.150:10333
- -185.15.92.18:10993
- -185.21.223.231:9333
- -185.25.120.91:9333
- -185.35.137.50:9333
- -185.50.213.124:9333
- -185.56.82.26:9333
- -185.64.104.2:9333
- -185.86.83.53:9333
- -185.101.218.140:9333
- -185.103.243.133:9333
- -185.127.17.125:9333
- -185.133.40.200:8234
- -185.141.24.127:9333
- -185.141.24.249:9333
- -185.148.162.35:10333
- -185.153.198.231:9333
- -185.154.15.191:9333
- -185.160.208.122:9333
- -185.176.141.11:9333
- -185.181.11.226:9333
- -185.183.161.35:9333
- -185.194.140.155:9333
- -185.220.33.46:9333
- -188.42.59.116:9333
- -188.72.214.6:9333
- -188.126.60.51:9333
- -188.138.33.33:9333
- -188.168.81.56:9333
- -188.172.155.81:9333
- -188.214.30.216:9333
- -188.241.58.79:9333
- -189.38.88.105:9333
- -190.117.133.172:9333
- -191.101.236.222:9333
- -192.111.152.58:9333
- -192.162.100.156:9333
- -192.187.116.245:9333
- -193.23.181.135:9333
- -193.106.30.173:9333
- -194.44.136.178:9333
- -194.63.143.197:9333
- -194.79.8.37:10333
- -194.88.106.40:9333
- -194.190.93.235:10333
- -195.68.159.181:9333
- -195.154.235.93:9333
- -195.169.138.2:9333
- -196.38.233.130:10333
- -198.40.48.22:9333
- -198.48.216.49:9933
- -198.98.48.192:9333
- -199.204.211.87:9333
- -203.60.2.67:9333
- -203.98.175.26:9333
- -203.98.175.43:9333
- -203.218.9.132:9333
- -205.185.120.58:9333
- -207.254.60.12:9333
- -209.41.186.78:9333
- -209.108.206.229:9333
- -209.133.221.159:9333
- -209.147.127.107:9333
- -210.183.15.227:9333
- -212.24.96.197:9333
- -212.47.252.13:9333
- -212.51.144.42:9333
- -213.113.232.47:9333
- -213.114.244.105:9333
- -213.141.154.201:9333
- -213.143.107.143:9333
- -213.168.13.151:9333
- -217.20.130.72:9333
- -217.103.32.213:9333
- -217.112.251.21:9333
- -217.122.192.92:9333
- -217.148.94.54:9333
- -219.88.232.127:9333
- -219.117.248.55:9333
- -220.194.43.237:9333
- -221.229.166.25:9333
- -222.236.44.46:9333
- -222.239.11.131:9333
- +46.43.9.237:62458
- +45.63.89.33:62458
- +46.101.118.113:62458
- +144.202.8.82:62458
- +178.62.215.167:62458
- \ No newline at end of file
- diff --git a/contrib/seeds/nodes_test.txt b/contrib/seeds/nodes_test.txt
- index 02b36fc..e69de29 100644
- --- a/contrib/seeds/nodes_test.txt
- +++ b/contrib/seeds/nodes_test.txt
- @@ -1,20 +0,0 @@
- -5.9.31.67:19002
- -23.239.30.164:19335
- -35.159.10.86:19333
- -45.76.92.84:19335
- -52.221.228.214:19335
- -80.237.240.102:19335
- -81.169.237.132:19335
- -85.143.254.151:19335
- -85.214.99.201:19335
- -104.131.161.171:19335
- -104.243.38.34:19335
- -118.89.159.229:19335
- -138.201.195.202:19335
- -139.59.38.132:9898
- -162.213.252.66:19335
- -173.209.42.7:19335
- -188.42.59.116:19335
- -195.142.111.77:6753
- -198.58.102.18:19335
- -218.244.146.111:19335
- diff --git a/contrib/spendfrom/spendfrom.py b/contrib/spendfrom/spendfrom.py
- old mode 100755
- new mode 100644
- index e1b5e9c..03a4339
- --- a/contrib/spendfrom/spendfrom.py
- +++ b/contrib/spendfrom/spendfrom.py
- @@ -36,15 +36,15 @@ def check_json_precision():
- raise RuntimeError("JSON encode/decode loses precision")
- def determine_db_dir():
- - """Return the default location of the litecoin data directory"""
- + """Return the default location of the litecoincash data directory"""
- if platform.system() == "Darwin":
- - return os.path.expanduser("~/Library/Application Support/Litecoin/")
- + return os.path.expanduser("~/Library/Application Support/LitecoinCash/")
- elif platform.system() == "Windows":
- - return os.path.join(os.environ['APPDATA'], "Litecoin")
- - return os.path.expanduser("~/.litecoin")
- + return os.path.join(os.environ['APPDATA'], "LitecoinCash")
- + return os.path.expanduser("~/.litecoincash")
- def read_bitcoin_config(dbdir):
- - """Read the litecoin.conf file from dbdir, returns dictionary of settings"""
- + """Read the litecoincash.conf file from dbdir, returns dictionary of settings"""
- from ConfigParser import SafeConfigParser
- class FakeSecHead(object):
- @@ -62,15 +62,15 @@ def read_bitcoin_config(dbdir):
- return s
- config_parser = SafeConfigParser()
- - config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "litecoin.conf"))))
- + config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "litecoincash.conf"))))
- return dict(config_parser.items("all"))
- def connect_JSON(config):
- - """Connect to a litecoin JSON-RPC server"""
- + """Connect to a litecoincash JSON-RPC server"""
- testnet = config.get('testnet', '0')
- testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False
- if not 'rpcport' in config:
- - config['rpcport'] = 19332 if testnet else 9332
- + config['rpcport'] = 62455 if testnet else 62457
- connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport'])
- try:
- result = ServiceProxy(connect)
- @@ -224,15 +224,15 @@ def main():
- parser = optparse.OptionParser(usage="%prog [options]")
- parser.add_option("--from", dest="fromaddresses", default=None,
- - help="addresses to get litecoins from")
- + help="addresses to get LCC from")
- parser.add_option("--to", dest="to", default=None,
- - help="address to get send litecoins to")
- + help="address to get send coins to")
- parser.add_option("--amount", dest="amount", default=None,
- help="amount to send")
- parser.add_option("--fee", dest="fee", default="0.0",
- help="fee to include")
- parser.add_option("--datadir", dest="datadir", default=determine_db_dir(),
- - help="location of litecoin.conf file with RPC username/password (default: %default)")
- + help="location of litecoincash.conf file with RPC username/password (default: %default)")
- parser.add_option("--testnet", dest="testnet", default=False, action="store_true",
- help="Use the test network")
- parser.add_option("--dry_run", dest="dry_run", default=False, action="store_true",
- diff --git a/contrib/testgen/README.md b/contrib/testgen/README.md
- index 0858cdb..c565648 100644
- --- a/contrib/testgen/README.md
- +++ b/contrib/testgen/README.md
- @@ -1,6 +1,6 @@
- ### TestGen ###
- -Utilities to generate test vectors for the data-driven Litecoin tests.
- +Utilities to generate test vectors for the data-driven LitecoinCash tests.
- Usage:
- diff --git a/contrib/testgen/gen_base58_test_vectors.py b/contrib/testgen/gen_base58_test_vectors.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/tidy_datadir.sh b/contrib/tidy_datadir.sh
- old mode 100755
- new mode 100644
- index a802b54..a1a9e79
- --- a/contrib/tidy_datadir.sh
- +++ b/contrib/tidy_datadir.sh
- @@ -7,7 +7,7 @@ if [ -d "$1" ]; then
- cd "$1"
- else
- echo "Usage: $0 <datadir>" >&2
- - echo "Removes obsolete Litecoin database files" >&2
- + echo "Removes obsolete LitecoinCash database files" >&2
- exit 1
- fi
- @@ -19,22 +19,22 @@ if [ -f wallet.dat -a -f peers.dat -a -f chainstate/CURRENT -a -f blocks/index/C
- case $LEVEL in
- 0)
- - echo "Error: no Litecoin datadir detected."
- + echo "Error: no LitecoinCash datadir detected."
- exit 1
- ;;
- 1)
- - echo "Detected old Litecoin datadir (before 0.7)."
- + echo "Detected old LitecoinCash datadir (before 0.7)."
- echo "Nothing to do."
- exit 0
- ;;
- 2)
- - echo "Detected Litecoin 0.7 datadir."
- + echo "Detected LitecoinCash 0.7 datadir."
- ;;
- 3)
- - echo "Detected Litecoin pre-0.8 datadir."
- + echo "Detected LitecoinCash pre-0.8 datadir."
- ;;
- 4)
- - echo "Detected Litecoin 0.8 datadir."
- + echo "Detected LitecoinCash 0.8 datadir."
- ;;
- esac
- diff --git a/contrib/verify-commits/gpg.sh b/contrib/verify-commits/gpg.sh
- old mode 100755
- new mode 100644
- index abd8f5f..b01e2a6
- --- a/contrib/verify-commits/gpg.sh
- +++ b/contrib/verify-commits/gpg.sh
- @@ -46,11 +46,6 @@ for LINE in $(echo "$GPG_RES"); do
- REVSIG=true
- GOODREVSIG="[GNUPG:] GOODSIG ${LINE#* * *}"
- ;;
- - "[GNUPG:] EXPKEYSIG "*)
- - [ "$BITCOIN_VERIFY_COMMITS_ALLOW_REVSIG" != 1 ] && exit 1
- - REVSIG=true
- - GOODREVSIG="[GNUPG:] GOODSIG ${LINE#* * *}"
- - ;;
- esac
- done
- if ! $VALID; then
- diff --git a/contrib/verify-commits/pre-push-hook.sh b/contrib/verify-commits/pre-push-hook.sh
- old mode 100755
- new mode 100644
- diff --git a/contrib/verify-commits/verify-commits.sh b/contrib/verify-commits/verify-commits.sh
- old mode 100755
- new mode 100644
- diff --git a/contrib/verifybinaries/verify.sh b/contrib/verifybinaries/verify.sh
- old mode 100755
- new mode 100644
- diff --git a/contrib/windeploy/detached-sig-create.sh b/contrib/windeploy/detached-sig-create.sh
- old mode 100755
- new mode 100644
- index 76b6747..bf4978d
- --- a/contrib/windeploy/detached-sig-create.sh
- +++ b/contrib/windeploy/detached-sig-create.sh
- @@ -18,7 +18,7 @@ SRCDIR=unsigned
- WORKDIR=./.tmp
- OUTDIR="${WORKDIR}/out"
- OUTSUBDIR="${OUTDIR}/win"
- -TIMESERVER=http://timestamp.digicert.com
- +TIMESERVER=http://timestamp.comodoca.com
- CERTFILE="win-codesign.cert"
- mkdir -p "${OUTSUBDIR}"
- diff --git a/contrib/windeploy/win-codesign.cert b/contrib/windeploy/win-codesign.cert
- index 363c132..200b30a 100644
- --- a/contrib/windeploy/win-codesign.cert
- +++ b/contrib/windeploy/win-codesign.cert
- @@ -1,35 +1,99 @@
- -Bag Attributes
- - friendlyName: Litecoin Foundation LTD.'s DigiCert Inc ID
- - localKeyID: 2F AA 3A 86 85 98 1A 53 D5 23 F0 2E A0 22 CC 51 21 6D 78 B0
- -subject=/C=SG/L=Singapore/O=Litecoin Foundation LTD./CN=Litecoin Foundation LTD.
- -issuer=/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Assured ID Code Signing CA
- -----BEGIN CERTIFICATE-----
- -MIIFKjCCBBKgAwIBAgIQDvRXzQ2H3xYGUBDUDBeH/TANBgkqhkiG9w0BAQsFADBy
- -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
- -d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
- -SUQgQ29kZSBTaWduaW5nIENBMB4XDTE3MDYxNzAwMDAwMFoXDTIwMDYyNDEyMDAw
- -MFowZzELMAkGA1UEBhMCU0cxEjAQBgNVBAcTCVNpbmdhcG9yZTEhMB8GA1UEChMY
- -TGl0ZWNvaW4gRm91bmRhdGlvbiBMVEQuMSEwHwYDVQQDExhMaXRlY29pbiBGb3Vu
- -ZGF0aW9uIExURC4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDH88DV
- -oSbF9UaPRUzhVcACIl+ybyhBzfyUIBq8Lc8xng4F/enX7QTOZTMovTzlV3fDWgQy
- -S1ZezHOWWI6wIApDeyQyVQxW0TgkT4CKxL52t1GS1Qcf3D4OJEHAsgBGIqW7ly7w
- -VvqOfgzOJcCu208AMCHY2znDjR7mFOXX2st9jsIbkVwYsl1qDTYkFrTNZ3qWrx6E
- -OQc2sSMRYyNlzEJn5aJD1oQZThdVgNJxKY7Iz9U/O2VsfO7eKyBHiUEqc5hwAL8E
- -7W1PD60pX92WNlW3eDbw2PUTfL5kbli0z5y0/9G72eC2s4Li9ITur/+oU5tF3MzD
- -MPsAGA0NySk92rtTAgMBAAGjggHFMIIBwTAfBgNVHSMEGDAWgBRaxLl7Kgqjpepx
- -A8Bg+S32ZXUOWDAdBgNVHQ4EFgQUeL9lXRPJvfsewWFdyIKSljDXbkQwDgYDVR0P
- -AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGA1UdHwRwMG4wNaAzoDGG
- -L2h0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
- -MDWgM6Axhi9odHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLWNz
- -LWcxLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG/WwDATAqMCgGCCsGAQUFBwIBFhxo
- -dHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAgGBmeBDAEEATCBhAYIKwYBBQUH
- -AQEEeDB2MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTgYI
- -KwYBBQUHMAKGQmh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFNI
- -QTJBc3N1cmVkSURDb2RlU2lnbmluZ0NBLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqG
- -SIb3DQEBCwUAA4IBAQCGZLBV09pjRFXivkrOcSD/DoUb7fEs72qNSqLoQ4dgB1v8
- -9VBbE//+RwczRCZXNJAxSfxTUGa+qX6CyCRJImyc6K9tMlZp6PElwNYPCaweSFPA
- -uqrjoCMDSDUPeS4LbN+khFZSny3D70W7ybqZmlKFQyHMgSWt3qkxbGQNRb0EG6nI
- -e9mWKyISqtjRkwgvlmCD/7hiL/XBUVLo8rAZewA0s+jPFVVmQ63XngirrnAFw5+9
- -6sU1i2pHWyKmkGnpnKyDstggCvyIpW3k+fF6+Mj2QWhBjWJ3sbzug5j+Wg8WxMAP
- -gjrOxRJT1mS7UZWBHNc4rg5x1+6CNhBJZ+uaBNId
- ------END CERTIFICATE-----
- \ No newline at end of file
- +MIIFTTCCBDWgAwIBAgIRALlW05RLwG2hMQMX5d/o5J8wDQYJKoZIhvcNAQELBQAw
- +fTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
- +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxIzAhBgNV
- +BAMTGkNPTU9ETyBSU0EgQ29kZSBTaWduaW5nIENBMB4XDTE2MDIwMzAwMDAwMFoX
- +DTE5MDMwNTIzNTk1OVowgbUxCzAJBgNVBAYTAlVTMQ4wDAYDVQQRDAU5ODEwNDEL
- +MAkGA1UECAwCV0ExEDAOBgNVBAcMB1NlYXR0bGUxEDAOBgNVBAkMB1N0ZSAzMDAx
- +FzAVBgNVBAkMDjcxIENvbHVtYmlhIFN0MSUwIwYDVQQKDBxUaGUgQml0Y29pbiBG
- +b3VuZGF0aW9uLCBJbmMuMSUwIwYDVQQDDBxUaGUgQml0Y29pbiBGb3VuZGF0aW9u
- +LCBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw37Vrv9Gbku0
- ++kuV0t89TuyxtAcmT7QE4GcwESKKjmkxfzD9a0qlhqk8GfQ+fw4DHNN+nLKNv7xB
- +bk6aS7J2v2DcXkOjrP99P9jqgTkp7MC04VtG3OqVRGB+gum0pptRovYZUQXIdkY7
- +GJOok/NDagwKiiUe2V2meZ7UctsZNvYeilQdTgKIIhrMB9NowCOhT8ocVL4Ki55/
- +l7hukJn3fueCM3fHTwY2/1gaGsOHoCkFRsD7vokjAVpiY+8rUgvHjb0gxgojiVGd
- +6a6/F5XJwKJacvUyN4Hfc2K5lRMQjTTmo4aWNWIa0iJ3TK9BHpdSLJBqerMPvmnM
- +kkapS+ZTNQIDAQABo4IBjTCCAYkwHwYDVR0jBBgwFoAUKZFg/4pN+uv5pmq4z/nm
- +S71JzhIwHQYDVR0OBBYEFONpQ+cV82URVe+V8G57377KxxexMA4GA1UdDwEB/wQE
- +AwIHgDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMBEGCWCGSAGG
- ++EIBAQQEAwIEEDBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgEDAjArMCkGCCsGAQUF
- +BwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8ubmV0L0NQUzBDBgNVHR8EPDA6MDig
- +NqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9SU0FDb2RlU2lnbmlu
- +Z0NBLmNybDB0BggrBgEFBQcBAQRoMGYwPgYIKwYBBQUHMAKGMmh0dHA6Ly9jcnQu
- +Y29tb2RvY2EuY29tL0NPTU9ET1JTQUNvZGVTaWduaW5nQ0EuY3J0MCQGCCsGAQUF
- +BzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQELBQADggEB
- +AGnBSi9K/9rgTAyKFKrfGWSfNOwAghmsnsvpZSQ7QyoGWBFKSgCs/70kErl18oHA
- +g7Y8loQB1yukZmJaCa3OvGud7smn45TCh0TMf4EpP20Wxf4rMQTxwAatasHL3+vi
- +I+Nl5bsRZ09kWjvayqLII5upjS/yq0JfpmyGl5k2C/fIpztq0iOLvqWlXcL4+51r
- +cMUAfX6E6EaZQm//ikp+w2+7MEXTKguOuV3gwsrTy0DsvkZl4YDgx/FA4ImzXopv
- +d+3KJPLvO+OSBqUD3JPwXHnuJqGAbLBFyyCa/feGUjLlR8cxcNWLWdp4qxtoIUPG
- +3wTsC9YgrglS0F7FKMXlNRY=
- +-----END CERTIFICATE-----
- +-----BEGIN CERTIFICATE-----
- +MIIF4DCCA8igAwIBAgIQLnyHzA6TSlL+lP0ct800rzANBgkqhkiG9w0BAQwFADCB
- +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
- +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
- +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTMwNTA5
- +MDAwMDAwWhcNMjgwNTA4MjM1OTU5WjB9MQswCQYDVQQGEwJHQjEbMBkGA1UECBMS
- +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
- +T01PRE8gQ0EgTGltaXRlZDEjMCEGA1UEAxMaQ09NT0RPIFJTQSBDb2RlIFNpZ25p
- +bmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmmJBjd5E0f4rR
- +3elnMRHrzB79MR2zuWJXP5O8W+OfHiQyESdrvFGRp8+eniWzX4GoGA8dHiAwDvth
- +e4YJs+P9omidHCydv3Lj5HWg5TUjjsmK7hoMZMfYQqF7tVIDSzqwjiNLS2PgIpQ3
- +e9V5kAoUGFEs5v7BEvAcP2FhCoyi3PbDMKrNKBh1SMF5WgjNu4xVjPfUdpA6M0ZQ
- +c5hc9IVKaw+A3V7Wvf2pL8Al9fl4141fEMJEVTyQPDFGy3CuB6kK46/BAW+QGiPi
- +XzjbxghdR7ODQfAuADcUuRKqeZJSzYcPe9hiKaR+ML0btYxytEjy4+gh+V5MYnmL
- +Agaff9ULAgMBAAGjggFRMIIBTTAfBgNVHSMEGDAWgBS7r34CPfqm8TyEjq3uOJjs
- +2TIy1DAdBgNVHQ4EFgQUKZFg/4pN+uv5pmq4z/nmS71JzhIwDgYDVR0PAQH/BAQD
- +AgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYD
- +VR0gBAowCDAGBgRVHSAAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9jcmwuY29t
- +b2RvY2EuY29tL0NPTU9ET1JTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHEG
- +CCsGAQUFBwEBBGUwYzA7BggrBgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5j
- +b20vQ09NT0RPUlNBQWRkVHJ1c3RDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9v
- +Y3NwLmNvbW9kb2NhLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAAj8COcPu+Mo7id4M
- +bU2x8U6ST6/COCwEzMVjEasJY6+rotcCP8xvGcM91hoIlP8l2KmIpysQGuCbsQci
- +GlEcOtTh6Qm/5iR0rx57FjFuI+9UUS1SAuJ1CAVM8bdR4VEAxof2bO4QRHZXavHf
- +WGshqknUfDdOvf+2dVRAGDZXZxHNTwLk/vPa/HUX2+y392UJI0kfQ1eD6n4gd2HI
- +TfK7ZU2o94VFB696aSdlkClAi997OlE5jKgfcHmtbUIgos8MbAOMTM1zB5TnWo46
- +BLqioXwfy2M6FafUFRunUkcyqfS/ZEfRqh9TTjIwc8Jvt3iCnVz/RrtrIh2IC/gb
- +qjSm/Iz13X9ljIwxVzHQNuxHoc/Li6jvHBhYxQZ3ykubUa9MCEp6j+KjUuKOjswm
- +5LLY5TjCqO3GgZw1a6lYYUoKl7RLQrZVnb6Z53BtWfhtKgx/GWBfDJqIbDCsUgmQ
- +Fhv/K53b0CDKieoofjKOGd97SDMe12X4rsn4gxSTdn1k0I7OvjV9/3IxTZ+evR5s
- +L6iPDAZQ+4wns3bJ9ObXwzTijIchhmH+v1V04SF3AwpobLvkyanmz1kl63zsRQ55
- +ZmjoIs2475iFTZYRPAmK0H+8KCgT+2rKVI2SXM3CZZgGns5IW9S1N5NGQXwH3c/6
- +Q++6Z2H/fUnguzB9XIDj5hY5S6c=
- +-----END CERTIFICATE-----
- +-----BEGIN CERTIFICATE-----
- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB
- +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
- +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
- +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5
- +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
- +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
- +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh
- +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR
- +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X
- +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC
- +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV
- +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf
- +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z
- ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w
- +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah
- +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC
- +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf
- +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq
- +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
- +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB
- +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl
- +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM
- +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV
- +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna
- +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ
- +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK
- +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke
- +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL
- +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb
- +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl
- +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB
- +NVOFBkpdn627G190
- +-----END CERTIFICATE-----
- diff --git a/contrib/zmq/zmq_sub.py b/contrib/zmq/zmq_sub.py
- old mode 100755
- new mode 100644
- diff --git a/contrib/zmq/zmq_sub3.4.py b/contrib/zmq/zmq_sub3.4.py
- old mode 100755
- new mode 100644
- diff --git a/depends/README.md b/depends/README.md
- index 35814ca..08dd815 100644
- --- a/depends/README.md
- +++ b/depends/README.md
- @@ -12,9 +12,9 @@ For example:
- make HOST=x86_64-w64-mingw32 -j4
- -A prefix will be generated that's suitable for plugging into Litecoin's
- +A prefix will be generated that's suitable for plugging into LitecoinCash's
- configure. In the above example, a dir named x86_64-w64-mingw32 will be
- -created. To use it for Litecoin:
- +created. To use it for LitecoinCash:
- ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32
- @@ -43,7 +43,7 @@ The following can be set when running make: make FOO=bar
- BUILD_ID_SALT: Optional salt to use when generating build package ids
- If some packages are not built, for example `make NO_WALLET=1`, the appropriate
- -options will be passed to litecoin's configure. In this case, `--disable-wallet`.
- +options will be passed to litecoincash's configure. In this case, `--disable-wallet`.
- Additional targets:
- diff --git a/depends/config.guess b/depends/config.guess
- old mode 100755
- new mode 100644
- diff --git a/depends/config.sub b/depends/config.sub
- old mode 100755
- new mode 100644
- diff --git a/doc/README.md b/doc/README.md
- index 7f001e2..439f27f 100644
- --- a/doc/README.md
- +++ b/doc/README.md
- @@ -1,41 +1,41 @@
- -Litecoin Core
- +LitecoinCash Core
- =============
- Setup
- ---------------------
- -Litecoin Core is the original Litecoin client and it builds the backbone of the network. It downloads and, by default, stores the entire history of Litecoin transactions (which is currently more than 7 GBs); depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more.
- +LitecoinCash Core is the original LitecoinCash client and it builds the backbone of the network. It downloads and, by default, stores the entire history of LitecoinCash transactions (which is currently more than 7 GBs); depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more.
- -To download Litecoin Core, visit [litecoin.org](https://litecoin.org).
- +To download LitecoinCash Core, visit [litecoincash.org](https://litecoincash.org).
- Running
- ---------------------
- -The following are some helpful notes on how to run Litecoin on your native platform.
- +The following are some helpful notes on how to run LitecoinCash on your native platform.
- ### Unix
- Unpack the files into a directory and run:
- -- `bin/litecoin-qt` (GUI) or
- -- `bin/litecoind` (headless)
- +- `bin/litecoincash-qt` (GUI) or
- +- `bin/litecoincashd` (headless)
- ### Windows
- -Unpack the files into a directory, and then run litecoin-qt.exe.
- +Unpack the files into a directory, and then run litecoincash-qt.exe.
- ### OS X
- -Drag Litecoin-Core to your applications folder, and then run Litecoin-Core.
- +Drag LitecoinCash-Core to your applications folder, and then run LitecoinCash-Core.
- ### Need Help?
- -* See the documentation at the [Litecoin Wiki](https://litecoin.info/)
- +* See the documentation at the [LitecoinCash Wiki](https://litecoincash.info/)
- for help and more information.
- -* Ask for help on [#litecoin](http://webchat.freenode.net?channels=litecoin) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net?channels=litecoin).
- -* Ask for help on the [LitecoinTalk](https://litecointalk.io/) forums.
- +* Ask for help on [#litecoincash](http://webchat.freenode.net?channels=litecoincash) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net?channels=litecoincash).
- +* Ask for help on the [LitecoinCashTalk](https://litecoincashtalk.io/) forums.
- Building
- ---------------------
- -The following are developer notes on how to build Litecoin on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.
- +The following are developer notes on how to build LitecoinCash on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.
- - [OS X Build Notes](build-osx.md)
- - [Unix Build Notes](build-unix.md)
- @@ -45,12 +45,12 @@ The following are developer notes on how to build Litecoin on your native platfo
- Development
- ---------------------
- -The Litecoin repo's [root README](/README.md) contains relevant information on the development process and automated testing.
- +The LitecoinCash repo's [root README](/README.md) contains relevant information on the development process and automated testing.
- - [Developer Notes](developer-notes.md)
- - [Release Notes](release-notes.md)
- - [Release Process](release-process.md)
- -- [Source Code Documentation (External Link)](https://dev.visucore.com/litecoin/doxygen/)
- +- [Source Code Documentation (External Link)](https://dev.visucore.com/litecoincash/doxygen/)
- - [Translation Process](translation_process.md)
- - [Translation Strings Policy](translation_strings_policy.md)
- - [Travis CI](travis-ci.md)
- @@ -61,8 +61,8 @@ The Litecoin repo's [root README](/README.md) contains relevant information on t
- - [Benchmarking](benchmarking.md)
- ### Resources
- -* Discuss on the [LitecoinTalk](https://litecointalk.io/) forums.
- -* Discuss general Litecoin development on #litecoin-dev on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net/?channels=litecoin-dev).
- +* Discuss on the [LitecoinCashTalk](https://litecoincashtalk.io/) forums.
- +* Discuss general LitecoinCash development on #litecoincash-dev on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net/?channels=litecoincash-dev).
- ### Miscellaneous
- - [Assets Attribution](assets-attribution.md)
- diff --git a/doc/README_osx.md b/doc/README_osx.md
- index e2e2ca8..2f0ccd7 100644
- --- a/doc/README_osx.md
- +++ b/doc/README_osx.md
- @@ -92,6 +92,6 @@ build process to remain somewhat deterministic. Here's how it works:
- that have been previously (deterministically) built in order to create a
- final dmg.
- - The Apple keyholder uses this unsigned app to create a detached signature,
- - using the script that is also included there. Detached signatures are available from this [repository](https://github.com/litecoin-project/litecoin-detached-sigs).
- + using the script that is also included there. Detached signatures are available from this [repository](https://github.com/litecoincash-project/litecoincash-detached-sigs).
- - Builders feed the unsigned app + detached signature back into Gitian. It
- uses the pre-built tools to recombine the pieces into a deterministic dmg.
- diff --git a/doc/README_windows.txt b/doc/README_windows.txt
- index d388595..02c232f 100644
- --- a/doc/README_windows.txt
- +++ b/doc/README_windows.txt
- @@ -1,23 +1,23 @@
- -Litecoin Core
- -=============
- -
- -Intro
- ------
- -Litecoin is a free open source peer-to-peer electronic cash system that is
- -completely decentralized, without the need for a central server or trusted
- -parties. Users hold the crypto keys to their own money and transact directly
- -with each other, with the help of a P2P network to check for double-spending.
- -
- -
- -Setup
- ------
- -Unpack the files into a directory and run litecoin-qt.exe.
- -
- -Litecoin Core is the original Litecoin client and it builds the backbone of the network.
- -However, it downloads and stores the entire history of Litecoin transactions;
- -depending on the speed of your computer and network connection, the synchronization
- -process can take anywhere from a few hours to a day or more.
- -
- -See the litecoin wiki at:
- - https://litecoin.info/
- -for more help and information.
- +LitecoinCash Core
- +=============
- +
- +Intro
- +-----
- +LitecoinCash is a free open source peer-to-peer electronic cash system that is
- +completely decentralized, without the need for a central server or trusted
- +parties. Users hold the crypto keys to their own money and transact directly
- +with each other, with the help of a P2P network to check for double-spending.
- +
- +
- +Setup
- +-----
- +Unpack the files into a directory and run litecoincash-qt.exe.
- +
- +LitecoinCash Core is the original LitecoinCash client and it builds the backbone of the network.
- +However, it downloads and stores the entire history of LitecoinCash transactions;
- +depending on the speed of your computer and network connection, the synchronization
- +process can take anywhere from a few hours to a day or more.
- +
- +See the litecoincash wiki at:
- + https://litecoincash.info/
- +for more help and information.
- diff --git a/doc/REST-interface.md b/doc/REST-interface.md
- index 137e977..6efca12 100644
- --- a/doc/REST-interface.md
- +++ b/doc/REST-interface.md
- @@ -57,7 +57,7 @@ https://github.com/bitcoin/bips/blob/master/bip-0064.mediawiki
- Example:
- ```
- -$ curl localhost:19332/rest/getutxos/checkmempool/b2cdfd7b89def827ff8af7cd9bff7627ff72e5e8b0f71210f92ea7a4000c5d75-0.json 2>/dev/null | json_pp
- +$ curl localhost:62455/rest/getutxos/checkmempool/b2cdfd7b89def827ff8af7cd9bff7627ff72e5e8b0f71210f92ea7a4000c5d75-0.json 2>/dev/null | json_pp
- {
- "chainHeight" : 325347,
- "chaintipHash" : "00000000fb01a7f3745a717f8caebee056c484e6e0bfe4a9591c235bb70506fb",
- @@ -99,4 +99,4 @@ Only supports JSON as output format.
- Risks
- -------------
- -Running a web browser on the same node with a REST enabled litecoind can be a risk. Accessing prepared XSS websites could read out tx/block data of your node by placing links like `<script src="http://127.0.0.1:9332/rest/tx/1234567890.json">` which might break the nodes privacy.
- +Running a web browser on the same node with a REST enabled litecoincashd can be a risk. Accessing prepared XSS websites could read out tx/block data of your node by placing links like `<script src="http://127.0.0.1:62457/rest/tx/1234567890.json">` which might break the nodes privacy.
- diff --git a/doc/assets-attribution.md b/doc/assets-attribution.md
- index 0b8803a..f2c8a1d 100644
- --- a/doc/assets-attribution.md
- +++ b/doc/assets-attribution.md
- @@ -1 +1 @@
- -The list of assets used in the litecoin source and their attribution can now be found in [contrib/debian/copyright](../contrib/debian/copyright).
- +The list of assets used in the litecoincash source and their attribution can now be found in [contrib/debian/copyright](../contrib/debian/copyright).
- diff --git a/doc/benchmarking.md b/doc/benchmarking.md
- index 3e39653..839d5bd 100644
- --- a/doc/benchmarking.md
- +++ b/doc/benchmarking.md
- @@ -1,11 +1,11 @@
- Benchmarking
- ============
- -Litecoin Core has an internal benchmarking framework, with benchmarks
- +LitecoinCash Core has an internal benchmarking framework, with benchmarks
- for cryptographic algorithms such as SHA1, SHA256, SHA512 and RIPEMD160. As well as the rolling bloom filter.
- -After compiling litecoin-core, the benchmarks can be run with:
- -`src/bench/bench_litecoin`
- +After compiling litecoincash-core, the benchmarks can be run with:
- +`src/bench/bench_litecoincash`
- The output will look similar to:
- ```
- diff --git a/doc/build-openbsd.md b/doc/build-openbsd.md
- index 702d00f..7ed8562 100644
- --- a/doc/build-openbsd.md
- +++ b/doc/build-openbsd.md
- @@ -1,10 +1,10 @@
- OpenBSD build guide
- ======================
- -(updated for OpenBSD 6.2)
- +(updated for OpenBSD 6.1)
- -This guide describes how to build litecoind and command-line utilities on OpenBSD.
- +This guide describes how to build litecoincashd and command-line utilities on OpenBSD.
- -OpenBSD is most commonly used as a server OS, so this guide does not contain instructions for building the GUI.
- +As OpenBSD is most common as a server OS, we will not bother with the GUI.
- Preparation
- -------------
- @@ -12,39 +12,71 @@ Preparation
- Run the following as root to install the base dependencies for building:
- ```bash
- -pkg_add git gmake libevent libtool
- +pkg_add gmake libtool libevent
- pkg_add autoconf # (select highest version, e.g. 2.69)
- pkg_add automake # (select highest version, e.g. 1.15)
- -pkg_add python # (select highest version, e.g. 3.6)
- -pkg_add boost
- -
- -git clone https://github.com/litecoin-project/litecoin.git
- +pkg_add python # (select highest version, e.g. 3.5)
- ```
- -See [dependencies.md](dependencies.md) for a complete overview.
- +The default C++ compiler that comes with OpenBSD 5.9 is g++ 4.2. This version is old (from 2007), and is not able to compile the current version of LitecoinCash Core, primarily as it has no C++11 support, but even before there were issues. So here we will be installing a newer compiler.
- GCC
- -------
- -The default C++ compiler that comes with OpenBSD 6.2 is g++ 4.2.1. This version is old (from 2007), and is not able to compile the current version of Litecoin Core because it has no C++11 support. We'll install a newer version of GCC:
- +You can install a newer version of gcc with:
- ```bash
- - pkg_add g++
- - ```
- +pkg_add g++ # (select newest 4.x version, e.g. 4.9.3)
- +```
- +
- +This compiler will not overwrite the system compiler, it will be installed as `egcc` and `eg++` in `/usr/local/bin`.
- +
- +### Building boost
- +
- +Do not use `pkg_add boost`! The boost version installed thus is compiled using the `g++` compiler not `eg++`, which will result in a conflict between `/usr/local/lib/libestdc++.so.XX.0` and `/usr/lib/libstdc++.so.XX.0`, resulting in a test crash:
- +
- + test_litecoincash:/usr/lib/libstdc++.so.57.0: /usr/local/lib/libestdc++.so.17.0 : WARNING: symbol(_ZN11__gnu_debug17_S_debug_me ssagesE) size mismatch, relink your program
- + ...
- + Segmentation fault (core dumped)
- - This compiler will not overwrite the system compiler, it will be installed as `egcc` and `eg++` in `/usr/local/bin`.
- +This makes it necessary to build boost, or at least the parts used by LitecoinCash Core, manually:
- +
- +```
- +# Pick some path to install boost to, here we create a directory within the litecoincash directory
- +LITECOINCASH_ROOT=$(pwd)
- +BOOST_PREFIX="${LITECOINCASH_ROOT}/boost"
- +mkdir -p $BOOST_PREFIX
- +
- +# Fetch the source and verify that it is not tampered with
- +curl -o boost_1_64_0.tar.bz2 https://netcologne.dl.sourceforge.net/project/boost/boost/1.64.0/boost_1_64_0.tar.bz2
- +echo '7bcc5caace97baa948931d712ea5f37038dbb1c5d89b43ad4def4ed7cb6624582 boost_1_64_0.tar.bz2' | sha256 -c
- +# MUST output: (SHA256) boost_1_64_0.tar.bz2: OK
- +tar -xjf boost_1_64_0.tar.bz2
- +
- +# Boost 1.64 needs one small patch for OpenBSD
- +cd boost_1_64_0
- +# Also here: https://gist.githubusercontent.com/laanwj/bf359281dc319b8ff2e1/raw/92250de8404b97bb99d72ab898f4a8cb35ae1ea3/patch-boost_test_impl_execution_monitor_ipp.patch
- +patch -p0 < /usr/ports/devel/boost/patches/patch-boost_test_impl_execution_monitor_ipp
- +
- +# Build w/ minimum configuration necessary for litecoincash
- +echo 'using gcc : : eg++ : <cxxflags>"-fvisibility=hidden -fPIC" <linkflags>"" <archiver>"ar" <striper>"strip" <ranlib>"ranlib" <rc>"" : ;' > user-config.jam
- +config_opts="runtime-link=shared threadapi=pthread threading=multi link=static variant=release --layout=tagged --build-type=complete --user-config=user-config.jam -sNO_BZIP2=1"
- +./bootstrap.sh --without-icu --with-libraries=chrono,filesystem,program_options,system,thread,test
- +./b2 -d2 -j2 -d1 ${config_opts} --prefix=${BOOST_PREFIX} stage
- +./b2 -d0 -j4 ${config_opts} --prefix=${BOOST_PREFIX} install
- +```
- ### Building BerkeleyDB
- BerkeleyDB is only necessary for the wallet functionality. To skip this, pass `--disable-wallet` to `./configure`.
- -See "Berkeley DB" in [build-unix.md](build-unix.md#berkeley-db) for instructions on how to build BerkeleyDB 4.8.
- +See "Berkeley DB" in [build_unix.md](build_unix.md) for instructions on how to build BerkeleyDB 4.8.
- You cannot use the BerkeleyDB library from ports, for the same reason as boost above (g++/libstd++ incompatibility).
- ```bash
- -# Pick some path to install BDB to, here we create a directory within the litecoin directory
- -LITECOIN_ROOT=$(pwd)
- -BDB_PREFIX="${LITECOIN_ROOT}/db4"
- +# Pick some path to install BDB to, here we create a directory within the litecoincash directory
- +LITECOINCASH_ROOT=$(pwd)
- +BDB_PREFIX="${LITECOINCASH_ROOT}/db4"
- mkdir -p $BDB_PREFIX
- # Fetch the source and verify that it is not tampered with
- @@ -66,8 +98,8 @@ The standard ulimit restrictions in OpenBSD are very strict:
- data(kbytes) 1572864
- -This, unfortunately, may no longer be enough to compile some `.cpp` files in the project,
- -at least with GCC 4.9.4 (see issue [#6658](https://github.com/bitcoin/bitcoin/issues/6658)).
- +This is, unfortunately, no longer enough to compile some `.cpp` files in the project,
- +at least with gcc 4.9.3 (see issue https://github.com/bitcoin/bitcoin/issues/6658).
- If your user is in the `staff` group the limit can be raised with:
- ulimit -d 3000000
- @@ -76,7 +108,7 @@ The change will only affect the current shell and processes spawned by it. To
- make the change system-wide, change `datasize-cur` and `datasize-max` in
- `/etc/login.conf`, and reboot.
- -### Building Litecoin Core
- +### Building LitecoinCash Core
- **Important**: use `gmake`, not `make`. The non-GNU `make` will exit with a horrible error.
- @@ -86,32 +118,59 @@ export AUTOCONF_VERSION=2.69 # replace this with the autoconf version that you i
- export AUTOMAKE_VERSION=1.15 # replace this with the automake version that you installed
- ./autogen.sh
- ```
- -Make sure `BDB_PREFIX` is set to the appropriate path from the above steps.
- +Make sure `BDB_PREFIX` and `BOOST_PREFIX` are set to the appropriate paths from the above steps.
- To configure with wallet:
- ```bash
- -./configure --with-gui=no CC=egcc CXX=eg++ CPP=ecpp \
- +./configure --with-gui=no --with-boost=$BOOST_PREFIX \
- + CC=egcc CXX=eg++ CPP=ecpp \
- BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include"
- ```
- To configure without wallet:
- ```bash
- -./configure --disable-wallet --with-gui=no CC=egcc CXX=eg++ CPP=ecpp
- +./configure --disable-wallet --with-gui=no --with-boost=$BOOST_PREFIX \
- + CC=egcc CXX=eg++ CPP=ecpp
- ```
- Build and run the tests:
- ```bash
- -gmake # use -jX here for parallelism
- +gmake # can use -jX here for parallelism
- gmake check
- ```
- -Clang
- +Clang (not currently working)
- ------------------------------
- +WARNING: This is outdated, needs to be updated for OpenBSD 6.0 and re-tried.
- +
- +Using a newer g++ results in linking the new code to a new libstdc++.
- +Libraries built with the old g++, will still import the old library.
- +This gives conflicts, necessitating rebuild of all C++ dependencies of the application.
- +
- +With clang this can - at least theoretically - be avoided because it uses the
- +base system's libstdc++.
- +
- ```bash
- -pkg_add llvm
- +pkg_add llvm boost
- +```
- +```bash
- ./configure --disable-wallet --with-gui=no CC=clang CXX=clang++
- -gmake # use -jX here for parallelism
- -gmake check
- +gmake
- ```
- +
- +However, this does not appear to work. Compilation succeeds, but link fails
- +with many 'local symbol discarded' errors:
- +
- + local symbol 150: discarded in section `.text._ZN10tinyformat6detail14FormatIterator6finishEv' from libbitcoin_util.a(libbitcoin_util_a-random.o)
- + local symbol 151: discarded in section `.text._ZN10tinyformat6detail14FormatIterator21streamStateFromFormatERSoRjPKcii' from libbitcoin_util.a(libbitcoin_util_a-random.o)
- + local symbol 152: discarded in section `.text._ZN10tinyformat6detail12convertToIntIA13_cLb0EE6invokeERA13_Kc' from libbitcoin_util.a(libbitcoin_util_a-random.o)
- +
- +According to similar reported errors this is a binutils (ld) issue in 2.15, the
- +version installed by OpenBSD 5.7:
- +
- +- http://openbsd-archive.7691.n7.nabble.com/UPDATE-cppcheck-1-65-td248900.html
- +- https://llvm.org/bugs/show_bug.cgi?id=9758
- +
- +There is no known workaround for this.
- diff --git a/doc/build-osx.md b/doc/build-osx.md
- index c1ced3f..5c5bf75 100644
- --- a/doc/build-osx.md
- +++ b/doc/build-osx.md
- @@ -28,17 +28,17 @@ If you want to build with ZeroMQ support
- NOTE: Building with Qt4 is still supported, however, could result in a broken UI. Building with Qt5 is recommended.
- -Build Litecoin Core
- +Build LitecoinCash Core
- ------------------------
- -1. Clone the litecoin source code and cd into `litecoin`
- +1. Clone the litecoincash source code and cd into `litecoincash`
- - git clone https://github.com/litecoin-project/litecoin
- - cd litecoin
- + git clone https://github.com/litecoincash-project/litecoincash
- + cd litecoincash
- -2. Build litecoin-core:
- +2. Build litecoincash-core:
- - Configure and build the headless litecoin binaries as well as the GUI (if Qt is found).
- + Configure and build the headless litecoincash binaries as well as the GUI (if Qt is found).
- You can disable the GUI build by passing `--without-gui` to configure.
- @@ -57,37 +57,37 @@ Build Litecoin Core
- Running
- -------
- -Litecoin Core is now available at `./src/litecoind`
- +LitecoinCash Core is now available at `./src/litecoincashd`
- Before running, it's recommended you create an RPC configuration file.
- - echo -e "rpcuser=litecoinrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/Litecoin/litecoin.conf"
- + echo -e "rpcuser=litecoincashrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/LitecoinCash/litecoincash.conf"
- - chmod 600 "/Users/${USER}/Library/Application Support/Litecoin/litecoin.conf"
- + chmod 600 "/Users/${USER}/Library/Application Support/LitecoinCash/litecoincash.conf"
- -The first time you run litecoind, it will start downloading the blockchain. This process could take several hours.
- +The first time you run litecoincashd, it will start downloading the blockchain. This process could take several hours.
- You can monitor the download process by looking at the debug.log file:
- - tail -f $HOME/Library/Application\ Support/Litecoin/debug.log
- + tail -f $HOME/Library/Application\ Support/LitecoinCash/debug.log
- Other commands:
- -------
- - ./src/litecoind -daemon # Starts the litecoin daemon.
- - ./src/litecoin-cli --help # Outputs a list of command-line options.
- - ./src/litecoin-cli help # Outputs a list of RPC commands when the daemon is running.
- + ./src/litecoincashd -daemon # Starts the litecoincash daemon.
- + ./src/litecoincash-cli --help # Outputs a list of command-line options.
- + ./src/litecoincash-cli help # Outputs a list of RPC commands when the daemon is running.
- Using Qt Creator as IDE
- ------------------------
- -You can use Qt Creator as an IDE, for litecoin development.
- +You can use Qt Creator as an IDE, for litecoincash development.
- Download and install the community edition of [Qt Creator](https://www.qt.io/download/).
- Uncheck everything except Qt Creator during the installation process.
- 1. Make sure you installed everything through Homebrew mentioned above
- 2. Do a proper ./configure --enable-debug
- 3. In Qt Creator do "New Project" -> Import Project -> Import Existing Project
- -4. Enter "litecoin-qt" as project name, enter src/qt as location
- +4. Enter "litecoincash-qt" as project name, enter src/qt as location
- 5. Leave the file selection as it is
- 6. Confirm the "summary page"
- 7. In the "Projects" tab select "Manage Kits..."
- diff --git a/doc/build-unix.md b/doc/build-unix.md
- index 45076f6..ee3645e 100644
- --- a/doc/build-unix.md
- +++ b/doc/build-unix.md
- @@ -1,12 +1,12 @@
- UNIX BUILD NOTES
- ====================
- -Some notes on how to build Litecoin Core in Unix.
- +Some notes on how to build LitecoinCash Core in Unix.
- (for OpenBSD specific instructions, see [build-openbsd.md](build-openbsd.md))
- Note
- ---------------------
- -Always use absolute paths to configure and compile litecoin and the dependencies,
- +Always use absolute paths to configure and compile litecoincash and the dependencies,
- for example, when specifying the path of the dependency:
- ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
- @@ -24,7 +24,7 @@ make
- make install # optional
- ```
- -This will build litecoin-qt as well if the dependencies are met.
- +This will build litecoincash-qt as well if the dependencies are met.
- Dependencies
- ---------------------
- @@ -55,7 +55,7 @@ Memory Requirements
- --------------------
- C++ compilers are memory-hungry. It is recommended to have at least 1.5 GB of
- -memory available when compiling Litecoin Core. On systems with less, gcc can be
- +memory available when compiling LitecoinCash Core. On systems with less, gcc can be
- tuned to conserve memory with additional CXXFLAGS:
- @@ -94,7 +94,7 @@ BerkeleyDB 5.1 or later, which break binary wallet compatibility with the distri
- are based on BerkeleyDB 4.8. If you do not care about wallet compatibility,
- pass `--with-incompatible-bdb` to configure.
- -See the section "Disable-wallet mode" to build Litecoin Core without wallet.
- +See the section "Disable-wallet mode" to build LitecoinCash Core without wallet.
- Optional (see --with-miniupnpc and --enable-upnp-default):
- @@ -107,7 +107,7 @@ ZMQ dependencies (provides ZMQ API 4.x):
- Dependencies for the GUI: Ubuntu & Debian
- -----------------------------------------
- -If you want to build Litecoin-Qt, make sure that the required packages for Qt development
- +If you want to build LitecoinCash-Qt, make sure that the required packages for Qt development
- are installed. Either Qt 5 or Qt 4 are necessary to build the GUI.
- If both Qt 4 and Qt 5 are installed, Qt 5 will be used. Pass `--with-gui=qt4` to configure to choose Qt4.
- To build without GUI pass `--without-gui`.
- @@ -124,7 +124,7 @@ libqrencode (optional) can be installed with:
- sudo apt-get install libqrencode-dev
- -Once these are installed, they will be found by configure and a litecoin-qt executable will be
- +Once these are installed, they will be found by configure and a litecoincash-qt executable will be
- built by default.
- Dependency Build Instructions: Fedora
- @@ -147,7 +147,7 @@ libqrencode (optional) can be installed with:
- Notes
- -----
- -The release is built with GCC and then "strip litecoind" to strip the debug
- +The release is built with GCC and then "strip litecoincashd" to strip the debug
- symbols, which reduces the executable size by about 90%.
- @@ -168,10 +168,10 @@ Berkeley DB
- It is recommended to use Berkeley DB 4.8. If you have to build it yourself:
- ```bash
- -LITECOIN_ROOT=$(pwd)
- +LITECOINCASH_ROOT=$(pwd)
- -# Pick some path to install BDB to, here we create a directory within the litecoin directory
- -BDB_PREFIX="${LITECOIN_ROOT}/db4"
- +# Pick some path to install BDB to, here we create a directory within the litecoincash directory
- +BDB_PREFIX="${LITECOINCASH_ROOT}/db4"
- mkdir -p $BDB_PREFIX
- # Fetch the source and verify that it is not tampered with
- @@ -186,8 +186,8 @@ cd db-4.8.30.NC/build_unix/
- ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
- make install
- -# Configure Litecoin Core to use our own-built instance of BDB
- -cd $LITECOIN_ROOT
- +# Configure LitecoinCash Core to use our own-built instance of BDB
- +cd $LITECOINCASH_ROOT
- ./autogen.sh
- ./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" # (other args...)
- ```
- @@ -205,7 +205,7 @@ If you need to build Boost yourself:
- Security
- --------
- -To help make your litecoin installation more secure by making certain attacks impossible to
- +To help make your litecoincash installation more secure by making certain attacks impossible to
- exploit even if a vulnerability is found, binaries are hardened by default.
- This can be disabled with:
- @@ -229,7 +229,7 @@ Hardening enables the following features:
- To test that you have built PIE executable, install scanelf, part of paxutils, and use:
- - scanelf -e ./litecoin
- + scanelf -e ./litecoincash
- The output should contain:
- @@ -238,13 +238,13 @@ Hardening enables the following features:
- * Non-executable Stack
- If the stack is executable then trivial stack based buffer overflow exploits are possible if
- - vulnerable buffers are found. By default, litecoin should be built with a non-executable stack
- + vulnerable buffers are found. By default, litecoincash should be built with a non-executable stack
- but if one of the libraries it uses asks for an executable stack or someone makes a mistake
- and uses a compiler extension which requires an executable stack, it will silently build an
- executable without the non-executable stack protection.
- To verify that the stack is non-executable after compiling use:
- - `scanelf -e ./litecoin`
- + `scanelf -e ./litecoincash`
- the output should contain:
- STK/REL/PTL
- @@ -254,7 +254,7 @@ Hardening enables the following features:
- Disable-wallet mode
- --------------------
- -When the intention is to run only a P2P node without a wallet, litecoin may be compiled in
- +When the intention is to run only a P2P node without a wallet, litecoincash may be compiled in
- disable-wallet mode with:
- ./configure --disable-wallet
- @@ -276,8 +276,8 @@ Setup and Build Example: Arch Linux
- This example lists the steps necessary to setup and build a command line only, non-wallet distribution of the latest changes on Arch Linux:
- pacman -S git base-devel boost libevent python
- - git clone https://github.com/litecoin-project/litecoin.git
- - cd litecoin/
- + git clone https://github.com/litecoincash-project/litecoincash.git
- + cd litecoincash/
- ./autogen.sh
- ./configure --disable-wallet --without-gui --without-miniupnpc
- make check
- @@ -286,7 +286,7 @@ Note:
- Enabling wallet support requires either compiling against a Berkeley DB newer than 4.8 (package `db`) using `--with-incompatible-bdb`,
- or building and depending on a local version of Berkeley DB 4.8. The readily available Arch Linux packages are currently built using
- `--with-incompatible-bdb` according to the [PKGBUILD](https://projects.archlinux.org/svntogit/community.git/tree/bitcoin/trunk/PKGBUILD).
- -As mentioned above, when maintaining portability of the wallet between the standard Litecoin Core distributions and independently built
- +As mentioned above, when maintaining portability of the wallet between the standard LitecoinCash Core distributions and independently built
- node software is desired, Berkeley DB 4.8 must be used.
- @@ -334,7 +334,7 @@ For the wallet (optional):
- This will give a warning "configure: WARNING: Found Berkeley DB other
- than 4.8; wallets opened by this build will not be portable!", but as FreeBSD never
- had a binary release, this may not matter. If backwards compatibility
- -with 4.8-built Litecoin Core is needed follow the steps under "Berkeley DB" above.
- +with 4.8-built LitecoinCash Core is needed follow the steps under "Berkeley DB" above.
- Then build using:
- diff --git a/doc/build-windows.md b/doc/build-windows.md
- index 2f9eee1..f4cf0cd 100644
- --- a/doc/build-windows.md
- +++ b/doc/build-windows.md
- @@ -1,116 +1,75 @@
- WINDOWS BUILD NOTES
- ====================
- -Below are some notes on how to build Litecoin Core for Windows.
- +Below are some notes on how to build LitecoinCash Core for Windows.
- -The options known to work for building Litecoin Core on Windows are:
- +Most developers use cross-compilation from Ubuntu to build executables for
- +Windows. This is also used to build the release binaries.
- -* On Linux using the [Mingw-w64](https://mingw-w64.org/doku.php) cross compiler tool chain. Ubuntu Trusty 14.04 is recommended
- -and is the platform used to build the Litecoin Core Windows release binaries.
- -* On Windows using [Windows
- -Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about) and the Mingw-w64 cross compiler tool chain.
- +Currently only building on Ubuntu Trusty 14.04 is supported.
- +Other versions are unsupported or known to be broken (e.g. Ubuntu Xenial 16.04).
- -Other options which may work but which have not been extensively tested are (please contribute instructions):
- +While there are potentially a number of ways to build on Windows (for example using msys / mingw-w64),
- +using the Windows Subsystem For Linux is the most straightforward. If you are building with
- +another method, please contribute the instructions here for others who are running versions
- +of Windows that are not compatible with the Windows Subsystem for Linux.
- -* On Windows using a POSIX compatibility layer application such as [cygwin](http://www.cygwin.com/) or [msys2](http://www.msys2.org/).
- -* On Windows using a native compiler tool chain such as [Visual Studio](https://www.visualstudio.com).
- -
- -Installing Windows Subsystem for Linux
- ----------------------------------------
- +Compiling with Windows Subsystem For Linux
- +-------------------------------------------
- With Windows 10, Microsoft has released a new feature named the [Windows
- -Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about). This
- +Subsystem for Linux](https://msdn.microsoft.com/commandline/wsl/about). This
- feature allows you to run a bash shell directly on Windows in an Ubuntu-based
- environment. Within this environment you can cross compile for Windows without
- -the need for a separate Linux VM or server. Note that while WSL can be installed with
- -other Linux variants, such as OpenSUSE, the following instructions have only been
- -tested with Ubuntu.
- +the need for a separate Linux VM or server.
- This feature is not supported in versions of Windows prior to Windows 10 or on
- Windows Server SKUs. In addition, it is available [only for 64-bit versions of
- Windows](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide).
- -Full instructions to install WSL are available on the above link.
- -To install WSL on Windows 10 with Fall Creators Update installed (version >= 16215.0) do the following:
- +To get the bash shell, you must first activate the feature in Windows.
- -1. Enable the Windows Subsystem for Linux feature
- +1. Turn on Developer Mode
- + * Open Settings -> Update and Security -> For developers
- + * Select the Developer Mode radio button
- + * Restart if necessary
- +2. Enable the Windows Subsystem for Linux feature
- * From Start, search for "Turn Windows features on or off" (type 'turn')
- - * Select Windows Subsystem for Linux
- + * Select Windows Subsystem for Linux (beta)
- * Click OK
- * Restart if necessary
- -2. Install Ubuntu
- - * Open Microsoft Store and search for Ubuntu or use [this link](https://www.microsoft.com/store/productId/9NBLGGH4MSV6)
- - * Click Install
- 3. Complete Installation
- - * Open a cmd prompt and type "Ubuntu"
- + * Open a cmd prompt and type "bash"
- + * Accept the license
- * Create a new UNIX user account (this is a separate account from your Windows account)
- After the bash shell is active, you can follow the instructions below, starting
- with the "Cross-compilation" section. Compiling the 64-bit version is
- recommended but it is possible to compile the 32-bit version.
- -Cross-compilation for Ubuntu and Windows Subsystem for Linux
- -------------------------------------------------------------
- -
- -At the time of writing the Windows Subsystem for Linux installs Ubuntu Xenial 16.04. The Mingw-w64 package
- -for Ubuntu Xenial does not produce working executables for some of the Litecoin Core applications.
- -It is possible to build on Ubuntu Xenial by installing the cross compiler packages from Ubuntu Zesty, see the steps below.
- -Building on Ubuntu Zesty 17.04 up to 17.10 has been verified to work.
- +Cross-compilation
- +-------------------
- -The steps below can be performed on Ubuntu (including in a VM) or WSL. The depends system
- +These steps can be performed on, for example, an Ubuntu VM. The depends system
- will also work on other Linux distributions, however the commands for
- installing the toolchain will be different.
- First, install the general dependencies:
- - sudo apt install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git
- + sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl
- A host toolchain (`build-essential`) is necessary because some dependency
- packages (such as `protobuf`) need to build host utilities that are used in the
- build process.
- -See also: [dependencies.md](dependencies.md).
- -
- ## Building for 64-bit Windows
- -The first step is to install the mingw-w64 cross-compilation tool chain. Due to different Ubuntu
- -packages for each distribution and problems with the Xenial packages the steps for each are different.
- -
- -Common steps to install mingw32 cross compiler tool chain:
- -
- - sudo apt install g++-mingw-w64-x86-64
- -
- -Ubuntu Trusty 14.04:
- -
- - No further steps required
- -
- -Ubuntu Xenial 16.04 and Windows Subsystem for Linux <sup>[1](#footnote1),[2](#footnote2)</sup>:
- -
- - sudo apt install software-properties-common
- - sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu zesty universe"
- - sudo apt update
- - sudo apt upgrade
- - sudo update-alternatives --config x86_64-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
- -
- -Ubuntu Zesty 17.04 <sup>[2](#footnote2)</sup>:
- +To build executables for Windows 64-bit, install the following dependencies:
- - sudo update-alternatives --config x86_64-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
- + sudo apt-get install g++-mingw-w64-x86-64 mingw-w64-x86-64-dev
- -Once the tool chain is installed the build steps are common:
- -
- -Note that for WSL the Litecoin Core source path MUST be somewhere in the default mount file system, for
- -example /usr/src/litecoin, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail.
- -This means you cannot use a directory that located directly on the host Windows file system to perform the build.
- -
- -The next three steps are an example of how to acquire the source in an appropriate way.
- -
- - cd /usr/src
- - sudo git clone https://github.com/litecoin-project/litecoin.git
- - sudo chmod -R a+rw litecoin
- -
- -Once the source code is ready the build steps are below.
- +Then build using:
- - PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var
- cd depends
- make HOST=x86_64-w64-mingw32
- cd ..
- @@ -122,25 +81,10 @@ Once the source code is ready the build steps are below.
- To build executables for Windows 32-bit, install the following dependencies:
- - sudo apt install g++-mingw-w64-i686 mingw-w64-i686-dev
- -
- -For Ubuntu Xenial 16.04, Ubuntu Zesty 17.04 and Windows Subsystem for Linux <sup>[2](#footnote2)</sup>:
- -
- - sudo update-alternatives --config i686-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
- -
- -Note that for WSL the Litecoin Core source path MUST be somewhere in the default mount file system, for
- -example /usr/src/litecoin, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail.
- -This means you cannot use a directory that located directly on the host Windows file system to perform the build.
- -
- -The next three steps are an example of how to acquire the source in an appropriate way.
- -
- - cd /usr/src
- - sudo git clone https://github.com/litecoin-project/litecoin.git
- - sudo chmod -R a+rw litecoin
- + sudo apt-get install g++-mingw-w64-i686 mingw-w64-i686-dev
- Then build using:
- - PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var
- cd depends
- make HOST=i686-w64-mingw32
- cd ..
- @@ -158,23 +102,6 @@ Installation
- After building using the Windows subsystem it can be useful to copy the compiled
- executables to a directory on the windows drive in the same directory structure
- as they appear in the release `.zip` archive. This can be done in the following
- -way. This will install to `c:\workspace\litecoin`, for example:
- -
- - make install DESTDIR=/mnt/c/workspace/litecoin
- -
- -Footnotes
- ----------
- -
- -<a name="footnote1">1</a>: There is currently a bug in the 64 bit Mingw-w64 cross compiler packaged for WSL/Ubuntu Xenial 16.04 that
- -causes two of the litecoin executables to crash shortly after start up. The bug is related to the
- --fstack-protector-all g++ compiler flag which is used to mitigate buffer overflows.
- -Installing the Mingw-w64 packages from the Ubuntu 17 distribution solves the issue, however, this is not
- -an officially supported approach and it's only recommended if you are prepared to reinstall WSL/Ubuntu should
- -something break.
- -
- -<a name="footnote2">2</a>: Starting from Ubuntu Xenial 16.04 both the 32 and 64 bit Mingw-w64 packages install two different
- -compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more
- -efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers
- -required to support win32 threads conflict with some of the classes in the C++11 standard library in particular std::mutex.
- -It's not possible to build the litecoin code using the win32 version of the Mingw-w64 cross compilers (at least not without
- -modifying headers in the litecoin source code).
- +way. This will install to `c:\workspace\litecoincash`, for example:
- +
- + make install DESTDIR=/mnt/c/workspace/litecoincash
- diff --git a/doc/developer-notes.md b/doc/developer-notes.md
- index a061bea..98cac6f 100644
- --- a/doc/developer-notes.md
- +++ b/doc/developer-notes.md
- @@ -151,7 +151,7 @@ to see it.
- **testnet and regtest modes**
- -Run with the -testnet option to run with "play litecoins" on the test network, if you
- +Run with the -testnet option to run with "play coins" on the test network, if you
- are testing multi-machine code that needs to operate across the internet.
- If you are testing something that can run on one machine, run with the -regtest option.
- @@ -160,7 +160,7 @@ that run in -regtest mode.
- **DEBUG_LOCKORDER**
- -Litecoin Core is a multithreaded application, and deadlocks or other multithreading bugs
- +LitecoinCash Core is a multithreaded application, and deadlocks or other multithreading bugs
- can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure
- CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of which locks
- are held, and adds warnings to the debug.log file if inconsistencies are detected.
- @@ -207,9 +207,9 @@ Threads
- - ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms.
- -- ThreadRPCServer : Remote procedure call handler, listens on port 9332 for connections and services them.
- +- ThreadRPCServer : Remote procedure call handler, listens on port 62457 for connections and services them.
- -- BitcoinMiner : Generates litecoins (if wallet is enabled).
- +- BitcoinMiner : Generates coins (if wallet is enabled).
- - Shutdown : Does an orderly shutdown of everything.
- @@ -219,7 +219,7 @@ Ignoring IDE/editor files
- In closed-source environments in which everyone uses the same IDE it is common
- to add temporary files it produces to the project-wide `.gitignore` file.
- -However, in open source software such as Litecoin Core, where everyone uses
- +However, in open source software such as LitecoinCash Core, where everyone uses
- their own editors/IDE/tools, it is less common. Only you know what files your
- editor produces and this may change from version to version. The canonical way
- to do this is thus to create your local gitignore. Add this to `~/.gitconfig`:
- @@ -249,9 +249,9 @@ Development guidelines
- ============================
- A few non-style-related recommendations for developers, as well as points to
- -pay attention to for reviewers of Litecoin Core code.
- +pay attention to for reviewers of LitecoinCash Core code.
- -General Litecoin Core
- +General LitecoinCash Core
- ----------------------
- - New features should be exposed on RPC first, then can be made available in the GUI
- @@ -361,7 +361,7 @@ Strings and formatting
- - For `strprintf`, `LogPrint`, `LogPrintf` formatting characters don't need size specifiers
- - - *Rationale*: Litecoin Core uses tinyformat, which is type safe. Leave them out to avoid confusion
- + - *Rationale*: LitecoinCash Core uses tinyformat, which is type safe. Leave them out to avoid confusion
- Variable names
- --------------
- @@ -467,12 +467,12 @@ Subtrees
- Several parts of the repository are subtrees of software maintained elsewhere.
- -Some of these are maintained by active developers of Litecoin Core, in which case changes should probably go
- +Some of these are maintained by active developers of LitecoinCash Core, in which case changes should probably go
- directly upstream without being PRed directly against the project. They will be merged back in the next
- subtree merge.
- Others are external projects without a tight relationship with our project. Changes to these should also
- -be sent upstream but bugfixes may also be prudent to PR against Litecoin Core so that they can be integrated
- +be sent upstream but bugfixes may also be prudent to PR against LitecoinCash Core so that they can be integrated
- quickly. Cosmetic changes should be purely taken upstream.
- There is a tool in contrib/devtools/git-subtree-check.sh to check a subtree directory for consistency with
- @@ -535,7 +535,7 @@ Git and GitHub tips
- [remote "upstream-pull"]
- fetch = +refs/pull/*:refs/remotes/upstream-pull/*
- - url = git@github.com:litecoin-project/litecoin.git
- + url = git@github.com:litecoincash-project/litecoincash.git
- This will add an `upstream-pull` remote to your git repository, which can be fetched using `git fetch --all`
- or `git fetch upstream-pull`. Afterwards, you can use `upstream-pull/NUMBER/head` in arguments to `git show`,
- diff --git a/doc/dnsseed-policy.md b/doc/dnsseed-policy.md
- index 8b280c6..2abbd22 100644
- --- a/doc/dnsseed-policy.md
- +++ b/doc/dnsseed-policy.md
- @@ -1,12 +1,12 @@
- Expectations for DNS Seed operators
- ====================================
- -Litecoin Core attempts to minimize the level of trust in DNS seeds,
- +LitecoinCash Core attempts to minimize the level of trust in DNS seeds,
- but DNS seeds still pose a small amount of risk for the network.
- As such, DNS seeds must be run by entities which have some minimum
- -level of trust within the Litecoin community.
- +level of trust within the LitecoinCash community.
- -Other implementations of Litecoin software may also use the same
- +Other implementations of LitecoinCash software may also use the same
- seeds and may be more exposed. In light of this exposure, this
- document establishes some basic expectations for operating dnsseeds.
- @@ -16,7 +16,7 @@ and not sell or transfer control of the DNS seed. Any hosting services
- contracted by the operator are equally expected to uphold these expectations.
- 1. The DNS seed results must consist exclusively of fairly selected and
- -functioning Litecoin nodes from the public network to the best of the
- +functioning LitecoinCash nodes from the public network to the best of the
- operator's understanding and capability.
- 2. For the avoidance of doubt, the results may be randomized but must not
- @@ -26,7 +26,7 @@ urgent technical necessity and disclosed.
- 3. The results may not be served with a DNS TTL of less than one minute.
- 4. Any logging of DNS queries should be only that which is necessary
- -for the operation of the service or urgent health of the Litecoin
- +for the operation of the service or urgent health of the LitecoinCash
- network and must not be retained longer than necessary nor disclosed
- to any third party.
- @@ -42,13 +42,13 @@ details of their operating practices.
- related to the DNS seed operation.
- If these expectations cannot be satisfied the operator should
- -discontinue providing services and contact the active Litecoin
- +discontinue providing services and contact the active LitecoinCash
- Core development team as well as posting on
- -[litecoin-dev](https://groups.google.com/forum/#!forum/litecoin-dev).
- +[litecoincash-dev](https://groups.google.com/forum/#!forum/litecoincash-dev).
- Behavior outside of these expectations may be reasonable in some
- situations but should be discussed in public in advance.
- See also
- ----------
- -- [litecoin-seeder](https://github.com/pooler/litecoin-seeder) is a reference implementation of a DNS seed.
- +- [litecoincash-seeder](https://github.com/pooler/litecoincash-seeder) is a reference implementation of a DNS seed.
- diff --git a/doc/files.md b/doc/files.md
- index 12dd403..c1856a4 100644
- --- a/doc/files.md
- +++ b/doc/files.md
- @@ -1,21 +1,20 @@
- * banlist.dat: stores the IPs/Subnets of banned nodes
- -* litecoin.conf: contains configuration settings for litecoind or litecoin-qt
- -* litecoind.pid: stores the process id of litecoind while running
- +* litecoincash.conf: contains configuration settings for litecoincashd or litecoincash-qt
- +* litecoincashd.pid: stores the process id of litecoincashd while running
- * blocks/blk000??.dat: block data (custom, 128 MiB per file); since 0.8.0
- * blocks/rev000??.dat; block undo data (custom); since 0.8.0 (format changed since pre-0.8)
- * blocks/index/*; block index (LevelDB); since 0.8.0
- * chainstate/*; block chain state database (LevelDB); since 0.8.0
- * database/*: BDB database environment; only used for wallet since 0.8.0
- * db.log: wallet database log file
- -* debug.log: contains debug information and general logging generated by litecoind or litecoin-qt
- +* debug.log: contains debug information and general logging generated by litecoincashd or litecoincash-qt
- * fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation; since 0.10.0
- * mempool.dat: dump of the mempool's transactions; since 0.14.0.
- * peers.dat: peer IP address database (custom format); since 0.7.0
- * wallet.dat: personal wallet (BDB) with keys and transactions
- * .cookie: session RPC authentication cookie (written at start when cookie authentication is used, deleted on shutdown): since 0.12.0
- * onion_private_key: cached Tor hidden service private key for `-listenonion`: since 0.12.0
- -* guisettings.ini.bak: backup of former GUI settings after `-resetguisettings` is used
- Only used in pre-0.8.0
- ---------------------
- diff --git a/doc/fuzzing.md b/doc/fuzzing.md
- index 64f7a38..aab3402 100644
- --- a/doc/fuzzing.md
- +++ b/doc/fuzzing.md
- @@ -1,7 +1,7 @@
- -Fuzz-testing Litecoin Core
- +Fuzz-testing LitecoinCash Core
- ==========================
- -A special test harness `test_litecoin_fuzzy` is provided to provide an easy
- +A special test harness `test_litecoincash_fuzzy` is provided to provide an easy
- entry point for fuzzers and the like. In this document we'll describe how to
- use it with AFL.
- @@ -20,13 +20,13 @@ export AFLPATH=$PWD
- Instrumentation
- ----------------
- -To build Litecoin Core using AFL instrumentation (this assumes that the
- +To build LitecoinCash Core using AFL instrumentation (this assumes that the
- `AFLPATH` was set as above):
- ```
- ./configure --disable-ccache --disable-shared --enable-tests CC=${AFLPATH}/afl-gcc CXX=${AFLPATH}/afl-g++
- export AFL_HARDEN=1
- cd src/
- -make test/test_litecoin_fuzzy
- +make test/test_litecoincash_fuzzy
- ```
- We disable ccache because we don't want to pollute the ccache with instrumented
- objects, and similarly don't want to use non-instrumented cached objects linked
- @@ -65,7 +65,7 @@ Fuzzing
- To start the actual fuzzing use:
- ```
- -$AFLPATH/afl-fuzz -i ${AFLIN} -o ${AFLOUT} -m52 -- test/test_litecoin_fuzzy
- +$AFLPATH/afl-fuzz -i ${AFLIN} -o ${AFLOUT} -m52 -- test/test_litecoincash_fuzzy
- ```
- You may have to change a few kernel parameters to test optimally - `afl-fuzz`
- diff --git a/doc/gitian-building.md b/doc/gitian-building.md
- index 5d65b6f..fe693e3 100644
- --- a/doc/gitian-building.md
- +++ b/doc/gitian-building.md
- @@ -1,9 +1,9 @@
- Gitian building
- ================
- -*Setup instructions for a Gitian build of Litecoin Core using a Debian VM or physical system.*
- +*Setup instructions for a Gitian build of LitecoinCash Core using a Debian VM or physical system.*
- -Gitian is the deterministic build process that is used to build the Litecoin
- +Gitian is the deterministic build process that is used to build the LitecoinCash
- Core executables. It provides a way to be reasonably sure that the
- executables are really built from the source on GitHub. It also makes sure that
- the same, tested dependencies are used and statically built into the executable.
- @@ -11,7 +11,7 @@ the same, tested dependencies are used and statically built into the executable.
- Multiple developers build the source code by following a specific descriptor
- ("recipe"), cryptographically sign the result, and upload the resulting signature.
- These results are compared and only if they match, the build is accepted and uploaded
- -to litecoin.org.
- +to litecoincash.org.
- More independent Gitian builders are needed, which is why this guide exists.
- It is preferred you follow these steps yourself instead of using someone else's
- @@ -26,7 +26,7 @@ Table of Contents
- - [Installing Gitian](#installing-gitian)
- - [Setting up the Gitian image](#setting-up-the-gitian-image)
- - [Getting and building the inputs](#getting-and-building-the-inputs)
- -- [Building Litecoin Core](#building-litecoin-core)
- +- [Building LitecoinCash Core](#building-litecoincash-core)
- - [Building an alternative repository](#building-an-alternative-repository)
- - [Signing externally](#signing-externally)
- - [Uploading signatures](#uploading-signatures)
- @@ -310,12 +310,12 @@ cd ..
- **Note**: When sudo asks for a password, enter the password for the user *debian* not for *root*.
- -Clone the git repositories for litecoin and Gitian.
- +Clone the git repositories for litecoincash and Gitian.
- ```bash
- git clone https://github.com/devrandom/gitian-builder.git
- -git clone https://github.com/litecoin-project/litecoin
- -git clone https://github.com/litecoin-project/gitian.sigs.ltc.git
- +git clone https://github.com/litecoincash-project/litecoincash
- +git clone https://github.com/litecoincash-project/gitian.sigs.lch.git
- ```
- Setting up the Gitian image
- @@ -344,16 +344,16 @@ Getting and building the inputs
- At this point you have two options, you can either use the automated script (found in [contrib/gitian-build.sh](/contrib/gitian-build.sh)) or you could manually do everything by following this guide. If you're using the automated script, then run it with the "--setup" command. Afterwards, run it with the "--build" command (example: "contrib/gitian-build.sh -b signer 0.13.0"). Otherwise ignore this.
- Follow the instructions in [doc/release-process.md](release-process.md#fetch-and-create-inputs-first-time-or-when-dependency-versions-change)
- -in the litecoin repository under 'Fetch and create inputs' to install sources which require
- +in the litecoincash repository under 'Fetch and create inputs' to install sources which require
- manual intervention. Also optionally follow the next step: 'Seed the Gitian sources cache
- and offline git repositories' which will fetch the remaining files required for building
- offline.
- -Building Litecoin Core
- +Building LitecoinCash Core
- ----------------
- -To build Litecoin Core (for Linux, OS X and Windows) just follow the steps under 'perform
- -Gitian builds' in [doc/release-process.md](release-process.md#perform-gitian-builds) in the litecoin repository.
- +To build LitecoinCash Core (for Linux, OS X and Windows) just follow the steps under 'perform
- +Gitian builds' in [doc/release-process.md](release-process.md#perform-gitian-builds) in the litecoincash repository.
- This may take some time as it will build all the dependencies needed for each descriptor.
- These dependencies will be cached after a successful build to avoid rebuilding them when possible.
- @@ -367,12 +367,12 @@ tail -f var/build.log
- Output from `gbuild` will look something like
- - Initialized empty Git repository in /home/debian/gitian-builder/inputs/litecoin/.git/
- + Initialized empty Git repository in /home/debian/gitian-builder/inputs/litecoincash/.git/
- remote: Counting objects: 57959, done.
- remote: Total 57959 (delta 0), reused 0 (delta 0), pack-reused 57958
- Receiving objects: 100% (57959/57959), 53.76 MiB | 484.00 KiB/s, done.
- Resolving deltas: 100% (41590/41590), done.
- - From https://github.com/litecoin-project/litecoin
- + From https://github.com/litecoincash-project/litecoincash
- ... (new tags, new branch etc)
- --- Building for trusty amd64 ---
- Stopping target if it is up
- @@ -398,18 +398,18 @@ and inputs.
- For example:
- ```bash
- -URL=https://github.com/thrasher-/litecoin.git
- +URL=https://github.com/thrasher-/litecoincash.git
- COMMIT=2014_03_windows_unicode_path
- -./bin/gbuild --commit litecoin=${COMMIT} --url litecoin=${URL} ../litecoin/contrib/gitian-descriptors/gitian-linux.yml
- -./bin/gbuild --commit litecoin=${COMMIT} --url litecoin=${URL} ../litecoin/contrib/gitian-descriptors/gitian-win.yml
- -./bin/gbuild --commit litecoin=${COMMIT} --url litecoin=${URL} ../litecoin/contrib/gitian-descriptors/gitian-osx.yml
- +./bin/gbuild --commit litecoincash=${COMMIT} --url litecoincash=${URL} ../litecoincash/contrib/gitian-descriptors/gitian-linux.yml
- +./bin/gbuild --commit litecoincash=${COMMIT} --url litecoincash=${URL} ../litecoincash/contrib/gitian-descriptors/gitian-win.yml
- +./bin/gbuild --commit litecoincash=${COMMIT} --url litecoincash=${URL} ../litecoincash/contrib/gitian-descriptors/gitian-osx.yml
- ```
- Building fully offline
- -----------------------
- For building fully offline including attaching signatures to unsigned builds, the detached-sigs repository
- -and the litecoin git repository with the desired tag must both be available locally, and then gbuild must be
- +and the litecoincash git repository with the desired tag must both be available locally, and then gbuild must be
- told where to find them. It also requires an apt-cacher-ng which is fully-populated but set to offline mode, or
- manually disabling gitian-builder's use of apt-get to update the VM build environment.
- @@ -428,7 +428,7 @@ cd /path/to/gitian-builder
- LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root apt-get update
- LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root \
- -e DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y install \
- - $( sed -ne '/^packages:/,/[^-] .*/ {/^- .*/{s/"//g;s/- //;p}}' ../litecoin/contrib/gitian-descriptors/*|sort|uniq )
- + $( sed -ne '/^packages:/,/[^-] .*/ {/^- .*/{s/"//g;s/- //;p}}' ../litecoincash/contrib/gitian-descriptors/*|sort|uniq )
- LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root apt-get -q -y purge grub
- LXC_ARCH=amd64 LXC_SUITE=trusty on-target -u root -e DEBIAN_FRONTEND=noninteractive apt-get -y dist-upgrade
- ```
- @@ -448,12 +448,12 @@ Then when building, override the remote URLs that gbuild would otherwise pull fr
- ```bash
- cd /some/root/path/
- -git clone https://github.com/litecoin-project/litecoin-detached-sigs.git
- +git clone https://github.com/litecoincash-project/litecoincash-detached-sigs.git
- -BTCPATH=/some/root/path/litecoin
- -SIGPATH=/some/root/path/litecoin-detached-sigs
- +BTCPATH=/some/root/path/litecoincash
- +SIGPATH=/some/root/path/litecoincash-detached-sigs
- -./bin/gbuild --url litecoin=${BTCPATH},signature=${SIGPATH} ../litecoin/contrib/gitian-descriptors/gitian-win-signer.yml
- +./bin/gbuild --url litecoincash=${BTCPATH},signature=${SIGPATH} ../litecoincash/contrib/gitian-descriptors/gitian-win-signer.yml
- ```
- Signing externally
- @@ -468,9 +468,9 @@ When you execute `gsign` you will get an error from GPG, which can be ignored. C
- in `gitian.sigs` to your signing machine and do
- ```bash
- - gpg --detach-sign ${VERSION}-linux/${SIGNER}/litecoin-linux-build.assert
- - gpg --detach-sign ${VERSION}-win/${SIGNER}/litecoin-win-build.assert
- - gpg --detach-sign ${VERSION}-osx-unsigned/${SIGNER}/litecoin-osx-build.assert
- + gpg --detach-sign ${VERSION}-linux/${SIGNER}/litecoincash-linux-build.assert
- + gpg --detach-sign ${VERSION}-win/${SIGNER}/litecoincash-win-build.assert
- + gpg --detach-sign ${VERSION}-osx-unsigned/${SIGNER}/litecoincash-osx-build.assert
- ```
- This will create the `.sig` files that can be committed together with the `.assert` files to assert your
- @@ -480,5 +480,5 @@ Uploading signatures
- ---------------------
- After building and signing you can push your signatures (both the `.assert` and `.assert.sig` files) to the
- -[litecoin-project/gitian.sigs.ltc](https://github.com/litecoin-project/gitian.sigs.ltc/) repository, or if that's not possible create a pull
- +[litecoincash-project/gitian.sigs.lch](https://github.com/litecoincash-project/gitian.sigs.lch/) repository, or if that's not possible create a pull
- request. You can also mail the files to thrasher (thrasher@addictionsofware.com) and he will commit them.
- diff --git a/doc/litecoin-release-notes/release-notes-0.10.2.2.md b/doc/litecoin-release-notes/release-notes-0.10.2.2.md
- deleted file mode 100644
- index f6a609a..0000000
- --- a/doc/litecoin-release-notes/release-notes-0.10.2.2.md
- +++ /dev/null
- @@ -1,94 +0,0 @@
- -Litecoin Core version 0.10.2.2 is now available from:
- -
- - <https://download.litecoin.org/litecoin-0.10.2.2/>
- -
- -This is a new major version release, bringing bug fixes and translation
- -updates. It is recommended to upgrade to this version.
- -
- -Please report bugs using the issue tracker at github:
- -
- - <https://github.com/litecoin-project/litecoin/issues>
- -
- -Upgrading and downgrading
- -=========================
- -
- -How to Upgrade
- ---------------
- -
- -If you are running an older version, shut it down. Wait until it has completely
- -shut down (which might take a few minutes for older versions), then run the
- -installer (on Windows) or just copy over /Applications/Litecoin-Qt (on Mac) or
- -litecoind/litecoin-qt (on Linux).
- -
- -Downgrade warning
- -------------------
- -
- -Because release 0.10+ and later makes use of headers-first synchronization and
- -parallel block download (see further), the block files and databases are not
- -backwards-compatible with pre-0.10 versions of Litecoin Core or other software:
- -
- -* Blocks will be stored on disk out of order (in the order they are
- -received, really), which makes it incompatible with some tools or
- -other programs. Reindexing using earlier versions will also not work
- -anymore as a result of this.
- -
- -* The block index database will now hold headers for which no block is
- -stored on disk, which earlier versions won't support.
- -
- -If you want to be able to downgrade smoothly, make a backup of your entire data
- -directory. Without this your node will need start syncing (or importing from
- -bootstrap.dat) anew afterwards. It is possible that the data from a completely
- -synchronised 0.10 node may be usable in older versions as-is, but this is not
- -supported and may break as soon as the older version attempts to reindex.
- -
- -This does not affect wallet forward or backward compatibility.
- -
- -
- -Litecoin 0.10.2.2 Change log
- -============================
- -This release is based upon Bitcoin Core v0.10.2. Their upstream changelog applies to us and
- -is included in as separate release-notes. This section describes the Litecoin-specific differences.
- -
- -Protocol:
- -- Scrypt Proof-of-Work instead of sha256d, however block hashes are sha256d for performance reasons.
- -- Litecoin TCP port 9333 (instead of 8333)
- -- RPC TCP port 9332 (instead of 8332)
- -- Testnet TCP port 19333 (instead of 18333)
- -- Testnet RPC TCP port 19332 (instead of 18332)
- -- 84 million coin limit (instead of 21 million)
- -- Magic 0xfbc0b6db (instead of 0xf9beb4d9)
- -- Target Block Time 2.5 minutes (instead of 10 minutes)
- -- Target Timespan 3.5 days (instead of two weeks)
- -- bnProofOfWorkLimit = >> 20 (instead of >> 32)
- -- See 9a980612005adffdeb2a17ca7a09fe126dd45e0e for Genesis Parameters
- -- zeitgeist2 protection: b1b31d15cc720a1c186431b21ecc9d1a9062bcb6 Slightly different way to calculate difficulty changes.
- -- Litecoin Core v0.10.2.2 is protocol version 70003 (instead of 70002)
- -
- -Relay:
- -- Litecoin Core rounds transaction size up to the nearest 1000 bytes before calculating fees. This size rounding behavior is to mimic fee calculation of Litecoin v0.6 and v0.8.
- -- Bitcoin's IsDust() is disabled in favor of Litecoin's fee-based dust penalty.
- -- Fee-based Dust Penalty: For each transaction output smaller than DUST_THRESHOLD (currently 0.001 LTC) the default relay/mining policy will expect an additional 1000 bytes of fee. Otherwise the transaction will be rejected from relay/mining. Such transactions are also disqualified from the free/high-priority transaction rule.
- -- Miners and relays can adjust the expected fee per-KB with the -minrelaytxfee parameter.
- -
- -Wallet:
- -- Coins smaller than 0.00001 LTC are by default ignored by the wallet. Use the -mininput parameter if you want to see smaller coins.
- -
- -Notable changes since Litecoin v0.8
- -===================================
- -
- -- The Block data and indexes of v0.10 are incompatible with v0.8 clients. You can upgrade from v0.8 but you downgrading is not possible. For this reason you may want to make a backup copy of your Data Directory.
- -- litecoind no longer sends RPC commands. You must use the separate litecoin-cli command line utility.
- -- Watch-Only addresses are now possible.
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- Charles Lee
- -- pooler
- -- Gitju
- -- Adrian Gallagher
- -- Anton Yemelyanov
- -- Martin Smith
- -- Warren Togami
- diff --git a/doc/litecoin-release-notes/release-notes-0.10.4.md b/doc/litecoin-release-notes/release-notes-0.10.4.md
- deleted file mode 100644
- index 7702c44..0000000
- --- a/doc/litecoin-release-notes/release-notes-0.10.4.md
- +++ /dev/null
- @@ -1,123 +0,0 @@
- -Litecoin Core version 0.10.4.0 is now available from:
- -
- - <https://download.litecoin.org/litecoin-0.10.4.0/>
- -
- -This is a new minor version release, bringing bug fixes, the BIP65
- -(CLTV) consensus change, and relay policy preparation for BIP113. It is
- -recommended to upgrade to this version as soon as possible.
- -
- -Please report bugs using the issue tracker at github:
- -
- - <https://github.com/litecoin-project/litecoin/issues>
- -
- -Upgrading and downgrading
- -=========================
- -
- -How to Upgrade
- ---------------
- -
- -If you are running an older version, shut it down. Wait until it has completely
- -shut down (which might take a few minutes for older versions), then run the
- -installer (on Windows) or just copy over /Applications/Litecoin-Qt (on Mac) or
- -litecoind/litecoin-qt (on Linux).
- -
- -Downgrade warning
- -------------------
- -
- -Because release 0.10+ and later makes use of headers-first synchronization and
- -parallel block download (see further), the block files and databases are not
- -backwards-compatible with pre-0.10 versions of Litecoin Core or other software:
- -
- -* Blocks will be stored on disk out of order (in the order they are
- -received, really), which makes it incompatible with some tools or
- -other programs. Reindexing using earlier versions will also not work
- -anymore as a result of this.
- -
- -* The block index database will now hold headers for which no block is
- -stored on disk, which earlier versions won't support.
- -
- -If you want to be able to downgrade smoothly, make a backup of your entire data
- -directory. Without this your node will need start syncing (or importing from
- -bootstrap.dat) anew afterwards. It is possible that the data from a completely
- -synchronised 0.10 node may be usable in older versions as-is, but this is not
- -supported and may break as soon as the older version attempts to reindex.
- -
- -This does not affect wallet forward or backward compatibility.
- -
- -Notable changes since 0.10.3
- -============================
- -
- -BIP65 soft fork to enforce OP_CHECKLOCKTIMEVERIFY opcode
- ---------------------------------------------------------
- -
- -This release includes several changes related to the [BIP65][] soft fork
- -which redefines the existing OP_NOP2 opcode as OP_CHECKLOCKTIMEVERIFY
- -(CLTV) so that a transaction output can be made unspendable until a
- -specified point in the future.
- -
- -1. This release will only relay and mine transactions spending a CLTV
- - output if they comply with the BIP65 rules as provided in code.
- -
- -2. This release will produce version 4 blocks by default. Please see the
- - *notice to miners* below.
- -
- -3. Once 951 out of a sequence of 1,001 blocks on the local node's best block
- - chain contain version 4 (or higher) blocks, this release will no
- - longer accept new version 3 blocks and it will only accept version 4
- - blocks if they comply with the BIP65 rules for CLTV.
- -
- -**Notice to miners:** Litecoin Core?s block templates are now for
- -version 4 blocks only, and any mining software relying on its
- -getblocktemplate must be updated in parallel to use libblkmaker either
- -version v0.4.3 or any version from v0.5.2 onward.
- -
- -- If you are solo mining, this will affect you the moment you upgrade
- - Litecoin Core, which must be done prior to BIP65 achieving its 951/1001
- - status.
- -
- -- If you are mining with the stratum mining protocol: this does not
- - affect you.
- -
- -- If you are mining with the getblocktemplate protocol to a pool: this
- - will affect you at the pool operator?s discretion, which must be no
- - later than BIP65 achieving its 951/1001 status.
- -
- -[BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
- -
- -
- -Windows bug fix for corrupted UTXO database on unclean shutdowns
- -----------------------------------------------------------------
- -
- -Several Windows users reported that they often need to reindex the
- -entire blockchain after an unclean shutdown of Litecoin Core on Windows
- -(or an unclean shutdown of Windows itself). Although unclean shutdowns
- -remain unsafe, this release no longer relies on memory-mapped files for
- -the UTXO database, which significantly reduced the frequency of unclean
- -shutdowns leading to required reindexes during testing.
- -
- -For more information, see: <https://github.com/bitcoin/bitcoin/pull/6917>
- -
- -Other fixes for database corruption on Windows are expected in the
- -next major release.
- -
- -0.10.4 Change log
- -=================
- -
- -This release is based upon Bitcoin Core v0.10.4. Their upstream changelog applies to us and
- -is included in as separate release-notes, see: [Release Notes](release-notes.md).
- -This section describes the Litecoin-specific differences.
- -
- -- Added BIP65 CHECKLOCKTIMEVERIFY softfork.
- -- Increased OP_RETURN relay size to 80 bytes.
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- Charles Lee
- -- pooler
- -- Adrian Gallagher
- -- Anton Yemelyanov
- -- Warren Togami
- -- BtcDrak
- diff --git a/doc/litecoin-release-notes/release-notes-0.13.2.md b/doc/litecoin-release-notes/release-notes-0.13.2.md
- deleted file mode 100644
- index 619183a..0000000
- --- a/doc/litecoin-release-notes/release-notes-0.13.2.md
- +++ /dev/null
- @@ -1,993 +0,0 @@
- -Litecoin Core version 0.13.2 is now available from:
- -
- - <https://download.litecoin.org/litecoin-0.13.2.1/>
- -
- -This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations.
- -It is recommended to upgrade to this version.
- -
- -Please report bugs using the issue tracker at github:
- -
- - <https://github.com/litecoin-project/litecoin/issues>
- -
- -Compatibility
- -==============
- -
- -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support),
- -an OS initially released in 2001. This means that not even critical security
- -updates will be released anymore. Without security updates, using a litecoin
- -wallet on a XP machine is irresponsible at least.
- -
- -In addition to that, with 0.12.x there have been varied reports of Bitcoin Core
- -randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891)
- -what the source of these crashes is, but it is likely that upstream
- -libraries such as Qt are no longer being tested on XP.
- -
- -We do not have time nor resources to provide support for an OS that is
- -end-of-life. From 0.13.0 on, Windows XP is no longer supported. Users are
- -suggested to upgrade to a newer version of Windows, or install an alternative OS
- -that is supported.
- -
- -No attempt is made to prevent installing or running the software on Windows XP,
- -you can still do so at your own risk, but do not expect it to work: do not
- -report issues about Windows XP to the issue tracker.
- -
- -From 0.13.1 onwards OS X 10.7 is no longer supported. 0.13.0 was intended to work on 10.7+,
- -but severe issues with the libc++ version on 10.7.x keep it from running reliably.
- -0.13.1 now requires 10.8+, and will communicate that to 10.7 users, rather than crashing unexpectedly.
- -
- -Notable changes
- -===============
- -
- -Signature validation using libsecp256k1
- ----------------------------------------
- -
- -ECDSA signatures inside Litecoin transactions now use validation using
- -[libsecp256k1](https://github.com/bitcoin-core/secp256k1) instead of OpenSSL.
- -
- -Depending on the platform, this means a significant speedup for raw signature
- -validation speed. The advantage is largest on x86_64, where validation is over
- -five times faster. In practice, this translates to a raw reindexing and new
- -block validation times that are less than half of what it was before.
- -
- -Libsecp256k1 has undergone very extensive testing and validation.
- -
- -A side effect of this change is that libconsensus no longer depends on OpenSSL.
- -
- -Reduce upload traffic
- ----------------------
- -
- -A major part of the outbound traffic is caused by serving historic blocks to
- -other nodes in initial block download state.
- -
- -It is now possible to reduce the total upload traffic via the `-maxuploadtarget`
- -parameter. This is *not* a hard limit but a threshold to minimize the outbound
- -traffic. When the limit is about to be reached, the uploaded data is cut by not
- -serving historic blocks (blocks older than one week).
- -Moreover, any SPV peer is disconnected when they request a filtered block.
- -
- -This option can be specified in MiB per day and is turned off by default
- -(`-maxuploadtarget=0`).
- -The recommended minimum is 144 * MAX_BLOCK_SIZE (currently 144MB) per day.
- -
- -Whitelisted peers will never be disconnected, although their traffic counts for
- -calculating the target.
- -
- -A more detailed documentation about keeping traffic low can be found in
- -[/doc/reduce-traffic.md](/doc/reduce-traffic.md).
- -
- -Direct headers announcement (BIP 130)
- --------------------------------------
- -
- -Between compatible peers, [BIP 130]
- -(https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki)
- -direct headers announcement is used. This means that blocks are advertised by
- -announcing their headers directly, instead of just announcing the hash. In a
- -reorganization, all new headers are sent, instead of just the new tip. This
- -can often prevent an extra roundtrip before the actual block is downloaded.
- -
- -Memory pool limiting
- ---------------------
- -
- -Previous versions of Litecoin Core had their mempool limited by checking
- -a transaction's fees against the node's minimum relay fee. There was no
- -upper bound on the size of the mempool and attackers could send a large
- -number of transactions paying just slighly more than the default minimum
- -relay fee to crash nodes with relatively low RAM. A temporary workaround
- -for previous versions of Litecoin Core was to raise the default minimum
- -relay fee.
- -
- -Litecoin Core 0.13.2 will have a strict maximum size on the mempool. The
- -default value is 300 MB and can be configured with the `-maxmempool`
- -parameter. Whenever a transaction would cause the mempool to exceed
- -its maximum size, the transaction that (along with in-mempool descendants) has
- -the lowest total feerate (as a package) will be evicted and the node's effective
- -minimum relay feerate will be increased to match this feerate plus the initial
- -minimum relay feerate. The initial minimum relay feerate is set to
- -1000 satoshis per kB.
- -
- -Litecoin Core 0.13.2 also introduces new default policy limits on the length and
- -size of unconfirmed transaction chains that are allowed in the mempool
- -(generally limiting the length of unconfirmed chains to 25 transactions, with a
- -total size of 101 KB). These limits can be overriden using command line
- -arguments; see the extended help (`--help -help-debug`) for more information.
- -
- -RPC: Random-cookie RPC authentication
- --------------------------------------
- -
- -When no `-rpcpassword` is specified, the daemon now uses a special 'cookie'
- -file for authentication. This file is generated with random content when the
- -daemon starts, and deleted when it exits. Its contents are used as
- -authentication token. Read access to this file controls who can access through
- -RPC. By default it is stored in the data directory but its location can be
- -overridden with the option `-rpccookiefile`.
- -
- -This is similar to Tor's CookieAuthentication: see
- -https://www.torproject.org/docs/tor-manual.html.en
- -
- -This allows running litecoind without having to do any manual configuration.
- -
- -Relay: Any sequence of pushdatas in OP_RETURN outputs now allowed
- ------------------------------------------------------------------
- -
- -Previously OP_RETURN outputs with a payload were only relayed and mined if they
- -had a single pushdata. This restriction has been lifted to allow any
- -combination of data pushes and numeric constant opcodes (OP_1 to OP_16) after
- -the OP_RETURN. The limit on OP_RETURN output size is now applied to the entire
- -serialized scriptPubKey, 83 bytes by default. (the previous 80 byte default plus
- -three bytes overhead)
- -
- -Relay: New and only new blocks relayed when pruning
- ----------------------------------------------------
- -
- -When running in pruned mode, the client will now relay new blocks. When
- -responding to the `getblocks` message, only hashes of blocks that are on disk
- -and are likely to remain there for some reasonable time window (1 hour) will be
- -returned (previously all relevant hashes were returned).
- -
- -Relay and Mining: Priority transactions
- ----------------------------------------
- -
- -Litecoin Core has a heuristic 'priority' based on coin value and age. This
- -calculation is used for relaying of transactions which do not pay the
- -minimum relay fee, and can be used as an alternative way of sorting
- -transactions for mined blocks. Litecoin Core will relay transactions with
- -insufficient fees depending on the setting of `-limitfreerelay=<r>` (default:
- -`r=15` kB per minute) and `-blockprioritysize=<s>`.
- -
- -In Bitcoin Core 0.12, when mempool limit has been reached a higher minimum
- -relay fee takes effect to limit memory usage. Transactions which do not meet
- -this higher effective minimum relay fee will not be relayed or mined even if
- -they rank highly according to the priority heuristic.
- -
- -The mining of transactions based on their priority is also now disabled by
- -default. To re-enable it, simply set `-blockprioritysize=<n>` where is the size
- -in bytes of your blocks to reserve for these transactions. The old default was
- -50k, so to retain approximately the same policy, you would set
- -`-blockprioritysize=50000`.
- -
- -Additionally, as a result of computational simplifications, the priority value
- -used for transactions received with unconfirmed inputs is lower than in prior
- -versions due to avoiding recomputing the amounts as input transactions confirm.
- -
- -External miner policy set via the `prioritisetransaction` RPC to rank
- -transactions already in the mempool continues to work as it has previously.
- -Note, however, that if mining priority transactions is left disabled, the
- -priority delta will be ignored and only the fee metric will be effective.
- -
- -This internal automatic prioritization handling is being considered for removal
- -entirely in Litecoin Core 0.13, and it is at this time undecided whether the
- -more accurate priority calculation for chained unconfirmed transactions will be
- -restored. Community direction on this topic is particularly requested to help
- -set project priorities.
- -
- -Automatically use Tor hidden services
- --------------------------------------
- -
- -Starting with Tor version 0.2.7.1 it is possible, through Tor's control socket
- -API, to create and destroy 'ephemeral' hidden services programmatically.
- -Litecoin Core has been updated to make use of this.
- -
- -This means that if Tor is running (and proper authorization is available),
- -Litecoin Core automatically creates a hidden service to listen on, without
- -manual configuration. Litecoin Core will also use Tor automatically to connect
- -to other .onion nodes if the control socket can be successfully opened. This
- -will positively affect the number of available .onion nodes and their usage.
- -
- -This new feature is enabled by default if Litecoin Core is listening, and
- -a connection to Tor can be made. It can be configured with the `-listenonion`,
- -`-torcontrol` and `-torpassword` settings. To show verbose debugging
- -information, pass `-debug=tor`.
- -
- -Notifications through ZMQ
- --------------------------
- -
- -Litecoind can now (optionally) asynchronously notify clients through a
- -ZMQ-based PUB socket of the arrival of new transactions and blocks.
- -This feature requires installation of the ZMQ C API library 4.x and
- -configuring its use through the command line or configuration file.
- -Please see [docs/zmq.md](/doc/zmq.md) for details of operation.
- -
- -Wallet: Transaction fees
- -------------------------
- -
- -Various improvements have been made to how the wallet calculates
- -transaction fees.
- -
- -Users can decide to pay a predefined fee rate by setting `-paytxfee=<n>`
- -(or `settxfee <n>` rpc during runtime). A value of `n=0` signals Litecoin
- -Core to use floating fees. By default, Litecoin Core will use floating
- -fees.
- -
- -Based on past transaction data, floating fees approximate the fees
- -required to get into the `m`th block from now. This is configurable
- -with `-txconfirmtarget=<m>` (default: `2`).
- -
- -Sometimes, it is not possible to give good estimates, or an estimate
- -at all. Therefore, a fallback value can be set with `-fallbackfee=<f>`
- -(default: `0.0002` LTC/kB).
- -
- -At all times, Litecoin Core will cap fees at `-maxtxfee=<x>` (default:
- -0.10) LTC.
- -Furthermore, Litecoin Core will never create transactions paying less than
- -the current minimum relay fee.
- -Finally, a user can set the minimum fee rate for all transactions with
- -`-mintxfee=<i>`, which defaults to 1000 satoshis per kB.
- -
- -Wallet: Negative confirmations and conflict detection
- ------------------------------------------------------
- -
- -The wallet will now report a negative number for confirmations that indicates
- -how deep in the block chain the conflict is found. For example, if a transaction
- -A has 5 confirmations and spends the same input as a wallet transaction B, B
- -will be reported as having -5 confirmations. If another wallet transaction C
- -spends an output from B, it will also be reported as having -5 confirmations.
- -To detect conflicts with historical transactions in the chain a one-time
- -`-rescan` may be needed.
- -
- -Unlike earlier versions, unconfirmed but non-conflicting transactions will never
- -get a negative confirmation count. They are not treated as spendable unless
- -they're coming from ourself (change) and accepted into our local mempool,
- -however. The new "trusted" field in the `listtransactions` RPC output
- -indicates whether outputs of an unconfirmed transaction are considered
- -spendable.
- -
- -Wallet: Merkle branches removed
- --------------------------------
- -
- -Previously, every wallet transaction stored a Merkle branch to prove its
- -presence in blocks. This wasn't being used for more than an expensive
- -sanity check. Since 0.13.2, these are no longer stored. When loading a
- -0.13.2 wallet into an older version, it will automatically rescan to avoid
- -failed checks.
- -
- -Wallet: Pruning
- ----------------
- -
- -With 0.13.2 it is possible to use wallet functionality in pruned mode.
- -This can reduce the disk usage from currently around 6 GB to
- -around 0.2 GB.
- -
- -However, rescans as well as the RPCs `importwallet`, `importaddress`,
- -`importprivkey` are disabled.
- -
- -To enable block pruning set `prune=<N>` on the command line or in
- -`litecoin.conf`, where `N` is the number of MiB to allot for
- -raw block & undo data.
- -
- -A value of 0 disables pruning. The minimal value above 0 is 550. Your
- -wallet is as secure with high values as it is with low ones. Higher
- -values merely ensure that your node will not shut down upon blockchain
- -reorganizations of more than 2 days - which are unlikely to happen in
- -practice. In future releases, a higher value may also help the network
- -as a whole: stored blocks could be served to other nodes.
- -
- -For further information about pruning, you may also consult the [release
- -notes of Bitcoin Core v0.11.0](https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning).
- -
- -`NODE_BLOOM` service bit
- -------------------------
- -
- -Support for the `NODE_BLOOM` service bit, as described in [BIP
- -111](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki), has been
- -added to the P2P protocol code.
- -
- -BIP 111 defines a service bit to allow peers to advertise that they support
- -bloom filters (such as used by SPV clients) explicitly. It also bumps the protocol
- -version to allow peers to identify old nodes which allow bloom filtering of the
- -connection despite lacking the new service bit.
- -
- -In this version, it is only enforced for peers that send protocol versions
- -`>=70011`. For the next major version it is planned that this restriction will be
- -removed. It is recommended to update SPV clients to check for the `NODE_BLOOM`
- -service bit for nodes that report versions newer than 70011.
- -
- -Option parsing behavior
- ------------------------
- -
- -Command line options are now parsed strictly in the order in which they are
- -specified. It used to be the case that `-X -noX` ends up, unintuitively, with X
- -set, as `-X` had precedence over `-noX`. This is no longer the case. Like for
- -other software, the last specified value for an option will hold.
- -
- -RPC: Low-level API changes
- ---------------------------
- -
- -- Monetary amounts can be provided as strings. This means that for example the
- - argument to sendtoaddress can be "0.0001" instead of 0.0001. This can be an
- - advantage if a JSON library insists on using a lossy floating point type for
- - numbers, which would be dangerous for monetary amounts.
- -
- -* The `asm` property of each scriptSig now contains the decoded signature hash
- - type for each signature that provides a valid defined hash type.
- -
- -* OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP 65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)
- -
- -The following items contain assembly representations of scriptSig signatures
- -and are affected by this change:
- -
- -- RPC `getrawtransaction`
- -- RPC `decoderawtransaction`
- -- RPC `decodescript`
- -- REST `/rest/tx/` (JSON format)
- -- REST `/rest/block/` (JSON format when including extended tx details)
- -- `litecoin-tx -json`
- -
- -For example, the `scriptSig.asm` property of a transaction input that
- -previously showed an assembly representation of:
- -
- - 304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001 400000 OP_NOP2
- -
- -now shows as:
- -
- - 304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL] 400000 OP_CHECKLOCKTIMEVERIFY
- -
- -Note that the output of the RPC `decodescript` did not change because it is
- -configured specifically to process scriptPubKey and not scriptSig scripts.
- -
- -RPC: SSL support dropped
- -------------------------
- -
- -SSL support for RPC, previously enabled by the option `rpcssl` has been dropped
- -from both the client and the server. This was done in preparation for removing
- -the dependency on OpenSSL for the daemon completely.
- -
- -Trying to use `rpcssl` will result in an error:
- -
- - Error: SSL mode for RPC (-rpcssl) is no longer supported.
- -
- -If you are one of the few people that relies on this feature, a flexible
- -migration path is to use `stunnel`. This is an utility that can tunnel
- -arbitrary TCP connections inside SSL. On e.g. Ubuntu it can be installed with:
- -
- - sudo apt-get install stunnel4
- -
- -Then, to tunnel a SSL connection on 29332 to a RPC server bound on localhost on port 19334 do:
- -
- - stunnel -d 29332 -r 127.0.0.1:19334 -p stunnel.pem -P ''
- -
- -It can also be set up system-wide in inetd style.
- -
- -Another way to re-attain SSL would be to setup a httpd reverse proxy. This solution
- -would allow the use of different authentication, loadbalancing, on-the-fly compression and
- -caching. A sample config for apache2 could look like:
- -
- - Listen 443
- -
- - NameVirtualHost *:443
- - <VirtualHost *:443>
- -
- - SSLEngine On
- - SSLCertificateFile /etc/apache2/ssl/server.crt
- - SSLCertificateKeyFile /etc/apache2/ssl/server.key
- -
- - <Location /litecoinrpc>
- - ProxyPass http://127.0.0.1:9332/
- - ProxyPassReverse http://127.0.0.1:9332/
- - # optional enable digest auth
- - # AuthType Digest
- - # ...
- -
- - # optional bypass litecoind rpc basic auth
- - # RequestHeader set Authorization "Basic <hash>"
- - # get the <hash> from the shell with: base64 <<< litecoinrpc:<password>
- - </Location>
- -
- - # Or, balance the load:
- - # ProxyPass / balancer://balancer_cluster_name
- -
- - </VirtualHost>
- -
- -Other P2P Changes
- ------------------
- -
- -The list of banned peers is now stored on disk rather than in memory.
- -Restarting litecoind will no longer clear out the list of banned peers; instead
- -a new RPC call (`clearbanned`) can be used to manually clear the list. The new
- -`setban` RPC call can also be used to manually ban or unban a peer.
- -
- -Database cache memory increased
- ---------------------------------
- -
- -As a result of growth of the UTXO set, performance with the prior default
- -database cache of 100 MiB has suffered.
- -For this reason the default was changed to 300 MiB in this release.
- -
- -For nodes on low-memory systems, the database cache can be changed back to
- -100 MiB (or to another value) by either:
- -
- -- Adding `dbcache=100` in litecoin.conf
- -- Changing it in the GUI under `Options ? Size of database cache`
- -
- -Note that the database cache setting has the most performance impact
- -during initial sync of a node, and when catching up after downtime.
- -
- -
- -litecoin-cli: arguments privacy
- -------------------------------
- -
- -The RPC command line client gained a new argument, `-stdin`
- -to read extra arguments from standard input, one per line until EOF/Ctrl-D.
- -For example:
- -
- - $ src/litecoin-cli -stdin walletpassphrase
- - mysecretcode
- - 120
- - ..... press Ctrl-D here to end input
- - $
- -
- -It is recommended to use this for sensitive information such as wallet
- -passphrases, as command-line arguments can usually be read from the process
- -table by any user on the system.
- -
- -
- -C++11 and Python 3
- -------------------
- -
- -Various code modernizations have been done. The Litecoin Core code base has
- -started using C++11. This means that a C++11-capable compiler is now needed for
- -building. Effectively this means GCC 4.7 or higher, or Clang 3.3 or higher.
- -
- -When cross-compiling for a target that doesn't have C++11 libraries, configure with
- -`./configure --enable-glibc-back-compat ... LDFLAGS=-static-libstdc++`.
- -
- -For running the functional tests in `qa/rpc-tests`, Python3.4 or higher is now
- -required.
- -
- -
- -Linux ARM builds
- -----------------
- -
- -Due to popular request, Linux ARM builds have been added to the uploaded
- -executables.
- -
- -The following extra files can be found in the download directory or torrent:
- -
- -- `litecoin-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries for the most
- - common 32-bit ARM architecture.
- -- `litecoin-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries for the most
- - common 64-bit ARM architecture.
- -
- -ARM builds are still experimental. If you have problems on a certain device or
- -Linux distribution combination please report them on the bug tracker, it may be
- -possible to resolve them.
- -
- -Note that Android is not considered ARM Linux in this context. The executables
- -are not expected to work out of the box on Android.
- -
- -BIP68 soft fork to enforce sequence locks for relative locktime
- ----------------------------------------------------------------
- -
- -[BIP68][] introduces relative lock-time consensus-enforced semantics of
- -the sequence number field to enable a signed transaction input to remain
- -invalid for a defined period of time after confirmation of its corresponding
- -outpoint.
- -
- -For more information about the implementation, see
- -<https://github.com/bitcoin/bitcoin/pull/7184>
- -
- -BIP112 soft fork to enforce OP_CHECKSEQUENCEVERIFY
- ---------------------------------------------------
- -
- -[BIP112][] redefines the existing OP_NOP3 as OP_CHECKSEQUENCEVERIFY (CSV)
- -for a new opcode in the Litecoin scripting system that in combination with
- -[BIP68][] allows execution pathways of a script to be restricted based
- -on the age of the output being spent.
- -
- -For more information about the implementation, see
- -<https://github.com/bitcoin/bitcoin/pull/7524>
- -
- -BIP113 locktime enforcement soft fork
- --------------------------------------
- -
- -This release seeks to make mempool-only locktime enforcement using GetMedianTimePast()
- -a consensus rule.
- -
- -Litecoin transactions currently may specify a locktime indicating when
- -they may be added to a valid block. Current consensus rules require
- -that blocks have a block header time greater than the locktime specified
- -in any transaction in that block.
- -
- -Miners get to choose what time they use for their header time, with the
- -consensus rule being that no node will accept a block whose time is more
- -than two hours in the future. This creates a incentive for miners to
- -set their header times to future values in order to include locktimed
- -transactions which weren't supposed to be included for up to two more
- -hours.
- -
- -The consensus rules also specify that valid blocks may have a header
- -time greater than that of the median of the 11 previous blocks. This
- -GetMedianTimePast() time has a key feature we generally associate with
- -time: it can't go backwards.
- -
- -[BIP113][] specifies a soft fork enforced in this release that
- -weakens this perverse incentive for individual miners to use a future
- -time by requiring that valid blocks have a computed GetMedianTimePast()
- -greater than the locktime specified in any transaction in that block.
- -
- -Mempool inclusion rules currently require transactions to be valid for
- -immediate inclusion in a block in order to be accepted into the mempool.
- -This release begins applying the BIP113 rule to received transactions,
- -so transaction whose time is greater than the GetMedianTimePast() will
- -no longer be accepted into the mempool.
- -
- -**Implication for miners:** you will begin rejecting transactions that
- -would not be valid under BIP113, which will prevent you from producing
- -invalid blocks when BIP113 is enforced on the network. Any
- -transactions which are valid under the current rules but not yet valid
- -under the BIP113 rules will either be mined by other miners or delayed
- -until they are valid under BIP113. Note, however, that time-based
- -locktime transactions are more or less unseen on the network currently.
- -
- -**Implication for users:** GetMedianTimePast() always trails behind the
- -current time, so a transaction locktime set to the present time will be
- -rejected by nodes running this release until the median time moves
- -forward. To compensate, subtract one hour (3,600 seconds) from your
- -locktimes to allow those transactions to be included in mempools at
- -approximately the expected time.
- -
- -For more information about the implementation, see
- -<https://github.com/bitcoin/bitcoin/pull/6566>
- -
- -
- -Compact Block support (BIP 152)
- --------------------------------
- -
- -Support for block relay using the Compact Blocks protocol has been implemented
- -in PR 8068.
- -
- -The primary goal is reducing the bandwidth spikes at relay time, though in many
- -cases it also reduces propagation delay. It is automatically enabled between
- -compatible peers.
- -[BIP 152](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki)
- -
- -As a side-effect, ordinary non-mining nodes will download and upload blocks
- -faster if those blocks were produced by miners using similar transaction
- -filtering policies. This means that a miner who produces a block with many
- -transactions discouraged by your node will be relayed slower than one with
- -only transactions already in your memory pool. The overall effect of such
- -relay differences on the network may result in blocks which include widely-
- -discouraged transactions losing a stale block race, and therefore miners may
- -wish to configure their node to take common relay policies into consideration.
- -
- -
- -Hierarchical Deterministic Key Generation
- ------------------------------------------
- -Newly created wallets will use hierarchical deterministic key generation
- -according to BIP32 (keypath m/0'/0'/k').
- -Existing wallets will still use traditional key generation.
- -
- -Backups of HD wallets, regardless of when they have been created, can
- -therefore be used to re-generate all possible private keys, even the
- -ones which haven't already been generated during the time of the backup.
- -**Attention:** Encrypting the wallet will create a new seed which requires
- -a new backup!
- -
- -Wallet dumps (created using the `dumpwallet` RPC) will contain the deterministic
- -seed. This is expected to allow future versions to import the seed and all
- -associated funds, but this is not yet implemented.
- -
- -HD key generation for new wallets can be disabled by `-usehd=0`. Keep in
- -mind that this flag only has affect on newly created wallets.
- -You can't disable HD key generation once you have created a HD wallet.
- -
- -There is no distinction between internal (change) and external keys.
- -
- -HD wallets are incompatible with older versions of Litecoin Core.
- -
- -[Pull request](https://github.com/bitcoin/bitcoin/pull/8035/files), [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
- -
- -
- -Mining transaction selection ("Child Pays For Parent")
- -------------------------------------------------------
- -
- -The mining transaction selection algorithm has been replaced with an algorithm
- -that selects transactions based on their feerate inclusive of unconfirmed
- -ancestor transactions. This means that a low-fee transaction can become more
- -likely to be selected if a high-fee transaction that spends its outputs is
- -relayed.
- -
- -With this change, the `-blockminsize` command line option has been removed.
- -
- -The command line option `-blockmaxsize` remains an option to specify the
- -maximum number of serialized bytes in a generated block. In addition, the new
- -command line option `-blockmaxweight` has been added, which specifies the
- -maximum "block weight" of a generated block, as defined by [BIP 141 (Segregated
- -Witness)] (https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki).
- -
- -In preparation for Segregated Witness, the mining algorithm has been modified
- -to optimize transaction selection for a given block weight, rather than a given
- -number of serialized bytes in a block. In this release, transaction selection
- -is unaffected by this distinction (as BIP 141 activation is not supported on
- -mainnet in this release, see above), but in future releases and after BIP 141
- -activation, these calculations would be expected to differ.
- -
- -For optimal runtime performance, miners using this release should specify
- -`-blockmaxweight` on the command line, and not specify `-blockmaxsize`.
- -Additionally (or only) specifying `-blockmaxsize`, or relying on default
- -settings for both, may result in performance degradation, as the logic to
- -support `-blockmaxsize` performs additional computation to ensure that
- -constraint is met. (Note that for mainnet, in this release, the equivalent
- -parameter for `-blockmaxweight` would be four times the desired
- -`-blockmaxsize`. See [BIP 141]
- -(https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki) for additional
- -details.)
- -
- -In the future, the `-blockmaxsize` option may be removed, as block creation is
- -no longer optimized for this metric. Feedback is requested on whether to
- -deprecate or keep this command line option in future releases.
- -
- -
- -Reindexing changes
- -------------------
- -
- -In earlier versions, reindexing did validation while reading through the block
- -files on disk. These two have now been split up, so that all blocks are known
- -before validation starts. This was necessary to make certain optimizations that
- -are available during normal synchronizations also available during reindexing.
- -
- -The two phases are distinct in the Litecoin-Qt GUI. During the first one,
- -"Reindexing blocks on disk" is shown. During the second (slower) one,
- -"Processing blocks on disk" is shown.
- -
- -It is possible to only redo validation now, without rebuilding the block index,
- -using the command line option `-reindex-chainstate` (in addition to
- -`-reindex` which does both). This new option is useful when the blocks on disk
- -are assumed to be fine, but the chainstate is still corrupted. It is also
- -useful for benchmarks.
- -
- -
- -Removal of internal miner
- ---------------------------
- -
- -As CPU mining has been useless for a long time, the internal miner has been
- -removed in this release, and replaced with a simpler implementation for the
- -test framework.
- -
- -The overall result of this is that `setgenerate` RPC call has been removed, as
- -well as the `-gen` and `-genproclimit` command-line options.
- -
- -For testing, the `generate` call can still be used to mine a block, and a new
- -RPC call `generatetoaddress` has been added to mine to a specific address. This
- -works with wallet disabled.
- -
- -
- -New bytespersigop implementation
- ---------------------------------
- -
- -The former implementation of the bytespersigop filter accidentally broke bare
- -multisig (which is meant to be controlled by the `permitbaremultisig` option),
- -since the consensus protocol always counts these older transaction forms as 20
- -sigops for backwards compatibility. Simply fixing this bug by counting more
- -accurately would have reintroduced a vulnerability. It has therefore been
- -replaced with a new implementation that rather than filter such transactions,
- -instead treats them (for fee purposes only) as if they were in fact the size
- -of a transaction actually using all 20 sigops.
- -
- -
- -Low-level P2P changes
- -----------------------
- -
- -- The optional new p2p message "feefilter" is implemented and the protocol
- - version is bumped to 70013. Upon receiving a feefilter message from a peer,
- - a node will not send invs for any transactions which do not meet the filter
- - feerate. [BIP 133](https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki)
- -
- -- The P2P alert system has been removed in PR #7692 and the `alert` P2P message
- - is no longer supported.
- -
- -- The transaction relay mechanism used to relay one quarter of all transactions
- - instantly, while queueing up the rest and sending them out in batch. As
- - this resulted in chains of dependent transactions being reordered, it
- - systematically hurt transaction relay. The relay code was redesigned in PRs
- - \#7840 and #8082, and now always batches transactions announcements while also
- - sorting them according to dependency order. This significantly reduces orphan
- - transactions. To compensate for the removal of instant relay, the frequency of
- - batch sending was doubled for outgoing peers.
- -
- -- Since PR #7840 the BIP35 `mempool` command is also subject to batch processing.
- - Also the `mempool` message is no longer handled for non-whitelisted peers when
- - `NODE_BLOOM` is disabled through `-peerbloomfilters=0`.
- -
- -- The maximum size of orphan transactions that are kept in memory until their
- - ancestors arrive has been raised in PR #8179 from 5000 to 99999 bytes. They
- - are now also removed from memory when they are included in a block, conflict
- - with a block, and time out after 20 minutes.
- -
- -- We respond at most once to a getaddr request during the lifetime of a
- - connection since PR #7856.
- -
- -- Connections to peers who have recently been the first one to give us a valid
- - new block or transaction are protected from disconnections since PR #8084.
- -
- -
- -Low-level RPC changes
- -----------------------
- -
- -- RPC calls have been added to output detailed statistics for individual mempool
- - entries, as well as to calculate the in-mempool ancestors or descendants of a
- - transaction: see `getmempoolentry`, `getmempoolancestors`, `getmempooldescendants`.
- -
- -- `gettxoutsetinfo` UTXO hash (`hash_serialized`) has changed. There was a divergence between
- - 32-bit and 64-bit platforms, and the txids were missing in the hashed data. This has been
- - fixed, but this means that the output will be different than from previous versions.
- -
- -- Full UTF-8 support in the RPC API. Non-ASCII characters in, for example,
- - wallet labels have always been malformed because they weren't taken into account
- - properly in JSON RPC processing. This is no longer the case. This also affects
- - the GUI debug console.
- -
- -- Asm script outputs replacements for OP_NOP2 and OP_NOP3
- -
- - - OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP
- -65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)
- -
- - - OP_NOP3 has been renamed to OP_CHECKSEQUENCEVERIFY by [BIP
- -112](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki)
- -
- - - The following outputs are affected by this change:
- -
- - - RPC `getrawtransaction` (in verbose mode)
- - - RPC `decoderawtransaction`
- - - RPC `decodescript`
- - - REST `/rest/tx/` (JSON format)
- - - REST `/rest/block/` (JSON format when including extended tx details)
- - - `litecoin-tx -json`
- -
- -- The sorting of the output of the `getrawmempool` output has changed.
- -
- -- New RPC commands: `generatetoaddress`, `importprunedfunds`, `removeprunedfunds`, `signmessagewithprivkey`,
- - `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry`,
- - `createwitnessaddress`, `addwitnessaddress`.
- -
- -- Removed RPC commands: `setgenerate`, `getgenerate`.
- -
- -- New options were added to `fundrawtransaction`: `includeWatching`, `changeAddress`, `changePosition` and `feeRate`.
- -
- -
- -Low-level ZMQ changes
- -----------------------
- -
- -- Each ZMQ notification now contains an up-counting sequence number that allows
- - listeners to detect lost notifications.
- - The sequence number is always the last element in a multi-part ZMQ notification and
- - therefore backward compatible. Each message type has its own counter.
- - PR [#7762](https://github.com/bitcoin/bitcoin/pull/7762).
- -
- -Segregated witness soft fork
- -----------------------------
- -
- -Segregated witness (segwit) is a soft fork that, if activated, will
- -allow transaction-producing software to separate (segregate) transaction
- -signatures (witnesses) from the part of the data in a transaction that is
- -covered by the txid. This provides several immediate benefits:
- -
- -- **Elimination of unwanted transaction malleability:** Segregating the witness
- - allows both existing and upgraded software to calculate the transaction
- - identifier (txid) of transactions without referencing the witness, which can
- - sometimes be changed by third-parties (such as miners) or by co-signers in a
- - multisig spend. This solves all known cases of unwanted transaction
- - malleability, which is a problem that makes programming Litecoin wallet
- - software more difficult and which seriously complicates the design of smart
- - contracts for Litecoin.
- -
- -- **Capacity increase:** Segwit transactions contain new fields that are not
- - part of the data currently used to calculate the size of a block, which
- - allows a block containing segwit transactions to hold more data than allowed
- - by the current maximum block size. Estimates based on the transactions
- - currently found in blocks indicate that if all wallets switch to using
- - segwit, the network will be able to support about 70% more transactions. The
- - network will also be able to support more of the advanced-style payments
- - (such as multisig) than it can support now because of the different weighting
- - given to different parts of a transaction after segwit activates (see the
- - following section for details).
- -
- -- **Weighting data based on how it affects node performance:** Some parts of
- - each Litecoin block need to be stored by nodes in order to validate future
- - blocks; other parts of a block can be immediately forgotten (pruned) or used
- - only for helping other nodes sync their copy of the block chain. One large
- - part of the immediately prunable data are transaction signatures (witnesses),
- - and segwit makes it possible to give a different "weight" to segregated
- - witnesses to correspond with the lower demands they place on node resources.
- - Specifically, each byte of a segregated witness is given a weight of 1, each
- - other byte in a block is given a weight of 4, and the maximum allowed weight
- - of a block is 4 million. Weighting the data this way better aligns the most
- - profitable strategy for creating blocks with the long-term costs of block
- - validation.
- -
- -- **Signature covers value:** A simple improvement in the way signatures are
- - generated in segwit simplifies the design of secure signature generators
- - (such as hardware wallets), reduces the amount of data the signature
- - generator needs to download, and allows the signature generator to operate
- - more quickly. This is made possible by having the generator sign the amount
- - of litecoins they think they are spending, and by having full nodes refuse to
- - accept those signatures unless the amount of litecoins being spent is exactly
- - the same as was signed. For non-segwit transactions, wallets instead had to
- - download the complete previous transactions being spent for every payment
- - they made, which could be a slow operation on hardware wallets and in other
- - situations where bandwidth or computation speed was constrained.
- -
- -- **Linear scaling of sighash operations:** In 2015 a block was produced that
- - required about 25 seconds to validate on modern hardware because of the way
- - transaction signature hashes are performed. Other similar blocks, or blocks
- - that could take even longer to validate, can still be produced today. The
- - problem that caused this can't be fixed in a soft fork without unwanted
- - side-effects, but transactions that opt-in to using segwit will now use a
- - different signature method that doesn't suffer from this problem and doesn't
- - have any unwanted side-effects.
- -
- -- **Increased security for multisig:** Litecoin addresses (both P2PKH addresses
- - that start with a '1' and P2SH addresses that start with a '3' or 'M') use a hash
- - function known as RIPEMD-160. For P2PKH addresses, this provides about 160
- - bits of security---which is beyond what cryptographers believe can be broken
- - today. But because P2SH is more flexible, only about 80 bits of security is
- - provided per address. Although 80 bits is very strong security, it is within
- - the realm of possibility that it can be broken by a powerful adversary.
- - Segwit allows advanced transactions to use the SHA256 hash function instead,
- - which provides about 128 bits of security (that is 281 trillion times as
- - much security as 80 bits and is equivalent to the maximum bits of security
- - believed to be provided by Litecoin's choice of parameters for its Elliptic
- - Curve Digital Security Algorithm [ECDSA].)
- -
- -- **More efficient almost-full-node security** Satoshi Nakamoto's original
- - Bitcoin paper describes a method for allowing newly-started full nodes to
- - skip downloading and validating some data from historic blocks that are
- - protected by large amounts of proof of work. Unfortunately, Nakamoto's
- - method can't guarantee that a newly-started node using this method will
- - produce an accurate copy of Litecoin's current ledger (called the UTXO set),
- - making the node vulnerable to falling out of consensus with other nodes.
- - Although the problems with Nakamoto's method can't be fixed in a soft fork,
- - Segwit accomplishes something similar to his original proposal: it makes it
- - possible for a node to optionally skip downloading some blockchain data
- - (specifically, the segregated witnesses) while still ensuring that the node
- - can build an accurate copy of the UTXO set for the block chain with the most
- - proof of work. Segwit enables this capability at the consensus layer, but
- - note that Litecoin Core does not provide an option to use this capability as
- - of this 0.13.2 release.
- -
- -- **Script versioning:** Segwit makes it easy for future soft forks to allow
- - Litecoin users to individually opt-in to almost any change in the Litecoin
- - Script language when those users receive new transactions. Features
- - currently being researched by Bitcoin and Litecoin Core contributors that may
- - use this capability include support for Schnorr signatures, which can improve
- - the privacy and efficiency of multisig transactions (or transactions with
- - multiple inputs), and Merklized Abstract Syntax Trees (MAST), which can
- - improve the privacy and efficiency of scripts with two or more conditions.
- - Other Bitcoin community members are studying several other improvements
- - that can be made using script versioning.
- -
- -Activation for the segwit soft fork is being managed using
- -BIP9. At the beginning of the first retarget period after
- -segwit's start date of 1 January 2017 miners can update the Litecoin
- -client to Litecoin Core 0.13.2 to signal for segwit support. When a
- -super-majority of 75% is reached segwit is activated by optional, and
- -if 75% of blocks within a 8,064-block retarget period (about 3.5 days)
- -signal support for segwit, after another 8,064 blocks, segwit will
- -be required.
- -
- -For more information about segwit, please see the [segwit FAQ][], the
- -[segwit wallet developers guide][] or BIPs [141][BIP141], [143][BIP143],
- -[144][BIP144], and [145][BIP145].
- -
- -[Segwit FAQ]: https://bitcoincore.org/en/2016/01/26/segwit-benefits/
- -[segwit wallet developers guide]: https://bitcoincore.org/en/segwit_wallet_dev/
- -[BIP141]: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki
- -[BIP143]: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki
- -[BIP144]: https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki
- -[BIP145]: https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
- -
- -
- -Null dummy soft fork
- --------------------
- -
- -Combined with the segwit soft fork is an additional change that turns a
- -long-existing network relay policy into a consensus rule. The
- -`OP_CHECKMULTISIG` and `OP_CHECKMULTISIGVERIFY` opcodes consume an extra
- -stack element ("dummy element") after signature validation. The dummy
- -element is not inspected in any manner, and could be replaced by any
- -value without invalidating the script.
- -
- -Because any value can be used for this dummy element, it's possible for
- -a third-party to insert data into other people's transactions, changing
- -the transaction's txid (called transaction malleability) and possibly
- -causing other problems.
- -
- -Since Litecoin Core 0.10.0, nodes have defaulted to only relaying and
- -mining transactions whose dummy element was a null value (0x00, also
- -called OP_0). The null dummy soft fork turns this relay rule into a
- -consensus rule both for non-segwit transactions and segwit transactions,
- -so that this method of mutating transactions is permanently eliminated
- -from the network.
- -
- -Signaling for the null dummy soft fork is done by signaling support
- -for segwit, and the null dummy soft fork will activate at the same time
- -as segwit.
- -
- -For more information, please see [BIP147][].
- -
- -[BIP147]: https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki
- -
- -Low-level RPC changes
- ----------------------
- -
- -- `importprunedfunds` only accepts two required arguments. Some versions accept
- - an optional third arg, which was always ignored. Make sure to never pass more
- - than two arguments.
- -
- -
- -Linux ARM builds
- -----------------
- -
- -Pre-built Linux ARM binaries have been added to the set of uploaded executables.
- -Additional detail on the ARM architecture targeted by each is provided below.
- -
- -The following extra files can be found in the download directory or torrent:
- -
- -- `litecoin-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries targeting
- - the 32-bit ARMv7-A architecture.
- -- `litecoin-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries targeting
- - the 64-bit ARMv8-A architecture.
- -
- -ARM builds are still experimental. If you have problems on a certain device or
- -Linux distribution combination please report them on the bug tracker, it may be
- -possible to resolve them. Note that the device you use must be (backward)
- -compatible with the architecture targeted by the binary that you use.
- -For example, a Raspberry Pi 2 Model B or Raspberry Pi 3 Model B (in its 32-bit
- -execution state) device, can run the 32-bit ARMv7-A targeted binary. However,
- -no model of Raspberry Pi 1 device can run either binary because they are all
- -ARMv6 architecture devices that are not compatible with ARMv7-A or ARMv8-A.
- -
- -Note that Android is not considered ARM Linux in this context. The executables
- -are not expected to work out of the box on Android.
- -
- -
- -Change to wallet handling of mempool rejection
- ------------------------------------------------
- -
- -When a newly created transaction failed to enter the mempool due to
- -the limits on chains of unconfirmed transactions the sending RPC
- -calls would return an error. The transaction would still be queued
- -in the wallet and, once some of the parent transactions were
- -confirmed, broadcast after the software was restarted.
- -
- -This behavior has been changed to return success and to reattempt
- -mempool insertion at the same time transaction rebroadcast is
- -attempted, avoiding a need for a restart.
- -
- -Transactions in the wallet which cannot be accepted into the mempool
- -can be abandoned with the previously existing abandontransaction RPC
- -(or in the GUI via a context menu on the transaction).
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- [The Bitcoin Core Developers](/doc/release-notes)
- -- Charles Lee
- -- Adrian Gallagher
- -- shaolinfry
- -- Xinxi Wang
- -- Xinrong Guo
- -- Fan Yang
- -- Peng Sun
- -- Loshan T
- diff --git a/doc/litecoin-release-notes/release-notes-0.13.3.md b/doc/litecoin-release-notes/release-notes-0.13.3.md
- deleted file mode 100644
- index 3fc2dd0..0000000
- --- a/doc/litecoin-release-notes/release-notes-0.13.3.md
- +++ /dev/null
- @@ -1,80 +0,0 @@
- -Litecoin Core version 0.13.3 is now available from:
- -
- - <https://download.litecoin.org/litecoin-0.13.3/>
- -
- -This is a new minor version release, including new features, various bugfixes and performance improvements.
- -It is recommended to upgrade to this version.
- -
- -Please report bugs using the issue tracker at github:
- -
- - <https://github.com/litecoin-project/litecoin/issues>
- -
- -Compatibility
- -==============
- -
- -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support),
- -an OS initially released in 2001. This means that not even critical security
- -updates will be released anymore. Without security updates, using a litecoin
- -wallet on a XP machine is irresponsible at least.
- -
- -In addition to that, with 0.12.x there have been varied reports of Bitcoin Core
- -randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891)
- -what the source of these crashes is, but it is likely that upstream
- -libraries such as Qt are no longer being tested on XP.
- -
- -We do not have time nor resources to provide support for an OS that is
- -end-of-life. From 0.13.0 on, Windows XP is no longer supported. Users are
- -suggested to upgrade to a newer version of Windows, or install an alternative OS
- -that is supported.
- -
- -No attempt is made to prevent installing or running the software on Windows XP,
- -you can still do so at your own risk, but do not expect it to work: do not
- -report issues about Windows XP to the issue tracker.
- -
- -From 0.13.1 onwards OS X 10.7 is no longer supported. 0.13.0 was intended to work on 10.7+,
- -but severe issues with the libc++ version on 10.7.x keep it from running reliably.
- -0.13.1 now requires 10.8+, and will communicate that to 10.7 users, rather than crashing unexpectedly.
- -
- -Notable changes
- -===============
- -
- -New Multisig Address Prefix
- ----------------------------
- -
- -Litecoin Core now supports P2SH addresses beginning with M on mainnet and Q on testnet.
- -P2SH addresses beginning with 3 on mainnet and m or n on testnet will continue to be valid.
- -Old and new addresses can be used interchangeably.
- -
- -miniupnp CVE-2017-8798
- -----------------------
- -
- -Bundled miniupnpc was updated to 2.0.20170509. This fixes an integer signedness error (present in MiniUPnPc v1.4.20101221 through v2.0) that allows remote attackers (within the LAN) to cause a denial of service or possibly have unspecified other impact.
- -
- -This only affects users that have explicitly enabled UPnP through the GUI setting or through the -upnp option, as since the last UPnP vulnerability (in Litecoin Core 0.10.4) it has been disabled by default.
- -
- -If you use this option, it is recommended to upgrade to this version as soon as possible.
- -
- -Reset Testnet
- --------------
- -
- -Testnet3 has been deprecated and replaced with Testnet4. The server port has been changed to 19335 however the RPC port remains
- -the same (19332).
- -
- -Testnet faucets can be located at:
- -- http://testnet.litecointools.com
- -- http://testnet.thrasher.io
- -
- -Developers who require the new testnet blockchain paramaters can find them [here](https://github.com/litecoin-project/litecoin/blob/0.13/src/chainparams.cpp#L214).
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- [The Bitcoin Core Developers](/doc/release-notes)
- -- Adrian Gallagher
- -- Shaolin Fry
- -- Xinxi Wang
- -- Out0fmemory
- -- Erasmospunk
- -- Romanornr
- \ No newline at end of file
- diff --git a/doc/litecoin-release-notes/release-notes-0.14.2.md b/doc/litecoin-release-notes/release-notes-0.14.2.md
- deleted file mode 100644
- index 3118267..0000000
- --- a/doc/litecoin-release-notes/release-notes-0.14.2.md
- +++ /dev/null
- @@ -1,429 +0,0 @@
- -Litecoin Core version 0.14.2 is now available from:
- -
- - <https://download.litecoin.org/litecoin-0.14.2.0/>
- -
- -This is a new major version release, including new features, various bugfixes
- -and performance improvements, as well as updated translations.
- -
- -Please report bugs using the issue tracker at github:
- -
- - <https://github.com/litecoin-project/litecoin/issues>
- -
- -To receive security and update notifications, please subscribe to:
- -
- - <https://groups.google.com/forum/#!forum/litecoin-dev>
- -
- -Compatibility
- -==============
- -
- -Litecoin Core is extensively tested on multiple operating systems using
- -the Linux kernel, macOS 10.8+, and Windows Vista and later.
- -
- -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support),
- -No attempt is made to prevent installing or running the software on Windows XP, you
- -can still do so at your own risk but be aware that there are known instabilities and issues.
- -Please do not report issues about Windows XP to the issue tracker.
- -
- -Litecoin Core should also work on most other Unix-like systems but is not
- -frequently tested on them.
- -
- -Notable changes
- -===============
- -
- -New Multisig Address Prefix
- ----------------------------
- -
- -Litecoin Core now supports P2SH addresses beginning with M on mainnet and Q on testnet.
- -P2SH addresses beginning with 3 on mainnet and m or n on testnet will continue to be valid.
- -Old and new addresses can be used interchangeably.
- -
- -miniupnp CVE-2017-8798
- -----------------------
- -
- -Bundled miniupnpc was updated to 2.0.20170509. This fixes an integer signedness error (present in MiniUPnPc v1.4.20101221 through v2.0) that allows remote attackers (within the LAN) to cause a denial of service or possibly have unspecified other impact.
- -
- -This only affects users that have explicitly enabled UPnP through the GUI setting or through the -upnp option, as since the last UPnP vulnerability (in Litecoin Core 0.10.4) it has been disabled by default.
- -
- -If you use this option, it is recommended to upgrade to this version as soon as possible.
- -
- -Reset Testnet
- --------------
- -
- -Testnet3 has been deprecated and replaced with Testnet4. The server port has been changed to 19335 however the RPC port remains
- -the same (19332).
- -
- -Testnet faucets can be located at:
- -- http://testnet.litecointools.com
- -- http://testnet.thrasher.io
- -
- -Developers who require the new testnet blockchain paramaters can find them [here](https://github.com/litecoin-project/litecoin/blob/master/src/chainparams.cpp#L220).
- -
- -Performance Improvements
- ---------------
- -
- -Validation speed and network propagation performance have been greatly
- -improved, leading to much shorter sync and initial block download times.
- -
- -- The script signature cache has been reimplemented as a "cuckoo cache",
- - allowing for more signatures to be cached and faster lookups.
- -- Assumed-valid blocks have been introduced which allows script validation to
- - be skipped for ancestors of known-good blocks, without changing the security
- - model. See below for more details.
- -- In some cases, compact blocks are now relayed before being fully validated as
- - per BIP152.
- -- P2P networking has been refactored with a focus on concurrency and
- - throughput. Network operations are no longer bottlenecked by validation. As a
- - result, block fetching is several times faster than previous releases in many
- - cases.
- -- The UTXO cache now claims unused mempool memory. This speeds up initial block
- - download as UTXO lookups are a major bottleneck there, and there is no use for
- - the mempool at that stage.
- -
- -
- -Manual Pruning
- ---------------
- -
- -Litecoin Core has supported automatically pruning the blockchain since 0.13.2. Pruning
- -the blockchain allows for significant storage space savings as the vast majority of
- -the downloaded data can be discarded after processing so very little of it remains
- -on the disk.
- -
- -Manual block pruning can now be enabled by setting `-prune=1`. Once that is set,
- -the RPC command `pruneblockchain` can be used to prune the blockchain up to the
- -specified height or timestamp.
- -
- -`getinfo` Deprecated
- ---------------------
- -
- -The `getinfo` RPC command has been deprecated. Each field in the RPC call
- -has been moved to another command's output with that command also giving
- -additional information that `getinfo` did not provide. The following table
- -shows where each field has been moved to:
- -
- -|`getinfo` field | Moved to |
- -|------------------|-------------------------------------------|
- -`"version"` | `getnetworkinfo()["version"]`
- -`"protocolversion"`| `getnetworkinfo()["protocolversion"]`
- -`"walletversion"` | `getwalletinfo()["walletversion"]`
- -`"balance"` | `getwalletinfo()["balance"]`
- -`"blocks"` | `getblockchaininfo()["blocks"]`
- -`"timeoffset"` | `getnetworkinfo()["timeoffset"]`
- -`"connections"` | `getnetworkinfo()["connections"]`
- -`"proxy"` | `getnetworkinfo()["networks"][0]["proxy"]`
- -`"difficulty"` | `getblockchaininfo()["difficulty"]`
- -`"testnet"` | `getblockchaininfo()["chain"] == "test"`
- -`"keypoololdest"` | `getwalletinfo()["keypoololdest"]`
- -`"keypoolsize"` | `getwalletinfo()["keypoolsize"]`
- -`"unlocked_until"` | `getwalletinfo()["unlocked_until"]`
- -`"paytxfee"` | `getwalletinfo()["paytxfee"]`
- -`"relayfee"` | `getnetworkinfo()["relayfee"]`
- -`"errors"` | `getnetworkinfo()["warnings"]`
- -
- -ZMQ On Windows
- ---------------
- -
- -Previously the ZeroMQ notification system was unavailable on Windows
- -due to various issues with ZMQ. These have been fixed upstream and
- -now ZMQ can be used on Windows. Please see [this document](https://github.com/litecoin-project/litecoin/blob/master/doc/zmq.md) for
- -help with using ZMQ in general.
- -
- -Nested RPC Commands in Debug Console
- -------------------------------------
- -
- -The ability to nest RPC commands has been added to the debug console. This
- -allows users to have the output of a command become the input to another
- -command without running the commands separately.
- -
- -The nested RPC commands use bracket syntax (i.e. `getwalletinfo()`) and can
- -be nested (i.e. `getblock(getblockhash(1))`). Simple queries can be
- -done with square brackets where object values are accessed with either an
- -array index or a non-quoted string (i.e. `listunspent()[0][txid]`). Both
- -commas and spaces can be used to separate parameters in both the bracket syntax
- -and normal RPC command syntax.
- -
- -Network Activity Toggle
- ------------------------
- -
- -A RPC command and GUI toggle have been added to enable or disable all p2p
- -network activity. The network status icon in the bottom right hand corner
- -is now the GUI toggle. Clicking the icon will either enable or disable all
- -p2p network activity. If network activity is disabled, the icon will
- -be grayed out with an X on top of it.
- -
- -Additionally the `setnetworkactive` RPC command has been added which does
- -the same thing as the GUI icon. The command takes one boolean parameter,
- -`true` enables networking and `false` disables it.
- -
- -Out-of-sync Modal Info Layer
- -----------------------------
- -
- -When Litecoin Core is out-of-sync on startup, a semi-transparent information
- -layer will be shown over top of the normal display. This layer contains
- -details about the current sync progress and estimates the amount of time
- -remaining to finish syncing. This layer can also be hidden and subsequently
- -unhidden by clicking on the progress bar at the bottom of the window.
- -
- -Support for JSON-RPC Named Arguments
- -------------------------------------
- -
- -Commands sent over the JSON-RPC interface and through the `litecoin-cli` binary
- -can now use named arguments. This follows the [JSON-RPC specification](http://www.jsonrpc.org/specification)
- -for passing parameters by-name with an object.
- -
- -`litecoin-cli` has been updated to support this by parsing `name=value` arguments
- -when the `-named` option is given.
- -
- -Some examples:
- -
- - src/litecoin-cli -named help command="help"
- - src/litecoin-cli -named getblockhash height=0
- - src/litecoin-cli -named getblock blockhash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
- - src/litecoin-cli -named sendtoaddress address="(snip)" amount="1.0" subtractfeefromamount=true
- -
- -The order of arguments doesn't matter in this case. Named arguments are also
- -useful to leave out arguments that should stay at their default value. The
- -rarely-used arguments `comment` and `comment_to` to `sendtoaddress`, for example, can
- -be left out. However, this is not yet implemented for many RPC calls, this is
- -expected to land in a later release.
- -
- -The RPC server remains fully backwards compatible with positional arguments.
- -
- -Sensitive Data Is No Longer Stored In Debug Console History
- ------------------------------------------------------------
- -
- -The debug console maintains a history of previously entered commands that can be
- -accessed by pressing the Up-arrow key so that users can easily reuse previously
- -entered commands. Commands which have sensitive information such as passphrases and
- -private keys will now have a `(...)` in place of the parameters when accessed through
- -the history.
- -
- -Retaining the Mempool Across Restarts
- --------------------------------------
- -
- -The mempool will be saved to the data directory prior to shutdown
- -to a `mempool.dat` file. This file preserves the mempool so that when the node
- -restarts the mempool can be filled with transactions without waiting for new transactions
- -to be created. This will also preserve any changes made to a transaction through
- -commands such as `prioritisetransaction` so that those changes will not be lost.
- -
- -Final Alert
- ------------
- -
- -The Alert System was disabled and deprecated in Litecoin Core 0.10.4 and removed in 0.13.2.
- -The Alert System was retired with a maximum sequence final alert which causes any nodes
- -supporting the Alert System to display a static hard-coded "Alert Key Compromised" message which also
- -prevents any other alerts from overriding it. This final alert is hard-coded into this release
- -so that all old nodes receive the final alert.
- -
- -GUI Changes
- ------------
- -
- - - After resetting the options by clicking the `Reset Options` button
- - in the options dialog or with the `-resetguioptions` startup option,
- - the user will be prompted to choose the data directory again. This
- - is to ensure that custom data directories will be kept after the
- - option reset which clears the custom data directory set via the choose
- - datadir dialog.
- -
- - - Multiple peers can now be selected in the list of peers in the debug
- - window. This allows for users to ban or disconnect multiple peers
- - simultaneously instead of banning them one at a time.
- -
- - - An indicator has been added to the bottom right hand corner of the main
- - window to indicate whether the wallet being used is a HD wallet. This
- - icon will be grayed out with an X on top of it if the wallet is not a
- - HD wallet.
- -
- -Low-level RPC changes
- -----------------------
- -
- - - `importprunedfunds` only accepts two required arguments. Some versions accept
- - an optional third arg, which was always ignored. Make sure to never pass more
- - than two arguments.
- -
- - - The first boolean argument to `getaddednodeinfo` has been removed. This is
- - an incompatible change.
- -
- - - RPC command `getmininginfo` loses the "testnet" field in favor of the more
- - generic "chain" (which has been present for years).
- -
- - - A new RPC command `preciousblock` has been added which marks a block as
- - precious. A precious block will be treated as if it were received earlier
- - than a competing block.
- -
- - - A new RPC command `importmulti` has been added which receives an array of
- - JSON objects representing the intention of importing a public key, a
- - private key, an address and script/p2sh
- -
- - - Use of `getrawtransaction` for retrieving confirmed transactions with unspent
- - outputs has been deprecated. For now this will still work, but in the future
- - it may change to only be able to retrieve information about transactions in
- - the mempool or if `txindex` is enabled.
- -
- - - A new RPC command `getmemoryinfo` has been added which will return information
- - about the memory usage of Litecoin Core. This was added in conjunction with
- - optimizations to memory management. See [Pull #8753](https://github.com/bitcoin/bitcoin/pull/8753)
- - for more information.
- -
- - - A new RPC command `bumpfee` has been added which allows replacing an
- - unconfirmed wallet transaction that signaled RBF (see the `-walletrbf`
- - startup option above) with a new transaction that pays a higher fee, and
- - should be more likely to get confirmed quickly.
- -
- - - The first positional argument of `createrawtransaction` was renamed from
- - `transactions` to `inputs`.
- -
- - - The argument of `disconnectnode` was renamed from `node` to `address`.
- -
- -Client software using these calls with named arguments needs to be updated.
- -
- -HTTP REST Changes
- ------------------
- -
- - - UTXO set query (`GET /rest/getutxos/<checkmempool>/<txid>-<n>/<txid>-<n>
- - /.../<txid>-<n>.<bin|hex|json>`) responses were changed to return status
- - code `HTTP_BAD_REQUEST` (400) instead of `HTTP_INTERNAL_SERVER_ERROR` (500)
- - when requests contain invalid parameters.
- -
- -Minimum Fee Rate Policies
- --------------------------
- -
- -Since the changes in 0.13 to automatically limit the size of the mempool and improve the performance of block creation in mining code it has not been important for relay nodes or miners to set `-minrelaytxfee`. With this release the following concepts that were tied to this option have been separated out:
- -- calculation of threshold for a dust output. (effectively 3 * 1000 satoshis/kB)
- -- minimum fee rate of a package of transactions to be included in a block created by the mining code. If miners wish to set this minimum they can use the new `-blockmintxfee` option. (defaults to 1000 satoshis/kB)
- -
- -The `-minrelaytxfee` option continues to exist but is recommended to be left unset.
- -
- -Fee Estimation Changes
- -----------------------
- -
- -- Since 0.13.2 fee estimation for a confirmation target of 1 block has been
- - disabled. The fee slider will no longer be able to choose a target of 1 block.
- - This is only a minor behavior change as there was often insufficient
- - data for this target anyway. `estimatefee 1` will now always return -1 and
- - `estimatesmartfee 1` will start searching at a target of 2.
- -
- -- The default target for fee estimation is changed to 6 blocks in both the GUI
- - (previously 25) and for RPC calls (previously 2).
- -
- -Removal of Priority Estimation
- -------------------------------
- -
- -- Estimation of "priority" needed for a transaction to be included within a target
- - number of blocks has been removed. The RPC calls are deprecated and will either
- - return -1 or 1e24 appropriately. The format for `fee_estimates.dat` has also
- - changed to no longer save these priority estimates. It will automatically be
- - converted to the new format which is not readable by prior versions of the
- - software.
- -
- -- Support for "priority" (coin age) transaction sorting for mining is
- - considered deprecated in Core and will be removed in the next major version.
- - This is not to be confused with the `prioritisetransaction` RPC which will remain
- - supported by Core for adding fee deltas to transactions.
- -
- -P2P connection management
- ---------------------------
- -
- -- Peers manually added through the `-addnode` option or `addnode` RPC now have their own
- - limit of eight connections which does not compete with other inbound or outbound
- - connection usage and is not subject to the limitation imposed by the `-maxconnections`
- - option.
- -
- -- New connections to manually added peers are performed more quickly.
- -
- -Introduction of assumed-valid blocks
- --------------------------------------
- -
- -- A significant portion of the initial block download time is spent verifying
- - scripts/signatures. Although the verification must pass to ensure the security
- - of the system, no other result from this verification is needed: If the node
- - knew the history of a given block were valid it could skip checking scripts
- - for its ancestors.
- -
- -- A new configuration option 'assumevalid' is provided to express this knowledge
- - to the software. Unlike the 'checkpoints' in the past this setting does not
- - force the use of a particular chain: chains that are consistent with it are
- - processed quicker, but other chains are still accepted if they'd otherwise
- - be chosen as best. Also unlike 'checkpoints' the user can configure which
- - block history is assumed true, this means that even outdated software can
- - sync more quickly if the setting is updated by the user.
- -
- -- Because the validity of a chain history is a simple objective fact it is much
- - easier to review this setting. As a result the software ships with a default
- - value adjusted to match the current chain shortly before release. The use
- - of this default value can be disabled by setting -assumevalid=0
- -
- -Fundrawtransaction change address reuse
- -----------------------------------------
- -
- -- Before 0.14, `fundrawtransaction` was by default wallet stateless. In
- - almost all cases `fundrawtransaction` does add a change-output to the
- - outputs of the funded transaction. Before 0.14, the used keypool key was
- - never marked as change-address key and directly returned to the keypool
- - (leading to address reuse). Before 0.14, calling `getnewaddress`
- - directly after `fundrawtransaction` did generate the same address as
- - the change-output address.
- -
- -- Since 0.14, fundrawtransaction does reserve the change-output-key from
- - the keypool by default (optional by setting `reserveChangeKey`, default =
- - `true`)
- -
- -- Users should also consider using `getrawchangeaddress()` in conjunction
- - with `fundrawtransaction`'s `changeAddress` option.
- -
- -Unused mempool memory used by coincache
- -----------------------------------------
- -
- -- Before 0.14, memory reserved for mempool (using the `-maxmempool` option)
- - went unused during initial block download, or IBD. In 0.14, the UTXO DB cache
- - (controlled with the `-dbcache` option) borrows memory from the mempool
- - when there is extra memory available. This may result in an increase in
- - memory usage during IBD for those previously relying on only the `-dbcache`
- - option to limit memory during that time.
- -
- -Mining
- -------
- -
- -In previous versions, getblocktemplate required segwit support from downstream
- -clients/miners once the feature activated on the network. In this version, it
- -now supports non-segwit clients even after activation, by removing all segwit
- -transactions from the returned block template. This allows non-segwit miners to
- -continue functioning correctly even after segwit has activated.
- -
- -Due to the limitations in previous versions, getblocktemplate also recommended
- -non-segwit clients to not signal for the segwit version-bit. Since this is no
- -longer an issue, getblocktemplate now always recommends signalling segwit for
- -all miners. This is safe because ability to enforce the rule is the only
- -required criteria for safe activation, not actually producing segwit-enabled
- -blocks.
- -
- -UTXO memory accounting
- -----------------------
- -
- -Memory usage for the UTXO cache is being calculated more accurately, so that
- -the configured limit (`-dbcache`) will be respected when memory usage peaks
- -during cache flushes. The memory accounting in prior releases is estimated to
- -only account for half the actual peak utilization.
- -
- -The default `-dbcache` has also been changed in this release to 450MiB. Users
- -who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully
- -cached in memory) should consider increasing this setting in order to achieve
- -the same cache performance as prior releases. Users on low-memory systems
- -(such as systems with 1GB or less) should consider specifying a lower value for
- -this parameter.
- -
- -Additional information relating to running on low-memory systems can be found
- -here, originally written for Bitcoin but can also be used for Litecoin:
- -[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7).
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- [The Bitcoin Core Developers](/doc/release-notes)
- -- Adrian Gallagher
- -- Charlie Lee
- -- Loshan T
- -- Shaolin Fry
- -- Xinxi Wang
- \ No newline at end of file
- diff --git a/doc/litecoin-release-notes/release-notes-0.15.0.1.md b/doc/litecoin-release-notes/release-notes-0.15.0.1.md
- deleted file mode 100644
- index 76ec3e0..0000000
- --- a/doc/litecoin-release-notes/release-notes-0.15.0.1.md
- +++ /dev/null
- @@ -1,773 +0,0 @@
- -Litecoin Core version *0.15.0* is now available from:
- -
- - <https://download.litecoin.org/litecoin-0.15.0/>
- -
- -This is a new major version release, including new features, various bugfixes
- -and performance improvements, as well as updated translations.
- -
- -Please report bugs using the issue tracker at GitHub:
- -
- - <https://github.com/litecoin-project/litecoin/issues>
- -
- -To receive security and update notifications, please subscribe to:
- -
- - <https://groups.google.com/forum/#!forum/litecoin-dev>
- -
- -How to Upgrade
- -==============
- -
- -If you are running an older version, shut it down. Wait until it has completely
- -shut down (which might take a few minutes for older versions), then run the
- -installer (on Windows) or just copy over `/Applications/Litecoin-Qt` (on Mac)
- -or `litecoind`/`litecoin-qt` (on Linux).
- -
- -The first time you run version 0.15.0, your chainstate database will be converted to a
- -new format, which will take anywhere from a few minutes to half an hour,
- -depending on the speed of your machine.
- -
- -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a
- -downgrade from version 0.15.0 or upgrade to version 0.15.0 will cause all fee
- -estimates to be discarded.
- -
- -Note that the block database format also changed in version 0.8.0 and there is no
- -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading
- -directly from 0.7.x and earlier without redownloading the blockchain is not supported.
- -However, as usual, old wallet versions are still supported.
- -
- -Downgrading warning
- --------------------
- -
- -The chainstate database for this release is not compatible with previous
- -releases, so if you run 0.15 and then decide to switch back to any
- -older version, you will need to run the old release with the `-reindex-chainstate`
- -option to rebuild the chainstate data structures in the old format.
- -
- -If your node has pruning enabled, this will entail re-downloading and
- -processing the entire blockchain.
- -
- -Compatibility
- -==============
- -
- -Litecoin Core is extensively tested on multiple operating systems using
- -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported.
- -
- -Litecoin Core should also work on most other Unix-like systems but is not
- -frequently tested on them.
- -
- -Notable changes
- -===============
- -
- -Performance Improvements
- -------------------------
- -
- -Version 0.15 contains a number of significant performance improvements, which make
- -Initial Block Download, startup, transaction and block validation much faster:
- -
- -- The chainstate database (which is used for tracking UTXOs) has been changed
- - from a per-transaction model to a per-output model (See [PR 10195](https://github.com/bitcoin/bitcoin/pull/10195)). Advantages of this model
- - are that it:
- - - avoids the CPU overhead of deserializing and serializing the unused outputs;
- - - has more predictable memory usage;
- - - uses simpler code;
- - - is adaptable to various future cache flushing strategies.
- -
- - As a result, validating the blockchain during Initial Block Download (IBD) and reindex
- - is ~30-40% faster, uses 10-20% less memory, and flushes to disk far less frequently.
- - The only downside is that the on-disk database is 15% larger. During the conversion from the previous format
- - a few extra gigabytes may be used.
- -- Earlier versions experienced a spike in memory usage while flushing UTXO updates to disk.
- - As a result, only half of the available memory was actually used as cache, and the other half was
- - reserved to accommodate flushing. This is no longer the case (See [PR 10148](https://github.com/bitcoin/bitcoin/pull/10148)), and the entirety of
- - the available cache (see `-dbcache`) is now actually used as cache. This reduces the flushing
- - frequency by a factor 2 or more.
- -- In previous versions, signature validation for transactions has been cached when the
- - transaction is accepted to the mempool. Version 0.15 extends this to cache the entire script
- - validity (See [PR 10192](https://github.com/bitcoin/bitcoin/pull/10192)). This means that if a transaction in a block has already been accepted to the
- - mempool, the scriptSig does not need to be re-evaluated. Empirical tests show that
- - this results in new block validation being 40-50% faster.
- -- LevelDB has been upgraded to version 1.20 (See [PR 10544](https://github.com/bitcoin/bitcoin/pull/10544)). This version contains hardware acceleration for CRC
- - on architectures supporting SSE 4.2. As a result, synchronization and block validation are now faster.
- -- SHA256 hashing has been optimized for architectures supporting SSE 4 (See [PR 10821](https://github.com/bitcoin/bitcoin/pull/10821)). SHA256 is around
- - 50% faster on supported hardware, which results in around 5% faster IBD and block
- - validation. In version 0.15, SHA256 hardware optimization is disabled in release builds by
- - default, but can be enabled by using `--enable-experimental-asm` when building.
- -- Refill of the keypool no longer flushes the wallet between each key which resulted in a ~20x speedup in creating a new wallet. Part of this speedup was used to increase the default keypool to 1000 keys to make recovery more robust. (See [PR 10831](https://github.com/bitcoin/bitcoin/pull/10831)).
- -- Scrypt hashing has been optimized for architectures supporting SSE 2 (See [PR 362](https://github.com/litecoin-project/litecoin/pull/362)). This boosts scrypt hashing performance by a factor of 2. In version 0.15, scrypt hardware optimization is disabled in release builds by default, but can be enabled by using `--enable-sse2` when building.
- -
- -Fee Estimation Improvements
- ----------------------------
- -
- -Fee estimation has been significantly improved in version 0.15, with more accurate fee estimates used by the wallet and a wider range of options for advanced users of the `estimatesmartfee` and `estimaterawfee` RPCs (See [PR 10199](https://github.com/bitcoin/bitcoin/pull/10199)).
- -
- -### Changes to internal logic and wallet behavior
- -
- -- Internally, estimates are now tracked on 3 different time horizons. This allows for longer targets and means estimates adjust more quickly to changes in conditions.
- -- Estimates can now be *conservative* or *economical*. *Conservative* estimates use longer time horizons to produce an estimate which is less susceptible to rapid changes in fee conditions. *Economical* estimates use shorter time horizons and will be more affected by short-term changes in fee conditions. Economical estimates may be considerably lower during periods of low transaction activity (for example over weekends), but may result in transactions being unconfirmed if prevailing fees increase rapidly.
- -- By default, the wallet will use conservative fee estimates to increase the reliability of transactions being confirmed within the desired target. For transactions that are marked as replaceable, the wallet will use an economical estimate by default, since the fee can be 'bumped' if the fee conditions change rapidly (See [PR 10589](https://github.com/bitcoin/bitcoin/pull/10589)).
- -- Estimates can now be made for confirmation targets up to 1008 blocks (one week).
- -- More data on historical fee rates is stored, leading to more precise fee estimates.
- -- Transactions which leave the mempool due to eviction or other non-confirmed reasons are now taken into account by the fee estimation logic, leading to more accurate fee estimates.
- -- The fee estimation logic will make sure enough data has been gathered to return a meaningful estimate. If there is insufficient data, a fallback default fee is used.
- -
- -### Changes to fee estimate RPCs
- -
- -- The `estimatefee` RPC is now deprecated in favor of using only `estimatesmartfee` (which is the implementation used by the GUI)
- -- The `estimatesmartfee` RPC interface has been changed (See [PR 10707](https://github.com/bitcoin/bitcoin/pull/10707)):
- - - The `nblocks` argument has been renamed to `conf_target` (to be consistent with other RPC methods).
- - - An `estimate_mode` argument has been added. This argument takes one of the following strings: `CONSERVATIVE`, `ECONOMICAL` or `UNSET` (which defaults to `CONSERVATIVE`).
- - - The RPC return object now contains an `errors` member, which returns errors encountered during processing.
- - - If Litecoin Core has not been running for long enough and has not seen enough blocks or transactions to produce an accurate fee estimation, an error will be returned (previously a value of -1 was used to indicate an error, which could be confused for a feerate).
- -- A new `estimaterawfee` RPC is added to provide raw fee data. External clients can query and use this data in their own fee estimation logic.
- -
- -Opt into RBF When Sending
- --------------------------
- -
- -A new startup option, `-walletrbf`, has been added to allow users to have all
- -transactions sent opt into RBF support. The default value for this option is
- -currently `false`, so transactions will not opt into RBF by default. The new
- -`bumpfee` RPC can be used to replace transactions that opt into RBF.
- -
- -Replace-by-fee control in the GUI
- ----------------------------------
- -
- -In version 0.15, creating an opt-in RBF transaction and replacing the unconfirmed transaction with a higher-fee transaction are both supported in the GUI (See PR 9592).
- -
- -Multi-wallet support
- ---------------------
- -
- -Litecoin Core now supports loading multiple, separate wallets (See [PR 8694](https://github.com/bitcoin/bitcoin/pull/8694), [PR 10849](https://github.com/bitcoin/bitcoin/pull/10849)). The wallets are completely separated, with individual balances, keys and received transactions.
- -
- -Multi-wallet is enabled by using more than one `-wallet` argument when starting Litecoin, either on the command line or in the Litecoin config file.
- -
- -**In Litecoin-Qt, only the first wallet will be displayed and accessible for creating and signing transactions.** GUI selectable multiple wallets will be supported in a future version. However, even in 0.15 other loaded wallets will remain synchronized to the node's current tip in the background. This can be useful if running a pruned node, since loading a wallet where the most recent sync is beyond the pruned height results in having to download and revalidate the whole blockchain. Continuing to synchronize all wallets in the background avoids this problem.
- -
- -Litecoin Core 0.15.0 contains the following changes to the RPC interface and `litecoin-cli` for multi-wallet:
- -
- -* When running Litecoin Core with a single wallet, there are **no** changes to the RPC interface or `litecoin-cli`. All RPC calls and `litecoin-cli` commands continue to work as before.
- -* When running Litecoin Core with multi-wallet, all *node-level* RPC methods continue to work as before. HTTP RPC requests should be send to the normal `<RPC IP address>:<RPC port>/` endpoint, and `litecoin-cli` commands should be run as before. A *node-level* RPC method is any method which does not require access to the wallet.
- -* When running Litecoin Core with multi-wallet, *wallet-level* RPC methods must specify the wallet for which they're intended in every request. HTTP RPC requests should be send to the `<RPC IP address>:<RPC port>/wallet/<wallet name>/` endpoint, for example `127.0.0.1:9332/wallet/wallet1.dat/`. `litecoin-cli` commands should be run with a `-rpcwallet` option, for example `litecoin-cli -rpcwallet=wallet1.dat getbalance`.
- -* A new *node-level* `listwallets` RPC method is added to display which wallets are currently loaded. The names returned by this method are the same as those used in the HTTP endpoint and for the `rpcwallet` argument.
- -
- -Note that while multi-wallet is now fully supported, the RPC multi-wallet interface should be considered unstable for version 0.15.0, and there may backwards-incompatible changes in future versions.
- -
- -Removal of Coin Age Priority
- -----------------------------
- -
- -In previous versions of Litecoin Core, a portion of each block could be reserved for transactions based on the age and value of UTXOs they spent. This concept (Coin Age Priority) is a policy choice by miners, and there are no consensus rules around the inclusion of Coin Age Priority transactions in blocks. In practice, only a few miners continue to use Coin Age Priority for transaction selection in blocks. Litecoin Core 0.15 removes all remaining support for Coin Age Priority (See [PR 9602](https://github.com/bitcoin/bitcoin/pull/9602)). This has the following implications:
- -
- -- The concept of *free transactions* has been removed. High Coin Age Priority transactions would previously be allowed to be relayed even if they didn't attach a miner fee. This is no longer possible since there is no concept of Coin Age Priority. The `-limitfreerelay` and `-relaypriority` options which controlled relay of free transactions have therefore been removed.
- -- The `-sendfreetransactions` option has been removed, since almost all miners do not include transactions which do not attach a transaction fee.
- -- The `-blockprioritysize` option has been removed.
- -- The `estimatepriority` and `estimatesmartpriority` RPCs have been removed.
- -- The `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry` and `getrawmempool` RPCs no longer return `startingpriority` and `currentpriority`.
- -- The `prioritisetransaction` RPC no longer takes a `priority_delta` argument, which is replaced by a `dummy` argument for backwards compatibility with clients using positional arguments. The RPC is still used to change the apparent fee-rate of the transaction by using the `fee_delta` argument.
- -- `-minrelaytxfee` can now be set to 0. If `minrelaytxfee` is set, then fees smaller than `minrelaytxfee` (per kB) are rejected from relaying, mining and transaction creation. This defaults to 1000 satoshi/kB.
- -- The `-printpriority` option has been updated to only output the fee rate and hash of transactions included in a block by the mining code.
- -
- -Mempool Persistence Across Restarts
- ------------------------------------
- -
- -Version 0.14 introduced mempool persistence across restarts (the mempool is saved to a `mempool.dat` file in the data directory prior to shutdown and restores the mempool when the node is restarted). Version 0.15 allows this feature to be switched on or off using the `-persistmempool` command-line option (See [PR 9966](https://github.com/bitcoin/bitcoin/pull/9966)). By default, the option is set to true, and the mempool is saved on shutdown and reloaded on startup. If set to false, the `mempool.dat` file will not be loaded on startup or saved on shutdown.
- -
- -New RPC methods
- ----------------
- -
- -Version 0.15 introduces several new RPC methods:
- -
- -- `abortrescan` stops current wallet rescan, e.g. when triggered by an `importprivkey` call (See [PR 10208](https://github.com/bitcoin/bitcoin/pull/10208)).
- -- `combinerawtransaction` accepts a JSON array of raw transactions and combines them into a single raw transaction (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)).
- -- `estimaterawfee` returns raw fee data so that customized logic can be implemented to analyze the data and calculate estimates. See [Fee Estimation Improvements](#fee-estimation-improvements) for full details on changes to the fee estimation logic and interface.
- -- `getchaintxstats` returns statistics about the total number and rate of transactions
- - in the chain (See [PR 9733](https://github.com/bitcoin/bitcoin/pull/9733)).
- -- `listwallets` lists wallets which are currently loaded. See the *Multi-wallet* section
- - of these release notes for full details (See [Multi-wallet support](#multi-wallet-support)).
- -- `uptime` returns the total runtime of the `bitcoind` server since its last start (See [PR 10400](https://github.com/bitcoin/bitcoin/pull/10400)).
- -
- -Low-level RPC changes
- ----------------------
- -
- -- When using Litecoin Core in multi-wallet mode, RPC requests for wallet methods must specify
- - the wallet that they're intended for. See [Multi-wallet support](#multi-wallet-support) for full details.
- -
- -- The new database model no longer stores information about transaction
- - versions of unspent outputs (See [Performance improvements](#performance-improvements)). This means that:
- - - The `gettxout` RPC no longer has a `version` field in the response.
- - - The `gettxoutsetinfo` RPC reports `hash_serialized_2` instead of `hash_serialized`,
- - which does not commit to the transaction versions of unspent outputs, but does
- - commit to the height and coinbase information.
- - - The `getutxos` REST path no longer reports the `txvers` field in JSON format,
- - and always reports 0 for transaction versions in the binary format
- -
- -- The `estimatefee` RPC is deprecated. Clients should switch to using the `estimatesmartfee` RPC, which returns better fee estimates. See [Fee Estimation Improvements](#fee-estimation-improvements) for full details on changes to the fee estimation logic and interface.
- -
- -- The `gettxoutsetinfo` response now contains `disk_size` and `bogosize` instead of
- - `bytes_serialized`. The first is a more accurate estimate of actual disk usage, but
- - is not deterministic. The second is unrelated to disk usage, but is a
- - database-independent metric of UTXO set size: it counts every UTXO entry as 50 + the
- - length of its scriptPubKey (See [PR 10426](https://github.com/bitcoin/bitcoin/pull/10426)).
- -
- -- `signrawtransaction` can no longer be used to combine multiple transactions into a single transaction. Instead, use the new `combinerawtransaction` RPC (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)).
- -
- -- `fundrawtransaction` no longer accepts a `reserveChangeKey` option. This option used to allow RPC users to fund a raw transaction using an key from the keypool for the change address without removing it from the available keys in the keypool. The key could then be re-used for a `getnewaddress` call, which could potentially result in confusing or dangerous behaviour (See [PR 10784](https://github.com/bitcoin/bitcoin/pull/10784)).
- -
- -- `estimatepriority` and `estimatesmartpriority` have been removed. See [Removal of Coin Age Priority](#removal-of-coin-age-priority).
- -
- -- The `listunspent` RPC now takes a `query_options` argument (see [PR 8952](https://github.com/bitcoin/bitcoin/pull/8952)), which is a JSON object
- - containing one or more of the following members:
- - - `minimumAmount` - a number specifying the minimum value of each UTXO
- - - `maximumAmount` - a number specifying the maximum value of each UTXO
- - - `maximumCount` - a number specifying the minimum number of UTXOs
- - - `minimumSumAmount` - a number specifying the minimum sum value of all UTXOs
- -
- -- The `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry` and `getrawmempool` RPCs no longer return `startingpriority` and `currentpriority`. See [Removal of Coin Age Priority](#removal-of-coin-age-priority).
- -
- -- The `dumpwallet` RPC now returns the full absolute path to the dumped wallet. It
- - used to return no value, even if successful (See [PR 9740](https://github.com/bitcoin/bitcoin/pull/9740)).
- -
- -- In the `getpeerinfo` RPC, the return object for each peer now returns an `addrbind` member, which contains the ip address and port of the connection to the peer. This is in addition to the `addrlocal` member which contains the ip address and port of the local node as reported by the peer (See [PR 10478](https://github.com/bitcoin/bitcoin/pull/10478)).
- -
- -- The `disconnectnode` RPC can now disconnect a node specified by node ID (as well as by IP address/port). To disconnect a node based on node ID, call the RPC with the new `nodeid` argument (See [PR 10143](https://github.com/bitcoin/bitcoin/pull/10143)).
- -
- -- The second argument in `prioritisetransaction` has been renamed from `priority_delta` to `dummy` since Bitcoin Core no longer has a concept of coin age priority. The `dummy` argument has no functional effect, but is retained for positional argument compatibility. See [Removal of Coin Age Priority](#removal-of-coin-age-priority).
- -
- -- The `resendwallettransactions` RPC throws an error if the `-walletbroadcast` option is set to false (See [PR 10995](https://github.com/bitcoin/bitcoin/pull/10995)).
- -
- -- The second argument in the `submitblock` RPC argument has been renamed from `parameters` to `dummy`. This argument never had any effect, and the renaming is simply to communicate this fact to the user (See [PR 10191](https://github.com/bitcoin/bitcoin/pull/10191))
- - (Clients should, however, use positional arguments for `submitblock` in order to be compatible with BIP 22.)
- -
- -- The `verbose` argument of `getblock` has been renamed to `verbosity` and now takes an integer from 0 to 2. Verbose level 0 is equivalent to `verbose=false`. Verbose level 1 is equivalent to `verbose=true`. Verbose level 2 will give the full transaction details of each transaction in the output as given by `getrawtransaction`. The old behavior of using the `verbose` named argument and a boolean value is still maintained for compatibility.
- -
- -- Error codes have been updated to be more accurate for the following error cases (See [PR 9853](https://github.com/bitcoin/bitcoin/pull/9853)):
- - - `getblock` now returns RPC_MISC_ERROR if the block can't be found on disk (for
- - example if the block has been pruned). Previously returned RPC_INTERNAL_ERROR.
- - - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned
- - because the node is not in pruned mode. Previously returned RPC_METHOD_NOT_FOUND.
- - - `pruneblockchain` now returns RPC_INVALID_PARAMETER if the blocks cannot be pruned
- - because the supplied timestamp is too late. Previously returned RPC_INTERNAL_ERROR.
- - - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned
- - because the blockchain is too short. Previously returned RPC_INTERNAL_ERROR.
- - - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the supplied IP address
- - or subnet is invalid. Previously returned RPC_CLIENT_NODE_ALREADY_ADDED.
- - - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the user tries to unban
- - a node that has not previously been banned. Previously returned RPC_MISC_ERROR.
- - - `removeprunedfunds` now returns RPC_WALLET_ERROR if `bitcoind` is unable to remove
- - the transaction. Previously returned RPC_INTERNAL_ERROR.
- - - `removeprunedfunds` now returns RPC_INVALID_PARAMETER if the transaction does not
- - exist in the wallet. Previously returned RPC_INTERNAL_ERROR.
- - - `fundrawtransaction` now returns RPC_INVALID_ADDRESS_OR_KEY if an invalid change
- - address is provided. Previously returned RPC_INVALID_PARAMETER.
- - - `fundrawtransaction` now returns RPC_WALLET_ERROR if `bitcoind` is unable to create
- - the transaction. The error message provides further details. Previously returned
- - RPC_INTERNAL_ERROR.
- - - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has
- - descendants in the wallet. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has
- - descendants in the mempool. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has
- - has been mined or conflicts with a mined transaction. Previously returned
- - RPC_INVALID_ADDRESS_OR_KEY.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction is not
- - BIP 125 replaceable. Previously returned RPC_INVALID_ADDRESS_OR_KEY.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has already
- - been bumped by a different transaction. Previously returned RPC_INVALID_REQUEST.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction contains
- - inputs which don't belong to this wallet. Previously returned RPC_INVALID_ADDRESS_OR_KEY.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has multiple change
- - outputs. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has no change
- - output. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too high. Previously returned
- - RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too low. Previously returned
- - RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the change output is too small to bump the
- - fee. Previously returned RPC_MISC_ERROR.
- -
- -0.15.0 Change log
- -=================
- -
- -### RPC and other APIs
- -- #9485 `61a640e` ZMQ example using python3 and asyncio (mcelrath)
- -- #9894 `0496e15` remove 'label' filter for rpc command help (instagibbs)
- -- #9853 `02bd6e9` Fix error codes from various RPCs (jnewbery)
- -- #9842 `598ef9c` Fix RPC failure testing (continuation of #9707) (jnewbery)
- -- #10038 `d34995a` Add mallocinfo mode to `getmemoryinfo` RPC (laanwj)
- -- #9500 `3568b30` [Qt][RPC] Autocomplete commands for 'help' command in debug console (achow101)
- -- #10056 `e6156a0` [zmq] Call va_end() on va_start()ed args (kallewoof)
- -- #10086 `7438cea` Trivial: move rpcserialversion into RPC option group (jlopp)
- -- #10150 `350b224` [rpc] Add logging rpc (jnewbery)
- -- #10208 `393160c` [wallet] Rescan abortability (kallewoof)
- -- #10143 `a987def` [net] Allow disconnectnode RPC to be called with node id (jnewbery)
- -- #10281 `0e8499c` doc: Add RPC interface guidelines (laanwj)
- -- #9733 `d4732f3` Add getchaintxstats RPC (sipa)
- -- #10310 `f4b15e2` [doc] Add hint about getmempoolentry to getrawmempool help (kallewoof)
- -- #8704 `96c850c` [RPC] Transaction details in getblock (achow101)
- -- #8952 `9390845` Add query options to listunspent RPC call (pedrobranco)
- -- #10413 `08ac35a` Fix docs (there's no rpc command setpaytxfee) (RHavar)
- -- #8384 `e317c0d` Add witness data output to TxInError messages (instagibbs)
- -- #9571 `4677151` RPC: getblockchaininfo returns BIP signaling statistics (pinheadmz)
- -- #10450 `ef2d062` Fix bumpfee rpc "errors" return value (ryanofsky)
- -- #10475 `39039b1` [RPC] getmempoolinfo mempoolminfee is a BTC/KB feerate (instagibbs)
- -- #10478 `296928e` rpc: Add listen address to incoming connections in `getpeerinfo` (laanwj)
- -- #10403 `08d0390` Fix importmulti failure to return rescan errors (ryanofsky)
- -- #9740 `9fec4da` Add friendly output to dumpwallet (aideca)
- -- #10426 `16f6c98` Replace bytes_serialized with bogosize (sipa)
- -- #10252 `980deaf` RPC/Mining: Restore API compatibility for prioritisetransaction (luke-jr)
- -- #9672 `46311e7` Opt-into-RBF for RPC & bitcoin-tx (luke-jr)
- -- #10481 `9c248e3` Decodehextx scripts sanity check (achow101)
- -- #10488 `fa1f106` Note that the prioritizetransaction dummy value is deprecated, and has no meaning (TheBlueMatt)
- -- #9738 `c94b89e` gettxoutproof() should return consistent result (jnewbery)
- -- #10191 `00350bd` [trivial] Rename unused RPC arguments 'dummy' (jnewbery)
- -- #10627 `b62b4c8` fixed listunspent rpc convert parameter (tnakagawa)
- -- #10412 `bef02fb` Improve wallet rescan API (ryanofsky)
- -- #10400 `1680ee0` [RPC] Add an uptime command that displays the amount of time (in seconds) bitcoind has been running (rvelhote)
- -- #10683 `d81bec7` rpc: Move the `generate` RPC call to rpcwallet (laanwj)
- -- #10710 `30bc0f6` REST/RPC example update (Mirobit)
- -- #10747 `9edda0c` [rpc] fix verbose argument for getblock in bitcoin-cli (jnewbery)
- -- #10589 `104f5f2` More economical fee estimates for RBF and RPC options to control (morcos)
- -- #10543 `b27b004` Change API to estimaterawfee (morcos)
- -- #10807 `afd2fca` getbalance example covers at least 6 confirms (instagibbs)
- -- #10707 `75b5643` Better API for estimatesmartfee RPC (morcos)
- -- #10784 `9e8d6a3` Do not allow users to get keys from keypool without reserving them (TheBlueMatt)
- -- #10857 `d445a2c` [RPC] Add a deprecation warning to getinfo's output (achow101)
- -- #10571 `adf170d` [RPC]Move transaction combining from signrawtransaction to new RPC (achow101)
- -- #10783 `041dad9` [RPC] Various rpc argument fixes (instagibbs)
- -- #9622 `6ef3c7e` [rpc] listsinceblock should include lost transactions when parameter is a reorg'd block (kallewoof)
- -- #10799 `8537187` Prevent user from specifying conflicting parameters to fundrawtx (TheBlueMatt)
- -- #10931 `0b11a07` Fix misleading "Method not found" multiwallet errors (ryanofsky)
- -- #10788 `f66c596` [RPC] Fix addwitnessaddress by replacing ismine with producesignature (achow101)
- -- #10999 `627c3c0` Fix amounts formatting in `decoderawtransaction` (laanwj)
- -- #11002 `4268426` [wallet] return correct error code from resendwallettransaction (jnewbery)
- -- #11029 `96a63a3` [RPC] trivial: gettxout no longer shows version of tx (FelixWeis)
- -- #11083 `6c2b008` Fix combinerawtransaction RPC help result section (jonasnick)
- -- #11027 `07164bb` [RPC] Only return hex field once in getrawtransaction (achow101)
- -- #10698 `5af6572` Be consistent in calling transactions "replaceable" for Opt-In RBF (TheBlueMatt)
- -
- -### Block and transaction handling
- -- #9801 `a8c5751` Removed redundant parameter from mempool.PrioritiseTransaction (gubatron)
- -- #9819 `1efc99c` Remove harmless read of unusued priority estimates (morcos)
- -- #9822 `b7547fa` Remove block file location upgrade code (benma)
- -- #9602 `30ff3a2` Remove coin age priority and free transactions - implementation (morcos)
- -- #9548 `47510ad` Remove min reasonable fee (morcos)
- -- #10249 `c73af54` Switch CCoinsMap from boost to std unordered_map (sipa)
- -- #9966 `2a183de` Control mempool persistence using a command line parameter (jnewbery)
- -- #10199 `318ea50` Better fee estimates (morcos)
- -- #10196 `bee3529` Bugfix: PrioritiseTransaction updates the mempool tx counter (sdaftuar)
- -- #10195 `1088b02` Switch chainstate db and cache to per-txout model (sipa)
- -- #10284 `c2ab38b` Always log debug information for fee calculation in CreateTransaction (morcos)
- -- #10503 `efbcf2b` Use REJECT_DUPLICATE for already known and conflicted txn (sipa)
- -- #10537 `b3eb0d6` Few Minor per-utxo assert-semantics re-adds and tweak (TheBlueMatt)
- -- #10626 `8c841a3` doc: Remove outdated minrelaytxfee comment (MarcoFalke)
- -- #10559 `234ffc6` Change semantics of HaveCoinInCache to match HaveCoin (morcos)
- -- #10581 `7878353` Simplify return values of GetCoin/HaveCoin(InCache) (sipa)
- -- #10684 `a381f6a` Remove no longer used mempool.exists(outpoint) (morcos)
- -- #10148 `d4e551a` Use non-atomic flushing with block replay (sipa)
- -- #10685 `30c2130` Clarify CCoinsViewMemPool documentation (TheBlueMatt)
- -- #10558 `90a002e` Address nits from per-utxo change (morcos)
- -- #10706 `6859ad2` Improve wallet fee logic and fix GUI bugs (morcos)
- -- #10526 `754aa02` Force on-the-fly compaction during pertxout upgrade (sipa)
- -- #10985 `d896d5c` Add undocumented -forcecompactdb to force LevelDB compactions (sipa)
- -- #10292 `e4bbd3d` Improved efficiency in COutPoint constructors (mm-s)
- -- #10290 `8d6d43e` Add -stopatheight for benchmarking (sipa)
- -
- -### P2P protocol and network code
- -- #9726 `7639d38` netbase: Do not print an error on connection timeouts through proxy (laanwj)
- -- #9805 `5b583ef` Add seed.btc.petertodd.org to mainnet DNS seeds (petertodd)
- -- #9861 `22f609f` Trivial: Debug log ambiguity fix for peer addrs (keystrike)
- -- #9774 `90cb2a2` Enable host lookups for -proxy and -onion parameters (jmcorgan)
- -- #9558 `7b585cf` Clarify assumptions made about when BlockCheck is called (TheBlueMatt)
- -- #10135 `e19586a` [p2p] Send the correct error code in reject messages (jnewbery)
- -- #9665 `eab00d9` Use cached [compact] blocks to respond to getdata messages (TheBlueMatt)
- -- #10215 `a077a90` Check interruptNet during dnsseed lookups (TheBlueMatt)
- -- #10234 `faf2dea` [net] listbanned RPC and QT should show correct banned subnets (jnewbery)
- -- #10134 `314ebdf` [qa] Fixes segwit block relay test after inv-direct-fetch was disabled (sdaftuar)
- -- #10351 `3f57c55` removed unused code in INV message (Greg-Griffith)
- -- #10061 `ae78609` [net] Added SetSocketNoDelay() utility function (tjps)
- -- #10408 `28c6e8d` Net: Improvements to Tor control port parser (str4d)
- -- #10460 `5c63d66` Broadcast address every day, not 9 hours (sipa)
- -- #10471 `400fdd0` Denote functions CNode::GetRecvVersion() and CNode::GetRefCount() as const (pavlosantoniou)
- -- #10345 `67700b3` [P2P] Timeout for headers sync (sdaftuar)
- -- #10564 `8d9f45e` Return early in IsBanned (gmaxwell)
- -- #10587 `de8db47` Net: Fix resource leak in ReadBinaryFile(...) (practicalswift)
- -- #9549 `b33ca14` [net] Avoid possibility of NULL pointer dereference in MarkBlockAsInFlight(...) (practicalswift)
- -- #10446 `2772dc9` net: avoid extra dns query per seed (theuni)
- -- #10824 `9dd6a2b` Avoid unnecessary work in SetNetworkActive (promag)
- -- #10948 `df3a6f4` p2p: Hardcoded seeds update pre-0.15 branch (laanwj)
- -- #10977 `02f4c4a` [net] Fix use of uninitialized value in getnetworkinfo(const JSONRPCRequest&) (practicalswift)
- -- #10982 `c8b62c7` Disconnect network service bits 6 and 8 until Aug 1, 2018 (TheBlueMatt)
- -- #11012 `0e5cff6` Make sure to clean up mapBlockSource if we've already seen the block (theuni)
- -
- -### Validation
- -- #9725 `67023e9` CValidationInterface Cleanups (TheBlueMatt)
- -- #10178 `2584925` Remove CValidationInterface::UpdatedTransaction (TheBlueMatt)
- -- #10201 `a6548a4` pass Consensus::Params& to functions in validation.cpp and make them static (mariodian)
- -- #10297 `431a548` Simplify DisconnectBlock arguments/return value (sipa)
- -- #10464 `f94b7d5` Introduce static DoWarning (simplify UpdateTip) (jtimon)
- -- #10569 `2e7d8f8` Fix stopatheight (achow101)
- -- #10192 `2935b46` Cache full script execution results in addition to signatures (TheBlueMatt)
- -- #10179 `21ed30a` Give CValidationInterface Support for calling notifications on the CScheduler Thread (TheBlueMatt)
- -- #10557 `66270a4` Make check to distinguish between orphan txs and old txs more efficient (morcos)
- -- #10775 `7c2400c` nCheckDepth chain height fix (romanornr)
- -- #10821 `16240f4` Add SSE4 optimized SHA256 (sipa)
- -- #10854 `04d395e` Avoid using sizes on non-fixed-width types to derive protocol constants (gmaxwell)
- -- #10945 `2a50b11` Update defaultAssumeValid according to release-process.md (gmaxwell)
- -- #10986 `2361208` Update chain transaction statistics (sipa)
- -- #11028 `6bdf4b3` Avoid masking of difficulty adjustment errors by checkpoints (sipa)
- -- #9533 `cb598cf` Allow non-power-of-2 signature cache sizes (sipa)
- -- #9208 `acd9957` Improve DisconnectTip performance (sdaftuar)
- -- #10618 `f90603a` Remove confusing MAX_BLOCK_BASE_SIZE (gmaxwell)
- -- #10758 `bd92424` Fix some chainstate-init-order bugs (TheBlueMatt)
- -- #10550 `b7296bc` Don't return stale data from CCoinsViewCache::Cursor() (ryanofsky)
- -- #10998 `2507fd5` Fix upgrade cancel warnings (TheBlueMatt)
- -- #9868 `cbdb473` Abstract out the command line options for block assembly (sipa)
- -
- -### Build system
- -- #9727 `5f0556d` Remove fallbacks for boost_filesystem < v3 (laanwj)
- -- #9788 `50a2265` gitian: bump descriptors for master (theuni)
- -- #9794 `7ca2f54` Minor update to qrencode package builder (mitchellcash)
- -- #9514 `2cc0df1` release: Windows signing script (theuni)
- -- #9921 `8b789d8` build: Probe MSG_DONTWAIT in the same way as MSG_NOSIGNAL (laanwj)
- -- #10011 `32d1b34` build: Fix typo s/HAVE_DONTWAIT/HAVE_MSG_DONTWAIT (laanwj)
- -- #9946 `90dd9e6` Fix build errors if spaces in path or parent directory (pinheadmz)
- -- #10136 `81da4c7` build: Disable Wshadow warning (laanwj)
- -- #10166 `64962ae` Ignore Doxyfile generated from Doxyfile.in template (paveljanik)
- -- #10239 `0416ea9` Make Boost use std::atomic internally (sipa)
- -- #10228 `27faa6c` build: regenerate bitcoin-config.h as necessary (theuni)
- -- #10273 `8979f45` [scripts] Minor improvements to `macdeployqtplus` script (chrisgavin)
- -- #10325 `a26280b` 0.15.0 Depends Updates (fanquake)
- -- #10328 `79aeff6` Update contrib/debian to latest Ubuntu PPA upload (TheBlueMatt)
- -- #7522 `d25449f` Bugfix: Only use git for build info if the repository is actually the right one (luke-jr)
- -- #10489 `e654d61` build: silence gcc7's implicit fallthrough warning (theuni)
- -- #10549 `ad1a13e` Avoid printing generic and duplicated "checking for QT" during ./configure (drizzt)
- -- #10628 `8465b68` [depends] expat 2.2.1 (fanquake)
- -- #10806 `db825d2` build: verify that the assembler can handle crc32 functions (theuni)
- -- #10766 `b4d03be` Building Environment: Set ARFLAGS to cr (ReneNyffenegger)
- -- #10803 `91edda8` Explicitly search for bdb5.3 (pstratem)
- -- #10855 `81560b0` random: only use getentropy on openbsd (theuni)
- -- #10508 `1caafa6` Run Qt wallet tests on travis (ryanofsky)
- -- #10851 `e222618` depends: fix fontconfig with newer glibc (theuni)
- -- #10971 `88b1e4b` build: fix missing sse42 in depends builds (theuni)
- -- #11097 `129b03f` gitian: quick hack to fix version string in releases (theuni)
- -- #10039 `919aaf6` Fix compile errors with Qt 5.3.2 and Boost 1.55.0 (ryanofsky)
- -- #10168 `7032021` Fix build warning from #error text (jnewbery)
- -- #10301 `318392c` Check if sys/random.h is required for getentropy (jameshilliard)
- -
- -### GUI
- -- #9724 `1a9fd5c` Qt/Intro: Add explanation of IBD process (luke-jr)
- -- #9834 `b00ba62` qt: clean up initialize/shutdown signals (benma)
- -- #9481 `ce01e62` [Qt] Show more significant warning if we fall back to the default fee (jonasschnelli)
- -- #9974 `b9f930b` Add basic Qt wallet test (ryanofsky)
- -- #9690 `a387d3a` Change 'Clear' button string to 'Reset' (da2x)
- -- #9592 `9c7b7cf` [Qt] Add checkbox in the GUI to opt-in to RBF when creating a transaction (ryanofsky)
- -- #10098 `2b477e6` Make qt wallet test compatible with qt4 (ryanofsky)
- -- #9890 `1fa4ae6` Add a button to open the config file in a text editor (ericshawlinux)
- -- #10156 `51833a1` Fix for issues with startup and multiple monitors on windows (AllanDoensen)
- -- #10177 `de01da7` Changed "Send" button default status from true to false (KibbledJiveElkZoo)
- -- #10221 `e96486c` Stop treating coinbase outputs differently in GUI: show them at 1conf (TheBlueMatt)
- -- #10231 `987a6c0` [Qt] Reduce a significant cs_main lock freeze (jonasschnelli)
- -- #10242 `f6f3b58` [qt] Don't call method on null WalletModel object (ryanofsky)
- -- #10093 `a3e756b` [Qt] Don't add arguments of sensitive command to console window (jonasschnelli)
- -- #10362 `95546c8` [GUI] Add OSX keystroke to RPCConsole info (spencerlievens)
- -- #9697 `962cd3f` [Qt] simple fee bumper with user verification (jonasschnelli)
- -- #10390 `e477516` [wallet] remove minimum total fee option (instagibbs)
- -- #10420 `4314544` Add Qt tests for wallet spends & bumpfee (ryanofsky)
- -- #10454 `c1c9a95` Fix broken q4 test build (ryanofsky)
- -- #10449 `64beb13` Overhaul Qt fee bumper (jonasschnelli)
- -- #10582 `7c72fb9` Pass in smart fee slider value to coin control dialog (morcos)
- -- #10673 `4c72cc3` [qt] Avoid potential null pointer dereference in TransactionView::exportClicked() (practicalswift)
- -- #10769 `8fdd23a` [Qt] replace fee slider with a Dropdown, extend conf. targets (jonasschnelli)
- -- #10870 `412b466` [Qt] Use wallet 0 in rpc console if running with multiple wallets (jonasschnelli)
- -- #10988 `a9dd111` qt: Increase BLOCK_CHAIN_SIZE constants (laanwj)
- -- #10644 `e292140` Slightly overhaul NSI pixmaps (jonasschnelli)
- -- #10660 `0c3542e` Allow to cancel the txdb upgrade via splashscreen keypress 'q' (jonasschnelli)
- -
- -### Wallet
- -- #9359 `f7ec7cf` Add test for CWalletTx::GetImmatureCredit() returning stale values (ryanofsky)
- -- #9576 `56ab672` [wallet] Remove redundant initialization (practicalswift)
- -- #9333 `fa625b0` Document CWalletTx::mapValue entries and remove erase of nonexistent "version" entry (ryanofsky)
- -- #9906 `72fb515` Disallow copy constructor CReserveKeys (instagibbs)
- -- #9369 `3178b2c` Factor out CWallet::nTimeSmart computation into a method (ryanofsky)
- -- #9830 `afcd7c0` Add safe flag to listunspent result (NicolasDorier)
- -- #9993 `c49355c` Initialize nRelockTime (pstratem)
- -- #9818 `3d857f3` Save watch only key timestamps when reimporting keys (ryanofsky)
- -- #9294 `f34cdcb` Use internal HD chain for change outputs (hd split) (jonasschnelli)
- -- #10164 `e183ea2` Wallet: reduce excess logic InMempool() (kewde)
- -- #10186 `c9ff4f8` Remove SYNC_TRANSACTION_NOT_IN_BLOCK magic number (jnewbery)
- -- #10226 `64c45aa` wallet: Use boost to more portably ensure -wallet specifies only a filename (luke-jr)
- -- #9827 `c91ca0a` Improve ScanForWalletTransactions return value (ryanofsky)
- -- #9951 `fa1ac28` Wallet database handling abstractions/simplifications (laanwj)
- -- #10265 `c29a0d4` [wallet] [moveonly] Check non-null pindex before potentially referencing (kallewoof)
- -- #10283 `a550f6e` Cleanup: reduce to one GetMinimumFee call signature (morcos)
- -- #10294 `e2b99b1` [Wallet] unset change position when there is no change (instagibbs)
- -- #10115 `d3dce0e` Avoid reading the old hd master key during wallet encryption (TheBlueMatt)
- -- #10341 `18c9deb` rpc/wallet: Workaround older UniValue which returns a std::string temporary for get_str (luke-jr)
- -- #10308 `94e5227` [wallet] Securely erase potentially sensitive keys/values (tjps)
- -- #10257 `ea1fd43` [test] Add test for getmemoryinfo (jimmysong)
- -- #10295 `ce8176d` [qt] Move some WalletModel functions into CWallet (ryanofsky)
- -- #10506 `7cc2c67` Fix bumpfee test after #10449 (ryanofsky)
- -- #10500 `098b01d` Avoid CWalletTx copies in GetAddressBalances and GetAddressGroupings (ryanofsky)
- -- #10455 `0747d33` Simplify feebumper minimum fee code slightly (ryanofsky)
- -- #10522 `2805d60` [wallet] Remove unused variables (practicalswift)
- -- #8694 `177433a` Basic multiwallet support (luke-jr)
- -- #10598 `7a74f88` Supress struct/class mismatch warnings introduced in #10284 (paveljanik)
- -- #9343 `209eef6` Don't create change at dust limit (morcos)
- -- #10744 `ed88e31` Use method name via __func__ macro (darksh1ne)
- -- #10712 `e8b9523` Add change output if necessary to reduce excess fee (morcos)
- -- #10816 `1c011ff` Properly forbid -salvagewallet and -zapwallettxes for multi wallet (morcos)
- -- #10235 `5cfdda2` Track keypool entries as internal vs external in memory (TheBlueMatt)
- -- #10330 `bf0a08b` [wallet] fix zapwallettxes interaction with persistent mempool (jnewbery)
- -- #10831 `0b01935` Batch flushing operations to the walletdb during top up and increase keypool size (gmaxwell)
- -- #10795 `7b6e8bc` No longer ever reuse keypool indexes (TheBlueMatt)
- -- #10849 `bde4f93` Multiwallet: simplest endpoint support (jonasschnelli)
- -- #10817 `9022aa3` Redefine Dust and add a discard_rate (morcos)
- -- #10883 `bf3b742` Rename -usewallet to -rpcwallet (morcos)
- -- #10604 `420238d` [wallet] [tests] Add listwallets RPC, include wallet name in `getwalletinfo` and add multiwallet test (jnewbery)
- -- #10885 `70888a3` Reject invalid wallets (promag)
- -- #10949 `af56397` Clarify help message for -discardfee (morcos)
- -- #10942 `2e857bb` Eliminate fee overpaying edge case when subtracting fee from recipients (morcos)
- -- #10995 `fa64636` Fix resendwallettransactions assert failure if -walletbroadcast=0 (TheBlueMatt)
- -- #11022 `653a46d` Basic keypool topup (jnewbery)
- -- #11081 `9fe1f6b` Add length check for CExtKey deserialization (jonasschnelli, guidovranken)
- -- #11044 `4ef8374` [wallet] Keypool topup cleanups (jnewbery)
- -- #11145 `e51bb71` Fix rounding bug in calculation of minimum change (morcos)
- -- #9605 `779f2f9` Use CScheduler for wallet flushing, remove ThreadFlushWalletDB (TheBlueMatt)
- -- #10108 `4e3efd4` ApproximateBestSubset should take inputs by reference, not value (RHavar)
- -
- -### Tests and QA
- -- #9744 `8efd1c8` Remove unused module from rpc-tests (34ro)
- -- #9657 `7ff4a53` Improve rpc-tests.py (jnewbery)
- -- #9766 `7146d96` Add --exclude option to rpc-tests.py (jnewbery)
- -- #9577 `d6064a8` Fix docstrings in qa tests (jnewbery)
- -- #9823 `a13a417` qa: Set correct path for binaries in rpc tests (MarcoFalke)
- -- #9847 `6206252` Extra test vector for BIP32 (sipa)
- -- #9350 `88c2ae3` [Trivial] Adding label for amount inside of tx_valid/tx_invalid.json (Christewart)
- -- #9888 `36afd4d` travis: Verify commits only for one target (MarcoFalke)
- -- #9904 `58861ad` test: Fail if InitBlockIndex fails (laanwj)
- -- #9828 `67c5cc1` Avoid -Wshadow warnings in wallet_tests (ryanofsky)
- -- #9832 `48c3429` [qa] assert_start_raises_init_error (NicolasDorier)
- -- #9739 `9d5fcbf` Fix BIP68 activation test (jnewbery)
- -- #9547 `d32581c` bench: Assert that division by zero is unreachable (practicalswift)
- -- #9843 `c78adbf` Fix segwit getblocktemplate test (jnewbery)
- -- #9929 `d5ce14e` tests: Delete unused function _rpchost_to_args (laanwj)
- -- #9555 `19be26a` [test] Avoid reading a potentially uninitialized variable in tx_invalid-test (transaction_tests.cpp) (practicalswift)
- -- #9945 `ac23a7c` Improve logging in bctest.py if there is a formatting mismatch (jnewbery)
- -- #9768 `8910b47` [qa] Add logging to test_framework.py (jnewbery)
- -- #9972 `21833f9` Fix extended rpc tests broken by #9768 (jnewbery)
- -- #9977 `857d1e1` QA: getblocktemplate_longpoll.py should always use >0 fee tx (sdaftuar)
- -- #9970 `3cc13ea` Improve readability of segwit.py, smartfees.py (sdaftuar)
- -- #9497 `2c781fb` CCheckQueue Unit Tests (JeremyRubin)
- -- #10024 `9225de2` [trivial] Use log.info() instead of print() in remaining functional test cases (jnewbery)
- -- #9956 `3192e52` Reorganise qa directory (jnewbery)
- -- #10017 `02d64bd` combine_logs.py - aggregates log files from multiple bitcoinds during functional tests (jnewbery)
- -- #10047 `dfef6b6` [tests] Remove unused variables and imports (practicalswift)
- -- #9701 `a230b05` Make bumpfee tests less fragile (ryanofsky)
- -- #10053 `ca20923` [test] Allow functional test cases to be skipped (jnewbery)
- -- #10052 `a0b1e57` [test] Run extended tests once daily in Travis (jnewbery)
- -- #10069 `1118493` [QA] Fix typo in fundrawtransaction test (NicolasDorier)
- -- #10083 `c044f03` [QA] Renaming rawTx into rawtx (NicolasDorier)
- -- #10073 `b1a4f27` Actually run assumevalid.py (jnewbery)
- -- #9780 `c412fd8` Suppress noisy output from qa tests in Travis (jnewbery)
- -- #10096 `79af9fb` Check that all test scripts in test/functional are being run (jnewbery)
- -- #10076 `5b029aa` [qa] combine_logs: Use ordered list for logfiles (MarcoFalke)
- -- #10107 `f2734c2` Remove unused variable. Remove accidental trailing semicolons in Python code (practicalswift)
- -- #10109 `8ac8041` Remove SingleNodeConnCB (jnewbery)
- -- #10114 `edc62c9` [tests] sync_with_ping should assert that ping hasn't timed out (jnewbery)
- -- #10128 `427d2fd` Speed Up CuckooCache tests (JeremyRubin)
- -- #10072 `12af74b` Remove sources of unreliablility in extended functional tests (jnewbery)
- -- #10077 `ebfd653` [qa] Add setnetworkactive smoke test (MarcoFalke)
- -- #10152 `080d7c7` [trivial] remove unused line in Travis config (jnewbery)
- -- #10159 `df1ca9e` [tests] color test results and sort alphabetically (jnewbery)
- -- #10124 `88799ea` [test] Suppress test logging spam (jnewbery)
- -- #10142 `ed09dd3` Run bitcoin_test-qt under minimal QPA platform (ryanofsky)
- -- #9949 `a27dbc5` [bench] Avoid function call arguments which are pointers to uninitialized values (practicalswift)
- -- #10187 `b44adf9` tests: Fix test_runner return value in case of skipped test (laanwj)
- -- #10197 `d86bb07` [tests] Functional test warnings (jnewbery)
- -- #10219 `9111df9` Tests: Order Python Tests Differently (jimmysong)
- -- #10229 `f3db4c6` Tests: Add test for getdifficulty (jimmysong)
- -- #10224 `2723bcd` [test] Add test for getaddednodeinfo (jimmysong)
- -- #10023 `c530c15` [tests] remove maxblocksinflight.py (functionality covered by other test) (jnewbery)
- -- #10097 `1b25b6d` Move zmq test skipping logic into individual test case (jnewbery)
- -- #10272 `54e2d87` [Tests] Prevent warning: variable 'x' is uninitialized (paveljanik)
- -- #10225 `e0a7e19` [test] Add aborttrescan tests (kallewoof)
- -- #10278 `8254a8a` [test] Add Unit Test for GetListenPort (jimmysong)
- -- #10280 `47535d7` [test] Unit test amount.h/amount.cpp (jimmysong)
- -- #10256 `80c3a73` [test] Add test for gettxout to wallet.py (jimmysong)
- -- #10264 `492d22f` [test] Add tests for getconnectioncount, getnettotals and ping (jimmysong)
- -- #10169 `8f3e384` [tests] Remove func test code duplication (jnewbery)
- -- #10198 `dc8fc0c` [tests] Remove is_network_split from functional test framework (jnewbery)
- -- #10255 `3c5e6c9` [test] Add test for listaddressgroupings (jimmysong)
- -- #10137 `75171f0` Remove unused import. Remove accidental trailing semicolons (practicalswift)
- -- #10307 `83073de` [tests] allow zmq test to be run in out-of-tree builds (jnewbery)
- -- #10344 `e927483` [tests] Fix abandonconflict.py intermittency (jnewbery)
- -- #10318 `170bc2c` [tests] fix wait_for_inv() (jnewbery)
- -- #10171 `fff72de` [tests] Add node methods to test framework (jnewbery)
- -- #10352 `23d78c4` test: Add elapsed time to RPC tracing (laanwj)
- -- #10342 `6a796b2` [tests] Improve mempool_persist test (jnewbery)
- -- #10287 `776ba23` [tests] Update Unit Test for addrman.h/addrman.cpp (jimmysong)
- -- #10365 `7ee5236` [tests] increase timeouts in sendheaders test (jnewbery)
- -- #10361 `f6241b3` qa: disablewallet: Check that wallet is really disabled (MarcoFalke)
- -- #10371 `4b766fc` [tests] Clean up addrman_tests.cpp (jimmysong)
- -- #10253 `87abe20` [test] Add test for getnetworkhashps (jimmysong)
- -- #10376 `8bd16ee` [tests] fix disconnect_ban intermittency (jnewbery)
- -- #10374 `5411997` qa: Warn when specified test is not found (MarcoFalke)
- -- #10405 `0542978` tests: Correct testcase in script_tests.json for large number OP_EQUAL (laanwj)
- -- #10429 `6b99daf` tests: fix spurious addrman test failure (theuni)
- -- #10433 `8e57256` [tests] improve tmpdir structure (jnewbery)
- -- #10415 `217b416` [tests] Speed up fuzzing by ~200x when using afl-fuzz (practicalswift)
- -- #10445 `b4b057a` Add test for empty chain and reorg consistency for gettxoutsetinfo (gmaxwell)
- -- #10423 `1aefc94` [tests] skipped tests should clean up after themselves (jnewbery)
- -- #10359 `329fc1d` [tests] functional tests should call BitcoinTestFramework start/stop node methods (jnewbery)
- -- #10514 `e103b3f` Bugfix: missing == 0 after randrange (sipa)
- -- #10515 `c871f32` [test] Add test for getchaintxstats (jimmysong)
- -- #10509 `bea5b00` Remove xvfb configuration from travis (ryanofsky)
- -- #10535 `30853e1` [qa] fundrawtx: Fix shutdown race (MarcoFalke)
- -- #9909 `300f8e7` tests: Add FindEarliestAtLeast test for edge cases (ryanofsky)
- -- #10331 `75e898c` Share config between util and functional tests (jnewbery)
- -- #10321 `e801084` Use FastRandomContext for all tests (sipa)
- -- #10524 `6c2d81f` [tests] Remove printf(...) (practicalswift)
- -- #10547 `71ab6e5` [tests] Use FastRandomContext instead of boost::random::{mt19937,uniform_int_distribution} (practicalswift)
- -- #10551 `6702617` [Tests] Wallet encryption functional tests (achow101)
- -- #10555 `643fa0b` [tests] various improvements to zmq_test.py (jnewbery)
- -- #10533 `d083bd9` [tests] Use cookie auth instead of rpcuser and rpcpassword (achow101)
- -- #10632 `c68a9a6` qa: Add stopatheight test (MarcoFalke)
- -- #10636 `4bc853b` [qa] util: Check return code after closing bitcoind proc (MarcoFalke)
- -- #10662 `e0a7801` Initialize randomness in benchmarks (achow101)
- -- #10612 `7c87a9c` The young person's guide to the test_framework (jnewbery)
- -- #10659 `acb1153` [qa] blockchain: Pass on closed connection during generate call (MarcoFalke)
- -- #10690 `416af3e` [qa] Bugfix: allow overriding extra_args in ComparisonTestFramework (sdaftuar)
- -- #10556 `65cc7aa` Move stop/start functions from utils.py into BitcoinTestFramework (jnewbery)
- -- #10704 `dd07f47` [tests] nits in dbcrash.py (jnewbery)
- -- #10743 `be82498` [test] don't run dbcrash.py on Travis (jnewbery)
- -- #10761 `d3b5870` [tests] fix replace_by_fee.py (jnewbery)
- -- #10759 `1d4805c` Fix multi_rpc test for hosts that dont default to utf8 (TheBlueMatt)
- -- #10190 `e4f226a` [tests] mining functional tests (including regression test for submitblock) (jnewbery)
- -- #10739 `1fc783f` test: Move variable `state` down where it is used (paveljanik)
- -- #9980 `fee0d80` Fix mem access violation merkleblock (Christewart)
- -- #10893 `0c173a1` [QA] Avoid running multiwallet.py twice (jonasschnelli)
- -- #10927 `9d5e8f9` test: Make sure wallet.backup is created in temp path (laanwj)
- -- #10899 `f29d5db` [test] Qt: Use _putenv_s instead of setenv on Windows builds (brianmcmichael)
- -- #10912 `5c8eb79` [tests] Fix incorrect memory_cleanse(?) call in crypto_tests.cpp (practicalswift)
- -- #11001 `fa8a063` [tests] Test disconnecting unsupported service bits logic (jnewbery)
- -- #10695 `929fd72` [qa] Rewrite BIP65/BIP66 functional tests (sdaftuar)
- -- #10963 `ecd2135` [bench] Restore format state of cout after printing with std::fixed/setprecision (practicalswift)
- -- #11025 `e5d26e4` qa: Fix inv race in example_test (MarcoFalke)
- -- #10765 `2c811e0` Tests: address placement should be deterministic by default (ReneNyffenegger)
- -- #11000 `ac016e1` test: Add resendwallettransactions functional tests (promag)
- -- #11032 `aeb3175` [qa] Fix block message processing error in sendheaders.py (sdaftuar)
- -- #10105 `0b9fb68` [tests] fixup - make all Travis test runs quiet, non just cron job runs (jnewbery)
- -- #10222 `6ce7337` [tests] test_runner - check unicode (jnewbery)
- -- #10327 `35da2ae` [tests] remove import-abort-rescan.py (jnewbery)
- -- #11023 `bf74d37` [tests] Add option to attach a python debugger if functional test fails (jnewbery)
- -- #10565 `8c2098a` [coverage] Remove subtrees and benchmarks from coverage report (achow101)
- -
- -### Miscellaneous
- -- #9871 `be8ba2c` Add a tree sha512 hash to merge commits (sipa)
- -- #9821 `d19d45a` util: Specific GetOSRandom for Linux/FreeBSD/OpenBSD (laanwj)
- -- #9903 `ba80a68` Docs: add details to -rpcclienttimeout doc (ian-kelling)
- -- #9910 `53c300f` Docs: correct and elaborate -rpcbind doc (ian-kelling)
- -- #9905 `01b7cda` [contrib] gh-merge: Move second sha512 check to the end (MarcoFalke)
- -- #9880 `4df8213` Verify Tree-SHA512s in merge commits, enforce sigs are not SHA1 (TheBlueMatt)
- -- #9932 `00c13ea` Fix verify-commits on travis and always check top commit's tree (TheBlueMatt)
- -- #9952 `6996e06` Add historical release notes for 0.14.0 (laanwj)
- -- #9940 `fa99663` Fix verify-commits on OSX, update for new bad Tree-SHA512, point travis to different keyservers (TheBlueMatt)
- -- #9963 `8040ae6` util: Properly handle errors during log message formatting (laanwj)
- -- #9984 `cce056d` devtools: Make github-merge compute SHA512 from git, instead of worktree (laanwj)
- -- #9995 `8bcf934` [doc] clarify blockchain size and pruning (askmike)
- -- #9734 `0c17afc` Add updating of chainTxData to release process (sipa)
- -- #10063 `530fcbd` add missing spaces so that markdown recognizes headline (flack)
- -- #10085 `db1ae54` Docs: remove 'noconnect' option (jlopp)
- -- #10090 `8e4f7e7` Update bitcoin.conf with example for pruning (coinables)
- -- #9424 `1a5aaab` Change LogAcceptCategory to use uint32_t rather than sets of strings (gmaxwell)
- -- #10036 `fbf36ca` Fix init README format to render correctly on github (jlopp)
- -- #10058 `a2cd0b0` No need to use OpenSSL malloc/free (tjps)
- -- #10123 `471ed00` Allow debug logs to be excluded from specified component (jnewbery)
- -- #10104 `fadf078` linearize script: Option to use RPC cookie (achow101)
- -- #10162 `a3a2160` [trivial] Log calls to getblocktemplate (jnewbery)
- -- #10155 `928695b` build: Deduplicate version numbers (laanwj)
- -- #10211 `a86255b` [doc] Contributor fixes & new "finding reviewers" section (kallewoof)
- -- #10250 `1428f30` Fix some empty vector references (sipa)
- -- #10270 `95f5e44` Remove Clang workaround for Boost 1.46 (fanquake)
- -- #10263 `cb007e4` Trivial: fix fee estimate write error log message (CryptAxe)
- -- #9670 `bd9ec0e` contrib: github-merge improvements (laanwj)
- -- #10260 `1d75597` [doc] Minor corrections to osx dependencies (fanquake)
- -- #10189 `750c5a5` devtools/net: add a verifier for scriptable changes. Use it to make CNode::id private (theuni)
- -- #10322 `bc64b5a` Use hardware timestamps in RNG seeding (sipa)
- -- #10381 `7f2b9e0` Shadowing warnings are not enabled by default, update doc accordingly (paveljanik)
- -- #10380 `b6ee855` [doc] Removing comments about dirty entries on txmempool (madeo)
- -- #10383 `d0c37ee` [logging] log system time and mock time (jnewbery)
- -- #10404 `b45a52a` doc: Add logging to FinalizeNode() (sdaftuar)
- -- #10388 `526e839` Output line to debug.log when IsInitialBlockDownload latches to false (morcos)
- -- #10372 `15254e9` Add perf counter data to GetStrongRandBytes state in scheduler (TheBlueMatt)
- -- #10461 `55b72f3` Update style guide (sipa)
- -- #10486 `10e8c0a` devtools: Retry after signing fails in github-merge (laanwj)
- -- #10447 `f259263` Make bitcoind invalid argument error message specific (laanwj)
- -- #10495 `6a38b79` contrib: Update location of seeds.txt (laanwj)
- -- #10469 `b6b150b` Fixing typo in rpcdump.cpp help message (keystrike)
- -- #10451 `27b9931` contrib/init/bitcoind.openrcconf: Don't disable wallet by default (luke-jr)
- -- #10323 `00d3692` Update to latest libsecp256k1 master (sipa)
- -- #10422 `cec9e1e` Fix timestamp in fee estimate debug message (morcos)
- -- #10566 `5d034ee` [docs] Use the "domain name setup" image (previously unused) in the gitian docs (practicalswift)
- -- #10534 `a514ac3` Clarify prevector::erase and avoid swap-to-clear (sipa)
- -- #10575 `22ec768` Header include guideline (sipa)
- -- #10480 `fbf5d3b` Improve commit-check-script.sh (sipa)
- -- #10502 `1ad3d4e` scripted-diff: Remove BOOST_FOREACH, Q_FOREACH and PAIRTYPE (jtimon)
- -- #10377 `b63be2c` Use rdrand as entropy source on supported platforms (sipa)
- -- #9895 `228c319` Turn TryCreateDirectory() into TryCreateDirectories() (benma)
- -- #10602 `d76e84a` Make clang-format use C++11 features (e.g. A<A<int>> instead of A<A<int> >) (practicalswift)
- -- #10623 `c38f540` doc: Add 0.14.2 release notes (MarcoFalke)
- -- #10276 `b750b33` contrib/verifybinaries: allow filtering by platform (knocte)
- -- #10248 `01c4b14` Rewrite addrdb with less duplication using CHashVerifier (sipa)
- -- #10577 `232508f` Add an explanation of quickly hashing onto a non-power of two range (gmaxwell)
- -- #10608 `eee398f` Add a comment explaining the use of MAX_BLOCK_BASE_SIZE (gmaxwell)
- -- #10728 `7397af9` fix typo in help text for removeprunedfunds (AkioNak)
- -- #10193 `6dbcc74` scripted-diff: Remove #include <boost/foreach.hpp> (jtimon)
- -- #10676 `379aed0` document script-based return fields for validateaddress (instagibbs)
- -- #10651 `cef4b5c` Verify binaries from bitcoincore.org and bitcoin.org (TheBlueMatt)
- -- #10786 `ca4c545` Add PR description to merge commit in github-merge.py (sipa)
- -- #10812 `c5904e8` [utils] Allow bitcoin-cli's -rpcconnect option to be used with square brackets (jnewbery)
- -- #10842 `3895e25` Fix incorrect Doxygen tag (@ince ? @since). Doxygen parameter name matching (practicalswift)
- -- #10681 `df0793f` add gdb attach process to test README (instagibbs)
- -- #10789 `1124328` Punctuation/grammer fixes in rpcwallet.cpp (stevendlander)
- -- #10655 `78f307b` Properly document target_confirmations in listsinceblock (RHavar)
- -- #10917 `5c003cb` developer-notes: add reference to snake_case and PascalCase (benma)
- -- #11003 `4b5a7ce` Docs: Capitalize bullet points in CONTRIBUTING guide (eklitzke)
- -- #10968 `98aa3f6` Add instructions for parallel gitian builds (coblee)
- -- #11076 `1c4b9b3` 0.15 release-notes nits: fix redundancy, remove accidental parenthesis & fix range style (practicalswift)
- -- #11090 `8f0121c` Update contributor names in release-notes.md (Derek701)
- -- #11056 `cbdd338` disable jni in builds (instagibbs)
- -- #11080 `2b59cfb` doc: Update build-openbsd for 6.1 (laanwj)
- -- #11119 `0a6af47` [doc] build-windows: Mention that only trusty works (MarcoFalke)
- -- #11108 `e8ad101` Changing -txindex requires -reindex, not -reindex-chainstate (TheBlueMatt)
- -- #9792 `342b9bc` FastRandomContext improvements and switch to ChaCha20 (sipa)
- -- #9505 `67ed40e` Prevector Quick Destruct (JeremyRubin)
- -- #10820 `ef37f20` Use cpuid intrinsics instead of asm code (sipa)
- -- #9999 `a328904` [LevelDB] Plug leveldb logs to bitcoin logs (NicolasDorier)
- -- #9693 `c5e9e42` Prevent integer overflow in ReadVarInt (gmaxwell)
- -- #10129 `351d0ad` scheduler: fix sub-second precision with boost < 1.50 (theuni)
- -- #10153 `fade788` logging: Fix off-by-one for shrinkdebugfile default (MarcoFalke)
- -- #10305 `c45da32` Fix potential NPD introduced in b297426c (TheBlueMatt)
- -- #10338 `daf3e7d` Maintain state across GetStrongRandBytes calls (sipa)
- -- #10544 `a4fe077` Update to LevelDB 1.20 (sipa)
- -- #10614 `cafe24f` random: fix crash on some 64bit platforms (theuni)
- -- #10714 `2a09a38` Avoid printing incorrect block indexing time due to uninitialized variable (practicalswift)
- -- #10837 `8bc6d1f` Fix resource leak on error in GetDevURandom (corebob)
- -- #10832 `89bb036` init: Factor out AppInitLockDataDirectory and fix startup core dump issue (laanwj)
- -- #10914 `b995a37` Add missing lock in CScheduler::AreThreadsServicingQueue() (TheBlueMatt)
- -- #10958 `659c096` Update to latest Bitcoin patches for LevelDB (sipa)
- -- #10919 `c1c671f` Fix more init bugs (TheBlueMatt)
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- [The Bitcoin Core Developers](/doc/release-notes)
- -- Adrian Gallagher
- -- aunyks
- -- coblee
- -- gabrieldov
- -- romanornr
- -- shaolinfry
- -- ultragtx
- -- voidmain
- -- xinxi
- \ No newline at end of file
- diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
- index 95dc463..9b6f14a 100644
- --- a/doc/man/Makefile.am
- +++ b/doc/man/Makefile.am
- @@ -1,13 +1,13 @@
- dist_man1_MANS=
- if BUILD_BITCOIND
- - dist_man1_MANS+=litecoind.1
- + dist_man1_MANS+=litecoincashd.1
- endif
- if ENABLE_QT
- - dist_man1_MANS+=litecoin-qt.1
- + dist_man1_MANS+=litecoincash-qt.1
- endif
- if BUILD_BITCOIN_UTILS
- - dist_man1_MANS+=litecoin-cli.1 litecoin-tx.1
- + dist_man1_MANS+=litecoincash-cli.1 litecoincash-tx.1
- endif
- diff --git a/doc/man/litecoin-cli.1 b/doc/man/litecoin-cli.1
- deleted file mode 100644
- index 7283c81..0000000
- --- a/doc/man/litecoin-cli.1
- +++ /dev/null
- @@ -1,94 +0,0 @@
- -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- -.TH LITECOIN-CLI "1" "September 2017" "litecoin-cli v0.15.0.1" "User Commands"
- -.SH NAME
- -litecoin-cli \- manual page for litecoin-cli v0.15.0.1
- -.SH DESCRIPTION
- -Litecoin Core RPC client version v0.15.0.1\-dirty
- -.SS "Usage:"
- -.TP
- -litecoin\-cli [options] <command> [params]
- -Send command to Litecoin Core
- -.IP
- -litecoin\-cli [options] \fB\-named\fR <command> [name=value] ... Send command to Litecoin Core (with named arguments)
- -litecoin\-cli [options] help List commands
- -litecoin\-cli [options] help <command> Get help for a command
- -.SH OPTIONS
- -.HP
- -\-?
- -.IP
- -This help message
- -.HP
- -\fB\-conf=\fR<file>
- -.IP
- -Specify configuration file (default: litecoin.conf)
- -.HP
- -\fB\-datadir=\fR<dir>
- -.IP
- -Specify data directory
- -.PP
- -Chain selection options:
- -.HP
- -\fB\-testnet\fR
- -.IP
- -Use the test chain
- -.HP
- -\fB\-regtest\fR
- -.IP
- -Enter regression test mode, which uses a special chain in which blocks
- -can be solved instantly. This is intended for regression testing
- -tools and app development.
- -.HP
- -\fB\-named\fR
- -.IP
- -Pass named instead of positional arguments (default: false)
- -.HP
- -\fB\-rpcconnect=\fR<ip>
- -.IP
- -Send commands to node running on <ip> (default: 127.0.0.1)
- -.HP
- -\fB\-rpcport=\fR<port>
- -.IP
- -Connect to JSON\-RPC on <port> (default: 9332 or testnet: 19332)
- -.HP
- -\fB\-rpcwait\fR
- -.IP
- -Wait for RPC server to start
- -.HP
- -\fB\-rpcuser=\fR<user>
- -.IP
- -Username for JSON\-RPC connections
- -.HP
- -\fB\-rpcpassword=\fR<pw>
- -.IP
- -Password for JSON\-RPC connections
- -.HP
- -\fB\-rpcclienttimeout=\fR<n>
- -.IP
- -Timeout in seconds during HTTP requests, or 0 for no timeout. (default:
- -900)
- -.HP
- -\fB\-stdin\fR
- -.IP
- -Read extra arguments from standard input, one per line until EOF/Ctrl\-D
- -(recommended for sensitive information such as passphrases)
- -.HP
- -\fB\-rpcwallet=\fR<walletname>
- -.IP
- -Send RPC for non\-default wallet on RPC server (argument is wallet
- -filename in litecoind directory, required if litecoind/\-Qt runs
- -with multiple wallets)
- -.SH COPYRIGHT
- -Copyright (C) 2009-2017 The Bitcoin Core developers
- -Copyright (C) 2011-2017 The Litecoin Core developers
- -
- -Please contribute if you find Litecoin Core useful. Visit
- -<https://litecoin.org> for further information about the software.
- -The source code is available from <https://github.com/litecoin-project/litecoin>.
- -
- -This is experimental software.
- -Distributed under the MIT software license, see the accompanying file COPYING
- -or <https://opensource.org/licenses/MIT>
- -
- -This product includes software developed by the OpenSSL Project for use in the
- -OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- -Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/man/litecoin-qt.1 b/doc/man/litecoin-qt.1
- deleted file mode 100644
- index e3a1e5f..0000000
- --- a/doc/man/litecoin-qt.1
- +++ /dev/null
- @@ -1,562 +0,0 @@
- -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- -.TH LITECOIN-QT "1" "September 2017" "litecoin-qt v0.15.0.1" "User Commands"
- -.SH NAME
- -litecoin-qt \- manual page for litecoin-qt v0.15.0.1
- -.SH DESCRIPTION
- -Litecoin Core version v0.15.0.1\-dirty (64\-bit)
- -Usage:
- -.IP
- -litecoin\-qt [command\-line options]
- -.SH OPTIONS
- -.HP
- -\-?
- -.IP
- -Print this help message and exit
- -.HP
- -\fB\-version\fR
- -.IP
- -Print version and exit
- -.HP
- -\fB\-alertnotify=\fR<cmd>
- -.IP
- -Execute command when a relevant alert is received or we see a really
- -long fork (%s in cmd is replaced by message)
- -.HP
- -\fB\-blocknotify=\fR<cmd>
- -.IP
- -Execute command when the best block changes (%s in cmd is replaced by
- -block hash)
- -.HP
- -\fB\-assumevalid=\fR<hex>
- -.IP
- -If this block is in the chain assume that it and its ancestors are valid
- -and potentially skip their script verification (0 to verify all,
- -default:
- -29c8c00e1a5f446a6364a29633d3f1ee16428d87c8d3851a1c570be8170b04c2,
- -testnet:
- -ad8ff6c2f5580d2b50bd881e11312425ea84fa99f322bf132beb722f97971bba)
- -.HP
- -\fB\-conf=\fR<file>
- -.IP
- -Specify configuration file (default: litecoin.conf)
- -.HP
- -\fB\-datadir=\fR<dir>
- -.IP
- -Specify data directory
- -.HP
- -\fB\-dbcache=\fR<n>
- -.IP
- -Set database cache size in megabytes (4 to 16384, default: 450)
- -.HP
- -\fB\-loadblock=\fR<file>
- -.IP
- -Imports blocks from external blk000??.dat file on startup
- -.HP
- -\fB\-maxorphantx=\fR<n>
- -.IP
- -Keep at most <n> unconnectable transactions in memory (default: 100)
- -.HP
- -\fB\-maxmempool=\fR<n>
- -.IP
- -Keep the transaction memory pool below <n> megabytes (default: 5)
- -.HP
- -\fB\-mempoolexpiry=\fR<n>
- -.IP
- -Do not keep transactions in the mempool longer than <n> hours (default:
- -336)
- -.HP
- -\fB\-persistmempool\fR
- -.IP
- -Whether to save the mempool on shutdown and load on restart (default: 1)
- -.HP
- -\fB\-blockreconstructionextratxn=\fR<n>
- -.IP
- -Extra transactions to keep in memory for compact block reconstructions
- -(default: 100)
- -.HP
- -\fB\-par=\fR<n>
- -.IP
- -Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 =
- -leave that many cores free, default: 0)
- -.HP
- -\fB\-pid=\fR<file>
- -.IP
- -Specify pid file (default: litecoind.pid)
- -.HP
- -\fB\-prune=\fR<n>
- -.IP
- -Reduce storage requirements by enabling pruning (deleting) of old
- -blocks. This allows the pruneblockchain RPC to be called to
- -delete specific blocks, and enables automatic pruning of old
- -blocks if a target size in MiB is provided. This mode is
- -incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
- -setting requires re\-downloading the entire blockchain. (default:
- -0 = disable pruning blocks, 1 = allow manual pruning via RPC,
- ->550 = automatically prune block files to stay under the
- -specified target size in MiB)
- -.HP
- -\fB\-reindex\-chainstate\fR
- -.IP
- -Rebuild chain state from the currently indexed blocks
- -.HP
- -\fB\-reindex\fR
- -.IP
- -Rebuild chain state and block index from the blk*.dat files on disk
- -.HP
- -\fB\-sysperms\fR
- -.IP
- -Create new files with system default permissions, instead of umask 077
- -(only effective with disabled wallet functionality)
- -.HP
- -\fB\-txindex\fR
- -.IP
- -Maintain a full transaction index, used by the getrawtransaction rpc
- -call (default: 0)
- -.PP
- -Connection options:
- -.HP
- -\fB\-addnode=\fR<ip>
- -.IP
- -Add a node to connect to and attempt to keep the connection open
- -.HP
- -\fB\-banscore=\fR<n>
- -.IP
- -Threshold for disconnecting misbehaving peers (default: 100)
- -.HP
- -\fB\-bantime=\fR<n>
- -.IP
- -Number of seconds to keep misbehaving peers from reconnecting (default:
- -86400)
- -.HP
- -\fB\-bind=\fR<addr>
- -.IP
- -Bind to given address and always listen on it. Use [host]:port notation
- -for IPv6
- -.HP
- -\fB\-connect=\fR<ip>
- -.IP
- -Connect only to the specified node(s); \fB\-connect\fR=\fI\,0\/\fR disables automatic
- -connections
- -.HP
- -\fB\-discover\fR
- -.IP
- -Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
- -or \fB\-proxy\fR)
- -.HP
- -\fB\-dns\fR
- -.IP
- -Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
- -.HP
- -\fB\-dnsseed\fR
- -.IP
- -Query for peer addresses via DNS lookup, if low on addresses (default: 1
- -unless \fB\-connect\fR used)
- -.HP
- -\fB\-externalip=\fR<ip>
- -.IP
- -Specify your own public address
- -.HP
- -\fB\-forcednsseed\fR
- -.IP
- -Always query for peer addresses via DNS lookup (default: 0)
- -.HP
- -\fB\-listen\fR
- -.IP
- -Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
- -.HP
- -\fB\-listenonion\fR
- -.IP
- -Automatically create Tor hidden service (default: 1)
- -.HP
- -\fB\-maxconnections=\fR<n>
- -.IP
- -Maintain at most <n> connections to peers (default: 125)
- -.HP
- -\fB\-maxreceivebuffer=\fR<n>
- -.IP
- -Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
- -.HP
- -\fB\-maxsendbuffer=\fR<n>
- -.IP
- -Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
- -.HP
- -\fB\-maxtimeadjustment\fR
- -.IP
- -Maximum allowed median peer time offset adjustment. Local perspective of
- -time may be influenced by peers forward or backward by this
- -amount. (default: 4200 seconds)
- -.HP
- -\fB\-onion=\fR<ip:port>
- -.IP
- -Use separate SOCKS5 proxy to reach peers via Tor hidden services
- -(default: \fB\-proxy\fR)
- -.HP
- -\fB\-onlynet=\fR<net>
- -.IP
- -Only connect to nodes in network <net> (ipv4, ipv6 or onion)
- -.HP
- -\fB\-permitbaremultisig\fR
- -.IP
- -Relay non\-P2SH multisig (default: 1)
- -.HP
- -\fB\-peerbloomfilters\fR
- -.IP
- -Support filtering of blocks and transaction with bloom filters (default:
- -1)
- -.HP
- -\fB\-port=\fR<port>
- -.IP
- -Listen for connections on <port> (default: 8333 or testnet: 18333)
- -.HP
- -\fB\-proxy=\fR<ip:port>
- -.IP
- -Connect through SOCKS5 proxy
- -.HP
- -\fB\-proxyrandomize\fR
- -.IP
- -Randomize credentials for every proxy connection. This enables Tor
- -stream isolation (default: 1)
- -.HP
- -\fB\-seednode=\fR<ip>
- -.IP
- -Connect to a node to retrieve peer addresses, and disconnect
- -.HP
- -\fB\-timeout=\fR<n>
- -.IP
- -Specify connection timeout in milliseconds (minimum: 1, default: 5000)
- -.HP
- -\fB\-torcontrol=\fR<ip>:<port>
- -.IP
- -Tor control port to use if onion listening enabled (default:
- -127.0.0.1:9051)
- -.HP
- -\fB\-torpassword=\fR<pass>
- -.IP
- -Tor control port password (default: empty)
- -.HP
- -\fB\-upnp\fR
- -.IP
- -Use UPnP to map the listening port (default: 0)
- -.HP
- -\fB\-whitebind=\fR<addr>
- -.IP
- -Bind to given address and whitelist peers connecting to it. Use
- -[host]:port notation for IPv6
- -.HP
- -\fB\-whitelist=\fR<IP address or network>
- -.IP
- -Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
- -CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
- -times. Whitelisted peers cannot be DoS banned and their
- -transactions are always relayed, even if they are already in the
- -mempool, useful e.g. for a gateway
- -.HP
- -\fB\-maxuploadtarget=\fR<n>
- -.IP
- -Tries to keep outbound traffic under the given target (in MiB per 24h),
- -0 = no limit (default: 0)
- -.PP
- -Wallet options:
- -.HP
- -\fB\-disablewallet\fR
- -.IP
- -Do not load the wallet and disable wallet RPC calls
- -.HP
- -\fB\-keypool=\fR<n>
- -.IP
- -Set key pool size to <n> (default: 1000)
- -.HP
- -\fB\-fallbackfee=\fR<amt>
- -.IP
- -A fee rate (in LTC/kB) that will be used when fee estimation has
- -insufficient data (default: 0.002)
- -.HP
- -\fB\-discardfee=\fR<amt>
- -.IP
- -The fee rate (in LTC/kB) that indicates your tolerance for discarding
- -change by adding it to the fee (default: 0.0001). Note: An output
- -is discarded if it is dust at this rate, but we will always
- -discard up to the dust relay fee and a discard fee above that is
- -limited by the fee estimate for the longest target
- -.HP
- -\fB\-mintxfee=\fR<amt>
- -.IP
- -Fees (in LTC/kB) smaller than this are considered zero fee for
- -transaction creation (default: 0.001)
- -.HP
- -\fB\-paytxfee=\fR<amt>
- -.IP
- -Fee (in LTC/kB) to add to transactions you send (default: 0.00)
- -.HP
- -\fB\-rescan\fR
- -.IP
- -Rescan the block chain for missing wallet transactions on startup
- -.HP
- -\fB\-salvagewallet\fR
- -.IP
- -Attempt to recover private keys from a corrupt wallet on startup
- -.HP
- -\fB\-spendzeroconfchange\fR
- -.IP
- -Spend unconfirmed change when sending transactions (default: 1)
- -.HP
- -\fB\-txconfirmtarget=\fR<n>
- -.IP
- -If paytxfee is not set, include enough fee so transactions begin
- -confirmation on average within n blocks (default: 6)
- -.HP
- -\fB\-usehd\fR
- -.IP
- -Use hierarchical deterministic key generation (HD) after BIP32. Only has
- -effect during wallet creation/first start (default: 1)
- -.HP
- -\fB\-walletrbf\fR
- -.IP
- -Send transactions with full\-RBF opt\-in enabled (default: 0)
- -.HP
- -\fB\-upgradewallet\fR
- -.IP
- -Upgrade wallet to latest format on startup
- -.HP
- -\fB\-wallet=\fR<file>
- -.IP
- -Specify wallet file (within data directory) (default: wallet.dat)
- -.HP
- -\fB\-walletbroadcast\fR
- -.IP
- -Make the wallet broadcast transactions (default: 1)
- -.HP
- -\fB\-walletnotify=\fR<cmd>
- -.IP
- -Execute command when a wallet transaction changes (%s in cmd is replaced
- -by TxID)
- -.HP
- -\fB\-zapwallettxes=\fR<mode>
- -.IP
- -Delete all wallet transactions and only recover those parts of the
- -blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
- -account owner and payment request information, 2 = drop tx meta
- -data)
- -.PP
- -ZeroMQ notification options:
- -.HP
- -\fB\-zmqpubhashblock=\fR<address>
- -.IP
- -Enable publish hash block in <address>
- -.HP
- -\fB\-zmqpubhashtx=\fR<address>
- -.IP
- -Enable publish hash transaction in <address>
- -.HP
- -\fB\-zmqpubrawblock=\fR<address>
- -.IP
- -Enable publish raw block in <address>
- -.HP
- -\fB\-zmqpubrawtx=\fR<address>
- -.IP
- -Enable publish raw transaction in <address>
- -.PP
- -Debugging/Testing options:
- -.HP
- -\fB\-uacomment=\fR<cmt>
- -.IP
- -Append comment to the user agent string
- -.HP
- -\fB\-debug=\fR<category>
- -.IP
- -Output debugging information (default: 0, supplying <category> is
- -optional). If <category> is not supplied or if <category> = 1,
- -output all debugging information. <category> can be: net, tor,
- -mempool, http, bench, zmq, db, rpc, estimatefee, addrman,
- -selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej,
- -libevent, coindb, qt, leveldb.
- -.HP
- -\fB\-debugexclude=\fR<category>
- -.IP
- -Exclude debugging information for a category. Can be used in conjunction
- -with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one
- -or more specified categories.
- -.HP
- -\fB\-help\-debug\fR
- -.IP
- -Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR)
- -.HP
- -\fB\-logips\fR
- -.IP
- -Include IP addresses in debug output (default: 0)
- -.HP
- -\fB\-logtimestamps\fR
- -.IP
- -Prepend debug output with timestamp (default: 1)
- -.HP
- -\fB\-maxtxfee=\fR<amt>
- -.IP
- -Maximum total fees (in LTC) to use in a single wallet transaction or raw
- -transaction; setting this too low may abort large transactions
- -(default: 0.10)
- -.HP
- -\fB\-printtoconsole\fR
- -.IP
- -Send trace/debug info to console instead of debug.log file
- -.HP
- -\fB\-shrinkdebugfile\fR
- -.IP
- -Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
- -.PP
- -Chain selection options:
- -.HP
- -\fB\-testnet\fR
- -.IP
- -Use the test chain
- -.PP
- -Node relay options:
- -.HP
- -\fB\-bytespersigop\fR
- -.IP
- -Equivalent bytes per sigop in transactions for relay and mining
- -(default: 20)
- -.HP
- -\fB\-datacarrier\fR
- -.IP
- -Relay and mine data carrier transactions (default: 1)
- -.HP
- -\fB\-datacarriersize\fR
- -.IP
- -Maximum size of data in data carrier transactions we relay and mine
- -(default: 83)
- -.HP
- -\fB\-mempoolreplacement\fR
- -.IP
- -Enable transaction replacement in the memory pool (default: 1)
- -.HP
- -\fB\-minrelaytxfee=\fR<amt>
- -.IP
- -Fees (in LTC/kB) smaller than this are considered zero fee for relaying,
- -mining and transaction creation (default: 0.001)
- -.HP
- -\fB\-whitelistrelay\fR
- -.IP
- -Accept relayed transactions received from whitelisted peers even when
- -not relaying transactions (default: 1)
- -.HP
- -\fB\-whitelistforcerelay\fR
- -.IP
- -Force relay of transactions from whitelisted peers even if they violate
- -local relay policy (default: 1)
- -.PP
- -Block creation options:
- -.HP
- -\fB\-blockmaxweight=\fR<n>
- -.IP
- -Set maximum BIP141 block weight (default: 3000000)
- -.HP
- -\fB\-blockmaxsize=\fR<n>
- -.IP
- -Set maximum block size in bytes (default: 750000)
- -.HP
- -\fB\-blockmintxfee=\fR<amt>
- -.IP
- -Set lowest fee rate (in LTC/kB) for transactions to be included in block
- -creation. (default: 0.00001)
- -.PP
- -RPC server options:
- -.HP
- -\fB\-server\fR
- -.IP
- -Accept command line and JSON\-RPC commands
- -.HP
- -\fB\-rest\fR
- -.IP
- -Accept public REST requests (default: 0)
- -.HP
- -\fB\-rpcbind=\fR<addr>[:port]
- -.IP
- -Bind to given address to listen for JSON\-RPC connections. This option is
- -ignored unless \fB\-rpcallowip\fR is also passed. Port is optional and
- -overrides \fB\-rpcport\fR. Use [host]:port notation for IPv6. This
- -option can be specified multiple times (default: 127.0.0.1 and
- -::1 i.e., localhost, or if \fB\-rpcallowip\fR has been specified,
- -0.0.0.0 and :: i.e., all addresses)
- -.HP
- -\fB\-rpccookiefile=\fR<loc>
- -.IP
- -Location of the auth cookie (default: data dir)
- -.HP
- -\fB\-rpcuser=\fR<user>
- -.IP
- -Username for JSON\-RPC connections
- -.HP
- -\fB\-rpcpassword=\fR<pw>
- -.IP
- -Password for JSON\-RPC connections
- -.HP
- -\fB\-rpcauth=\fR<userpw>
- -.IP
- -Username and hashed password for JSON\-RPC connections. The field
- -<userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
- -canonical python script is included in share/rpcuser. The client
- -then connects normally using the
- -rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
- -option can be specified multiple times
- -.HP
- -\fB\-rpcport=\fR<port>
- -.IP
- -Listen for JSON\-RPC connections on <port> (default: 9332 or testnet:
- -19332)
- -.HP
- -\fB\-rpcallowip=\fR<ip>
- -.IP
- -Allow JSON\-RPC connections from specified source. Valid for <ip> are a
- -single IP (e.g. 1.2.3.4), a network/netmask (e.g.
- -1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
- -option can be specified multiple times
- -.HP
- -\fB\-rpcserialversion\fR
- -.IP
- -Sets the serialization of raw transaction or block hex returned in
- -non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
- -.HP
- -\fB\-rpcthreads=\fR<n>
- -.IP
- -Set the number of threads to service RPC calls (default: 4)
- -.PP
- -UI Options:
- -.HP
- -\fB\-choosedatadir\fR
- -.IP
- -Choose data directory on startup (default: 0)
- -.HP
- -\fB\-lang=\fR<lang>
- -.IP
- -Set language, for example "de_DE" (default: system locale)
- -.HP
- -\fB\-min\fR
- -.IP
- -Start minimized
- -.HP
- -\fB\-rootcertificates=\fR<file>
- -.IP
- -Set SSL root certificates for payment request (default: \fB\-system\-\fR)
- -.HP
- -\fB\-splash\fR
- -.IP
- -Show splash screen on startup (default: 1)
- -.HP
- -\fB\-resetguisettings\fR
- -.IP
- -Reset all settings changed in the GUI
- -.SH COPYRIGHT
- -Copyright (C) 2009-2017 The Bitcoin Core developers
- -Copyright (C) 2011-2017 The Litecoin Core developers
- -
- -Please contribute if you find Litecoin Core useful. Visit
- -<https://litecoin.org> for further information about the software.
- -The source code is available from <https://github.com/litecoin-project/litecoin>.
- -
- -This is experimental software.
- -Distributed under the MIT software license, see the accompanying file COPYING
- -or <https://opensource.org/licenses/MIT>
- -
- -This product includes software developed by the OpenSSL Project for use in the
- -OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- -Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/man/litecoin-tx.1 b/doc/man/litecoin-tx.1
- deleted file mode 100644
- index 5e0a6b7..0000000
- --- a/doc/man/litecoin-tx.1
- +++ /dev/null
- @@ -1,128 +0,0 @@
- -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- -.TH LITECOIN-TX "1" "September 2017" "litecoin-tx v0.15.0.1" "User Commands"
- -.SH NAME
- -litecoin-tx \- manual page for litecoin-tx v0.15.0.1
- -.SH DESCRIPTION
- -Litecoin Core litecoin\-tx utility version v0.15.0.1\-dirty
- -.SS "Usage:"
- -.TP
- -litecoin\-tx [options] <hex\-tx> [commands]
- -Update hex\-encoded litecoin transaction
- -.TP
- -litecoin\-tx [options] \fB\-create\fR [commands]
- -Create hex\-encoded litecoin transaction
- -.SH OPTIONS
- -.HP
- -\-?
- -.IP
- -This help message
- -.HP
- -\fB\-create\fR
- -.IP
- -Create new, empty TX.
- -.HP
- -\fB\-json\fR
- -.IP
- -Select JSON output
- -.HP
- -\fB\-txid\fR
- -.IP
- -Output only the hex\-encoded transaction id of the resultant transaction.
- -.PP
- -Chain selection options:
- -.HP
- -\fB\-testnet\fR
- -.IP
- -Use the test chain
- -.HP
- -\fB\-regtest\fR
- -.IP
- -Enter regression test mode, which uses a special chain in which blocks
- -can be solved instantly. This is intended for regression testing
- -tools and app development.
- -.PP
- -Commands:
- -.IP
- -delin=N
- -.IP
- -Delete input N from TX
- -.IP
- -delout=N
- -.IP
- -Delete output N from TX
- -.IP
- -in=TXID:VOUT(:SEQUENCE_NUMBER)
- -.IP
- -Add input to TX
- -.IP
- -locktime=N
- -.IP
- -Set TX lock time to N
- -.IP
- -nversion=N
- -.IP
- -Set TX version to N
- -.IP
- -replaceable(=N)
- -.IP
- -Set RBF opt\-in sequence number for input N (if not provided, opt\-in all
- -available inputs)
- -.IP
- -outaddr=VALUE:ADDRESS
- -.IP
- -Add address\-based output to TX
- -.IP
- -outpubkey=VALUE:PUBKEY[:FLAGS]
- -.IP
- -Add pay\-to\-pubkey output to TX. Optionally add the "W" flag to produce a
- -pay\-to\-witness\-pubkey\-hash output. Optionally add the "S" flag to
- -wrap the output in a pay\-to\-script\-hash.
- -.IP
- -outdata=[VALUE:]DATA
- -.IP
- -Add data\-based output to TX
- -.IP
- -outscript=VALUE:SCRIPT[:FLAGS]
- -.IP
- -Add raw script output to TX. Optionally add the "W" flag to produce a
- -pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
- -wrap the output in a pay\-to\-script\-hash.
- -.IP
- -outmultisig=VALUE:REQUIRED:PUBKEYS:PUBKEY1:PUBKEY2:....[:FLAGS]
- -.IP
- -Add Pay To n\-of\-m Multi\-sig output to TX. n = REQUIRED, m = PUBKEYS.
- -Optionally add the "W" flag to produce a
- -pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
- -wrap the output in a pay\-to\-script\-hash.
- -.IP
- -sign=SIGHASH\-FLAGS
- -.IP
- -Add zero or more signatures to transaction. This command requires JSON
- -registers:prevtxs=JSON object, privatekeys=JSON object. See
- -signrawtransaction docs for format of sighash flags, JSON
- -objects.
- -.PP
- -Register Commands:
- -.IP
- -load=NAME:FILENAME
- -.IP
- -Load JSON file FILENAME into register NAME
- -.IP
- -set=NAME:JSON\-STRING
- -.IP
- -Set register NAME to given JSON\-STRING
- -.SH COPYRIGHT
- -Copyright (C) 2009-2017 The Bitcoin Core developers
- -Copyright (C) 2011-2017 The Litecoin Core developers
- -
- -Please contribute if you find Litecoin Core useful. Visit
- -<https://litecoin.org> for further information about the software.
- -The source code is available from <https://github.com/litecoin-project/litecoin>.
- -
- -This is experimental software.
- -Distributed under the MIT software license, see the accompanying file COPYING
- -or <https://opensource.org/licenses/MIT>
- -
- -This product includes software developed by the OpenSSL Project for use in the
- -OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- -Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/man/litecoincash-cli.1 b/doc/man/litecoincash-cli.1
- new file mode 100644
- index 0000000..59d78ef
- --- /dev/null
- +++ b/doc/man/litecoincash-cli.1
- @@ -0,0 +1,94 @@
- +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- +.TH LITECOINCASH-CLI "1" "September 2017" "litecoincash-cli v0.15.0.1" "User Commands"
- +.SH NAME
- +litecoincash-cli \- manual page for litecoincash-cli v0.15.0.1
- +.SH DESCRIPTION
- +LitecoinCash Core RPC client version v0.15.0.1\-dirty
- +.SS "Usage:"
- +.TP
- +litecoincash\-cli [options] <command> [params]
- +Send command to LitecoinCash Core
- +.IP
- +litecoincash\-cli [options] \fB\-named\fR <command> [name=value] ... Send command to LitecoinCash Core (with named arguments)
- +litecoincash\-cli [options] help List commands
- +litecoincash\-cli [options] help <command> Get help for a command
- +.SH OPTIONS
- +.HP
- +\-?
- +.IP
- +This help message
- +.HP
- +\fB\-conf=\fR<file>
- +.IP
- +Specify configuration file (default: litecoincash.conf)
- +.HP
- +\fB\-datadir=\fR<dir>
- +.IP
- +Specify data directory
- +.PP
- +Chain selection options:
- +.HP
- +\fB\-testnet\fR
- +.IP
- +Use the test chain
- +.HP
- +\fB\-regtest\fR
- +.IP
- +Enter regression test mode, which uses a special chain in which blocks
- +can be solved instantly. This is intended for regression testing
- +tools and app development.
- +.HP
- +\fB\-named\fR
- +.IP
- +Pass named instead of positional arguments (default: false)
- +.HP
- +\fB\-rpcconnect=\fR<ip>
- +.IP
- +Send commands to node running on <ip> (default: 127.0.0.1)
- +.HP
- +\fB\-rpcport=\fR<port>
- +.IP
- +Connect to JSON\-RPC on <port> (default: 62457 or testnet: 62455)
- +.HP
- +\fB\-rpcwait\fR
- +.IP
- +Wait for RPC server to start
- +.HP
- +\fB\-rpcuser=\fR<user>
- +.IP
- +Username for JSON\-RPC connections
- +.HP
- +\fB\-rpcpassword=\fR<pw>
- +.IP
- +Password for JSON\-RPC connections
- +.HP
- +\fB\-rpcclienttimeout=\fR<n>
- +.IP
- +Timeout in seconds during HTTP requests, or 0 for no timeout. (default:
- +900)
- +.HP
- +\fB\-stdin\fR
- +.IP
- +Read extra arguments from standard input, one per line until EOF/Ctrl\-D
- +(recommended for sensitive information such as passphrases)
- +.HP
- +\fB\-rpcwallet=\fR<walletname>
- +.IP
- +Send RPC for non\-default wallet on RPC server (argument is wallet
- +filename in litecoincashd directory, required if litecoincashd/\-Qt runs
- +with multiple wallets)
- +.SH COPYRIGHT
- +Copyright (C) 2009-2017 The Bitcoin Core developers
- +Copyright (C) 2011-2017 The Litecoin Core developers
- +
- +Please contribute if you find LitecoinCash Core useful. Visit
- +<https://litecoincash.org> for further information about the software.
- +The source code is available from <https://github.com/litecoincash-project/litecoincash>.
- +
- +This is experimental software.
- +Distributed under the MIT software license, see the accompanying file COPYING
- +or <https://opensource.org/licenses/MIT>
- +
- +This product includes software developed by the OpenSSL Project for use in the
- +OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- +Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/man/litecoincash-qt.1 b/doc/man/litecoincash-qt.1
- new file mode 100644
- index 0000000..f08bd3f
- --- /dev/null
- +++ b/doc/man/litecoincash-qt.1
- @@ -0,0 +1,562 @@
- +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- +.TH LITECOINCASH-QT "1" "September 2017" "litecoincash-qt v0.15.0.1" "User Commands"
- +.SH NAME
- +litecoincash-qt \- manual page for litecoincash-qt v0.15.0.1
- +.SH DESCRIPTION
- +LitecoinCash Core version v0.15.0.1\-dirty (64\-bit)
- +Usage:
- +.IP
- +litecoincash\-qt [command\-line options]
- +.SH OPTIONS
- +.HP
- +\-?
- +.IP
- +Print this help message and exit
- +.HP
- +\fB\-version\fR
- +.IP
- +Print version and exit
- +.HP
- +\fB\-alertnotify=\fR<cmd>
- +.IP
- +Execute command when a relevant alert is received or we see a really
- +long fork (%s in cmd is replaced by message)
- +.HP
- +\fB\-blocknotify=\fR<cmd>
- +.IP
- +Execute command when the best block changes (%s in cmd is replaced by
- +block hash)
- +.HP
- +\fB\-assumevalid=\fR<hex>
- +.IP
- +If this block is in the chain assume that it and its ancestors are valid
- +and potentially skip their script verification (0 to verify all,
- +default:
- +29c8c00e1a5f446a6364a29633d3f1ee16428d87c8d3851a1c570be8170b04c2,
- +testnet:
- +ad8ff6c2f5580d2b50bd881e11312425ea84fa99f322bf132beb722f97971bba)
- +.HP
- +\fB\-conf=\fR<file>
- +.IP
- +Specify configuration file (default: litecoincash.conf)
- +.HP
- +\fB\-datadir=\fR<dir>
- +.IP
- +Specify data directory
- +.HP
- +\fB\-dbcache=\fR<n>
- +.IP
- +Set database cache size in megabytes (4 to 16384, default: 450)
- +.HP
- +\fB\-loadblock=\fR<file>
- +.IP
- +Imports blocks from external blk000??.dat file on startup
- +.HP
- +\fB\-maxorphantx=\fR<n>
- +.IP
- +Keep at most <n> unconnectable transactions in memory (default: 100)
- +.HP
- +\fB\-maxmempool=\fR<n>
- +.IP
- +Keep the transaction memory pool below <n> megabytes (default: 5)
- +.HP
- +\fB\-mempoolexpiry=\fR<n>
- +.IP
- +Do not keep transactions in the mempool longer than <n> hours (default:
- +336)
- +.HP
- +\fB\-persistmempool\fR
- +.IP
- +Whether to save the mempool on shutdown and load on restart (default: 1)
- +.HP
- +\fB\-blockreconstructionextratxn=\fR<n>
- +.IP
- +Extra transactions to keep in memory for compact block reconstructions
- +(default: 100)
- +.HP
- +\fB\-par=\fR<n>
- +.IP
- +Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 =
- +leave that many cores free, default: 0)
- +.HP
- +\fB\-pid=\fR<file>
- +.IP
- +Specify pid file (default: litecoincashd.pid)
- +.HP
- +\fB\-prune=\fR<n>
- +.IP
- +Reduce storage requirements by enabling pruning (deleting) of old
- +blocks. This allows the pruneblockchain RPC to be called to
- +delete specific blocks, and enables automatic pruning of old
- +blocks if a target size in MiB is provided. This mode is
- +incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
- +setting requires re\-downloading the entire blockchain. (default:
- +0 = disable pruning blocks, 1 = allow manual pruning via RPC,
- +>550 = automatically prune block files to stay under the
- +specified target size in MiB)
- +.HP
- +\fB\-reindex\-chainstate\fR
- +.IP
- +Rebuild chain state from the currently indexed blocks
- +.HP
- +\fB\-reindex\fR
- +.IP
- +Rebuild chain state and block index from the blk*.dat files on disk
- +.HP
- +\fB\-sysperms\fR
- +.IP
- +Create new files with system default permissions, instead of umask 077
- +(only effective with disabled wallet functionality)
- +.HP
- +\fB\-txindex\fR
- +.IP
- +Maintain a full transaction index, used by the getrawtransaction rpc
- +call (default: 0)
- +.PP
- +Connection options:
- +.HP
- +\fB\-addnode=\fR<ip>
- +.IP
- +Add a node to connect to and attempt to keep the connection open
- +.HP
- +\fB\-banscore=\fR<n>
- +.IP
- +Threshold for disconnecting misbehaving peers (default: 100)
- +.HP
- +\fB\-bantime=\fR<n>
- +.IP
- +Number of seconds to keep misbehaving peers from reconnecting (default:
- +86400)
- +.HP
- +\fB\-bind=\fR<addr>
- +.IP
- +Bind to given address and always listen on it. Use [host]:port notation
- +for IPv6
- +.HP
- +\fB\-connect=\fR<ip>
- +.IP
- +Connect only to the specified node(s); \fB\-connect\fR=\fI\,0\/\fR disables automatic
- +connections
- +.HP
- +\fB\-discover\fR
- +.IP
- +Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
- +or \fB\-proxy\fR)
- +.HP
- +\fB\-dns\fR
- +.IP
- +Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
- +.HP
- +\fB\-dnsseed\fR
- +.IP
- +Query for peer addresses via DNS lookup, if low on addresses (default: 1
- +unless \fB\-connect\fR used)
- +.HP
- +\fB\-externalip=\fR<ip>
- +.IP
- +Specify your own public address
- +.HP
- +\fB\-forcednsseed\fR
- +.IP
- +Always query for peer addresses via DNS lookup (default: 0)
- +.HP
- +\fB\-listen\fR
- +.IP
- +Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
- +.HP
- +\fB\-listenonion\fR
- +.IP
- +Automatically create Tor hidden service (default: 1)
- +.HP
- +\fB\-maxconnections=\fR<n>
- +.IP
- +Maintain at most <n> connections to peers (default: 125)
- +.HP
- +\fB\-maxreceivebuffer=\fR<n>
- +.IP
- +Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
- +.HP
- +\fB\-maxsendbuffer=\fR<n>
- +.IP
- +Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
- +.HP
- +\fB\-maxtimeadjustment\fR
- +.IP
- +Maximum allowed median peer time offset adjustment. Local perspective of
- +time may be influenced by peers forward or backward by this
- +amount. (default: 4200 seconds)
- +.HP
- +\fB\-onion=\fR<ip:port>
- +.IP
- +Use separate SOCKS5 proxy to reach peers via Tor hidden services
- +(default: \fB\-proxy\fR)
- +.HP
- +\fB\-onlynet=\fR<net>
- +.IP
- +Only connect to nodes in network <net> (ipv4, ipv6 or onion)
- +.HP
- +\fB\-permitbaremultisig\fR
- +.IP
- +Relay non\-P2SH multisig (default: 1)
- +.HP
- +\fB\-peerbloomfilters\fR
- +.IP
- +Support filtering of blocks and transaction with bloom filters (default:
- +1)
- +.HP
- +\fB\-port=\fR<port>
- +.IP
- +Listen for connections on <port> (default: 62458 or testnet: 62456)
- +.HP
- +\fB\-proxy=\fR<ip:port>
- +.IP
- +Connect through SOCKS5 proxy
- +.HP
- +\fB\-proxyrandomize\fR
- +.IP
- +Randomize credentials for every proxy connection. This enables Tor
- +stream isolation (default: 1)
- +.HP
- +\fB\-seednode=\fR<ip>
- +.IP
- +Connect to a node to retrieve peer addresses, and disconnect
- +.HP
- +\fB\-timeout=\fR<n>
- +.IP
- +Specify connection timeout in milliseconds (minimum: 1, default: 5000)
- +.HP
- +\fB\-torcontrol=\fR<ip>:<port>
- +.IP
- +Tor control port to use if onion listening enabled (default:
- +127.0.0.1:9051)
- +.HP
- +\fB\-torpassword=\fR<pass>
- +.IP
- +Tor control port password (default: empty)
- +.HP
- +\fB\-upnp\fR
- +.IP
- +Use UPnP to map the listening port (default: 0)
- +.HP
- +\fB\-whitebind=\fR<addr>
- +.IP
- +Bind to given address and whitelist peers connecting to it. Use
- +[host]:port notation for IPv6
- +.HP
- +\fB\-whitelist=\fR<IP address or network>
- +.IP
- +Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
- +CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
- +times. Whitelisted peers cannot be DoS banned and their
- +transactions are always relayed, even if they are already in the
- +mempool, useful e.g. for a gateway
- +.HP
- +\fB\-maxuploadtarget=\fR<n>
- +.IP
- +Tries to keep outbound traffic under the given target (in MiB per 24h),
- +0 = no limit (default: 0)
- +.PP
- +Wallet options:
- +.HP
- +\fB\-disablewallet\fR
- +.IP
- +Do not load the wallet and disable wallet RPC calls
- +.HP
- +\fB\-keypool=\fR<n>
- +.IP
- +Set key pool size to <n> (default: 1000)
- +.HP
- +\fB\-fallbackfee=\fR<amt>
- +.IP
- +A fee rate (in LCC/kB) that will be used when fee estimation has
- +insufficient data (default: 0.002)
- +.HP
- +\fB\-discardfee=\fR<amt>
- +.IP
- +The fee rate (in LCC/kB) that indicates your tolerance for discarding
- +change by adding it to the fee (default: 0.0001). Note: An output
- +is discarded if it is dust at this rate, but we will always
- +discard up to the dust relay fee and a discard fee above that is
- +limited by the fee estimate for the longest target
- +.HP
- +\fB\-mintxfee=\fR<amt>
- +.IP
- +Fees (in LCC/kB) smaller than this are considered zero fee for
- +transaction creation (default: 0.001)
- +.HP
- +\fB\-paytxfee=\fR<amt>
- +.IP
- +Fee (in LCC/kB) to add to transactions you send (default: 0.00)
- +.HP
- +\fB\-rescan\fR
- +.IP
- +Rescan the block chain for missing wallet transactions on startup
- +.HP
- +\fB\-salvagewallet\fR
- +.IP
- +Attempt to recover private keys from a corrupt wallet on startup
- +.HP
- +\fB\-spendzeroconfchange\fR
- +.IP
- +Spend unconfirmed change when sending transactions (default: 1)
- +.HP
- +\fB\-txconfirmtarget=\fR<n>
- +.IP
- +If paytxfee is not set, include enough fee so transactions begin
- +confirmation on average within n blocks (default: 6)
- +.HP
- +\fB\-usehd\fR
- +.IP
- +Use hierarchical deterministic key generation (HD) after BIP32. Only has
- +effect during wallet creation/first start (default: 1)
- +.HP
- +\fB\-walletrbf\fR
- +.IP
- +Send transactions with full\-RBF opt\-in enabled (default: 0)
- +.HP
- +\fB\-upgradewallet\fR
- +.IP
- +Upgrade wallet to latest format on startup
- +.HP
- +\fB\-wallet=\fR<file>
- +.IP
- +Specify wallet file (within data directory) (default: wallet.dat)
- +.HP
- +\fB\-walletbroadcast\fR
- +.IP
- +Make the wallet broadcast transactions (default: 1)
- +.HP
- +\fB\-walletnotify=\fR<cmd>
- +.IP
- +Execute command when a wallet transaction changes (%s in cmd is replaced
- +by TxID)
- +.HP
- +\fB\-zapwallettxes=\fR<mode>
- +.IP
- +Delete all wallet transactions and only recover those parts of the
- +blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
- +account owner and payment request information, 2 = drop tx meta
- +data)
- +.PP
- +ZeroMQ notification options:
- +.HP
- +\fB\-zmqpubhashblock=\fR<address>
- +.IP
- +Enable publish hash block in <address>
- +.HP
- +\fB\-zmqpubhashtx=\fR<address>
- +.IP
- +Enable publish hash transaction in <address>
- +.HP
- +\fB\-zmqpubrawblock=\fR<address>
- +.IP
- +Enable publish raw block in <address>
- +.HP
- +\fB\-zmqpubrawtx=\fR<address>
- +.IP
- +Enable publish raw transaction in <address>
- +.PP
- +Debugging/Testing options:
- +.HP
- +\fB\-uacomment=\fR<cmt>
- +.IP
- +Append comment to the user agent string
- +.HP
- +\fB\-debug=\fR<category>
- +.IP
- +Output debugging information (default: 0, supplying <category> is
- +optional). If <category> is not supplied or if <category> = 1,
- +output all debugging information. <category> can be: net, tor,
- +mempool, http, bench, zmq, db, rpc, estimatefee, addrman,
- +selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej,
- +libevent, coindb, qt, leveldb.
- +.HP
- +\fB\-debugexclude=\fR<category>
- +.IP
- +Exclude debugging information for a category. Can be used in conjunction
- +with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one
- +or more specified categories.
- +.HP
- +\fB\-help\-debug\fR
- +.IP
- +Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR)
- +.HP
- +\fB\-logips\fR
- +.IP
- +Include IP addresses in debug output (default: 0)
- +.HP
- +\fB\-logtimestamps\fR
- +.IP
- +Prepend debug output with timestamp (default: 1)
- +.HP
- +\fB\-maxtxfee=\fR<amt>
- +.IP
- +Maximum total fees (in LCC) to use in a single wallet transaction or raw
- +transaction; setting this too low may abort large transactions
- +(default: 0.10)
- +.HP
- +\fB\-printtoconsole\fR
- +.IP
- +Send trace/debug info to console instead of debug.log file
- +.HP
- +\fB\-shrinkdebugfile\fR
- +.IP
- +Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
- +.PP
- +Chain selection options:
- +.HP
- +\fB\-testnet\fR
- +.IP
- +Use the test chain
- +.PP
- +Node relay options:
- +.HP
- +\fB\-bytespersigop\fR
- +.IP
- +Equivalent bytes per sigop in transactions for relay and mining
- +(default: 20)
- +.HP
- +\fB\-datacarrier\fR
- +.IP
- +Relay and mine data carrier transactions (default: 1)
- +.HP
- +\fB\-datacarriersize\fR
- +.IP
- +Maximum size of data in data carrier transactions we relay and mine
- +(default: 83)
- +.HP
- +\fB\-mempoolreplacement\fR
- +.IP
- +Enable transaction replacement in the memory pool (default: 1)
- +.HP
- +\fB\-minrelaytxfee=\fR<amt>
- +.IP
- +Fees (in LCC/kB) smaller than this are considered zero fee for relaying,
- +mining and transaction creation (default: 0.001)
- +.HP
- +\fB\-whitelistrelay\fR
- +.IP
- +Accept relayed transactions received from whitelisted peers even when
- +not relaying transactions (default: 1)
- +.HP
- +\fB\-whitelistforcerelay\fR
- +.IP
- +Force relay of transactions from whitelisted peers even if they violate
- +local relay policy (default: 1)
- +.PP
- +Block creation options:
- +.HP
- +\fB\-blockmaxweight=\fR<n>
- +.IP
- +Set maximum BIP141 block weight (default: 3000000)
- +.HP
- +\fB\-blockmaxsize=\fR<n>
- +.IP
- +Set maximum block size in bytes (default: 750000)
- +.HP
- +\fB\-blockmintxfee=\fR<amt>
- +.IP
- +Set lowest fee rate (in LCC/kB) for transactions to be included in block
- +creation. (default: 0.00001)
- +.PP
- +RPC server options:
- +.HP
- +\fB\-server\fR
- +.IP
- +Accept command line and JSON\-RPC commands
- +.HP
- +\fB\-rest\fR
- +.IP
- +Accept public REST requests (default: 0)
- +.HP
- +\fB\-rpcbind=\fR<addr>[:port]
- +.IP
- +Bind to given address to listen for JSON\-RPC connections. This option is
- +ignored unless \fB\-rpcallowip\fR is also passed. Port is optional and
- +overrides \fB\-rpcport\fR. Use [host]:port notation for IPv6. This
- +option can be specified multiple times (default: 127.0.0.1 and
- +::1 i.e., localhost, or if \fB\-rpcallowip\fR has been specified,
- +0.0.0.0 and :: i.e., all addresses)
- +.HP
- +\fB\-rpccookiefile=\fR<loc>
- +.IP
- +Location of the auth cookie (default: data dir)
- +.HP
- +\fB\-rpcuser=\fR<user>
- +.IP
- +Username for JSON\-RPC connections
- +.HP
- +\fB\-rpcpassword=\fR<pw>
- +.IP
- +Password for JSON\-RPC connections
- +.HP
- +\fB\-rpcauth=\fR<userpw>
- +.IP
- +Username and hashed password for JSON\-RPC connections. The field
- +<userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
- +canonical python script is included in share/rpcuser. The client
- +then connects normally using the
- +rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
- +option can be specified multiple times
- +.HP
- +\fB\-rpcport=\fR<port>
- +.IP
- +Listen for JSON\-RPC connections on <port> (default: 62457 or testnet:
- +62455)
- +.HP
- +\fB\-rpcallowip=\fR<ip>
- +.IP
- +Allow JSON\-RPC connections from specified source. Valid for <ip> are a
- +single IP (e.g. 1.2.3.4), a network/netmask (e.g.
- +1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
- +option can be specified multiple times
- +.HP
- +\fB\-rpcserialversion\fR
- +.IP
- +Sets the serialization of raw transaction or block hex returned in
- +non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
- +.HP
- +\fB\-rpcthreads=\fR<n>
- +.IP
- +Set the number of threads to service RPC calls (default: 4)
- +.PP
- +UI Options:
- +.HP
- +\fB\-choosedatadir\fR
- +.IP
- +Choose data directory on startup (default: 0)
- +.HP
- +\fB\-lang=\fR<lang>
- +.IP
- +Set language, for example "de_DE" (default: system locale)
- +.HP
- +\fB\-min\fR
- +.IP
- +Start minimized
- +.HP
- +\fB\-rootcertificates=\fR<file>
- +.IP
- +Set SSL root certificates for payment request (default: \fB\-system\-\fR)
- +.HP
- +\fB\-splash\fR
- +.IP
- +Show splash screen on startup (default: 1)
- +.HP
- +\fB\-resetguisettings\fR
- +.IP
- +Reset all settings changed in the GUI
- +.SH COPYRIGHT
- +Copyright (C) 2009-2017 The Bitcoin Core developers
- +Copyright (C) 2011-2017 The Litecoin Core developers
- +
- +Please contribute if you find LitecoinCash Core useful. Visit
- +<https://litecoincash.org> for further information about the software.
- +The source code is available from <https://github.com/litecoincash-project/litecoincash>.
- +
- +This is experimental software.
- +Distributed under the MIT software license, see the accompanying file COPYING
- +or <https://opensource.org/licenses/MIT>
- +
- +This product includes software developed by the OpenSSL Project for use in the
- +OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- +Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/man/litecoincash-tx.1 b/doc/man/litecoincash-tx.1
- new file mode 100644
- index 0000000..0e876b3
- --- /dev/null
- +++ b/doc/man/litecoincash-tx.1
- @@ -0,0 +1,128 @@
- +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- +.TH LITECOINCASH-TX "1" "September 2017" "litecoincash-tx v0.15.0.1" "User Commands"
- +.SH NAME
- +litecoincash-tx \- manual page for litecoincash-tx v0.15.0.1
- +.SH DESCRIPTION
- +LitecoinCash Core litecoincash\-tx utility version v0.15.0.1\-dirty
- +.SS "Usage:"
- +.TP
- +litecoincash\-tx [options] <hex\-tx> [commands]
- +Update hex\-encoded litecoincash transaction
- +.TP
- +litecoincash\-tx [options] \fB\-create\fR [commands]
- +Create hex\-encoded litecoincash transaction
- +.SH OPTIONS
- +.HP
- +\-?
- +.IP
- +This help message
- +.HP
- +\fB\-create\fR
- +.IP
- +Create new, empty TX.
- +.HP
- +\fB\-json\fR
- +.IP
- +Select JSON output
- +.HP
- +\fB\-txid\fR
- +.IP
- +Output only the hex\-encoded transaction id of the resultant transaction.
- +.PP
- +Chain selection options:
- +.HP
- +\fB\-testnet\fR
- +.IP
- +Use the test chain
- +.HP
- +\fB\-regtest\fR
- +.IP
- +Enter regression test mode, which uses a special chain in which blocks
- +can be solved instantly. This is intended for regression testing
- +tools and app development.
- +.PP
- +Commands:
- +.IP
- +delin=N
- +.IP
- +Delete input N from TX
- +.IP
- +delout=N
- +.IP
- +Delete output N from TX
- +.IP
- +in=TXID:VOUT(:SEQUENCE_NUMBER)
- +.IP
- +Add input to TX
- +.IP
- +locktime=N
- +.IP
- +Set TX lock time to N
- +.IP
- +nversion=N
- +.IP
- +Set TX version to N
- +.IP
- +replaceable(=N)
- +.IP
- +Set RBF opt\-in sequence number for input N (if not provided, opt\-in all
- +available inputs)
- +.IP
- +outaddr=VALUE:ADDRESS
- +.IP
- +Add address\-based output to TX
- +.IP
- +outpubkey=VALUE:PUBKEY[:FLAGS]
- +.IP
- +Add pay\-to\-pubkey output to TX. Optionally add the "W" flag to produce a
- +pay\-to\-witness\-pubkey\-hash output. Optionally add the "S" flag to
- +wrap the output in a pay\-to\-script\-hash.
- +.IP
- +outdata=[VALUE:]DATA
- +.IP
- +Add data\-based output to TX
- +.IP
- +outscript=VALUE:SCRIPT[:FLAGS]
- +.IP
- +Add raw script output to TX. Optionally add the "W" flag to produce a
- +pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
- +wrap the output in a pay\-to\-script\-hash.
- +.IP
- +outmultisig=VALUE:REQUIRED:PUBKEYS:PUBKEY1:PUBKEY2:....[:FLAGS]
- +.IP
- +Add Pay To n\-of\-m Multi\-sig output to TX. n = REQUIRED, m = PUBKEYS.
- +Optionally add the "W" flag to produce a
- +pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
- +wrap the output in a pay\-to\-script\-hash.
- +.IP
- +sign=SIGHASH\-FLAGS
- +.IP
- +Add zero or more signatures to transaction. This command requires JSON
- +registers:prevtxs=JSON object, privatekeys=JSON object. See
- +signrawtransaction docs for format of sighash flags, JSON
- +objects.
- +.PP
- +Register Commands:
- +.IP
- +load=NAME:FILENAME
- +.IP
- +Load JSON file FILENAME into register NAME
- +.IP
- +set=NAME:JSON\-STRING
- +.IP
- +Set register NAME to given JSON\-STRING
- +.SH COPYRIGHT
- +Copyright (C) 2009-2017 The Bitcoin Core developers
- +Copyright (C) 2011-2017 The Litecoin Core developers
- +
- +Please contribute if you find LitecoinCash Core useful. Visit
- +<https://litecoincash.org> for further information about the software.
- +The source code is available from <https://github.com/litecoincash-project/litecoincash>.
- +
- +This is experimental software.
- +Distributed under the MIT software license, see the accompanying file COPYING
- +or <https://opensource.org/licenses/MIT>
- +
- +This product includes software developed by the OpenSSL Project for use in the
- +OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- +Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/man/litecoincashd.1 b/doc/man/litecoincashd.1
- new file mode 100644
- index 0000000..06a280d
- --- /dev/null
- +++ b/doc/man/litecoincashd.1
- @@ -0,0 +1,541 @@
- +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- +.TH LITECOINCASHD "1" "September 2017" "litecoincashd v0.15.0.1" "User Commands"
- +.SH NAME
- +litecoincashd \- manual page for litecoincashd v0.15.0.1
- +.SH DESCRIPTION
- +LitecoinCash Core Daemon version v0.15.0.1\-dirty
- +.SS "Usage:"
- +.TP
- +litecoincashd [options]
- +Start LitecoinCash Core Daemon
- +.SH OPTIONS
- +.HP
- +\-?
- +.IP
- +Print this help message and exit
- +.HP
- +\fB\-version\fR
- +.IP
- +Print version and exit
- +.HP
- +\fB\-alertnotify=\fR<cmd>
- +.IP
- +Execute command when a relevant alert is received or we see a really
- +long fork (%s in cmd is replaced by message)
- +.HP
- +\fB\-blocknotify=\fR<cmd>
- +.IP
- +Execute command when the best block changes (%s in cmd is replaced by
- +block hash)
- +.HP
- +\fB\-assumevalid=\fR<hex>
- +.IP
- +If this block is in the chain assume that it and its ancestors are valid
- +and potentially skip their script verification (0 to verify all,
- +default:
- +29c8c00e1a5f446a6364a29633d3f1ee16428d87c8d3851a1c570be8170b04c2,
- +testnet:
- +ad8ff6c2f5580d2b50bd881e11312425ea84fa99f322bf132beb722f97971bba)
- +.HP
- +\fB\-conf=\fR<file>
- +.IP
- +Specify configuration file (default: litecoincash.conf)
- +.HP
- +\fB\-daemon\fR
- +.IP
- +Run in the background as a daemon and accept commands
- +.HP
- +\fB\-datadir=\fR<dir>
- +.IP
- +Specify data directory
- +.HP
- +\fB\-dbcache=\fR<n>
- +.IP
- +Set database cache size in megabytes (4 to 16384, default: 450)
- +.HP
- +\fB\-loadblock=\fR<file>
- +.IP
- +Imports blocks from external blk000??.dat file on startup
- +.HP
- +\fB\-maxorphantx=\fR<n>
- +.IP
- +Keep at most <n> unconnectable transactions in memory (default: 100)
- +.HP
- +\fB\-maxmempool=\fR<n>
- +.IP
- +Keep the transaction memory pool below <n> megabytes (default: 5)
- +.HP
- +\fB\-mempoolexpiry=\fR<n>
- +.IP
- +Do not keep transactions in the mempool longer than <n> hours (default:
- +336)
- +.HP
- +\fB\-persistmempool\fR
- +.IP
- +Whether to save the mempool on shutdown and load on restart (default: 1)
- +.HP
- +\fB\-blockreconstructionextratxn=\fR<n>
- +.IP
- +Extra transactions to keep in memory for compact block reconstructions
- +(default: 100)
- +.HP
- +\fB\-par=\fR<n>
- +.IP
- +Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 =
- +leave that many cores free, default: 0)
- +.HP
- +\fB\-pid=\fR<file>
- +.IP
- +Specify pid file (default: litecoincashd.pid)
- +.HP
- +\fB\-prune=\fR<n>
- +.IP
- +Reduce storage requirements by enabling pruning (deleting) of old
- +blocks. This allows the pruneblockchain RPC to be called to
- +delete specific blocks, and enables automatic pruning of old
- +blocks if a target size in MiB is provided. This mode is
- +incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
- +setting requires re\-downloading the entire blockchain. (default:
- +0 = disable pruning blocks, 1 = allow manual pruning via RPC,
- +>550 = automatically prune block files to stay under the
- +specified target size in MiB)
- +.HP
- +\fB\-reindex\-chainstate\fR
- +.IP
- +Rebuild chain state from the currently indexed blocks
- +.HP
- +\fB\-reindex\fR
- +.IP
- +Rebuild chain state and block index from the blk*.dat files on disk
- +.HP
- +\fB\-sysperms\fR
- +.IP
- +Create new files with system default permissions, instead of umask 077
- +(only effective with disabled wallet functionality)
- +.HP
- +\fB\-txindex\fR
- +.IP
- +Maintain a full transaction index, used by the getrawtransaction rpc
- +call (default: 0)
- +.PP
- +Connection options:
- +.HP
- +\fB\-addnode=\fR<ip>
- +.IP
- +Add a node to connect to and attempt to keep the connection open
- +.HP
- +\fB\-banscore=\fR<n>
- +.IP
- +Threshold for disconnecting misbehaving peers (default: 100)
- +.HP
- +\fB\-bantime=\fR<n>
- +.IP
- +Number of seconds to keep misbehaving peers from reconnecting (default:
- +86400)
- +.HP
- +\fB\-bind=\fR<addr>
- +.IP
- +Bind to given address and always listen on it. Use [host]:port notation
- +for IPv6
- +.HP
- +\fB\-connect=\fR<ip>
- +.IP
- +Connect only to the specified node(s); \fB\-connect\fR=\fI\,0\/\fR disables automatic
- +connections
- +.HP
- +\fB\-discover\fR
- +.IP
- +Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
- +or \fB\-proxy\fR)
- +.HP
- +\fB\-dns\fR
- +.IP
- +Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
- +.HP
- +\fB\-dnsseed\fR
- +.IP
- +Query for peer addresses via DNS lookup, if low on addresses (default: 1
- +unless \fB\-connect\fR used)
- +.HP
- +\fB\-externalip=\fR<ip>
- +.IP
- +Specify your own public address
- +.HP
- +\fB\-forcednsseed\fR
- +.IP
- +Always query for peer addresses via DNS lookup (default: 0)
- +.HP
- +\fB\-listen\fR
- +.IP
- +Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
- +.HP
- +\fB\-listenonion\fR
- +.IP
- +Automatically create Tor hidden service (default: 1)
- +.HP
- +\fB\-maxconnections=\fR<n>
- +.IP
- +Maintain at most <n> connections to peers (default: 125)
- +.HP
- +\fB\-maxreceivebuffer=\fR<n>
- +.IP
- +Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
- +.HP
- +\fB\-maxsendbuffer=\fR<n>
- +.IP
- +Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
- +.HP
- +\fB\-maxtimeadjustment\fR
- +.IP
- +Maximum allowed median peer time offset adjustment. Local perspective of
- +time may be influenced by peers forward or backward by this
- +amount. (default: 4200 seconds)
- +.HP
- +\fB\-onion=\fR<ip:port>
- +.IP
- +Use separate SOCKS5 proxy to reach peers via Tor hidden services
- +(default: \fB\-proxy\fR)
- +.HP
- +\fB\-onlynet=\fR<net>
- +.IP
- +Only connect to nodes in network <net> (ipv4, ipv6 or onion)
- +.HP
- +\fB\-permitbaremultisig\fR
- +.IP
- +Relay non\-P2SH multisig (default: 1)
- +.HP
- +\fB\-peerbloomfilters\fR
- +.IP
- +Support filtering of blocks and transaction with bloom filters (default:
- +1)
- +.HP
- +\fB\-port=\fR<port>
- +.IP
- +Listen for connections on <port> (default: 62458 or testnet: 62456)
- +.HP
- +\fB\-proxy=\fR<ip:port>
- +.IP
- +Connect through SOCKS5 proxy
- +.HP
- +\fB\-proxyrandomize\fR
- +.IP
- +Randomize credentials for every proxy connection. This enables Tor
- +stream isolation (default: 1)
- +.HP
- +\fB\-seednode=\fR<ip>
- +.IP
- +Connect to a node to retrieve peer addresses, and disconnect
- +.HP
- +\fB\-timeout=\fR<n>
- +.IP
- +Specify connection timeout in milliseconds (minimum: 1, default: 5000)
- +.HP
- +\fB\-torcontrol=\fR<ip>:<port>
- +.IP
- +Tor control port to use if onion listening enabled (default:
- +127.0.0.1:9051)
- +.HP
- +\fB\-torpassword=\fR<pass>
- +.IP
- +Tor control port password (default: empty)
- +.HP
- +\fB\-upnp\fR
- +.IP
- +Use UPnP to map the listening port (default: 0)
- +.HP
- +\fB\-whitebind=\fR<addr>
- +.IP
- +Bind to given address and whitelist peers connecting to it. Use
- +[host]:port notation for IPv6
- +.HP
- +\fB\-whitelist=\fR<IP address or network>
- +.IP
- +Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
- +CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
- +times. Whitelisted peers cannot be DoS banned and their
- +transactions are always relayed, even if they are already in the
- +mempool, useful e.g. for a gateway
- +.HP
- +\fB\-maxuploadtarget=\fR<n>
- +.IP
- +Tries to keep outbound traffic under the given target (in MiB per 24h),
- +0 = no limit (default: 0)
- +.PP
- +Wallet options:
- +.HP
- +\fB\-disablewallet\fR
- +.IP
- +Do not load the wallet and disable wallet RPC calls
- +.HP
- +\fB\-keypool=\fR<n>
- +.IP
- +Set key pool size to <n> (default: 1000)
- +.HP
- +\fB\-fallbackfee=\fR<amt>
- +.IP
- +A fee rate (in LCC/kB) that will be used when fee estimation has
- +insufficient data (default: 0.002)
- +.HP
- +\fB\-discardfee=\fR<amt>
- +.IP
- +The fee rate (in BTC/kB) that indicates your tolerance for discarding
- +change by adding it to the fee (default: 0.0001). Note: An output
- +is discarded if it is dust at this rate, but we will always
- +discard up to the dust relay fee and a discard fee above that is
- +limited by the fee estimate for the longest target
- +.HP
- +\fB\-mintxfee=\fR<amt>
- +.IP
- +Fees (in LCC/kB) smaller than this are considered zero fee for
- +transaction creation (default: 0.001)
- +.HP
- +\fB\-paytxfee=\fR<amt>
- +.IP
- +Fee (in LCC/kB) to add to transactions you send (default: 0.00)
- +.HP
- +\fB\-rescan\fR
- +.IP
- +Rescan the block chain for missing wallet transactions on startup
- +.HP
- +\fB\-salvagewallet\fR
- +.IP
- +Attempt to recover private keys from a corrupt wallet on startup
- +.HP
- +\fB\-spendzeroconfchange\fR
- +.IP
- +Spend unconfirmed change when sending transactions (default: 1)
- +.HP
- +\fB\-txconfirmtarget=\fR<n>
- +.IP
- +If paytxfee is not set, include enough fee so transactions begin
- +confirmation on average within n blocks (default: 6)
- +.HP
- +\fB\-usehd\fR
- +.IP
- +Use hierarchical deterministic key generation (HD) after BIP32. Only has
- +effect during wallet creation/first start (default: 1)
- +.HP
- +\fB\-walletrbf\fR
- +.IP
- +Send transactions with full\-RBF opt\-in enabled (default: 0)
- +.HP
- +\fB\-upgradewallet\fR
- +.IP
- +Upgrade wallet to latest format on startup
- +.HP
- +\fB\-wallet=\fR<file>
- +.IP
- +Specify wallet file (within data directory) (default: wallet.dat)
- +.HP
- +\fB\-walletbroadcast\fR
- +.IP
- +Make the wallet broadcast transactions (default: 1)
- +.HP
- +\fB\-walletnotify=\fR<cmd>
- +.IP
- +Execute command when a wallet transaction changes (%s in cmd is replaced
- +by TxID)
- +.HP
- +\fB\-zapwallettxes=\fR<mode>
- +.IP
- +Delete all wallet transactions and only recover those parts of the
- +blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
- +account owner and payment request information, 2 = drop tx meta
- +data)
- +.PP
- +ZeroMQ notification options:
- +.HP
- +\fB\-zmqpubhashblock=\fR<address>
- +.IP
- +Enable publish hash block in <address>
- +.HP
- +\fB\-zmqpubhashtx=\fR<address>
- +.IP
- +Enable publish hash transaction in <address>
- +.HP
- +\fB\-zmqpubrawblock=\fR<address>
- +.IP
- +Enable publish raw block in <address>
- +.HP
- +\fB\-zmqpubrawtx=\fR<address>
- +.IP
- +Enable publish raw transaction in <address>
- +.PP
- +Debugging/Testing options:
- +.HP
- +\fB\-uacomment=\fR<cmt>
- +.IP
- +Append comment to the user agent string
- +.HP
- +\fB\-debug=\fR<category>
- +.IP
- +Output debugging information (default: 0, supplying <category> is
- +optional). If <category> is not supplied or if <category> = 1,
- +output all debugging information. <category> can be: net, tor,
- +mempool, http, bench, zmq, db, rpc, estimatefee, addrman,
- +selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej,
- +libevent, coindb, qt, leveldb.
- +.HP
- +\fB\-debugexclude=\fR<category>
- +.IP
- +Exclude debugging information for a category. Can be used in conjunction
- +with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one
- +or more specified categories.
- +.HP
- +\fB\-help\-debug\fR
- +.IP
- +Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR)
- +.HP
- +\fB\-logips\fR
- +.IP
- +Include IP addresses in debug output (default: 0)
- +.HP
- +\fB\-logtimestamps\fR
- +.IP
- +Prepend debug output with timestamp (default: 1)
- +.HP
- +\fB\-maxtxfee=\fR<amt>
- +.IP
- +Maximum total fees (in LCC) to use in a single wallet transaction or raw
- +transaction; setting this too low may abort large transactions
- +(default: 0.10)
- +.HP
- +\fB\-printtoconsole\fR
- +.IP
- +Send trace/debug info to console instead of debug.log file
- +.HP
- +\fB\-shrinkdebugfile\fR
- +.IP
- +Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
- +.PP
- +Chain selection options:
- +.HP
- +\fB\-testnet\fR
- +.IP
- +Use the test chain
- +.PP
- +Node relay options:
- +.HP
- +\fB\-bytespersigop\fR
- +.IP
- +Equivalent bytes per sigop in transactions for relay and mining
- +(default: 20)
- +.HP
- +\fB\-datacarrier\fR
- +.IP
- +Relay and mine data carrier transactions (default: 1)
- +.HP
- +\fB\-datacarriersize\fR
- +.IP
- +Maximum size of data in data carrier transactions we relay and mine
- +(default: 83)
- +.HP
- +\fB\-mempoolreplacement\fR
- +.IP
- +Enable transaction replacement in the memory pool (default: 1)
- +.HP
- +\fB\-minrelaytxfee=\fR<amt>
- +.IP
- +Fees (in BTC/kB) smaller than this are considered zero fee for relaying,
- +mining and transaction creation (default: 0.00001)
- +.HP
- +\fB\-whitelistrelay\fR
- +.IP
- +Accept relayed transactions received from whitelisted peers even when
- +not relaying transactions (default: 1)
- +.HP
- +\fB\-whitelistforcerelay\fR
- +.IP
- +Force relay of transactions from whitelisted peers even if they violate
- +local relay policy (default: 1)
- +.PP
- +Block creation options:
- +.HP
- +\fB\-blockmaxweight=\fR<n>
- +.IP
- +Set maximum BIP141 block weight (default: 3000000)
- +.HP
- +\fB\-blockmaxsize=\fR<n>
- +.IP
- +Set maximum block size in bytes (default: 750000)
- +.HP
- +\fB\-blockmintxfee=\fR<amt>
- +.IP
- +Set lowest fee rate (in LCC/kB) for transactions to be included in block
- +creation. (default: 0.00001)
- +.PP
- +RPC server options:
- +.HP
- +\fB\-server\fR
- +.IP
- +Accept command line and JSON\-RPC commands
- +.HP
- +\fB\-rest\fR
- +.IP
- +Accept public REST requests (default: 0)
- +.HP
- +\fB\-rpcbind=\fR<addr>[:port]
- +.IP
- +Bind to given address to listen for JSON\-RPC connections. This option is
- +ignored unless \fB\-rpcallowip\fR is also passed. Port is optional and
- +overrides \fB\-rpcport\fR. Use [host]:port notation for IPv6. This
- +option can be specified multiple times (default: 127.0.0.1 and
- +::1 i.e., localhost, or if \fB\-rpcallowip\fR has been specified,
- +0.0.0.0 and :: i.e., all addresses)
- +.HP
- +\fB\-rpccookiefile=\fR<loc>
- +.IP
- +Location of the auth cookie (default: data dir)
- +.HP
- +\fB\-rpcuser=\fR<user>
- +.IP
- +Username for JSON\-RPC connections
- +.HP
- +\fB\-rpcpassword=\fR<pw>
- +.IP
- +Password for JSON\-RPC connections
- +.HP
- +\fB\-rpcauth=\fR<userpw>
- +.IP
- +Username and hashed password for JSON\-RPC connections. The field
- +<userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
- +canonical python script is included in share/rpcuser. The client
- +then connects normally using the
- +rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
- +option can be specified multiple times
- +.HP
- +\fB\-rpcport=\fR<port>
- +.IP
- +Listen for JSON\-RPC connections on <port> (default: 62457 or testnet:
- +62455)
- +.HP
- +\fB\-rpcallowip=\fR<ip>
- +.IP
- +Allow JSON\-RPC connections from specified source. Valid for <ip> are a
- +single IP (e.g. 1.2.3.4), a network/netmask (e.g.
- +1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
- +option can be specified multiple times
- +.HP
- +\fB\-rpcserialversion\fR
- +.IP
- +Sets the serialization of raw transaction or block hex returned in
- +non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
- +.HP
- +\fB\-rpcthreads=\fR<n>
- +.IP
- +Set the number of threads to service RPC calls (default: 4)
- +.SH COPYRIGHT
- +Copyright (C) 2009-2017 The Bitcoin Core developers
- +Copyright (C) 2011-2017 The Litecoin Core developers
- +
- +Please contribute if you find LitecoinCash Core useful. Visit
- +<https://litecoincash.org> for further information about the software.
- +The source code is available from <https://github.com/litecoincash-project/litecoincash>.
- +
- +This is experimental software.
- +Distributed under the MIT software license, see the accompanying file COPYING
- +or <https://opensource.org/licenses/MIT>
- +
- +This product includes software developed by the OpenSSL Project for use in the
- +OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- +Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/man/litecoind.1 b/doc/man/litecoind.1
- deleted file mode 100644
- index 8de36b1..0000000
- --- a/doc/man/litecoind.1
- +++ /dev/null
- @@ -1,541 +0,0 @@
- -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
- -.TH LITECOIND "1" "September 2017" "litecoind v0.15.0.1" "User Commands"
- -.SH NAME
- -litecoind \- manual page for litecoind v0.15.0.1
- -.SH DESCRIPTION
- -Litecoin Core Daemon version v0.15.0.1\-dirty
- -.SS "Usage:"
- -.TP
- -litecoind [options]
- -Start Litecoin Core Daemon
- -.SH OPTIONS
- -.HP
- -\-?
- -.IP
- -Print this help message and exit
- -.HP
- -\fB\-version\fR
- -.IP
- -Print version and exit
- -.HP
- -\fB\-alertnotify=\fR<cmd>
- -.IP
- -Execute command when a relevant alert is received or we see a really
- -long fork (%s in cmd is replaced by message)
- -.HP
- -\fB\-blocknotify=\fR<cmd>
- -.IP
- -Execute command when the best block changes (%s in cmd is replaced by
- -block hash)
- -.HP
- -\fB\-assumevalid=\fR<hex>
- -.IP
- -If this block is in the chain assume that it and its ancestors are valid
- -and potentially skip their script verification (0 to verify all,
- -default:
- -29c8c00e1a5f446a6364a29633d3f1ee16428d87c8d3851a1c570be8170b04c2,
- -testnet:
- -ad8ff6c2f5580d2b50bd881e11312425ea84fa99f322bf132beb722f97971bba)
- -.HP
- -\fB\-conf=\fR<file>
- -.IP
- -Specify configuration file (default: litecoin.conf)
- -.HP
- -\fB\-daemon\fR
- -.IP
- -Run in the background as a daemon and accept commands
- -.HP
- -\fB\-datadir=\fR<dir>
- -.IP
- -Specify data directory
- -.HP
- -\fB\-dbcache=\fR<n>
- -.IP
- -Set database cache size in megabytes (4 to 16384, default: 450)
- -.HP
- -\fB\-loadblock=\fR<file>
- -.IP
- -Imports blocks from external blk000??.dat file on startup
- -.HP
- -\fB\-maxorphantx=\fR<n>
- -.IP
- -Keep at most <n> unconnectable transactions in memory (default: 100)
- -.HP
- -\fB\-maxmempool=\fR<n>
- -.IP
- -Keep the transaction memory pool below <n> megabytes (default: 5)
- -.HP
- -\fB\-mempoolexpiry=\fR<n>
- -.IP
- -Do not keep transactions in the mempool longer than <n> hours (default:
- -336)
- -.HP
- -\fB\-persistmempool\fR
- -.IP
- -Whether to save the mempool on shutdown and load on restart (default: 1)
- -.HP
- -\fB\-blockreconstructionextratxn=\fR<n>
- -.IP
- -Extra transactions to keep in memory for compact block reconstructions
- -(default: 100)
- -.HP
- -\fB\-par=\fR<n>
- -.IP
- -Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 =
- -leave that many cores free, default: 0)
- -.HP
- -\fB\-pid=\fR<file>
- -.IP
- -Specify pid file (default: litecoind.pid)
- -.HP
- -\fB\-prune=\fR<n>
- -.IP
- -Reduce storage requirements by enabling pruning (deleting) of old
- -blocks. This allows the pruneblockchain RPC to be called to
- -delete specific blocks, and enables automatic pruning of old
- -blocks if a target size in MiB is provided. This mode is
- -incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
- -setting requires re\-downloading the entire blockchain. (default:
- -0 = disable pruning blocks, 1 = allow manual pruning via RPC,
- ->550 = automatically prune block files to stay under the
- -specified target size in MiB)
- -.HP
- -\fB\-reindex\-chainstate\fR
- -.IP
- -Rebuild chain state from the currently indexed blocks
- -.HP
- -\fB\-reindex\fR
- -.IP
- -Rebuild chain state and block index from the blk*.dat files on disk
- -.HP
- -\fB\-sysperms\fR
- -.IP
- -Create new files with system default permissions, instead of umask 077
- -(only effective with disabled wallet functionality)
- -.HP
- -\fB\-txindex\fR
- -.IP
- -Maintain a full transaction index, used by the getrawtransaction rpc
- -call (default: 0)
- -.PP
- -Connection options:
- -.HP
- -\fB\-addnode=\fR<ip>
- -.IP
- -Add a node to connect to and attempt to keep the connection open
- -.HP
- -\fB\-banscore=\fR<n>
- -.IP
- -Threshold for disconnecting misbehaving peers (default: 100)
- -.HP
- -\fB\-bantime=\fR<n>
- -.IP
- -Number of seconds to keep misbehaving peers from reconnecting (default:
- -86400)
- -.HP
- -\fB\-bind=\fR<addr>
- -.IP
- -Bind to given address and always listen on it. Use [host]:port notation
- -for IPv6
- -.HP
- -\fB\-connect=\fR<ip>
- -.IP
- -Connect only to the specified node(s); \fB\-connect\fR=\fI\,0\/\fR disables automatic
- -connections
- -.HP
- -\fB\-discover\fR
- -.IP
- -Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
- -or \fB\-proxy\fR)
- -.HP
- -\fB\-dns\fR
- -.IP
- -Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
- -.HP
- -\fB\-dnsseed\fR
- -.IP
- -Query for peer addresses via DNS lookup, if low on addresses (default: 1
- -unless \fB\-connect\fR used)
- -.HP
- -\fB\-externalip=\fR<ip>
- -.IP
- -Specify your own public address
- -.HP
- -\fB\-forcednsseed\fR
- -.IP
- -Always query for peer addresses via DNS lookup (default: 0)
- -.HP
- -\fB\-listen\fR
- -.IP
- -Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
- -.HP
- -\fB\-listenonion\fR
- -.IP
- -Automatically create Tor hidden service (default: 1)
- -.HP
- -\fB\-maxconnections=\fR<n>
- -.IP
- -Maintain at most <n> connections to peers (default: 125)
- -.HP
- -\fB\-maxreceivebuffer=\fR<n>
- -.IP
- -Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
- -.HP
- -\fB\-maxsendbuffer=\fR<n>
- -.IP
- -Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
- -.HP
- -\fB\-maxtimeadjustment\fR
- -.IP
- -Maximum allowed median peer time offset adjustment. Local perspective of
- -time may be influenced by peers forward or backward by this
- -amount. (default: 4200 seconds)
- -.HP
- -\fB\-onion=\fR<ip:port>
- -.IP
- -Use separate SOCKS5 proxy to reach peers via Tor hidden services
- -(default: \fB\-proxy\fR)
- -.HP
- -\fB\-onlynet=\fR<net>
- -.IP
- -Only connect to nodes in network <net> (ipv4, ipv6 or onion)
- -.HP
- -\fB\-permitbaremultisig\fR
- -.IP
- -Relay non\-P2SH multisig (default: 1)
- -.HP
- -\fB\-peerbloomfilters\fR
- -.IP
- -Support filtering of blocks and transaction with bloom filters (default:
- -1)
- -.HP
- -\fB\-port=\fR<port>
- -.IP
- -Listen for connections on <port> (default: 8333 or testnet: 18333)
- -.HP
- -\fB\-proxy=\fR<ip:port>
- -.IP
- -Connect through SOCKS5 proxy
- -.HP
- -\fB\-proxyrandomize\fR
- -.IP
- -Randomize credentials for every proxy connection. This enables Tor
- -stream isolation (default: 1)
- -.HP
- -\fB\-seednode=\fR<ip>
- -.IP
- -Connect to a node to retrieve peer addresses, and disconnect
- -.HP
- -\fB\-timeout=\fR<n>
- -.IP
- -Specify connection timeout in milliseconds (minimum: 1, default: 5000)
- -.HP
- -\fB\-torcontrol=\fR<ip>:<port>
- -.IP
- -Tor control port to use if onion listening enabled (default:
- -127.0.0.1:9051)
- -.HP
- -\fB\-torpassword=\fR<pass>
- -.IP
- -Tor control port password (default: empty)
- -.HP
- -\fB\-upnp\fR
- -.IP
- -Use UPnP to map the listening port (default: 0)
- -.HP
- -\fB\-whitebind=\fR<addr>
- -.IP
- -Bind to given address and whitelist peers connecting to it. Use
- -[host]:port notation for IPv6
- -.HP
- -\fB\-whitelist=\fR<IP address or network>
- -.IP
- -Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
- -CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
- -times. Whitelisted peers cannot be DoS banned and their
- -transactions are always relayed, even if they are already in the
- -mempool, useful e.g. for a gateway
- -.HP
- -\fB\-maxuploadtarget=\fR<n>
- -.IP
- -Tries to keep outbound traffic under the given target (in MiB per 24h),
- -0 = no limit (default: 0)
- -.PP
- -Wallet options:
- -.HP
- -\fB\-disablewallet\fR
- -.IP
- -Do not load the wallet and disable wallet RPC calls
- -.HP
- -\fB\-keypool=\fR<n>
- -.IP
- -Set key pool size to <n> (default: 1000)
- -.HP
- -\fB\-fallbackfee=\fR<amt>
- -.IP
- -A fee rate (in LTC/kB) that will be used when fee estimation has
- -insufficient data (default: 0.002)
- -.HP
- -\fB\-discardfee=\fR<amt>
- -.IP
- -The fee rate (in BTC/kB) that indicates your tolerance for discarding
- -change by adding it to the fee (default: 0.0001). Note: An output
- -is discarded if it is dust at this rate, but we will always
- -discard up to the dust relay fee and a discard fee above that is
- -limited by the fee estimate for the longest target
- -.HP
- -\fB\-mintxfee=\fR<amt>
- -.IP
- -Fees (in LTC/kB) smaller than this are considered zero fee for
- -transaction creation (default: 0.001)
- -.HP
- -\fB\-paytxfee=\fR<amt>
- -.IP
- -Fee (in LTC/kB) to add to transactions you send (default: 0.00)
- -.HP
- -\fB\-rescan\fR
- -.IP
- -Rescan the block chain for missing wallet transactions on startup
- -.HP
- -\fB\-salvagewallet\fR
- -.IP
- -Attempt to recover private keys from a corrupt wallet on startup
- -.HP
- -\fB\-spendzeroconfchange\fR
- -.IP
- -Spend unconfirmed change when sending transactions (default: 1)
- -.HP
- -\fB\-txconfirmtarget=\fR<n>
- -.IP
- -If paytxfee is not set, include enough fee so transactions begin
- -confirmation on average within n blocks (default: 6)
- -.HP
- -\fB\-usehd\fR
- -.IP
- -Use hierarchical deterministic key generation (HD) after BIP32. Only has
- -effect during wallet creation/first start (default: 1)
- -.HP
- -\fB\-walletrbf\fR
- -.IP
- -Send transactions with full\-RBF opt\-in enabled (default: 0)
- -.HP
- -\fB\-upgradewallet\fR
- -.IP
- -Upgrade wallet to latest format on startup
- -.HP
- -\fB\-wallet=\fR<file>
- -.IP
- -Specify wallet file (within data directory) (default: wallet.dat)
- -.HP
- -\fB\-walletbroadcast\fR
- -.IP
- -Make the wallet broadcast transactions (default: 1)
- -.HP
- -\fB\-walletnotify=\fR<cmd>
- -.IP
- -Execute command when a wallet transaction changes (%s in cmd is replaced
- -by TxID)
- -.HP
- -\fB\-zapwallettxes=\fR<mode>
- -.IP
- -Delete all wallet transactions and only recover those parts of the
- -blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
- -account owner and payment request information, 2 = drop tx meta
- -data)
- -.PP
- -ZeroMQ notification options:
- -.HP
- -\fB\-zmqpubhashblock=\fR<address>
- -.IP
- -Enable publish hash block in <address>
- -.HP
- -\fB\-zmqpubhashtx=\fR<address>
- -.IP
- -Enable publish hash transaction in <address>
- -.HP
- -\fB\-zmqpubrawblock=\fR<address>
- -.IP
- -Enable publish raw block in <address>
- -.HP
- -\fB\-zmqpubrawtx=\fR<address>
- -.IP
- -Enable publish raw transaction in <address>
- -.PP
- -Debugging/Testing options:
- -.HP
- -\fB\-uacomment=\fR<cmt>
- -.IP
- -Append comment to the user agent string
- -.HP
- -\fB\-debug=\fR<category>
- -.IP
- -Output debugging information (default: 0, supplying <category> is
- -optional). If <category> is not supplied or if <category> = 1,
- -output all debugging information. <category> can be: net, tor,
- -mempool, http, bench, zmq, db, rpc, estimatefee, addrman,
- -selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej,
- -libevent, coindb, qt, leveldb.
- -.HP
- -\fB\-debugexclude=\fR<category>
- -.IP
- -Exclude debugging information for a category. Can be used in conjunction
- -with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one
- -or more specified categories.
- -.HP
- -\fB\-help\-debug\fR
- -.IP
- -Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR)
- -.HP
- -\fB\-logips\fR
- -.IP
- -Include IP addresses in debug output (default: 0)
- -.HP
- -\fB\-logtimestamps\fR
- -.IP
- -Prepend debug output with timestamp (default: 1)
- -.HP
- -\fB\-maxtxfee=\fR<amt>
- -.IP
- -Maximum total fees (in LTC) to use in a single wallet transaction or raw
- -transaction; setting this too low may abort large transactions
- -(default: 0.10)
- -.HP
- -\fB\-printtoconsole\fR
- -.IP
- -Send trace/debug info to console instead of debug.log file
- -.HP
- -\fB\-shrinkdebugfile\fR
- -.IP
- -Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
- -.PP
- -Chain selection options:
- -.HP
- -\fB\-testnet\fR
- -.IP
- -Use the test chain
- -.PP
- -Node relay options:
- -.HP
- -\fB\-bytespersigop\fR
- -.IP
- -Equivalent bytes per sigop in transactions for relay and mining
- -(default: 20)
- -.HP
- -\fB\-datacarrier\fR
- -.IP
- -Relay and mine data carrier transactions (default: 1)
- -.HP
- -\fB\-datacarriersize\fR
- -.IP
- -Maximum size of data in data carrier transactions we relay and mine
- -(default: 83)
- -.HP
- -\fB\-mempoolreplacement\fR
- -.IP
- -Enable transaction replacement in the memory pool (default: 1)
- -.HP
- -\fB\-minrelaytxfee=\fR<amt>
- -.IP
- -Fees (in BTC/kB) smaller than this are considered zero fee for relaying,
- -mining and transaction creation (default: 0.00001)
- -.HP
- -\fB\-whitelistrelay\fR
- -.IP
- -Accept relayed transactions received from whitelisted peers even when
- -not relaying transactions (default: 1)
- -.HP
- -\fB\-whitelistforcerelay\fR
- -.IP
- -Force relay of transactions from whitelisted peers even if they violate
- -local relay policy (default: 1)
- -.PP
- -Block creation options:
- -.HP
- -\fB\-blockmaxweight=\fR<n>
- -.IP
- -Set maximum BIP141 block weight (default: 3000000)
- -.HP
- -\fB\-blockmaxsize=\fR<n>
- -.IP
- -Set maximum block size in bytes (default: 750000)
- -.HP
- -\fB\-blockmintxfee=\fR<amt>
- -.IP
- -Set lowest fee rate (in LTC/kB) for transactions to be included in block
- -creation. (default: 0.00001)
- -.PP
- -RPC server options:
- -.HP
- -\fB\-server\fR
- -.IP
- -Accept command line and JSON\-RPC commands
- -.HP
- -\fB\-rest\fR
- -.IP
- -Accept public REST requests (default: 0)
- -.HP
- -\fB\-rpcbind=\fR<addr>[:port]
- -.IP
- -Bind to given address to listen for JSON\-RPC connections. This option is
- -ignored unless \fB\-rpcallowip\fR is also passed. Port is optional and
- -overrides \fB\-rpcport\fR. Use [host]:port notation for IPv6. This
- -option can be specified multiple times (default: 127.0.0.1 and
- -::1 i.e., localhost, or if \fB\-rpcallowip\fR has been specified,
- -0.0.0.0 and :: i.e., all addresses)
- -.HP
- -\fB\-rpccookiefile=\fR<loc>
- -.IP
- -Location of the auth cookie (default: data dir)
- -.HP
- -\fB\-rpcuser=\fR<user>
- -.IP
- -Username for JSON\-RPC connections
- -.HP
- -\fB\-rpcpassword=\fR<pw>
- -.IP
- -Password for JSON\-RPC connections
- -.HP
- -\fB\-rpcauth=\fR<userpw>
- -.IP
- -Username and hashed password for JSON\-RPC connections. The field
- -<userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
- -canonical python script is included in share/rpcuser. The client
- -then connects normally using the
- -rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
- -option can be specified multiple times
- -.HP
- -\fB\-rpcport=\fR<port>
- -.IP
- -Listen for JSON\-RPC connections on <port> (default: 9332 or testnet:
- -19332)
- -.HP
- -\fB\-rpcallowip=\fR<ip>
- -.IP
- -Allow JSON\-RPC connections from specified source. Valid for <ip> are a
- -single IP (e.g. 1.2.3.4), a network/netmask (e.g.
- -1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
- -option can be specified multiple times
- -.HP
- -\fB\-rpcserialversion\fR
- -.IP
- -Sets the serialization of raw transaction or block hex returned in
- -non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
- -.HP
- -\fB\-rpcthreads=\fR<n>
- -.IP
- -Set the number of threads to service RPC calls (default: 4)
- -.SH COPYRIGHT
- -Copyright (C) 2009-2017 The Bitcoin Core developers
- -Copyright (C) 2011-2017 The Litecoin Core developers
- -
- -Please contribute if you find Litecoin Core useful. Visit
- -<https://litecoin.org> for further information about the software.
- -The source code is available from <https://github.com/litecoin-project/litecoin>.
- -
- -This is experimental software.
- -Distributed under the MIT software license, see the accompanying file COPYING
- -or <https://opensource.org/licenses/MIT>
- -
- -This product includes software developed by the OpenSSL Project for use in the
- -OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
- -Eric Young and UPnP software written by Thomas Bernard.
- diff --git a/doc/reduce-traffic.md b/doc/reduce-traffic.md
- index d09b43f..6653e5f 100644
- --- a/doc/reduce-traffic.md
- +++ b/doc/reduce-traffic.md
- @@ -3,7 +3,7 @@ Reduce Traffic
- Some node operators need to deal with bandwidth caps imposed by their ISPs.
- -By default, litecoin-core allows up to 125 connections to different peers, 8 of
- +By default, litecoincash-core allows up to 125 connections to different peers, 8 of
- which are outbound. You can therefore, have at most 117 inbound connections.
- The default settings can result in relatively significant traffic consumption.
- @@ -33,5 +33,5 @@ blocks and transactions to fewer nodes.
- ## 3. Reduce maximum connections (`-maxconnections=<num>`)
- Reducing the maximum connected nodes to a minimum could be desirable if traffic
- -limits are tiny. Keep in mind that litecoin's trustless model works best if you are
- +limits are tiny. Keep in mind that litecoincash's trustless model works best if you are
- connected to a handful of nodes.
- diff --git a/doc/release-notes-litecoin.md b/doc/release-notes-litecoin.md
- deleted file mode 100644
- index 34bccfb..0000000
- --- a/doc/release-notes-litecoin.md
- +++ /dev/null
- @@ -1,266 +0,0 @@
- -Litecoin Core version *0.15.1* is now available from:
- -
- - <https://download.litecoin.org/litecoin-0.15.1/>
- -
- -This is a new minor version release, including various bugfixes and
- -performance improvements, as well as updated translations.
- -
- -Please report bugs using the issue tracker at GitHub:
- -
- - <https://github.com/litecoin-project/litecoin/issues>
- -
- -To receive security and update notifications, please subscribe to:
- -
- - <https://groups.google.com/forum/#!forum/litecoin-dev>
- -
- -How to Upgrade
- -==============
- -
- -If you are running an older version, shut it down. Wait until it has completely
- -shut down (which might take a few minutes for older versions), then run the
- -installer (on Windows) or just copy over `/Applications/Litecoin-Qt` (on Mac)
- -or `litecoind`/`litecoin-qt` (on Linux).
- -
- -The first time you run version 0.15.0 or higher, your chainstate database will
- -be converted to a new format, which will take anywhere from a few minutes to
- -half an hour, depending on the speed of your machine.
- -
- -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a
- -downgrade from version 0.15 or upgrade to version 0.15 will cause all fee
- -estimates to be discarded.
- -
- -Note that the block database format also changed in version 0.8.0 and there is no
- -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading
- -directly from 0.7.x and earlier without redownloading the blockchain is not supported.
- -However, as usual, old wallet versions are still supported.
- -
- -Downgrading warning
- --------------------
- -
- -The chainstate database for this release is not compatible with previous
- -releases, so if you run 0.15 and then decide to switch back to any
- -older version, you will need to run the old release with the `-reindex-chainstate`
- -option to rebuild the chainstate data structures in the old format.
- -
- -If your node has pruning enabled, this will entail re-downloading and
- -processing the entire blockchain.
- -
- -Compatibility
- -==============
- -
- -Litecoin Core is extensively tested on multiple operating systems using
- -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported.
- -
- -Litecoin Core should also work on most other Unix-like systems but is not
- -frequently tested on them.
- -
- -
- -Notable changes
- -===============
- -
- -Network fork safety enhancements
- ---------------------------------
- -
- -A number of changes to the way Litecoin Core deals with peer connections and invalid blocks
- -have been made, as a safety precaution against blockchain forks and misbehaving peers.
- -
- -- Unrequested blocks with less work than the minimum-chain-work are now no longer processed even
- -if they have more work than the tip (a potential issue during IBD where the tip may have low-work).
- -This prevents peers wasting the resources of a node.
- -
- -- Peers which provide a chain with less work than the minimum-chain-work during IBD will now be disconnected.
- -
- -- For a given outbound peer, we now check whether their best known block has at least as much work as our tip. If it
- -doesn't, and if we still haven't heard about a block with sufficient work after a 20 minute timeout, then we send
- -a single getheaders message, and wait 2 more minutes. If after two minutes their best known block has insufficient
- -work, we disconnect that peer. We protect 4 of our outbound peers from being disconnected by this logic to prevent
- -excessive network topology changes as a result of this algorithm, while still ensuring that we have a reasonable
- -number of nodes not known to be on bogus chains.
- -
- -- Outbound (non-manual) peers that serve us block headers that are already known to be invalid (other than compact
- -block announcements, because BIP 152 explicitly permits nodes to relay compact blocks before fully validating them)
- -will now be disconnected.
- -
- -- If the chain tip has not been advanced for over 30 minutes, we now assume the tip may be stale and will try to connect
- -to an additional outbound peer. A periodic check ensures that if this extra peer connection is in use, we will disconnect
- -the peer that least recently announced a new block.
- -
- -- The set of all known invalid-themselves blocks (i.e. blocks which we attempted to connect but which were found to be
- -invalid) are now tracked and used to check if new headers build on an invalid chain. This ensures that everything that
- -descends from an invalid block is marked as such.
- -
- -Minimum relay fee lowered
- --------------------------
- -
- -The minimum relay fee `-minrelayfee` has been lowered to 0.01 lites per kB (0.00001 LTC). This is to prepare for dropping the minimum transaction fee to 0.1 lites per kB (0.0001 LTC) in the next release.
- -
- -Mempool replacement disabled by default
- ----------------------------------------
- -
- -Mempool replacement `--mempoolreplacement` has been disabled by default.
- -
- -Miner block size limiting deprecated
- -------------------------------------
- -
- -Though blockmaxweight has been preferred for limiting the size of blocks returned by
- -getblocktemplate since 0.13.0, blockmaxsize remained as an option for those who wished
- -to limit their block size directly. Using this option resulted in a few UI issues as
- -well as non-optimal fee selection and ever-so-slightly worse performance, and has thus
- -now been deprecated. Further, the blockmaxsize option is now used only to calculate an
- -implied blockmaxweight, instead of limiting block size directly. Any miners who wish
- -to limit their blocks by size, instead of by weight, will have to do so manually by
- -removing transactions from their block template directly.
- -
- -
- -GUI settings backed up on reset
- --------------------------------
- -
- -The GUI settings will now be written to `guisettings.ini.bak` in the data directory before wiping them when
- -the `-resetguisettings` argument is used. This can be used to retroactively troubleshoot issues due to the
- -GUI settings.
- -
- -
- -Duplicate wallets disallowed
- -----------------------------
- -
- -Previously, it was possible to open the same wallet twice by manually copying the wallet file, causing
- -issues when both were opened simultaneously. It is no longer possible to open copies of the same wallet.
- -
- -
- -Debug `-minimumchainwork` argument added
- -----------------------------------------
- -
- -A hidden debug argument `-minimumchainwork` has been added to allow a custom minimum work value to be used
- -when validating a chain.
- -
- -
- -Low-level RPC changes
- -----------------------
- -
- -- The "currentblocksize" value in getmininginfo has been removed.
- -
- -- `dumpwallet` no longer allows overwriting files. This is a security measure
- - as well as prevents dangerous user mistakes.
- -
- -- `backupwallet` will now fail when attempting to backup to source file, rather than
- - destroying the wallet.
- -
- -- `listsinceblock` will now throw an error if an unknown `blockhash` argument
- - value is passed, instead of returning a list of all wallet transactions since
- - the genesis block. The behaviour is unchanged when an empty string is provided.
- -
- -0.15.1 Change log
- -=================
- -
- -### Mining
- -- #11100 `7871a7d` Fix confusing blockmax{size,weight} options, dont default to throwing away money (TheBlueMatt)
- -
- -### RPC and other APIs
- -- #10859 `2a5d099` gettxout: Slightly improve doc and tests (jtimon)
- -- #11267 `b1a6c94` update cli for estimate\*fee argument rename (laanwj)
- -- #11483 `20cdc2b` Fix importmulti bug when importing an already imported key (pedrobranco)
- -- #9937 `a43be5b` Prevent `dumpwallet` from overwriting files (laanwj)
- -- #11465 `405e069` Update named args documentation for importprivkey (dusty-wil)
- -- #11131 `b278a43` Write authcookie atomically (laanwj)
- -- #11565 `7d4546f` Make listsinceblock refuse unknown block hash (ryanofsky)
- -- #11593 `8195cb0` Work-around an upstream libevent bug (theuni)
- -
- -### P2P protocol and network code
- -- #11397 `27e861a` Improve and document SOCKS code (laanwj)
- -- #11252 `0fe2a9a` When clearing addrman clear mapInfo and mapAddr (instagibbs)
- -- #11527 `a2bd86a` Remove my testnet DNS seed (schildbach)
- -- #10756 `0a5477c` net processing: swap out signals for an interface class (theuni)
- -- #11531 `55b7abf` Check that new headers are not a descendant of an invalid block (more effeciently) (TheBlueMatt)
- -- #11560 `49bf090` Connect to a new outbound peer if our tip is stale (sdaftuar)
- -- #11568 `fc966bb` Disconnect outbound peers on invalid chains (sdaftuar)
- -- #11578 `ec8dedf` Add missing lock in ProcessHeadersMessage(...) (practicalswift)
- -- #11456 `6f27965` Replace relevant services logic with a function suite (TheBlueMatt)
- -- #11490 `bf191a7` Disconnect from outbound peers with bad headers chains (sdaftuar)
- -
- -### Validation
- -- #10357 `da4908c` Allow setting nMinimumChainWork on command line (sdaftuar)
- -- #11458 `2df65ee` Don't process unrequested, low-work blocks (sdaftuar)
- -
- -### Build system
- -- #11440 `b6c0209` Fix validationinterface build on super old boost/clang (TheBlueMatt)
- -- #11530 `265bb21` Add share/rpcuser to dist. source code archive (MarcoFalke)
- -
- -### GUI
- -- #11334 `19d63e8` Remove custom fee radio group and remove nCustomFeeRadio setting (achow101)
- -- #11198 `7310f1f` Fix display of package name on 'open config file' tooltip (esotericnonsense)
- -- #11015 `6642558` Add delay before filtering transactions (lclc)
- -- #11338 `6a62c74` Backup former GUI settings on `-resetguisettings` (laanwj)
- -- #11335 `8d13b42` Replace save|restoreWindowGeometry with Qt functions (MeshCollider)
- -- #11237 `2e31b1d` Fixing division by zero in time remaining (MeshCollider)
- -- #11247 `47c02a8` Use IsMine to validate custom change address (MarcoFalke)
- -
- -### Wallet
- -- #11017 `9e8aae3` Close DB on error (kallewoof)
- -- #11225 `6b4d9f2` Update stored witness in AddToWallet (sdaftuar)
- -- #11126 `2cb720a` Acquire cs_main lock before cs_wallet during wallet initialization (ryanofsky)
- -- #11476 `9c8006d` Avoid opening copied wallet databases simultaneously (ryanofsky)
- -- #11492 `de7053f` Fix leak in CDB constructor (promag)
- -- #11376 `fd79ed6` Ensure backupwallet fails when attempting to backup to source file (tomasvdw)
- -- #11326 `d570aa4` Fix crash on shutdown with invalid wallet (MeshCollider)
- -
- -### Tests and QA
- -- #11399 `a825d4a` Fix bip68-sequence rpc test (jl2012)
- -- #11150 `847c75e` Add getmininginfo test (mess110)
- -- #11407 `806c78f` add functional test for mempoolreplacement command line arg (instagibbs)
- -- #11433 `e169349` Restore bitcoin-util-test py2 compatibility (MarcoFalke)
- -- #11308 `2e1ac70` zapwallettxes: Wait up to 3s for mempool reload (MarcoFalke)
- -- #10798 `716066d` test bitcoin-cli (jnewbery)
- -- #11443 `019c492` Allow "make cov" out-of-tree; Fix rpc mapping check (MarcoFalke)
- -- #11445 `51bad91` 0.15.1 Backports (MarcoFalke)
- -- #11319 `2f0b30a` Fix error introduced into p2p-segwit.py, and prevent future similar errors (sdaftuar)
- -- #10552 `e4605d9` Tests for zmqpubrawtx and zmqpubrawblock (achow101)
- -- #11067 `eeb24a3` TestNode: Add wait_until_stopped helper method (MarcoFalke)
- -- #11068 `5398f20` Move wait_until to util (MarcoFalke)
- -- #11125 `812c870` Add bitcoin-cli -stdin and -stdinrpcpass functional tests (promag)
- -- #11077 `1d80d1e` fix timeout issues from TestNode (jnewbery)
- -- #11078 `f1ced0d` Make p2p-leaktests.py more robust (jnewbery)
- -- #11210 `f3f7891` Stop test_bitcoin-qt touching ~/.bitcoin (MeshCollider)
- -- #11234 `f0b6795` Remove redundant testutil.cpp|h files (MeshCollider)
- -- #11215 `cef0319` fixups from set_test_params() (jnewbery)
- -- #11345 `f9cf7b5` Check connectivity before sending in assumevalid.py (jnewbery)
- -- #11091 `c276c1e` Increase initial RPC timeout to 60 seconds (laanwj)
- -- #10711 `fc2aa09` Introduce TestNode (jnewbery)
- -- #11230 `d8dd8e7` Fixup dbcrash interaction with add_nodes() (jnewbery)
- -- #11241 `4424176` Improve signmessages functional test (mess110)
- -- #11116 `2c4ff35` Unit tests for script/standard and IsMine functions (jimpo)
- -- #11422 `a36f332` Verify DBWrapper iterators are taking snapshots (TheBlueMatt)
- -- #11121 `bb5e7cb` TestNode tidyups (jnewbery)
- -- #11521 `ca0f3f7` travis: move back to the minimal image (theuni)
- -- #11538 `adbc9d1` Fix race condition failures in replace-by-fee.py, sendheaders.py (sdaftuar)
- -- #11472 `4108879` Make tmpdir option an absolute path, misc cleanup (MarcoFalke)
- -- #10853 `5b728c8` Fix RPC failure testing (again) (jnewbery)
- -- #11310 `b6468d3` Test listwallets RPC (mess110)
- -
- -### Miscellaneous
- -- #11377 `75997c3` Disallow uncompressed pubkeys in bitcoin-tx [multisig] output adds (TheBlueMatt)
- -- #11437 `dea3b87` [Docs] Update Windows build instructions for using WSL and Ubuntu 17.04 (fanquake)
- -- #11318 `8b61aee` Put back inadvertently removed copyright notices (gmaxwell)
- -- #11442 `cf18f42` [Docs] Update OpenBSD Build Instructions for OpenBSD 6.2 (fanquake)
- -- #10957 `50bd3f6` Avoid returning a BIP9Stats object with uninitialized values (practicalswift)
- -- #11539 `01223a0` [verify-commits] Allow revoked keys to expire (TheBlueMatt)
- -
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- [The Bitcoin Core Developers](/doc/release-notes)
- -- Adrian Gallagher
- -- aunyks
- -- coblee
- -- gabrieldov
- -- Martin Smith
- -- ppm0
- -- romanornr
- -- shaolinfry
- -- spl0i7
- -- ultragtx
- -- VKoskiv
- -- voidmain
- -- xinxi
- \ No newline at end of file
- diff --git a/doc/release-notes.md b/doc/release-notes.md
- index 75d2e09..32bf667 100644
- --- a/doc/release-notes.md
- +++ b/doc/release-notes.md
- @@ -1,13 +1,8 @@
- -Bitcoin Core version *0.15.1* is now available from:
- +Bitcoin Core version *0.15.0.1* is now available from:
- - <https://bitcoincore.org/bin/bitcoin-core-0.15.1/>
- + <https://bitcoin.org/bin/bitcoin-core-0.15.0.1/>
- -or
- -
- - <https://bitcoin.org/bin/bitcoin-core-0.15.1/>
- -
- -This is a new minor version release, including various bugfixes and
- -performance improvements, as well as updated translations.
- +This is a minor bug fix for 0.15.0.
- Please report bugs using the issue tracker at GitHub:
- @@ -30,7 +25,7 @@ be converted to a new format, which will take anywhere from a few minutes to
- half an hour, depending on the speed of your machine.
- The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a
- -downgrade from version 0.15 or upgrade to version 0.15 will cause all fee
- +downgrade from version 0.15.0 or upgrade to version 0.15.0 will cause all fee
- estimates to be discarded.
- Note that the block database format also changed in version 0.8.0 and there is no
- @@ -58,220 +53,31 @@ the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not su
- Bitcoin Core should also work on most other Unix-like systems but is not
- frequently tested on them.
- -
- Notable changes
- ===============
- -Network fork safety enhancements
- ---------------------------------
- -
- -A number of changes to the way Bitcoin Core deals with peer connections and invalid blocks
- -have been made, as a safety precaution against blockchain forks and misbehaving peers.
- -
- -- Unrequested blocks with less work than the minimum-chain-work are now no longer processed even
- -if they have more work than the tip (a potential issue during IBD where the tip may have low-work).
- -This prevents peers wasting the resources of a node.
- -
- -- Peers which provide a chain with less work than the minimum-chain-work during IBD will now be disconnected.
- -
- -- For a given outbound peer, we now check whether their best known block has at least as much work as our tip. If it
- -doesn't, and if we still haven't heard about a block with sufficient work after a 20 minute timeout, then we send
- -a single getheaders message, and wait 2 more minutes. If after two minutes their best known block has insufficient
- -work, we disconnect that peer. We protect 4 of our outbound peers from being disconnected by this logic to prevent
- -excessive network topology changes as a result of this algorithm, while still ensuring that we have a reasonable
- -number of nodes not known to be on bogus chains.
- -
- -- Outbound (non-manual) peers that serve us block headers that are already known to be invalid (other than compact
- -block announcements, because BIP 152 explicitly permits nodes to relay compact blocks before fully validating them)
- -will now be disconnected.
- -
- -- If the chain tip has not been advanced for over 30 minutes, we now assume the tip may be stale and will try to connect
- -to an additional outbound peer. A periodic check ensures that if this extra peer connection is in use, we will disconnect
- -the peer that least recently announced a new block.
- -
- -- The set of all known invalid-themselves blocks (i.e. blocks which we attempted to connect but which were found to be
- -invalid) are now tracked and used to check if new headers build on an invalid chain. This ensures that everything that
- -descends from an invalid block is marked as such.
- -
- -
- -Miner block size limiting deprecated
- -------------------------------------
- -
- -Though blockmaxweight has been preferred for limiting the size of blocks returned by
- -getblocktemplate since 0.13.0, blockmaxsize remained as an option for those who wished
- -to limit their block size directly. Using this option resulted in a few UI issues as
- -well as non-optimal fee selection and ever-so-slightly worse performance, and has thus
- -now been deprecated. Further, the blockmaxsize option is now used only to calculate an
- -implied blockmaxweight, instead of limiting block size directly. Any miners who wish
- -to limit their blocks by size, instead of by weight, will have to do so manually by
- -removing transactions from their block template directly.
- -
- -
- -GUI settings backed up on reset
- --------------------------------
- -
- -The GUI settings will now be written to `guisettings.ini.bak` in the data directory before wiping them when
- -the `-resetguisettings` argument is used. This can be used to retroactively troubleshoot issues due to the
- -GUI settings.
- -
- -
- -Duplicate wallets disallowed
- -----------------------------
- -
- -Previously, it was possible to open the same wallet twice by manually copying the wallet file, causing
- -issues when both were opened simultaneously. It is no longer possible to open copies of the same wallet.
- -
- -
- -Debug `-minimumchainwork` argument added
- -----------------------------------------
- -
- -A hidden debug argument `-minimumchainwork` has been added to allow a custom minimum work value to be used
- -when validating a chain.
- -
- -
- -Low-level RPC changes
- -----------------------
- -
- -- The "currentblocksize" value in getmininginfo has been removed.
- -
- -- `dumpwallet` no longer allows overwriting files. This is a security measure
- - as well as prevents dangerous user mistakes.
- -
- -- `backupwallet` will now fail when attempting to backup to source file, rather than
- - destroying the wallet.
- -
- -- `listsinceblock` will now throw an error if an unknown `blockhash` argument
- - value is passed, instead of returning a list of all wallet transactions since
- - the genesis block. The behaviour is unchanged when an empty string is provided.
- -
- -0.15.1 Change log
- -=================
- -
- -### Mining
- -- #11100 `7871a7d` Fix confusing blockmax{size,weight} options, dont default to throwing away money (TheBlueMatt)
- -
- -### RPC and other APIs
- -- #10859 `2a5d099` gettxout: Slightly improve doc and tests (jtimon)
- -- #11267 `b1a6c94` update cli for estimate\*fee argument rename (laanwj)
- -- #11483 `20cdc2b` Fix importmulti bug when importing an already imported key (pedrobranco)
- -- #9937 `a43be5b` Prevent `dumpwallet` from overwriting files (laanwj)
- -- #11465 `405e069` Update named args documentation for importprivkey (dusty-wil)
- -- #11131 `b278a43` Write authcookie atomically (laanwj)
- -- #11565 `7d4546f` Make listsinceblock refuse unknown block hash (ryanofsky)
- -- #11593 `8195cb0` Work-around an upstream libevent bug (theuni)
- -
- -### P2P protocol and network code
- -- #11397 `27e861a` Improve and document SOCKS code (laanwj)
- -- #11252 `0fe2a9a` When clearing addrman clear mapInfo and mapAddr (instagibbs)
- -- #11527 `a2bd86a` Remove my testnet DNS seed (schildbach)
- -- #10756 `0a5477c` net processing: swap out signals for an interface class (theuni)
- -- #11531 `55b7abf` Check that new headers are not a descendant of an invalid block (more effeciently) (TheBlueMatt)
- -- #11560 `49bf090` Connect to a new outbound peer if our tip is stale (sdaftuar)
- -- #11568 `fc966bb` Disconnect outbound peers on invalid chains (sdaftuar)
- -- #11578 `ec8dedf` Add missing lock in ProcessHeadersMessage(...) (practicalswift)
- -- #11456 `6f27965` Replace relevant services logic with a function suite (TheBlueMatt)
- -- #11490 `bf191a7` Disconnect from outbound peers with bad headers chains (sdaftuar)
- -
- -### Validation
- -- #10357 `da4908c` Allow setting nMinimumChainWork on command line (sdaftuar)
- -- #11458 `2df65ee` Don't process unrequested, low-work blocks (sdaftuar)
- -
- -### Build system
- -- #11440 `b6c0209` Fix validationinterface build on super old boost/clang (TheBlueMatt)
- -- #11530 `265bb21` Add share/rpcuser to dist. source code archive (MarcoFalke)
- -
- -### GUI
- -- #11334 `19d63e8` Remove custom fee radio group and remove nCustomFeeRadio setting (achow101)
- -- #11198 `7310f1f` Fix display of package name on 'open config file' tooltip (esotericnonsense)
- -- #11015 `6642558` Add delay before filtering transactions (lclc)
- -- #11338 `6a62c74` Backup former GUI settings on `-resetguisettings` (laanwj)
- -- #11335 `8d13b42` Replace save|restoreWindowGeometry with Qt functions (MeshCollider)
- -- #11237 `2e31b1d` Fixing division by zero in time remaining (MeshCollider)
- -- #11247 `47c02a8` Use IsMine to validate custom change address (MarcoFalke)
- +GUI startup crash issue
- +-------------------------
- -### Wallet
- -- #11017 `9e8aae3` Close DB on error (kallewoof)
- -- #11225 `6b4d9f2` Update stored witness in AddToWallet (sdaftuar)
- -- #11126 `2cb720a` Acquire cs_main lock before cs_wallet during wallet initialization (ryanofsky)
- -- #11476 `9c8006d` Avoid opening copied wallet databases simultaneously (ryanofsky)
- -- #11492 `de7053f` Fix leak in CDB constructor (promag)
- -- #11376 `fd79ed6` Ensure backupwallet fails when attempting to backup to source file (tomasvdw)
- -- #11326 `d570aa4` Fix crash on shutdown with invalid wallet (MeshCollider)
- +After upgrade to 0.15.0, some clients would crash at startup because a custom
- +fee setting was configured that no longer exists in the GUI. This is a minimal
- +patch to avoid this issue from occuring.
- -### Tests and QA
- -- #11399 `a825d4a` Fix bip68-sequence rpc test (jl2012)
- -- #11150 `847c75e` Add getmininginfo test (mess110)
- -- #11407 `806c78f` add functional test for mempoolreplacement command line arg (instagibbs)
- -- #11433 `e169349` Restore bitcoin-util-test py2 compatibility (MarcoFalke)
- -- #11308 `2e1ac70` zapwallettxes: Wait up to 3s for mempool reload (MarcoFalke)
- -- #10798 `716066d` test bitcoin-cli (jnewbery)
- -- #11443 `019c492` Allow "make cov" out-of-tree; Fix rpc mapping check (MarcoFalke)
- -- #11445 `51bad91` 0.15.1 Backports (MarcoFalke)
- -- #11319 `2f0b30a` Fix error introduced into p2p-segwit.py, and prevent future similar errors (sdaftuar)
- -- #10552 `e4605d9` Tests for zmqpubrawtx and zmqpubrawblock (achow101)
- -- #11067 `eeb24a3` TestNode: Add wait_until_stopped helper method (MarcoFalke)
- -- #11068 `5398f20` Move wait_until to util (MarcoFalke)
- -- #11125 `812c870` Add bitcoin-cli -stdin and -stdinrpcpass functional tests (promag)
- -- #11077 `1d80d1e` fix timeout issues from TestNode (jnewbery)
- -- #11078 `f1ced0d` Make p2p-leaktests.py more robust (jnewbery)
- -- #11210 `f3f7891` Stop test_bitcoin-qt touching ~/.bitcoin (MeshCollider)
- -- #11234 `f0b6795` Remove redundant testutil.cpp|h files (MeshCollider)
- -- #11215 `cef0319` fixups from set_test_params() (jnewbery)
- -- #11345 `f9cf7b5` Check connectivity before sending in assumevalid.py (jnewbery)
- -- #11091 `c276c1e` Increase initial RPC timeout to 60 seconds (laanwj)
- -- #10711 `fc2aa09` Introduce TestNode (jnewbery)
- -- #11230 `d8dd8e7` Fixup dbcrash interaction with add_nodes() (jnewbery)
- -- #11241 `4424176` Improve signmessages functional test (mess110)
- -- #11116 `2c4ff35` Unit tests for script/standard and IsMine functions (jimpo)
- -- #11422 `a36f332` Verify DBWrapper iterators are taking snapshots (TheBlueMatt)
- -- #11121 `bb5e7cb` TestNode tidyups (jnewbery)
- -- #11521 `ca0f3f7` travis: move back to the minimal image (theuni)
- -- #11538 `adbc9d1` Fix race condition failures in replace-by-fee.py, sendheaders.py (sdaftuar)
- -- #11472 `4108879` Make tmpdir option an absolute path, misc cleanup (MarcoFalke)
- -- #10853 `5b728c8` Fix RPC failure testing (again) (jnewbery)
- -- #11310 `b6468d3` Test listwallets RPC (mess110)
- +0.15.0.1 Change log
- +====================
- -### Miscellaneous
- -- #11377 `75997c3` Disallow uncompressed pubkeys in bitcoin-tx [multisig] output adds (TheBlueMatt)
- -- #11437 `dea3b87` [Docs] Update Windows build instructions for using WSL and Ubuntu 17.04 (fanquake)
- -- #11318 `8b61aee` Put back inadvertently removed copyright notices (gmaxwell)
- -- #11442 `cf18f42` [Docs] Update OpenBSD Build Instructions for OpenBSD 6.2 (fanquake)
- -- #10957 `50bd3f6` Avoid returning a BIP9Stats object with uninitialized values (practicalswift)
- -- #11539 `01223a0` [verify-commits] Allow revoked keys to expire (TheBlueMatt)
- +- #11332 `46c8d23` Fix possible crash with invalid nCustomFeeRadio in QSettings (achow101, TheBlueMatt)
- +Also the manpages were updated, as this was forgotten for 0.15.0.
- Credits
- =======
- Thanks to everyone who directly contributed to this release:
- -- Andreas Schildbach
- - Andrew Chow
- -- Chris Moore
- -- Cory Fields
- -- Cristian Mircea Messel
- -- Daniel Edgecumbe
- -- Donal OConnor
- -- Dusty Williams
- -- fanquake
- -- Gregory Sanders
- -- Jim Posen
- -- John Newbery
- -- Johnson Lau
- -- João Barbosa
- -- Jorge Timón
- -- Karl-Johan Alm
- -- Lucas Betschart
- -- MarcoFalke
- - Matt Corallo
- -- Paul Berg
- -- Pedro Branco
- -- Pieter Wuille
- -- practicalswift
- -- Russell Yanofsky
- -- Samuel Dobson
- -- Suhas Daftuar
- -- Tomas van der Wansem
- +- Jonas Schnelli
- - Wladimir J. van der Laan
- As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
- diff --git a/doc/release-notes/release-notes-0.15.0.1.md b/doc/release-notes/release-notes-0.15.0.1.md
- deleted file mode 100644
- index 53ab02c..0000000
- --- a/doc/release-notes/release-notes-0.15.0.1.md
- +++ /dev/null
- @@ -1,87 +0,0 @@
- -Bitcoin Core version *0.15.0.1* is now available from:
- -
- - <https://bitcoin.org/bin/bitcoin-core-0.15.0.1/>
- -
- -and
- -
- - <https://bitcoincore.org/bin/bitcoin-core-0.15.0.1/>
- -
- -This is a minor bug fix for 0.15.0.
- -
- -Please report bugs using the issue tracker at GitHub:
- -
- - <https://github.com/bitcoin/bitcoin/issues>
- -
- -To receive security and update notifications, please subscribe to:
- -
- - <https://bitcoincore.org/en/list/announcements/join/>
- -
- -How to Upgrade
- -==============
- -
- -If you are running an older version, shut it down. Wait until it has completely
- -shut down (which might take a few minutes for older versions), then run the
- -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac)
- -or `bitcoind`/`bitcoin-qt` (on Linux).
- -
- -The first time you run version 0.15.0 or higher, your chainstate database will
- -be converted to a new format, which will take anywhere from a few minutes to
- -half an hour, depending on the speed of your machine.
- -
- -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a
- -downgrade from version 0.15.0 or upgrade to version 0.15.0 will cause all fee
- -estimates to be discarded.
- -
- -Note that the block database format also changed in version 0.8.0 and there is no
- -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading
- -directly from 0.7.x and earlier without redownloading the blockchain is not supported.
- -However, as usual, old wallet versions are still supported.
- -
- -Downgrading warning
- --------------------
- -
- -The chainstate database for this release is not compatible with previous
- -releases, so if you run 0.15 and then decide to switch back to any
- -older version, you will need to run the old release with the `-reindex-chainstate`
- -option to rebuild the chainstate data structures in the old format.
- -
- -If your node has pruning enabled, this will entail re-downloading and
- -processing the entire blockchain.
- -
- -Compatibility
- -==============
- -
- -Bitcoin Core is extensively tested on multiple operating systems using
- -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported.
- -
- -Bitcoin Core should also work on most other Unix-like systems but is not
- -frequently tested on them.
- -
- -Notable changes
- -===============
- -
- -GUI startup crash issue
- --------------------------
- -
- -After upgrade to 0.15.0, some clients would crash at startup because a custom
- -fee setting was configured that no longer exists in the GUI. This is a minimal
- -patch to avoid this issue from occuring.
- -
- -0.15.0.1 Change log
- -====================
- -
- -- #11332 `46c8d23` Fix possible crash with invalid nCustomFeeRadio in QSettings (achow101, TheBlueMatt)
- -
- -Also the manpages were updated, as this was forgotten for 0.15.0.
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- Andrew Chow
- -- Matt Corallo
- -- Jonas Schnelli
- -- Wladimir J. van der Laan
- -
- -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
- diff --git a/doc/release-notes/release-notes-0.15.0.md b/doc/release-notes/release-notes-0.15.0.md
- deleted file mode 100644
- index 29816ca..0000000
- --- a/doc/release-notes/release-notes-0.15.0.md
- +++ /dev/null
- @@ -1,878 +0,0 @@
- -Bitcoin Core version *0.15.0* is now available from:
- -
- - <https://bitcoin.org/bin/bitcoin-core-0.15.0/>
- -
- -This is a new major version release, including new features, various bugfixes
- -and performance improvements, as well as updated translations.
- -
- -Please report bugs using the issue tracker at GitHub:
- -
- - <https://github.com/bitcoin/bitcoin/issues>
- -
- -To receive security and update notifications, please subscribe to:
- -
- - <https://bitcoincore.org/en/list/announcements/join/>
- -
- -How to Upgrade
- -==============
- -
- -If you are running an older version, shut it down. Wait until it has completely
- -shut down (which might take a few minutes for older versions), then run the
- -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac)
- -or `bitcoind`/`bitcoin-qt` (on Linux).
- -
- -The first time you run version 0.15.0, your chainstate database will be converted to a
- -new format, which will take anywhere from a few minutes to half an hour,
- -depending on the speed of your machine.
- -
- -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a
- -downgrade from version 0.15.0 or upgrade to version 0.15.0 will cause all fee
- -estimates to be discarded.
- -
- -Note that the block database format also changed in version 0.8.0 and there is no
- -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading
- -directly from 0.7.x and earlier without redownloading the blockchain is not supported.
- -However, as usual, old wallet versions are still supported.
- -
- -Downgrading warning
- --------------------
- -
- -The chainstate database for this release is not compatible with previous
- -releases, so if you run 0.15 and then decide to switch back to any
- -older version, you will need to run the old release with the `-reindex-chainstate`
- -option to rebuild the chainstate data structures in the old format.
- -
- -If your node has pruning enabled, this will entail re-downloading and
- -processing the entire blockchain.
- -
- -Compatibility
- -==============
- -
- -Bitcoin Core is extensively tested on multiple operating systems using
- -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported.
- -
- -Bitcoin Core should also work on most other Unix-like systems but is not
- -frequently tested on them.
- -
- -Notes for 0.15.0
- -================
- -
- -Current SegWit support
- -----------------------
- -
- -Version 0.15.0 supports adding a segregated witness address via the `addwitnessaddress` RPC, but
- -please note that this is a testing/expert RPC, which does not guarantee recovery from backup. Only use
- -this RPC if you know what you are doing. More complete wallet support for segregated witness is coming
- -in a next version.
- -
- -Rescanning with encrypted wallets
- ----------------------------------
- -
- -As in previous versions, when using an encrypted HD wallet, the keypool cannot be topped up without unlocking
- -the wallet. This means that currently, in order to recover from a backup of an encrypted HD wallet, the user
- -must unlock the wallet with a really long timeout and manually trigger a rescan, otherwise they risk missing
- -some keys when auto-topup cannot run. Unfortunately there is no `rescan` RPC in this version, that will be
- -included in a future version, so for now a rescan can be triggered using one of the `import*` commands, using
- -a dummy address generated by another (trusted) wallet.
- -
- -Notable changes
- -===============
- -
- -Performance Improvements
- -------------------------
- -
- -Version 0.15 contains a number of significant performance improvements, which make
- -Initial Block Download, startup, transaction and block validation much faster:
- -
- -- The chainstate database (which is used for tracking UTXOs) has been changed
- - from a per-transaction model to a per-output model (See [PR 10195](https://github.com/bitcoin/bitcoin/pull/10195)). Advantages of this model
- - are that it:
- - - avoids the CPU overhead of deserializing and serializing the unused outputs;
- - - has more predictable memory usage;
- - - uses simpler code;
- - - is adaptable to various future cache flushing strategies.
- -
- - As a result, validating the blockchain during Initial Block Download (IBD) and reindex
- - is ~30-40% faster, uses 10-20% less memory, and flushes to disk far less frequently.
- - The only downside is that the on-disk database is 15% larger. During the conversion from the previous format
- - a few extra gigabytes may be used.
- -- Earlier versions experienced a spike in memory usage while flushing UTXO updates to disk.
- - As a result, only half of the available memory was actually used as cache, and the other half was
- - reserved to accommodate flushing. This is no longer the case (See [PR 10148](https://github.com/bitcoin/bitcoin/pull/10148)), and the entirety of
- - the available cache (see `-dbcache`) is now actually used as cache. This reduces the flushing
- - frequency by a factor 2 or more.
- -- In previous versions, signature validation for transactions has been cached when the
- - transaction is accepted to the mempool. Version 0.15 extends this to cache the entire script
- - validity (See [PR 10192](https://github.com/bitcoin/bitcoin/pull/10192)). This means that if a transaction in a block has already been accepted to the
- - mempool, the scriptSig does not need to be re-evaluated. Empirical tests show that
- - this results in new block validation being 40-50% faster.
- -- LevelDB has been upgraded to version 1.20 (See [PR 10544](https://github.com/bitcoin/bitcoin/pull/10544)). This version contains hardware acceleration for CRC
- - on architectures supporting SSE 4.2. As a result, synchronization and block validation are now faster.
- -- SHA256 hashing has been optimized for architectures supporting SSE 4 (See [PR 10821](https://github.com/bitcoin/bitcoin/pull/10821)). SHA256 is around
- - 50% faster on supported hardware, which results in around 5% faster IBD and block
- - validation. In version 0.15, SHA256 hardware optimization is disabled in release builds by
- - default, but can be enabled by using `--enable-experimental-asm` when building.
- -- Refill of the keypool no longer flushes the wallet between each key which resulted in a ~20x speedup in creating a new wallet. Part of this speedup was used to increase the default keypool to 1000 keys to make recovery more robust. (See [PR 10831](https://github.com/bitcoin/bitcoin/pull/10831)).
- -
- -Fee Estimation Improvements
- ----------------------------
- -
- -Fee estimation has been significantly improved in version 0.15, with more accurate fee estimates used by the wallet and a wider range of options for advanced users of the `estimatesmartfee` and `estimaterawfee` RPCs (See [PR 10199](https://github.com/bitcoin/bitcoin/pull/10199)).
- -
- -### Changes to internal logic and wallet behavior
- -
- -- Internally, estimates are now tracked on 3 different time horizons. This allows for longer targets and means estimates adjust more quickly to changes in conditions.
- -- Estimates can now be *conservative* or *economical*. *Conservative* estimates use longer time horizons to produce an estimate which is less susceptible to rapid changes in fee conditions. *Economical* estimates use shorter time horizons and will be more affected by short-term changes in fee conditions. Economical estimates may be considerably lower during periods of low transaction activity (for example over weekends), but may result in transactions being unconfirmed if prevailing fees increase rapidly.
- -- By default, the wallet will use conservative fee estimates to increase the reliability of transactions being confirmed within the desired target. For transactions that are marked as replaceable, the wallet will use an economical estimate by default, since the fee can be 'bumped' if the fee conditions change rapidly (See [PR 10589](https://github.com/bitcoin/bitcoin/pull/10589)).
- -- Estimates can now be made for confirmation targets up to 1008 blocks (one week).
- -- More data on historical fee rates is stored, leading to more precise fee estimates.
- -- Transactions which leave the mempool due to eviction or other non-confirmed reasons are now taken into account by the fee estimation logic, leading to more accurate fee estimates.
- -- The fee estimation logic will make sure enough data has been gathered to return a meaningful estimate. If there is insufficient data, a fallback default fee is used.
- -
- -### Changes to fee estimate RPCs
- -
- -- The `estimatefee` RPC is now deprecated in favor of using only `estimatesmartfee` (which is the implementation used by the GUI)
- -- The `estimatesmartfee` RPC interface has been changed (See [PR 10707](https://github.com/bitcoin/bitcoin/pull/10707)):
- - - The `nblocks` argument has been renamed to `conf_target` (to be consistent with other RPC methods).
- - - An `estimate_mode` argument has been added. This argument takes one of the following strings: `CONSERVATIVE`, `ECONOMICAL` or `UNSET` (which defaults to `CONSERVATIVE`).
- - - The RPC return object now contains an `errors` member, which returns errors encountered during processing.
- - - If Bitcoin Core has not been running for long enough and has not seen enough blocks or transactions to produce an accurate fee estimation, an error will be returned (previously a value of -1 was used to indicate an error, which could be confused for a feerate).
- -- A new `estimaterawfee` RPC is added to provide raw fee data. External clients can query and use this data in their own fee estimation logic.
- -
- -Multi-wallet support
- ---------------------
- -
- -Bitcoin Core now supports loading multiple, separate wallets (See [PR 8694](https://github.com/bitcoin/bitcoin/pull/8694), [PR 10849](https://github.com/bitcoin/bitcoin/pull/10849)). The wallets are completely separated, with individual balances, keys and received transactions.
- -
- -Multi-wallet is enabled by using more than one `-wallet` argument when starting Bitcoin, either on the command line or in the Bitcoin config file.
- -
- -**In Bitcoin-Qt, only the first wallet will be displayed and accessible for creating and signing transactions.** GUI selectable multiple wallets will be supported in a future version. However, even in 0.15 other loaded wallets will remain synchronized to the node's current tip in the background. This can be useful if running a pruned node, since loading a wallet where the most recent sync is beyond the pruned height results in having to download and revalidate the whole blockchain. Continuing to synchronize all wallets in the background avoids this problem.
- -
- -Bitcoin Core 0.15.0 contains the following changes to the RPC interface and `bitcoin-cli` for multi-wallet:
- -
- -* When running Bitcoin Core with a single wallet, there are **no** changes to the RPC interface or `bitcoin-cli`. All RPC calls and `bitcoin-cli` commands continue to work as before.
- -* When running Bitcoin Core with multi-wallet, all *node-level* RPC methods continue to work as before. HTTP RPC requests should be send to the normal `<RPC IP address>:<RPC port>/` endpoint, and `bitcoin-cli` commands should be run as before. A *node-level* RPC method is any method which does not require access to the wallet.
- -* When running Bitcoin Core with multi-wallet, *wallet-level* RPC methods must specify the wallet for which they're intended in every request. HTTP RPC requests should be send to the `<RPC IP address>:<RPC port>/wallet/<wallet name>/` endpoint, for example `127.0.0.1:8332/wallet/wallet1.dat/`. `bitcoin-cli` commands should be run with a `-rpcwallet` option, for example `bitcoin-cli -rpcwallet=wallet1.dat getbalance`.
- -* A new *node-level* `listwallets` RPC method is added to display which wallets are currently loaded. The names returned by this method are the same as those used in the HTTP endpoint and for the `rpcwallet` argument.
- -
- -Note that while multi-wallet is now fully supported, the RPC multi-wallet interface should be considered unstable for version 0.15.0, and there may backwards-incompatible changes in future versions.
- -
- -Replace-by-fee control in the GUI
- ----------------------------------
- -
- -Bitcoin Core has supported creating opt-in replace-by-fee (RBF) transactions
- -since version 0.12.0, and since version 0.14.0 has included a `bumpfee` RPC method to
- -replace unconfirmed opt-in RBF transactions with a new transaction that pays
- -a higher fee.
- -
- -In version 0.15, creating an opt-in RBF transaction and replacing the unconfirmed
- -transaction with a higher-fee transaction are both supported in the GUI (See [PR 9592](https://github.com/bitcoin/bitcoin/pull/9592)).
- -
- -Removal of Coin Age Priority
- -----------------------------
- -
- -In previous versions of Bitcoin Core, a portion of each block could be reserved for transactions based on the age and value of UTXOs they spent. This concept (Coin Age Priority) is a policy choice by miners, and there are no consensus rules around the inclusion of Coin Age Priority transactions in blocks. In practice, only a few miners continue to use Coin Age Priority for transaction selection in blocks. Bitcoin Core 0.15 removes all remaining support for Coin Age Priority (See [PR 9602](https://github.com/bitcoin/bitcoin/pull/9602)). This has the following implications:
- -
- -- The concept of *free transactions* has been removed. High Coin Age Priority transactions would previously be allowed to be relayed even if they didn't attach a miner fee. This is no longer possible since there is no concept of Coin Age Priority. The `-limitfreerelay` and `-relaypriority` options which controlled relay of free transactions have therefore been removed.
- -- The `-sendfreetransactions` option has been removed, since almost all miners do not include transactions which do not attach a transaction fee.
- -- The `-blockprioritysize` option has been removed.
- -- The `estimatepriority` and `estimatesmartpriority` RPCs have been removed.
- -- The `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry` and `getrawmempool` RPCs no longer return `startingpriority` and `currentpriority`.
- -- The `prioritisetransaction` RPC no longer takes a `priority_delta` argument, which is replaced by a `dummy` argument for backwards compatibility with clients using positional arguments. The RPC is still used to change the apparent fee-rate of the transaction by using the `fee_delta` argument.
- -- `-minrelaytxfee` can now be set to 0. If `minrelaytxfee` is set, then fees smaller than `minrelaytxfee` (per kB) are rejected from relaying, mining and transaction creation. This defaults to 1000 satoshi/kB.
- -- The `-printpriority` option has been updated to only output the fee rate and hash of transactions included in a block by the mining code.
- -
- -Mempool Persistence Across Restarts
- ------------------------------------
- -
- -Version 0.14 introduced mempool persistence across restarts (the mempool is saved to a `mempool.dat` file in the data directory prior to shutdown and restores the mempool when the node is restarted). Version 0.15 allows this feature to be switched on or off using the `-persistmempool` command-line option (See [PR 9966](https://github.com/bitcoin/bitcoin/pull/9966)). By default, the option is set to true, and the mempool is saved on shutdown and reloaded on startup. If set to false, the `mempool.dat` file will not be loaded on startup or saved on shutdown.
- -
- -New RPC methods
- ----------------
- -
- -Version 0.15 introduces several new RPC methods:
- -
- -- `abortrescan` stops current wallet rescan, e.g. when triggered by an `importprivkey` call (See [PR 10208](https://github.com/bitcoin/bitcoin/pull/10208)).
- -- `combinerawtransaction` accepts a JSON array of raw transactions and combines them into a single raw transaction (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)).
- -- `estimaterawfee` returns raw fee data so that customized logic can be implemented to analyze the data and calculate estimates. See [Fee Estimation Improvements](#fee-estimation-improvements) for full details on changes to the fee estimation logic and interface.
- -- `getchaintxstats` returns statistics about the total number and rate of transactions
- - in the chain (See [PR 9733](https://github.com/bitcoin/bitcoin/pull/9733)).
- -- `listwallets` lists wallets which are currently loaded. See the *Multi-wallet* section
- - of these release notes for full details (See [Multi-wallet support](#multi-wallet-support)).
- -- `uptime` returns the total runtime of the `bitcoind` server since its last start (See [PR 10400](https://github.com/bitcoin/bitcoin/pull/10400)).
- -
- -Low-level RPC changes
- ----------------------
- -
- -- When using Bitcoin Core in multi-wallet mode, RPC requests for wallet methods must specify
- - the wallet that they're intended for. See [Multi-wallet support](#multi-wallet-support) for full details.
- -
- -- The new database model no longer stores information about transaction
- - versions of unspent outputs (See [Performance improvements](#performance-improvements)). This means that:
- - - The `gettxout` RPC no longer has a `version` field in the response.
- - - The `gettxoutsetinfo` RPC reports `hash_serialized_2` instead of `hash_serialized`,
- - which does not commit to the transaction versions of unspent outputs, but does
- - commit to the height and coinbase information.
- - - The `getutxos` REST path no longer reports the `txvers` field in JSON format,
- - and always reports 0 for transaction versions in the binary format
- -
- -- The `estimatefee` RPC is deprecated. Clients should switch to using the `estimatesmartfee` RPC, which returns better fee estimates. See [Fee Estimation Improvements](#fee-estimation-improvements) for full details on changes to the fee estimation logic and interface.
- -
- -- The `gettxoutsetinfo` response now contains `disk_size` and `bogosize` instead of
- - `bytes_serialized`. The first is a more accurate estimate of actual disk usage, but
- - is not deterministic. The second is unrelated to disk usage, but is a
- - database-independent metric of UTXO set size: it counts every UTXO entry as 50 + the
- - length of its scriptPubKey (See [PR 10426](https://github.com/bitcoin/bitcoin/pull/10426)).
- -
- -- `signrawtransaction` can no longer be used to combine multiple transactions into a single transaction. Instead, use the new `combinerawtransaction` RPC (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)).
- -
- -- `fundrawtransaction` no longer accepts a `reserveChangeKey` option. This option used to allow RPC users to fund a raw transaction using an key from the keypool for the change address without removing it from the available keys in the keypool. The key could then be re-used for a `getnewaddress` call, which could potentially result in confusing or dangerous behaviour (See [PR 10784](https://github.com/bitcoin/bitcoin/pull/10784)).
- -
- -- `estimatepriority` and `estimatesmartpriority` have been removed. See [Removal of Coin Age Priority](#removal-of-coin-age-priority).
- -
- -- The `listunspent` RPC now takes a `query_options` argument (see [PR 8952](https://github.com/bitcoin/bitcoin/pull/8952)), which is a JSON object
- - containing one or more of the following members:
- - - `minimumAmount` - a number specifying the minimum value of each UTXO
- - - `maximumAmount` - a number specifying the maximum value of each UTXO
- - - `maximumCount` - a number specifying the minimum number of UTXOs
- - - `minimumSumAmount` - a number specifying the minimum sum value of all UTXOs
- -
- -- The `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry` and `getrawmempool` RPCs no longer return `startingpriority` and `currentpriority`. See [Removal of Coin Age Priority](#removal-of-coin-age-priority).
- -
- -- The `dumpwallet` RPC now returns the full absolute path to the dumped wallet. It
- - used to return no value, even if successful (See [PR 9740](https://github.com/bitcoin/bitcoin/pull/9740)).
- -
- -- In the `getpeerinfo` RPC, the return object for each peer now returns an `addrbind` member, which contains the ip address and port of the connection to the peer. This is in addition to the `addrlocal` member which contains the ip address and port of the local node as reported by the peer (See [PR 10478](https://github.com/bitcoin/bitcoin/pull/10478)).
- -
- -- The `disconnectnode` RPC can now disconnect a node specified by node ID (as well as by IP address/port). To disconnect a node based on node ID, call the RPC with the new `nodeid` argument (See [PR 10143](https://github.com/bitcoin/bitcoin/pull/10143)).
- -
- -- The second argument in `prioritisetransaction` has been renamed from `priority_delta` to `dummy` since Bitcoin Core no longer has a concept of coin age priority. The `dummy` argument has no functional effect, but is retained for positional argument compatibility. See [Removal of Coin Age Priority](#removal-of-coin-age-priority).
- -
- -- The `resendwallettransactions` RPC throws an error if the `-walletbroadcast` option is set to false (See [PR 10995](https://github.com/bitcoin/bitcoin/pull/10995)).
- -
- -- The second argument in the `submitblock` RPC argument has been renamed from `parameters` to `dummy`. This argument never had any effect, and the renaming is simply to communicate this fact to the user (See [PR 10191](https://github.com/bitcoin/bitcoin/pull/10191))
- - (Clients should, however, use positional arguments for `submitblock` in order to be compatible with BIP 22.)
- -
- -- The `verbose` argument of `getblock` has been renamed to `verbosity` and now takes an integer from 0 to 2. Verbose level 0 is equivalent to `verbose=false`. Verbose level 1 is equivalent to `verbose=true`. Verbose level 2 will give the full transaction details of each transaction in the output as given by `getrawtransaction`. The old behavior of using the `verbose` named argument and a boolean value is still maintained for compatibility.
- -
- -- Error codes have been updated to be more accurate for the following error cases (See [PR 9853](https://github.com/bitcoin/bitcoin/pull/9853)):
- - - `getblock` now returns RPC_MISC_ERROR if the block can't be found on disk (for
- - example if the block has been pruned). Previously returned RPC_INTERNAL_ERROR.
- - - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned
- - because the node is not in pruned mode. Previously returned RPC_METHOD_NOT_FOUND.
- - - `pruneblockchain` now returns RPC_INVALID_PARAMETER if the blocks cannot be pruned
- - because the supplied timestamp is too late. Previously returned RPC_INTERNAL_ERROR.
- - - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned
- - because the blockchain is too short. Previously returned RPC_INTERNAL_ERROR.
- - - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the supplied IP address
- - or subnet is invalid. Previously returned RPC_CLIENT_NODE_ALREADY_ADDED.
- - - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the user tries to unban
- - a node that has not previously been banned. Previously returned RPC_MISC_ERROR.
- - - `removeprunedfunds` now returns RPC_WALLET_ERROR if `bitcoind` is unable to remove
- - the transaction. Previously returned RPC_INTERNAL_ERROR.
- - - `removeprunedfunds` now returns RPC_INVALID_PARAMETER if the transaction does not
- - exist in the wallet. Previously returned RPC_INTERNAL_ERROR.
- - - `fundrawtransaction` now returns RPC_INVALID_ADDRESS_OR_KEY if an invalid change
- - address is provided. Previously returned RPC_INVALID_PARAMETER.
- - - `fundrawtransaction` now returns RPC_WALLET_ERROR if `bitcoind` is unable to create
- - the transaction. The error message provides further details. Previously returned
- - RPC_INTERNAL_ERROR.
- - - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has
- - descendants in the wallet. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has
- - descendants in the mempool. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has
- - has been mined or conflicts with a mined transaction. Previously returned
- - RPC_INVALID_ADDRESS_OR_KEY.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction is not
- - BIP 125 replaceable. Previously returned RPC_INVALID_ADDRESS_OR_KEY.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has already
- - been bumped by a different transaction. Previously returned RPC_INVALID_REQUEST.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction contains
- - inputs which don't belong to this wallet. Previously returned RPC_INVALID_ADDRESS_OR_KEY.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has multiple change
- - outputs. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has no change
- - output. Previously returned RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too high. Previously returned
- - RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too low. Previously returned
- - RPC_MISC_ERROR.
- - - `bumpfee` now returns RPC_WALLET_ERROR if the change output is too small to bump the
- - fee. Previously returned RPC_MISC_ERROR.
- -
- -0.15.0 Change log
- -=================
- -
- -### RPC and other APIs
- -- #9485 `61a640e` ZMQ example using python3 and asyncio (mcelrath)
- -- #9894 `0496e15` remove 'label' filter for rpc command help (instagibbs)
- -- #9853 `02bd6e9` Fix error codes from various RPCs (jnewbery)
- -- #9842 `598ef9c` Fix RPC failure testing (continuation of #9707) (jnewbery)
- -- #10038 `d34995a` Add mallocinfo mode to `getmemoryinfo` RPC (laanwj)
- -- #9500 `3568b30` [Qt][RPC] Autocomplete commands for 'help' command in debug console (achow101)
- -- #10056 `e6156a0` [zmq] Call va_end() on va_start()ed args (kallewoof)
- -- #10086 `7438cea` Trivial: move rpcserialversion into RPC option group (jlopp)
- -- #10150 `350b224` [rpc] Add logging rpc (jnewbery)
- -- #10208 `393160c` [wallet] Rescan abortability (kallewoof)
- -- #10143 `a987def` [net] Allow disconnectnode RPC to be called with node id (jnewbery)
- -- #10281 `0e8499c` doc: Add RPC interface guidelines (laanwj)
- -- #9733 `d4732f3` Add getchaintxstats RPC (sipa)
- -- #10310 `f4b15e2` [doc] Add hint about getmempoolentry to getrawmempool help (kallewoof)
- -- #8704 `96c850c` [RPC] Transaction details in getblock (achow101)
- -- #8952 `9390845` Add query options to listunspent RPC call (pedrobranco)
- -- #10413 `08ac35a` Fix docs (there's no rpc command setpaytxfee) (RHavar)
- -- #8384 `e317c0d` Add witness data output to TxInError messages (instagibbs)
- -- #9571 `4677151` RPC: getblockchaininfo returns BIP signaling statistics (pinheadmz)
- -- #10450 `ef2d062` Fix bumpfee rpc "errors" return value (ryanofsky)
- -- #10475 `39039b1` [RPC] getmempoolinfo mempoolminfee is a BTC/KB feerate (instagibbs)
- -- #10478 `296928e` rpc: Add listen address to incoming connections in `getpeerinfo` (laanwj)
- -- #10403 `08d0390` Fix importmulti failure to return rescan errors (ryanofsky)
- -- #9740 `9fec4da` Add friendly output to dumpwallet (aideca)
- -- #10426 `16f6c98` Replace bytes_serialized with bogosize (sipa)
- -- #10252 `980deaf` RPC/Mining: Restore API compatibility for prioritisetransaction (luke-jr)
- -- #9672 `46311e7` Opt-into-RBF for RPC & bitcoin-tx (luke-jr)
- -- #10481 `9c248e3` Decodehextx scripts sanity check (achow101)
- -- #10488 `fa1f106` Note that the prioritizetransaction dummy value is deprecated, and has no meaning (TheBlueMatt)
- -- #9738 `c94b89e` gettxoutproof() should return consistent result (jnewbery)
- -- #10191 `00350bd` [trivial] Rename unused RPC arguments 'dummy' (jnewbery)
- -- #10627 `b62b4c8` fixed listunspent rpc convert parameter (tnakagawa)
- -- #10412 `bef02fb` Improve wallet rescan API (ryanofsky)
- -- #10400 `1680ee0` [RPC] Add an uptime command that displays the amount of time (in seconds) bitcoind has been running (rvelhote)
- -- #10683 `d81bec7` rpc: Move the `generate` RPC call to rpcwallet (laanwj)
- -- #10710 `30bc0f6` REST/RPC example update (Mirobit)
- -- #10747 `9edda0c` [rpc] fix verbose argument for getblock in bitcoin-cli (jnewbery)
- -- #10589 `104f5f2` More economical fee estimates for RBF and RPC options to control (morcos)
- -- #10543 `b27b004` Change API to estimaterawfee (morcos)
- -- #10807 `afd2fca` getbalance example covers at least 6 confirms (instagibbs)
- -- #10707 `75b5643` Better API for estimatesmartfee RPC (morcos)
- -- #10784 `9e8d6a3` Do not allow users to get keys from keypool without reserving them (TheBlueMatt)
- -- #10857 `d445a2c` [RPC] Add a deprecation warning to getinfo's output (achow101)
- -- #10571 `adf170d` [RPC]Move transaction combining from signrawtransaction to new RPC (achow101)
- -- #10783 `041dad9` [RPC] Various rpc argument fixes (instagibbs)
- -- #9622 `6ef3c7e` [rpc] listsinceblock should include lost transactions when parameter is a reorg'd block (kallewoof)
- -- #10799 `8537187` Prevent user from specifying conflicting parameters to fundrawtx (TheBlueMatt)
- -- #10931 `0b11a07` Fix misleading "Method not found" multiwallet errors (ryanofsky)
- -- #10788 `f66c596` [RPC] Fix addwitnessaddress by replacing ismine with producesignature (achow101)
- -- #10999 `627c3c0` Fix amounts formatting in `decoderawtransaction` (laanwj)
- -- #11002 `4268426` [wallet] return correct error code from resendwallettransaction (jnewbery)
- -- #11029 `96a63a3` [RPC] trivial: gettxout no longer shows version of tx (FelixWeis)
- -- #11083 `6c2b008` Fix combinerawtransaction RPC help result section (jonasnick)
- -- #11027 `07164bb` [RPC] Only return hex field once in getrawtransaction (achow101)
- -- #10698 `5af6572` Be consistent in calling transactions "replaceable" for Opt-In RBF (TheBlueMatt)
- -
- -### Block and transaction handling
- -- #9801 `a8c5751` Removed redundant parameter from mempool.PrioritiseTransaction (gubatron)
- -- #9819 `1efc99c` Remove harmless read of unusued priority estimates (morcos)
- -- #9822 `b7547fa` Remove block file location upgrade code (benma)
- -- #9602 `30ff3a2` Remove coin age priority and free transactions - implementation (morcos)
- -- #9548 `47510ad` Remove min reasonable fee (morcos)
- -- #10249 `c73af54` Switch CCoinsMap from boost to std unordered_map (sipa)
- -- #9966 `2a183de` Control mempool persistence using a command line parameter (jnewbery)
- -- #10199 `318ea50` Better fee estimates (morcos)
- -- #10196 `bee3529` Bugfix: PrioritiseTransaction updates the mempool tx counter (sdaftuar)
- -- #10195 `1088b02` Switch chainstate db and cache to per-txout model (sipa)
- -- #10284 `c2ab38b` Always log debug information for fee calculation in CreateTransaction (morcos)
- -- #10503 `efbcf2b` Use REJECT_DUPLICATE for already known and conflicted txn (sipa)
- -- #10537 `b3eb0d6` Few Minor per-utxo assert-semantics re-adds and tweak (TheBlueMatt)
- -- #10626 `8c841a3` doc: Remove outdated minrelaytxfee comment (MarcoFalke)
- -- #10559 `234ffc6` Change semantics of HaveCoinInCache to match HaveCoin (morcos)
- -- #10581 `7878353` Simplify return values of GetCoin/HaveCoin(InCache) (sipa)
- -- #10684 `a381f6a` Remove no longer used mempool.exists(outpoint) (morcos)
- -- #10148 `d4e551a` Use non-atomic flushing with block replay (sipa)
- -- #10685 `30c2130` Clarify CCoinsViewMemPool documentation (TheBlueMatt)
- -- #10558 `90a002e` Address nits from per-utxo change (morcos)
- -- #10706 `6859ad2` Improve wallet fee logic and fix GUI bugs (morcos)
- -- #10526 `754aa02` Force on-the-fly compaction during pertxout upgrade (sipa)
- -- #10985 `d896d5c` Add undocumented -forcecompactdb to force LevelDB compactions (sipa)
- -- #10292 `e4bbd3d` Improved efficiency in COutPoint constructors (mm-s)
- -- #10290 `8d6d43e` Add -stopatheight for benchmarking (sipa)
- -
- -### P2P protocol and network code
- -- #9726 `7639d38` netbase: Do not print an error on connection timeouts through proxy (laanwj)
- -- #9805 `5b583ef` Add seed.btc.petertodd.org to mainnet DNS seeds (petertodd)
- -- #9861 `22f609f` Trivial: Debug log ambiguity fix for peer addrs (keystrike)
- -- #9774 `90cb2a2` Enable host lookups for -proxy and -onion parameters (jmcorgan)
- -- #9558 `7b585cf` Clarify assumptions made about when BlockCheck is called (TheBlueMatt)
- -- #10135 `e19586a` [p2p] Send the correct error code in reject messages (jnewbery)
- -- #9665 `eab00d9` Use cached [compact] blocks to respond to getdata messages (TheBlueMatt)
- -- #10215 `a077a90` Check interruptNet during dnsseed lookups (TheBlueMatt)
- -- #10234 `faf2dea` [net] listbanned RPC and QT should show correct banned subnets (jnewbery)
- -- #10134 `314ebdf` [qa] Fixes segwit block relay test after inv-direct-fetch was disabled (sdaftuar)
- -- #10351 `3f57c55` removed unused code in INV message (Greg-Griffith)
- -- #10061 `ae78609` [net] Added SetSocketNoDelay() utility function (tjps)
- -- #10408 `28c6e8d` Net: Improvements to Tor control port parser (str4d)
- -- #10460 `5c63d66` Broadcast address every day, not 9 hours (sipa)
- -- #10471 `400fdd0` Denote functions CNode::GetRecvVersion() and CNode::GetRefCount() as const (pavlosantoniou)
- -- #10345 `67700b3` [P2P] Timeout for headers sync (sdaftuar)
- -- #10564 `8d9f45e` Return early in IsBanned (gmaxwell)
- -- #10587 `de8db47` Net: Fix resource leak in ReadBinaryFile(...) (practicalswift)
- -- #9549 `b33ca14` [net] Avoid possibility of NULL pointer dereference in MarkBlockAsInFlight(...) (practicalswift)
- -- #10446 `2772dc9` net: avoid extra dns query per seed (theuni)
- -- #10824 `9dd6a2b` Avoid unnecessary work in SetNetworkActive (promag)
- -- #10948 `df3a6f4` p2p: Hardcoded seeds update pre-0.15 branch (laanwj)
- -- #10977 `02f4c4a` [net] Fix use of uninitialized value in getnetworkinfo(const JSONRPCRequest&) (practicalswift)
- -- #10982 `c8b62c7` Disconnect network service bits 6 and 8 until Aug 1, 2018 (TheBlueMatt)
- -- #11012 `0e5cff6` Make sure to clean up mapBlockSource if we've already seen the block (theuni)
- -
- -### Validation
- -- #9725 `67023e9` CValidationInterface Cleanups (TheBlueMatt)
- -- #10178 `2584925` Remove CValidationInterface::UpdatedTransaction (TheBlueMatt)
- -- #10201 `a6548a4` pass Consensus::Params& to functions in validation.cpp and make them static (mariodian)
- -- #10297 `431a548` Simplify DisconnectBlock arguments/return value (sipa)
- -- #10464 `f94b7d5` Introduce static DoWarning (simplify UpdateTip) (jtimon)
- -- #10569 `2e7d8f8` Fix stopatheight (achow101)
- -- #10192 `2935b46` Cache full script execution results in addition to signatures (TheBlueMatt)
- -- #10179 `21ed30a` Give CValidationInterface Support for calling notifications on the CScheduler Thread (TheBlueMatt)
- -- #10557 `66270a4` Make check to distinguish between orphan txs and old txs more efficient (morcos)
- -- #10775 `7c2400c` nCheckDepth chain height fix (romanornr)
- -- #10821 `16240f4` Add SSE4 optimized SHA256 (sipa)
- -- #10854 `04d395e` Avoid using sizes on non-fixed-width types to derive protocol constants (gmaxwell)
- -- #10945 `2a50b11` Update defaultAssumeValid according to release-process.md (gmaxwell)
- -- #10986 `2361208` Update chain transaction statistics (sipa)
- -- #11028 `6bdf4b3` Avoid masking of difficulty adjustment errors by checkpoints (sipa)
- -- #9533 `cb598cf` Allow non-power-of-2 signature cache sizes (sipa)
- -- #9208 `acd9957` Improve DisconnectTip performance (sdaftuar)
- -- #10618 `f90603a` Remove confusing MAX_BLOCK_BASE_SIZE (gmaxwell)
- -- #10758 `bd92424` Fix some chainstate-init-order bugs (TheBlueMatt)
- -- #10550 `b7296bc` Don't return stale data from CCoinsViewCache::Cursor() (ryanofsky)
- -- #10998 `2507fd5` Fix upgrade cancel warnings (TheBlueMatt)
- -- #9868 `cbdb473` Abstract out the command line options for block assembly (sipa)
- -
- -### Build system
- -- #9727 `5f0556d` Remove fallbacks for boost_filesystem < v3 (laanwj)
- -- #9788 `50a2265` gitian: bump descriptors for master (theuni)
- -- #9794 `7ca2f54` Minor update to qrencode package builder (mitchellcash)
- -- #9514 `2cc0df1` release: Windows signing script (theuni)
- -- #9921 `8b789d8` build: Probe MSG_DONTWAIT in the same way as MSG_NOSIGNAL (laanwj)
- -- #10011 `32d1b34` build: Fix typo s/HAVE_DONTWAIT/HAVE_MSG_DONTWAIT (laanwj)
- -- #9946 `90dd9e6` Fix build errors if spaces in path or parent directory (pinheadmz)
- -- #10136 `81da4c7` build: Disable Wshadow warning (laanwj)
- -- #10166 `64962ae` Ignore Doxyfile generated from Doxyfile.in template (paveljanik)
- -- #10239 `0416ea9` Make Boost use std::atomic internally (sipa)
- -- #10228 `27faa6c` build: regenerate bitcoin-config.h as necessary (theuni)
- -- #10273 `8979f45` [scripts] Minor improvements to `macdeployqtplus` script (chrisgavin)
- -- #10325 `a26280b` 0.15.0 Depends Updates (fanquake)
- -- #10328 `79aeff6` Update contrib/debian to latest Ubuntu PPA upload (TheBlueMatt)
- -- #7522 `d25449f` Bugfix: Only use git for build info if the repository is actually the right one (luke-jr)
- -- #10489 `e654d61` build: silence gcc7's implicit fallthrough warning (theuni)
- -- #10549 `ad1a13e` Avoid printing generic and duplicated "checking for QT" during ./configure (drizzt)
- -- #10628 `8465b68` [depends] expat 2.2.1 (fanquake)
- -- #10806 `db825d2` build: verify that the assembler can handle crc32 functions (theuni)
- -- #10766 `b4d03be` Building Environment: Set ARFLAGS to cr (ReneNyffenegger)
- -- #10803 `91edda8` Explicitly search for bdb5.3 (pstratem)
- -- #10855 `81560b0` random: only use getentropy on openbsd (theuni)
- -- #10508 `1caafa6` Run Qt wallet tests on travis (ryanofsky)
- -- #10851 `e222618` depends: fix fontconfig with newer glibc (theuni)
- -- #10971 `88b1e4b` build: fix missing sse42 in depends builds (theuni)
- -- #11097 `129b03f` gitian: quick hack to fix version string in releases (theuni)
- -- #10039 `919aaf6` Fix compile errors with Qt 5.3.2 and Boost 1.55.0 (ryanofsky)
- -- #10168 `7032021` Fix build warning from #error text (jnewbery)
- -- #10301 `318392c` Check if sys/random.h is required for getentropy (jameshilliard)
- -
- -### GUI
- -- #9724 `1a9fd5c` Qt/Intro: Add explanation of IBD process (luke-jr)
- -- #9834 `b00ba62` qt: clean up initialize/shutdown signals (benma)
- -- #9481 `ce01e62` [Qt] Show more significant warning if we fall back to the default fee (jonasschnelli)
- -- #9974 `b9f930b` Add basic Qt wallet test (ryanofsky)
- -- #9690 `a387d3a` Change 'Clear' button string to 'Reset' (da2x)
- -- #9592 `9c7b7cf` [Qt] Add checkbox in the GUI to opt-in to RBF when creating a transaction (ryanofsky)
- -- #10098 `2b477e6` Make qt wallet test compatible with qt4 (ryanofsky)
- -- #9890 `1fa4ae6` Add a button to open the config file in a text editor (ericshawlinux)
- -- #10156 `51833a1` Fix for issues with startup and multiple monitors on windows (AllanDoensen)
- -- #10177 `de01da7` Changed "Send" button default status from true to false (KibbledJiveElkZoo)
- -- #10221 `e96486c` Stop treating coinbase outputs differently in GUI: show them at 1conf (TheBlueMatt)
- -- #10231 `987a6c0` [Qt] Reduce a significant cs_main lock freeze (jonasschnelli)
- -- #10242 `f6f3b58` [qt] Don't call method on null WalletModel object (ryanofsky)
- -- #10093 `a3e756b` [Qt] Don't add arguments of sensitive command to console window (jonasschnelli)
- -- #10362 `95546c8` [GUI] Add OSX keystroke to RPCConsole info (spencerlievens)
- -- #9697 `962cd3f` [Qt] simple fee bumper with user verification (jonasschnelli)
- -- #10390 `e477516` [wallet] remove minimum total fee option (instagibbs)
- -- #10420 `4314544` Add Qt tests for wallet spends & bumpfee (ryanofsky)
- -- #10454 `c1c9a95` Fix broken q4 test build (ryanofsky)
- -- #10449 `64beb13` Overhaul Qt fee bumper (jonasschnelli)
- -- #10582 `7c72fb9` Pass in smart fee slider value to coin control dialog (morcos)
- -- #10673 `4c72cc3` [qt] Avoid potential null pointer dereference in TransactionView::exportClicked() (practicalswift)
- -- #10769 `8fdd23a` [Qt] replace fee slider with a Dropdown, extend conf. targets (jonasschnelli)
- -- #10870 `412b466` [Qt] Use wallet 0 in rpc console if running with multiple wallets (jonasschnelli)
- -- #10988 `a9dd111` qt: Increase BLOCK_CHAIN_SIZE constants (laanwj)
- -- #10644 `e292140` Slightly overhaul NSI pixmaps (jonasschnelli)
- -- #10660 `0c3542e` Allow to cancel the txdb upgrade via splashscreen keypress 'q' (jonasschnelli)
- -
- -### Wallet
- -- #9359 `f7ec7cf` Add test for CWalletTx::GetImmatureCredit() returning stale values (ryanofsky)
- -- #9576 `56ab672` [wallet] Remove redundant initialization (practicalswift)
- -- #9333 `fa625b0` Document CWalletTx::mapValue entries and remove erase of nonexistent "version" entry (ryanofsky)
- -- #9906 `72fb515` Disallow copy constructor CReserveKeys (instagibbs)
- -- #9369 `3178b2c` Factor out CWallet::nTimeSmart computation into a method (ryanofsky)
- -- #9830 `afcd7c0` Add safe flag to listunspent result (NicolasDorier)
- -- #9993 `c49355c` Initialize nRelockTime (pstratem)
- -- #9818 `3d857f3` Save watch only key timestamps when reimporting keys (ryanofsky)
- -- #9294 `f34cdcb` Use internal HD chain for change outputs (hd split) (jonasschnelli)
- -- #10164 `e183ea2` Wallet: reduce excess logic InMempool() (kewde)
- -- #10186 `c9ff4f8` Remove SYNC_TRANSACTION_NOT_IN_BLOCK magic number (jnewbery)
- -- #10226 `64c45aa` wallet: Use boost to more portably ensure -wallet specifies only a filename (luke-jr)
- -- #9827 `c91ca0a` Improve ScanForWalletTransactions return value (ryanofsky)
- -- #9951 `fa1ac28` Wallet database handling abstractions/simplifications (laanwj)
- -- #10265 `c29a0d4` [wallet] [moveonly] Check non-null pindex before potentially referencing (kallewoof)
- -- #10283 `a550f6e` Cleanup: reduce to one GetMinimumFee call signature (morcos)
- -- #10294 `e2b99b1` [Wallet] unset change position when there is no change (instagibbs)
- -- #10115 `d3dce0e` Avoid reading the old hd master key during wallet encryption (TheBlueMatt)
- -- #10341 `18c9deb` rpc/wallet: Workaround older UniValue which returns a std::string temporary for get_str (luke-jr)
- -- #10308 `94e5227` [wallet] Securely erase potentially sensitive keys/values (tjps)
- -- #10257 `ea1fd43` [test] Add test for getmemoryinfo (jimmysong)
- -- #10295 `ce8176d` [qt] Move some WalletModel functions into CWallet (ryanofsky)
- -- #10506 `7cc2c67` Fix bumpfee test after #10449 (ryanofsky)
- -- #10500 `098b01d` Avoid CWalletTx copies in GetAddressBalances and GetAddressGroupings (ryanofsky)
- -- #10455 `0747d33` Simplify feebumper minimum fee code slightly (ryanofsky)
- -- #10522 `2805d60` [wallet] Remove unused variables (practicalswift)
- -- #8694 `177433a` Basic multiwallet support (luke-jr)
- -- #10598 `7a74f88` Supress struct/class mismatch warnings introduced in #10284 (paveljanik)
- -- #9343 `209eef6` Don't create change at dust limit (morcos)
- -- #10744 `ed88e31` Use method name via __func__ macro (darksh1ne)
- -- #10712 `e8b9523` Add change output if necessary to reduce excess fee (morcos)
- -- #10816 `1c011ff` Properly forbid -salvagewallet and -zapwallettxes for multi wallet (morcos)
- -- #10235 `5cfdda2` Track keypool entries as internal vs external in memory (TheBlueMatt)
- -- #10330 `bf0a08b` [wallet] fix zapwallettxes interaction with persistent mempool (jnewbery)
- -- #10831 `0b01935` Batch flushing operations to the walletdb during top up and increase keypool size (gmaxwell)
- -- #10795 `7b6e8bc` No longer ever reuse keypool indexes (TheBlueMatt)
- -- #10849 `bde4f93` Multiwallet: simplest endpoint support (jonasschnelli)
- -- #10817 `9022aa3` Redefine Dust and add a discard_rate (morcos)
- -- #10883 `bf3b742` Rename -usewallet to -rpcwallet (morcos)
- -- #10604 `420238d` [wallet] [tests] Add listwallets RPC, include wallet name in `getwalletinfo` and add multiwallet test (jnewbery)
- -- #10885 `70888a3` Reject invalid wallets (promag)
- -- #10949 `af56397` Clarify help message for -discardfee (morcos)
- -- #10942 `2e857bb` Eliminate fee overpaying edge case when subtracting fee from recipients (morcos)
- -- #10995 `fa64636` Fix resendwallettransactions assert failure if -walletbroadcast=0 (TheBlueMatt)
- -- #11022 `653a46d` Basic keypool topup (jnewbery)
- -- #11081 `9fe1f6b` Add length check for CExtKey deserialization (jonasschnelli, guidovranken)
- -- #11044 `4ef8374` [wallet] Keypool topup cleanups (jnewbery)
- -- #11145 `e51bb71` Fix rounding bug in calculation of minimum change (morcos)
- -- #9605 `779f2f9` Use CScheduler for wallet flushing, remove ThreadFlushWalletDB (TheBlueMatt)
- -- #10108 `4e3efd4` ApproximateBestSubset should take inputs by reference, not value (RHavar)
- -
- -### Tests and QA
- -- #9744 `8efd1c8` Remove unused module from rpc-tests (34ro)
- -- #9657 `7ff4a53` Improve rpc-tests.py (jnewbery)
- -- #9766 `7146d96` Add --exclude option to rpc-tests.py (jnewbery)
- -- #9577 `d6064a8` Fix docstrings in qa tests (jnewbery)
- -- #9823 `a13a417` qa: Set correct path for binaries in rpc tests (MarcoFalke)
- -- #9847 `6206252` Extra test vector for BIP32 (sipa)
- -- #9350 `88c2ae3` [Trivial] Adding label for amount inside of tx_valid/tx_invalid.json (Christewart)
- -- #9888 `36afd4d` travis: Verify commits only for one target (MarcoFalke)
- -- #9904 `58861ad` test: Fail if InitBlockIndex fails (laanwj)
- -- #9828 `67c5cc1` Avoid -Wshadow warnings in wallet_tests (ryanofsky)
- -- #9832 `48c3429` [qa] assert_start_raises_init_error (NicolasDorier)
- -- #9739 `9d5fcbf` Fix BIP68 activation test (jnewbery)
- -- #9547 `d32581c` bench: Assert that division by zero is unreachable (practicalswift)
- -- #9843 `c78adbf` Fix segwit getblocktemplate test (jnewbery)
- -- #9929 `d5ce14e` tests: Delete unused function _rpchost_to_args (laanwj)
- -- #9555 `19be26a` [test] Avoid reading a potentially uninitialized variable in tx_invalid-test (transaction_tests.cpp) (practicalswift)
- -- #9945 `ac23a7c` Improve logging in bctest.py if there is a formatting mismatch (jnewbery)
- -- #9768 `8910b47` [qa] Add logging to test_framework.py (jnewbery)
- -- #9972 `21833f9` Fix extended rpc tests broken by #9768 (jnewbery)
- -- #9977 `857d1e1` QA: getblocktemplate_longpoll.py should always use >0 fee tx (sdaftuar)
- -- #9970 `3cc13ea` Improve readability of segwit.py, smartfees.py (sdaftuar)
- -- #9497 `2c781fb` CCheckQueue Unit Tests (JeremyRubin)
- -- #10024 `9225de2` [trivial] Use log.info() instead of print() in remaining functional test cases (jnewbery)
- -- #9956 `3192e52` Reorganise qa directory (jnewbery)
- -- #10017 `02d64bd` combine_logs.py - aggregates log files from multiple bitcoinds during functional tests (jnewbery)
- -- #10047 `dfef6b6` [tests] Remove unused variables and imports (practicalswift)
- -- #9701 `a230b05` Make bumpfee tests less fragile (ryanofsky)
- -- #10053 `ca20923` [test] Allow functional test cases to be skipped (jnewbery)
- -- #10052 `a0b1e57` [test] Run extended tests once daily in Travis (jnewbery)
- -- #10069 `1118493` [QA] Fix typo in fundrawtransaction test (NicolasDorier)
- -- #10083 `c044f03` [QA] Renaming rawTx into rawtx (NicolasDorier)
- -- #10073 `b1a4f27` Actually run assumevalid.py (jnewbery)
- -- #9780 `c412fd8` Suppress noisy output from qa tests in Travis (jnewbery)
- -- #10096 `79af9fb` Check that all test scripts in test/functional are being run (jnewbery)
- -- #10076 `5b029aa` [qa] combine_logs: Use ordered list for logfiles (MarcoFalke)
- -- #10107 `f2734c2` Remove unused variable. Remove accidental trailing semicolons in Python code (practicalswift)
- -- #10109 `8ac8041` Remove SingleNodeConnCB (jnewbery)
- -- #10114 `edc62c9` [tests] sync_with_ping should assert that ping hasn't timed out (jnewbery)
- -- #10128 `427d2fd` Speed Up CuckooCache tests (JeremyRubin)
- -- #10072 `12af74b` Remove sources of unreliablility in extended functional tests (jnewbery)
- -- #10077 `ebfd653` [qa] Add setnetworkactive smoke test (MarcoFalke)
- -- #10152 `080d7c7` [trivial] remove unused line in Travis config (jnewbery)
- -- #10159 `df1ca9e` [tests] color test results and sort alphabetically (jnewbery)
- -- #10124 `88799ea` [test] Suppress test logging spam (jnewbery)
- -- #10142 `ed09dd3` Run bitcoin_test-qt under minimal QPA platform (ryanofsky)
- -- #9949 `a27dbc5` [bench] Avoid function call arguments which are pointers to uninitialized values (practicalswift)
- -- #10187 `b44adf9` tests: Fix test_runner return value in case of skipped test (laanwj)
- -- #10197 `d86bb07` [tests] Functional test warnings (jnewbery)
- -- #10219 `9111df9` Tests: Order Python Tests Differently (jimmysong)
- -- #10229 `f3db4c6` Tests: Add test for getdifficulty (jimmysong)
- -- #10224 `2723bcd` [test] Add test for getaddednodeinfo (jimmysong)
- -- #10023 `c530c15` [tests] remove maxblocksinflight.py (functionality covered by other test) (jnewbery)
- -- #10097 `1b25b6d` Move zmq test skipping logic into individual test case (jnewbery)
- -- #10272 `54e2d87` [Tests] Prevent warning: variable 'x' is uninitialized (paveljanik)
- -- #10225 `e0a7e19` [test] Add aborttrescan tests (kallewoof)
- -- #10278 `8254a8a` [test] Add Unit Test for GetListenPort (jimmysong)
- -- #10280 `47535d7` [test] Unit test amount.h/amount.cpp (jimmysong)
- -- #10256 `80c3a73` [test] Add test for gettxout to wallet.py (jimmysong)
- -- #10264 `492d22f` [test] Add tests for getconnectioncount, getnettotals and ping (jimmysong)
- -- #10169 `8f3e384` [tests] Remove func test code duplication (jnewbery)
- -- #10198 `dc8fc0c` [tests] Remove is_network_split from functional test framework (jnewbery)
- -- #10255 `3c5e6c9` [test] Add test for listaddressgroupings (jimmysong)
- -- #10137 `75171f0` Remove unused import. Remove accidental trailing semicolons (practicalswift)
- -- #10307 `83073de` [tests] allow zmq test to be run in out-of-tree builds (jnewbery)
- -- #10344 `e927483` [tests] Fix abandonconflict.py intermittency (jnewbery)
- -- #10318 `170bc2c` [tests] fix wait_for_inv() (jnewbery)
- -- #10171 `fff72de` [tests] Add node methods to test framework (jnewbery)
- -- #10352 `23d78c4` test: Add elapsed time to RPC tracing (laanwj)
- -- #10342 `6a796b2` [tests] Improve mempool_persist test (jnewbery)
- -- #10287 `776ba23` [tests] Update Unit Test for addrman.h/addrman.cpp (jimmysong)
- -- #10365 `7ee5236` [tests] increase timeouts in sendheaders test (jnewbery)
- -- #10361 `f6241b3` qa: disablewallet: Check that wallet is really disabled (MarcoFalke)
- -- #10371 `4b766fc` [tests] Clean up addrman_tests.cpp (jimmysong)
- -- #10253 `87abe20` [test] Add test for getnetworkhashps (jimmysong)
- -- #10376 `8bd16ee` [tests] fix disconnect_ban intermittency (jnewbery)
- -- #10374 `5411997` qa: Warn when specified test is not found (MarcoFalke)
- -- #10405 `0542978` tests: Correct testcase in script_tests.json for large number OP_EQUAL (laanwj)
- -- #10429 `6b99daf` tests: fix spurious addrman test failure (theuni)
- -- #10433 `8e57256` [tests] improve tmpdir structure (jnewbery)
- -- #10415 `217b416` [tests] Speed up fuzzing by ~200x when using afl-fuzz (practicalswift)
- -- #10445 `b4b057a` Add test for empty chain and reorg consistency for gettxoutsetinfo (gmaxwell)
- -- #10423 `1aefc94` [tests] skipped tests should clean up after themselves (jnewbery)
- -- #10359 `329fc1d` [tests] functional tests should call BitcoinTestFramework start/stop node methods (jnewbery)
- -- #10514 `e103b3f` Bugfix: missing == 0 after randrange (sipa)
- -- #10515 `c871f32` [test] Add test for getchaintxstats (jimmysong)
- -- #10509 `bea5b00` Remove xvfb configuration from travis (ryanofsky)
- -- #10535 `30853e1` [qa] fundrawtx: Fix shutdown race (MarcoFalke)
- -- #9909 `300f8e7` tests: Add FindEarliestAtLeast test for edge cases (ryanofsky)
- -- #10331 `75e898c` Share config between util and functional tests (jnewbery)
- -- #10321 `e801084` Use FastRandomContext for all tests (sipa)
- -- #10524 `6c2d81f` [tests] Remove printf(...) (practicalswift)
- -- #10547 `71ab6e5` [tests] Use FastRandomContext instead of boost::random::{mt19937,uniform_int_distribution} (practicalswift)
- -- #10551 `6702617` [Tests] Wallet encryption functional tests (achow101)
- -- #10555 `643fa0b` [tests] various improvements to zmq_test.py (jnewbery)
- -- #10533 `d083bd9` [tests] Use cookie auth instead of rpcuser and rpcpassword (achow101)
- -- #10632 `c68a9a6` qa: Add stopatheight test (MarcoFalke)
- -- #10636 `4bc853b` [qa] util: Check return code after closing bitcoind proc (MarcoFalke)
- -- #10662 `e0a7801` Initialize randomness in benchmarks (achow101)
- -- #10612 `7c87a9c` The young person's guide to the test_framework (jnewbery)
- -- #10659 `acb1153` [qa] blockchain: Pass on closed connection during generate call (MarcoFalke)
- -- #10690 `416af3e` [qa] Bugfix: allow overriding extra_args in ComparisonTestFramework (sdaftuar)
- -- #10556 `65cc7aa` Move stop/start functions from utils.py into BitcoinTestFramework (jnewbery)
- -- #10704 `dd07f47` [tests] nits in dbcrash.py (jnewbery)
- -- #10743 `be82498` [test] don't run dbcrash.py on Travis (jnewbery)
- -- #10761 `d3b5870` [tests] fix replace_by_fee.py (jnewbery)
- -- #10759 `1d4805c` Fix multi_rpc test for hosts that dont default to utf8 (TheBlueMatt)
- -- #10190 `e4f226a` [tests] mining functional tests (including regression test for submitblock) (jnewbery)
- -- #10739 `1fc783f` test: Move variable `state` down where it is used (paveljanik)
- -- #9980 `fee0d80` Fix mem access violation merkleblock (Christewart)
- -- #10893 `0c173a1` [QA] Avoid running multiwallet.py twice (jonasschnelli)
- -- #10927 `9d5e8f9` test: Make sure wallet.backup is created in temp path (laanwj)
- -- #10899 `f29d5db` [test] Qt: Use _putenv_s instead of setenv on Windows builds (brianmcmichael)
- -- #10912 `5c8eb79` [tests] Fix incorrect memory_cleanse(?) call in crypto_tests.cpp (practicalswift)
- -- #11001 `fa8a063` [tests] Test disconnecting unsupported service bits logic (jnewbery)
- -- #10695 `929fd72` [qa] Rewrite BIP65/BIP66 functional tests (sdaftuar)
- -- #10963 `ecd2135` [bench] Restore format state of cout after printing with std::fixed/setprecision (practicalswift)
- -- #11025 `e5d26e4` qa: Fix inv race in example_test (MarcoFalke)
- -- #10765 `2c811e0` Tests: address placement should be deterministic by default (ReneNyffenegger)
- -- #11000 `ac016e1` test: Add resendwallettransactions functional tests (promag)
- -- #11032 `aeb3175` [qa] Fix block message processing error in sendheaders.py (sdaftuar)
- -- #10105 `0b9fb68` [tests] fixup - make all Travis test runs quiet, non just cron job runs (jnewbery)
- -- #10222 `6ce7337` [tests] test_runner - check unicode (jnewbery)
- -- #10327 `35da2ae` [tests] remove import-abort-rescan.py (jnewbery)
- -- #11023 `bf74d37` [tests] Add option to attach a python debugger if functional test fails (jnewbery)
- -- #10565 `8c2098a` [coverage] Remove subtrees and benchmarks from coverage report (achow101)
- -
- -### Miscellaneous
- -- #9871 `be8ba2c` Add a tree sha512 hash to merge commits (sipa)
- -- #9821 `d19d45a` util: Specific GetOSRandom for Linux/FreeBSD/OpenBSD (laanwj)
- -- #9903 `ba80a68` Docs: add details to -rpcclienttimeout doc (ian-kelling)
- -- #9910 `53c300f` Docs: correct and elaborate -rpcbind doc (ian-kelling)
- -- #9905 `01b7cda` [contrib] gh-merge: Move second sha512 check to the end (MarcoFalke)
- -- #9880 `4df8213` Verify Tree-SHA512s in merge commits, enforce sigs are not SHA1 (TheBlueMatt)
- -- #9932 `00c13ea` Fix verify-commits on travis and always check top commit's tree (TheBlueMatt)
- -- #9952 `6996e06` Add historical release notes for 0.14.0 (laanwj)
- -- #9940 `fa99663` Fix verify-commits on OSX, update for new bad Tree-SHA512, point travis to different keyservers (TheBlueMatt)
- -- #9963 `8040ae6` util: Properly handle errors during log message formatting (laanwj)
- -- #9984 `cce056d` devtools: Make github-merge compute SHA512 from git, instead of worktree (laanwj)
- -- #9995 `8bcf934` [doc] clarify blockchain size and pruning (askmike)
- -- #9734 `0c17afc` Add updating of chainTxData to release process (sipa)
- -- #10063 `530fcbd` add missing spaces so that markdown recognizes headline (flack)
- -- #10085 `db1ae54` Docs: remove 'noconnect' option (jlopp)
- -- #10090 `8e4f7e7` Update bitcoin.conf with example for pruning (coinables)
- -- #9424 `1a5aaab` Change LogAcceptCategory to use uint32_t rather than sets of strings (gmaxwell)
- -- #10036 `fbf36ca` Fix init README format to render correctly on github (jlopp)
- -- #10058 `a2cd0b0` No need to use OpenSSL malloc/free (tjps)
- -- #10123 `471ed00` Allow debug logs to be excluded from specified component (jnewbery)
- -- #10104 `fadf078` linearize script: Option to use RPC cookie (achow101)
- -- #10162 `a3a2160` [trivial] Log calls to getblocktemplate (jnewbery)
- -- #10155 `928695b` build: Deduplicate version numbers (laanwj)
- -- #10211 `a86255b` [doc] Contributor fixes & new "finding reviewers" section (kallewoof)
- -- #10250 `1428f30` Fix some empty vector references (sipa)
- -- #10270 `95f5e44` Remove Clang workaround for Boost 1.46 (fanquake)
- -- #10263 `cb007e4` Trivial: fix fee estimate write error log message (CryptAxe)
- -- #9670 `bd9ec0e` contrib: github-merge improvements (laanwj)
- -- #10260 `1d75597` [doc] Minor corrections to osx dependencies (fanquake)
- -- #10189 `750c5a5` devtools/net: add a verifier for scriptable changes. Use it to make CNode::id private (theuni)
- -- #10322 `bc64b5a` Use hardware timestamps in RNG seeding (sipa)
- -- #10381 `7f2b9e0` Shadowing warnings are not enabled by default, update doc accordingly (paveljanik)
- -- #10380 `b6ee855` [doc] Removing comments about dirty entries on txmempool (madeo)
- -- #10383 `d0c37ee` [logging] log system time and mock time (jnewbery)
- -- #10404 `b45a52a` doc: Add logging to FinalizeNode() (sdaftuar)
- -- #10388 `526e839` Output line to debug.log when IsInitialBlockDownload latches to false (morcos)
- -- #10372 `15254e9` Add perf counter data to GetStrongRandBytes state in scheduler (TheBlueMatt)
- -- #10461 `55b72f3` Update style guide (sipa)
- -- #10486 `10e8c0a` devtools: Retry after signing fails in github-merge (laanwj)
- -- #10447 `f259263` Make bitcoind invalid argument error message specific (laanwj)
- -- #10495 `6a38b79` contrib: Update location of seeds.txt (laanwj)
- -- #10469 `b6b150b` Fixing typo in rpcdump.cpp help message (keystrike)
- -- #10451 `27b9931` contrib/init/bitcoind.openrcconf: Don't disable wallet by default (luke-jr)
- -- #10323 `00d3692` Update to latest libsecp256k1 master (sipa)
- -- #10422 `cec9e1e` Fix timestamp in fee estimate debug message (morcos)
- -- #10566 `5d034ee` [docs] Use the "domain name setup" image (previously unused) in the gitian docs (practicalswift)
- -- #10534 `a514ac3` Clarify prevector::erase and avoid swap-to-clear (sipa)
- -- #10575 `22ec768` Header include guideline (sipa)
- -- #10480 `fbf5d3b` Improve commit-check-script.sh (sipa)
- -- #10502 `1ad3d4e` scripted-diff: Remove BOOST_FOREACH, Q_FOREACH and PAIRTYPE (jtimon)
- -- #10377 `b63be2c` Use rdrand as entropy source on supported platforms (sipa)
- -- #9895 `228c319` Turn TryCreateDirectory() into TryCreateDirectories() (benma)
- -- #10602 `d76e84a` Make clang-format use C++11 features (e.g. A<A<int>> instead of A<A<int> >) (practicalswift)
- -- #10623 `c38f540` doc: Add 0.14.2 release notes (MarcoFalke)
- -- #10276 `b750b33` contrib/verifybinaries: allow filtering by platform (knocte)
- -- #10248 `01c4b14` Rewrite addrdb with less duplication using CHashVerifier (sipa)
- -- #10577 `232508f` Add an explanation of quickly hashing onto a non-power of two range (gmaxwell)
- -- #10608 `eee398f` Add a comment explaining the use of MAX_BLOCK_BASE_SIZE (gmaxwell)
- -- #10728 `7397af9` fix typo in help text for removeprunedfunds (AkioNak)
- -- #10193 `6dbcc74` scripted-diff: Remove #include <boost/foreach.hpp> (jtimon)
- -- #10676 `379aed0` document script-based return fields for validateaddress (instagibbs)
- -- #10651 `cef4b5c` Verify binaries from bitcoincore.org and bitcoin.org (TheBlueMatt)
- -- #10786 `ca4c545` Add PR description to merge commit in github-merge.py (sipa)
- -- #10812 `c5904e8` [utils] Allow bitcoin-cli's -rpcconnect option to be used with square brackets (jnewbery)
- -- #10842 `3895e25` Fix incorrect Doxygen tag (@ince ? @since). Doxygen parameter name matching (practicalswift)
- -- #10681 `df0793f` add gdb attach process to test README (instagibbs)
- -- #10789 `1124328` Punctuation/grammer fixes in rpcwallet.cpp (stevendlander)
- -- #10655 `78f307b` Properly document target_confirmations in listsinceblock (RHavar)
- -- #10917 `5c003cb` developer-notes: add reference to snake_case and PascalCase (benma)
- -- #11003 `4b5a7ce` Docs: Capitalize bullet points in CONTRIBUTING guide (eklitzke)
- -- #10968 `98aa3f6` Add instructions for parallel gitian builds (coblee)
- -- #11076 `1c4b9b3` 0.15 release-notes nits: fix redundancy, remove accidental parenthesis & fix range style (practicalswift)
- -- #11090 `8f0121c` Update contributor names in release-notes.md (Derek701)
- -- #11056 `cbdd338` disable jni in builds (instagibbs)
- -- #11080 `2b59cfb` doc: Update build-openbsd for 6.1 (laanwj)
- -- #11119 `0a6af47` [doc] build-windows: Mention that only trusty works (MarcoFalke)
- -- #11108 `e8ad101` Changing -txindex requires -reindex, not -reindex-chainstate (TheBlueMatt)
- -- #9792 `342b9bc` FastRandomContext improvements and switch to ChaCha20 (sipa)
- -- #9505 `67ed40e` Prevector Quick Destruct (JeremyRubin)
- -- #10820 `ef37f20` Use cpuid intrinsics instead of asm code (sipa)
- -- #9999 `a328904` [LevelDB] Plug leveldb logs to bitcoin logs (NicolasDorier)
- -- #9693 `c5e9e42` Prevent integer overflow in ReadVarInt (gmaxwell)
- -- #10129 `351d0ad` scheduler: fix sub-second precision with boost < 1.50 (theuni)
- -- #10153 `fade788` logging: Fix off-by-one for shrinkdebugfile default (MarcoFalke)
- -- #10305 `c45da32` Fix potential NPD introduced in b297426c (TheBlueMatt)
- -- #10338 `daf3e7d` Maintain state across GetStrongRandBytes calls (sipa)
- -- #10544 `a4fe077` Update to LevelDB 1.20 (sipa)
- -- #10614 `cafe24f` random: fix crash on some 64bit platforms (theuni)
- -- #10714 `2a09a38` Avoid printing incorrect block indexing time due to uninitialized variable (practicalswift)
- -- #10837 `8bc6d1f` Fix resource leak on error in GetDevURandom (corebob)
- -- #10832 `89bb036` init: Factor out AppInitLockDataDirectory and fix startup core dump issue (laanwj)
- -- #10914 `b995a37` Add missing lock in CScheduler::AreThreadsServicingQueue() (TheBlueMatt)
- -- #10958 `659c096` Update to latest Bitcoin patches for LevelDB (sipa)
- -- #10919 `c1c671f` Fix more init bugs (TheBlueMatt)
- -
- -Credits
- -=======
- -
- -Thanks to everyone who directly contributed to this release:
- -
- -- ??? ??
- -- Ahmad Kazi
- -- aideca
- -- Akio Nakamura
- -- Alex Morcos
- -- Allan Doensen
- -- Andres G. Aragoneses
- -- Andrew Chow
- -- Angel Leon
- -- Awemany
- -- Bob McElrath
- -- Brian McMichael
- -- BtcDrak
- -- Charlie Lee
- -- Chris Gavin
- -- Chris Stewart
- -- Cory Fields
- -- CryptAxe
- -- Dag Robole
- -- Daniel Aleksandersen
- -- Daniel Cousens
- -- darksh1ne
- -- Dimitris Tsapakidis
- -- Eric Shaw
- -- Evan Klitzke
- -- fanquake
- -- Felix Weis
- -- flack
- -- Guido Vranken
- -- Greg Griffith
- -- Gregory Maxwell
- -- Gregory Sanders
- -- Ian Kelling
- -- Jack Grigg
- -- James Evans
- -- James Hilliard
- -- Jameson Lopp
- -- Jeremy Rubin
- -- Jimmy Song
- -- João Barbosa
- -- Johnathan Corgan
- -- John Newbery
- -- Jonas Schnelli
- -- Jorge Timón
- -- Karl-Johan Alm
- -- kewde
- -- KibbledJiveElkZoo
- -- Kirit Thadaka
- -- kobake
- -- Kyle Honeycutt
- -- Lawrence Nahum
- -- Luke Dashjr
- -- Marco Falke
- -- Marcos Mayorga
- -- Marijn Stollenga
- -- Mario Dian
- -- Mark Friedenbach
- -- Marko Bencun
- -- Masahiko Hyuga
- -- Matt Corallo
- -- Matthew Zipkin
- -- Matthias Grundmann
- -- Michael Goldstein
- -- Michael Rotarius
- -- Mikerah
- -- Mike van Rossum
- -- Mitchell Cash
- -- Nicolas Dorier
- -- Patrick Strateman
- -- Pavel Janík
- -- Pavlos Antoniou
- -- Pavol Rusnak
- -- Pedro Branco
- -- Peter Todd
- -- Pieter Wuille
- -- practicalswift
- -- René Nyffenegger
- -- Ricardo Velhote
- -- romanornr
- -- Russell Yanofsky
- -- Rusty Russell
- -- Ryan Havar
- -- shaolinfry
- -- Shigeya Suzuki
- -- Simone Madeo
- -- Spencer Lievens
- -- Steven D. Lander
- -- Suhas Daftuar
- -- Takashi Mitsuta
- -- Thomas Snider
- -- Timothy Redaelli
- -- tintinweb
- -- tnaka
- -- Warren Togami
- -- Wladimir J. van der Laan
- -
- -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
- diff --git a/doc/release-process.md b/doc/release-process.md
- index 41e66f6..049dbb0 100644
- --- a/doc/release-process.md
- +++ b/doc/release-process.md
- @@ -5,7 +5,7 @@ Before every release candidate:
- * Update translations (ping wumpus on IRC) see [translation_process.md](https://github.com/bitcoin/bitcoin/blob/master/doc/translation_process.md#synchronising-translations).
- -* Update manpages, see [gen-manpages.sh](https://github.com/litecoin-project/litecoin/blob/master/contrib/devtools/README.md#gen-manpagessh).
- +* Update manpages, see [gen-manpages.sh](https://github.com/litecoincash-project/litecoincash/blob/master/contrib/devtools/README.md#gen-manpagessh).
- Before every minor and major release:
- @@ -33,12 +33,12 @@ If you're using the automated script (found in [contrib/gitian-build.sh](/contri
- Check out the source code in the following directory hierarchy.
- cd /path/to/your/toplevel/build
- - git clone https://github.com/litecoin-project/gitian.sigs.ltc.git
- - git clone https://github.com/litecoin-project/litecoin-detached-sigs.git
- + git clone https://github.com/litecoincash-project/gitian.sigs.lch.git
- + git clone https://github.com/litecoincash-project/litecoincash-detached-sigs.git
- git clone https://github.com/devrandom/gitian-builder.git
- - git clone https://github.com/litecoin-project/litecoin.git
- + git clone https://github.com/litecoincash-project/litecoincash.git
- -### Litecoin maintainers/release engineers, suggestion for writing release notes
- +### LitecoinCash maintainers/release engineers, suggestion for writing release notes
- Write release notes. git shortlog helps a lot, for example:
- @@ -61,16 +61,16 @@ If you're using the automated script (found in [contrib/gitian-build.sh](/contri
- Setup Gitian descriptors:
- - pushd ./litecoin
- + pushd ./litecoincash
- export SIGNER=(your Gitian key, ie bluematt, sipa, etc)
- export VERSION=(new version, e.g. 0.8.0)
- git fetch
- git checkout v${VERSION}
- popd
- -Ensure your gitian.sigs.ltc are up-to-date if you wish to gverify your builds against other Gitian signatures.
- +Ensure your gitian.sigs.lch are up-to-date if you wish to gverify your builds against other Gitian signatures.
- - pushd ./gitian.sigs.ltc
- + pushd ./gitian.sigs.lch
- git pull
- popd
- @@ -95,7 +95,7 @@ Create the OS X SDK tarball, see the [OS X readme](README_osx.md) for details, a
- By default, Gitian will fetch source files as needed. To cache them ahead of time:
- pushd ./gitian-builder
- - make -C ../litecoin/depends download SOURCES_PATH=`pwd`/cache/common
- + make -C ../litecoincash/depends download SOURCES_PATH=`pwd`/cache/common
- popd
- Only missing files will be fetched, so this is safe to re-run for each build.
- @@ -103,62 +103,62 @@ Only missing files will be fetched, so this is safe to re-run for each build.
- NOTE: Offline builds must use the --url flag to ensure Gitian fetches only from local URLs. For example:
- pushd ./gitian-builder
- - ./bin/gbuild --url litecoin=/path/to/litecoin,signature=/path/to/sigs {rest of arguments}
- + ./bin/gbuild --url litecoincash=/path/to/litecoincash,signature=/path/to/sigs {rest of arguments}
- popd
- The gbuild invocations below <b>DO NOT DO THIS</b> by default.
- -### Build and sign Litecoin Core for Linux, Windows, and OS X:
- +### Build and sign LitecoinCash Core for Linux, Windows, and OS X:
- pushd ./gitian-builder
- - ./bin/gbuild --num-make 2 --memory 3000 --commit litecoin=v${VERSION} ../litecoin/contrib/gitian-descriptors/gitian-linux.yml
- - ./bin/gsign --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-linux.yml
- - mv build/out/litecoin-*.tar.gz build/out/src/litecoin-*.tar.gz ../
- -
- - ./bin/gbuild --num-make 2 --memory 3000 --commit litecoin=v${VERSION} ../litecoin/contrib/gitian-descriptors/gitian-win.yml
- - ./bin/gsign --signer $SIGNER --release ${VERSION}-win-unsigned --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-win.yml
- - mv build/out/litecoin-*-win-unsigned.tar.gz inputs/litecoin-win-unsigned.tar.gz
- - mv build/out/litecoin-*.zip build/out/litecoin-*.exe ../
- -
- - ./bin/gbuild --num-make 2 --memory 3000 --commit litecoin=v${VERSION} ../litecoin/contrib/gitian-descriptors/gitian-osx.yml
- - ./bin/gsign --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-osx.yml
- - mv build/out/litecoin-*-osx-unsigned.tar.gz inputs/litecoin-osx-unsigned.tar.gz
- - mv build/out/litecoin-*.tar.gz build/out/litecoin-*.dmg ../
- + ./bin/gbuild --num-make 2 --memory 3000 --commit litecoincash=v${VERSION} ../litecoincash/contrib/gitian-descriptors/gitian-linux.yml
- + ./bin/gsign --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-linux.yml
- + mv build/out/litecoincash-*.tar.gz build/out/src/litecoincash-*.tar.gz ../
- +
- + ./bin/gbuild --num-make 2 --memory 3000 --commit litecoincash=v${VERSION} ../litecoincash/contrib/gitian-descriptors/gitian-win.yml
- + ./bin/gsign --signer $SIGNER --release ${VERSION}-win-unsigned --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-win.yml
- + mv build/out/litecoincash-*-win-unsigned.tar.gz inputs/litecoincash-win-unsigned.tar.gz
- + mv build/out/litecoincash-*.zip build/out/litecoincash-*.exe ../
- +
- + ./bin/gbuild --num-make 2 --memory 3000 --commit litecoincash=v${VERSION} ../litecoincash/contrib/gitian-descriptors/gitian-osx.yml
- + ./bin/gsign --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-osx.yml
- + mv build/out/litecoincash-*-osx-unsigned.tar.gz inputs/litecoincash-osx-unsigned.tar.gz
- + mv build/out/litecoincash-*.tar.gz build/out/litecoincash-*.dmg ../
- popd
- Build output expected:
- - 1. source tarball (`litecoin-${VERSION}.tar.gz`)
- - 2. linux 32-bit and 64-bit dist tarballs (`litecoin-${VERSION}-linux[32|64].tar.gz`)
- - 3. windows 32-bit and 64-bit unsigned installers and dist zips (`litecoin-${VERSION}-win[32|64]-setup-unsigned.exe`, `litecoin-${VERSION}-win[32|64].zip`)
- - 4. OS X unsigned installer and dist tarball (`litecoin-${VERSION}-osx-unsigned.dmg`, `litecoin-${VERSION}-osx64.tar.gz`)
- - 5. Gitian signatures (in `gitian.sigs.ltc/${VERSION}-<linux|{win,osx}-unsigned>/(your Gitian key)/`)
- + 1. source tarball (`litecoincash-${VERSION}.tar.gz`)
- + 2. linux 32-bit and 64-bit dist tarballs (`litecoincash-${VERSION}-linux[32|64].tar.gz`)
- + 3. windows 32-bit and 64-bit unsigned installers and dist zips (`litecoincash-${VERSION}-win[32|64]-setup-unsigned.exe`, `litecoincash-${VERSION}-win[32|64].zip`)
- + 4. OS X unsigned installer and dist tarball (`litecoincash-${VERSION}-osx-unsigned.dmg`, `litecoincash-${VERSION}-osx64.tar.gz`)
- + 5. Gitian signatures (in `gitian.sigs.lch/${VERSION}-<linux|{win,osx}-unsigned>/(your Gitian key)/`)
- ### Verify other gitian builders signatures to your own. (Optional)
- Add other gitian builders keys to your gpg keyring, and/or refresh keys.
- - gpg --import litecoin/contrib/gitian-keys/*.pgp
- + gpg --import litecoincash/contrib/gitian-keys/*.pgp
- gpg --refresh-keys
- Verify the signatures
- pushd ./gitian-builder
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-linux ../litecoin/contrib/gitian-descriptors/gitian-linux.yml
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-win-unsigned ../litecoin/contrib/gitian-descriptors/gitian-win.yml
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-osx-unsigned ../litecoin/contrib/gitian-descriptors/gitian-osx.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-linux ../litecoincash/contrib/gitian-descriptors/gitian-linux.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-win-unsigned ../litecoincash/contrib/gitian-descriptors/gitian-win.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-osx-unsigned ../litecoincash/contrib/gitian-descriptors/gitian-osx.yml
- popd
- ### Next steps:
- -Commit your signature to gitian.sigs.ltc:
- +Commit your signature to gitian.sigs.lch:
- - pushd gitian.sigs.ltc
- + pushd gitian.sigs.lch
- git add ${VERSION}-linux/${SIGNER}
- git add ${VERSION}-win-unsigned/${SIGNER}
- git add ${VERSION}-osx-unsigned/${SIGNER}
- git commit -a
- - git push # Assuming you can push to the gitian.sigs.ltc tree
- + git push # Assuming you can push to the gitian.sigs.lch tree
- popd
- Codesigner only: Create Windows/OS X detached signatures:
- @@ -167,22 +167,22 @@ Codesigner only: Create Windows/OS X detached signatures:
- Codesigner only: Sign the osx binary:
- - transfer litecoin-osx-unsigned.tar.gz to osx for signing
- - tar xf litecoin-osx-unsigned.tar.gz
- + transfer litecoincash-osx-unsigned.tar.gz to osx for signing
- + tar xf litecoincash-osx-unsigned.tar.gz
- ./detached-sig-create.sh -s "Key ID"
- Enter the keychain password and authorize the signature
- Move signature-osx.tar.gz back to the gitian host
- Codesigner only: Sign the windows binaries:
- - tar xf litecoin-win-unsigned.tar.gz
- + tar xf litecoincash-win-unsigned.tar.gz
- ./detached-sig-create.sh -key /path/to/codesign.key
- Enter the passphrase for the key when prompted
- signature-win.tar.gz will be created
- Codesigner only: Commit the detached codesign payloads:
- - cd ~/litecoin-detached-sigs
- + cd ~/litecoincash-detached-sigs
- checkout the appropriate branch for this release series
- rm -rf *
- tar xf signature-osx.tar.gz
- @@ -195,34 +195,34 @@ Codesigner only: Commit the detached codesign payloads:
- Non-codesigners: wait for Windows/OS X detached signatures:
- - Once the Windows/OS X builds each have 3 matching signatures, they will be signed with their respective release keys.
- -- Detached signatures will then be committed to the [litecoin-detached-sigs](https://github.com/litecoin-project/litecoin-detached-sigs) repository, which can be combined with the unsigned apps to create signed binaries.
- +- Detached signatures will then be committed to the [litecoincash-detached-sigs](https://github.com/litecoincash-project/litecoincash-detached-sigs) repository, which can be combined with the unsigned apps to create signed binaries.
- Create (and optionally verify) the signed OS X binary:
- pushd ./gitian-builder
- - ./bin/gbuild -i --commit signature=v${VERSION} ../litecoin/contrib/gitian-descriptors/gitian-osx-signer.yml
- - ./bin/gsign --signer $SIGNER --release ${VERSION}-osx-signed --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-osx-signer.yml
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-osx-signed ../litecoin/contrib/gitian-descriptors/gitian-osx-signer.yml
- - mv build/out/litecoin-osx-signed.dmg ../litecoin-${VERSION}-osx.dmg
- + ./bin/gbuild -i --commit signature=v${VERSION} ../litecoincash/contrib/gitian-descriptors/gitian-osx-signer.yml
- + ./bin/gsign --signer $SIGNER --release ${VERSION}-osx-signed --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-osx-signer.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-osx-signed ../litecoincash/contrib/gitian-descriptors/gitian-osx-signer.yml
- + mv build/out/litecoincash-osx-signed.dmg ../litecoincash-${VERSION}-osx.dmg
- popd
- Create (and optionally verify) the signed Windows binaries:
- pushd ./gitian-builder
- - ./bin/gbuild -i --commit signature=v${VERSION} ../litecoin/contrib/gitian-descriptors/gitian-win-signer.yml
- - ./bin/gsign --signer $SIGNER --release ${VERSION}-win-signed --destination ../gitian.sigs.ltc/ ../litecoin/contrib/gitian-descriptors/gitian-win-signer.yml
- - ./bin/gverify -v -d ../gitian.sigs.ltc/ -r ${VERSION}-win-signed ../litecoin/contrib/gitian-descriptors/gitian-win-signer.yml
- - mv build/out/litecoin-*win64-setup.exe ../litecoin-${VERSION}-win64-setup.exe
- - mv build/out/litecoin-*win32-setup.exe ../litecoin-${VERSION}-win32-setup.exe
- + ./bin/gbuild -i --commit signature=v${VERSION} ../litecoincash/contrib/gitian-descriptors/gitian-win-signer.yml
- + ./bin/gsign --signer $SIGNER --release ${VERSION}-win-signed --destination ../gitian.sigs.lch/ ../litecoincash/contrib/gitian-descriptors/gitian-win-signer.yml
- + ./bin/gverify -v -d ../gitian.sigs.lch/ -r ${VERSION}-win-signed ../litecoincash/contrib/gitian-descriptors/gitian-win-signer.yml
- + mv build/out/litecoincash-*win64-setup.exe ../litecoincash-${VERSION}-win64-setup.exe
- + mv build/out/litecoincash-*win32-setup.exe ../litecoincash-${VERSION}-win32-setup.exe
- popd
- Commit your signature for the signed OS X/Windows binaries:
- - pushd gitian.sigs.ltc
- + pushd gitian.sigs.lch
- git add ${VERSION}-osx-signed/${SIGNER}
- git add ${VERSION}-win-signed/${SIGNER}
- git commit -a
- - git push # Assuming you can push to the gitian.sigs.ltc tree
- + git push # Assuming you can push to the gitian.sigs.lch tree
- popd
- ### After 3 or more people have gitian-built and their results match:
- @@ -235,23 +235,23 @@ sha256sum * > SHA256SUMS
- The list of files should be:
- ```
- -litecoin-${VERSION}-aarch64-linux-gnu.tar.gz
- -litecoin-${VERSION}-arm-linux-gnueabihf.tar.gz
- -litecoin-${VERSION}-i686-pc-linux-gnu.tar.gz
- -litecoin-${VERSION}-x86_64-linux-gnu.tar.gz
- -litecoin-${VERSION}-osx64.tar.gz
- -litecoin-${VERSION}-osx.dmg
- -litecoin-${VERSION}.tar.gz
- -litecoin-${VERSION}-win32-setup.exe
- -litecoin-${VERSION}-win32.zip
- -litecoin-${VERSION}-win64-setup.exe
- -litecoin-${VERSION}-win64.zip
- +litecoincash-${VERSION}-aarch64-linux-gnu.tar.gz
- +litecoincash-${VERSION}-arm-linux-gnueabihf.tar.gz
- +litecoincash-${VERSION}-i686-pc-linux-gnu.tar.gz
- +litecoincash-${VERSION}-x86_64-linux-gnu.tar.gz
- +litecoincash-${VERSION}-osx64.tar.gz
- +litecoincash-${VERSION}-osx.dmg
- +litecoincash-${VERSION}.tar.gz
- +litecoincash-${VERSION}-win32-setup.exe
- +litecoincash-${VERSION}-win32.zip
- +litecoincash-${VERSION}-win64-setup.exe
- +litecoincash-${VERSION}-win64.zip
- ```
- The `*-debug*` files generated by the gitian build contain debug symbols
- for troubleshooting by developers. It is assumed that anyone that is interested
- in debugging can run gitian to generate the files for themselves. To avoid
- end-user confusion about which file to pick, as well as save storage
- -space *do not upload these to the litecoin.org server, nor put them in the torrent*.
- +space *do not upload these to the litecoincash.org server, nor put them in the torrent*.
- - GPG-sign it, delete the unsigned file:
- ```
- @@ -261,24 +261,24 @@ rm SHA256SUMS
- (the digest algorithm is forced to sha256 to avoid confusion of the `Hash:` header that GPG adds with the SHA256 used for the files)
- Note: check that SHA256SUMS itself doesn't end up in SHA256SUMS, which is a spurious/nonsensical entry.
- -- Upload zips and installers, as well as `SHA256SUMS.asc` from last step, to the litecoin.org server.
- +- Upload zips and installers, as well as `SHA256SUMS.asc` from last step, to the litecoincash.org server.
- ```
- -- Update litecoin.org version
- +- Update litecoincash.org version
- - Announce the release:
- - - litecoin-dev and litecoin-dev mailing list
- + - litecoincash-dev and litecoincash-dev mailing list
- - - blog.litecoin.org blog post
- + - blog.litecoincash.org blog post
- - - Update title of #litecoin and #litecoin-dev on Freenode IRC
- + - Update title of #litecoincash and #litecoincash-dev on Freenode IRC
- - - Optionally twitter, reddit /r/Litecoin, ... but this will usually sort out itself
- + - Optionally twitter, reddit /r/LitecoinCash, ... but this will usually sort out itself
- - Archive release notes for the new version to `doc/release-notes/` (branch `master` and branch of the release)
- - - Create a [new GitHub release](https://github.com/litecoin-project/litecoin/releases/new) with a link to the archived release notes.
- + - Create a [new GitHub release](https://github.com/litecoincash-project/litecoincash/releases/new) with a link to the archived release notes.
- - Celebrate
- diff --git a/doc/tor.md b/doc/tor.md
- index 68ef6ba..3110f55 100644
- --- a/doc/tor.md
- +++ b/doc/tor.md
- @@ -1,16 +1,16 @@
- -TOR SUPPORT IN LITECOIN
- +TOR SUPPORT IN LITECOINCASH
- ======================
- -It is possible to run Litecoin as a Tor hidden service, and connect to such services.
- +It is possible to run LitecoinCash as a Tor hidden service, and connect to such services.
- The following directions assume you have a Tor proxy running on port 9050. Many distributions default to having a SOCKS proxy listening on port 9050, but others may not. In particular, the Tor Browser Bundle defaults to listening on port 9150. See [Tor Project FAQ:TBBSocksPort](https://www.torproject.org/docs/faq.html.en#TBBSocksPort) for how to properly
- configure Tor.
- -1. Run litecoin behind a Tor proxy
- +1. Run litecoincash behind a Tor proxy
- ---------------------------------
- -The first step is running Litecoin behind a Tor proxy. This will already make all
- +The first step is running LitecoinCash behind a Tor proxy. This will already make all
- outgoing connections be anonymized, but more is possible.
- -proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy
- @@ -31,27 +31,27 @@ outgoing connections be anonymized, but more is possible.
- In a typical situation, this suffices to run behind a Tor proxy:
- - ./litecoin -proxy=127.0.0.1:9050
- + ./litecoincash -proxy=127.0.0.1:9050
- -2. Run a litecoin hidden server
- +2. Run a litecoincash hidden server
- ------------------------------
- If you configure your Tor system accordingly, it is possible to make your node also
- reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent
- config file):
- - HiddenServiceDir /var/lib/tor/litecoin-service/
- + HiddenServiceDir /var/lib/tor/litecoincash-service/
- HiddenServicePort 9333 127.0.0.1:9333
- HiddenServicePort 19335 127.0.0.1:19335
- The directory can be different of course, but (both) port numbers should be equal to
- -your litecoind's P2P listen port (9333 by default).
- +your litecoincashd's P2P listen port (9333 by default).
- - -externalip=X You can tell litecoin about its publicly reachable address using
- + -externalip=X You can tell litecoincash about its publicly reachable address using
- this option, and this can be a .onion address. Given the above
- configuration, you can find your onion address in
- - /var/lib/tor/litecoin-service/hostname. Onion addresses are given
- + /var/lib/tor/litecoincash-service/hostname. Onion addresses are given
- preference for your node to advertise itself with, for connections
- coming from unroutable addresses (such as 127.0.0.1, where the
- Tor proxy typically runs).
- @@ -68,49 +68,49 @@ your litecoind's P2P listen port (9333 by default).
- In a typical situation, where you're only reachable via Tor, this should suffice:
- - ./litecoind -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen
- + ./litecoincashd -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen
- (obviously, replace the Onion address with your own). It should be noted that you still
- listen on all devices and another node could establish a clearnet connection, when knowing
- your address. To mitigate this, additionally bind the address of your Tor proxy:
- - ./litecoind ... -bind=127.0.0.1
- + ./litecoincashd ... -bind=127.0.0.1
- If you don't care too much about hiding your node, and want to be reachable on IPv4
- as well, use `discover` instead:
- - ./litecoind ... -discover
- + ./litecoincashd ... -discover
- and open port 9333 on your firewall (or use -upnp).
- If you only want to use Tor to reach onion addresses, but not use it as a proxy
- for normal IPv4/IPv6 communication, use:
- - ./litecoin -onion=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover
- + ./litecoincash -onion=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover
- 3. Automatically listen on Tor
- --------------------------------
- Starting with Tor version 0.2.7.1 it is possible, through Tor's control socket
- API, to create and destroy 'ephemeral' hidden services programmatically.
- -Litecoin Core has been updated to make use of this.
- +LitecoinCash Core has been updated to make use of this.
- This means that if Tor is running (and proper authentication has been configured),
- -Litecoin Core automatically creates a hidden service to listen on. This will positively
- +LitecoinCash Core automatically creates a hidden service to listen on. This will positively
- affect the number of available .onion nodes.
- -This new feature is enabled by default if Litecoin Core is listening (`-listen`), and
- +This new feature is enabled by default if LitecoinCash Core is listening (`-listen`), and
- requires a Tor connection to work. It can be explicitly disabled with `-listenonion=0`
- and, if not disabled, configured using the `-torcontrol` and `-torpassword` settings.
- To show verbose debugging information, pass `-debug=tor`.
- Connecting to Tor's control socket API requires one of two authentication methods to be
- -configured. For cookie authentication the user running litecoind must have write access
- +configured. For cookie authentication the user running litecoincashd must have write access
- to the `CookieAuthFile` specified in Tor configuration. In some cases this is
- preconfigured and the creation of a hidden service is automatic. If permission problems
- are seen with `-debug=tor` they can be resolved by adding both the user running tor and
- -the user running litecoind to the same group and setting permissions appropriately. On
- -Debian-based systems the user running litecoind can be added to the debian-tor group,
- +the user running litecoincashd to the same group and setting permissions appropriately. On
- +Debian-based systems the user running litecoincashd can be added to the debian-tor group,
- which has the appropriate permissions. An alternative authentication method is the use
- of the `-torpassword` flag and a `hash-password` which can be enabled and specified in
- Tor configuration.
- @@ -118,7 +118,7 @@ Tor configuration.
- 4. Privacy recommendations
- ---------------------------
- -- Do not add anything but litecoin ports to the hidden service created in section 2.
- +- Do not add anything but litecoincash ports to the hidden service created in section 2.
- If you run a web service too, create a new hidden service for that.
- Otherwise it is trivial to link them, which may reduce privacy. Hidden
- services created automatically (as in section 3) always have only one port
- diff --git a/doc/travis-ci.md b/doc/travis-ci.md
- index c076751..d39e614 100644
- --- a/doc/travis-ci.md
- +++ b/doc/travis-ci.md
- @@ -32,7 +32,7 @@ trigger cache-invalidation and rebuilds as necessary.
- These caches can be manually removed if necessary. This is one of the very few
- manual operations that is possible with Travis, and it can be done by the
- -Litecoin Core committer via the Travis web interface.
- +LitecoinCash Core committer via the Travis web interface.
- In some cases, secure strings may be needed for hiding sensitive info such as
- private keys or URLs. The travis client may be used to create these strings:
- diff --git a/doc/zmq.md b/doc/zmq.md
- index e22548c..6999e2c 100644
- --- a/doc/zmq.md
- +++ b/doc/zmq.md
- @@ -5,8 +5,8 @@ connections, inter-process communication, and shared-memory,
- providing various message-oriented semantics such as publish/subscribe,
- request/reply, and push/pull.
- -The Litecoin Core daemon can be configured to act as a trusted "border
- -router", implementing the litecoin wire protocol and relay, making
- +The LitecoinCash Core daemon can be configured to act as a trusted "border
- +router", implementing the litecoincash wire protocol and relay, making
- consensus decisions, maintaining the local blockchain database,
- broadcasting locally generated transactions into the network, and
- providing a queryable RPC interface to interact on a polled basis for
- @@ -33,7 +33,7 @@ buffering or reassembly.
- ## Prerequisites
- -The ZeroMQ feature in Litecoin Core requires ZeroMQ API version 4.x or
- +The ZeroMQ feature in LitecoinCash Core requires ZeroMQ API version 4.x or
- newer. Typically, it is packaged by distributions as something like
- *libzmq3-dev*. The C++ wrapper for ZeroMQ is *not* needed.
- @@ -45,7 +45,7 @@ operation.
- By default, the ZeroMQ feature is automatically compiled in if the
- necessary prerequisites are found. To disable, use --disable-zmq
- -during the *configure* step of building litecoind:
- +during the *configure* step of building litecoincashd:
- $ ./configure --disable-zmq (other options)
- @@ -66,8 +66,8 @@ address. The same address can be used in more than one notification.
- For instance:
- - $ litecoind -zmqpubhashtx=tcp://127.0.0.1:28332 \
- - -zmqpubrawtx=ipc:///tmp/litecoind.tx.raw
- + $ litecoincashd -zmqpubhashtx=tcp://127.0.0.1:28332 \
- + -zmqpubrawtx=ipc:///tmp/litecoincashd.tx.raw
- Each PUB notification has a topic and body, where the header
- corresponds to the notification type. For instance, for the
- @@ -75,7 +75,7 @@ notification `-zmqpubhashtx` the topic is `hashtx` (no null
- terminator) and the body is the hexadecimal transaction hash (32
- bytes).
- -These options can also be provided in litecoin.conf.
- +These options can also be provided in litecoincash.conf.
- ZeroMQ endpoint specifiers for TCP (and others) are documented in the
- [ZeroMQ API](http://api.zeromq.org/4-0:_start).
- @@ -87,9 +87,9 @@ arriving. Please see `contrib/zmq/zmq_sub.py` for a working example.
- ## Remarks
- -From the perspective of litecoind, the ZeroMQ socket is write-only; PUB
- +From the perspective of litecoincashd, the ZeroMQ socket is write-only; PUB
- sockets don't even have a read function. Thus, there is no state
- -introduced into litecoind directly. Furthermore, no information is
- +introduced into litecoincashd directly. Furthermore, no information is
- broadcast that wasn't already received from the public P2P network.
- No authentication or authorization is done on connecting clients; it
- @@ -102,5 +102,5 @@ retrieve the chain from the last known block to the new tip.
- There are several possibilities that ZMQ notification can get lost
- during transmission depending on the communication type your are
- -using. Litecoind appends an up-counting sequence number to each
- +using. LitecoinCashd appends an up-counting sequence number to each
- notification which allows listeners to detect lost notifications.
- diff --git a/share/genbuild.sh b/share/genbuild.sh
- old mode 100755
- new mode 100644
- diff --git a/share/pixmaps/bitcoin.ico b/share/pixmaps/bitcoin.ico
- index 3753370..9d02d8d 100644
- Binary files a/share/pixmaps/bitcoin.ico and b/share/pixmaps/bitcoin.ico differ
- diff --git a/share/pixmaps/bitcoin128.png b/share/pixmaps/bitcoin128.png
- index 12e4b22..660b3b8 100644
- Binary files a/share/pixmaps/bitcoin128.png and b/share/pixmaps/bitcoin128.png differ
- diff --git a/share/pixmaps/bitcoin128.xpm b/share/pixmaps/bitcoin128.xpm
- index 0c4b00e..803687a 100644
- --- a/share/pixmaps/bitcoin128.xpm
- +++ b/share/pixmaps/bitcoin128.xpm
- @@ -1,225 +1,189 @@
- /* XPM */
- -static char *bitcoin___[] = {
- +static char *_517408262038[] = {
- /* columns rows colors chars-per-pixel */
- -"128 128 91 1",
- -" c #353634",
- -". c #373836",
- -"X c #383937",
- -"o c #3D3E3C",
- -"O c #3F403E",
- -"+ c #40413F",
- -"@ c #434442",
- -"# c #474847",
- -"$ c #484947",
- -"% c #4B4C4B",
- -"& c #4F504E",
- -"* c #50514F",
- -"= c #4F5150",
- -"- c #545553",
- -"; c #575857",
- -": c #585957",
- -"> c #575858",
- -", c #5B5C5B",
- -"< c #5F605E",
- -"1 c #60615F",
- -"2 c #5F6160",
- -"3 c #646464",
- -"4 c #676867",
- -"5 c #686967",
- -"6 c #6B6C6B",
- -"7 c #6F706F",
- -"8 c #6F7070",
- -"9 c #717372",
- -"0 c #777877",
- -"q c #7B7C7B",
- -"w c #80807F",
- -"e c #7F8080",
- -"r c #838484",
- -"t c #888987",
- -"y c #878888",
- -"u c #8B8B8B",
- -"i c #8F908F",
- -"p c #90908F",
- -"a c #8D8E90",
- -"s c #8F9092",
- -"d c #949595",
- -"f c #979896",
- -"g c #989897",
- -"h c #959698",
- -"j c #979899",
- -"k c #9A9B9C",
- -"l c #9FA09F",
- -"z c #9E9FA1",
- -"x c #9FA0A1",
- -"c c #A3A4A4",
- -"v c #A7A8A7",
- -"b c #A6A7A9",
- -"n c #A7A8A8",
- -"m c #ACADAD",
- -"M c #ADAFB1",
- -"N c #AFB0B3",
- -"B c #B3B4B6",
- -"V c #B7B8B7",
- -"C c #B6B7BA",
- -"Z c #B7B8BB",
- -"A c #BABABD",
- -"S c #BFC0BF",
- -"D c #BDBEC1",
- -"F c #BFC0C2",
- -"G c #C2C3C4",
- -"H c #C5C6C9",
- -"J c #C7C8CA",
- -"K c #CACBCC",
- -"L c #CECED1",
- -"P c #CFD0D1",
- -"I c #D3D4D4",
- -"U c #D6D6D8",
- -"Y c #D7D8D9",
- -"T c #DBDBDC",
- -"R c #E0DFDF",
- -"E c #E0E0DF",
- -"W c #DFDFE0",
- -"Q c #DFE0E0",
- -"! c #E3E4E4",
- -"~ c #E7E7E8",
- -"^ c #E7E8E8",
- -"/ c #EBEBEC",
- -"( c #EFEFF0",
- -") c #F0EFF0",
- -"_ c #EFF0F0",
- -"` c #F4F5F5",
- -"' c #F6F7F8",
- -"] c #F8F7F8",
- -"[ c #F7F8F8",
- -"{ c #FDFDFD",
- -"} c None",
- +"128 128 55 1 ",
- +" c #3F3F3F",
- +". c #424242",
- +"X c #4B4B4B",
- +"o c #535353",
- +"O c #575758",
- +"+ c #5C5C5C",
- +"@ c #646464",
- +"# c #6C6C6C",
- +"$ c #747474",
- +"% c #7B7B7B",
- +"& c #7E7E80",
- +"* c #7E8081",
- +"= c #848484",
- +"- c #878889",
- +"; c #8B8B8B",
- +": c #8E8F90",
- +"> c #8E9090",
- +", c #949494",
- +"< c #97989A",
- +"1 c #9C9C9C",
- +"2 c #9E9FA0",
- +"3 c #9FA0A1",
- +"4 c #A3A3A4",
- +"5 c #A7A7A9",
- +"6 c #A6A8A9",
- +"7 c #ACACAC",
- +"8 c #AEAFB1",
- +"9 c #AFB0B1",
- +"0 c #B4B4B4",
- +"q c #B6B7B8",
- +"w c #B6B8BA",
- +"e c #B9BABC",
- +"r c #BDBEC0",
- +"t c #BFC1C2",
- +"y c #C2C3C3",
- +"u c #C6C7C9",
- +"i c #C7C8CA",
- +"p c #CCCDCD",
- +"a c #CECFD0",
- +"s c #CFD0D1",
- +"d c #D3D3D4",
- +"f c #D6D7D8",
- +"g c #D7D8D9",
- +"h c #DCDCDC",
- +"j c #DEDFE0",
- +"k c #DFE0E1",
- +"l c #E3E3E4",
- +"z c #E7E7E8",
- +"x c #E7E8E8",
- +"c c #ECECEC",
- +"v c #EFEFF0",
- +"b c #EFF0F0",
- +"n c #F4F4F4",
- +"m c #FFFFFF",
- +"M c None",
- /* pixels */
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} . X . ..}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} XoooooOoOooooooOoooooX }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}ooooooooOooooooooooooooooooOoooX}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}XoOoooOOoOooooooooooooooooOooooOoooooX}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.ooooooooooooooOoooOooOooOOooooOooooooOooooX}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} o@oOOooooooooooooooooooooOoOooooooooooooooooooOX }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}XoooooooooooooooooOooooooXXXXXXoooooooooooOoOOoOoooooX}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}XoOoooooooooooooooXXo+@%*--:,,:;-&%#ooo.oooooooOoooOooooO }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ooooooooooOoooo o*5rcVKT!~~^^^^~!!TKVcr5*o ooooooooooooooo }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}oooooooooooooo #5gST`'[{{[[{[[[[{[[[[{{{`_TAg6#. XoooooooooooOo}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ooooooooooooXo$9nI`[{['][[][[[[[[]][[[[[[[[[{{[)Un9%Xooooooooooooo }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}oooOooOooooo o,kI`{{['['[[[][[[[[[[[[[[[[[[[[][[[]{{'Ik,X oooooooooOOo}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}XoOooooooooooo6B^'{'''[[[[[[{[[[{[{[{[{[{{[[{[][]][[][[{[^B6oooOoooooooooX}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}oooooooooooo@9D`[[[[[{[''{][{'[{{[['{[{{[{[[{[{[{][{''[[[[[{`A9@oooooooOoooX}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}oOoooooooooo4A`{]'[[[[[{'{]{'{]{{[{{{{{]{{{{{{{[{[{{]{[{[[[[''{_A4ooooooooOooo}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}ooooooooooo-c/['[[[[]][['{[{{{{{{[{{{{{{{{{{{{{{{[{[{{[]['[[[[''[{^c-ooooooooooo}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}OooooooooooqY][''[[[['{{][{{[{{{{{{{{{{{{{{{{{{{{{{{{{[{{{{{'{[[[['{[IqooOoooooOoo}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}ooooooOoo %m`'''['[{][{{{{{{{{{{{{{[`/~QQW!!~~/']{{{{{{{{{{{{][[[['''[[`m% oooooOooo}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}ooooooooo.5I[''[[['{[{[{[{{{{{{{(!YKGDACCDCBBCCZAGJU!`'{{{{{{[{{{[{{][[]]]I5.ooooooooo}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}oooooooooot^{'[[[['{[[{{{{{{{'~YHZBBBBCCCCCCCCCCCCVBBBCG!{{{{{{{{{{[{'[[[['[^toXoooooooo}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}oooOooooook'['[[[[{{[{{{{{{{/YGCBCCCCCCCCCCCCCCCCCCCBBALW`{{{{{{{{{{{{[{[{[{[['kooooOoooOo}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}oOooooooo$m][]{']]{{{{{{{{'~LNBBCCCCCCBCCCCCCCCCCCCVZJT`{{{{{{{{{{{{{{{{[{{]][[[]N$ooooooooO}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}ooooooooo%V[[[[['{['{]{]{{~LDNDCCCCZDDDDDDCDDCDDCDDGT/{{{{{{{{{{{{{{{{{{{{[[{[[[[[]Z%ooooooooo}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}ooooooooo%A{[[[[]{]{{{{{{(LDCCDMCZCCMzhzkkkkhzzzhzcCSGHGHGHGGGG){{{{{{{{{{{{{][][[[[]A%XoooooOoX}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}} ooooOooo$Z[][[[[]{{[{{{'YDNCCCDNCCCDeXooooooooXoOOOO++++OO+++O$Y{{{{{{{{{{{{{{{{{[[[]{Z$ooooooo+ }}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}oooooooooM'''[[{[]{{{{{(HBCCCNDNDDBCC3Xooooooooooooooooooooooo 3){{{{{{{{/){{{{{]{[[[][{mOoooooOoo}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}oooooooook'''{{[[{{{{{'WDNCCDCDNDNBBDM%oOoooooooooooooooooooOOo p{{{{{{`WJAAW{{{{{{[{[[][[loooOooooo}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}oooo@oooot'['[[['{{{{{]UCBDCCBCNDNDBDDhooOyVVVVBBVVCZZZZZZZVVwoooA{{{'!LABBCCCI]{{{{[[[{[[['uXoooooooX}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}ooooooo 5^[[[''{{[{{{'LBBBDCCCCDNDNDNDq.O#P{{{{{{{{{{{{{{{{{{rXo*E[/YGCBCCCCCCCL]{{{{{[[][[[^5 oooOooo}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}oooooooX%I[[[[[{[{{{{`JBCCCZCCCCCCCBCGI5Xo3/{{{{{{{{{{{{{{{{{^>oX6WHCBBCCCCCCZCZBJ`{{{[{][[[[{I%oooooooo}}}}}}}}}}}}",
- -"}}}}}}}}}}} ooooooo+m[[[[[{[{{{{`HBCCCCCZCCCCBDL~[E%oXr{{{{{{{{{{{{{{{{{{H@OXqCNCCCCCCCCCCCCZBJ'{{{{{[]{[[[moooooooo }}}}}}}}}}}",
- -"}}}}}}}}}}}oOoooooow`][{]{[{{{{`JBCCCCCCCCBZJW`{{{ZoooB{{{{{{{{{{{{{{{{{{cXoOhDBCCCDCCCCCZZCCCBJ'{{{{[{][''`rXooooooo}}}}}}}}}}}",
- -"}}}}}}}}}}oooooooo-T[][[[[{{{{]LCZCCCCCCAHY({{{{{{p.o$I{{{{{{{{{{{{{{{{{]0Xo%MDBCCCCCCCCCCCCCZCNK{{{{{[{[''{T-oooooooo}}}}}}}}}}",
- -"}}}}}}}}}}OooOoooon{'[]]{[{[{{UBCCCCBCGI/[{{{{{{{`4Xo5`{{{{{{{{{{{{{{{{{~:o.3DBBDCCCCCCDCCZCBCDL~{{{{{[['[[[{noooooooo}}}}}}}}}}",
- -"}}}}}}}}}XooooooX6^['[[{{{{{{WBCCCBDL!'{{{{{{{{{{Y$o.u{{{{{{{{{{{{{{{{{{G@oXeDBDBCCCCCCCZBBDJ!`{{{{{{{{{{'[[[^5ooOoooo.}}}}}}}}}",
- -"}}}}}}}}}ooooooo@D{'[[{[{{{{/ACBCHW){{{{{{{{{{{{{mXooZ{{{{{{{{{{{{{{{{{{goo+zDCCCCCDCCBBZHY({{{{{{{{{]{{{[[[[{A@ooooOoo}}}}}}}}}",
- -"}}}}}}}} ooooooo9`'''{[[[{{'HBGU(]{{{{{{{{{{{{{{[r o*R{{{{{{{{{{{{{{{{{'0Xo-BACCCDBBBBDI^[{{{{{{{{{{{{{{{[{['[`9ooooooo }}}}}}}}",
- -"}}}}}}}}ooooooo+F{'[[[{{{{{!K~[{{{{{{{{{{{{{{{{{/:XX7`{{{{{{{{{{{{{{{{{!-oX6AZCCCNBAKW'{{{{{{{{{{{{{{{{{{[[[''{Foooooooo}}}}}}}}",
- -"}}}}}}}}oooOoO 7`[[[[[[{{{{[{{{{{{{{{{{{{{{{{{{{K+OXg{{{{{{{{{{{{{{{{{{A+ootACBBCHT`{{{{{{{{{{{{{{{{{{{{{{[{{[[`8 oooooO}}}}}}}}",
- -"}}}}}}}ooOooooXV{[[[{[{{{{{{{{{{{{{{{{{{{{{{{{{{c ooG{{{{{{{{{{{{{{{{{{dXo@xZBDI~[{{{{{{{{{{{{{{{{{{{{{{{{{{[['{CooooOOoo}}}}}}}",
- -"}}}}}}}Oooooo.3/[[[[[{{{{{{{{{{{{{{{{{{{{{{{{{{`9Xo-!{{{{{{{{{{{{{{{{{`5Xo:CL!'{{{{{{{{{{{{{{{{{{{{{{{{{{{{[[''{^1ooooooo}}}}}}}",
- -"}}}}}} OOooooXl{[[{{[{{{{{{{{{{{{{{{{{{{{{{{[^IC%o 9[{{{{{{{{{{{{{{{{{T$oXt){{{{{{{{{{{{{{{{{{{{{{{{{^!{{{{][{[[{lXoooooo }}}}}}",
- -"}}}}}}Xoooooo$Y[][[[{{{{{{{{{{{{{{{{{{{{{{(YHAAd+o k{{{{{{{{{{{{{{{{{{VoooV{{{{{{`{{{{{{{{{{{{{{{{(TJAC~{{{{[][[[U$oooOooo}}}}}}",
- -"}}}}}}Ooooo+.9'']][{{{{{{{{{{{{{{{{{{{{`WJABCCA0oo@K{{{{{{{{{{{{{{{{{[y o&T{{{/Grc{{{{{{{{{{{{{`!KDBCCBL{{{]{[{[''0 oOoooo}}}}}}",
- -"}}}}}}oOoooo m{'{[[[]{{{{{{{{{{{{{{{'~KACCCCCCB2oo:^{{{{{{{{{{{{{{{{{`,oX6']Il3@.V{{{{{{{{{{[^UDCBCCCCCZ/{{{{[]]'{m oooooo}}}}}}",
- -"}}}}}.oooooo#T[[[{{[{{{{{{{{{{{{{[/IFCCCZCCCCAb%o r[{{{{{{{{{{{{{{{{{I$oorB9$oXo&T{{{{{{{[(TGDBCCCCZCCCBU{{{{{]{[[T#ooooooX}}}}}",
- -"}}}}}oooooo 6`[[[[]{{{{{{{{{{{{)THCBBCCCCCCZCDaoooM{{{{{{{{{{{{{{{{{{mooo@o oooX8`{{{{{)!HCBCCBCCZCCCCCCG]{{[[{[[[`6 ooooOo}}}}}",
- -"}}}}}+oOooo g[[[[]{{{{{{{{{{'!KACCCCZCCCCZCCCA0oo#I{{{{{{{{{{{{{{{{{{e oooooooood{{{[~PDBBCCCCCCZCCCCCCCZ^{{{{[[[[[g ooOoo+}}}}}",
- -"}}}}}oooooooS{[[{{{[{{{{{[/PFCBCCCCCCCCCCCZCCB>o.3({{{{{{{{{{{{{{{{{^:ooooo$-oo+F{/YGCVCCCCCACCCZCZCCZCCBU{{{{{[['{Sooooooo}}}}}",
- -"}}}} oooooo-R[[[{[{{{{{(THBBCCCZCACZCCCCCCCCZc@OXu{{{{{{{{{{{{{{{{{{K@oo@4kI0 o&HLCBCCZCCCCCCACCCZCCCCCCBH]{{{{][[[R-XooOoo }}}}",
- -"}}}}oooooo 5`[[[][{[{'LABCCCCZCCCCCCCZCZCCCCAuOoXZ{{{{{{{{{{{{{{{{{{g -tG`{/-oo,CBCCCCCCCCCCCCCCCCCZCCCBAP[{{[[{{[[)5Xoooooo}}}}",
- -"}}}}ooooooXt''[{[{{{{!BCCCCZCCCCCCCCCZCCCCCCZ9Xo%T{{{{{{{{{{{{{{{{{{cn!{{{{G@oXqDCCCCCCCCCCCCCCACCCCCAHT`{{{{{[{[[[]rXoooooo}}}}",
- -"}}}}oOoooooc['[[]{{{{IBCZCCCCCZCCCZCCCCZCBAJK<oX6]{{{{{{{{{{{{{{{{{{[{{{{{{z.ookDCZCZCCCCACCCCCCCBCGY/[{{{{{{{{[[[[{cooooooo}}}}",
- -"}}}}oOoooooZ{[[[{[{{{KBCCCCCCCCCCZCCCCBBDP~{I%o d{{{{{{{{{{{{{{{{{{{{{{{{{'0Xo$NACCCCZCCCCCCCCBCDL~'{{{{{{{{{{{{{[[{V+oo+ooO}}}}",
- -"}}}XooooOo$K[[[{[{{{]DBCCCCCZCZCCCCCCAK!`{{{mooOG{{{{{{{{{{{{{{{{{{{{{{{{{!-o.4ACZCCCCCCCCCCCAJW`{{{{{{{{{{{{{[{[][{K@oooooo }}}",
- -"}}} Oooooo%T{[[[[{{{`DCCCCZCCCCCBBCHT`{{{{{{rXo;~{{{{{{{{{{{{{{{{{{{{{{{{{G+oXrDCCCCCCZCCBCGY/{{{{{{{{{{{{{{{{{[[[][T%oooo+o.}}}",
- -"}}}.oooOoX*![[[[[{{{(ZCCZZCCZCBBDI~{{{{{{{{!:oX0'{{{{{{{{{{{{{{{{{{{{{{{{{dXo@zZCCCCZCCBDL~[{{{{{{{{{{{{{{{{{{{{{[]]!*Xooooo }}}",
- -"}}} oooooo-![][{{{{{^CCCCCCBCDL!`{{{{{{{[Tc3oooc{{{{{{{{{{{{{{{{{{{{{{{`Ja%oo-BCCCCBVZJ!`{{{{{{{{{{{{{{{{{{{{[{{{[[{!*oOoooO.}}}",
- -"}}}XoooooX-~[][[[{{{~CCCBCZHT({{{{{{{{EB0$XXoo@K{{{{{{{{{{{{{{{{{{{{'Yc6@ ooX6DCBBCHY`[{{{{{{{{{{{{{{{{{{{{{{{{[][[]~-XoOooo }}}",
- -"}}} oooOoo;![{[{{{{{!BBCGU/{{{{{{{{{!t-oooooo@9/{{{{{{{{{{{{{{{{{{~B0%oXoooo@aCCGI^[{{{{{{{{{{{{{{{{{{{{{{{{{{{{{[[{~-oooooo.}}}",
- -"}}} OooooX;~[[[[[{{{!DP~'{{{{{{{{{{{g ooo o,uG){{{{{{{{{{{{{{{{{{T:o oooo@,exDL!'{{{{{{{{{{{{{{{{{{{{{{{{'~`{{{{[[[[~;XOoooo }}}",
- -"}}} oOoooX-~[[[{[{{{''{{{{{{{{{{{{{`7ooo%qV^{{{{{{{{{{{{{{{{{{{{{n.oooo-8dBK!`{{{{{{{{{{{{{{{{{{{{{{{{[/YGC!{{{[{[[{~-XoooooX}}}",
- -"}}} oooooo-~[[[[{{{{{{{{{{{{{{{{{{{R-oo9T[{{{{{{{{{{{{{{{{{{{{{{{rooO4aMGY/{{{{{{{{{{{{{{{{{{{{{{{{{`THACCB!{{{{][[[~-ooooOo }}}",
- -"}}}.oooOoo-![[[{[{{{{{{{{{{{{{{{{{{ZoooV{{{{{{{{{{{{{{{{{{{{{{{{/,oX,GY^'{{{{{{{{{{{{{{{{{{{{{{{{'!KDBVCCCB~{{{[{['{!-.oooOo }}}",
- -"}}} oOoooo-!{[[[[{{{{{{{{{{{{{{{{{{u.o%U{{{{{{{{{{{{{{{{{{{{{{{{K@o u'{{{{{{{{{{{{{{{{{{{{{{{{[~IFCBCCCCCCC/{{{{{[['!*oooooo }}}",
- -"}}}.oooooo%E[[[{{{{{{{{{{{{{{{{{{{`3XX5`{{{{{{{{{{{{{{{{{{{{{{{{voooG{{{{{{{{{{{{{{{{{{{{{{{(YGCCCCZCCCCCCD({{{{''[[Q&oooooO.}}}",
- -"}}} oOoOoo$I[[[[[{{{{{{{{{{{{{{{{'G#o.d{{{{{{{{{{{{{{{{{{{{{{{{[qoo*!{{{{{{{{{{{{{{{{{{{{'QKABCCCCCCCCCCCCD`{{[[{['{I$ooOooo }}}",
- -"}}}}oooooX@G{[[[]{{{{{{{{{{{{{`!KGroooA{{{{{[{{{{{{{{{{{{{{{{{{^,o 9]{{{{{{{{{{{{{{{{{'~IDCBCCCCCCZCZCCCCBH[{{{{[[[{G@oooooo}}}}",
- -"}}}}ooOooooB{[[{[{]{{{{{{{{[/UDCCZ5oo-!{{'YkV{{{{{{{{{{{{{{{{{{G#o.c{{{{{{{{{{{{{{{{/TGCBCCCCCCCCCCCCCCCCBP{{{[{[[[{Booooooo}}}}",
- -"}}}}oooooOXg[[[[{{{{{{{{{(THDBCCZM-o 9`!B0%oV{{{{{{{{{{{{{{{{{{cXo+K{{{{{{{{{{{{{)WKDBBBCCCCCCCCCCCCCCCCCBT{{{{][[[[g.ooOooo}}}}",
- -"}}}}ooooooX0'[[[[]{{{{`!KDCBCCCCDk@oo9y>ooX*T{{{{{{{{{{{{{{{{{'9Xo1){{{{{{{{{{[^PGACCCDZDAAAAAAAAZZCCCCCCB~{{{[{[{[`0ooooooo}}}}",
- -"}}}}XoooooX1/][{{[{[{'GVCCZCCCCCAeooOoXoOoX6'{{{{{{{{{{{{{{{{{!-OX7GJJGJJHKKGBcddhhhhhhhdddhhhdhhMACCCCAHT{{{][{[[[/3.oooooX}}}}",
- -"}}}} ooOOoX$I][]]{{{{{JBZCCCCCCCC3oooOooo+.d{{{{{{{{{{{{{{{{{{A+O++@@#@@#@@@@+o@o@@o@@O@@+@O@@@o#cZBBGI/[{{{{{{][[]I@ooooOo.}}}}",
- -"}}}}}ooooooXB{[[['{{{{WBCCCCCCCAM$oooX@@oooG{{{{{{{{{{{{{{{{{[d oOOooooooooooooooooooooooooooooo>MAK~'{{{{{{{{[{[[{Booooooo}}}}}",
- -"}}}}}OOooo+ r[[[{{]{{{(ACCCCCCCAho.o=9h3Xo*!{{{{{{{{{{{{{{{{{`4 XXXXooXoooXoo.Xooo.ooXooo.Xoooo.qW`{{{{{{{{{[{{[{[[r oooooO}}}}}",
- -"}}}}}ooooOoX,/['''[{{{{HBCCCZCCD9o3aMKL-o 0[{{{{{{{{{{{{{{{{{'FVVVVVVVVVBBCVVVVBVVVVBVVVVCBCro+XC{{{{{{{{{{{{{[{[]^,.oooooo}}}}}",
- -"}}}}}Xoooooo+J{'[[{[{{{WCZCZCCACscGY~]FOo c{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{tXo$T{{{{{{{{{{{{[[[[{JOoOoooO }}}}}",
- -"}}}}}}oooooo d[[[[{[{{{'DBCCCCBAI~`{{{gXo@K{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{^3o 6'{{{{{{{{{{{{[{[[{d oooooo}}}}}}",
- -"}}}}}}ooooooX3/['{'{[{{{YBCBAHT){{{{{]7Xo,/{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{I$o d{{{{{{{{{{[{{{[[[/1.ooOooo}}}}}}",
- -"}}}}}}Xoooooo@G{[[[{{{[{)DGU/{{{{{{{{T%o r[{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{noooG{{{{{{{{{{{]['[[{G+OoOOoOX}}}}}}",
- -"}}}}}}}oOooOo t[[[[[[{{{{)'{{{{{{{{{{Vo+.n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{[woX-~{{{{{{{{{{{{{[[][r oooooo}}}}}}}",
- -"}}}}}}}ooooooo%T{''[{[{{{{{{{{{{{{{{{dXo@I{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{^,oX0[{{{{{{{{{{{[[[[[T%XOooooo}}}}}}}",
- -"}}}}}}}oooOooo g{[[[]{[{{{{{{{{{{{{{`5X.<`{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{G@oon{{{{{{{{{{{[{{[[{g OooooOo}}}}}}}",
- -"}}}}}}}}oOooooX-~['][{[{{{{{{{{{{{{{U%O y{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{kXo#K{{{{'){{{{{{][[[~-XOooooO}}}}}}}}",
- -"}}}}}}}}ooooooooc[[''{[{{{{{{{{{{{{{B+oXV{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{]9.o,/{[^IG~{{{[{[][[[cXOooOooX}}}}}}}}",
- -"}}}}}}}}}ooOooOo,![[]{[{{{{{{{{{{{{{uXo$T{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{!-XXr(WJZBI{{{{[{[[[[!:o+ooooo}}}}}}}}}",
- -"}}}}}}}}}ooooooook[[[[{[[{{{{{{{{{{!3oX5/''[[][[[[[[[['[[[[[[][][[[[[[]][][[[[]][[[[[[[[[A+ooaGBBVH'{{{{{[[[[{koooooooo}}}}}}}}}",
- -"}}}}}}}}}}ooooooo*I[[[[{{{{{{{{{[~Ic#oo-9989899998799989999899978999997789999897899989879,oo@cZCCD/{{{{]{[[[[I-ooooO+o}}}}}}}}}}",
- -"}}}}}}}}}}oooooooor'[[[[[[{{{{{YGCZroOooX......X....XX..X..X..XX...X.XXX...X..XX...XX...XXoo>BZCA~{{{{[{][[[`r.ooooooo}}}}}}}}}}",
- -"}}}}}}}}}}}ooooooo@Z{[[[{{{{[{{TBBZ5 oooXoooooXooXoooXXXoo.XoXXXo.XoXXXoo.XoXXXoooooXoooXoo 9ACCW{{{{{[[]{[{Z@ooooooo}}}}}}}}}}}",
- -"}}}}}}}}}}}OOooOoOo,W[[[][{[{{{{TCB8,2,,<<,<<<<<3,,,379777977779799797977997799953<<<,1,112,jCCT{{{{{][{][[E,oooooOoO}}}}}}}}}}}",
- -"}}}}}}}}}}}}Ooooooo r`'[]{]{{{{{{YBBCCCCVCCBCCBBBCJT/`''`''`''''''`'`'`''''`])!IFCCCVCCCVVVBCCT{{{{[{{][][`rXooOooo+}}}}}}}}}}}}",
- -"}}}}}}}}}}}}.Oooooooon{'][[][{{{{{TCCVCZZVZZCBVFI/{{{{{{{{{{{{{{{{{{{{{{{{{)TGAVCCVZVZCZCZCCZW{{{{{{[[]{[]mooooooooX}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}ooooOoOo#J{'[[{{{{{{{{WABCCCBBBAL~[{{{{{{{{{{{{{{{{{{{{{{{{`!KDBCCCCZZCCZCZZCBD!{{{{{{]{[['{J$oooooooo}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}Oooooooo,R['[[[[{[{{{{~DBBBDHW'{{{{{{{{{{{{{{{{{{{{{{{{'~UDCBCCCZCCCCCCCCCCBF/{{{{{][{'''{W,XOoooOo+}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}Xooooooo.6^[[['{[{{[{{{(KFU({{{{{{{{{{{{{{{{{{{{{{{{{/THBNCCCCCCCZCZCZZCCCCL){{{{][{][[[[~8 oooooooo}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}OooOoooo w/[['[[[{]{{{{{'{{{{{{{{{{{{{{{{{{{{{{{{`!KABCDBCCCCCCCZCCCCCCCDW]{{{{{{{]][[{/q ooOooooo}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}oOoOoooooy({'[[[{[{{{{{{{{{{{{{{{{{{{{{{{{{{{`~PGCCCCDBBCCCCCCCCZZZCCZL/{{{{[{{{[[[[[/tooooooooo}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}Oooooooooy/{'[['{]{{{{{{{{{{{{{{{{{{{{{{{{/YHZCBCCCCCBDCCCCCCCCCBBZJ~{{{{{{{{][[[[{`tooooooooO}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}XooOoooooor/['[{''{'{{{{{{{{{{{{{{{{{{{(WHDBCCCCZCCCCBDCCDBCCCCBCJ!]{{{{{{][{]{[[[^rooooooooo.}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}.oooOooooo0!{[[[]'{[[{{{{{{{{{{{{{{'!LDBBCCCCCCCCCCCCCCCCCCCBZL~]{{{{]{{]{{[[[[{!0oooooooooo}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}XOooooooo 4I{[[[[[{{{]{{{{{{{{{{`PABBCCCCCCZCCZCCCCCCCBBBDGY({{{{{{{][{[{[[[[{Y4 oooOoooOX}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}ooooooooo.-A[{[[[[[[{{[{{{{{{{{(TLFZCBBBBBCBCBCBBBBBZFLW({{{{{{[{{{{{[[[[[[[A- ooOoooooo}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}ooooooooO.@g/['[[[{][[{[{{{{{{{{{'(!YIKGFDDDDDHKIWQ)'{{{{{{{{{{{{]][{[[[[/g@Xooooooooo}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}.oooOoooooX6I[[[[['{]{{[[{[{{{{{{{{{{{{]]`''][{{{{{{{{{{{]]{]{[]{[[[[[[I9.ooooooooo.}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}.ooooooOooX=c^{[['[[{{{[{{{{{{{{{{{{{{{{{{{{{{{{{{{][[{{{[{{[][[[][{^c%XooooooOoo.}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}oOooooooOooo6S`[']''[[]{{[[{{[[{{{{{{{{{{{{{{{]{{{{{{{]{{[[[[[[[[`S6oooooooOoooo}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}} ooooooooooX@wK'{[[[[[[][{{[[{{]{]{][{{{{{{{{{{[{]{[{{[[[{]''{'Kw@XoooOoooooo }}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}oOooOooooooX#wJ`{[[[[[[[[{]{]{{{[{{{]{][{[[{'{'{'{'[[[[[[[`Jr$XoooOooooooo}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}.oooooooooOooO9V/[{'[[[[[[{[[[{]{[{['{[[{[[[[[[[[[[''{[/Z9+Xooooooooooo.}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ooooOoOooooo o,jL`{{][[[[[][[[[[[][[[[[[[[[{[[[{[{`Kg,o ooooOooOoOoo }}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}oooooooOoooooX.@4gH~[{[{[[[[[[[]][[[[[[[][{{['^Jk5# ooooooOooooooo}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} Ooooooooooooooo O;qcGT/`[{{{{{{{{{{{{]'/TGc0:o .oooooooooooooo }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}XooooooooooooOOXX .O&30icmmBBBVVBmmcu03&oX XoooOooooooooooo.}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}ooooooooo+ooooOOooX..XX.oooOooooXXXXXooO+ooooooooooooOoo}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}ooooooooooXOXOooooooOoooooooooooooooooooooOooooooooo}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} XooooOoOooOoOooOooOoooooooooooOooooOoooooooooo }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}XooooOooooooooooOoooOooOooooOooooooOoooOoX}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}XoOOoooOOoOoooooooOoooOooooo+oooo+o }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} .oOoooooooOooooooooooooooooX }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} XoOooooOooooOooooX }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} . .. . }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}",
- -"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. . . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . . ...XXXX.. . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM X#;7uhcmmmmmmmnchy7;#X . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . o=qlmmmmmmmmmmmmmmmmmmmmmmh0=X . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMM @4hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmh1@ MMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMM . . .o<lmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmh<o . MMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMM . ..$ymmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmy#. . MMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMM . .=hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmh=. . . MMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMM ..-lmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmml-. MMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMM . . $hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmh$. . . .MMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMM . .oymmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmyo . MMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMM . .-nmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmn- . MMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMM XummmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmccnmmmmmmmmmmmmmmmmmmmmmmmmmtX . MMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMM . . #cmmmmmmmmmmmmmmmmmmmmmncmmmmmmmmmmmmmlpppishcnmmmmmmmmmmmmmmmmmmmmmz@ . . MMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMM . :mmmmmmmmmmmmmmmmmmmmckdpcmmmmmmmmmmmmcappppppppshcmmmmmmmmmmmmmmmmmmmn= . MMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMM .7mmmmmmmmmmmmmmmmmmnlppspcmmmmmmmmmmmmnsppppaappappinmmmmmmmmmmmmmmmmmmmm2 . . MMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMM .tmmmmmmmmmmmmmmmmmchpassplmmmmmmmmmmmmmpppppppppppppxmmmmmmmmmmmmmmmmmmmmmmq. MMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMM . . Xpmmmmmmmmmmmmmmmmngdpsappgmmmmmmmmcmmmmfppappapppppplmmmmmmmmmmmmmmmmmmmmmmmmy.. MMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMM ..pmmmmmmmmmmmmmmmnhaaaaaasdmmmmmmmh##mmmhppppappppappgmmmmmmmmmmmmmmmmmmmmmmmmmmu... . MMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMM . ..immmmmmmmmmmmmmmlsaaaaaaadnmmmmmc= .nmlppppppppapppdmmmmmmmmmmmmmmmmmmmmmmmmmmmme. MMMMMMMMMMMMM",
- +"MMMMMMMMMMMM . .wmmmmmmmmmmmmmmnhassaaaaaabmmmmm7X pvppappappppppsnmmmmmmmmmmmmlpvmmmmmmmmmmmmmm0 . MMMMMMMMMMMM",
- +"MMMMMMMMMMM . 4mmmmmmmmmmmmmmcppaasaaaaalmmmmp+ -sppppppppppapbmmmmmmmmmmmmvuuulmmmmmmmmmmmmmm1 . MMMMMMMMMMM",
- +"MMMMMMMMMMM .=mmmmmmmmmmmmmmkaaaaaaaassjmmml$ . Opappppppppppxmmmmmmmmmmmmnpuuuugmmmmmmmmmmmmmm= . MMMMMMMMMMM",
- +"MMMMMMMMMM . @mmmmmmmmmmmmmmdpaaaaaaaasgmmn<. X0< .yppapappappkmmmmmmmmmmmmmauuuuuuanmmmmmmmmmmmmn@. MMMMMMMMMM",
- +"MMMMMMMMMM .Xkmmmmmmmmmmmmnfaaaaaaaaaasnm0o .,nma <ppppappapfmmmmmmmmmmmmmduuuuuuuupnmmmmmmmmmmmml. MMMMMMMMMM",
- +"MMMMMMMMM . qmmmmmmmmmmmmnsaaaaaaaaaasns@ $kmmmn. $ppppppppdmmmmmmmmmmmmmhyuuuuuuuuuinmmmmmmmmmmmme . MMMMMMMMM",
- +"MMMMMMMM . .%mmmmmmmmmmmmndaaaaaaaaaaph= Oummmmmm$ .ipppppppnmmmmmmmmmmmmluuuuuuuuuuuudmmmmmmmmmmmmm= MMMMMMMM",
- +"MMMMMMMM Xcmmmmmmmmmmmndsaaaaasaasi-. X7mmmmmmmm7 0pppappnmmmmmmmmmmmmvuuuuuuuuuuuupnmmmmmmmmmmmmmbo MMMMMMMM",
- +"MMMMMMM . qmmmmmmmmmmmmdaaaaaapsap4X =cmmmmmmmmml -papppzmmmmmmmmmmmmnpuuuuuuuuuuuubmmmmmmmmmmmmmmme . . .MMMMMMM",
- +"MMMMMMM . #mmmmmmmmmmmmhaaaaaaaspq+ #gmmmmmmmmmmmmO @ppppjmmmmmmmmmmmmmauuuuuuuuuuuucmmmmmmmmmmmmmmmmm$ MMMMMMM",
- +"MMMMMM .fmmmmmmmmmmmlaaaaaaaay% . owmmmmmmmmmmmmmm; yppgmmmmmmmmmmmmmduuuuuuuuuuuuhmmmmmmmmmmmmmmmmmmh. MMMMMM",
- +"MMMMMM . *mmmmmmmmmmmnaaaaaaasi. .1nmmmmmmmmmmmmmmmy 4admmmmmmmmmmmmmhuuuuuuuuuuuudmmmmmmmmmmmmmmmmmmmm= . . MMMMMM",
- +"MMMMM . .lmmmmmmmmmmmsaaaaaaaaa+ %zmmmmmmmmmmmmmmmmmn %pnmmmmmmmmmmmmzuuuuuuuuuuuupmmmmmmmmmmmmmmmmmmmmml. MMMMM",
- +"MMMMM . =mmmmmmmmmmmlpaaaaaaaaa- .nmmmmmmmmmmmmmmmmmmm# Xcmmmmmmmmmmmmcuuuuuuuuuuuupnmmmmmmmmmmmmmmmmmmmmmm-. . MMMMM",
- +"MMMM . jmmmmmmmmmmnaaaaaaaaaap2 dmmmmmmmmmmmmmmmmmmm, lmmm<hmmmmmmniuuuuuuuuuuuinmmmmmmmmmmmmmmmmmmmmmmmh MMMM",
- +"MMMM . $mmmmmmmmmmmgaaaaaaaaaafl 2mmmmmmmmmmmmmmmmmmms 9mm0 4mmmmmmpuuuuuuuuuuuuzmmmmmmmmmmmmcdmmmmmmmmmmm$. MMMM",
- +"MMMM immmmmmmmmmcaaaaaaaaaadnm# #mmmmmmmmmmmmmmmmmmmmX $mp. $mmmmmduuuuuuuuuuuuhmmmmmmmmmmmmnuylmmmmmmmmmmu . MMMM",
- +"MMM . Ommmmmmmmmmmfaaaaaaaaaabmm4 nmmmmmmmmmmmmmmmmmmm% XhX .nmmmhuuuuuuuuuuuudmmmmmmmmmmmmmuytummmmmmmmmmmO . MMM",
- +"MMM. .1mmmmmmmmmmcaaaaaaaaaazmmmh tmmmmmmmmmmmmmmmmmmm0 X emmzuuuuuuuuuuuuammmmmmmmmmmmmsyyyylmmmmmmmmmm1. MMM",
- +"MMM .. lmmmmmmmmmmgaaaaaaaaalmmmmmo -mmmmmmmmmmmmmmmmmmmc ;mviuuuuuuuuuuuinmmmmmmmmmmmmhtyytypmmmmmmmmmml. . MMM",
- +"MMM @mmmmmmmmmmnaaaaaaaaagmmmmmm= ommmmmmmmmmmmmmmmmmmmO Oniuuuuuuuuuuuuvmmmmmmmmmmmmlyyytyyynmmmmmmmmmm@ MM",
- +"MM . 4mmmmmmmmmmlaaaaaaaadmmmmmmmq lmmmmmmmmmmmmmmmmmmm, .$ yuuuuuuuuuuuuzmmmmmmmmmmmmcyyyyyyyyhmmmmmmmmmm4 . MM",
- +"MM . hmmmmmmmmmmdpsaaaaasnmmmmmmmc. 4mmmmmmmmmmmmmmmmmmmi ti <uuuuuuuuuuuhmmmmmmmmmmmmnyyyyyyyytummmmmmmmmmh. . MM",
- +"MM .Xmmmmmmmmmmcsaaaaaaabmmmmmmmmm@ $mmmmmmmmmmmmmmmmmmmm. 1mn. #uuuuuuuuuifmmmmmmmmmmmmmiyyryyyryyycmmmmmmmmmmo MM",
- +"M. =mmmmmmmmmmlaaaaaapcmmmmmmmmmm< Xnmmmmmmmmmmmmmmmmmmm$-mmm$ .uuuuuuuuupmmmmmmmmmmmmmdyyyyryyyytygmmmmmmmmmm- . . M",
- +"M . 7mmmmmmmmmmdaaaaaahmmmmmmmmmmmi pmmmmmmmmmmmmmmmmmmmpnmmm5 9uuuuuuuinmmmmmmmmmmmmhtyyyyyyyyyyypmmmmmmmmmmq M",
- +"M fmmmmmmmmmnpaaaaahmmmmmmmmmmmmn <mmmmmmmmmmmmmmmmmmmmmmmmh ;uuuuuuucmmmmmmmmmmmmzyyyyyyytytyyunmmmmmmmmmml . M",
- +"M ..mmmmmmmmmmxaaaaadmmmmmmmmmmmmmhO @mmmmmmmmmmmmmmmmmmmmmmmmmO @uuuuuilmmmmmmmmmmmmnyyyyyyyyyyytycmmmmmmmmmmmmX M",
- +"M @mmmmmmmmmmhaaaadnmmmmmmmmmmmmcu% .cmmmmmmmmmmmmmmmmmmmmmmmm- .yuuuuhmmmmmmmmmmmmnutyyt0<yytyyylmmmmmmmmmmmmm# M",
- +"M . =mmmmmmmmmmdaaaabmmmmmmmmmmmmnuu4 emmmmmmmmmmmmmmmmmmmmmmmme 2uuudmmmmmmmmmmmmmpyyyq$.Oyyyyyhmmmmmmmmmmmmmm-. . M",
- +" . 1mmmmmmmmmmpaaaxmmmmmmmmmmmmnpuuy. -mmmmmmmmmmmmmmmmmmmmmmmmv $uupmmmmmmmmmmmmmfyyr-. qryydmmmmmmmmmmmmmmm5 ",
- +" . qmmmmmmmmmnpapkmmmmmmmmmmmmmauuuu@ ommmmmmmmmmmmmmmmmmmmmmmmv. Oupnmmmmmmmmmmmmktr2o ,yypnmmmmmmmmmmmmmmme . ",
- +" immmmmmmmmcdpgmmmmmmmmmmmmmduuuuu- hmmmmmmmmmmmmmmmmmmmmmmn@ #ucmmmmmmmmmmmmcy9# #yinmmmmmmmmmmmmmmmmf . ",
- +" . hmmmmmmmmmxadmmmmmmmmmmmmmhuuuuuu5 5mmmmmmmmmmmmmmmmmmmmmm= Otlmmmmmmmmmmmmny=. .o .ycmmmmmmmmmmmmmmmmml . ",
- +" . cmmmmmmmmmlanmmmmmmmmmmmmcuuuuuuuuX $mmmmmmmmmmmmmmmmmmmmm7 .qgmmmmmmmmmmmmn2o %z2 pmmmmmmmmmmmmmmmmmmc . ",
- +" nmmmmmmmmmlvmmmmmmmmmmmmnuuuuuuuuu# .mmmmmmmmmmmmmmmmmmmmi 3dmmmmmmmmmmmmk$ @dmmh 7mmmmmmmmmmmmmmmmmmm ",
- +" . .mmmmmmmmmmnmmmmmmmmmmmmniuuuuuuuuu, pmmmmmmmmmmmmmmmmmmm4 ;pmmmmmmmmmmmn,. X9mmmmmX %mmmmmmmmmmmmmmmmmmm. ",
- +" .mmmmmmmmmmmmmmmmmmmmmmmauuuuuuuuuuw <mmmmmmmmmmmmmmmmmmmd ,nmmmmmmmmmm0X .,bmmmmmm= Xmmmmmmmmmmmmmmmmmmm. . ",
- +" . .mmmmmmmmmmmmmmmmmmmmmmguuuuuuuuuuuio @mmmmmmmmmmmmmmmmmmmmX $mmmmmmmmma@ $lmmmmmmmme fmmmmmmmmmmmmmmmmmm.. . ",
- +" .mmmmmmmmmmmmmmmmmmmmmjuuuuuuuuuuuuf; vmmmmmmmmmmmmmmmmmmm% .mmmmmmmz= Oimmmmmmmmmmv 1mmmmmmmmmmmmmmmmmm. ",
- +" . . nmmmmmmmmmmmmmmmmmmmcuuuuuuuuuuuupnp emmmmmmmmmmmmmmmmmmm0 dmmmmn1X X7nmmmmmmmmmmmm@ #mmmmmmndmmmmmmmmmn . ",
- +" cmmmmmmmmmmmmmmmmmmvuuuuuuuuuuuuinmn =mmmmmmmmmmmmmmmmmmml 4mmntO .-nmmmmmmmmmmmmmm< .nmmmmntdmmmmmmmmmn ",
- +" . hmmmmmmmmmmmmmmmmmnpuuuuuuuuuuuubmmm$ XmmmmmmmmmmmmmmmmmmmmO #md# #hmmmmmmmmmmmmmmmms tmmmmpegmmmmmmmmml . ",
- +" pmmmmmmmmmmmmmmmmmauuuuuuuuuuuulmmmm% hmmmmmmmmmmmmmmmmmmm; % oemmmmmmmmmmmmmmmmmmm. ;mmmseejmmmmmmmmmf . ",
- +" .wmmmmmmmmmmmmmmmmguuuuuuuuuuuuhmmmm9 Xnmmmmmmmmmmmmmmmmmmmu X4nmmmmmmmmmmmmmmmmmmmm$ ommjeewxmmmmmmmmme . ",
- +" . 4mmmmmmmmmmmmmmmjuuuuuuuuuuuudmmmma. .ammmmmmmmmmmmmmmmmmmmb. =cmmmmmmmmmmmmmmmmmmmmmm5 hceeeenmmmmmmmmm7 ",
- +"M =mmmmmmmmmmmmmmcuuuuuuuuuuuupmmmmlX 7mmmmmmmmmmmmmmmmmmmmmm@ @dmmmmmmmmmmmmmmmmmmmmmmmmd >eweetmmmmmmmmmm; . . M",
- +"M . @mmmmmmmmmmmmmnuuuuuuuuuuuuinmmmn+ -mmmmmmmmmmmmmmmmmmmmmmm< oqmmmmmmmmmmmmmmmmmmmmmmmmm7X @eeeesmmmmmmmmmm@ M",
- +"M .mmmmmmmmmmmmniuuuuuuuuuuuucmmmmh @mmmmmmmmmmmmmmmmmmmmmmmmh1nmmmmmmmmmmmmmmmmmmmmmmmmiO #weewkmmmmmmmmmm. M",
- +"M . . .hmmmmmmmmmmmauuuuuuuuuuuulmmmmmmX %mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmml$ o,eeeeebmmmmmmmmmh . M",
- +"M . 0mmmmmmmmmmguuuuuuuuuuuuhmmmmmmm= .mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmn,. X-qeeeeetmmmmmmmmmm7 . . M",
- +"M =mmmmmmmmmmhuuuuuuuuuuudmmmmmmmm0 dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmqX ;heeeeewesmmmmmmmmmm% M",
- +"MM Ommmmmmmmmmvuuuuuuuuuipnmmmmmmmmc 1mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmma@ #hnteeeqewexmmmmmmmmmmX MM",
- +"MM . kmmmmmmmmmmpuuuuuuuuinmmmmmmmmmm+ @mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmz* oemniqeeeeeermmmmmmmmmmf . MM",
- +"MM . 4mmmmmmmmmmjuuuuuuuuxmmmmmmmmmmm, cmmmbcmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmn4. .4mmmpwrwweeeedmmmmmmmmmm1. . MM",
- +"MM #mmmmmmmmmmnuuuuuuujmmmmmmmmmmmmu emmm$7mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmeO *cmmmfrwwrrweeevmmmmmmmmmm@ MMM",
- +"MMM .. .lmmmmmmmmmmduuuuuhmmmmmmmmmmmmmy. -mm- $mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmh# @smmmmlwwrwwweweummmmmmmmmmc . MMM",
- +"MMM 4mmmmmmmmmmcyuuudmmmmmmmmmmmmmst+ om4 mmmmmmmmmmmmmmmmmmmmmmmmmmmmc; Xwmmmmmcwwrwwwreeexmmmmmmmmmm4 MMM",
- +"MMM .Ommmmmmmmmmmpuupnmmmmmmmmmmmmgry= 2 dmmmmmmmmmmmmmmmmmmmmmmmmmm4. .1nmmmmmnrrwweeeewwummmmmmmmmmm+ MMMM",
- +"MMMM . pmmmmmmmmmmcuunmmmmmmmmmmmmltyr6 <mmmmmmmmmmmmmmmmmmmmmmmmuO $lmmmmmmntwwrwrweweezmmmmmmmmmmp. . . MMMM",
- +"MMMM . %mmmmmmmmmmmdxmmmmmmmmmmmmcttttr @mmmmmmmmmmmmmmmmmmmmmmk$ +pmmmmmmmmarwewrwweeeimmmmmmmmmmm$ MMMM",
- +"MMMM lmmmmmmmmmmmmmmmmmmmmmmmnytttye@ vmmmmmmmmmmmmmmmmmmmb, X7mmmmmmmmmfwwwrwwwreeecmmmmmmmmmmh. MMMMM",
- +"MMMMM . -mmmmmmmmmmmmmmmmmmmmmmnitttttt> o, 0mmmmmmmmmmmmmmmmmm0X ;vmmmmmmmmmkerwwwrwrwwrdmmmmmmmmmmm= . . MMMMM",
- +"MMMMM .lmmmmmmmmmmmmmmmmmmmmmsttttttt0 .9p =mmmmmmmmmmmmmmmmp@ $hmmmmmmmmmmceewwrwewwwetnmmmmmmmmmml. MMMMM",
- +"MMMMMM . =mmmmmmmmmmmmmmmmmmmmgtttttyrtto.4im# Xmmmmmmmmmmmmmml% oymmmmmmmmmmmbreewrwrwwrrecmmmmmmmmmmm=. MMMMMM",
- +"MMMMMM . .hmmmmmmmmmmmmmmmmmmltttttttttt%,ynm4 hmmmmmmmmmmmn1 .<nmmmmmmmmmmmmyeeeeewwrwwwgmmmmmmmmmmml. MMMMMM",
- +"MMMMMMM . #mmmmmmmmmmmmmmmmmctttttttttttwtbmmf 4mmmmmmmmmmwX #tmmmmmmmmmmmmmieeeewrrweeepmmmmmmmmmmmm$ . MMMMMMM",
- +"MMMMMMM . wmmmmmmmmmmmmmmmnyttttttttttttxmmmmX $mmmmmmmmf# +4ynmmmmmmmmmmmmfeeeewwwwweetnmmmmmmmmmmmy MMMMMMM",
- +"MMMMMMMM Xcmmmmmmmmmmmmmmitttttttttttthmmmmm= .nmmmmmc= X,wrnmmmmmmmmmmmmlweeewereerernmmmmmmmmmmmnO . . MMMMMMMM",
- +"MMMMMMMM . =mmmmmmmmmmmmmgttttttttttttdmmmmmm0 ymmmm4. %0eelmmmmmmmmmmmmceweeeeewwewrbmmmmmmmmmmmm- MMMMMMMM",
- +"MMMMMMMMM . wmmmmmmmmmmmmnyttttttttttpmmmmmmmc ;mmyO #9eeehmmmmmmmmmmmmnrwwrewweeeeebmmmmmmmmmmmmy MMMMMMMMM",
- +"MMMMMMMMMM. Xlmmmmmmmmmmmmcyttttttttunmmmmmmmm@ +h# O4eeeepmmmmmmmmmmmmntwrwweeeeeetnmmmmmmmmmmmmlX . .MMMMMMMMMM",
- +"MMMMMMMMMM @nmmmmmmmmmmmmnitttttttbmmmmmmmmm< X:eeeeeummmmmmmmmmmmmieewrwewweeynmmmmmmmmmmmmm@. MMMMMMMMMM",
- +"MMMMMMMMMMM . =mmmmmmmmmmmmmmdtttttlmmmmmmmmmma .$0eereernmmmmmmmmmmmmdrwwrweeeeeammmmmmmmmmmmmm=. . MMMMMMMMMMM",
- +"MMMMMMMMMMM . 2mmmmmmmmmmmmmmlttrhmmmmmmmmmmmmX @7eeereervmmmmmmmmmmmmkeeerwweerrjmmmmmmmmmmmmmm4 . MMMMMMMMMMM",
- +"MMMMMMMMMMMM . .qmmmmmmmmmmmmmmniammmmmmmmmmmmn# O3eeereeeekmmmmmmmmmmmmceeeeweeewtvmmmmmmmmmmmmmm0 MMMMMMMMMMMM",
- +"MMMMMMMMMMMMM .ymmmmmmmmmmmmmmmmmmmmmmmmmmmma=.;eeeeeeeeedmmmmmmmmmmmmnreeweeeewfmmmmmmmmmmmmmmme. . MMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMM . .ummmmmmmmmmmmmmmmmmmmmmmmmmhe0qereeereeepmmmmmmmmmmmmmueeweeeeibmmmmmmmmmmmmmmmt. . . MMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMM ..ymmmmmmmmmmmmmmmmmmmmmmmmleerereeeeeeeynmmmmmmmmmmmmaeewreeuxmmmmmmmmmmmmmmmmq. . MMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMM . ..qmmmmmmmmmmmmmmmmmmmmmmceeeeeeereerernmmmmmmmmmmmmheeewwilmmmmmmmmmmmmmmmmm7. MMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMM .1mmmmmmmmmmmmmmmmmmmmnterreeerereeezmmmmmmmmmmmmlweerscmmmmmmmmmmmmmmmmmm< . . MMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMM . =nmmmmmmmmmmmmmmmmmmmzsreeeeeeeeegmmmmmmmmmmmmneealnmmmmmmmmmmmmmmmmmmn$ MMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMM . . +lmmmmmmmmmmmmmmmmmmmmmchpreeeesmmmmmmmmmmmmmxcmmmmmmmmmmmmmmmmmmmmmhO. MMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMM Xqmmmmmmmmmmmmmmmmmmmmmmmmnvkhmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0. . . MMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMM %cmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmx$ . MMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMM . X0mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0X . MMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMM . @fmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd@. . . MMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMM . . .%hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmj%. . MMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMM . .=hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmh*. . . MMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMM #ymmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmu$ . MMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMM . o<hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmml1O .MMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . +1dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmh1@ . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . X%4dnmmmmmmmmmmmmmmmmmmmmmh7=X. MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . .+%<0uhcnnmmmnlhpw2=@. . . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . ... . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . . . .. . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . . . . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. . . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
- +"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM . MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"
- };
- diff --git a/share/pixmaps/bitcoin16.png b/share/pixmaps/bitcoin16.png
- index 1f459f0..eca4c53 100644
- Binary files a/share/pixmaps/bitcoin16.png and b/share/pixmaps/bitcoin16.png differ
- diff --git a/share/pixmaps/bitcoin16.xpm b/share/pixmaps/bitcoin16.xpm
- index f5becf5..e647340 100644
- --- a/share/pixmaps/bitcoin16.xpm
- +++ b/share/pixmaps/bitcoin16.xpm
- @@ -1,150 +1,117 @@
- /* XPM */
- -static char *bitcoin__[] = {
- +static char *_517408276473[] = {
- /* columns rows colors chars-per-pixel */
- -"16 16 128 2",
- -" c #3D3E3D",
- -". c #3F3F3E",
- -"X c #3E403E",
- -"o c #434343",
- -"O c #444444",
- -"+ c #454545",
- -"@ c #535353",
- -"# c #565655",
- -"$ c #585858",
- -"% c #646560",
- -"& c #656564",
- -"* c #696A68",
- -"= c #696A69",
- -"- c #808180",
- -"; c #828382",
- -": c #8A8B8A",
- -"> c #8D8E8E",
- -", c #939392",
- -"< c #929393",
- -"1 c #939493",
- -"2 c #959695",
- -"3 c #969797",
- -"4 c #979898",
- -"5 c #999A9A",
- -"6 c #9A9B9B",
- -"7 c #9B9C9C",
- -"8 c #9D9E9E",
- -"9 c #9D9EA0",
- -"0 c #A0A1A0",
- -"q c #A0A0A1",
- -"w c #A2A3A3",
- -"e c #A3A3A3",
- -"r c #A2A3A5",
- -"t c #A5A6A5",
- -"y c #A6A6A6",
- -"u c #A6A7A6",
- -"i c #A6A7A7",
- -"p c #A8A9A8",
- -"a c #A8A9A9",
- -"s c #A9A9A9",
- -"d c #AAAAAA",
- -"f c #AAABAB",
- -"g c #ABACAB",
- -"h c #ADAEAD",
- -"j c #AEAEAE",
- -"k c #AEAFAE",
- -"l c #AEAFAF",
- -"z c #AFAFAF",
- -"x c #AFB0AF",
- -"c c #B0B0B0",
- -"v c #B1B2B1",
- -"b c #B8B8B8",
- -"n c #BCBDBC",
- -"m c #BFBFBF",
- -"M c #BEBFC0",
- -"N c #BEBFC2",
- -"B c #BFBFC2",
- -"V c #C0C1C3",
- -"C c #C2C3C3",
- -"Z c #C3C3C6",
- -"A c #C6C7C9",
- -"S c #C7C8C8",
- -"D c #C8C8CA",
- -"F c #C9C9CB",
- -"G c #C9CACC",
- -"H c #CACBCD",
- -"J c #CBCCCD",
- -"K c #CCCDCE",
- -"L c #CCCDCF",
- -"P c #CECFD1",
- -"I c #D0D0D0",
- -"U c #D3D3D3",
- -"Y c #D4D4D4",
- -"T c #D4D4D5",
- -"R c #D5D6D5",
- -"E c #D4D5D6",
- -"W c #D4D5D7",
- -"Q c #D5D6D7",
- -"! c #DADBDA",
- -"~ c #DCDDDE",
- -"^ c #DFDFE0",
- -"/ c #E2E2E1",
- -"( c #E1E1E2",
- -") c #E1E1E3",
- -"_ c #E3E3E4",
- -"` c #E3E4E5",
- -"' c #E4E4E5",
- -"] c #E4E5E5",
- -"[ c #E5E5E5",
- -"{ c #E5E6E7",
- -"} c #E6E6E7",
- -"| c #E7E7E8",
- -" . c #E8E8E9",
- -".. c #E8E9E9",
- -"X. c #E9E9E9",
- -"o. c #E8E8EA",
- -"O. c #E8E9EA",
- -"+. c #EAEAEB",
- -"@. c #EAEBEB",
- -"#. c #EAEBEC",
- -"$. c #EBEBEC",
- -"%. c #EBECEC",
- -"&. c #EBECED",
- -"*. c #ECECEC",
- -"=. c #EEEEED",
- -"-. c #EDEDEE",
- -";. c #EEEEEF",
- -":. c #EFEFF0",
- -">. c #F0F0F0",
- -",. c #F0F0F1",
- -"<. c #F1F1F1",
- -"1. c #F1F2F1",
- -"2. c #F1F1F2",
- -"3. c #F1F2F2",
- -"4. c #F2F2F2",
- -"5. c #F2F2F3",
- -"6. c #F3F3F3",
- -"7. c #F3F3F4",
- -"8. c #F3F4F4",
- -"9. c #F6F6F6",
- -"0. c #F6F7F7",
- -"q. c #F8F8F8",
- -"w. c #F9F9F9",
- -"e. c #FAFAFA",
- -"r. c #FDFDFD",
- -"t. c #FEFEFE",
- -"y. c #FFFFFF",
- -"u. c None",
- +"16 16 95 2 ",
- +" c #3E3E3E",
- +". c #3F3F3F",
- +"X c gray32",
- +"o c #535353",
- +"O c gray51",
- +"+ c #838383",
- +"@ c #848484",
- +"# c gray52",
- +"$ c gray54",
- +"% c #8B8B8C",
- +"& c #8D8E8F",
- +"* c #919292",
- +"= c #929292",
- +"- c #959595",
- +"; c #999A9A",
- +": c #9A9A9A",
- +"> c gray61",
- +", c #9D9E9E",
- +"< c gray62",
- +"1 c #A0A0A0",
- +"2 c #A0A0A1",
- +"3 c #A0A1A1",
- +"4 c gray63",
- +"5 c #A4A4A4",
- +"6 c #A5A5A5",
- +"7 c gray65",
- +"8 c gray66",
- +"9 c #AAAAAA",
- +"0 c gray67",
- +"q c #ACADAE",
- +"w c gray69",
- +"e c #B1B1B1",
- +"r c #B4B6B6",
- +"t c #B6B7B7",
- +"y c #BABABB",
- +"u c #BBBDBF",
- +"i c #BCBDBE",
- +"p c gray75",
- +"a c #BEC0C2",
- +"s c #C0C0C0",
- +"d c #C1C1C1",
- +"f c gray76",
- +"g c #C2C3C5",
- +"h c #C5C7C9",
- +"j c #C7C8CA",
- +"k c #CACBCC",
- +"l c #CBCCCC",
- +"z c #CDCECF",
- +"x c #CECFD1",
- +"c c #D0D0D1",
- +"v c #D0D1D2",
- +"b c #D1D2D3",
- +"n c #D5D6D7",
- +"m c #DADADA",
- +"M c #DBDCDD",
- +"N c #DDDDDD",
- +"B c gray87",
- +"V c #DEDEDF",
- +"C c #DFDFDF",
- +"Z c #E0E1E1",
- +"A c #E1E2E3",
- +"S c #E2E2E2",
- +"D c #E2E3E3",
- +"F c #E3E4E5",
- +"G c #E5E6E6",
- +"H c #E6E6E6",
- +"J c #E6E7E7",
- +"K c #E7E7E8",
- +"L c #E9E9EA",
- +"P c #EAEBEB",
- +"I c #EBECEC",
- +"U c gray93",
- +"Y c #EDEDEE",
- +"T c #EDEEEE",
- +"R c #EEEFEF",
- +"E c #EFEFEF",
- +"W c #EFEFF0",
- +"Q c #EFF0F0",
- +"! c #F1F1F1",
- +"~ c gray95",
- +"^ c #F3F3F3",
- +"/ c #F3F4F4",
- +"( c #F4F4F4",
- +") c gray96",
- +"_ c #F6F6F6",
- +"` c #F6F6F7",
- +"' c gray97",
- +"] c #F8F8F8",
- +"[ c gray98",
- +"{ c #FBFBFB",
- +"} c #FBFCFC",
- +"| c gray99",
- +" . c #FEFEFE",
- +".. c white",
- +"X. c None",
- /* pixels */
- -"u.u.u.u.u.u.u.. . u.u.u.u.u.u.u.",
- -"u.u.u.u.+ = 3 k k 3 * + u.u.u.u.",
- -"u.u.u.$ k | .^ ( 2.&.k $ u.u.u.",
- -"u.u.$ S .H 9 3 8 t { *.S $ u.u.",
- -"u.+ x *.Q ^ f 2. .3 N T 0.v + u.",
- -"u.= *.w.7.T b r.! r | 7. . .= u.",
- -"u., 2.E Z r I r.I ; m Z A 2.1 u.",
- -". k { P J t &.r.E 6 F { 2.w.k . ",
- -". k w.2.p E r.*.f [ 2.( K { x X ",
- -"u.1 >.V - m r.( 0 k e > F 2.1 u.",
- -"u.& { *.m U w.w.2.2.>.g *. .& u.",
- -"u.+ p 0.g 5 k v c u 7 0 *.f + u.",
- -"u.u.# V #.&.2.( K N H .C # u.u.",
- -"u.u.u.@ t .0.{ ` #.{ t @ u.u.u.",
- -"u.u.u.u.o % : t t : % o u.u.u.u.",
- -"u.u.u.u.u.u.u.. . u.u.u.u.u.u.u."
- +"X.X.X.X.X.. . . . . . X.X.X.X.X.",
- +"X.X.X.. X 6 C . .N 5 X . X.X.X.",
- +"X.X.. @ _ ] _ .J L ._ @ . X.X.",
- +"X.. @ .K x 9 - l ~ ` J .+ . X.",
- +"X.X _ J q 3 ~ 3 P { v n ._ X X.",
- +". 6 ] v y S .f $ n v ] J _ 6 . ",
- +". N J I ~ w ._ 5 g _ Q i L N X ",
- +". ] ~ .n : . .0 A N = < ] ~ ",
- +". | .N k > . .9 6 f .9 T ] . ",
- +". C T j Q 3 . .T ] .f & M N . ",
- +". 6 ] L ] = w . .m < l u _ 6 . ",
- +"X.X _ .b r 3 T < i _ a M _ X X.",
- +"X.. @ .N _ r % N ] h M .@ . X.",
- +"X.X.. + _ .S M .T _ _ + . X.X.",
- +"X.X.X.. X 3 N ] ] S 6 X . X.X.X.",
- +"X.X.X.X.X. X . . . . X.X.X.X.X."
- };
- diff --git a/share/pixmaps/bitcoin256.png b/share/pixmaps/bitcoin256.png
- index cd83384..b00a8ae 100644
- Binary files a/share/pixmaps/bitcoin256.png and b/share/pixmaps/bitcoin256.png differ
- diff --git a/share/pixmaps/bitcoin256.xpm b/share/pixmaps/bitcoin256.xpm
- index 7fe1452..2b7d320 100644
- --- a/share/pixmaps/bitcoin256.xpm
- +++ b/share/pixmaps/bitcoin256.xpm
- @@ -1,390 +1,326 @@
- /* XPM */
- -static char *bitcoin___[] = {
- +static char *_517408254670[] = {
- /* columns rows colors chars-per-pixel */
- -"256 256 128 2",
- -" c #101110",
- -". c #1C1D1B",
- -"X c #1F201E",
- -"o c #21221F",
- -"O c #242523",
- -"+ c #272826",
- -"@ c #282927",
- -"# c #272828",
- -"$ c #2B2C2B",
- -"% c #2F302E",
- -"& c #30322F",
- -"* c #2F3130",
- -"= c #333533",
- -"- c #373836",
- -"; c #393A37",
- -": c #3D3E3C",
- -"> c #3F403E",
- -", c #40413F",
- -"< c #3F4140",
- -"1 c #424342",
- -"2 c #474846",
- -"3 c #484947",
- -"4 c #464748",
- -"5 c #4C4D4B",
- -"6 c #4F504E",
- -"7 c #50524F",
- -"8 c #4F5050",
- -"9 c #535453",
- -"0 c #575857",
- -"q c #585957",
- -"w c #575759",
- -"e c #575959",
- -"r c #5B5B5A",
- -"t c #5F605F",
- -"y c #60615F",
- -"u c #5F6060",
- -"i c #636463",
- -"p c #676867",
- -"a c #696967",
- -"s c #676868",
- -"d c #6B6C6C",
- -"f c #6F716F",
- -"g c #70716F",
- -"h c #6E6F70",
- -"j c #6F7071",
- -"k c #737474",
- -"l c #777877",
- -"z c #767778",
- -"x c #777879",
- -"c c #7B7C7C",
- -"v c #7F817E",
- -"b c #80807E",
- -"n c #7E7F80",
- -"m c #7F8080",
- -"M c #838585",
- -"N c #878887",
- -"B c #888987",
- -"V c #868788",
- -"C c #87888A",
- -"Z c #8A8C8C",
- -"A c #8E908F",
- -"S c #90918F",
- -"D c #8E8E91",
- -"F c #8F9091",
- -"G c #949594",
- -"H c #979897",
- -"J c #989897",
- -"K c #969798",
- -"L c #979899",
- -"P c #9B9C9C",
- -"I c #9FA09F",
- -"U c #A0A09F",
- -"Y c #9E9FA1",
- -"T c #9EA0A0",
- -"R c #A3A4A4",
- -"E c #A7A8A7",
- -"W c #A8A8A7",
- -"Q c #A6A7AA",
- -"! c #A7A8A9",
- -"~ c #AAACAD",
- -"^ c #AEB0AF",
- -"/ c #B1B0AF",
- -"( c #ADAEB2",
- -") c #AFB0B3",
- -"_ c #B2B3B6",
- -"` c #B6B7BA",
- -"' c #B7B8BB",
- -"] c #BABBBD",
- -"[ c #BDBEC1",
- -"{ c #BFC0C3",
- -"} c #C2C3C5",
- -"| c #C7C8C7",
- -" . c #C8C9C7",
- -".. c #C5C6C9",
- -"X. c #C8C7CB",
- -"o. c #C7C8CB",
- -"O. c #CACBCD",
- -"+. c #CFD0CF",
- -"@. c #CECED1",
- -"#. c #D0CFD2",
- -"$. c #CFD0D1",
- -"%. c #D2D3D4",
- -"&. c #D7D8D7",
- -"*. c #D6D6D9",
- -"=. c #D7D8D9",
- -"-. c #DBDCDC",
- -";. c #DFE0DF",
- -":. c #DEDFE0",
- -">. c #E0DFE1",
- -",. c #DFE0E1",
- -"<. c #E3E3E4",
- -"1. c #E7E7E8",
- -"2. c #E8E7E8",
- -"3. c #E7E8E9",
- -"4. c #EBECEC",
- -"5. c #F0EFEF",
- -"6. c #EEF0EF",
- -"7. c #F0F0EF",
- -"8. c #EFEFF0",
- -"9. c #EFF0F0",
- -"0. c #F4F5F6",
- -"q. c #F8F7F7",
- -"w. c #F7F8F7",
- -"e. c #F6F7F8",
- -"r. c #F8F7F8",
- -"t. c #F7F8F8",
- -"y. c #FDFDFE",
- -"u. c None",
- +"256 256 64 1 ",
- +" c #3F3F3F",
- +". c #434343",
- +"X c #4B4B4B",
- +"o c #4F4F50",
- +"O c #4F5050",
- +"+ c #535353",
- +"@ c #575858",
- +"# c #5C5C5C",
- +"$ c #5F5F60",
- +"% c #5F6060",
- +"& c #636363",
- +"* c #6C6C6C",
- +"= c #6F6F70",
- +"- c #6F7070",
- +"; c #737373",
- +": c #7B7B7B",
- +"> c #7E8081",
- +", c #848484",
- +"< c #868788",
- +"1 c #878989",
- +"2 c #8C8C8C",
- +"3 c #8E8F90",
- +"4 c #8F9090",
- +"5 c #949494",
- +"6 c #969798",
- +"7 c #979899",
- +"8 c #9C9C9C",
- +"9 c #9F9FA1",
- +"0 c #9FA0A1",
- +"q c #A3A3A3",
- +"w c #A6A7A9",
- +"e c #A7A8AA",
- +"r c #ABABAC",
- +"t c #AEAFB0",
- +"y c #AFB0B1",
- +"u c #B3B3B4",
- +"i c #B6B7B8",
- +"p c #B7B8BA",
- +"a c #B9BABC",
- +"s c #BDBFC1",
- +"d c #BFC1C2",
- +"f c #C1C2C3",
- +"g c #C6C7C9",
- +"h c #C7C8CA",
- +"j c #CCCDCE",
- +"k c #CECFD0",
- +"l c #CFD0D1",
- +"z c #D3D3D4",
- +"x c #D6D7D8",
- +"c c #D7D8D9",
- +"v c #DBDBDC",
- +"b c #DEDFE0",
- +"n c #DFE0E1",
- +"m c #E3E4E4",
- +"M c #E7E7E8",
- +"N c #E7E8E8",
- +"B c #ECECEC",
- +"V c #EFEFF0",
- +"C c #EFF0F0",
- +"Z c #F4F4F4",
- +"A c #F7F7F8",
- +"S c #F7F8F8",
- +"D c #FFFFFF",
- +"F c None",
- /* pixels */
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : ; : : : : : : : : : < : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : > : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : ; : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : ; : : : : : : : : : : : : > : : : > : : > : : : : : : : : : : : : : : > : : : : : : : : : ; : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : ; : : > : : : : : : : : : : : > : : : : : : : : : : : : : < : : : : : > > : : : : : : : : : : : : : : > : : : ; ; : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : > u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : > : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : - : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : > : : : : : : : : : - : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : ; : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : > : : : : : : : : : : : : : : : : : : : : : : ; : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : : : : > : : : : : : : : : : : : > > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : : : > : : : : : : : : : : > : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : > > : > > : : : : : : : : : : : : : : : : : > > > : : : : : : > : : : : : : : : > : : : : : > : : : : : : > : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : > : : : : : : : : : : : : : > : : : : : : : : : > : : : : : : : : : : ; ; = = = & & & & & = = = = % & & & = = & & & = & & = = ; ; : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : > : : ; ; = = = & = - : , 1 3 5 5 9 e r r r r t i i t t r r r 0 9 5 5 3 1 , : - = & = = - ; : : : , : : : : : > : : : : : : : : : : : > : : : : > : : : : : > : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : , : : - = & & $ = : 5 r s x S E ] %.<.4.4.4.8.8.9.9.9.0.8.9.0.0.4.0.4.4.4.4.4.<.%.] W G c p r 5 : = $ $ & = = ; , > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : > : : : : : : : : : : , , ; & $ $ @ $ 1 i c G ^ .<.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.1. .~ G x i 3 % @ $ $ & ; , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : : : : : > : : : : : : : : : : : : : : : > , ; @ O + @ , p Z ! .<.y.y.y.y.y.y.y.t.y.t.r.e.e.e.e.e.e.0.r.r.e.e.0.0.0.0.e.0.e.e.e.e.e.e.e.t.t.y.y.y.y.y.y.y.<. .! Z p > @ @ O $ ; , , : : : : : : : : : : : : > : : : : : : : > : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : > : > : : : : : : : : : : : : : : : : > > : $ o + = 5 c ~ O.4.y.y.y.y.y.t.e.e.e.0.e.0.e.e.r.t.e.e.e.e.e.e.t.t.e.e.e.t.e.t.t.e.e.e.r.t.e.e.e.e.e.e.0.e.e.e.t.y.y.y.y.y.4.O.~ c 5 & O O $ : > , : : : : : : : : : : : : : : : : : : : : : : > : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : > : : : : : : : : : : : : : : : : > : : : , : : - @ O ; 9 B } <.y.y.y.y.y.q.0.0.e.e.e.e.t.t.t.e.t.t.t.t.t.t.t.t.e.e.t.t.t.t.t.t.t.w.t.t.t.t.t.t.t.t.t.t.t.e.t.t.e.e.e.t.0.0.0.y.y.y.y.y.<.{ N 9 ; + + - : : , : : : : : : : : > : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : : : , : - % + = q N ] 4.y.y.y.y.y.0.0.0.t.e.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.t.t.t.t.y.t.t.t.t.t.t.t.t.e.t.t.t.t.t.t.e.0.0.t.y.y.y.y.4.] M q & + % ; : , : : : : : : : : : : : : : : > : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > : : : : : > : : : : : , : = + + 1 z ~ <.y.y.y.y.t.0.0.e.e.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.y.t.t.t.t.t.t.y.r.t.y.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.0.0.y.y.y.y.y.<.~ z 1 @ @ & : , : : : > : : : : : > : : : : : : : : > : : : : : > u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : > : : : : : , , % O + 9 P %.0.y.y.y.t.e.r.e.t.e.t.t.e.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.r.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.e.0.e.e.y.y.y.y.0.%.P 7 @ O % , , : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : > 1 & . $ y ^ <.y.y.y.t.e.e.e.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.y.t.t.y.t.t.y.t.y.t.t.t.t.t.y.t.t.t.t.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.r.t.e.e.0.e.w.t.y.y.y.<.~ y $ . $ 1 > : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : > : : : : : : > : : : : : : : : : : : , = o = k } 4.y.y.t.e.e.e.e.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.y.t.y.t.y.y.t.y.t.y.t.t.t.y.t.r.t.t.r.t.y.t.y.t.y.t.y.t.y.t.y.t.y.t.y.t.t.y.t.t.t.q.y.t.t.t.t.t.t.t.t.t.t.t.e.0.0.y.y.y.4.{ z = o = 1 > : : : : : : > : : : : : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : > : : : : : : : : : : : : : : : : : = @ = l O.0.y.y.t.e.e.r.r.t.t.t.e.t.t.t.t.y.t.y.t.t.r.y.t.t.t.t.y.y.t.t.r.t.r.t.r.t.q.y.t.t.t.t.t.t.y.y.t.y.t.t.t.y.y.t.y.q.t.t.r.t.t.r.t.t.t.y.t.t.y.r.r.t.t.r.t.t.t.t.t.t.r.t.t.t.t.r.r.t.y.y.t. .z = @ - : : : : : : : : : : : : : : : : : : > : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > : : : : : : : : > ; = ; x ..q.y.y.t.t.e.e.t.t.t.t.t.t.t.t.t.t.t.r.t.r.t.t.y.r.t.y.r.t.t.t.t.y.y.y.y.y.y.y.y.t.y.y.y.y.y.y.t.t.y.y.y.y.y.y.t.y.t.y.y.y.y.y.y.y.t.y.t.y.t.t.t.t.y.y.t.y.t.t.t.y.t.t.t.t.t.t.t.r.r.e.e.t.y.y.0...z : & ; : : : : : : : : : : : : > : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : > : : : : : > : : : : : : : : > : : : : $ ; k } 0.y.y.t.e.e.e.e.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.y.y.y.y.q.t.y.y.t.y.t.y.t.y.y.t.y.y.y.t.y.y.y.t.y.y.t.y.t.y.y.q.t.t.y.t.y.q.y.y.q.t.t.t.r.t.r.t.t.t.t.t.r.t.t.t.t.t.t.t.t.t.t.t.e.e.e.t.y.y.0.} d - $ ; > : : : : : : : : : : : : : : : : < : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : = $ r ~ 0.y.y.t.0.t.e.e.t.t.t.t.t.t.t.t.t.t.y.t.t.y.y.t.t.y.y.t.y.t.r.y.y.t.y.t.t.y.y.t.y.y.y.q.t.y.y.y.y.t.y.y.y.t.y.y.y.t.y.y.t.y.y.y.y.y.t.y.y.q.y.y.y.y.y.y.y.y.t.y.t.y.t.y.t.y.t.t.t.t.t.t.t.t.t.t.t.e.e.t.t.y.y.0.~ r & & : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : > : ; % 3 K 1.y.t.t.0.t.t.t.t.t.r.t.t.t.y.t.t.r.t.r.r.y.t.t.y.t.r.t.y.y.y.y.t.y.r.y.t.y.y.y.t.y.y.t.y.y.y.q.y.y.y.y.t.y.t.y.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.q.t.y.r.y.t.t.y.y.r.t.y.t.t.y.t.y.r.t.t.r.t.y.t.t.t.t.t.e.e.e.e.t.t.y.<.G 5 % ; , : : : : : : : : : > : : : : : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : ; = = l %.y.y.e.e.t.e.e.t.t.t.t.t.t.t.t.t.t.t.y.t.y.t.t.y.t.t.y.y.r.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.r.y.y.t.r.y.y.y.y.y.y.y.y.y.y.y.y.r.y.t.y.t.t.t.t.t.y.t.y.t.t.t.t.t.t.t.t.t.t.e.e.e.t.y.y.$.z = & : : : : : : : > : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : > : : : : : : : : : : : : : : = * 7 ~ t.y.t.e.e.e.e.t.t.t.t.t.t.t.t.t.y.t.t.y.t.t.y.r.t.y.t.y.y.y.y.y.r.y.r.r.y.t.y.y.y.y.y.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.q.y.y.t.y.t.y.t.y.y.y.y.y.r.r.y.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.e.t.t.e.e.e.t.y.t.~ 7 & = : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : > : : : : : : < > : $ = c -.y.y.q.0.e.e.t.t.t.r.t.t.t.t.y.t.t.t.y.t.t.t.t.y.y.y.y.y.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.y.y.y.y.y.t.y.y.t.y.y.y.y.y.y.y.t.y.t.t.y.t.y.t.t.t.t.t.t.t.t.e.e.e.r.y.y.=.c ; $ ; , < : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : > : : > : : : : : : : > > = O 3 ~ y.y.t.e.e.e.e.r.t.t.t.t.t.y.t.t.t.y.r.t.t.r.y.t.y.y.r.t.t.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.t.y.t.y.t.y.t.y.r.r.y.t.y.y.r.t.r.t.t.y.r.r.t.t.r.r.r.e.t.y.y.~ 3 O = , : : : : : : : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : : : : : : : , : @ O d =.y.y.0.e.e.e.e.t.t.t.t.t.t.t.t.t.t.t.r.t.y.y.y.y.y.t.y.y.y.y.y.r.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.0.0.4.<.:.-.*.%.%.@.@.O.@.@.%.@.&.*.-.:.<.4.9.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.r.y.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.e.e.0.y.y.&.d o @ > , : : : : : : : : > : : : > : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : : : : : > ; o = P y.y.0.0.e.e.e.t.t.t.t.t.t.r.t.r.y.y.t.r.y.r.y.r.y.r.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.0.5.<.=.O...{ ' ` _ ( ( ~ ( ~ ( ( ( ( ( ( ( ~ ~ ( ( _ ` ' { ..O.=.<.8.0.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.q.y.y.r.y.y.y.r.y.t.t.t.t.t.t.t.t.t.t.t.t.t.e.e.0.t.y.y.P % O ; , : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : : : : : : : 1 = O 5 { y.y.e.0.t.t.t.t.t.t.y.t.t.t.r.y.t.t.t.y.y.t.y.y.y.y.t.y.y.y.r.y.r.y.y.y.y.y.y.y.y.r.0.2.=.O.[ ` _ ( ~ ~ ( ( _ _ _ ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ) ) ( ~ ~ ( ` ` [ @.=.4.0.t.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.t.y.y.t.y.y.t.y.t.y.t.t.t.t.t.t.e.t.t.t.0.r.y.y.} 3 O = , : : : : : : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : > : : : : : : : , & + f <.y.y.0.e.e.t.t.t.t.t.t.t.t.r.t.t.t.y.t.y.r.y.t.y.r.y.y.r.y.y.y.y.y.y.y.y.y.y.y.r.4.-.X.' _ ) ( ( ( _ ` ' ' ' ' ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ' ' ' ` ` _ ( ~ ( ( _ [ O.*.>.0.y.y.y.y.y.y.y.y.y.r.r.y.y.y.y.t.y.r.y.y.y.r.t.y.r.r.t.t.y.t.t.t.t.t.t.e.e.t.y.<.d @ & : > : : : : > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : : : : : : > : @ @ Z 0.y.w.e.t.e.e.t.t.t.t.t.t.y.t.y.t.y.t.t.y.r.y.y.y.y.y.y.t.y.y.y.y.y.y.y.y.y.0.<.*..._ ( ( _ _ ` ` ' ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` [ ` ` ( Q Q E ' <.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.y.t.y.t.t.r.t.y.t.t.t.t.t.t.t.t.t.t.e.0.t.y.0.Z @ @ , : : : : : : : : : : : : > : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: > : : : : > : : : : : : : : : : > : O $ E y.y.t.0.t.t.t.t.t.t.t.t.t.t.t.t.t.t.r.y.y.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.4.%.[ ` ( ( _ ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( ( ` .:.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.r.y.y.t.y.y.t.r.y.t.t.t.y.t.t.t.r.r.t.t.0.t.y.y.E $ O : : : : > : : > : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : O ; ' y.y.0.0.e.t.t.t.t.t.t.t.t.y.t.t.y.y.r.y.r.y.t.y.r.y.t.y.y.y.y.y.y.y.y.0.:.} ` ( ( _ ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ( ~ _ [ *.8.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.y.y.t.y.y.y.y.t.y.t.t.t.t.t.y.t.t.t.e.e.e.y.y.' ; O : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > : : : : : @ 5 .y.y.0.e.e.t.t.t.t.y.t.t.t.y.t.t.y.t.r.y.t.y.t.y.y.y.y.y.y.y.y.y.y.t.8.%.[ ( ( ) ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( ( [ @.4.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.y.t.y.t.y.t.y.t.t.r.t.t.t.t.t.t.0.e.y.y.X.5 @ : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : $ r %.y.t.0.e.e.t.e.t.t.t.t.t.t.t.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.3.@.[ ( ( ( ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( ` O.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.r.y.q.t.y.t.t.t.y.t.t.t.t.t.r.t.e.e.t.y.%.r $ : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : > : : : : : : : : : , : @ i =.y.t.e.e.e.t.t.t.y.r.t.r.y.y.t.r.t.y.t.y.y.y.y.r.y.y.y.y.y.y.y.y.4.O.[ ( ( ) [ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` _ _ ` } -.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.t.y.y.t.y.t.t.y.t.y.t.t.t.t.t.e.e.y.y.&.i $ : : : : : : : : : : > : : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.> : : : : : : : : : : > : : : : : : + i -.y.t.t.r.e.t.t.t.t.t.t.t.y.t.t.y.y.y.y.t.y.r.y.y.y.y.y.y.y.y.y.8.@.' _ ) ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` _ ` ` ` ` ` ` ` ` ` ` _ ` ` ` ` ` ` ` ` ` ` ` ` ` ( ( _ ' %.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.r.y.y.r.t.t.r.r.t.t.e.t.e.e.0.t.y.-.i O : > : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : > : , : + i :.y.t.e.e.e.t.t.t.t.t.t.t.t.t.y.t.y.t.t.y.y.r.y.y.y.y.y.y.y.y.e.%.` _ ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` } X.o.o.o.o.o. .X.o.o.o...o.o...o...o.o.o...X.o.o. ...@.*.3.e.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.t.y.t.y.y.y.t.t.t.t.t.t.t.t.t.e.e.t.y.<.i + : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : @ i <.y.t.0.e.e.t.t.r.t.t.t.y.t.y.t.r.q.y.y.y.y.y.y.y.y.y.y.y.y.r.-.' ) _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` [ L n M M M M M M M M M M M M M M M M M M M M M M M M M V Y _ ( ~ ! ! W ! W ! ! ! W ! E ! W W ! W W ! ! R P &.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.y.t.y.r.t.t.y.y.t.t.t.t.t.t.t.e.t.e.y.<.i @ : : : : : : > : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : $ y ;.y.t.e.e.t.t.t.y.t.t.t.t.y.t.t.r.y.y.y.q.t.y.y.r.y.y.y.y.y.1.} ( ) ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` [ [ w + $ = % & = & & & & & & & & = & & & = & & & = % & & = $ $ @ @ $ $ @ $ $ $ @ $ $ @ $ $ @ $ $ $ @ $ $ . o ` y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.y.y.t.y.y.t.t.y.t.y.t.t.t.r.t.t.e.t.y.;.i $ : : : : : : : : : : : : : > : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : > : : : : : : @ r =.y.t.0.e.t.t.e.t.t.t.t.t.y.t.t.y.y.q.y.y.y.y.y.y.y.y.y.y.0.%.` ( ` ` ` ` ` ` ` ` ` ` ` ` _ ` ` ` ` ` ` ` } R 5 = : ; ; : : ; : : : : : : : ; : : : ; : : : : ; : : ; ; : ; ; : ; ; : ; ; ; : ; ; : ; ; : ; ; ; : : o 1 ;.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.y.r.y.t.t.t.t.t.y.t.t.t.t.t.0.t.y.&.r @ : , : : : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: > : : : : : > : : : : : : > 1 : O 5 %.y.r.e.r.t.t.t.t.t.t.t.t.y.r.t.y.y.y.y.q.y.q.y.y.y.y.y.y.1.{ ) _ ` ` ' ` ` ` ` ` ` ` ` ` ` [ ` ` ` ` ` ` ` o.D < - : < > : > > : > : > : : > : > > : : > : : : : > > : < : , : : : , : < : , : > : > > : > : > > > : O g 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.q.y.t.t.t.r.t.t.t.t.t.t.t.e.t.y.%.5 O : , : : : : : : : : : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : O : ..y.t.e.e.r.t.t.t.t.t.t.y.t.t.t.y.t.t.y.y.y.y.y.y.y.y.y.r.%.` _ ` ` ` ` ` ` ` ` _ [ ` ` ` ` ` ` ` ` ` ` ` ` [ ..x = ; < : : > : : : : > : > > > > > : > > : > : < : > : : < > : : , : : : < > : : : : > : > : > : > > = $ U y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.9.=.=.q.y.y.y.y.y.y.y.y.r.y.y.t.y.y.t.y.y.t.t.r.t.r.t.t.r.t.y...: O : > : : : : : : : > : : : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : , @ = ' y.t.e.e.e.e.t.t.t.t.y.y.t.t.y.y.q.y.y.y.y.q.y.y.y.y.y.8...( ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ [ ` u = : : < : : : : : : : : : : ; : : : ; : : : : ; : ; : ; ; ; ; ; ; : ; ; ; ; ; ; ; : ; ; : > : > > 1 $ = O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.,.@.' ( ( ..0.y.y.y.y.y.y.y.y.y.y.r.y.y.t.t.t.t.t.y.t.t.t.t.e.e.y.y.] & + > > : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : : : $ $ E y.y.t.e.e.t.t.t.t.t.t.t.t.y.r.y.t.y.y.q.y.y.y.y.y.y.y.<.` ( ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ [ _ @.E 1 = : : : : ; = % % $ = % % % % & $ % % % % % = % & & & * * = = & = % = * * = = * = & & = : > > : : > + 9 <.y.y.y.y.y.y.y.y.y.y.y.y.0.4.@.[ ( ~ _ ` ` ( ' <.y.y.y.y.y.y.r.y.y.y.y.r.y.t.t.y.t.t.t.t.t.t.t.0.0.y.y.! @ % , : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : 1 = O G y.t.0.e.e.t.t.t.t.y.r.y.y.t.t.t.y.y.y.y.y.r.y.y.y.y.y.=._ ) ' ' ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` [ _ ` ` @.D = = 1 : : : 4 x m c c c c c c c c c c c c c n c M M N M M C N M V V N M M C N M M M M Z M 8 - > > > : @ M q.y.y.y.y.y.y.y.y.y.t.9.-.[ _ ~ ( ` ` ` ` ` ' ( ` =.t.y.y.y.y.y.y.y.y.t.t.y.t.r.t.t.t.t.t.t.t.t.t.0.0.y.y.G + = : : : : > : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : > : : : > : : : : ; + g e.y.0.0.e.t.t.t.t.t.t.r.t.t.r.y.y.y.t.y.t.y.y.y.y.y.0.O.) _ ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ [ [ h = ; : : : ; n y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.r % : : > = @ / y.y.y.y.y.y.y.y.0.>. .` ( ( _ ` ` ` ` ` ` ` ` ` _ _ @.q.y.y.y.y.y.y.r.y.y.y.y.y.r.t.y.t.t.y.t.t.t.t.e.0.y.0.g O : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : > : : : : : : : : : : : > : o 9 <.y.t.e.t.t.t.r.t.t.t.t.t.t.t.y.y.y.t.y.y.y.y.y.y.y.0...( ` ' ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` _ [ ` ` ` ` ` ` ` ` ` o._ 8 $ : : , ; = _ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.4 = > > > = : O.y.y.y.y.y.t.<.$.' _ ( _ ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( ..0.y.y.y.y.y.y.y.y.t.y.y.y.t.t.y.t.t.t.t.t.t.t.0.t.y.<.5 O : > : : : : : > : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : > : O = .y.t.0.e.w.t.t.t.t.r.y.t.t.y.r.y.r.t.y.y.y.y.y.y.y.0.[ ( _ ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ [ ` ( [ R : = 1 : < ; - &.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.T = ; < : > @ i 2.y.y.y.4.*..._ ( _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ( [ 0.y.y.y.y.y.y.r.y.y.t.y.y.y.t.t.t.t.t.t.t.t.w.0.y.y...= + , , : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : , & o P y.t.0.r.t.t.t.t.t.t.t.y.t.t.y.t.y.y.q.y.r.y.y.y.y.9.' ( ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ( ~ ' *.J = = > : > = u 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.k @ > > : : + G y.9.:.} ` ( ( _ ` ' ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ` ~ ' 6.y.y.y.y.y.r.y.y.y.t.y.y.t.t.t.t.t.t.t.t.t.t.e.t.y.Y o = , : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : > : : : : : , ; O g y.y.0.e.t.t.t.t.t.t.y.t.y.t.y.q.y.y.y.y.y.y.y.y.y.8.' ( ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` _ ( ( [ @.0.y.M @ : : > : @ F y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.9 @ , : > ; = T 1.[ ( ( ( ` ' ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ( ' 4.y.y.y.y.y.r.y.y.r.y.r.y.t.y.t.y.r.t.t.t.t.e.e.y.t.g O ; : : : : : : > : : > : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : > $ 5 <.y.0.0.t.t.t.t.y.t.y.t.r.t.y.y.y.t.y.y.y.y.y.y.y.4.' ( ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ' ' ` _ _ ( ' O.<.0.y.y.q.r O , > : : $ _ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} < = , > > = 4 P [ ( _ ` ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ' ( ' 9.y.y.y.y.y.y.y.y.y.y.y.y.r.t.t.y.y.r.t.t.t.r.e.y.<.5 $ : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : > : : : : : : : : : = ; _ y.r.e.e.t.t.y.t.t.t.t.t.y.t.y.t.y.y.y.r.y.y.y.y.4.' ( ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ' ` _ ( _ ` ..-.8.y.y.y.y.y.O.> $ , : > - 2 &.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.L # : : > , $ w ( [ ` ` ` ` ` ` ` ` ` ' ` ` ' ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ' ' ( ' 4.y.y.y.y.y.y.y.r.y.t.y.y.t.t.t.t.t.t.t.t.t.w.t.y._ ; = : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : $ b y.t.0.e.e.t.t.t.y.t.r.y.y.t.y.y.y.y.t.y.y.y.y.y.8.' ( ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ) ~ _ [ %.4.e.y.y.y.y.y.y.y.U & ; > : > @ d 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.x + > : : : $ d ..[ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ` ' ` ( ' 8.y.y.y.y.y.y.y.r.y.y.y.r.y.y.r.t.t.t.t.t.e.e.t.y.M & : : : > : : : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : = 9 <.y.0.e.e.t.t.t.t.r.t.t.t.t.y.r.y.y.y.y.y.y.y.y.9.' ~ ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ( ( ' O.<.0.y.y.y.y.y.y.y.y.y.y.l O > : > : + Z y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.:.0 & , : , - : B ..[ ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ' ` ( ' 9.y.y.y.y.y.y.y.y.y.t.y.t.t.y.t.t.t.t.t.e.r.e.y.<.7 & > : : : : : : : : : : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : > : : : > : : : : : : : ; = _ y.t.q.e.r.t.t.t.t.t.t.y.t.y.t.y.y.y.t.y.y.y.y.9.{ ( ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( ` ..-.0.y.y.y.y.y.y.y.y.y.y.y.y.<.r $ > > > ; ; ` y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.' = : : : 1 $ 2 E ..` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ( { 9.y.y.y.y.y.r.t.y.y.t.y.t.t.t.t.y.t.t.t.e.e.t.y._ = ; : : : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : , : : $ c y.y.0.t.e.t.t.t.t.t.t.y.t.r.y.y.t.y.y.y.y.y.y.q...( ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` _ ` _ } =.4.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.] : = > > > % 9 <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.K # < : : : * w [ } ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` _ ( ..0.y.y.y.y.y.y.y.y.y.t.y.t.y.t.t.t.t.t.t.e.e.y.t.c $ : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : & 6 &.y.e.r.r.t.t.t.r.t.t.t.t.y.y.y.t.y.y.r.y.y.y.t.@.( ` ` ` ` ` ` ` ` ` ` ` ` ` _ _ ` [ #.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.P @ : : : > @ d 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.d = : > > ; = z } [ ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ) _ ' .,.y.y.y.y.y.y.y.r.y.y.t.r.t.y.t.y.t.t.t.t.r.e.t.y.%.5 = : : : : > : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : : ; % J y.t.e.e.r.t.t.t.r.y.t.y.t.t.y.y.r.y.y.y.y.y.y.*.( ` ` ` ` ` ` ` ` ` ` ` _ ( _ [ ..:.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.l @ : : : : = G t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.4 ; > : > = - K o.` ` ` ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ) ) ` } &.0.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.t.t.t.t.t.t.t.t.e.t.t.y.P $ ; : : : : : : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : > : : : > : : % t <.y.0.t.e.t.t.t.t.t.t.y.t.y.y.t.y.y.y.y.y.y.y.<._ _ [ ` ` ` ` ` ` ` _ _ ( ` ..*.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.&.6 & > > > = : ..y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.[ = : > : > % 1 ( o.` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` _ ( _ } %.1.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.r.t.y.t.t.y.t.r.t.e.e.y.<.r $ : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : - ; _ y.t.t.t.e.t.r.y.t.t.t.r.y.t.y.y.y.r.y.y.y.y.4.' ( ` ` ` ` ` ` ` _ _ _ } %.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.] $ = > : 1 & 5 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Z ; : > : ; = u [ } _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ _ _ ' @.:.e.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.r.t.t.t.t.t.e.t.y.` ; ; : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : > * z t.t.e.r.t.t.t.t.t.t.y.t.y.y.t.y.y.y.r.y.y.y.t...( ` ` ` ` ` _ _ _ ' @.<.e.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.S @ ; , : : = k 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.u ; : : > - = m o.' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ _ ` ` ..-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.y.r.y.t.t.t.t.t.e.e.t.e.z & > : : : : : : : > > : : , : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : , - : o.y.r.e.r.t.t.t.t.t.t.t.y.r.y.y.r.y.y.y.y.y.y.&.( ' ` ` _ ( _ ' o.-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.i @ : > : ; = ! t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.=.4 ; : > > = ; Y @.` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ' ' ` _ _ _ ` [ &.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.y.t.t.t.t.y.t.t.t.t.t.t.y. .: = > > : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : > : : : : : : : : : : 1 # v t.y.e.r.t.t.t.t.t.t.t.y.t.y.t.y.y.y.y.y.y.y.1.` _ _ ( ( _ } %.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.%.: $ 1 : 1 = - %.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.~ , : : : : = 6 ~ ..` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ) ( ) [ @.<.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.y.y.t.t.y.t.t.t.t.t.t.e.y.t.c @ , : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : : > = - o.y.t.e.e.t.t.t.y.t.t.t.r.y.r.y.y.t.y.y.y.y.q.[ Q ( ( [ %.<.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.' $ % 1 : 1 = 0 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.c ; : > : ; = a } ' ` ` ` ` ` ` ` ` ' ` ` ` ' ' ` ( ( ( ` O.-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.y.t.y.y.y.t.t.t.t.t.t.t.e.t.y. .; = , : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : , o c t.y.e.e.r.t.t.t.t.t.t.t.y.y.y.y.t.y.y.y.y.t...E ` o.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.M O ; , : , $ M q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.i = : : 1 = = M @._ ` ` ` ` ` ` ` ` ` ` ` ' _ ( ( _ } -.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.r.t.t.t.t.t.t.t.e.e.y.t.c . 1 : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : > : : > , $ - %.y.t.r.e.t.t.t.t.y.t.y.r.y.r.y.y.y.y.y.y.y.1.[ %.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.2.9 o 1 : : > + _ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y. .6 = : : : ; 1 P ..` ` ` ` ` ` ` ` ' ` ` _ ( _ ' @.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.r.y.y.r.t.t.y.t.t.r.e.t.y.@.- $ > : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : . l y.y.e.e.t.t.t.t.t.t.t.y.y.r.y.r.y.y.y.y.y.y.9.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.%.; @ , : > ; > &.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.P ; ; : > : = r _ [ ` ` ` ` ` ' ` ` _ ) ( ] O.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.t.y.t.t.t.y.t.t.e.y.y.l . > : : : : > : : : : : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : > : : : : : : , $ & ..y.t.e.e.e.t.t.t.t.y.t.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.E @ - , > , @ s 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.c @ : > : : = d } ` ` ` ` ' ` _ ) ( _ ..-.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.r.y.t.t.t.t.t.e.t.y.} % $ 1 : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : o i q.y.e.t.t.r.t.t.t.y.t.r.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.k . , > : 1 . Z y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.i $ : , , ; : M } ` ` ` _ ( ( _ [ %.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.t.y.t.t.t.t.t.t.t.y.0.i o , : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > & $ _ y.t.e.e.t.t.t.y.t.y.t.r.y.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.2.0 X , : > ; @ _ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.] 1 = : : : ; 3 Y [ ` _ ( ( ` O.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.t.y.t.y.y.t.y.t.t.t.r.t.e.t.y._ @ & < : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : > : : : : : : : : : : @ q 2.y.e.r.t.t.t.t.y.t.t.t.y.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y. .= = 1 > < @ 3 =.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Y @ ; 1 : : ; 0 ` ` ( _ o.-.8.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.t.t.t.t.t.t.t.t.t.r.y.4.0 @ : : : : : : : : : : : : : - u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : > : : : : > > ; @ U y.y.t.t.t.t.t.t.t.t.t.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.N O : : > 1 . a 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.x $ ; : , : ; d ` ..%.8.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.r.y.y.t.y.t.t.t.t.t.t.y.y.U @ - > : : : > : : : > : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : % 2 &.y.0.t.t.t.t.t.t.r.t.r.y.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-.%.` r $ , : , : o G y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.9 % : > : ; : R 8.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.e.0.y.y.y.y.y.r.t.y.t.q.t.t.t.t.t.t.t.t.0.y.&.2 $ : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : + c t.y.0.t.t.t.t.y.t.y.t.r.y.r.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.<.@.[ ' ' P 3 = > : , $ = ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} = & , : > = 3 ;.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.%.[ $.y.y.y.y.y.y.y.y.y.y.y.r.y.t.t.t.t.t.w.y.t.c @ : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.: : : : : > : : : : : : : > = - _ y.y.0.t.t.t.t.t.y.t.t.y.t.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.e.4.=.{ ' _ ` ' } Z = : , : 1 o 3 <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.P $ = > > : = d y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-.o.' ` ( ' 4.y.y.y.y.y.y.r.t.y.t.y.t.t.t.t.t.t.w.t.y._ - = : : : > : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : > : : > : > + r 2.y.e.e.t.t.t.t.t.t.t.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-...` _ ` ` ` ` ' ' z = , : : > o h 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.d $ : > > ; = P y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.O.' _ _ ` ` ` ( $.y.y.y.y.r.y.y.y.r.y.t.y.t.y.t.t.t.e.e.y.2.r + , : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.> : : : : : : : : : : : : : + B y.y.e.t.t.t.t.t.t.t.t.t.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.>.O.' ( _ ` ` ` ` ` ` [ ( w = : , , = $ R y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.2 $ > : > ; = ..y.y.y.y.y.y.y.y.y.y.q.<.E k } y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.%.[ _ ) _ ' ' ` ` ` _ ' 4.y.y.y.y.y.y.y.y.y.r.t.t.t.t.t.t.t.e.y.y.N O : : : : : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > $ : [ y.t.e.t.t.t.t.y.t.y.t.y.y.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.4.%.[ _ ( _ ` ` ` ` ` ` ` ` [ Y > : : : 1 $ = O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.' = = : > : = 7 <.y.y.y.y.y.y.y.y.4. .b 9 O , ;.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.0.=...' ( ( ` ' ` ` ' ` ` ' _ ( %.y.y.y.y.y.t.t.y.y.t.y.t.r.y.t.t.t.0.y.y.} ; $ > : > : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : , o r 0.y.e.e.t.t.t.t.r.y.t.t.y.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.8.=.} _ ) _ _ ' ` ` ` ` ` ` ` ` ' ' C - : : : , @ 0 <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.V % ; , : : % c y.y.y.y.y.y.0.&.U r : $ $ + k 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.,.o.` _ ( _ ` ` ` ` ` ` ` ` ` ` ` ( ' 0.y.y.y.y.y.y.y.y.y.t.t.t.y.r.t.t.e.t.y.0.q O , : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.: : : : : : > : : : : : , = + Z y.y.0.e.t.t.t.t.r.y.t.q.y.y.y.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.8.<. .` _ _ _ ` ' ` ` ` ` ` ` ` ` ` ` [ ` d - : : , ; + M t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.u @ , : : : @ U y.y.y.y.<./ k : & & = : : = P y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.%.' _ _ _ ` ` ` ` ` ` ` ` ` ` ` ' ` ' _ ) >.y.y.y.y.y.t.y.t.y.t.y.t.t.r.t.t.t.0.y.y.Z @ = > : : : : : : : : : : > : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : > : , @ = ..y.t.e.e.t.t.t.t.t.y.t.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.<.@.[ ) ) ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ' _ 6 = , : , = # ( y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.3 & > : > = 2 =.y.4.} Z 7 + @ ; : > > > = , O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.*.} ) ( ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ~ ..y.y.y.y.r.y.y.t.y.y.t.y.t.t.t.t.t.e.t.y...= @ , : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : , O 5 4.y.0.e.t.t.t.t.t.y.t.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.%.{ _ ~ _ ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ' [ Y , - , > > & : O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.! ; ; > > : = a O.U t = X % , > > > > : > & 7 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-...` ~ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ' _ ` 4.y.y.y.y.y.r.y.t.y.r.t.t.y.t.t.t.t.0.y.1.5 O : : : : : : : : : > : : : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : , ; @ b y.y.e.r.t.t.t.t.t.t.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.8.<.} ` ( ~ _ ` ' ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' [ c ; : , : : $ p 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.c # : : > : : 3 3 @ X & > > > : : : > > : = c 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.O.` ( ~ ) ` ' ` ' ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ( %.y.y.y.y.y.y.y.y.y.r.t.y.t.t.t.t.t.e.y.t.M + - > : : > : : : : : : : : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : > : : : , $ $ _ y.t.t.t.t.t.y.t.t.y.r.y.y.r.r.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.1.@.` ( ~ ( ` ' ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` [ [ u = : : > ; + G y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.i $ : > : > , - @ - 1 1 > > > > > > > > ; = ^ y.y.y.y.y.y.y.y.y.y.y.y.t.4.*.[ _ ( ( ` ' ' ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ' ' ~ { r.y.y.y.y.r.t.y.y.y.t.t.r.y.t.t.t.e.y.y._ @ % > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : $ 1 %.y.0.t.t.t.t.t.t.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.1.%.{ ) ( ( _ ' ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' [ ( 5 = > > , ; % ) y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y...2 = : : : : > > , > > > > > : > > : > > - ; &.y.y.y.y.y.y.y.y.y.y.8.-.o._ ( ( _ ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' _ ` 1.y.y.y.y.y.y.y.r.y.t.t.y.t.t.t.t.t.0.y.%., $ : : : : : : > : > : > : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : $ a 4.y.0.t.t.t.t.t.t.r.y.y.t.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.*...` ( ( _ ` ' ' ` ` ` ` ` ' ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ' { G 1 ; : : > % 5 %.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.E $ = 1 : 1 > : > : > : > 1 : : > > > : > = r 4.y.y.y.y.y.y.y.q.:.O.' ) ( _ ` ' ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ' ` ( &.y.y.y.y.y.y.y.y.r.y.t.t.t.t.t.t.t.0.y.6.p $ ; > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : = @ A y.y.t.t.t.t.t.y.t.y.t.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<. .' _ ( _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` ` ' ..x = : : > , + s t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.M @ : , : : : : > > > 1 ; X O : , > > > > @ B t.y.y.y.y.r.4.%.] _ ( _ ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ' ` ` ` ` ) } 0.y.y.y.y.y.r.y.t.y.r.y.t.t.t.t.t.0.y.y.Z + - > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : > : : : : : : : : : , = & ~ y.0.0.t.r.t.t.r.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.e.1.&.' _ ( ( ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` [ ' i % : < > : + D y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.:.r $ : : : : > > > > = X + i M 3 & > : > > @ ` y.y.y.4.-.} _ ( ( ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` _ ` 4.y.y.y.y.y.y.y.y.y.t.t.t.t.y.t.t.t.0.y.~ & = > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : & 3 .y.e.t.t.t.t.t.y.t.q.y.q.y.q.y.y.y.y.y.y.y.y.y.y.4.=...` ( ( _ ` ' ' ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` [ E 5 = , : > = : ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} = % : : 1 : : ; = @ 1 x / 0.>., + 1 : : = 3 *.t.<.O.` ( ( _ ` ' ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ) -.y.y.y.y.q.y.y.y.q.y.t.y.t.y.t.q.t.0.y. .3 & : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : $ p 4.y.e.t.t.t.t.y.r.t.r.y.y.y.y.y.y.y.y.y.y.y.0.:. .' _ ) _ _ ` ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` } D ; : : : , + 5 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.R # = 1 1 - = * = u R %.0.y.y.! # = 1 > 1 $ i ..@._ _ ) _ ` ' ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ( o.t.y.y.y.y.y.y.q.q.y.t.r.t.t.t.t.t.e.y.4.i % : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : : : : > : : : ; $ c y.t.r.t.t.t.t.t.t.t.t.y.q.y.t.y.r.y.y.y.1.O.[ ` ( _ ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ' ` ` ` ' ` ` ` ` ' ` ` ` ` ' ` ` ' [ x & : : , : + d y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.k @ : = # ; 5 M ..4.y.y.y.y.t.k . : : > > @ k [ ` _ ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ' _ _ ~ ' 0.y.y.y.r.y.y.y.y.t.t.y.t.y.t.t.t.e.y.y.x $ ; : : > : : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : : : : : : : : ; = G y.t.r.t.t.t.t.t.t.y.t.y.t.y.y.y.y.y.y.4._ ( _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` [ ) i = : : > = $ P y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.1 # 1 d ~ 4.0.y.y.y.y.y.y.<.9 O 1 : > : = M } ' ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' _ ( _ [ @.1.y.y.y.y.y.y.y.t.q.y.y.t.t.t.t.t.t.e.e.y.G = ; : : : : : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : : : : : : : : - > ~ y.t.e.t.t.t.t.t.t.t.y.y.y.t.y.y.y.y.y.=.( _ ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` [ R 1 ; : > 1 $ - O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.) O 8 L %.0.y.y.y.y.y.y.y.y.y.] = = , : > & 3 R } ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` _ _ ( ' O.<.0.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.t.t.t.t.t.t.y.~ > = : : : : : : : : : : > : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : : : > : : : : = 5 O.y.r.e.t.t.t.t.y.y.t.t.y.y.t.y.y.y.y.t.o.( ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` [ D - : , : , @ 9 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.o.) 4.y.y.y.y.y.y.y.y.y.y.y.y.P X , : : , @ w ' [ ` ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ' ` ` ' ` ` ` ` ` ` ` ` ` ` ` _ ` ..-.0.y.y.y.y.y.y.y.y.y.y.r.r.y.y.y.t.t.t.t.t.t.t.t.t.y. .5 = : : : : : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : : : : : : : : = r <.y.e.e.t.t.t.t.t.t.r.y.t.y.y.y.y.y.y.0.[ ( ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ _ [ ..n = : : > ; @ M y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.h O 1 : < : % k } } ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ` ' } *.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.t.t.t.t.y.t.t.t.y.<.r & : : : > : : : : : : : : ; u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : > : : : : : : : $ p y.y.0.t.t.t.y.t.t.t.r.y.y.t.y.y.y.y.y.8.` ( ' ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ' ` ` ' ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` _ ` _ ( ` { %.0.9.p ; : : , = $ ~ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.*.3 = < : < = ; G } ' ` ` ` ' ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` _ _ ( ` [ O.<.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.t.y.t.t.t.t.t.e.y.y.p % : : : : : : : : < : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : > : : : : : : : : : : = x y.y.0.e.e.t.t.t.y.y.t.y.r.y.t.y.y.y.y.<._ _ ' ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ' ` _ _ ( _ [ #.<.t.y.y.-.5 ; > : , $ : .y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.] $ : , : , $ 2 ( ..` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ' _ _ _ ( ' O.-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.t.y.t.t.t.t.t.e.y.y.x = ; : : : > : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : : : : : : : : : : ; - G y.y.e.e.e.t.t.t.t.t.y.y.t.y.y.y.y.y.y.=.( ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` _ ) ( ` O.-.0.y.y.y.y.y.~ , ; : > : $ i 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.K $ , : : : $ r ] } ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ' ` ` ` ` ` ` ` ` ` ` ` _ ) ( _ } *.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.q.t.t.t.t.t.t.t.y.y.Z ; ; : : : : : : : : : : : : : u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : : : : : > : : : : - : E y.t.r.t.t.t.y.t.y.t.y.y.y.y.y.y.y.y.y.O.~ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ) ( ` [ -.4.y.y.y.y.y.y.y.y.b - : > > - + Z y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.p = , , , - = n } ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ( ( _ [ %.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.t.y.y.y.y.t.y.t.t.t.t.t.y.W : ; : : : : : : : : : : : : : u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : : : : : : : : > : = , ] y.t.e.t.t.t.t.t.t.y.t.t.y.r.y.r.y.y.t...~ ' ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` _ ( _ [ $.4.t.y.y.y.y.y.y.y.y.y.0.r = : > > = = ( y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.: = : : , & = Y ..' ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` _ _ ` ' X.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.t.t.t.t.t.t.t.t.t.y.' 1 = : : : : : : : : : : : , : u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : : : : : : : : : > = 1 %.y.e.e.e.t.t.t.t.t.r.y.y.t.y.r.y.y.y.0.} ( ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ) ( _ [ O.,.t.y.y.y.y.y.y.y.y.y.y.y.y. .5 - : : : = 5 %.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.` = ; : 1 : * 5 ( o.` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ' ' ' ` _ ) ( ` X.-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.t.y.y.t.t.y.t.y.0.t.y.%.1 = : : : : : : : : : > : : : u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : > : : : : : : : : & 3 -.y.e.e.e.e.t.y.t.t.t.r.y.y.y.y.y.y.y.8.' ) ' ` ` ` ' ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ' ` ) ( ( ) ..-.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.P ; ; > : : $ f 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.M & : : : ; = a ' [ ` ` ' ` ` ` ` ' ` ` ` ` ` ` ' ` ` ' ' _ ( ) _ } %.1.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.t.t.t.t.t.t.w.0.y.-.2 = , : : : : > : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : > & 5 4.y.e.e.t.t.t.t.t.y.t.y.r.y.y.y.y.y.y.4.` _ ' ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ' ` _ ( ~ _ ] %.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.v $ : : > ; % C y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.e % > : 1 - * V } ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ( ~ ( ` O.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.t.y.q.y.y.t.t.t.t.t.t.t.y.1.3 & : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: ; : : : : > : > : : : : : & 6 4.y.e.t.t.t.r.y.t.y.t.y.y.y.r.y.y.y.y.1._ _ ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` _ ( ( ' O.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.e * : > > - , _ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.&.: = , : : = : Y ..` ` ` ` ` ` ' ` ` ` ` ` ` ' ' ` ~ ~ _ ..:.9.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.t.y.t.t.t.t.e.0.y.4.5 = : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : > % 9 4.y.0.e.t.t.t.t.y.t.y.y.t.y.y.y.y.y.y.>._ _ ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ( ( ` ..-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.&.~ y ; : : : > = 0 <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.' d - : : 1 : = w ( } ` ` ` ` ` ` ' ` ` ` ' ` ` _ ~ _ { &.4.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.t.t.t.r.y.4.7 % : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & 9 4.y.e.e.t.t.t.t.r.t.t.y.t.y.t.y.y.y.y.-.~ ` ` ` ` ` ` ` ` ` ` ' ` ` _ ( _ } =.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.3./ M 5 @ $ : : : > : = d y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y...L u = $ : , , : : & h [ ' ` ` ` ` ` ` ` ' ` ` _ ( ( ' @.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.t.t.t.t.t.e.e.y.4.9 = : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : > : : : : : = 0 4.y.e.e.t.t.y.r.t.y.y.t.y.y.y.y.y.y.y.*.~ ` ` ` ` ` ` ` ` ' ` ( ) _ ' #.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} N r = @ $ & : > > > : ; ; K y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.P d 2 @ @ & ; < : : : ; = V ..' ` ` ` ` ` ' ` _ ( ( ` o.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.t.t.y.y.y.t.t.t.r.t.e.y.4.0 & : : : : : : : : : : : > : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & e 8.y.0.t.t.t.t.t.t.t.t.y.t.y.y.y.y.y.y.*.~ ' ` ` ` ` ` ` ` ( _ ' ..<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.&.J y , % $ = ; : > > : : > , : > ..y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.] x 9 = $ = - : , , : : : 1 = 3 Y } ` ` ` ` ' ` ) ( ` { =.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.t.t.t.t.t.e.e.y.4.0 & : : : : > : > : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & q 4.y.e.e.t.t.t.y.y.t.y.y.y.y.t.y.y.y.y.%.~ ` ` ` ` ` _ ( _ } %.9.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.~ a , & & = : : , , : > : > : , : o : 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0...Z 5 = = & ; : : > > : : : : 1 : O 8 ` } ` ` ` ` ~ ) { @.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.t.y.t.t.t.t.t.t.t.y.4.r = : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & r 8.y.e.e.t.t.t.t.t.t.t.t.t.y.y.y.y.y.y.%.( ` ` ` ) ( [ $.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.~ 3 % & & - > , : : > : > > : : ; @ = p ~ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.%.P p = $ = = : > > > > : : > < : : = & 2 C } [ _ _ ( ' O.-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.t.y.t.t.t.t.e.y.4.r & : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : > : : : > : : : & r 4.y.0.e.t.t.t.t.y.y.y.y.t.y.y.q.y.y.y.@.~ ` ) ` @.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.q $ - , > > : : : : : : : ; - = 9 Z { 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.c : $ $ = ; > > : : > : > > : : ; - 1 s C Q [ ` _ _ ..:.0.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.t.y.t.t.y.t.t.t.e.y.4.r % > : : : > : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & r 8.y.e.e.t.t.t.t.t.t.t.y.y.y.y.y.y.y.y.@.~ ..:.8.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.%.1 ; , > > : , > : : = = ; 3 z ] <.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y._ # @ : : > , : > : : : : ; = ; 1 r n Y _ [ [ [ [ %.4.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.[ %.y.y.y.y.y.y.t.y.y.y.t.t.t.t.t.t.e.y.4.r = : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & r 9.y.e.e.t.y.t.t.y.t.t.r.t.y.r.y.y.y.y.<.<.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.W > : : : : : : = @ & 3 i P <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.C + : > > : : 1 : : : - = : 8 h K _ ` ` ` [ @.<.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.e.3.$.[ ' Q @.y.y.y.y.y.q.y.y.q.y.t.q.t.t.t.t.r.y.9.r = : : : : : : : : : : > : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : > : : > : : : : : : = r 8.y.e.e.t.t.t.t.r.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.c = : > > > : $ - i D .t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.i O > > : < : ; ; = = 3 d Z ( [ _ _ [ O.-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.=.{ ) _ ` ` ( %.y.y.y.y.t.y.y.t.y.y.t.y.t.t.t.t.0.y.4.w & : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : $ r 9.y.e.e.t.t.y.r.y.r.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.r = : : : : ; h ' 8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.&.4 % , : > 1 ; = ; r M R [ [ _ _ } =.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-...` ( ` ` ` ` ` ~ $.y.y.y.y.y.y.y.q.y.t.t.t.t.t.t.t.t.y.4.0 & : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & 0 4.y.e.e.t.t.t.t.t.t.t.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} 3 - > : > % 5 =.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.E $ : > : > = 1 z Y _ ..[ ` [ %.1.e.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.<.O.' ( ( ` ' ` ` ` ` ' ~ %.y.y.y.y.y.t.y.y.y.y.t.y.t.t.t.t.0.y.4.0 = : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : > > : : : : : : : % 0 4.y.e.e.e.t.t.t.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.J - : : > : $ k t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.M X 1 : > > $ i } O.' ' X.<.e.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.%.[ _ ( _ ' ' ` ` ` ` ` ` ` ~ =.y.y.y.y.y.y.y.y.t.y.t.t.t.t.t.t.0.y.4.0 & : : : : : , : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : = 9 4.y.0.e.t.t.t.t.t.t.t.y.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.l $ : > : : $ Z y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.r $ > > > ; & c O.O.*.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.8.-..._ _ ( _ ` ' ` ` ' ` ` ` ` ` ` ( -.y.y.y.y.t.t.y.y.t.t.t.y.t.y.t.t.0.y.4.9 = : : > : : : : : : : : : > : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: ; : : : : : : : : : : : : & 9 4.y.e.e.t.t.t.y.t.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.w = : : > - , ' y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.O.- ; > : 1 $ : ` 8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.O.' ( _ _ ` ' ' ` ` ` ` ` ` ` ` ` ` ` ( :.y.y.y.y.y.y.t.y.y.y.t.y.t.t.t.t.e.y.4.6 = : : : : : : : : : , : : ; : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : & 6 4.y.e.r.t.t.t.t.t.t.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.` - - > : > & 0 <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.! + , : : 1 X q t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.3.@.[ ) ~ _ ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` _ <.y.y.y.y.y.y.y.y.t.y.t.t.t.t.t.t.0.y.4.5 = : : : : : : : : : : : : ; : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : : : : : : : : : : : = 3 4.y.0.t.t.t.t.t.y.t.y.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.K @ ; , : : % d y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.c $ , > > ; + Z y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.=.} _ ~ ( ` ' ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' _ ` 1.y.y.t.y.y.y.y.y.y.t.t.y.t.t.y.e.e.y.4.3 = : : : : : : : : : : : : : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.: : : : > : : : : : : : : : = 2 <.y.0.e.t.t.t.t.t.t.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.g $ : > , ; = P y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.9 ; , > , $ & ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.o.` ( ~ ) ` ` ` ' ` ` ' ` ` ` ` ` ' ` ` ` ` ` ' ` ' ) ' 0.y.y.y.y.y.y.t.y.t.y.t.t.t.t.t.e.e.y.,.3 & : : : : : : : : : : : > : : u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : : : : : > : : : 1 = 1 %.y.e.e.t.t.t.t.t.t.t.y.y.t.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.+.1 = : : : = < O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.O.= > : : , + , -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.<.%.] ( ( ( _ ' ' ' ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ' ' ( [ 0.y.y.y.y.y.y.q.y.t.y.t.t.t.t.t.t.t.y.%.1 = < : : : : : : > : : : : : u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : : : : : : : : : : = , } y.r.t.t.t.y.t.t.y.y.t.r.y.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.-.G & ; 1 : : & 5 8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.R = : > > : O a 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.*.{ ` ( _ _ ` ' ' ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ' ( } r.y.y.y.y.y.t.y.y.t.t.t.y.t.t.t.e.t.y.[ 1 = : : : : : : : : : : : : ; u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : : : : : : : : : : - : ! y.r.e.t.t.t.t.t.y.q.y.y.q.y.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.5.=.{ ' ' d = : > : : = x y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.j ; < : 1 = + J y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-...' ` ( _ ` ' ' ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ' ~ O.y.y.y.y.y.y.t.y.y.y.t.y.t.t.t.t.r.t.y.! : ; : : : : : : : : : : : : : u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.: : : : > : : : : : : : : ; ; K y.y.e.e.t.t.t.t.t.t.y.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-...` ) ( [ ` 7 = : : > - * ~ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.5 ; : : 1 $ & ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.<.@.' _ ( _ ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ` ` ( %.y.y.y.y.y.y.y.y.q.t.t.r.t.t.y.t.t.t.y.G ; ; : : : : > : : : : : : : : u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : > : : : : : ; = c y.y.e.t.t.t.y.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.-.O.' ) ) ( ` ' ..R : = , : > = ; &.y.y.y.y.y.y.y.y.y.y.O.K -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.] 1 : : : : $ 9 -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.1.%.{ ) ( ) _ ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( >.y.y.y.y.y.r.y.r.y.y.t.t.t.r.t.t.e.y.y.c = ; : : : : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : > : : : : : : : : : = a y.y.0.t.t.t.t.t.t.t.t.q.y.r.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.%.} ` ( ` _ ` ` ` ' [ M ; ; > : : * i 4.y.y.y.y.y.y.y.4.E z 2 1 -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Z - : : < ; $ c y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.*...` ) ) _ ` ' ' ' ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` _ ` 4.y.y.y.y.y.y.y.y.t.t.y.t.t.y.t.t.e.y.y.a = : : : : : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.; : > : : : : : : : : : : & r 4.y.0.t.t.t.t.t.t.y.y.t.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.9.*.} ' _ _ _ ` ` ` ` ` ` [ ' i - : : > ; $ Z y.y.y.y.y.0.} m w : $ O x 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.a & : : > - % R y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.>.O.[ _ ) _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ( ' 0.y.y.y.y.y.y.y.r.r.t.t.t.y.t.t.t.t.y.4.r = : > : : : > : : : : : : - u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.; : : : : : : : : : > : : = 7 O.y.e.t.t.t.t.t.y.t.t.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.O.' ` _ ` ` ` ` ` ' ` ` ` ` { ) 8 = : > > ; % ) y.y.e.&.P w : = = - : + E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.9 - : > > = , ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.#.[ ` _ _ ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ( } t.y.y.y.y.r.y.t.y.y.y.y.t.t.t.t.t.t.y.O.6 = : : : : : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : > : : : : : : : = 1 ` y.e.e.t.t.t.t.t.t.t.y.y.y.y.y.r.y.y.y.y.y.y.y.t.1.#.' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` { G , ; , : : = 9 -.<.~ k : = - ; : : > : : .y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.~ < - > : : & y <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.3.=.} ` _ ` ` ` ` ' ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ' ` ' ` ` ` ` ` ` ` ` ` ' ` ` ` ` ( %.y.y.y.y.r.y.y.y.y.t.t.t.t.t.t.t.t.t.y._ , = > : : : : > : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : : : : : : : : ; = J y.t.0.t.r.t.y.t.y.r.y.r.r.y.y.y.y.y.y.y.y.4.*.} _ ( ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` [ ..x ; : : : : ; w n w @ $ ; : > > : : > $ r 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.M $ ; > > : % b y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.:.O.[ ( ` ' ' ' ' ' ' ' ' ' ' ' ' ` ` [ ' ' ` [ ' ' ' ' [ ' ' ' [ ' ' ' ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ( ( <.y.y.y.y.y.y.t.y.r.y.r.y.t.t.t.t.e.t.y.H - - : : : : : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.: : : : : : : : : : : : > ; $ M y.y.t.t.t.t.t.y.t.t.t.y.y.y.y.y.y.y.y.0.o.` ( ) ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` [ [ r = : < : : , ; $ % : < : > > : > : 1 . C t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.p $ : > : - ; ! y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.e.3.@.{ _ ) ` ' ' ' ' ` [ ' ' [ ' ' [ ' ' [ ' ' [ ` ' [ ' ` [ ` ' ' ' ' ' ' ' [ ` ` ` ` ` ` ` ` ` ` ` ` ` _ _ ` ` O.e.y.y.y.y.y.y.y.y.y.t.y.t.t.y.t.t.t.t.y.v $ : : : : > : : : : : : : : : u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : : : > : : $ a 8.y.0.t.t.t.t.t.r.y.r.y.y.t.r.y.y.y.y.0.] ~ ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` [ Q 5 = : : < > : , , < : > : : > > : : : @ ~ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y. .2 = > : > - 2 Z ` ~ ~ ~ ~ ~ ~ ( ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ! P C n c n M M M M M M M M M M M M M M M M M M M M n M M M M M M M M M M M M M M c Y ' ' ` ' ` ` ` ` ` _ _ _ ' } =.0.y.y.y.y.y.y.r.r.y.r.y.t.t.t.t.t.t.w.w.y.4.p $ : : : : : : : : > : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : & 7 O.y.w.t.t.t.t.t.t.t.t.y.t.y.r.y.y.y.y.y.=.( ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` o.D : - : < : : > > : : : : > > : > : 1 $ 1 %.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.! $ ; : > > : > ; = = - - ; - = = - = ; - = - ; - = - - = = = - ; ; ; ; ; ; ; ; ; ; ; - ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; = $ V } ' ` ` ' ` _ ( ( ` } &.1.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.t.t.q.w.y.+.6 & : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : > : : : : : : : = = _ y.0.t.t.t.t.t.t.y.y.t.y.y.y.y.y.y.y.y.1.) _ ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` } k * ; < : < > : : > : 1 : : : > : > 1 . u 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.C $ : > : > > : : : : ; ; ; : : ; : ; : ; : ; : ; : ; ; : : : : : ; : : ; : : ; : ; : : ; : ; ; : : ; : ; : : : ; : ; : : ; : : ; : : = 2 P } ' ` ` ) ( _ ' @.<.0.y.y.y.y.y.y.y.y.y.y.y.y.r.y.t.y.t.t.t.t.t.t.q.0.y./ = & : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : > : : : > = @ K y.t.e.t.t.t.t.t.t.t.r.t.y.y.y.y.y.y.y.0.[ / ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` [ _ r = : : : : : > < : : & = , , : : : : o V t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.r $ : : > > > : > > > , , : , : , 1 : > > : , > > , : , , : : > : : > : , : : : , : , : : : : : : : : : : : : : : , : > : > : > > : , % r ` [ _ ( ( ` ..-.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.t.t.y.y.t.t.t.t.r.y.y.G @ - : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : ; $ g 0.y.e.t.t.t.t.t.r.y.y.y.r.y.t.t.y.y.y.y.@.( ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` O.R 1 = : > : 1 : : ; $ = 1 9 1 : : , 1 = = ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.O.= = 1 > > > , > > > > : 1 1 : : , : 1 > : 1 1 > > > 1 , : : 1 1 : : 1 : 1 1 : : , : 1 1 : 1 1 1 > , 1 < < < < < : , , > : : > > : > > $ k [ _ _ } &.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.t.t.t.t.y.t.t.e.y.0.f $ ; > : : : > : : : : : > : : u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : $ 3 &.y.e.t.t.t.t.t.y.y.t.y.r.y.y.y.y.y.y.y.<._ _ ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` @.C & = 1 1 : = = = ; 9 z Q G ; ; > : 1 O 1 <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.R # = : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; - : > : : > : ; = C O.@.<.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.r.y.y.r.y.t.t.t.t.t.0.y.%.2 $ > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : 1 $ $ ` y.t.r.t.t.t.t.t.t.t.r.y.y.t.y.y.r.y.y.0.[ ( ' ` ` ` ` ' ` ` ` ` ` ` ` ` _ [ { h = ; ; = = = 3 a Z ( [ } M & : : , , O u 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.e.i . @ $ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ $ $ $ $ @ $ $ $ $ $ $ $ $ $ $ $ ; 1 > > : 1 @ 5 X.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.t.t.t.t.t.t.t.t.y.` $ $ > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : , = @ Z y.y.e.e.e.t.t.r.t.t.y.y.t.y.y.y.y.y.y.y.O.( ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ O.` 8 O @ $ ; r V R _ [ ' o.} p % : : 1 ; @ K y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.G c M V M M M C M N M N M M V V M M M C V V V M M M V V M M M C V V V M M M V V M M M C V V V V M M V V M M M C M V V Z B w = : > > , . k y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.y.q.r.y.t.t.t.t.0.y.y.Z @ = > : > : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.: : : : : : : : > : : : : : O 0 4.y.e.e.t.t.t.y.r.y.t.t.y.y.t.y.t.y.y.y.<._ _ ' ` ` ' ` ` ` ` ` ` ` ` ` ` @.K O + 5 h Y _ ' ' ` } =.0.-.2 = 1 : , $ % ..y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.t.t.t.t.y.t.t.t.t.t.t.y.t.t.t.t.y.t.t.t.t.t.t.y.t.t.t.t.y.t.t.t.t.t.t.y.t.t.t.t.y.t.t.t.t.t.t.y.t.t.t.t.y.t.t.r.r.r.y.0.d # 1 : > ; + U y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.t.y.t.t.t.t.t.e.t.e.y.4.0 + : : : : : : : : : : > : : : u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : , + - %.y.r.e.t.t.t.t.t.t.t.y.r.y.y.y.y.y.y.y.e.[ ( ' ` ` ` ` ' ` ` ` ` ` ` ` ' } M w V ` [ [ [ { $.3.q.y.y.} $ ; , : 1 $ 2 -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.-.1 = > > > @ > O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.y.y.y.r.t.t.t.t.t.y.@.= @ 1 : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.; : : : > : : : : : > : > = @ P y.y.e.r.t.t.y.t.t.t.y.t.y.t.y.y.y.y.y.y.*.( ` ' ` ` ` ` ` ` ` ` ` ' ' ' _ ~ ` } ' [ O.:.0.y.y.y.y.t.B = ; : , ; @ k 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y./ + , > > , X 9 7.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.t.t.t.t.t.t.t.e.y.y.L @ = > > : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.: : : : < : : : : : > : : 1 O u 0.y.e.r.t.t.t.t.t.y.t.t.y.y.y.y.y.y.y.y.8.` ( ` ` ` ` ` ` ` ` ` ` ` ` _ _ ` [ O.=.4.y.y.y.y.y.y.y.4.r $ > : > ; @ E y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.B $ 1 : > : O c y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.t.t.t.y.t.t.t.e.y.0.u o > : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > + : O.y.t.e.t.t.t.t.t.y.t.y.t.t.y.t.y.y.y.y.y.X.( ` ' ` ` ` ` ` ` ` ` _ ( ` [ %.4.t.y.y.y.y.y.y.y.y.y.-.1 % , > > = = .y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.r - : : , & $ / y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.t.y.y.t.y.y.t.t.t.t.t.t.y.O.: @ , : > : : : : : : : : : > : u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : : ; @ G y.y.e.e.t.y.t.t.t.y.t.y.r.y.y.y.y.y.y.y.<.) ) ' ` ` ` ` ` ` ( _ ' O.1.t.t.y.y.y.y.y.y.y.y.y.y.y./ = - > : : % e <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.%.: , : 1 , @ : +.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.t.t.t.t.t.t.e.y.y.G @ : : : : : : : > : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : + i 0.y.e.e.t.t.t.t.t.t.t.y.y.y.t.y.y.y.y.y.y...) ' ` ` ` _ ( ` O.:.0.t.y.y.y.y.y.y.y.y.y.y.y.y.y.q.c @ > : : : + M y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.! = : : : : + y 4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.t.y.t.y.t.t.t.t.t.r.e.y.0.i O : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : < : : : : : : : = : ] y.t.t.t.t.t.t.t.t.t.y.r.y.y.t.y.y.y.y.y.<.` _ ` ` ) ..=.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.q + 1 : > ; @ ! y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.x ; < : , = @ G y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.y.t.t.t.t.y.t.q.t.y.] : & : : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : @ M y.y.0.t.t.t.t.t.y.t.t.y.t.q.y.y.y.r.y.y.t..._ ] #.1.q.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.O., & , > : = 2 O.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.9 ; : : , & = ` y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.t.t.y.t.t.t.t.t.q.y.y.M + : : : > : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : $ 6 -.y.e.t.t.t.t.t.y.t.t.r.y.t.y.r.y.y.y.y.y.<.,.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.R $ : > : 1 O i 8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} 1 ; : , : $ 5 %.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.t.t.t.t.t.t.t.t.w.y.-.6 % : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > = $ ~ y.t.r.t.t.t.t.r.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.c o , > : : O m y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.G : : : , : @ k 0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.t.y.y.r.y.t.t.t.t.t.y.y.! $ = , : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : > : : : : : : @ p 9.y.e.t.t.t.t.t.t.y.r.y.t.y.r.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.r $ , , , = = _ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.d * : : , ; @ K y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.r.t.y.r.t.t.t.t.e.y.6.p + : : : : : : : : : > : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : > : : : : : : : : : : $ = } y.t.e.t.t.t.t.t.t.t.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} = ; , > , O 2 -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.0 = > > : = , ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.r.y.y.t.t.y.t.t.t.t.t.t.y.} & $ , : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : 1 : O k t.y.e.e.t.t.t.t.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.P O , > > , . u t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.) > ; : > : & r <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.r.y.r.y.y.r.t.t.t.t.t.t.e.y.t.k O : , : : : : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : , $ = +.y.t.e.t.t.t.t.y.t.t.t.r.y.r.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.k % , : > ; + F y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Z $ : , : > $ l y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.t.y.t.t.t.t.t.t.y.O.= @ , : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : > : : : : : . M y.y.t.e.t.t.t.t.t.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.5 ; : , , $ * { y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.d $ : : : ; = P y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.y.y.y.y.t.y.r.t.y.r.r.t.y.t.t.t.e.y.y.M . : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : > : : : : : : : : , + 1 -.y.r.e.t.r.y.t.y.r.y.t.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.} = : : : 1 O 1 -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.&.5 = : : , = 3 .y.y.y.y.y.y.y.y.y.y.0.*.4.y.y.y.y.y.y.y.y.y.y.y.t.t.t.t.t.t.t.e.t.y.-., @ , : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : , . D y.y.e.e.t.t.t.t.y.r.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.P = , , > : O d t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y._ $ ; > > , $ q 0.y.y.y.y.y.y.y.0.<.O._ } 0.y.y.y.y.y.y.y.r.t.y.y.t.t.y.t.t.t.e.0.y.y.Z . , : : : : : : : : > : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: > : : : : : : : : : : : : , % 1 *.y.t.e.t.t.t.t.t.t.t.r.y.t.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.a ; : : , = @ R y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.Z @ ; , : : & x y.y.y.y.y.y.2.=.[ _ ~ ) 4.y.y.y.y.r.y.t.y.y.y.y.t.t.t.t.t.t.t.t.t.y.&., & , : : : : > : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : > : 1 o Z y.y.w.w.t.t.t.t.t.t.r.t.y.y.r.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.,.2 ; > > < $ = } y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.t & : : , = ; / y.y.y.4.-.o._ ( ( _ _ :.y.y.y.y.y.y.t.y.y.t.y.y.t.r.t.t.t.t.t.t.y.t.B + , : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : - 1 %.y.0.w.t.t.t.t.y.t.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.` > : : > : $ 9 -.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.&.; = , : : * 1 -.y.,.@.' ( ( ) ` ' ) O.t.y.y.y.y.y.y.y.y.y.t.r.t.t.t.t.t.t.t.t.t.y.&.1 = > : : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : > : : : > : : : : : : : > % M y.t.t.e.t.t.t.t.t.y.t.r.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.N ; : > > - $ v y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y._ * ; > : < = 0 @.$.` ( _ _ ` ' ' ( [ 0.y.y.y.y.y.y.y.r.y.t.y.t.y.y.t.t.t.t.t.t.y.y.b % : : : > : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : - , .y.t.e.t.t.t.t.t.t.t.t.y.y.r.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.<.r = : > > = % ~ y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.M & ; > : ; = h ' ' ` ` ` ` ` ' _ _ <.y.y.y.y.y.y.y.t.y.y.y.y.t.t.r.t.t.t.t.t.e.y...> - : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : > : : : : : : : : $ d 0.y.e.e.t.t.t.t.t.t.t.t.t.y.t.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.=. .L 3 ; : > : - > v ! T T T T T T T T T T T R T T T T T T T T T T T R I T T T T T T R T T T T T T T R T T T T T T T T T T T R T T T T T T T T T T T T T T T R T T T T T T Y T T T T T T T T R T T T T T T T I I I I Y E P 5 ; : , , ; = Z ..` ` ` ` ` ' ` ~ =.y.y.y.y.y.y.y.r.y.t.y.t.t.y.t.t.t.t.t.r.e.y.0.a $ : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : - = ! y.t.w.r.t.t.t.t.t.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-.O.' ( [ n : : : > > > > & $ $ $ $ $ $ $ $ $ $ $ $ $ @ $ $ $ $ $ $ $ $ $ @ @ $ $ $ $ $ $ $ $ @ $ $ $ $ $ $ $ @ $ $ $ $ $ $ $ $ $ $ $ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ $ $ $ $ $ $ $ $ $ $ @ $ $ ; : : : : - 1 E o.` ` ' ` ` ` ( @.y.y.y.y.y.y.t.y.y.y.y.r.y.t.t.t.t.t.t.t.e.t.y.! = - : : : : : : : : : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : > $ q ,.y.w.e.e.t.t.t.t.t.t.t.t.q.y.t.y.y.y.y.y.y.y.y.y.e.<.O.[ _ _ _ ` { a = : > : > : > ; ; ; ; ; - ; ; ; - : ; ; ; ; - ; ; ; ; ; ; ; ; ; ; ; ; ; - - ; ; ; ; - ; ; ; ; ; ; ; - ; ; ; ; ; - : ; ; ; ; - ; ; ; ; ; - ; ; ; - : ; ; ; ; - ; ; ; ; ; - ; ; ; - : ; ; ; ; - ; ; ; - : - ; - ; ; - ; : : , : : = r _ { ` ` ` ` ` ( ..0.y.y.y.y.y.y.y.t.t.y.t.y.y.t.t.t.t.t.e.e.e.y.>.r $ : : : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : > : : : : : % Z y.y.e.e.t.t.t.y.t.y.y.r.y.t.y.y.t.y.y.y.y.y.y.e..._ _ _ ` ` ` { ~ 0 = : : > : > : > > > > > < < < > : < > > < > < < > > < > < < , , < < < > < < < > < > < < > > < > < > < < > > , > : < > > < > < < > > < > > < > , : < > > < > < < > > < < < < > > : < > > < > < < > > > > > > > > < < , , : : : : & z } ' ` ` ` ` ( [ 9.y.y.y.y.y.r.y.y.y.y.y.t.r.t.t.y.t.t.t.t.e.y.y.Z $ : : : : : : : > > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : : : : = , } y.e.e.e.t.t.t.t.t.t.t.t.y.y.t.y.y.y.q.y.y.y.y.<._ ( ' ` ` ` ..P 1 ; > > > : > > > > > > , > > > : : < : > : > > : : : , : : , : : : : > : > > : : > > > > > > : > : > : > > : , > : < > : : > : > > > : > : > : > : < > : : > : > > > : > : > : > : < > : : : : > : > : > : > > : : : : : , > : ; ; Z O.` ` ` ` ( ` 4.y.y.y.y.y.y.y.y.y.t.y.t.t.y.t.t.t.t.t.t.t.t.y.} , = : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : > : : : : : = i 6.y.e.e.e.t.y.t.t.t.y.r.y.t.y.y.y.y.y.y.y.y.y.y.<.) ( ' ` ` o.n $ - ; ; : ; ; : ; ; : ; ; ; ; ; : ; : : ; : ; : ; : ; : ; ; : : : : : ; ; ; ; ; : ; ; ; ; ; ; ; ; ; : ; ; ; ; ; ; ; ; : - ; : ; ; ; ; ; ; ; : ; ; ; ; : - ; : ; ; ; ; ; ; ; : ; ; - ; - : : : : ; : ; : ; : : ; : : : : : ; ; ; = 5 E [ ` ' ' ( _ 1.y.y.y.y.r.y.y.r.y.y.q.t.y.t.t.y.t.t.t.t.t.e.y.4.i = : : : : : : : : : : : > : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : : ; & G y.t.e.e.t.t.t.t.t.y.t.t.y.y.r.y.y.r.r.y.y.y.y.y.,.) ) ' [ ' u $ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; - ; ; : ; ; ; ; ; ; ; ; ; = ; ; = = = = = = = = = = = = - = = - = = = = = = = = - = = = = = = = = = = = = = = = - = = = = = = = = = = = = = = = - : : - - ; ; ; ; ; ; ; ; ; ; ; ; ; - ; ; ; ; % u [ ' ` ' ( _ <.y.y.y.y.y.y.y.y.y.q.y.y.y.t.y.r.t.t.t.t.t.e.t.y.K & ; : : : > : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : > : : : : : = > ..y.e.e.e.t.t.t.t.t.t.y.r.t.y.t.y.y.y.y.y.y.y.y.y.-._ ) [ ( n k k k l k l k k l l k k k z l k z k z k k l k k k k k z z z k h d z M B G K J K H K K H K G K G K K K H H H K H K K G K K K K H H H K K H K K H H K G K K K K H H H K K J J J P P K B M x k z k z k z k k k k l k k z k k z k k f G { ` ' ( ` <.y.y.y.y.y.y.y.r.y.y.y.q.y.r.y.t.t.t.t.t.t.t.t.y...> = : > : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : > : : : : : > : @ r 7.y.0.e.t.r.t.t.t.r.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.-._ ) ' [ [ { [ [ } [ { [ [ [ } [ [ { { [ { [ [ { { [ { { { } [ ' ` ` ' ..=.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-...{ { [ { [ [ [ [ [ { [ { { [ ] } { { [ [ { { [ ` ` ( _ <.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.r.t.t.t.t.t.t.w.y.6.r @ ; > : : : : : : : : > : : : > : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : > = + M y.y.e.t.t.t.t.t.t.t.t.y.t.r.t.y.t.y.r.y.y.y.y.y.y.-.) ( [ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] [ ] ' ] ] [ ' _ ) _ [ @.<.e.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.<. .' ` ' ] ] ' [ [ ' ] ] ] ] ] ] ] ] ] ] ] ' ] ] ] ] ' ` ( ` <.y.y.y.y.y.y.y.y.t.t.y.t.t.r.t.t.y.t.t.t.t.t.0.y.y.M + - > : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : > : : : : : > : : : : : > % % ` y.t.e.t.r.t.y.t.t.t.t.y.t.t.y.t.y.y.y.y.y.y.y.y.y.-.) ( ` ` ` ` ` ' ` ` ` ` ` ' ` ` ` _ ` ' ` ` ` ' ) ~ ~ ( } -.4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-...` ~ ( ` ` ` ` _ ` ` ` ` ' ` ` ` ' ` ` ` ' ` ` ` ' ` ` ` ` ( _ <.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.t.t.w.t.0.y.y.` % $ > : : > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : : : : : : : : > o , ;.y.e.e.t.r.t.r.y.t.y.t.t.r.y.y.y.y.t.y.y.y.y.y.y.y.<.) ( ` ` ` ` ` ` ` ` ` ' ` ` ` ' ' ` ` ' ` ) ( _ { $.4.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.O.' ~ ~ _ ` ' ` ` ` ` ` ' ` ` ` ' ' ` ` ` ' ` ` ' ` ` ` ' ' ` ` ( _ 2.y.y.y.y.y.y.y.t.y.y.y.t.t.y.t.t.t.r.t.t.y.w.0.w.y.-., o > : : : : : : > : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : > : : > : : : : > : . t 0.y.t.e.t.t.t.t.t.t.t.y.t.t.y.y.r.y.y.y.y.y.y.y.y.y.2.' ( ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` _ ( ( ' @.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.1.%.[ _ ~ ( ` ' ' ` ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ( [ 4.y.y.y.r.y.y.y.y.y.t.y.y.r.y.t.t.t.t.t.t.t.t.t.e.y.0.r X : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : 1 = O M y.y.0.t.t.t.t.y.t.t.t.t.y.t.y.y.t.t.y.y.y.y.y.y.y.y.4.[ ( ` ' ` ` ` ` ' ` ' ' ` _ ( ( ` ..=.8.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.8.-.o.` ( ( _ ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ` ' ` ( } 9.y.y.y.y.y.y.y.y.r.y.y.t.y.t.t.y.t.y.t.t.t.t.t.0.y.y.M O = , : : : : : > : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : > : : : : : : > : : : : : = @ ! y.y.0.t.e.t.t.t.t.t.t.t.t.t.r.y.y.t.y.q.y.y.y.y.y.y.0...( _ ` ` ` ` ' ` ` ( ( ( [ *.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.:.O.[ ( ( ( ` ' ' ` ` ` ` ' ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ' _ ( @.0.y.y.y.y.y.y.y.y.y.y.r.y.y.t.t.r.r.t.t.t.r.e.t.e.y.y.! @ & , : : : > : : : : : : : > : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : @ = } y.t.0.e.w.t.t.t.t.t.y.t.y.t.r.y.y.y.y.q.y.y.y.y.y.y.e.#.( _ ' ' ` _ ~ ( ` @.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.%.[ ` _ _ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ( _ =.y.y.y.y.y.y.y.y.t.y.y.t.y.t.t.y.t.y.r.t.t.t.e.e.e.y.y.} - @ : , : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : : , : O , %.y.t.0.t.t.t.t.t.t.t.r.y.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.:._ ( ( ~ ` ..-.0.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.-.} ` ) ( ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ' ` ~ ' <.y.y.y.y.y.y.y.y.y.y.y.r.y.t.t.y.r.t.t.t.t.t.t.t.e.t.y.%.> O : > : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : . 6 -.y.t.0.t.t.t.t.t.t.t.t.y.t.r.y.t.y.y.r.r.y.y.y.y.y.y.y.4.} [ &.4.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-.O.` ( ( _ ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ` ( ..0.y.y.y.y.y.y.y.y.y.t.t.y.y.r.y.t.t.t.y.t.t.t.t.t.e.t.y.-.6 X : : : : : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : , ; o i <.y.t.e.e.t.t.t.y.t.t.t.t.r.t.t.y.t.y.y.y.y.r.y.y.y.y.y.t.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.<.@.[ _ ( _ ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ) ' -.q.y.y.y.y.y.y.y.y.y.y.y.y.t.r.t.t.y.y.t.t.t.t.t.t.e.q.y.<.y X ; , : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : > : : : : : : : : ; O g 4.y.t.e.t.t.t.t.r.y.t.t.y.t.r.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.4.%...` ) _ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ' ` ` ' ` ' ` ` ` ` ` ' ` ` ` ' ` ` _ _ ..4.y.y.y.y.y.r.y.y.y.y.t.y.y.t.y.t.y.t.t.r.t.t.t.t.t.t.t.y.4.g + ; , : : : : > : : : : : : : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : 1 : $ c 4.y.t.e.t.r.t.t.t.t.t.t.t.t.t.y.y.y.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.0.-...' ` _ _ ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( ' -.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.t.y.t.t.t.t.t.t.t.t.t.q.y.4.c $ ; 1 : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : ; % c 0.y.t.t.t.t.t.t.t.t.t.y.y.t.t.y.y.y.y.y.r.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.@.` _ ` ` ` ` ' ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ( _ @.0.y.y.y.y.y.y.y.y.r.y.y.t.r.y.y.r.y.t.t.t.y.t.t.t.t.t.t.t.y.5.v $ ; , : : : : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: > : : : : : : : > : : : : : : , ; @ x 7.y.t.r.r.t.t.t.t.t.t.y.t.r.y.r.t.y.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.<.%.[ _ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` _ _ ..4.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.r.y.t.t.t.t.t.t.t.t.t.e.r.y.4.c @ ; , : : : : : : : : : : : : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > : : : > ; + c 4.y.t.r.e.t.t.t.t.t.t.t.t.t.t.y.y.r.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.0.*.} ` ( ) ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ' ` ` ` ` ' ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` _ _ } <.t.y.y.y.y.y.y.y.y.y.r.y.y.t.y.t.y.y.t.t.y.r.t.t.t.t.t.t.t.t.y.0.c @ ; , : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : , ; @ x 4.y.t.e.e.t.t.t.t.y.t.t.y.t.t.t.y.r.y.t.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.:...` _ ( ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ' ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ) ` } -.t.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.t.t.y.t.t.y.t.t.t.t.t.0.t.y.4.x @ ; , : : : : > : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : , ; $ k <.y.t.t.t.t.t.t.t.t.t.t.y.y.t.t.t.y.r.y.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.$.' _ _ _ ` ' ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ) ( _ ..-.t.y.y.y.y.y.y.y.y.y.y.r.y.r.t.y.t.y.y.t.y.t.t.t.t.t.t.t.t.t.e.t.y.<.g % ; , : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : > : $ p -.y.t.e.r.t.t.t.t.r.y.r.t.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.4.*.} _ ( ` _ ` ' ' ` ` ` ` ' ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` ' ` _ ( ( ` O.<.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.t.y.t.t.y.t.y.t.t.t.t.e.e.t.r.t.y.-.i $ : , : : : : : : : : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : > : : : : : : : : : : ; + 9 %.y.t.r.t.t.t.t.t.t.t.t.t.y.t.t.t.r.t.y.t.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.-.} ` ( ) ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ' ` ` ` ` ` ` ` ' ` ` ` ` ` ` ` ` ` ( ( _ ' %.1.y.y.y.y.y.y.y.y.y.y.y.r.q.y.y.y.y.t.y.y.t.y.t.y.t.t.t.t.t.t.r.e.e.y.y.&.7 @ ; : : : : : : : : : : : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: > : : : : : : : : : : : : : : : > : X : } y.y.t.e.t.t.t.t.t.t.t.y.t.y.t.t.y.y.t.t.y.t.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.<.O.' ( ~ _ ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ` ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ ( ( ( ` ..>.0.y.y.y.y.y.y.y.y.y.r.r.y.y.q.y.y.y.t.y.y.y.r.t.y.r.t.t.t.t.t.t.t.e.e.y.y.} : o : , : : : : : : > : : : : : : : : : > u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : > : : > : : : : : : : : : : > : o & W y.y.t.0.t.t.t.t.t.t.t.t.t.t.y.t.t.y.y.y.q.y.y.r.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.%._ ~ Q ( _ ` ' ' ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ' ' ' ` ` ` _ _ ~ _ [ o.-.9.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.t.t.t.t.t.y.t.r.t.t.t.t.t.t.0.e.y.y.! = o : : : : : : : : : : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : > : : : : : > > @ @ B 0.y.t.e.0.t.t.t.t.t.t.t.t.t.t.y.t.t.r.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.8.*...] ` _ ) ( ) _ ` ` ` ` ' ` ' ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ` ' ' ` ` ` ` _ ) ) ( ( _ } @.-.0.y.y.y.y.y.y.y.y.y.y.r.y.q.y.y.y.y.y.y.y.t.y.y.r.y.t.t.r.t.t.y.t.t.t.t.w.0.y.y.0.V @ @ > > : : : > : : : : : : : : : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : > : : : : : , * O p -.y.y.e.0.t.t.t.t.t.r.y.t.t.t.y.y.t.r.r.y.y.t.t.y.r.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.0.4.>.@.} ` ) ( ( ( ( ( ) _ ` ` ` ' ` ' ' ' ' ' ' ' ' ' ` ` ` ` _ _ ( ( ( ( ( ( ` { @.-.4.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.r.t.t.y.r.y.t.t.t.t.y.t.t.t.t.t.t.0.e.y.y.-.p O $ , : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : > < = O 1 ' y.y.q.0.e.t.t.t.t.t.t.t.t.t.t.y.t.t.y.y.t.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.0.8.1.=.@.} ] ' ` ) ( ( ~ ~ ~ ~ ( ~ ~ ~ ~ ~ ( ~ Q ~ ( ( _ _ ` ' { @.*.<.9.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.t.y.y.y.y.t.t.y.t.t.y.t.t.t.t.t.r.t.e.t.y.y.' 2 o = , : : : : : : : : : : : > : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : , : O $ B 0.y.t.0.e.e.t.t.e.t.t.t.t.t.r.t.y.t.r.y.y.r.y.r.y.r.t.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.0.0.9.3.:.-.%.@.O...} } } } } } ......O.@.%.=.>.2.0.0.e.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.t.y.y.y.r.y.y.y.r.y.r.t.y.t.t.t.t.t.t.t.t.t.t.r.0.t.y.0.B $ O : , : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : > : : : : : : : : : > : : : : $ O t ..y.y.0.e.r.e.t.t.t.t.t.t.t.r.t.t.y.t.y.t.y.y.r.y.r.y.y.y.y.y.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.r.q.q.e.t.t.t.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t.y.y.y.t.t.t.t.t.y.r.t.t.t.t.t.t.t.t.e.e.e.y.y...t o $ : > : : : : : : : : : : : : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : > : : : : : : : : : : : , = O > P 0.y.y.e.e.e.e.t.t.t.y.t.y.t.t.t.t.t.t.r.t.r.y.y.y.t.y.y.r.y.y.y.t.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.y.y.y.t.y.r.y.t.y.t.t.y.y.t.q.t.r.y.r.y.t.t.t.t.t.t.t.t.t.t.t.w.y.y.0.K , O = > : : : : > : : : : : > : : : : : : : ; u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : : : : < : : : : : : : : : : , : $ = p | y.y.t.e.r.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.t.y.t.y.t.t.r.y.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.t.y.y.y.y.t.y.y.y.y.y.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.e.e.t.y.y. .i & $ : , : : : : : : : : : : : : : : : : : : - u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : = & 1 G 4.y.y.e.e.e.e.t.t.t.t.t.t.y.t.y.t.y.t.y.y.t.t.y.y.y.y.t.t.y.y.r.y.y.r.y.y.t.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.y.y.y.y.y.r.y.r.y.r.y.y.y.y.t.t.y.y.t.t.t.t.t.y.t.y.y.t.t.r.t.y.t.t.t.t.t.r.e.y.y.2.G 1 & - : > : : : : : : > : : : : : > : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : > : : : : : : : = = r _ 0.y.t.e.e.e.t.t.r.t.t.t.t.t.t.t.y.t.t.y.t.t.t.y.t.y.t.y.y.t.y.y.y.y.y.y.y.y.r.y.y.t.q.y.r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.q.y.y.y.y.y.r.y.r.y.r.y.y.y.y.y.y.y.t.t.y.y.y.t.y.t.y.t.y.t.y.t.t.t.t.t.y.t.t.r.t.t.t.t.t.y.0._ r = = : : : : : : > : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : > : : : : : : : : > : : : : & = z .t.y.t.e.r.e.t.t.t.t.t.t.t.t.t.t.t.t.t.y.y.t.t.r.y.t.y.y.y.t.y.r.y.t.y.t.y.y.y.y.y.y.y.y.r.y.r.y.y.y.y.t.r.y.y.r.y.y.y.y.y.y.t.y.y.y.y.y.y.y.t.y.r.y.q.y.y.y.y.y.t.r.y.t.t.r.t.t.t.r.y.t.t.t.t.t.t.t.r.e.t.t.y.t.X.k = % : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : > : : : : : : : : : : : : : = @ 1 Z -.y.y.y.t.e.t.t.t.t.t.t.t.t.t.t.y.t.t.r.t.t.t.y.t.y.t.q.y.y.t.y.y.y.y.t.y.y.t.y.y.y.y.y.y.y.y.t.y.y.y.y.y.y.y.y.t.y.y.t.y.y.y.y.t.y.y.t.y.y.t.y.y.y.y.r.y.t.y.t.t.y.t.t.r.t.t.t.t.t.t.t.t.t.t.t.e.t.y.y.t.:.B , @ ; : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : > : : : : : : : : : : : = % 5 G -.y.y.y.t.t.r.t.t.t.t.t.t.t.t.t.t.t.t.r.y.y.t.t.y.t.r.t.y.y.r.t.y.t.y.y.t.y.t.y.t.y.y.y.t.t.y.y.t.y.t.y.t.y.y.y.t.y.y.r.y.q.y.y.t.y.y.r.y.t.t.t.t.t.t.t.r.y.t.r.t.t.y.t.t.t.t.t.t.t.t.e.t.t.y.y.t.-.G 5 & = : : : : : : : > : : : : : : > : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : > : : : : > : : : : : = $ 3 K -.y.y.y.t.e.e.t.r.t.t.t.t.t.t.t.y.t.t.t.y.r.t.t.t.t.t.r.y.t.t.y.y.y.y.y.y.t.y.r.y.r.y.y.y.q.y.y.y.y.r.y.t.y.y.t.y.y.t.r.y.y.q.y.t.t.t.t.y.y.t.y.t.y.r.t.t.t.t.y.t.t.t.t.t.t.t.0.t.t.y.y.y.<.K 3 $ = : : : : : : : : : : : : : : : : : : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : : > = + 5 K =.t.y.y.t.e.e.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.y.r.t.t.t.y.r.t.r.t.r.t.t.y.t.y.t.y.t.y.t.y.t.t.y.t.y.t.r.t.y.t.y.t.t.y.t.t.t.t.y.y.t.r.t.t.r.t.t.r.y.t.t.t.t.t.t.t.t.t.e.t.t.y.y.q.=.K 3 O = , : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : > : : : : : : : : : : : : : : > 1 $ X , c O.6.y.y.y.e.e.0.e.e.e.t.t.t.t.t.t.t.t.t.t.y.t.y.t.t.y.t.y.t.t.t.y.t.y.y.t.t.t.t.y.t.y.t.y.t.t.y.t.y.t.y.t.t.t.t.y.y.t.t.t.t.y.t.y.t.t.t.t.t.t.t.t.t.t.t.e.e.e.0.e.y.y.y.7. .c , X $ , , : : : > : : : : > : : : : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : > : : : : : > , > @ X = d ' <.y.y.y.y.t.e.e.e.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.t.t.t.t.t.y.y.t.t.t.t.r.r.r.y.r.t.y.t.t.t.t.y.t.t.t.t.t.y.t.t.t.t.t.t.t.y.t.t.t.t.t.t.e.e.t.y.y.y.y.>.' d = X @ , 1 : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : > : : : : : : : : : > : : : : : : : > : : : : , > $ o % 0 G .9.y.y.y.y.r.e.e.e.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.t.y.t.y.t.r.t.t.t.t.t.t.y.t.t.y.t.t.t.t.t.t.t.t.t.t.t.t.t.r.t.y.y.y.y.0. .G 0 $ O @ > 1 : : : : : : : > : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : : : , : & @ @ : k E %.y.y.y.y.y.t.e.e.w.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.0.e.0.t.y.y.y.y.t.&.E f : + @ & : 1 : : : : : : : : : : : : : : : : : : : : > : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : : : : : : : : : : : : : , : ; = # $ 5 h R =.t.y.y.y.y.y.e.w.e.t.t.t.t.t.q.t.t.t.t.t.t.t.t.y.t.t.t.t.t.t.y.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.q.t.t.t.t.0.e.y.y.y.y.y.t.=.R d 5 $ + = ; : , : : : : : : : : : : : : : : : : : > : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.; : : : : > : : : : : : : : : : : : : : : : : : : : : : : ; @ O & 2 i P .<.y.y.y.y.y.t.0.0.0.w.t.t.e.t.t.t.t.t.t.r.r.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.e.e.0.0.0.t.y.y.y.y.y.<. .P p 1 $ O $ ; : 1 : : : : : : : : : : > : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : > : : : : : : : : : : : : : : : : 1 > = O O @ = 6 c E } ;.t.y.y.y.y.y.t.t.t.t.t.t.t.t.e.e.t.r.e.e.e.0.e.t.e.e.e.e.t.r.r.e.t.t.t.t.t.t.t.t.y.y.y.y.y.t.-.} ! c 6 = $ o + = 1 : : : : : : : : : : : > : : : : : : : > : : : : : : : > : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : > : : : : : : : > : > : : : : : : : : : : : : > > 1 = @ + @ @ = 0 x P / ..<.t.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.r.<...^ P x 0 = @ @ + @ = : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : > : : : : : : : : : : : : : : : : : > : : : : : : : : 1 : - = @ $ $ @ = 3 r g M P ! ] &.<.0.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.e.1.%.] ~ J M k r 3 = @ $ $ $ & ; : , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : > > > : ; = = = & % % = : 2 9 q i a a d k z l l c c c c c c x l k k f a a i r 9 3 > & $ & & & = = ; : , , > : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : > : > : : ; ; ; ; = = = % & & = = = = = = & = = = = = = = & = % % % & = = - - ; ; : : , : , : : : : : : : : : : : : : : : , : : : < : : : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : ; : : : : : ; ; ; : : : ; : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : > : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : : : : : : : : : : > : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : > : > : : : > : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : : : : > : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : > : : : : : : : : : : : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : > : : : : : : : : : : > : : : : : : : : : : : : : : ; : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: ; : : : : : : : : : : : : : : > : : : : : : : : : : > : > : : : : : : : : > : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : ; : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : > : : : : : : : : : : : : : : > : : : : : : : : : : > : : : : : : : > : : : : : : : : : : : : : : : > : : : : : : > : : > : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : ; : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : > : : : : : : ; : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : > : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : ; : : : : : : : : : : : : : : : : > : : : : , : : : : : : : > : : > : : : : : : : : > : : : : : ; : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : ; : : : : : : : : : : - : ; : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.: : : : : : : ; : : : : : : : : : : : : u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.",
- -"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u."
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . .. .FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .. . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . .. . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF. . . . . . ..X+##%$&###oX . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . X&:7yfxmZSDDDDDDDDDDDDSBmzpr5:&X . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .X&1uzBDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSNjr,$. . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .. . @,rvSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZzr:X . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .. . X,imDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmr:X . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .&8cSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSz5# . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . .&rmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDv0% . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . #qmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDb8@ . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . X1zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj,. . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . &uZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCr# . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF .:zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj:. . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . X5mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm2. . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .X8VDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC8X . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . XwZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZqX . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF .. . X0ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDA0X . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF .2BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB4. . .. FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . ;vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDn; . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . +dDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDf+ . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .5ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ2. . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . %xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDz#. . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .7ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ2. . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .@zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDgO . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF :CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmzzvmNZSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB; . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .yDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDvjjjjkjjjzvmZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD0. . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .@xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSBvxcDDDDDDDDDDDDDDDDDDDDDDDDDDNjjjjjjjjjjjjjjxmCSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDjO . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . ;BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZmcljlzSDDDDDDDDDDDDDDDDDDDDDDDDDCkjjjjjjjjjjjjjjjjjkcNZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm% . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . 4SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZmxllkkjzZDDDDDDDDDDDDDDDDDDDDDDDDDSljjjjjjjkjjjjkjjjjkjkjjzmZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS: . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .rDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNckkkkkkkjCDDDDDDDDDDDDDDDDDDDDDDDDDDzkjjjjjkjjjjjjjjkjjjjjjjjjxDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD7 . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . XgDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZvzkzjkkkkkkMDDDDDDDDDDDDDDDDDDDDDDDDDDvjjjjjjjjjjjkkjjjjjjjjjjjjlZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDy. . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .XcDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZcjlkkkkkkkkkbDDDDDDDDDDDDDDDDDDDDDDDDDDmjjjjkjjjjjjjjjjjjjjjjjjkjjZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDf. FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF .. @mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBckkkkkkkkkkkkcDDDDDDDDDDDDDDDDDDDDDDDDDDNjjjjjjjkjjkjjjjjkjjjkjjjjjNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDlX . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFF . #MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBxlkkkkkkkkkkkjxSDDDDDDDDDDDDDDDDDDDDDDDDDCjjjjkjjjjjjjjjkkjjjjjjjjjjmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDco . . . . . .. FFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . $BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZxkkkkkkkkkkkkkjzZDDDDDDDDDDDDDDDDgSDDDDDDDZljjjjjjkjjkjjjjjjjjjjkjjjjcDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDbO FFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . $BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZvkkkkkkkkkkkkkkkkBDDDDDDDDDDDDDDDv- aDDDDDDSzjjjjjkjjjjjjjjjjjjjjjjjjjzSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmX . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFF . #BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmzlkkkkkkkkkkkkkkkNDDDDDDDDDDDDDSB2 >DDDDDDcjjjjjjjjjkjjjjkjljjjjjjljkZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmO . FFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFF . . . #NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBzjljkjkkkkkkkkkkkjvDDDDDDDDDDDDDm0 XDDDDDmjjkjjkjjjjjjjjjjjjjjjjjjjjZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDvX . FFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFF +mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSvkkkkkllkkkkkkkkkjkxDDDDDDDDDDDDDh NDDDNjjjjjjjjjjkjjjjjjjjjjjljjjMDDDDDDDDDDDDDDDDDDDDDDDDDDSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDcX. . FFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFF . . XvDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBzkkkkkkkkkkkkkkjjlzzADDDDDDDDDSDm; uDDCjjjkjkjjjjjjjjjkjjjkjjjjjlnDDDDDDDDDDDDDDDDDDDDDDDDDDmgmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj. . . . . FFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFF. . .jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDvkjkkkkkkkkkkkkkkzjljZDDDDDDDDDDZ5. ;DSljjjjjjjjjkjjjjjjjjjjjjkjjcDDDDDDDDDDDDDDDDDDDDDDDDDDBgggzZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDa. FFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFF . . . pDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZzkkkkkkkkkkkkkkkkkjlkNDDDDDDDDDDrX BcjjkjjjjjjjjjjjjjjkjjjjjjjlSDDDDDDDDDDDDDDDDDDDDDDDDDZjggggjNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDr . . FFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFF . 8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDNkkklkkkkkkkkkkkkkkkzjmDDDDDDDDDz& pjjjjjjjjkjjjjkkjjjjjjjjkjlSDDDDDDDDDDDDDDDDDDDDDDDDDAkgggggggvDDDDDDDDDDDDDDDDDDDDDDDDDDDDD2 . . FFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFF . :DDDDDDDDDDDDDDDDDDDDDDDDDDDDSvkkkkkkkkkkkkkkkkkkkkkvDDDDDDDDn* 2jjjjjjkjjjjjjjjjkjjjjjjjjCDDDDDDDDDDDDDDDDDDDDDDDDDDzgggggggggzADDDDDDDDDDDDDDDDDDDDDDDDDDDS; . . FFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFF . . &ZDDDDDDDDDDDDDDDDDDDDDDDDDDDZxkkkkkkkkkkkkkkkkkkkkkzDDDDDDDZ8 &jjkjjjjjjjjjkjjjjjjjkjjjMDDDDDDDDDDDDDDDDDDDDDDDDDDvfhgggggggggjZDDDDDDDDDDDDDDDDDDDDDDDDDDDZ# . FFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFF XmDDDDDDDDDDDDDDDDDDDDDDDDDDDZzjkkkkkkkkkkkkkkkkkkkjzZDDDDDSa+ Xqc gjjjjkjjkjjjjjjkjjkjjjjvDDDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggggNDDDDDDDDDDDDDDDDDDDDDDDDDDDmX . . FFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFF . . . gDDDDDDDDDDDDDDDDDDDDDDDDDDDNkkkkkkkkkkkkkkkkkkkkkklBDDDDDc* ;BDSO wjjjjjkjjjkjjjjjjjjjjkcDDDDDDDDDDDDDDDDDDDDDDDDDDBggggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDDDf . . FFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFF . 7DDDDDDDDDDDDDDDDDDDDDDDDDDDmkkkkkkkkkkkkkkkkkkkkkkkNDDDSm1 &xDDDD, ;jjkjjjjjkjjkjjjjjjkjlSDDDDDDDDDDDDDDDDDDDDDDDDDZjgggggggggggggggggvDDDDDDDDDDDDDDDDDDDDDDDDDDD5 FFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFF . . . *SDDDDDDDDDDDDDDDDDDDDDDDDDDmllkkkkkkljkkkkkkkkkkkkjbDDDSw +rZDDDDDp +jjjjjjjjjjjjjjjjjjjlZDDDDDDDDDDDDDDDDDDDDDDDDDSkgggggggggggggggggggxDDDDDDDDDDDDDDDDDDDDDDDDDDS* . FFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFF . XmDDDDDDDDDDDDDDDDDDDDDDDDDDnkkkjlllkklkkkkkkkkkkkkkcDDDf# 7ZDDDDDDDB ajjjjjkjjjjjjjkjjjjCDDDDDDDDDDDDDDDDDDDDDDDDDDzgggggggggggggggggggggxSDDDDDDDDDDDDDDDDDDDDDDDDDMX . . . . FFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFF . pDDDDDDDDDDDDDDDDDDDDDDDDDDbkkkkkljkkkkkkkkkkkkkkkkzSDn- :nDDDDDDDDDS+ 5jjkjjjjjjkjjjjjjjMDDDDDDDDDDDDDDDDDDDDDDDDDDvgggggggggggggggggggggggxDDDDDDDDDDDDDDDDDDDDDDDDDDa . FFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFF . . :DDDDDDDDDDDDDDDDDDDDDDDDDDbkkkkkkkkkjzjkkkkkkkkkjlzZZ5 %jDDDDDDDDDDDD7 @fgjjjjjkjjkjjjjjvDDDDDDDDDDDDDDDDDDDDDDDDDDmgggggggggggggggggggggggggvDDDDDDDDDDDDDDDDDDDDDDDDDD, . . FFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFF . . oBDDDDDDDDDDDDDDDDDDDDDDDDDnkkkkkkkkkkllkkkkkkkkkkllByX .qSDDDDDDDDDDDDDz hhjjjjjjjjjjjjjcDDDDDDDDDDDDDDDDDDDDDDDDDDBggggggggggggggggggggggggggNDDDDDDDDDDDDDDDDDDDDDDDDDDZ+ FFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFF. . aDDDDDDDDDDDDDDDDDDDDDDDDDmlkkkkkkkkkkljljkkkkkkkkhr+ .2VDDDDDDDDDDDDDDDA. rjjkjkjjjjjjjjzSDDDDDDDDDDDDDDDDDDDDDDDDDZjgggggggggggggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDDDDh FFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFF :DDDDDDDDDDDDDDDDDDDDDDDDDMjkkkkkkkkkkkljllkkkkkkza& -cDDDDDDDDDDDDDDDDDD* ,kjjjjjjjkjjjzZDDDDDDDDDDDDDDDDDDDDDDDDDSkgggggggggggggggggggggggggxDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD,. . . . . FFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFF . .NDDDDDDDDDDDDDDDDDDDDDDDDBlkkkkkkkkkkkkljllkkjjkh, fDDDDDDDDDDDDDDDDDDDDr #jjjjjkjjjjjjBDDDDDDDDDDDDDDDDDDDDDDDDDDzgggggggggggggggggggggggggkDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBX . . . . FFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFF . . . rDDDDDDDDDDDDDDDDDDDDDDDDZjlkkkkkkklkkkkljljkklh8X 8BDDDDDDDDDDDDDDDDDDDDDm gjjjjjjjjjjmDDDDDDDDDDDDDDDDDDDDDDDDDDvgggggggggggggggggggggggggjADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDi FFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFF . &SDDDDDDDDDDDDDDDDDDDDDDDSzkkkkkkkjjlkkkklljllj8@ >NDDDDDDDDDDDDDDDDDDDDDDDD+ 8jjjjjjjjjvDDDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggggggggggggggggZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD* .FFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFF . jDDDDDDDDDDDDDDDDDDDDDDDDxkkkkkkkllkkkkkkjlllf; &zDDDDDDDDDDDDDDDDDDDDDDDDDD1 ;jjjkjjjjxDDDDDDDDDDDDDDDDDDDDDDDDDDBggggggggggggggggggggggggggNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDc. . . FFFFFFFFFFFFF",
- +"FFFFFFFFFFFFF . :DDDDDDDDDDDDDDDDDDDDDDDDvljllkkkkkkkkkkkkkjj2 .tDDDDDDDDDDDDDDDDDDDDDDDDDDDDf .jjjjjjjlSDDDDDDDDDDDDDDDDDDDDDDDDDZjgggggggggggggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD2 . FFFFFFFFFFFFF",
- +"FFFFFFFFFFFF . . .mDDDDDDDDDDDDDDDDDDDDDDDNzllljkkkkkkkkkkkkkq+ 5CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ ujkjjjlZDDDDDDDDDDDDDDDDDDDDDDDDDSkgggggggggggggggggggggggggcDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNX . . FFFFFFFFFFFF",
- +"FFFFFFFFFFFF . . 4DDDDDDDDDDDDDDDDDDDDDDDZlkllljkkkkkkjlkkjg# ;nDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD* 2jjjjlBDDDDDDDDDDDDDDDDDDDDDDDDDDzggggggggggggggggggggggggglSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8 . . . FFFFFFFFFFFF",
- +"FFFFFFFFFFF . XBDDDDDDDDDDDDDDDDDDDDDDDcjkjjllkkkkkkklkkkh #fDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD0 &jjjjmDDDDDDDDDDDDDDDDDDDDDDDDDDvgggggggggggggggggggggggggjADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZX . FFFFFFFFFFF",
- +"FFFFFFFFFFF . 8DDDDDDDDDDDDDDDDDDDDDDDmjkklljzjkkkkkjllkkk& .wSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDc gjjvDDDDDDDDDDDDDDDDDDDDDDDDDDMggggggggggggggggggggggggggZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDw . FFFFFFFFFFF",
- +"FFFFFFFFFF . . XCDDDDDDDDDDDDDDDDDDDDDDZkkkkzjkkkkkkjkkkkkkk3 :MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS qjxDDDDDDDDDDDDDDDDDDDDDDDDDDBggggggggggggggggggggggggggNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZX . . FFFFFFFFFF",
- +"FFFFFFFFFF . 8DDDDDDDDDDDDDDDDDDDDDDDxkkkkjlkkkkkklkkkkkkjp XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD; ;lZDDDDDDDDDDDDDDDDDDDDDDDDDZjgggggggggggggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDq . FFFFFFFFFF",
- +"FFFFFFFFFF . . XCDDDDDDDDDDDDDDDDDDDDDDmjkkkkjlkkkkkklkkkkkjzjO BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDy .ZDDDDDDDDSDDDDDDDDDDDDDDDDSkgggggggggggggggggggggggggxDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ.. . FFFFFFFFFF",
- +"FFFFFFFFF . . 5DDDDDDDDDDDDDDDDDDDDDDSzjkkkkkkkkkkkkkkkkkkkkg& aDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj mDDDDDDDD,cDDDDDDDDDDDDDDDxgggggggggggggggggggggggggkDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD5 FFFFFFFFF",
- +"FFFFFFFFF . .NDDDDDDDDDDDDDDDDDDDDDDcjllkkkkkkkkkkkkkkkkkkkj- 2DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ uDDDDDDDq 8DDDDDDDDDDDDDDvgggggggggggggggggggggggggjZDDDDDDDDDDDDDDDDDDDDDDDDDSDDDDDDDDDDDDDDDDDDDDDDB. . . FFFFFFFFF",
- +"FFFFFFFF . ,DDDDDDDDDDDDDDDDDDDDDDBljljlkkkkkkkkkkkkkkkkkkCs @DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ5 :DDDDDDa &DDDDDDDDDDDDDmggggggggggggggggggggggggggZDDDDDDDDDDDDDDDDDDDDDDDDDAjVDDDDDDDDDDDDDDDDDDDDDD> FFFFFFFF",
- +"FFFFFFFF . . . cDDDDDDDDDDDDDDDDDDDDDDxklljlkkkkkkkkkkkkkkkkkNDA mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDg .SDDDDz. ZDDDDDDDDDDDBggggggggggggggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDSjfhDDDDDDDDDDDDDDDDDDDDDDc . .. FFFFFFFF",
- +"FFFFFFFF . . *DDDDDDDDDDDDDDDDDDDDDDmjkkkkkkkkkkkkkkkkkkkllnDDD: yDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ. zDDDm. aDDDDDDDDDDZjgggggggggggggggggggggggggbDDDDDDDDDDDDDDDDDDDDDDDDDDzdffmDDDDDDDDDDDDDDDDDDDDDD& . FFFFFFFF",
- +"FFFFFFF .pDDDDDDDDDDDDDDDDDDDDDDzlkkkkkkkkkkkkkkkkkkklvDDDDi :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD- 5DDZ& <DDDDDDDDDSkgggggggggggggggggggggggggxDDDDDDDDDDDDDDDDDDDDDDDDDDvfffdfSDDDDDDDDDDDDDDDDDDDDDi . . FFFFFFF",
- +"FFFFFFF . XADDDDDDDDDDDDDDDDDDDDDNkkkkkkkkkkkkkkkkkkkkkzSDDDDB XSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDw %DS; XDDDDDDDDDzgggggggggggggggggggggggggkSDDDDDDDDDDDDDDDDDDDDDDDDDmffdfffvDDDDDDDDDDDDDDDDDDDDDAX. . . FFFFFFF",
- +"FFFFFFF . . 5DDDDDDDDDDDDDDDDDDDDDSzjkkkkkkkkkkkkkkkkklllZDDDDDD* zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDv N4 vDDDDDDDvgggggggggggggggggggggggggjZDDDDDDDDDDDDDDDDDDDDDDDDDVffffffffADDDDDDDDDDDDDDDDDDDDD4 FFFFFFF",
- +"FFFFFF cDDDDDDDDDDDDDDDDDDDDDMkkkkkkkkkkllkkkkkkkkkCDDDDDDD0 8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD+ - 5DDDDDDMggggggggggggggggggggggggggZDDDDDDDDDDDDDDDDDDDDDDDDDZffffdfdffvDDDDDDDDDDDDDDDDDDDDDc . . FFFFFF",
- +"FFFFFF . . .. . . &DDDDDDDDDDDDDDDDDDDDDDzlkkkkkkkzjjlkkkkkkkkNDDDDDDDDx *DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD, &SDDDDVggggggggggggggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDSjffffffffffDDDDDDDDDDDDDDDDDDDDDD& . FFFFFF",
- +"FFFFFF rDDDDDDDDDDDDDDDDDDDDDNlkkkkkkkkjkjllljkkkknDDDDDDDDDDX CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDa .ZDDDZjgggggggggggggggggggggggggvDDDDDDDDDDDDDDDDDDDDDDDDDSzffffdffdfffmDDDDDDDDDDDDDDDDDDDDDw. . . FFFFFF",
- +"FFFFF .NDDDDDDDDDDDDDDDDDDDDDcjkkkkkkkkkklljjzjkkcDDDDDDDDDDD> aDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB fDDAkgggggggggggggggggggggggggxDDDDDDDDDDDDDDDDDDDDDDDDDDcffffffffffffkDDDDDDDDDDDDDDDDDDDDDN . FFFFF",
- +"FFFFF . . . *DDDDDDDDDDDDDDDDDDDDDZkkkkkkkkkkkkjlllkklxSDDDDDDDDDDDw :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@ 2DDxgggggggggggggggggggggggggkSDDDDDDDDDDDDDDDDDDDDDDDDDmfffdffdfffffdfZDDDDDDDDDDDDDDDDDDDDD* . FFFFF",
- +"FFFFF . rDDDDDDDDDDDDDDDDDDDDDnkkkkkkkkkkkklkjlkllZDDDDDDDDDDDDm XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD5 +DvgggggggggggggggggggggggggjADDDDDDDDDDDDDDDDDDDDDDDDDBffdfffffffdffffcDDDDDDDDDDDDDDDDDDDDDr.. . . FFFFF",
- +"FFFFF mDDDDDDDDDDDDDDDDDDDDSzkkkkkkkkkkkkkkkkkkBDDDDDDDDDDDDDS% vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDk @ jhgggggggggggggggggggggggggBDDDDDDDDDDDDDDDDDDDDDDDDDZgfffffdffdffffffgDDDDDDDDDDDDDDDDDDDDDN. FFFF",
- +"FFFF . . &DDDDDDDDDDDDDDDDDDDDDBjkkkkkkkkkkkkkkkkkNDDDDDDDDDDDDDDD7 wDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS. %B egggggggggggggggggggggggggMDDDDDDDDDDDDDDDDDDDDDDDDDSjfffffffffffffdfffNDDDDDDDDDDDDDDDDDDDDD& . . FFFF",
- +"FFFF. . . 8DDDDDDDDDDDDDDDDDDDDDckkkklkkkkkkkkkkkkbDDDDDDDDDDDDDDDDj OCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD: XND: :hgggggggggggggggggggggggvDDDDDDDDDDDDDDDDDDDDDDDDDSlffffffffffdfffffdfxDDDDDDDDDDDDDDDDDDDDDq . . FFFF",
- +"FFFF zDDDDDDDDDDDDDDDDDDDDSkkkkkkkkkkkkkkkkzcDDDDDDDDDDDDDDDDDZ. .VDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDr zDDu @fggggggggggggggggggggggzDDDDDDDDDDDDDDDDDDDDDDDDDDvffdffffdfffffffffffgSDDDDDDDDDDDDDDDDDDDDc FFFF",
- +"FFF . . XSDDDDDDDDDDDDDDDDDDDDNzkkkkkkkkkkkkkkkzSDDDDDDDDDDDDDDDDDD- hDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm uDDDm ugggggggggggggggggggggkSDDDDDDDDDDDDDDDDDDDDDDDDDMfdffffddffdffffsfffffmDDDDDDDDDDDDDDDDDDDDD+ . . . FFF",
- +"FFF :DDDDDDDDDDDDDDDDDDDDDckkkkkkkkkkkkkkkzZDDDDDDDDDDDDDDDDDDDq 4DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@ :BDDDD+ ,ggggggggggggggggggggjZDDDDDDDDDDDDDDDDDDDDDDDDDCfffffffffffffdfffffffdzDDDDDDDDDDDDDDDDDDDDD, . FFF",
- +"FFF . . rDDDDDDDDDDDDDDDDDDDDSkkkkkkkkkkkklkjkBDDDDDDDDDDDDDDDDDDDDc $DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD2 ,DDDDDD4 #ggggggggggggggggggggBDDDDDDDDDDDDDDDDDDDDDDDDDZgffffffdfffffffsffffffffZDDDDDDDDDDDDDDDDDDDDp FFF",
- +"FFF . . vDDDDDDDDDDDDDDDDDDDDBkkkkkkkkkkkkkkjNDDDDDDDDDDDDDDDDDDDDDSX NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDf *SDDDDDDg gggggggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDDjfffffffffdffdfffffffffffmDDDDDDDDDDDDDDDDDDDDN. .. . FFF",
- +"FFF . XSDDDDDDDDDDDDDDDDDDDDbzkkkkkkkkkkkkjmDDDDDDDDDDDDDDDDDDDDDDD: iDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ#NDDDDDDDC ugggggggggggggggggvDDDDDDDDDDDDDDDDDDDDDDDDDDzfffdffffffffffffffdffdfffjDDDDDDDDDDDDDDDDDDDDD@ . FFF",
- +"FFF.. .;DDDDDDDDDDDDDDDDDDDDDzjkkkkkkkkkkkkcDDDDDDDDDDDDDDDDDDDDDDDDr ,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBDDDDDDDDZ@ 1ggggggggggggggggzDDDDDDDDDDDDDDDDDDDDDDDDDDbffffffffdffdffdfffffffffffmDDDDDDDDDDDDDDDDDDDDD, . . FF",
- +"FF .8DDDDDDDDDDDDDDDDDDDDZjjkkkkkkkkkkkzSDDDDDDDDDDDDDDDDDDDDDDDDc XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDw &gggggggggggggggkSDDDDDDDDDDDDDDDDDDDDDDDDDNfffffdfdffdffffffsfsffdffdvDDDDDDDDDDDDDDDDDDDDDDt . FF",
- +"FF . . . . hDDDDDDDDDDDDDDDDDDDDmklkkkkkkkkkkzZDDDDDDDDDDDDDDDDDDDDDDDDDS cDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDv .fgggggggggggggjZDDDDDDDDDDDDDDDDDDDDDDDDDZgffsffffffffffffffffffdfffzDDDDDDDDDDDDDDDDDDDDDDDc . . FF",
- +"FF BDDDDDDDDDDDDDDDDDDDDckkkkkkkkkkkkBDDDDDDDDDDDDDDDDDDDDDDDDDDc& 9DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSX qgggggggggggggBDDDDDDDDDDDDDDDDDDDDDDDDDShffffffffddffdfffffffffdfdjSDDDDDDDDDDDDDDDDDDDDDDDS. FF",
- +"FF . +DDDDDDDDDDDDDDDDDDDDSkkkkkkkkkkkkmDDDDDDDDDDDDDDDDDDDDDDDDDDmh, &DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD> :ggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDDDjffdffffdfffffffsfffffffffgZDDDDDDDDDDDDDDDDDDDDDDDDD& . . . FF",
- +"FF .. ;DDDDDDDDDDDDDDDDDDDDZkkkkkkkkkkkbDDDDDDDDDDDDDDDDDDDDDDDDDDNggt .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDp XfggggggggggvDDDDDDDDDDDDDDDDDDDDDDDDDDcfdfffffffffadffffdffffffffVDDDDDDDDDDDDDDDDDDDDDDDDDD1 FF",
- +"FF .. 6DDDDDDDDDDDDDDDDDDDDmkkkkkkkkklcDDDDDDDDDDDDDDDDDDDDDDDDDDZggggX jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB ygggggggggzDDDDDDDDDDDDDDDDDDDDDDDDDDmffffffffffa,XrffffffffffffmDDDDDDDDDDDDDDDDDDDDDDDDDDDr . . . F",
- +"F iDDDDDDDDDDDDDDDDDDDDvkkkkkkkkkzSDDDDDDDDDDDDDDDDDDDDDDDDDSjgggg* 5DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD& 2ggggggggkADDDDDDDDDDDDDDDDDDDDDDDDDBfffffffffd4X ,dffffffdfffvDDDDDDDDDDDDDDDDDDDDDDDDDDDDh . . F",
- +"F . . xDDDDDDDDDDDDDDDDDDDDzkkkkkkkjzZDDDDDDDDDDDDDDDDDDDDDDDDDSzggggs< &DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD7 %ggggggggZDDDDDDDDDDDDDDDDDDDDDDDDDZhffffffdf8@ $ffdfffffffzDDDDDDDDDDDDDDDDDDDDDDDDDDDDDN F",
- +"F . .BDDDDDDDDDDDDDDDDDDDSlkkkkkkklBDDDDDDDDDDDDDDDDDDDDDDDDDDxggggggp BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj sggggggBDDDDDDDDDDDDDDDDDDDDDDDDDSjffffffdq+ iffffffffhSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS.. F",
- +"F . XDDDDDDDDDDDDDDDDDDDDZkkkkkkkkmDDDDDDDDDDDDDDDDDDDDDDDDDDmgggggggg+ pDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDA 0gggggmDDDDDDDDDDDDDDDDDDDDDDDDDDzffffdfp; 8fffdfffgZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD# . . F",
- +"F. %DDDDDDDDDDDDDDDDDDDDBkkkkkkkvDDDDDDDDDDDDDDDDDDDDDDDDDDBggggggggg: ,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@ >ggggvDDDDDDDDDDDDDDDDDDDDDDDDDDvfffffd<. ;dffffffVDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD; . . F",
- +"F . . . :DDDDDDDDDDDDDDDDDDDDMkkkkkkcDDDDDDDDDDDDDDDDDDDDDDDDDDZhggggggggg9 XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSt &ggglDDDDDDDDDDDDDDDDDDDDDDDDDDMfffffq@ odfdfffmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD1 . . F",
- +"F . . 2DDDDDDDDDDDDDDDDDDDDmjkkkkzSDDDDDDDDDDDDDDDDDDDDDDDDDZjggggggggghs cDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj. *fgjADDDDDDDDDDDDDDDDDDDDDDDDDCffffi- rffffvDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8 . . F",
- +"F . qDDDDDDDDDDDDDDDDDDDDckkkkkZDDDDDDDDDDDDDDDDDDDDDDDDDDzgggggggggghh# wDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmX osghZDDDDDDDDDDDDDDDDDDDDDDDDDZgffa,. ,fffxDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDu ",
- +" . uDDDDDDDDDDDDDDDDDDDDzkkkkBDDDDDDDDDDDDDDDDDDDDDDDDDDcggggggggggggs, ;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ# tggBDDDDDDDDDDDDDDDDDDDDDDDDDSjffw. @ffjSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDf. ",
- +" . . fDDDDDDDDDDDDDDDDDDDDlkkzmDDDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggga2 .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS: 6ggmDDDDDDDDDDDDDDDDDDDDDDDDDDxfp- $, agZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDz . . . ",
- +" . . zDDDDDDDDDDDDDDDDDDDSzjzvDDDDDDDDDDDDDDDDDDDDDDDDDDNgggggggggggggggf. gDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDq <ggvDDDDDDDDDDDDDDDDDDDDDDDDDDci3X wSm rVDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm . . ",
- +" vDDDDDDDDDDDDDDDDDDDZjjcSDDDDDDDDDDDDDDDDDDDDDDDDDZhgggggggggggggghh& 5DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDg =ggzSDDDDDDDDDDDDDDDDDDDDDDDDDmq. 1BDDZX 7DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDN ",
- +" . NDDDDDDDDDDDDDDDDDDDZjzZDDDDDDDDDDDDDDDDDDDDDDDDDAjggggggggggggggghg2 #DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDc. sgjSDDDDDDDDDDDDDDDDDDDDDDDDDz- -cDDDDD0 ;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ. . ",
- +" . . CDDDDDDDDDDDDDDDDDDDZlZDDDDDDDDDDDDDDDDDDDDDDDDDDkgggggggggggggggggge BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS@ rfgZDDDDDDDDDDDDDDDDDDDDDDDDZ7. @dDDDDDDDc .SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS. . ",
- +" . . .ZDDDDDDDDDDDDDDDDDDDZBDDDDDDDDDDDDDDDDDDDDDDDDDDxggggggggggggggggggggo eZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ eggNDDDDDDDDDDDDDDDDDDDDDDDSi+ 5ZDDDDDDDDSX xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS. . ",
- +" . .SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggggggggggg= ,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@ 1ggmDDDDDDDDDDDDDDDDDDDDDDSj* *NSDDDDDDDDDD> qDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX . . . ",
- +" .SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNgggggggggggggggggggggg6 XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD2 ;hcDDDDDDDDDDDDDDDDDDDDDDm: &zDDDDDDDDDDDDDu *DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX ",
- +" . ..SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZhhgggggggggggggggggggggs vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDa XzDDDDDDDDDDDDDDDDDDDDDZwX XuDDDDDDDDDDDDDDDB .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX . . ",
- +" . .SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAkgggggggggggggggggggggggg+ rDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ. yDDDDDDDDDDDDDDDDDDSSf$ 7ZDDDDDDDDDDDDDDDDD# jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX ",
- +" . . .SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDlggggggggggggggggggggggggg: -DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD* 4DDDDDDDDDDDDDDDDDDx* :mDDDDDDDDDDDDDDDDDDD5 5DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX . . ",
- +" .SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDcgggggggggggggggggggggggggkd .ADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDw &DDDDDDDDDDDDDDDDN5 &jDDDDDDDDDDDDDDDDDDDDDh XSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX . . ",
- +" .. . .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggggggggggggggggZAX jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDv ZDDDDDDDDDDDDDZu+ .7SDDDDDDDDDDDDDDDDDDDDDDA mDDDDDDDDDDDDDDSADDDDDDDDDDDDDDDDDDDS. ",
- +" .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBggggggggggggggggggggggggggBDD; 4DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX gDDDDDDDDDDDZp* 2CDDDDDDDDDDDDDDDDDDDDDDDDD; aDDDDDDDDDDDDDDjNDDDDDDDDDDDDDDDDDDDA. ",
- +" . BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDVhgggggggggggggggggggggggggmDDDy $DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD> 6DDDDDDDDDDb: ;vSDDDDDDDDDDDDDDDDDDDDDDDDDDq <DDDDDDDDDDDDDzaNDDDDDDDDDDDDDDDDDDDZ. . . . ",
- +" . . . mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAjgggggggggggggggggggggggggvDDDSn BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDu &DDDDDDDDB7X +gDDDDDDDDDDDDDDDDDDDDDDDDDDDDDc XDDDDDDDDDDDDnaaNDDDDDDDDDDDDDDDDDDDN . . ",
- +" . xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDlggggggggggggggggggggggggglDDDDDZ tDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB NDDDDDZu# .wZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX vDDDDDDDDDDBaaaBDDDDDDDDDDDDDDDDDDDb ",
- +" gDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDxgggggggggggggggggggggggggjSDDDDDD5 *DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD# uDDDSf# 1BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD> 5DDDDDDDDDZdaaaCDDDDDDDDDDDDDDDDDDDz . ",
- +" . . iDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggggggggggggggggZDDDDDDDg ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD5 :DDv: *cDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDu &SDDDDDDDSdpaaaZDDDDDDDDDDDDDDDDDDDg . ",
- +" . . . . wDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNggggggggggggggggggggggggggBDDDDDDDDm jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDf .N4 uDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB .ZDDDDDDDhaaaasDDDDDDDDDDDDDDDDDDDDu. . ",
- +"F 4DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZhgggggggggggggggggggggggggmDDDDDDDDD: rDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ . .9ZSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$ fDDDDDDlpaaapfDDDDDDDDDDDDDDDDDDDDq . . ",
- +"F :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSjgggggggggggggggggggggggghcDDDDDDDDDy gDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD* >NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD5 1DDDDDnaaapaplDDDDDDDDDDDDDDDDDDDD2 . F",
- +"F . . *DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSzgggggggggggggggggggggggggzSDDDDDDDDz ,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8 &zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj ODDDDMpaaaaaavDDDDDDDDDDDDDDDDDDDD; . . F",
- +"F +DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDcgggggggggggggggggggggggggjSDDDDDDDDNX &ADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDz XuDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ zDDCsapapaaaMDDDDDDDDDDDDDDDDDDDD# . F",
- +"F.. . .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggggggggggggggggZDDDDDDDDZ% .mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS. .5ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD& 7DZdpaaaaaaaZDDDDDDDDDDDDDDDDDDDSX . F",
- +"F . . vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNggggggggggggggggggggggggggNDDDDDDDDD: .jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD* :mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDw +SddstsssypdDDDDDDDDDDDDDDDDDDDDN . F",
- +"F dDDDDDDDDDDDDDDDDDDDDDDDDDDDDZhgggggggggggggggggggggggggmDDDDDDDDDq rDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDq +pDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDy sssssstsspkDDDDDDDDDDDDDDDDDDDDh . . F",
- +"F . . 0DDDDDDDDDDDDDDDDDDDDDDDDDDDAjggghgggggggggggggggggggggxDDDDDDDDDd ;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDc XrSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDn; 9isyyisysabDDDDDDDDDDDDDDDDDDDDw . . F",
- +"F . . :DDDDDDDDDDDDDDDDDDDDDDDDDDDzgggggggggggggggggggggggggzDDDDDDDDDn. &CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDS. .2VDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC4 %sissisysaBDDDDDDDDDDDDDDDDDDDD, . . FF",
- +"FF . . #DDDDDDDDDDDDDDDDDDDDDDDDDDxgggggggggggggggggggggggggjZDDDDDDDDD0 XNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4 *vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSw %aiaassipsDDDDDDDDDDDDDDDDDDDDD# . . FF",
- +"FF. .ZDDDDDDDDDDDDDDDDDDDDDDDDmggggggggggggggggggggggggghZDDDDDDDDDDz zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmgDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDl# %0aaaaiiishDDDDDDDDDDDDDDDDDDDDC FF",
- +"FF . zDDDDDDDDDDDDDDDDDDDDDDDBggggggggggggggggggggggggggNDDDDDDDDDDDS zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm- +7aaaaaaaappvDDDDDDDDDDDDDDDDDDDDj FF",
- +"FF . wDDDDDDDDDDDDDDDDDDDDDDCggggggggggggggggggggggggggmDDDDDDDDDDDSZ& 8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDA7 .>ssisaaapappsCDDDDDDDDDDDDDDDDDDDD0 . . . FF",
- +"FF. . >DDDDDDDDDDDDDDDDDDDDDAjgggggggggggggggggggggggggxDDDDDDDDDDDDDDr &DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSp+ ;uaaaaiaaaaipsdSDDDDDDDDDDDDDDDDDDDD- . . . FF",
- +"FFF . . +DDDDDDDDDDDDDDDDDDDDDvgggggggggggggggggggggggggkDDDDDDDDDDDDDDDm .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSj* *pppaaaisaaaasiikSDDDDDDDDDDDDDDDDDDDS. . . FFF",
- +"FFF . . mDDDDDDDDDDDDDDDDDDDDMggggggggggggggggggggggggjSDDDDDDDDDDDDDDDD+ fDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDN; #gCaaaaiaaaaaiaisdnDDDDDDDDDDDDDDDDDDDDx FFF",
- +"FFF iDDDDDDDDDDDDDDDDDDDDSggggggggggggggggggggggggZDDDDDDDDDDDDDDDDD1 1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSqX wSSdaaaasiaaiaaaaasSDDDDDDDDDDDDDDDDDDDD0 . . FFF",
- +"FFF ,DDDDDDDDDDDDDDDDDDDDDxggggggggggggggggggggggMDDDDDDDDDDDDDDDDDDd XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSg+ 1BDDjaaaapaaaaaaiaaadDDDDDDDDDDDDDDDDDDDDD* FFF",
- +"FFF . . . +DDDDDDDDDDDDDDDDDDDDDBgggggggggggggggggggggnDDDDDDDDDDDDDDDDDDDV mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDv& &jDDDcaaaaapaapaaaaaaanSDDDDDDDDDDDDDDDDDDDZ. . FFF",
- +"FFFF . . vDDDDDDDDDDDDDDDDDDDDShgggggggggggggggggggxDDDDDDDDDDDDDDDDDDDDD@ rDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDV4 +aSDDDmaaapaaaaaaaiaaaaaCSDDDDDDDDDDDDDDDDDDDg. . .. FFFF",
- +"FFFF . qDDDDDDDDDDDDDDDDDDDDDvggggggggggggggggggkSDDDDDDDDDDDDDDDDDDDDS5 ;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSrX .5ZDDDDBpapaaaaaapaaaaaaadSSDDDDDDDDDDDDDDDDDDD2 . FFFF",
- +"FFFF . . . *DDDDDDDDDDDDDDDDDDDDDBhggggggggggggggggjADDDDDDDDDDDDDDDDDDDDDDl BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDh# :NDDDSSCsaaaaaaaaissiaaapamDDDDDDDDDDDDDDDDDDDDD@ . FFFF",
- +"FFFF .BDDDDDDDDDDDDDDDDDDDDDjggggggggggggggghZDDDDDDDDDDDDDDDDDDDDDDDS. hDDDDDDDDjuDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm: #jDDDDDSZdpaaaaaaapppiiaaaaaSDDDDDDDDDDDDDDDDDDDDm . . FFFFF",
- +"FFFFF. . uDDDDDDDDDDDDDDDDDDDDDvgggggggggggggggmDDDDDDDDDDDDDDDDDDDDDDDDD; 5DDDDDDDmX:DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ7 XuSDDDDDDSlaaiaaaaiaaaaispaaazDDDDDDDDDDDDDDDDDDDDDr . FFFFF",
- +"FFFFF . . ;DDDDDDDDDDDDDDDDDDDDDZggggggggggggggbDDDDDDDDDDDDDDDDDDDDDDDDDD7 &DDDDDDC# XSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDiX :NDDDDDDDDcdpaaaaaaaaaaaispaaaVDDDDDDDDDDDDDDDDDDDDD- FFFFF",
- +"FFFFF . .BDDDDDDDDDDDDDDDDDDDDDzggggggggggggxDDDDDDDDDDDDDDDDDDDDDDDDDDNr VDDDDS* jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDj& ;nDDDDDDDDDmsisiaaaaaaaaysiiaaagDDDDDDDDDDDDDDDDDDDDDB. . . . FFFFFF",
- +"FFFFFF uDDDDDDDDDDDDDDDDDDDDDMgggggggggggkDDDDDDDDDDDDDDDDDDDDDDDDDDZddX pDDDD2 ,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDN, @gDDDDDDDDDDBapsisaaiaaaaasssiapaMDDDDDDDDDDDDDDDDDDDDDu . FFFFFF",
- +"FFFFFF . . . . *DDDDDDDDDDDDDDDDDDDDDDjggggggggghZDDDDDDDDDDDDDDDDDDDDDDDDDZfdd; ,DDAq DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ8. XrSDDDDDDDDDDZsaisisiaaiaaaastssaadDDDDDDDDDDDDDDDDDDDDDD* . FFFFFF",
- +"FFFFFF mDDDDDDDDDDDDDDDDDDDDDbgggggggggVDDDDDDDDDDDDDDDDDDDDDDDDDShfdd5 XDDu BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDf@ :BDDDDDDDDDDDSgapsisiaaaaaaiaststpanDDDDDDDDDDDDDDDDDDDDDN. . . FFFFFFF",
- +"FFFFFFF . 7DDDDDDDDDDDDDDDDDDDDDShgggggggNDDDDDDDDDDDDDDDDDDDDDDDDDDkddddi aj aDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAj@ *vDDDDDDDDDSSCCgaaaiiysiisiisisisssadSDDDDDDDDDDDDDDDDDDDDD0 . . FFFFFFF",
- +"FFFFFFF . .+SDDDDDDDDDDDDDDDDDDDDDbggggggbDDDDDDDDDDDDDDDDDDDDDDDDDDzdddddf@ 4X 1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB< +aDDDDDDDDDDDSSZxaaaiissssidpissisitsanDDDDDDDDDDDDDDDDDDDDDS@ . FFFFFFF",
- +"FFFFFFF . gDDDDDDDDDDDDDDDDDDDDDAhggggxDDDDDDDDDDDDDDDDDDDDDDDDDDnddddddd: +DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSwX 9ZDDDDDDDDDDDDSDnaaaaassyyapipsisiiissdDDDDDDDDDDDDDDDDDDDDDDg FFFFFFFF",
- +"FFFFFFFF . . -DDDDDDDDDDDDDDDDDDDDDDmgggkSDDDDDDDDDDDDDDDDDDDDDDDDDNdddddddsq vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDg@ &vDDDDDDDDDDDDDDDBaaaaaaysssaaapisiiisysnDDDDDDDDDDDDDDDDDDDDDD; . FFFFFFFF",
- +"FFFFFFFF . . .vDDDDDDDDDDDDDDDDDDDDDDkgjZDDDDDDDDDDDDDDDDDDDDDDDDDCddddddddda wDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDn; &lDDDDDDDDDDDDDDDDCdpsaaaaaaaaaaapsppsaaafDDDDDDDDDDDDDDDDDDDDDDv.. . .FFFFFFFF",
- +"FFFFFFFF . . 2DDDDDDDDDDDDDDDDDDDDDDVgVDDDDDDDDDDDDDDDDDDDDDDDDDSfddddddddddX -DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC2 OuDDDDDDDDDDDDDDDDDSddaiaaaaaaiaaaaappsiaaaNDDDDDDDDDDDDDDDDDDDDDD, FFFFFFFFF",
- +"FFFFFFFFF . .BDDDDDDDDDDDDDDDDDDDDDDZDDDDDDDDDDDDDDDDDDDDDDDDDDjdddddddddds: .ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDy. ,ZDDDDDDDDDDDDDDDDDSkisaaaaaaaaaaaaaapsaaaajDDDDDDDDDDDDDDDDDDDDDDN. . . FFFFFFFFF",
- +"FFFFFFFFF . .8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDzdddddddddddsq hDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDl% ;vADDDDDDDDDDDDDDDDDDxisisiaiaaaaaaaiaaaappaaZDDDDDDDDDDDDDDDDDDDDDD5 . . FFFFFFFFF",
- +"FFFFFFFFF .. XZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDbddddddddddddddX q# ,SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm; #hDDDDDDDDDDDDDDDDDDDDmaaaaaaaaaaaaaaaaiaaaaaabCSDDDDDDDDDDDDDDDDDDDDBX . . FFFFFFFFFF",
- +"FFFFFFFFFF . wDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNddddddddddddddd- 5d, @DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ9. rSDDDDDDDDDDDDDDDDDDDDBaaaaaiaaiaaaiaaaaaaiaaagCSSDDDDDDDDDDDDDDDDDDDD7 . FFFFFFFFFF",
- +"FFFFFFFFFF .XZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZdddddddddddddddd5 ,dfr NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDpo ,BDDDDDDDDDDDDDDDDDDDDDZsaaaaaaaaiaaaiaaaiiaaaaaBDSDDDDDDDDDDDDDDDDDDDDZX . FFFFFFFFFF",
- +"FFFFFFFFFFF . . . qDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZfddddddddddddddddi %ddjSX uDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDx* -vDDDDDDDDDDDDDDDDDDDDDDSgaaaaiaaaaaaaaaaaaaaaaaacDDDDDDDDDDDDDDDDDDDDDDD8 . FFFFFFFFFFF",
- +"FFFFFFFFFFF . . XZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSjdddddddddddddddddd+ +affZD; ;SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDM< @fDDDDDDDDDDDDDDDDDDDDDDDDjpapaaaaaaaaaaaaaapaaaapdDDDDDDDDDDDDDDDDDDDDDDDZX .. FFFFFFFFFFF",
- +"FFFFFFFFFFFF . 7DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDxfdddddddddddddddddd: .usfNDDy SDDDDDDDDDDDDDDDDDDDDDDDDDDDZ8. 2SDDDDDDDDDDDDDDDDDDDDDDDDxsiaaapaaaaaaapaapaaaaaadZDDDDDDDDDDDDDDDDDDDDDDD8 FFFFFFFFFFFF",
- +"FFFFFFFFFFFF .MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDndddddddddddddddddddd0 .rddnDDDB xDDDDDDDDDDDDDDDDDDDDDDDDDDg. >mDDDDDDDDDDDDDDDDDDDDDDDDDnipspsapaiiapaaaaaiaaaaapnDDDDDDDDDDDDDDDDDDDDDDDBX . . FFFFFFFFFFFF",
- +"FFFFFFFFFFFFF . . ,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNddddddddddddddddddddds.0ddcDDDDD% 8DDDDDDDDDDDDDDDDDDDDDDDDv* #tSDDDDDDDDDDDDDDDDDDDDDDDDDBispsppaaaaaaaaaaaaaaaapalDDDDDDDDDDDDDDDDDDDDDDDD4 . . FFFFFFFFFFFFF",
- +"FFFFFFFFFFFFF . .zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZfddddddddddddddddddddddwddlSDDDDD7 *DDDDDDDDDDDDDDDDDDDDDDZ, X4dZDDDDDDDDDDDDDDDDDDDDDDDDDZdssissppaaaappaaasppaaaafDDDDDDDDDDDDDDDDDDDDDDDDm. . . FFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFF. . &DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDShdddddddddddddddddddddddddhSDDDDDDz VDDDDDDDDDDDDDDDDDDDSrX -taVDDDDDDDDDDDDDDDDDDDDDDDDDSdaiisippaaaaaaaapaipsaaasCDDDDDDDDDDDDDDDDDDDDDDDD; . .. FFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFF . . tDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDzdddddddddddddddddddddddddgZDDDDDDDSX aDDDDDDDDDDDDDDDDDDh# *taaMDDDDDDDDDDDDDDDDDDDDDDDDDDjaasiissiiiiaaaaaaapsaapaMDDDDDDDDDDDDDDDDDDDDDDDDf . FFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFF . XNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDcddddddddddddddddddddddddddBDDDDDDDDD: 1DDDDDDDDDDDDDDDDm: @9aaacDDDDDDDDDDDDDDDDDDDDDDDDDDxappiisipissaaaaaaaasipapbDDDDDDDDDDDDDDDDDDDDDDDDZ@ . FFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFF .. :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmddddddddddddddddddddddddddmDDDDDDDDDDt XSDDDDDDDDDDDDDB2 X3aaaalDDDDDDDDDDDDDDDDDDDDDDDDDDnaaaasissstsiaaaiaaiaiisilDDDDDDDDDDDDDDDDDDDDDDDDD5 . FFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFF . . fDDDDDDDDDDDDDDDDDDDDDDDDDDDDZfdddddddddddddddddddddddddcDDDDDDDDDDDm mDDDDDDDDDDDDuX &usaasfSDDDDDDDDDDDDDDDDDDDDDDDDDBaaapaisysssysaaaaaaaasiskDDDDDDDDDDDDDDDDDDDDDDDDDx. . . FFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFF XZDDDDDDDDDDDDDDDDDDDDDDDDDDShdddddddddddddddddddddddddjDDDDDDDDDDDDS@ rDDDDDDDDDDz$ &qaaaaadZDDDDDDDDDDDDDDDDDDDDDDDDDZdaaaaasysstyssaaaaiaaaasdSDDDDDDDDDDDDDDDDDDDDDDDDS# . . FFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFF . . .:DDDDDDDDDDDDDDDDDDDDDDDDDDnddddddddddddddddddddfddddhSDDDDDDDDDDDDC: ;DDDDDDDDN> .5iiiaasaBDDDDDDDDDDDDDDDDDDDDDDDDDSfaaaaaaissysssyaaaiaaaaadDDDDDDDDDDDDDDDDDDDDDDDDDD5 . FFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFF . pDDDDDDDDDDDDDDDDDDDDDDDDDSldddddddddddddddddddddddfZDDDDDDDDDDDDDDh VDDDDDZ6. X2asaaaaapmDDDDDDDDDDDDDDDDDDDDDDDSSZdaaapssisssyisisaaaaaaaphDDDDDDDDDDDDDDDDDDDDDDDDDDj. . FFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFF .. . . XmDDDDDDDDDDDDDDDDDDDDDDDDDSjddddddddddddddddddddddNDDDDDDDDDDDDDDDZ. gDDDDf+ ;uaaaaaaaazDDDDDDDDDDDDDDDDDDDDDDDDSSxdaaappiistsssisippaaaapjSDDDDDDDDDDDDDDDDDDDDDDDDDB+ . FFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFF . *SDDDDDDDDDDDDDDDDDDDDDDDDDSjddddddddddddddddddddnDDDDDDDDDDDDDDDDD; 4AAz# &waaaaasasajDDDDDDDDDDDDDDDDDDDDDDDDDDnaaaapppistsssiiisaaaaaajDDDDDDDDDDDDDDDDDDDDDDDDDDD: . FFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFF .5DDDDDDDDDDDDDDDDDDDDDDDDDDSkddddddddddddddddddzDDDDDDDDDDDDDDDDDDw $B, o6aaasaaaaaafZDDDDDDDDDDDDDDDDDDDDDDDDDNaaaaappdistsysisisspaaalDDDDDDDDDDDDDDDDDDDDDDDDDDDw . . . FFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFF . . . fDDDDDDDDDDDDDDDDDDDDDDDDDDDxddddddddddddddddjSDDDDDDDDDDDDDDDDDDl .<iaasaaaaadasVDDDDDDDDDDDDDDDDDDDDDDDDDCdaaaaaatssississisipsppvDDDDDDDDDDDDDDDDDDDDDDDDDDDj . . FFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFF XmDDDDDDDDDDDDDDDDDDDDDDDDDDDmddddddddddddddgZDDDDDDDDDDDDDDDDDDDA =tsspaaassaaaaNDDDDDDDDDDDDDDDDDDDDDDDDDSdaaaaaaassyssysyiiisppdnDDDDDDDDDDDDDDDDDDDDDDDDDDDNo . . FFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFF . . #ZDDDDDDDDDDDDDDDDDDDDDDDDDDDCgdddddddddddfCDDDDDDDDDDDDDDDDDDDDS2 #qsspssasasaaaavDDDDDDDDDDDDDDDDDDDDDDDDDDjiaaiaaaastsssisiisspadCDDDDDDDDDDDDDDDDDDDDDDDDDDDZ& . FFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFF . . ;DDDDDDDDDDDDDDDDDDDDDDDDDDDDZzddddddddddmDDDDDDDDDDDDDDDDDDDDDDd +,usppspaaaaaaaakDDDDDDDDDDDDDDDDDDDDDDDDDDxpaaaaaaaassttiisispppjZDDDDDDDDDDDDDDDDDDDDDDDDDDDD: . FFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFF . . 5DDDDDDDDDDDDDDDDDDDDDDDDDDDDDmddddddddvDDDDDDDDDDDDDDDDDDDDDDDC ,uaasaaaasaasaaagADDDDDDDDDDDDDDDDDDDDDDDDDnspppsiisisiissppaaaiaxDDDDDDDDDDDDDDDDDDDDDDDDDDDDD5 . . . FFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFF . yDDDDDDDDDDDDDDDDDDDDDDDDDDDDDChdddddzDDDDDDDDDDDDDDDDDDDDDDDDD* =rspaaaaasaasaaaafZDDDDDDDDDDDDDDDDDDDDDDDDDCapaspspsisiissypsapadNSDDDDDDDDDDDDDDDDDDDDDDDDDDDDr. FFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFF . . . . .gDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSzdddjSDDDDDDDDDDDDDDDDDDDDDDDDD8 $qpspssaaasasaaaaaaMDDDDDDDDDDDDDDDDDDDDDDDDDZdpaasiisisspsisspapajZSSDDDDDDDDDDDDDDDDDDDDDDDDDDDf. . . . FFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFF .zDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmdhSDDDDDDDDDDDDDDDDDDDDDDDDDBq X5aaaaspaaasaaaaaasanDDDDDDDDDDDDDDDDDDDDDDDDDSgaaapiisiisiaisysaadbDDDSDDDDDDDDDDDDDDDDDDDDDDDDDDk. . . FFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFF . XvDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBZDDDDDDDDDDDDDDDDDDDDDDDDDAfp. :paaasaasasaaaasasaalDDDDDDDDDDDDDDDDDDDDDDDDDSjsssstsisiaapaaaaaagCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDx. . FFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . omDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSgaa& #riaasaaaaaaasaaaaaaahDDDDDDDDDDDDDDDDDDDDDDDDDDcsiyyssisisaasipaasnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDcX . .FFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFF . . +mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDlaaa8waaasaaaaasppsaasaaaafADDDDDDDDDDDDDDDDDDDDDDDDDMaisssssysisaaaaaalSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDcX. . . FFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFF @mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDvaadaaaaaaaaaasapsaaasaasasVDDDDDDDDDDDDDDDDDDDDDDDDDCsasisyyssisipaapgVDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDvX . . FFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFF . +bDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDMaaspspspasaasaaaspsaasaaaaMDDDDDDDDDDDDDDDDDDDDDDDDDSfppsissysppssipdnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDzX FFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . +cDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBaaapspssapsaaaasppsaaaaaaavDDDDDDDDDDDDDDDDDDDDDDDDDDjaspisyssispppdnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDjX . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . XxDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAddasspaappaaaaasaaspsaaaaakDDDDDDDDDDDDDDDDDDDDDDDDDDzaaaaaaisiiaadnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDf. FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .fDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDShaaaaaassasspsaaaaasaaasssgADDDDDDDDDDDDDDDDDDDDDDDDDbpaaaappppisgnSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDr. FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .rDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDlaasaaasaasaadpsaaaaassaaasZDDDDDDDDDDDDDDDDDDDDDDDDDMaaaaaaaaaajNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD6 . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . 5SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDvaaaaasaaaaaaaaspsssaaaaaaaBDDDDDDDDDDDDDDDDDDDDDDDDDCsaaaaaapdcCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ> . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . ;ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZvfaaasaaasasaapsaaaaaaaaamDDDDDDDDDDDDDDDDDDDDDDDDDSdaaaaaslVDSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDN& FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF. . .#vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZvhasaaaaaaaspsaaasaaazDDDDDDDDDDDDDDDDDDDDDDDDDDjaaadcBDDDDSSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDz+.. . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . XpDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAmxfaaaaapaspaaaaahDDDDDDDDDDDDDDDDDDDDDDDDDDmfzmZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDt. . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 4SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZmxjsspsaaasafADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZ: . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF &mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZBmzjsafBDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDc# .. . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . .yDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAADDAADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDw. . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . ;NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm* . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .XpDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDuX . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . ;mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm- . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . ..qSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSq. FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . #gDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDh# . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . ;vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm; . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .1NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDN2. . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB7X . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB5X . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . .<mDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm2. . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .. .;jDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDz: . . . .. . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . #rZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZu& FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .,kDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDc1X . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . @6vDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmq# . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . $7cDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDmw& . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . +2gZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSz7% . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . .*8lZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDnr:X . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .*5amSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZj0;X . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . X*2tjmSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDZcp7:@ . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . ..#;<8rajcmBZZSSSSZZBNbzguq5:&X . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . ....... . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .. . . . . . . .. . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . .. FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . .. . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .. . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . . . .. . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . .. . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . .. . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF. . . . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF . . . . FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
- +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
- };
- diff --git a/share/pixmaps/bitcoin32.png b/share/pixmaps/bitcoin32.png
- index b04d405..5bf97eb 100644
- Binary files a/share/pixmaps/bitcoin32.png and b/share/pixmaps/bitcoin32.png differ
- diff --git a/share/pixmaps/bitcoin32.xpm b/share/pixmaps/bitcoin32.xpm
- index caae0bd..90a89c0 100644
- --- a/share/pixmaps/bitcoin32.xpm
- +++ b/share/pixmaps/bitcoin32.xpm
- @@ -1,101 +1,250 @@
- /* XPM */
- -static char *bitcoin__[] = {
- +static char *_517408272909[] = {
- /* columns rows colors chars-per-pixel */
- -"32 32 63 1",
- -" c #3C3D3B",
- -". c #3F403E",
- -"X c #40413F",
- -"o c #434442",
- -"O c #484947",
- -"+ c #525351",
- -"@ c #575856",
- -"# c #585957",
- -"$ c #5B5C5A",
- -"% c #5F605E",
- -"& c #60615F",
- -"* c #636462",
- -"= c #6B6C6B",
- -"- c #737473",
- -"; c #777876",
- -": c #7A7A7A",
- -"> c #7F807F",
- -", c #838484",
- -"< c #878888",
- -"1 c #8B8B8B",
- -"2 c #8F908F",
- -"3 c #90908F",
- -"4 c #8F9091",
- -"5 c #929393",
- -"6 c #97989A",
- -"7 c #9A9B9B",
- -"8 c #9FA09F",
- -"9 c #A3A4A4",
- -"0 c #A7A8A7",
- -"q c #A7A8AA",
- -"w c #A9A9A9",
- -"e c #AEAFB0",
- -"r c #AFB0B1",
- -"t c #B3B4B4",
- -"y c #B6B7BA",
- -"u c #B7B8BB",
- -"i c #BABBBD",
- -"p c #BDBEC1",
- -"a c #BFC0C2",
- -"s c #C3C4C6",
- -"d c #C5C6C9",
- -"f c #C7C8CA",
- -"g c #CBCCCD",
- -"h c #CECFD1",
- -"j c #CFD0D2",
- -"k c #D1D2D3",
- -"l c #D6D7D8",
- -"z c #D7D8D8",
- -"x c #DADBDC",
- -"c c #DFDFE1",
- -"v c #DFE0E1",
- -"b c #E3E4E4",
- -"n c #E7E8E7",
- -"m c #E7E7E8",
- -"M c #E7E8E9",
- -"N c #EBECEC",
- -"B c #EFEFF0",
- -"V c #EFF0F0",
- -"C c #F4F4F4",
- -"Z c #F7F7F8",
- -"A c #F7F8F8",
- -"S c #FCFDFD",
- -"D c None",
- +"32 32 212 2 ",
- +" c gray24",
- +". c #3E3E3E",
- +"X c #3F3F3F",
- +"o c gray25",
- +"O c #414141",
- +"+ c gray26",
- +"@ c gray28",
- +"# c gray31",
- +"$ c #505050",
- +"% c #515151",
- +"& c gray32",
- +"* c #545455",
- +"= c #565656",
- +"- c #565757",
- +"; c gray35",
- +": c #5A5A5A",
- +"> c #5B5B5B",
- +", c gray37",
- +"< c #5F5F5F",
- +"1 c #606060",
- +"2 c gray38",
- +"3 c #626262",
- +"4 c #636364",
- +"5 c #646464",
- +"6 c gray40",
- +"7 c #676868",
- +"8 c DimGray",
- +"9 c #6A6A6A",
- +"0 c #6C6C6C",
- +"q c #6D6D6D",
- +"w c gray43",
- +"e c #6E6E6F",
- +"r c #6F6F6F",
- +"t c gray44",
- +"y c #717171",
- +"u c gray45",
- +"i c #737475",
- +"p c gray46",
- +"a c #767676",
- +"s c #777777",
- +"d c gray47",
- +"f c #797979",
- +"g c #79797A",
- +"h c gray48",
- +"j c #7C7C7C",
- +"k c #7D7D7E",
- +"l c gray50",
- +"z c #808181",
- +"x c gray51",
- +"c c #868686",
- +"v c gray53",
- +"b c #898A8A",
- +"n c gray54",
- +"m c #8A8A8B",
- +"M c #8B8B8B",
- +"N c gray55",
- +"B c #929292",
- +"V c #929394",
- +"C c #959595",
- +"Z c #959596",
- +"A c gray60",
- +"S c #9B9C9D",
- +"D c #9C9D9E",
- +"F c #9F9F9F",
- +"G c #A0A0A0",
- +"H c gray63",
- +"J c #A0A1A2",
- +"K c #A7A7A7",
- +"L c gray66",
- +"P c #A9A9A9",
- +"I c #A8A9AB",
- +"U c #AAAAAA",
- +"Y c #AAABAC",
- +"T c #ABACAE",
- +"R c #B1B1B1",
- +"E c gray70",
- +"W c gray71",
- +"Q c #B6B6B6",
- +"! c #B7B7B7",
- +"~ c #B5B7B9",
- +"^ c #B8B9B9",
- +"/ c #B9B9B9",
- +"( c #B8BABC",
- +") c #BBBBBC",
- +"_ c #BABBBD",
- +"` c #BBBDBE",
- +"' c #BCBCBC",
- +"] c gray",
- +"[ c #BCBEC0",
- +"{ c #BDBEC0",
- +"} c #BFC1C2",
- +"| c #BFC1C3",
- +" . c #C1C1C1",
- +".. c #C1C2C3",
- +"X. c #C1C3C5",
- +"o. c #C2C3C4",
- +"O. c #C4C6C7",
- +"+. c #C5C6C7",
- +"@. c #C6C6C6",
- +"#. c #C6C7C7",
- +"$. c gray78",
- +"%. c #C5C6C8",
- +"&. c #C6C7C9",
- +"*. c #C6C8C9",
- +"=. c #C7C8CA",
- +"-. c #C8C8C8",
- +";. c gray79",
- +":. c #C8C9CB",
- +">. c #CACACB",
- +",. c #CACBCB",
- +"<. c #C9CACC",
- +"1. c #CACACC",
- +"2. c #CACBCC",
- +"3. c #CACBCD",
- +"4. c #CDCDCD",
- +"5. c #CCCDCE",
- +"6. c #CDCECF",
- +"7. c #CECFD0",
- +"8. c #CECFD1",
- +"9. c #CFCFD1",
- +"0. c #CFD0D1",
- +"q. c #D0D0D0",
- +"w. c gray82",
- +"e. c #D0D0D2",
- +"r. c #D0D1D2",
- +"t. c #D1D2D3",
- +"y. c LightGray",
- +"u. c #D2D3D4",
- +"i. c #D2D4D5",
- +"p. c #D3D5D6",
- +"a. c gray83",
- +"s. c #D5D5D5",
- +"d. c #D4D5D6",
- +"f. c #D5D5D6",
- +"g. c #D4D5D7",
- +"h. c #D5D6D6",
- +"j. c #D5D6D7",
- +"k. c gray84",
- +"l. c #D7D7D7",
- +"z. c #D6D7D8",
- +"x. c #D7D8D9",
- +"c. c #D8D9D9",
- +"v. c gray85",
- +"b. c #D9D9DA",
- +"n. c #DADADA",
- +"m. c gray86",
- +"M. c #DADBDD",
- +"N. c #DBDCDD",
- +"B. c gainsboro",
- +"V. c #DCDCDD",
- +"C. c #DCDCDE",
- +"Z. c #DDDEDF",
- +"A. c gray87",
- +"S. c #DEDEDF",
- +"D. c #DFDFDF",
- +"F. c #DFE0E1",
- +"G. c gray88",
- +"H. c #E0E0E1",
- +"J. c #E1E1E2",
- +"K. c #E1E2E3",
- +"L. c #E2E2E2",
- +"P. c #E2E3E3",
- +"I. c gray89",
- +"U. c #E2E3E4",
- +"Y. c #E3E4E4",
- +"T. c #E4E4E4",
- +"R. c #E4E4E5",
- +"E. c #E4E5E5",
- +"W. c gray90",
- +"Q. c #E6E6E6",
- +"!. c #E6E7E7",
- +"~. c #E6E7E8",
- +"^. c #E7E7E8",
- +"/. c #E7E8E8",
- +"(. c #E8E8E9",
- +"). c #EAEAEA",
- +"_. c #EBEBEC",
- +"`. c #EBECEC",
- +"'. c #ECECEC",
- +"]. c #ECEDED",
- +"[. c gray93",
- +"{. c #EEEEEE",
- +"}. c #EEEEEF",
- +"|. c #EEEFEF",
- +" X c #EFEFEF",
- +".X c #EFEFF0",
- +"XX c #EFF0F0",
- +"oX c gray94",
- +"OX c #F1F1F1",
- +"+X c gray95",
- +"@X c #F2F3F3",
- +"#X c #F3F3F3",
- +"$X c #F4F4F4",
- +"%X c #F4F4F5",
- +"&X c #F4F5F5",
- +"*X c gray96",
- +"=X c #F6F6F6",
- +"-X c #F6F6F7",
- +";X c #F6F7F7",
- +":X c gray97",
- +">X c #F8F8F8",
- +",X c #F8F9F9",
- +"<X c #F9F9FA",
- +"1X c gray98",
- +"2X c #FBFBFB",
- +"3X c #FBFCFC",
- +"4X c gray99",
- +"5X c #FCFCFD",
- +"6X c #FDFDFD",
- +"7X c #FEFEFE",
- +"8X c white",
- +"9X c None",
- /* pixels */
- -"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
- -"DDDDDDDDDDDD DDDDDDDDDDDD",
- -"DDDDDDDDD O$=--=$O DDDDDDDDD",
- -"DDDDDDD o*7gbCCCVng7*X DDDDDDD",
- -"DDDDDD $wmZSAAAAASAAnw$ DDDDDD",
- -"DDDDD X;lASCMlgdfgbASAAz-X DDDDD",
- -"DDDD X,bAAbdy75559thSSSAn,X DDDD",
- -"DDD ;nAChuyq*1555=1MzlCSb; DDD",
- -"DDD $zACgislr1SSSA55iuyhZAz$ DDD",
- -"DD owZAzkMAS5ySSSC-9uphmSSAwo DD",
- -"DD *MSSCSSSC:zSSSz=scCSSSSAn* DD",
- -"DD 7ASSSSBxe-CSSSy1gbSSBxlZA7 DD",
- -"D OgASCbgpy15SSSS<$$dbgpyiMSgO D",
- -"D $bSvauyyi-sSSSAtt*tyyypgNSn$ D",
- -"D =CAguidxx-cSSSSSi-yidxBSSSC= D",
- -"D -CAklMCw:5CSSSz3=6lNASSSAAC- D",
- -"D -CSSSSc-kASSSS,3lCSSSAmkhAC- D",
- -"D =VASSNw1nASSSM;nSSANzdiygAB= D",
- -"D $bSNfi-%-MSSSg=iat9555esbSb$ D",
- -"D ofSMut,::SSSSk333322<$fCSSsO D",
- -"DD 6ZZlcV80SSSSSSSSSSSx:VSSA6 DD",
- -"DD $bSSSA>kSSSSSSSSSSSu1CSSb$ DD",
- -"DD X8ASSk&6wwwwwwwwww9-7zSA8X.DD",
- -"DDD +kAAs<><509www85<,<sZAk+ DDD",
- -"DDD =bAZzxCSSSAVzdiuizCSc= .DDD",
- -"DDDD X-bZSSSSCbgpyypgMASc;. DDDD",
- -"DDDDD =gZSSSbkggjxNASCg=X DDDDD",
- -"DDDDDD +7xCASSAASSAAx7+ DDDDDD",
- -"DDDDDDDD..@1pzNNBMxa1@. DDDDDDDD",
- -"DDDDDDDDD o+****+o DDDDDDDDD",
- -"DDDDDDDDDDDD DDDDDDDDDDDD",
- -"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
- +"9X9X9X9X9X9X9X9X9X9X9X9XX . o . . . o . 9X9X9X9X9X9X9X9X9X9X9X9X",
- +"9X9X9X9X9X9X9X9X9XX . X X X o + o o X X o o . 9X9X9X9X9X9X9X9X9X",
- +"9X9X9X9X9X9X9X. o o o y U c.;X4X4X;Xk.U e o o . . 9X9X9X9X9X9X9X",
- +"9X9X9X9X9X9X. . o N W.4X4X4X4X4X4X4X4X4X4XW.N @ . o 9X9X9X9X9X9X",
- +"9X9X9X9X9Xo . 3 V.4X4X4X4X4X4X4X4XoX>X4X4X4X4XV.3 . . 9X9X9X9X9X",
- +"9X9X9X9Xo . j ,X4X4X4X).M.4X4X4XD.7.7.K.4X4X4X4X;Xh X . 9X9X9X9X",
- +"9X9X9XX o j 4X4X4X Xr.7.;X>.< c.4.5.k.4X4X4X X4X4X4Xa . . 9X9X9X",
- +"9X9X. . 3 ,X4X4XK.7.7.q.a a h H 7.0.>X4X4XK.=.V.4X4X;X3 o . 9X9X",
- +"9X9XX o V.4X4XK.7.#.z < >.4Xo.h 7.;X4X4X~.&.=.0.4X4X4XV.@ . 9X9X",
- +"9XX o N 4X4X X0.7.% U ,X4X4X$X* _.4X4X.X=.&.3.,X4X4X4X4XN . . 9X",
- +"9Xo o W.4X4Xr.7.c.y K.4X4X4X4X9 ! ! :X3.&.=.oX4X4X/.,X4XW.o o 9X",
- +"9Xo y 4X4XW.7.r.,XU Y 4X4X4X4XH o h 7.&.&.~.4X4XoX#.K.4X4Xy . 9X",
- +". . U 4X4Xz.r.;X4XD.a 4X4X4X4Xc.#.% &.=.K.4X4X;X#.o.4.4X4XU o X ",
- +". o k.4X,X0. X4X4XoX% ,X4X4X4X4X4Xh Y k.4X4X4X4.Y o.Y.4X4Xc.X . ",
- +". o X4XoXW.4X4X,X3.e 4.4X4X4X4X4Xl S ,X4X4X^ > # x.4X4X4XoXX X ",
- +"o . 4X4X;X4X4X4Xr.&.V A 4X4X4X4X>.5 ;X4X Xv 5 r.e K.4X4X4X4Xo . ",
- +"o o 4X4X4X4X4Xz.&.&.>.5 4X4X4X4XW.9 ,XU > ! 4X4XH E 4X;X4X4Xo o ",
- +". o oX4X4X4XD.&.&.k.).# 4X4X4X4X4X< < Z ;X4X4X4Xk.j M.).4XoXo o ",
- +"o . k.4X4X).&.&.7.,Xh ] 4X4X4X4X4X/ K.4X4X4X4X$XZ * _ ;X4Xk.o . ",
- +". o Y 4X4Xr.&.3.,X4XZ ] 4X4X4X4X4X4X4X4X4X4X! > Z ~ X.4X4XK o . ",
- +"9Xo y 4X4XW.3.XX4X4X] M U 4X4X4X4X4X4X4Xk.6 v Y.| _ D.4X4Xy . 9X",
- +"9X. o ).4X4X).4X4XoX_ @ . V.4X4X4X4X'.z 9 k.3X=.( [ 3X4X).o . 9X",
- +"9X. . N 4X4X4X4X:XX.| i M U 4X4X,XH > / 4X4Xi.( ( Y.4X4XN . . 9X",
- +"9X9Xo o V.4X4X3X5.| | F.c.a 4X] > j X4X4XV._ _ i.4X4XV.o . 9X9X",
- +"9X9X. o 3 ;X4X4Xc.o.k.4X4X> e 7 Y _.4X4X~._ _ x.4X4X;X3 . X 9X9X",
- +"9X9X9X. . h 4X4X4X X4X4X3XM D _ V.4X4XoX_ [ W.4X4X4Xh o . 9X9X9X",
- +"9X9X9X9X. . h :X4X4X4X4Xc._ _ 9.4X4X,X3.N.,X4X4X,Xa o . 9X9X9X9X",
- +"9X9X9X9X9X. . 3 V.4X4X4X4X;X).5X4X4X4X4X4X4X4Xc.< o . 9X9X9X9X9X",
- +"9X9X9X9X9X9X. o o M W.4X4X4X4X4X4X4X4X4X4XW.N o X X 9X9X9X9X9X9X",
- +"9X9X9X9X9X9X9X. . . o e U r.oX4X4XoXk.Y r o o . . 9X9X9X9X9X9X9X",
- +"9X9X9X9X9X9X9X9X9X. o . o o X X X X X X X X . 9X9X9X9X9X9X9X9X9X",
- +"9X9X9X9X9X9X9X9X9X9X9X9X. . . . X X . . 9X9X9X9X9X9X9X9X9X9X9X9X"
- };
- diff --git a/share/pixmaps/bitcoin64.png b/share/pixmaps/bitcoin64.png
- index 659d04c..1ab289e 100644
- Binary files a/share/pixmaps/bitcoin64.png and b/share/pixmaps/bitcoin64.png differ
- diff --git a/share/pixmaps/bitcoin64.xpm b/share/pixmaps/bitcoin64.xpm
- index c11721c..4f755ab 100644
- --- a/share/pixmaps/bitcoin64.xpm
- +++ b/share/pixmaps/bitcoin64.xpm
- @@ -1,148 +1,116 @@
- /* XPM */
- -static char *bitcoin__[] = {
- +static char *_517408268493[] = {
- /* columns rows colors chars-per-pixel */
- -"64 64 78 1",
- -" c #2C2D2B",
- -". c #2F302F",
- -"X c #30312F",
- -"o c #343533",
- -"O c #373836",
- -"+ c #383937",
- -"@ c #3C3D3B",
- -"# c #3F403E",
- -"$ c #40413F",
- -"% c #424442",
- -"& c #474846",
- -"* c #484947",
- -"= c #4C4C4B",
- -"- c #4F504E",
- -"; c #50514F",
- -": c #535452",
- -"> c #575856",
- -", c #585957",
- -"< c #5D5E5D",
- -"1 c #5F605F",
- -"2 c #60615F",
- -"3 c #636463",
- -"4 c #676867",
- -"5 c #686867",
- -"6 c #6C6D6C",
- -"7 c #6F706F",
- -"8 c #737474",
- -"9 c #777877",
- -"0 c #7C7C7B",
- -"q c #7F807E",
- -"w c #7F8080",
- -"e c #848484",
- -"r c #878886",
- -"t c #8B8C8B",
- -"y c #8F908F",
- -"u c #8D8E90",
- -"i c #8F9092",
- -"p c #949494",
- -"a c #979897",
- -"s c #9B9C9C",
- -"d c #9FA09F",
- -"f c #9E9FA1",
- -"g c #9FA0A3",
- -"h c #A2A3A2",
- -"j c #A6A7A9",
- -"k c #AAABAB",
- -"l c #AEAFB2",
- -"z c #AFB0B3",
- -"x c #B2B3B4",
- -"c c #B5B6B9",
- -"v c #B7B8BB",
- -"b c #BABABC",
- -"n c #BDBEC1",
- -"m c #BFC0C2",
- -"M c #C2C3C4",
- -"N c #C5C6C8",
- -"B c #C7C8CA",
- -"V c #CBCBCC",
- -"C c #CECED0",
- -"Z c #CFD0D2",
- -"A c #D2D2D3",
- -"S c #D7D8D7",
- -"D c #D6D6D8",
- -"F c #D7D8DA",
- -"G c #DBDCDC",
- -"H c #DFDFE0",
- -"J c #DFE0E1",
- -"K c #E3E3E4",
- -"L c #E7E7E8",
- -"P c #E7E8E9",
- -"I c #EBECEC",
- -"U c #EFEFF0",
- -"Y c #EFF0F1",
- -"T c #F3F3F3",
- -"R c #F7F7F8",
- -"E c #F7F8F8",
- -"W c #FDFDFD",
- -"Q c None",
- +"64 64 46 1 ",
- +" c #3F3F3F",
- +". c #434343",
- +"X c #4B4B4B",
- +"o c #535353",
- +"O c #5B5C5C",
- +"+ c #636363",
- +"@ c #676768",
- +"# c #6C6C6C",
- +"$ c #727272",
- +"% c #777778",
- +"& c #7C7C7C",
- +"* c #828282",
- +"= c #8B8B8C",
- +"- c #8E8F90",
- +"; c #949494",
- +": c #9B9B9B",
- +"> c #9FA0A1",
- +", c #A4A4A4",
- +"< c #AAABAB",
- +"1 c #AFB0B2",
- +"2 c #B4B4B4",
- +"3 c #B7B8BA",
- +"4 c #B9BBBC",
- +"5 c #BDBFC0",
- +"6 c #BFC1C2",
- +"7 c #C2C3C3",
- +"8 c #C6C7C9",
- +"9 c #C7C8CA",
- +"0 c #CBCCCD",
- +"q c #CECFD0",
- +"w c #CFD0D1",
- +"e c #D3D4D5",
- +"r c #D6D7D8",
- +"t c #D7D8D9",
- +"y c #DCDCDC",
- +"u c #DFDFE1",
- +"i c #DFE0E1",
- +"p c #E3E4E4",
- +"a c #E7E7E8",
- +"s c #E7E8E8",
- +"d c #ECECEC",
- +"f c #EFEFF0",
- +"g c #EFF0F0",
- +"h c #F4F4F4",
- +"j c #FFFFFF",
- +"k c None",
- /* pixels */
- -"QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQQQQQQo+@#@@#####@+oQQQQQQQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQQQo@@@@@@#@@@@@@@@@@@oQQQQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQo@##@@@++@+@+@@++@+@@@@$@ QQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQo@@@@@++&>8rasgdsar7>%@+@@@#@oQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQ@@@@@+*6sVKTEWWWEWWETLVs6&+@@@#@QQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQo@@@@@:yCTWEEEEEEEEEEEEEWETCy:@@@@$oQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQ@@@@+:aGEEEEERWWWEWWWWEWEWEWEEHa:+@@$@QQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQ@#@@%0DEWEWEWWWWWWWWWWWWWWWEEWEERD0%@@@@QQQQQQQQQQQQ",
- -"QQQQQQQQQQQ@@@@=lYWREWEWWWTIHDCCVCFHPTWWWWWEEWTk=@@@@QQQQQQQQQQQ",
- -"QQQQQQQQQQ@@@@2VERRWWWWRKCncccccccccbDTWWWWWEWERV1@@@@QQQQQQQQQQ",
- -"QQQQQQQQQ##@@6GERWRWWRFncccvbbbbbbMGUEWWWWWWWWWREG6@@@#QQQQQQQQQ",
- -"QQQQQQQQ+@@+6HEEWRWRHnvccce6776679errrebWWWWWWWEEWG6@@@@QQQQQQQQ",
- -"QQQQQQQo#@+2GWEWWWUCvccvcl:@$$%%%%%%%@+lWWELGUWWWEWG2+@#oQQQQQQQ",
- -"QQQQQQ #@@:VEEEWWUnccvccvf#9ZAAAAAAAV2*GIFMccMIWWWEEV-@@@ QQQQQQ",
- -"QQQQQQ@@@%kWEEWWPnccccvMGp+zWWWWWWWWK;1nbccvccnIWWWEWk$@@@QQQQQQ",
- -"QQQQQo@@+wTEEWWIncccnCLRW9*SWWWWWWWWn@8vcccccccnIWWEEYw@@@oQQQQQ",
- -"QQQQQ@@@:DEWWWTncnVHTWWWL;3TWWWWWWWWp+pbvccccvVGRWWWEWD:@@@QQQQQ",
- -"QQQQo#@@sEEEWRCMFIWWWWWWM@yWWWWWWWWT6*jcccvMFIWWWWWWWEEa@@#XQQQQ",
- -"QQQQ+#@:HEEWWTIEWWWWWWWWa+bWWWWWWWWG=2xcnCPEWWWWWWWWWEEJ>+@@QQQQ",
- -"QQQQ@@+pWEWWWWWWWWWWWWWT5*GWWWWWWWWc@qVKTWWWWWWWWWWWWWRWp@#@QQQQ",
- -"QQQO@@*AWEWWWWWWWWWWWIGx&5EWWWWWWWWt$MWWTWWWWWWWWUGJWWWEV*@@OQQQ",
- -"QQQ@@+6TEEWWWWWWWWTHNbcu@aWWWWWWWWT2:KAaaWWWWWTHVbcnTWEWT6@@@QQQ",
- -"QQQ#@@sWEWWWWWWTLVncccv7#MWWWWWWWWD*;6*+gWWELCnccvccKWWEEd@@@QQQ",
- -"QQX@@%VEEWWWEPDMvcccvcx>:KWWWWWWWWk++&%%VIDMccccccccCEWWWV%@#.QQ",
- -"QQ+@@,LEEWEHNbcccvcvvvh%8WWWWWWWWWe<aM,:bbcccccvccccBRWEEL>@@OQQ",
- -"QQ##+7YWWWIvcccvcccccnp+hWWWWWWWWWAPWA%4vccccccccnCLRWWWET7+@#QQ",
- -"QQ#@+rEEEWGcccccccbVHTr$VWWWWWWWWWWWWj@rbcccccbVGTWWWWWWEEr+#@QQ",
- -"QQ$@+aEWWWDccccbMGUWWP<,IWWWWWWWWWWWE9%svcccMDIWWWWWWWWWWEa+@#QQ",
- -"QQ@@@sWEWWZccnAPRWEGh4+qWWWWWWWWWWIb0$:lcnAPRWWWWWWWWWWWEWs@@#QQ",
- -"QQ#@+sWEWWAVKTWWWWa=@=0ZWWWWWWWWIa,@@>pVKTWWWWWWWWWWETWWEWs@@#QQ",
- -"QQ$@+sEWWWEWWWWWWP,=hGWWWWWWWWWWM@=8kDUWWWWWWWWWWWIGMZWWEWs+@#QQ",
- -"QQ@@+sWEWWWWWWWWWB$tWWWWWWWWWWWWa@hIWWWWWWWWWWWTKVbccAWWEWs@@$QQ",
- -"QQ$@+aWEWWWWWWWWEa@cWWWWWWWWWWWE7*HWWWWWWWWWELCncccccDWWEEp+@$QQ",
- -"QQ@@+eEEEWWWWWIDM2=GEDPWWWWWWWWK=6TWWWWWWWIFNbcccvcccHWWWRe+@@QQ",
- -"QQ@@+6TWWWWTGNbch*,h8>GWWWWWWWWb@aWWWWWTHVbvcbvvccccbIWWEU6+@@QQ",
- -"QQo$@:GEEWTNccvbp#$@+5TWWWWWWWWp+7tttte867666666ucnCKWWEWH:@@+QQ",
- -"QQ.@@$MWEWWAcccv8@>1@yWWWWWWWWT6$%$$$$%%$$%$%%#@aHYWWWWWWm%@$ QQ",
- -"QQQ$@+pWEEWPccccefCt@bWWWWWWWWEGZAZZAZCAZZAZAV2&GWWWWWWEEp@@@QQQ",
- -"QQQ@@@4IEEWRMcMAPWT5=KWWWWWWWWWWWWWWWWWWWWWWWL:4TWWWWWEWI3@@@QQQ",
- -"QQQo@@%NWWWWPJTWWWG*7EWWWWWWWWWWWWWWWWWWWWWWWM@yWWWWWWWWN%@@oQQQ",
- -"QQQQ$@+eTEWWWWWWWWc@sWWWWWWWWWWWWWWWWWWWWWWWWa@bWWWWWEETeO@#QQQQ",
- -"QQQQ@@@*AWREWWWWWWt@BWWWWWWWWWWWWWWWWWWWWWWWT5:JTLTWWEWA=@@@QQQQ",
- -"QQQQ @@@tTEWWWWWWP2:GTUUUTUUTUTUTTUUTUUUTTTTA*4CnDEWWETt@@# QQQQ",
- -"QQQQQ@@@&VWEWWWTGk%%<<121211<<<<<<<<12<<1<1<>+0vVTWWEWB*@@@QQQQQ",
- -"QQQQQo@@@6PWEWWTMi::::;:;;,11<<1<1<21222>::::>sNTWWEEI6@@#XQQQQQ",
- -"QQQQQQ@@@@aEEEWWYmlzxklcBHITUUTTTUUTULAMxzllxlMUWWWEEa@@#+QQQQQQ",
- -"QQQQQQQ@@@%bEEEWWTVcbBKTWWWWWWWWWWWIDmvccvbccVTWWWRWb%@@@QQQQQQQ",
- -"QQQQQQQo@@@;BWEEWWTKIWWWWWWWWWWWTGNvcccccccbDRWWEEWN:@@@oQQQQQQQ",
- -"QQQQQQQQ+#@@,CWEEWWWWWWWWWWWWTKVnccccccccvVIWWWEEEV,@@#+QQQQQQQQ",
- -"QQQQQQQQQ+@#+>MWEEWWWWWWWWEPZnccccvccccbVPEWWWWWWN,@@@+QQQQQQQQQ",
- -"QQQQQQQQQQ@##+-zREWWEWWWWEDnccccccccnNGUWWWWWEWTx=@@@@QQQQQQQQQQ",
- -"QQQQQQQQQQQ@##@$tLEEEWWWWWWTIKGGGGKITWWWWRWREELt%@@@+QQQQQQQQQQQ",
- -"QQQQQQQQQQQQ+$#@@3bTWEEEWWWWWWWWWWWWWWWWWERWTb4@@@@@QQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQX#@@+%0NTWEEEWEWEWWWWEWEWERWETM0%+@@@oQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQ @@@@@%7xHEWEEEWWERWWEEWEEKx6%+@@@@ QQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQ+@@#@+@>0kVKTTETRRTULVk0:@@@#@@+QQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQ@#@@@@+@%>480e0w05>&++@@@@#@QQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQ+@$@@@@@@++@+++++@@@@$@+QQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQQQ +@##@#@@@@@@@@@@@+ QQQQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQQQQQQQo+@@$@####+oQQQQQQQQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ",
- -"QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ"
- +"kkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkkkkkkkk . kkkkkkkkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkkkkkk . . . kkkkkkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkkk .... . kkkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkk . . .#:4yhjjjjht4:#.. kkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkk .&7hjjjjjjjjjjjjjjh4&. kkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkk o,djjjjjjjjjjjjjjjjjjjjd,o kkkkkkkkkkkkk",
- +"kkkkkkkkkkk X<hjjjjjjjjjjjjjjjjjjjjjjjjh<X. . kkkkkkkkkkk",
- +"kkkkkkkkkk *hjjjjjjjjjjjjjjjjjjjjjjjjjjjjd* kkkkkkkkkk",
- +"kkkkkkkkk . X4jjjjjjjjjjhjjjjjjhtpdhjjjjjjjjjj4X kkkkkkkkk",
- +"kkkkkkkk Opjjjjjjjjhpesjjjjjjr0000edjjjjjjjjjyo. kkkkkkkk",
- +"kkkkkkk @djjjjjjjht00pjjjhjjt00q00ehjjjjjjjjjjs+. kkkkkkk",
- +"kkkkkkk @hjjjjjjhyww0tjjh<ojp00q00qhjjjjjjjjjjjjh+. kkkkkkk",
- +"kkkkkk Odjjjjjjsew0wrjj0O 70q0000djjjjjhepjjjjjjdo . kkkkkk",
- +"kkkkk Xyjjjjjjiqq0eehp$ .$ =00q0qpjjjjjjr88tjjjjjjy. kkkkk",
- +"kkkkk 3jjjjjjyqqqq0a;. $ph O0000yjjjjjjy8888ehjjjjj3 kkkkk",
- +"kkkk &jjjjjjtwwww0:o O0jjj# 800rjjjjjjp888889hjjjjjj* kkkk",
- +"kkk Xdjjjjjyq0w0<O X,hjjjj: >0ehjjjjjf888888ajjjjjjjdX kkk",
- +"kkk ,jjjjjsqqw0$ =djjjjjje &qhjjjjjh088888yjjjjjjjjj<. kkk",
- +"kkk. .ohjjjjheqqwqo.rjjjjjjjjj.odjjjjjj088888tjjjjjjjjjjho kkk",
- +"kk .,jjjjjy00w0e* tjjjjjjjjj& pd;jjjr88888wjjjjjjgjjjjj, . kk",
- +"kk .hjjjjfwwwqwd7 <jjjjjjjjj1 ,@Xjjy888880hjjjjjd7sjjjjh. kk",
- +"k *jjjjjt0w0wpjh.$jjjjjjjjjp ea888888fjjjjjh97qjjjjj& . k",
- +"k 5jjjjhqqweyjjj#.hjjjjjjjjjO X ;988888pjjjjjh0777hjjjj7 k",
- +"k .hjjjjpqw0tjjjj, 8jjjjjjjjj;op +88888yjjjjjje6767yjjjjh.. .k",
- +"k .#jjjjjeq0ehjjjjr ;jjjjjjjjj0ij+ 7888rjjjjjjt677779jjjjj# k",
- +"k ;jjjjhqqwhjjjjjh.Ojjjjjjjjjjjj: ,880hjjjjjp777777sjjjjj: ",
- +" 3jjjjsqqdjjjjjhq@ sjjjjjjjjjjje $99hjjjjjh76=:67pjjjjjj4 ",
- +" ejjjjp0pjjjjjjr8= 3jjjjjjjjjjjh o9fjjjjjh8:o $6rjjjjjjjt. ",
- +" sjjjjyyjjjjjjy881 *jjjjjjjjjjj= $pjjjjjj4@ .Xehjjjjjjjg ",
- +" hjjjjijjjjjjs8888XXjjjjjjjjjj< Otjjjjjh;. #t& yjjjjjjjjh ",
- +" .jjjjjjjjjjjh99888$ tjjjjjjjjj& 3jjjjj4O o4jj2 2jjjjjjjjj. ",
- +" .jjjjjjjjjjh088888> ,jjjjjjjjj2 <jjjt# .:hjjjs &jjjjjjjjj. ",
- +" hjjjjjjjjjw88888ed $jjjjjjjjjp &jd=. *sjjjjjjOXjjjtjjjjj ",
- +" sjjjjjjjje888880hjO hjjjjjjjjjOX,X +ejjjjjjjj; eje9jjjjd ",
- +" rjjjjjjju888880hj2 @hjjjjjjjjj= X2jjjjjjjjjj8 :i4ejjjjt ",
- +" 3jjjjjjs888889fjq.Xdjjjjjjjjjj4.;hjjjjjjjjjjj1 O33pjjjj4 ",
- +" :jjjjjh988888pjj; 3jjjjjjjjjjjhpjjjjjjjjjjjt@ .*44hjjjj; ",
- +"k $jjjjjq88899yjjje ;jjjjjjjjjjjjjjjjjjjjjjd* &<446jjjjj@ k",
- +"k .hjjjju8888tjjjjh.+jjjjjjjjjjjjjjjjjjjjh,. +q0334tjjjjh.. k",
- +"k 7jjjjh888qhjjjjj$ sj6jjjjjjjjjjjjjjjj7O X2jr3444gjjjj5 k",
- +"k . *jjjjje89hjjjjjh= 3:Xjjjjjjjjjjjjjjy$ ;hji44449jjjjj* kk",
- +"kk ..hjjjjd8djjjjjh9< o tjjjjjjjjjjjg= $pjjd43443sjjjjh. kk",
- +"kk ,jjjjjdjjjjjj064X ,jjjjjjjjjj<X O9jjjg644340jjjjj,. kk",
- +"kkk ohjjjjjjjjjje666#.: #jjjjjjjj9O X<jjjjh834335gjjjjho . kkk",
- +"kkk <jjjjjjjjjy6666;-d+.hjjjjjp& =fjjjjj033453ijjjjj< kkk",
- +"kkk Xdjjjjjjjs666665sj: 8jjjh;. O3jjjjjjr44433qjjjjjhX kkkk",
- +"kkkk &jjjjjjh666666yjj0 =jj2o o;7jjjjjjp344448jjjjjj* kkkk",
- +"kkkkk . 3jjjjjh06666wjjjhXOe+ .*47hjjjjjd444449jjjjjj4 kkkkk",
- +"kkkkk Xyjjjjjjr660hjjjj& #144djjjjjg53444wjjjjjjyX kkkkk",
- +"kkkkkk odjjjjjjp8hjjjjj< O>444pjjjjjh83444ijjjjjjsO kkkkkk",
- +"kkkkkkk +hjjjjjjjjjjjjh1=5444ejjjjjj03440hjjjjjjd+ . kkkkkkk",
- +"kkkkkkk +djjjjjjjjjjh9444450jjjjjjt456djjjjjjjdO kkkkkkk",
- +"kkkkkkkk oyjjjjjjjjja744457hjjjjjp5efjjjjjjjjto . kkkkkkkk",
- +"kkkkkkkkk X3jjjjjjjjjjhit0hjjjjjjhjjjjjjjjjj2. kkkkkkkkk",
- +"kkkkkkkkkk &sjjjjjjjjjjjjjjjjjjjjjjjjjjjjs& . kkkkkkkkkk",
- +"kkkkkkkkkkk X,hjjjjjjjjjjjjjjjjjjjjjjjjh,X kkkkkkkkkkk",
- +"kkkkkkkkkkkkk X,djjjjjjjjjjjjjjjjjjjjd,o. kkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkk .&4hjjjjjjjjjjjjjjh4*. . kkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkk . . .@-3rphjjhsr3;#. . kkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkkk . . kkkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkkkkkk . . kkkkkkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkk",
- +"kkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkk"
- };
- diff --git a/share/pixmaps/nsis-header.bmp b/share/pixmaps/nsis-header.bmp
- index 7912155..79b748e 100644
- Binary files a/share/pixmaps/nsis-header.bmp and b/share/pixmaps/nsis-header.bmp differ
- diff --git a/share/pixmaps/nsis-wizard.bmp b/share/pixmaps/nsis-wizard.bmp
- index 37cc5ed..0186894 100644
- Binary files a/share/pixmaps/nsis-wizard.bmp and b/share/pixmaps/nsis-wizard.bmp differ
- diff --git a/share/qt/Info.plist.in b/share/qt/Info.plist.in
- index 2ec8eca..dc683ef 100644
- --- a/share/qt/Info.plist.in
- +++ b/share/qt/Info.plist.in
- @@ -29,16 +29,16 @@
- <string>????</string>
- <key>CFBundleExecutable</key>
- - <string>Litecoin-Qt</string>
- + <string>LitecoinCash-Qt</string>
- <key>CFBundleName</key>
- - <string>Litecoin-Qt</string>
- + <string>LitecoinCash-Qt</string>
- <key>LSHasLocalizedDisplayName</key>
- <true/>
- <key>CFBundleIdentifier</key>
- - <string>org.litecoin.Litecoin-Qt</string>
- + <string>org.litecoincash.LitecoinCash-Qt</string>
- <key>CFBundleURLTypes</key>
- <array>
- @@ -46,10 +46,10 @@
- <key>CFBundleTypeRole</key>
- <string>Editor</string>
- <key>CFBundleURLName</key>
- - <string>org.litecoin.LitecoinPayment</string>
- + <string>org.litecoincash.LitecoinCashPayment</string>
- <key>CFBundleURLSchemes</key>
- <array>
- - <string>litecoin</string>
- + <string>litecoincash</string>
- </array>
- </dict>
- </array>
- @@ -58,9 +58,9 @@
- <array>
- <dict>
- <key>UTTypeIdentifier</key>
- - <string>org.litecoin.paymentrequest</string>
- + <string>org.litecoincash.paymentrequest</string>
- <key>UTTypeDescription</key>
- - <string>Litecoin payment request</string>
- + <string>LitecoinCash payment request</string>
- <key>UTTypeConformsTo</key>
- <array>
- <string>public.data</string>
- @@ -68,10 +68,10 @@
- <key>UTTypeTagSpecification</key>
- <dict>
- <key>public.mime-type</key>
- - <string>application/x-litecoin-payment-request</string>
- + <string>application/x-litecoincash-payment-request</string>
- <key>public.filename-extension</key>
- <array>
- - <string>litecoinpaymentrequest</string>
- + <string>litecoincashpaymentrequest</string>
- </array>
- </dict>
- </dict>
- @@ -84,7 +84,7 @@
- <string>Editor</string>
- <key>LSItemContentTypes</key>
- <array>
- - <string>org.litecoin.paymentrequest</string>
- + <string>org.litecoincash.paymentrequest</string>
- </array>
- <key>LSHandlerRank</key>
- <string>Owner</string>
- diff --git a/share/qt/extract_strings_qt.py b/share/qt/extract_strings_qt.py
- old mode 100755
- new mode 100644
- diff --git a/share/rpcuser/rpcuser.py b/share/rpcuser/rpcuser.py
- old mode 100755
- new mode 100644
- index e266986..c9ded07
- --- a/share/rpcuser/rpcuser.py
- +++ b/share/rpcuser/rpcuser.py
- @@ -36,6 +36,6 @@ if sys.version_info.major >= 3:
- m = hmac.new(bytearray(salt, 'utf-8'), bytearray(password, 'utf-8'), digestmod)
- result = m.hexdigest()
- -print("String to be appended to litecoin.conf:")
- +print("String to be appended to litecoincash.conf:")
- print("rpcauth="+username+":"+salt+"$"+result)
- print("Your password:\n"+password)
- diff --git a/share/setup.nsi.in b/share/setup.nsi.in
- index b298a4e..a5c8c3d 100644
- --- a/share/setup.nsi.in
- +++ b/share/setup.nsi.in
- @@ -50,9 +50,9 @@ Var StartMenuGroup
- # Installer attributes
- OutFile @abs_top_srcdir@/@PACKAGE_TARNAME@-${VERSION}-win@WINDOWS_BITS@-setup.exe
- !if "@WINDOWS_BITS@" == "64"
- -InstallDir $PROGRAMFILES64\Litecoin
- +InstallDir $PROGRAMFILES64\LitecoinCash
- !else
- -InstallDir $PROGRAMFILES\Litecoin
- +InstallDir $PROGRAMFILES\LitecoinCash
- !endif
- CRCCheck on
- XPStyle on
- @@ -104,7 +104,7 @@ Section -post SEC0001
- WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
- WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
- WriteRegStr HKCR "@PACKAGE_TARNAME@" "URL Protocol" ""
- - WriteRegStr HKCR "@PACKAGE_TARNAME@" "" "URL:Litecoin"
- + WriteRegStr HKCR "@PACKAGE_TARNAME@" "" "URL:LitecoinCash"
- WriteRegStr HKCR "@PACKAGE_TARNAME@\DefaultIcon" "" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
- WriteRegStr HKCR "@PACKAGE_TARNAME@\shell\open\command" "" '"$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "%1"'
- SectionEnd
- @@ -137,7 +137,7 @@ Section -un.post UNSEC0001
- Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
- Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk"
- Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, @WINDOWS_BITS@-bit).lnk"
- - Delete /REBOOTOK "$SMSTARTUP\Litecoin.lnk"
- + Delete /REBOOTOK "$SMSTARTUP\LitecoinCash.lnk"
- Delete /REBOOTOK $INSTDIR\uninstall.exe
- Delete /REBOOTOK $INSTDIR\debug.log
- Delete /REBOOTOK $INSTDIR\db.log
- diff --git a/src/Makefile.am b/src/Makefile.am
- index e315196..79f1284 100644
- --- a/src/Makefile.am
- +++ b/src/Makefile.am
- @@ -66,11 +66,11 @@ TESTS =
- BENCHMARKS =
- if BUILD_BITCOIND
- - bin_PROGRAMS += litecoind
- + bin_PROGRAMS += litecoincashd
- endif
- if BUILD_BITCOIN_UTILS
- - bin_PROGRAMS += litecoin-cli litecoin-tx
- + bin_PROGRAMS += litecoincash-cli litecoincash-tx
- endif
- .PHONY: FORCE check-symbols check-security
- @@ -288,7 +288,6 @@ libbitcoin_consensus_a_SOURCES = \
- hash.cpp \
- hash.h \
- prevector.h \
- - primitives/block.cpp \
- primitives/block.h \
- primitives/transaction.cpp \
- primitives/transaction.h \
- @@ -324,6 +323,7 @@ libbitcoin_common_a_SOURCES = \
- netaddress.cpp \
- netbase.cpp \
- policy/feerate.cpp \
- + primitives/block.cpp \
- protocol.cpp \
- scheduler.cpp \
- script/sign.cpp \
- @@ -370,16 +370,16 @@ nodist_libbitcoin_util_a_SOURCES = $(srcdir)/obj/build.h
- #
- # bitcoind binary #
- -litecoind_SOURCES = bitcoind.cpp
- -litecoind_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
- -litecoind_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- -litecoind_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- +litecoincashd_SOURCES = bitcoind.cpp
- +litecoincashd_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
- +litecoincashd_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- +litecoincashd_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- if TARGET_WINDOWS
- -litecoind_SOURCES += bitcoind-res.rc
- +litecoincashd_SOURCES += bitcoind-res.rc
- endif
- -litecoind_LDADD = \
- +litecoincashd_LDADD = \
- $(LIBBITCOIN_SERVER) \
- $(LIBBITCOIN_COMMON) \
- $(LIBUNIVALUE) \
- @@ -393,38 +393,38 @@ litecoind_LDADD = \
- $(LIBMEMENV) \
- $(LIBSECP256K1)
- -litecoind_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(ZMQ_LIBS)
- +litecoincashd_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(ZMQ_LIBS)
- # bitcoin-cli binary #
- -litecoin_cli_SOURCES = bitcoin-cli.cpp
- -litecoin_cli_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS)
- -litecoin_cli_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- -litecoin_cli_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- +litecoincash_cli_SOURCES = bitcoin-cli.cpp
- +litecoincash_cli_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS)
- +litecoincash_cli_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- +litecoincash_cli_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- if TARGET_WINDOWS
- -litecoin_cli_SOURCES += bitcoin-cli-res.rc
- +litecoincash_cli_SOURCES += bitcoin-cli-res.rc
- endif
- -litecoin_cli_LDADD = \
- +litecoincash_cli_LDADD = \
- $(LIBBITCOIN_CLI) \
- $(LIBUNIVALUE) \
- $(LIBBITCOIN_UTIL) \
- $(LIBBITCOIN_CRYPTO)
- -litecoin_cli_LDADD += $(BOOST_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(EVENT_LIBS)
- +litecoincash_cli_LDADD += $(BOOST_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(EVENT_LIBS)
- #
- # bitcoin-tx binary #
- -litecoin_tx_SOURCES = bitcoin-tx.cpp
- -litecoin_tx_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
- -litecoin_tx_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- -litecoin_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- +litecoincash_tx_SOURCES = bitcoin-tx.cpp
- +litecoincash_tx_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
- +litecoincash_tx_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- +litecoincash_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- if TARGET_WINDOWS
- -litecoin_tx_SOURCES += bitcoin-tx-res.rc
- +litecoincash_tx_SOURCES += bitcoin-tx-res.rc
- endif
- -litecoin_tx_LDADD = \
- +litecoincash_tx_LDADD = \
- $(LIBUNIVALUE) \
- $(LIBBITCOIN_COMMON) \
- $(LIBBITCOIN_UTIL) \
- @@ -432,7 +432,7 @@ litecoin_tx_LDADD = \
- $(LIBBITCOIN_CRYPTO) \
- $(LIBSECP256K1)
- -litecoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
- +litecoincash_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
- #
- # bitcoinconsensus library #
- diff --git a/src/Makefile.bench.include b/src/Makefile.bench.include
- index c1f3a0d..b623952 100644
- --- a/src/Makefile.bench.include
- +++ b/src/Makefile.bench.include
- @@ -2,15 +2,15 @@
- # Distributed under the MIT software license, see the accompanying
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -bin_PROGRAMS += bench/bench_litecoin
- +bin_PROGRAMS += bench/bench_litecoincash
- BENCH_SRCDIR = bench
- -BENCH_BINARY = bench/bench_litecoin$(EXEEXT)
- +BENCH_BINARY = bench/bench_litecoincash$(EXEEXT)
- RAW_TEST_FILES = \
- bench/data/block413567.raw
- GENERATED_TEST_FILES = $(RAW_TEST_FILES:.raw=.raw.h)
- -bench_bench_litecoin_SOURCES = \
- +bench_bench_litecoincash_SOURCES = \
- bench/bench_bitcoin.cpp \
- bench/bench.cpp \
- bench/bench.h \
- @@ -28,11 +28,11 @@ bench_bench_litecoin_SOURCES = \
- bench/perf.h \
- bench/prevector_destructor.cpp
- -nodist_bench_bench_litecoin_SOURCES = $(GENERATED_TEST_FILES)
- +nodist_bench_bench_litecoincash_SOURCES = $(GENERATED_TEST_FILES)
- -bench_bench_litecoin_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CLFAGS) $(EVENT_PTHREADS_CFLAGS) -I$(builddir)/bench/
- -bench_bench_litecoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- -bench_bench_litecoin_LDADD = \
- +bench_bench_litecoincash_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CLFAGS) $(EVENT_PTHREADS_CFLAGS) -I$(builddir)/bench/
- +bench_bench_litecoincash_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- +bench_bench_litecoincash_LDADD = \
- $(LIBBITCOIN_SERVER) \
- $(LIBBITCOIN_COMMON) \
- $(LIBBITCOIN_UTIL) \
- @@ -45,16 +45,16 @@ bench_bench_litecoin_LDADD = \
- $(LIBUNIVALUE)
- if ENABLE_ZMQ
- -bench_bench_litecoin_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
- +bench_bench_litecoincash_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
- endif
- if ENABLE_WALLET
- -bench_bench_litecoin_SOURCES += bench/coin_selection.cpp
- -bench_bench_litecoin_LDADD += $(LIBBITCOIN_WALLET) $(LIBBITCOIN_CRYPTO)
- +bench_bench_litecoincash_SOURCES += bench/coin_selection.cpp
- +bench_bench_litecoincash_LDADD += $(LIBBITCOIN_WALLET) $(LIBBITCOIN_CRYPTO)
- endif
- -bench_bench_litecoin_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS)
- -bench_bench_litecoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- +bench_bench_litecoincash_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS)
- +bench_bench_litecoincash_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- CLEAN_BITCOIN_BENCH = bench/*.gcda bench/*.gcno $(GENERATED_TEST_FILES)
- diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include
- index 2973e3d..e101591 100644
- --- a/src/Makefile.qt.include
- +++ b/src/Makefile.qt.include
- @@ -2,7 +2,7 @@
- # Distributed under the MIT software license, see the accompanying
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -bin_PROGRAMS += qt/litecoin-qt
- +bin_PROGRAMS += qt/litecoincash-qt
- EXTRA_LIBRARIES += qt/libbitcoinqt.a
- # bitcoin qt core #
- @@ -288,7 +288,7 @@ RES_ICONS = \
- qt/res/icons/history.png \
- qt/res/icons/info.png \
- qt/res/icons/key.png \
- - qt/res/icons/litecoin_splash.png \
- + qt/res/icons/litecoincash_splash.png \
- qt/res/icons/lock_closed.png \
- qt/res/icons/lock_open.png \
- qt/res/icons/network_disabled.png \
- @@ -397,7 +397,7 @@ QT_FORMS_H=$(join $(dir $(QT_FORMS_UI)),$(addprefix ui_, $(notdir $(QT_FORMS_UI:
- # Most files will depend on the forms and moc files as includes. Generate them
- # before anything else.
- $(QT_MOC): $(QT_FORMS_H)
- -$(qt_libbitcoinqt_a_OBJECTS) $(qt_litecoin_qt_OBJECTS) : | $(QT_MOC)
- +$(qt_libbitcoinqt_a_OBJECTS) $(qt_litecoincash_qt_OBJECTS) : | $(QT_MOC)
- #Generating these with a half-written protobuf header leads to wacky results.
- #This makes sure it's done.
- @@ -405,29 +405,29 @@ $(QT_MOC): $(PROTOBUF_H)
- $(QT_MOC_CPP): $(PROTOBUF_H)
- # bitcoin-qt binary #
- -qt_litecoin_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
- +qt_litecoincash_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
- $(QT_INCLUDES) $(PROTOBUF_CFLAGS) $(QR_CFLAGS)
- -qt_litecoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
- +qt_litecoincash_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
- -qt_litecoin_qt_SOURCES = qt/bitcoin.cpp
- +qt_litecoincash_qt_SOURCES = qt/bitcoin.cpp
- if TARGET_DARWIN
- - qt_litecoin_qt_SOURCES += $(BITCOIN_MM)
- + qt_litecoincash_qt_SOURCES += $(BITCOIN_MM)
- endif
- if TARGET_WINDOWS
- - qt_litecoin_qt_SOURCES += $(BITCOIN_RC)
- + qt_litecoincash_qt_SOURCES += $(BITCOIN_RC)
- endif
- -qt_litecoin_qt_LDADD = qt/libbitcoinqt.a $(LIBBITCOIN_SERVER)
- +qt_litecoincash_qt_LDADD = qt/libbitcoinqt.a $(LIBBITCOIN_SERVER)
- if ENABLE_WALLET
- -qt_litecoin_qt_LDADD += $(LIBBITCOIN_WALLET)
- +qt_litecoincash_qt_LDADD += $(LIBBITCOIN_WALLET)
- endif
- if ENABLE_ZMQ
- -qt_litecoin_qt_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
- +qt_litecoincash_qt_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
- endif
- -qt_litecoin_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) \
- +qt_litecoincash_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) \
- $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) \
- $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS)
- -qt_litecoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- -qt_litecoin_qt_LIBTOOLFLAGS = --tag CXX
- +qt_litecoincash_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- +qt_litecoincash_qt_LIBTOOLFLAGS = --tag CXX
- #locale/foo.ts -> locale/foo.qm
- QT_QM=$(QT_TS:.ts=.qm)
- @@ -459,9 +459,9 @@ CLEAN_QT = $(nodist_qt_libbitcoinqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda
- CLEANFILES += $(CLEAN_QT)
- bitcoin_qt_clean: FORCE
- - rm -f $(CLEAN_QT) $(qt_libbitcoinqt_a_OBJECTS) $(qt_litecoin_qt_OBJECTS) qt/litecoin-qt$(EXEEXT) $(LIBBITCOINQT)
- + rm -f $(CLEAN_QT) $(qt_libbitcoinqt_a_OBJECTS) $(qt_litecoincash_qt_OBJECTS) qt/litecoincash-qt$(EXEEXT) $(LIBBITCOINQT)
- -bitcoin_qt : qt/litecoin-qt$(EXEEXT)
- +bitcoin_qt : qt/litecoincash-qt$(EXEEXT)
- ui_%.h: %.ui
- @test -f $(UIC)
- diff --git a/src/Makefile.qttest.include b/src/Makefile.qttest.include
- index 5e0ff98..e644b7f 100644
- --- a/src/Makefile.qttest.include
- +++ b/src/Makefile.qttest.include
- @@ -2,8 +2,8 @@
- # Distributed under the MIT software license, see the accompanying
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -bin_PROGRAMS += qt/test/test_litecoin-qt
- -TESTS += qt/test/test_litecoin-qt
- +bin_PROGRAMS += qt/test/test_litecoincash-qt
- +TESTS += qt/test/test_litecoincash-qt
- TEST_QT_MOC_CPP = \
- qt/test/moc_compattests.cpp \
- @@ -25,15 +25,17 @@ TEST_QT_H = \
- qt/test/wallettests.h
- TEST_BITCOIN_CPP = \
- - test/test_bitcoin.cpp
- + test/test_bitcoin.cpp \
- + test/testutil.cpp
- TEST_BITCOIN_H = \
- - test/test_bitcoin.h
- + test/test_bitcoin.h \
- + test/testutil.h
- -qt_test_test_litecoin_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
- +qt_test_test_litecoincash_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
- $(QT_INCLUDES) $(QT_TEST_INCLUDES) $(PROTOBUF_CFLAGS)
- -qt_test_test_litecoin_qt_SOURCES = \
- +qt_test_test_litecoincash_qt_SOURCES = \
- qt/test/compattests.cpp \
- qt/test/rpcnestedtests.cpp \
- qt/test/test_main.cpp \
- @@ -42,35 +44,35 @@ qt_test_test_litecoin_qt_SOURCES = \
- $(TEST_BITCOIN_CPP) \
- $(TEST_BITCOIN_H)
- if ENABLE_WALLET
- -qt_test_test_litecoin_qt_SOURCES += \
- +qt_test_test_litecoincash_qt_SOURCES += \
- qt/test/paymentservertests.cpp \
- qt/test/wallettests.cpp \
- wallet/test/wallet_test_fixture.cpp
- endif
- -nodist_qt_test_test_litecoin_qt_SOURCES = $(TEST_QT_MOC_CPP)
- +nodist_qt_test_test_litecoincash_qt_SOURCES = $(TEST_QT_MOC_CPP)
- -qt_test_test_litecoin_qt_LDADD = $(LIBBITCOINQT) $(LIBBITCOIN_SERVER)
- +qt_test_test_litecoincash_qt_LDADD = $(LIBBITCOINQT) $(LIBBITCOIN_SERVER)
- if ENABLE_WALLET
- -qt_test_test_litecoin_qt_LDADD += $(LIBBITCOIN_WALLET)
- +qt_test_test_litecoincash_qt_LDADD += $(LIBBITCOIN_WALLET)
- endif
- if ENABLE_ZMQ
- -qt_test_test_litecoin_qt_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
- +qt_test_test_litecoincash_qt_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
- endif
- -qt_test_test_litecoin_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) \
- +qt_test_test_litecoincash_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) \
- $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \
- $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) \
- $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS)
- -qt_test_test_litecoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- -qt_test_test_litecoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
- +qt_test_test_litecoincash_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- +qt_test_test_litecoincash_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
- CLEAN_BITCOIN_QT_TEST = $(TEST_QT_MOC_CPP) qt/test/*.gcda qt/test/*.gcno
- CLEANFILES += $(CLEAN_BITCOIN_QT_TEST)
- -test_bitcoin_qt : qt/test/test_litecoin-qt$(EXEEXT)
- +test_bitcoin_qt : qt/test/test_litecoincash-qt$(EXEEXT)
- -test_bitcoin_qt_check : qt/test/test_litecoin-qt$(EXEEXT) FORCE
- +test_bitcoin_qt_check : qt/test/test_litecoincash-qt$(EXEEXT) FORCE
- $(MAKE) check-TESTS TESTS=$^
- test_bitcoin_qt_clean: FORCE
- diff --git a/src/Makefile.test.include b/src/Makefile.test.include
- index daade0d..5d8c61a 100644
- --- a/src/Makefile.test.include
- +++ b/src/Makefile.test.include
- @@ -2,11 +2,11 @@
- # Distributed under the MIT software license, see the accompanying
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -TESTS += test/test_litecoin
- -bin_PROGRAMS += test/test_litecoin
- -noinst_PROGRAMS += test/test_litecoin_fuzzy
- +TESTS += test/test_litecoincash
- +bin_PROGRAMS += test/test_litecoincash
- +noinst_PROGRAMS += test/test_litecoincash_fuzzy
- TEST_SRCDIR = test
- -TEST_BINARY=test/test_litecoin$(EXEEXT)
- +TEST_BINARY=test/test_litecoincash$(EXEEXT)
- JSON_TEST_FILES = \
- test/data/script_tests.json \
- @@ -64,7 +64,6 @@ BITCOIN_TESTS =\
- test/scheduler_tests.cpp \
- test/script_P2SH_tests.cpp \
- test/script_tests.cpp \
- - test/script_standard_tests.cpp \
- test/scriptnum_tests.cpp \
- test/scrypt_tests.cpp \
- test/serialize_tests.cpp \
- @@ -75,6 +74,8 @@ BITCOIN_TESTS =\
- test/test_bitcoin.cpp \
- test/test_bitcoin.h \
- test/test_bitcoin_main.cpp \
- + test/testutil.cpp \
- + test/testutil.h \
- test/timedata_tests.cpp \
- test/torcontrol_tests.cpp \
- test/transaction_tests.cpp \
- @@ -93,31 +94,31 @@ BITCOIN_TESTS += \
- wallet/test/crypto_tests.cpp
- endif
- -test_test_litecoin_SOURCES = $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES)
- -test_test_litecoin_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) $(EVENT_CFLAGS)
- -test_test_litecoin_LDADD =
- +test_test_litecoincash_SOURCES = $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES)
- +test_test_litecoincash_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) $(EVENT_CFLAGS)
- +test_test_litecoincash_LDADD =
- if ENABLE_WALLET
- -test_test_litecoin_LDADD += $(LIBBITCOIN_WALLET)
- +test_test_litecoincash_LDADD += $(LIBBITCOIN_WALLET)
- endif
- -test_test_litecoin_LDADD += $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) \
- +test_test_litecoincash_LDADD += $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) \
- $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS)
- -test_test_litecoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- +test_test_litecoincash_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- -test_test_litecoin_LDADD += $(LIBBITCOIN_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS)
- -test_test_litecoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static
- +test_test_litecoincash_LDADD += $(LIBBITCOIN_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS)
- +test_test_litecoincash_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static
- if ENABLE_ZMQ
- -test_test_litecoin_LDADD += $(ZMQ_LIBS)
- +test_test_litecoincash_LDADD += $(ZMQ_LIBS)
- endif
- #
- # test_bitcoin_fuzzy binary #
- -test_test_litecoin_fuzzy_SOURCES = test/test_bitcoin_fuzzy.cpp
- -test_test_litecoin_fuzzy_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
- -test_test_litecoin_fuzzy_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- -test_test_litecoin_fuzzy_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- +test_test_litecoincash_fuzzy_SOURCES = test/test_bitcoin_fuzzy.cpp
- +test_test_litecoincash_fuzzy_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
- +test_test_litecoincash_fuzzy_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
- +test_test_litecoincash_fuzzy_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
- -test_test_litecoin_fuzzy_LDADD = \
- +test_test_litecoincash_fuzzy_LDADD = \
- $(LIBUNIVALUE) \
- $(LIBBITCOIN_SERVER) \
- $(LIBBITCOIN_COMMON) \
- @@ -126,10 +127,10 @@ test_test_litecoin_fuzzy_LDADD = \
- $(LIBBITCOIN_CRYPTO) \
- $(LIBSECP256K1)
- -test_test_litecoin_fuzzy_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
- +test_test_litecoincash_fuzzy_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
- #
- -nodist_test_test_litecoin_SOURCES = $(GENERATED_TEST_FILES)
- +nodist_test_test_litecoincash_SOURCES = $(GENERATED_TEST_FILES)
- $(BITCOIN_TESTS): $(GENERATED_TEST_FILES)
- @@ -146,8 +147,7 @@ bitcoin_test_clean : FORCE
- rm -f $(CLEAN_BITCOIN_TEST) $(test_test_bitcoin_OBJECTS) $(TEST_BINARY)
- check-local:
- - @echo "Running test/util/bitcoin-util-test.py..."
- - $(PYTHON) $(top_builddir)/test/util/bitcoin-util-test.py
- + @echo "Skipping test/util/bitcoin-util-test.py as util not distributed..."
- $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
- if EMBEDDED_UNIVALUE
- $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check
- diff --git a/src/addrman.cpp b/src/addrman.cpp
- index a56bb4f..0c34c98 100644
- --- a/src/addrman.cpp
- +++ b/src/addrman.cpp
- @@ -241,8 +241,12 @@ void CAddrMan::Good_(const CService& addr, int64_t nTime)
- bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimePenalty)
- {
- - if (!addr.IsRoutable())
- + LogPrint(BCLog::ADDRMAN, "Trying %s...\n", addr.ToString());
- +
- + if (!addr.IsRoutable()) {
- + LogPrint(BCLog::ADDRMAN, "Dropping %s (isn't routable)\n", addr.ToString());
- return false;
- + }
- bool fNew = false;
- int nId;
- @@ -264,23 +268,31 @@ bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimeP
- pinfo->nServices = ServiceFlags(pinfo->nServices | addr.nServices);
- // do not update if no new information is present
- - if (!addr.nTime || (pinfo->nTime && addr.nTime <= pinfo->nTime))
- + if (!addr.nTime || (pinfo->nTime && addr.nTime <= pinfo->nTime)) {
- + LogPrint(BCLog::ADDRMAN, "Dropping %s (no new info)\n", addr.ToString());
- return false;
- + }
- // do not update if the entry was already in the "tried" table
- - if (pinfo->fInTried)
- + if (pinfo->fInTried) {
- + LogPrint(BCLog::ADDRMAN, "Dropping %s (already tried)\n", addr.ToString());
- return false;
- + }
- // do not update if the max reference count is reached
- - if (pinfo->nRefCount == ADDRMAN_NEW_BUCKETS_PER_ADDRESS)
- + if (pinfo->nRefCount == ADDRMAN_NEW_BUCKETS_PER_ADDRESS) {
- + LogPrint(BCLog::ADDRMAN, "Dropping %s (max refs reached)\n", addr.ToString());
- return false;
- + }
- // stochastic test: previous nRefCount == N: 2^N times harder to increase it
- int nFactor = 1;
- for (int n = 0; n < pinfo->nRefCount; n++)
- nFactor *= 2;
- - if (nFactor > 1 && (RandomInt(nFactor) != 0))
- + if (nFactor > 1 && (RandomInt(nFactor) != 0)) {
- + LogPrint(BCLog::ADDRMAN, "Dropping %s (stochastic test fail)\n", addr.ToString());
- return false;
- + }
- } else {
- pinfo = Create(addr, source, &nId);
- pinfo->nTime = std::max((int64_t)0, (int64_t)pinfo->nTime - nTimePenalty);
- @@ -309,6 +321,7 @@ bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimeP
- }
- }
- }
- + LogPrint(BCLog::ADDRMAN, "OK for %s\n", addr.ToString());
- return fNew;
- }
- diff --git a/src/addrman.h b/src/addrman.h
- index 18f3062..547088a 100644
- --- a/src/addrman.h
- +++ b/src/addrman.h
- @@ -472,8 +472,6 @@ public:
- nTried = 0;
- nNew = 0;
- nLastGood = 1; //Initially at 1 so that "never" is strictly worse.
- - mapInfo.clear();
- - mapAddr.clear();
- }
- CAddrMan()
- diff --git a/src/amount.h b/src/amount.h
- index 1ea6235..51b8ac4 100644
- --- a/src/amount.h
- +++ b/src/amount.h
- @@ -11,8 +11,10 @@
- /** Amount in satoshis (Can be negative) */
- typedef int64_t CAmount;
- -static const CAmount COIN = 100000000;
- -static const CAmount CENT = 1000000;
- +static const CAmount COIN_SCALE = 10; // LitecoinCash: 10:1 coinswap
- +
- +static const CAmount COIN = 100000000 / COIN_SCALE;
- +static const CAmount CENT = 1000000 / COIN_SCALE;
- /** No amount larger than this (in satoshi) is valid.
- *
- @@ -23,7 +25,7 @@ static const CAmount CENT = 1000000;
- * 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 = 84000000 * COIN;
- +static const CAmount MAX_MONEY = 84000000 * COIN * COIN_SCALE;
- inline bool MoneyRange(const CAmount& nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); }
- #endif // BITCOIN_AMOUNT_H
- diff --git a/src/bench/.gitignore b/src/bench/.gitignore
- index 40f8714..bd60d9e 100644
- --- a/src/bench/.gitignore
- +++ b/src/bench/.gitignore
- @@ -1 +1 @@
- -bench_litecoin
- +bench_litecoincash
- diff --git a/src/bench/checkblock.cpp b/src/bench/checkblock.cpp
- index f227c26..04b027e 100644
- --- a/src/bench/checkblock.cpp
- +++ b/src/bench/checkblock.cpp
- @@ -17,7 +17,7 @@ namespace block_bench {
- // a block off the wire, but before we can relay the block on to peers using
- // compact block relay.
- -// Litecoin uses block height 878439, hash 0babe680f55a55d54339511226755f0837261da89a4e78eba4d6436a63026df8
- +// LitecoinCash uses block height 878439, hash 0babe680f55a55d54339511226755f0837261da89a4e78eba4d6436a63026df8
- // which contains 3808 transactions.
- static void DeserializeBlockTest(benchmark::State& state)
- diff --git a/src/bench/data/block413567.raw b/src/bench/data/block413567.raw
- old mode 100755
- new mode 100644
- diff --git a/src/bitcoin-cli-res.rc b/src/bitcoin-cli-res.rc
- index 6110093..fb28231 100644
- --- a/src/bitcoin-cli-res.rc
- +++ b/src/bitcoin-cli-res.rc
- @@ -16,14 +16,14 @@ BEGIN
- BEGIN
- BLOCK "040904E4" // U.S. English - multilingual (hex)
- BEGIN
- - VALUE "CompanyName", "Litecoin"
- - VALUE "FileDescription", "litecoin-cli (JSON-RPC client for " PACKAGE_NAME ")"
- + VALUE "CompanyName", "LitecoinCash"
- + VALUE "FileDescription", "litecoincash-cli (JSON-RPC client for " PACKAGE_NAME ")"
- VALUE "FileVersion", VER_FILEVERSION_STR
- - VALUE "InternalName", "litecoin-cli"
- + VALUE "InternalName", "litecoincash-cli"
- VALUE "LegalCopyright", COPYRIGHT_STR
- VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
- - VALUE "OriginalFilename", "litecoin-cli.exe"
- - VALUE "ProductName", "litecoin-cli"
- + VALUE "OriginalFilename", "litecoincash-cli.exe"
- + VALUE "ProductName", "litecoincash-cli"
- VALUE "ProductVersion", VER_PRODUCTVERSION_STR
- END
- END
- diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp
- index 7daa4e4..ab639ee 100644
- --- a/src/bitcoin-cli.cpp
- +++ b/src/bitcoin-cli.cpp
- @@ -84,10 +84,10 @@ static int AppInitRPC(int argc, char* argv[])
- std::string strUsage = strprintf(_("%s RPC client version"), _(PACKAGE_NAME)) + " " + FormatFullVersion() + "\n";
- if (!gArgs.IsArgSet("-version")) {
- strUsage += "\n" + _("Usage:") + "\n" +
- - " litecoin-cli [options] <command> [params] " + strprintf(_("Send command to %s"), _(PACKAGE_NAME)) + "\n" +
- - " litecoin-cli [options] -named <command> [name=value] ... " + strprintf(_("Send command to %s (with named arguments)"), _(PACKAGE_NAME)) + "\n" +
- - " litecoin-cli [options] help " + _("List commands") + "\n" +
- - " litecoin-cli [options] help <command> " + _("Get help for a command") + "\n";
- + " litecoincash-cli [options] <command> [params] " + strprintf(_("Send command to %s"), _(PACKAGE_NAME)) + "\n" +
- + " litecoincash-cli [options] -named <command> [name=value] ... " + strprintf(_("Send command to %s (with named arguments)"), _(PACKAGE_NAME)) + "\n" +
- + " litecoincash-cli [options] help " + _("List commands") + "\n" +
- + " litecoincash-cli [options] help <command> " + _("Get help for a command") + "\n";
- strUsage += "\n" + HelpMessageCli();
- }
- diff --git a/src/bitcoin-tx-res.rc b/src/bitcoin-tx-res.rc
- index c5111fb..05a94df 100644
- --- a/src/bitcoin-tx-res.rc
- +++ b/src/bitcoin-tx-res.rc
- @@ -16,14 +16,14 @@ BEGIN
- BEGIN
- BLOCK "040904E4" // U.S. English - multilingual (hex)
- BEGIN
- - VALUE "CompanyName", "Litecoin"
- - VALUE "FileDescription", "litecoin-tx (CLI Litecoin transaction editor utility)"
- + VALUE "CompanyName", "LitecoinCash"
- + VALUE "FileDescription", "litecoincash-tx (CLI LitecoinCash transaction editor utility)"
- VALUE "FileVersion", VER_FILEVERSION_STR
- - VALUE "InternalName", "litecoin-tx"
- + VALUE "InternalName", "litecoincash-tx"
- VALUE "LegalCopyright", COPYRIGHT_STR
- VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
- - VALUE "OriginalFilename", "litecoin-tx.exe"
- - VALUE "ProductName", "litecoin-tx"
- + VALUE "OriginalFilename", "litecoincash-tx.exe"
- + VALUE "ProductName", "litecoincash-tx"
- VALUE "ProductVersion", VER_PRODUCTVERSION_STR
- END
- END
- diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp
- index 95982b0..c865eef 100644
- --- a/src/bitcoin-tx.cpp
- +++ b/src/bitcoin-tx.cpp
- @@ -54,10 +54,10 @@ static int AppInitRawTx(int argc, char* argv[])
- if (argc<2 || gArgs.IsArgSet("-?") || gArgs.IsArgSet("-h") || gArgs.IsArgSet("-help"))
- {
- // First part of help message is specific to this utility
- - std::string strUsage = strprintf(_("%s litecoin-tx utility version"), _(PACKAGE_NAME)) + " " + FormatFullVersion() + "\n\n" +
- + std::string strUsage = strprintf(_("%s litecoincash-tx utility version"), _(PACKAGE_NAME)) + " " + FormatFullVersion() + "\n\n" +
- _("Usage:") + "\n" +
- - " litecoin-tx [options] <hex-tx> [commands] " + _("Update hex-encoded litecoin transaction") + "\n" +
- - " litecoin-tx [options] -create [commands] " + _("Create hex-encoded litecoin transaction") + "\n" +
- + " litecoincash-tx [options] <hex-tx> [commands] " + _("Update hex-encoded litecoincash transaction") + "\n" +
- + " litecoincash-tx [options] -create [commands] " + _("Create hex-encoded litecoincash transaction") + "\n" +
- "\n";
- fprintf(stdout, "%s", strUsage.c_str());
- @@ -310,9 +310,6 @@ static void MutateTxAddOutPubKey(CMutableTransaction& tx, const std::string& str
- }
- if (bSegWit) {
- - if (!pubkey.IsCompressed()) {
- - throw std::runtime_error("Uncompressed pubkeys are not useable for SegWit outputs");
- - }
- // Call GetScriptForWitness() to build a P2WSH scriptPubKey
- scriptPubKey = GetScriptForWitness(scriptPubKey);
- }
- @@ -380,11 +377,6 @@ static void MutateTxAddOutMultiSig(CMutableTransaction& tx, const std::string& s
- CScript scriptPubKey = GetScriptForMultisig(required, pubkeys);
- if (bSegWit) {
- - for (CPubKey& pubkey : pubkeys) {
- - if (!pubkey.IsCompressed()) {
- - throw std::runtime_error("Uncompressed pubkeys are not useable for SegWit outputs");
- - }
- - }
- // Call GetScriptForWitness() to build a P2WSH scriptPubKey
- scriptPubKey = GetScriptForWitness(scriptPubKey);
- }
- diff --git a/src/bitcoind-res.rc b/src/bitcoind-res.rc
- index 3dc7c38..b88aa44 100644
- --- a/src/bitcoind-res.rc
- +++ b/src/bitcoind-res.rc
- @@ -16,14 +16,14 @@ BEGIN
- BEGIN
- BLOCK "040904E4" // U.S. English - multilingual (hex)
- BEGIN
- - VALUE "CompanyName", "Litecoin"
- - VALUE "FileDescription", "litecoind (Litecoin node with a JSON-RPC server)"
- + VALUE "CompanyName", "LitecoinCash"
- + VALUE "FileDescription", "litecoincashd (LitecoinCash node with a JSON-RPC server)"
- VALUE "FileVersion", VER_FILEVERSION_STR
- - VALUE "InternalName", "litecoind"
- + VALUE "InternalName", "litecoincashd"
- VALUE "LegalCopyright", COPYRIGHT_STR
- VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
- - VALUE "OriginalFilename", "litecoind.exe"
- - VALUE "ProductName", "litecoind"
- + VALUE "OriginalFilename", "litecoincashd.exe"
- + VALUE "ProductName", "litecoincashd"
- VALUE "ProductVersion", VER_PRODUCTVERSION_STR
- END
- END
- diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp
- index ba875aa..c9ab4a3 100644
- --- a/src/bitcoind.cpp
- +++ b/src/bitcoind.cpp
- @@ -85,7 +85,7 @@ bool AppInit(int argc, char* argv[])
- else
- {
- strUsage += "\n" + _("Usage:") + "\n" +
- - " litecoind [options] " + strprintf(_("Start %s Daemon"), _(PACKAGE_NAME)) + "\n";
- + " litecoincashd [options] " + strprintf(_("Start %s Daemon"), _(PACKAGE_NAME)) + "\n";
- strUsage += "\n" + HelpMessage(HMM_BITCOIND);
- }
- @@ -119,7 +119,7 @@ bool AppInit(int argc, char* argv[])
- // Error out when loose non-argument tokens are encountered on command line
- for (int i = 1; i < argc; i++) {
- if (!IsSwitchChar(argv[i][0])) {
- - fprintf(stderr, "Error: Command line contains unexpected token '%s', see litecoind -h for a list of options.\n", argv[i]);
- + fprintf(stderr, "Error: Command line contains unexpected token '%s', see litecoincashd -h for a list of options.\n", argv[i]);
- exit(EXIT_FAILURE);
- }
- }
- @@ -147,7 +147,7 @@ bool AppInit(int argc, char* argv[])
- if (gArgs.GetBoolArg("-daemon", false))
- {
- #if HAVE_DECL_DAEMON
- - fprintf(stdout, "Litecoin server starting\n");
- + fprintf(stdout, "LitecoinCash server starting\n");
- // Daemonize
- if (daemon(1, 0)) { // don't chdir (1), do close FDs (0)
- diff --git a/src/chainparams.cpp b/src/chainparams.cpp
- index ba65fec..8dce89f 100644
- --- a/src/chainparams.cpp
- +++ b/src/chainparams.cpp
- @@ -14,6 +14,9 @@
- #include "chainparamsseeds.h"
- +#define POW_FORK_TIME 1518982404
- +#define LAST_SCRYPT_BLOCK 1371111
- +
- static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
- {
- CMutableTransaction txNew;
- @@ -79,7 +82,7 @@ public:
- consensus.BIP34Hash = uint256S("fa09d204a83a768ed5a7c8d441fa62f2043abf420cff1226c7b4329aeb9d51cf");
- consensus.BIP65Height = 918684; // bab3041e8977e0dc3eeff63fe707b92bde1dd449d8efafb248c27c8264cc311a
- consensus.BIP66Height = 811879; // 7aceee012833fa8952f8835d8b1b3ae233cd6ab08fdb27a771d2bd7bdc491894
- - consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
- + consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
- consensus.nPowTargetTimespan = 3.5 * 24 * 60 * 60; // 3.5 days
- consensus.nPowTargetSpacing = 2.5 * 60;
- consensus.fPowAllowMinDifficultyBlocks = false;
- @@ -100,40 +103,45 @@ public:
- consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1485561600; // January 28, 2017
- consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1517356801; // January 31st, 2018
- + // LitecoinCash fields
- + consensus.powForkTime = POW_FORK_TIME; // Time of PoW hash method change
- + consensus.lastScryptBlock = LAST_SCRYPT_BLOCK; // Height of last scrypt block
- + consensus.powLimitSHA = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // Initial hash target at fork
- + consensus.slowStartBlocks = 2000; // Scale post-fork block reward up over this many blocks
- + consensus.premineAmount = 550000; // Premine amount (less than 1% of issued currency at fork time)
- + std::vector<unsigned char> vch = ParseHex("76a914c9f3305556963e2976ccf3348b89a6cc736b6a4e88ac");
- + consensus.premineOutputScript = CScript(vch.begin(), vch.end()); // Output script for premine block
- +
- // The best chain should have at least this much work.
- - consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000002ebcfe2dd9eff82666");
- + consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000401b101e2e526d5821"); // LitecoinCash: At LAST_SCRYPT_BLOCK+1
- // By default assume that the signatures in ancestors of this block are valid.
- - consensus.defaultAssumeValid = uint256S("0x59c9b9d3fec105bdc716d84caa7579503d5b05b73618d0bf2d5fa639f780a011"); //1353397
- + consensus.defaultAssumeValid = uint256S("0x00000000de1e4e93317241177b5f1d72fc151c6e76815e9b0be4961dfd309d60"); // LitecoinCash: LAST_SCRYPT_BLOCK+1
- /**
- * 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] = 0xfb;
- - pchMessageStart[1] = 0xc0;
- - pchMessageStart[2] = 0xb6;
- - pchMessageStart[3] = 0xdb;
- - nDefaultPort = 9333;
- + pchMessageStart[0] = 0xc7;
- + pchMessageStart[1] = 0xe4;
- + pchMessageStart[2] = 0xba;
- + pchMessageStart[3] = 0xf8;
- + nDefaultPort = 62458;
- nPruneAfterHeight = 100000;
- - genesis = CreateGenesisBlock(1317972665, 2084524493, 0x1e0ffff0, 1, 50 * COIN);
- + genesis = CreateGenesisBlock(1317972665, 2084524493, 0x1e0ffff0, 1, 50 * COIN * COIN_SCALE);
- consensus.hashGenesisBlock = genesis.GetHash();
- assert(consensus.hashGenesisBlock == uint256S("0x12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2"));
- assert(genesis.hashMerkleRoot == uint256S("0x97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9"));
- - // Note that of those with the service bits flag, most only support a subset of possible options
- - vSeeds.emplace_back("seed-a.litecoin.loshan.co.uk", true);
- - vSeeds.emplace_back("dnsseed.thrasher.io", true);
- - vSeeds.emplace_back("dnsseed.litecointools.com", true);
- - vSeeds.emplace_back("dnsseed.litecoinpool.org", true);
- - vSeeds.emplace_back("dnsseed.koin-project.com", false);
- + // Note that of those with the service bits flag, most only support a subset of possible option
- + vSeeds.emplace_back("seeds.litecoinca.sh", false);
- - base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,48);
- + base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,28);
- base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5);
- base58Prefixes[SCRIPT_ADDRESS2] = std::vector<unsigned char>(1,50);
- - base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,176);
- + base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,176);
- base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E};
- base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4};
- @@ -161,15 +169,16 @@ public:
- {456000, uint256S("0xbf34f71cc6366cd487930d06be22f897e34ca6a40501ac7d401be32456372004")},
- {638902, uint256S("0x15238656e8ec63d28de29a8c75fcf3a5819afc953dcd9cc45cecc53baec74f38")},
- {721000, uint256S("0x198a7b4de1df9478e2463bd99d75b714eab235a2e63e741641dc8a759a9840e5")},
- + {LAST_SCRYPT_BLOCK+1, uint256S("0x00000000de1e4e93317241177b5f1d72fc151c6e76815e9b0be4961dfd309d60")}, // LitecoinCash: Premine block
- }
- };
- chainTxData = ChainTxData{
- - // Data as of block 59c9b9d3fec105bdc716d84caa7579503d5b05b73618d0bf2d5fa639f780a011 (height 1353397).
- - 1516406833, // * UNIX timestamp of last known number of transactions
- - 19831879, // * total number of transactions between genesis and that timestamp
- - // (the tx=... number in the SetBestChain debug.log lines)
- - 0.06 // * estimated number of transactions per second after that timestamp
- + // Data as of block db42d00d824950a125f9b08b6b6c282c484781562fa8b3bd29d6ce4a2627c348 (height 1259851).
- + 1518985227, // * UNIX timestamp of last known number of transactions
- + 21458357, // * total number of transactions between genesis and that timestamp
- + // (the tx=... number in the SetBestChain debug.log lines)
- + 0.63 // * estimated number of transactions per second after that timestamp
- };
- }
- };
- @@ -207,32 +216,37 @@ public:
- consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nStartTime = 1483228800; // January 1, 2017
- consensus.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout = 1517356801; // January 31st, 2018
- + // LitecoinCash fields
- + consensus.powForkTime = 1518355163; // Time of PoW hash method change
- + consensus.lastScryptBlock = 1366830; // Height of last scrypt block
- + consensus.powLimitSHA = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // Initial hash target at fork
- + consensus.slowStartBlocks = 400; // Scale post-fork block reward up over this many blocks
- + consensus.premineAmount = 550000; // Premine amount (less than 1% of issued currency at fork time)
- + std::vector<unsigned char> vch = ParseHex("76a914c9f3305556963e2976ccf3348b89a6cc736b6a4e88ac");
- + consensus.premineOutputScript = CScript(vch.begin(), vch.end()); // Output script for premine block
- +
- // The best chain should have at least this much work.
- - consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000007d006a402163e");
- + consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000003b68f02ca48530a788"); // LitecoinCash: 1366831
- // By default assume that the signatures in ancestors of this block are valid.
- - consensus.defaultAssumeValid = uint256S("0xa0afbded94d4be233e191525dc2d467af5c7eab3143c852c3cd549831022aad6"); //343833
- + consensus.defaultAssumeValid = uint256S("0x09a5ca9513d4f9cce6f0c083a897219c44aebd5c65713c6903ae558022cd5921"); // LitecoinCash: 1366830
- - pchMessageStart[0] = 0xfd;
- - pchMessageStart[1] = 0xd2;
- - pchMessageStart[2] = 0xc8;
- - pchMessageStart[3] = 0xf1;
- + pchMessageStart[0] = 0xb6;
- + pchMessageStart[1] = 0xf5;
- + pchMessageStart[2] = 0xd3;
- + pchMessageStart[3] = 0xcf;
- nDefaultPort = 19335;
- nPruneAfterHeight = 1000;
- - genesis = CreateGenesisBlock(1486949366, 293345, 0x1e0ffff0, 1, 50 * COIN);
- + genesis = CreateGenesisBlock(1486949366, 293345, 0x1e0ffff0, 1, 50 * COIN * COIN_SCALE);
- consensus.hashGenesisBlock = genesis.GetHash();
- assert(consensus.hashGenesisBlock == uint256S("0x4966625a4b2851d9fdee139e56211a0d88575f59ed816ff5e6a63deb4e3e29a0"));
- assert(genesis.hashMerkleRoot == uint256S("0x97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9"));
- vFixedSeeds.clear();
- vSeeds.clear();
- - // nodes with support for servicebits filtering should be at the top
- - vSeeds.emplace_back("testnet-seed.litecointools.com", true);
- - vSeeds.emplace_back("seed-b.litecoin.loshan.co.uk", true);
- - vSeeds.emplace_back("dnsseed-testnet.thrasher.io", true);
- - base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
- + base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,43);
- base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
- base58Prefixes[SCRIPT_ADDRESS2] = std::vector<unsigned char>(1,58);
- base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
- @@ -243,21 +257,21 @@ public:
- fDefaultConsistencyChecks = false;
- fRequireStandard = false;
- - fMineBlocksOnDemand = false;
- + fMineBlocksOnDemand = true;
- checkpointData = (CCheckpointData) {
- {
- {2056, uint256S("17748a31ba97afdc9a4f86837a39d287e3e7c7290a08a1d816c5969c78a83289")},
- + {1366831, uint256S("0x000000007b6db93ffa173567eebcada0ac0d99d8c9c55777ddf7f2af6cbe7ffc")}, // LitecoinCash: Testnet premine block
- }
- };
- chainTxData = ChainTxData{
- - // Data as of block a0afbded94d4be233e191525dc2d467af5c7eab3143c852c3cd549831022aad6 (height 343833)
- - 1516406749,
- - 794057,
- + // Data as of block 3351b6229da00b47ad7a8d7e1323b0e2874744b5296e3d6448293463ab758624 (height 153489)
- + 1502953751,
- + 382986,
- 0.01
- };
- -
- }
- };
- @@ -303,7 +317,7 @@ public:
- nDefaultPort = 19444;
- nPruneAfterHeight = 1000;
- - genesis = CreateGenesisBlock(1296688602, 0, 0x207fffff, 1, 50 * COIN);
- + genesis = CreateGenesisBlock(1296688602, 0, 0x207fffff, 1, 50 * COIN * COIN_SCALE);
- consensus.hashGenesisBlock = genesis.GetHash();
- assert(consensus.hashGenesisBlock == uint256S("0x530827f38f93b43ed12af0b3ad25a288dc02ed74d6d7857862df51fc56c416f9"));
- assert(genesis.hashMerkleRoot == uint256S("0x97ddfbbae6be97fd6cdf3e7ca13232a3afff2353e29badfab7f73011edd4ced9"));
- @@ -313,7 +327,7 @@ public:
- fDefaultConsistencyChecks = true;
- fRequireStandard = false;
- - fMineBlocksOnDemand = true;
- + fMineBlocksOnDemand = true;
- checkpointData = (CCheckpointData) {
- {
- diff --git a/src/chainparamsbase.cpp b/src/chainparamsbase.cpp
- index 16a4da6..bcc471e 100644
- --- a/src/chainparamsbase.cpp
- +++ b/src/chainparamsbase.cpp
- @@ -32,7 +32,7 @@ class CBaseMainParams : public CBaseChainParams
- public:
- CBaseMainParams()
- {
- - nRPCPort = 9332;
- + nRPCPort = 62457;
- }
- };
- @@ -44,7 +44,7 @@ class CBaseTestNetParams : public CBaseChainParams
- public:
- CBaseTestNetParams()
- {
- - nRPCPort = 19332;
- + nRPCPort = 62455;
- strDataDir = "testnet4";
- }
- };
- @@ -57,7 +57,7 @@ class CBaseRegTestParams : public CBaseChainParams
- public:
- CBaseRegTestParams()
- {
- - nRPCPort = 19332;
- + nRPCPort = 62455;
- strDataDir = "regtest";
- }
- };
- diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h
- index 0cae7a5..ab79d14 100644
- --- a/src/chainparamsseeds.h
- +++ b/src/chainparamsseeds.h
- @@ -1,360 +1,21 @@
- #ifndef BITCOIN_CHAINPARAMSSEEDS_H
- #define BITCOIN_CHAINPARAMSSEEDS_H
- /**
- - * List of fixed seed nodes for the litecoin network
- + * List of fixed seed nodes for the litecoincash network
- * AUTOGENERATED by contrib/seeds/generate-seeds.py
- *
- * Each line contains a 16-byte IPv6 address and a port.
- * IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly.
- */
- static SeedSpec6 pnSeed6_main[] = {
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x13,0xab,0xad}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x27,0x40,0x07}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x27,0xae,0x74}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x2d,0x45,0x0d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x46,0x3c,0x3b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x53,0x80,0xc7}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xa4,0xdf,0x66}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xff,0x56,0x07}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0e,0x98,0x79,0x2d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0e,0xa2,0xd0,0x9d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0x59,0xc1,0xc9}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0x5c,0xdd,0x42}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0x6f,0xad,0xd2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0xe3,0xcc,0x4e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0xf9,0x48,0x7b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x18,0x20,0xc9,0x52}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x18,0x2a,0xcf,0x5f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x18,0x71,0xea,0xe3}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x18,0xdc,0x45,0xf2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0xdc,0x07,0x83}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0xc1,0x44,0x0a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xc2,0x98,0xec}, 33661},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xc6,0xa8,0xc6}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x24,0xf9,0x6c,0x3c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x3d,0xd1,0x90}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x61,0xb5,0x56}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x78,0xa1,0x93}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x94,0xc3,0xe6}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x9d,0xb7,0x10}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0xdd,0xd1,0xde}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x26,0x1b,0x63,0x2c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x26,0x6c,0x5c,0x31}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4d,0x83,0x04}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4d,0xf8,0x0d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x15,0x92,0xf5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x1c,0xc9,0x44}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x20,0x32,0x62}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x25,0xbf,0x71}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x26,0x38,0x6e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0xe5,0xa8,0xc9}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0xee,0xee,0xb0}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0xfe,0xf0,0x56}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x36,0xcf,0x5b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x37,0x5f,0xe3}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x4a,0xe4,0x9a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x59,0x30,0xf3}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x5d,0xe8,0x3b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0xbb,0x01,0x53}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x31,0xe4,0xce,0x09}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x32,0x3f,0xa6,0x1b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0x32,0xf4,0x2c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0xe5,0xab,0x6c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0x99,0x78,0x20}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0xa6,0xd0,0xbe}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3c,0x28,0x2b,0xbd}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3c,0xbf,0x6a,0x94}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3e,0x98,0x36,0x2c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3e,0x98,0x3a,0x10}, 9679},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3e,0xd4,0x8d,0x21}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3f,0x8d,0xf6,0x2a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3f,0xe0,0x37,0x4c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x40,0x22,0xe7,0x8c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x41,0x2c,0x76,0xc2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x41,0xbd,0xf0,0x7e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0xbb,0x41,0x06}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0xc4,0x05,0x21}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x43,0x06,0xe2,0xdd}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x61,0xc9,0x4c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x66,0x9e,0xac}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x72,0xe9,0x2c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0xab,0x10,0xfa}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0xc6,0x24,0xb4}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x45,0x1b,0xad,0xe3}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x45,0x70,0x6e,0xf7}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x45,0xac,0xa9,0xbc}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x46,0x3f,0xaa,0x56}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x46,0x5f,0xdb,0x88}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x46,0x76,0xc5,0x45}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x46,0x7c,0xa8,0x0c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x47,0x78,0x10,0xda}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x48,0xb9,0x78,0x1d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x48,0xea,0xfb,0xcb}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4a,0x42,0x5d,0x16}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4a,0x50,0xeb,0xb4}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4a,0xd0,0xdd,0xe0}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4c,0x0c,0xf7,0x2d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4c,0x6b,0x08,0x43}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4d,0x25,0x9c,0xa6}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4d,0x5a,0xc3,0x43}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4d,0x6e,0x0b,0x34}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4e,0x81,0xf1,0x91}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4f,0x87,0xc8,0x1b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4f,0x9d,0x58,0x30}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0x53,0xbf,0xc7}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0x65,0x5d,0x22}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0x7a,0x2b,0x4e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0xd1,0xea,0xad}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0xd3,0x84,0xc5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0xda,0x6c,0x0e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0x18,0x65,0x8c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0x1b,0x60,0x25}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0x5e,0xc5,0xfa}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0x6f,0x76,0x38}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x52,0xca,0xa2,0x05}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x53,0xa2,0xc4,0xc0}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x53,0xb7,0x6e,0xfb}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x53,0xd4,0x61,0x22}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x54,0x55,0x66,0x71}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x54,0xd7,0x50,0x2b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x54,0xea,0x34,0xbe}, 37700},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0x15,0x90,0xe2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0x8f,0x89,0xce}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0x91,0xf8,0xb8}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xc2,0xee,0x82}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xc3,0xf2,0x34}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd6,0x44,0x7a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xf5,0xa7,0xf6}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x56,0x02,0x57,0x13}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x56,0xa6,0xea,0x04}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x57,0x4f,0x5e,0xdd}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x57,0xec,0x1b,0x9b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x57,0xf9,0xcf,0x59}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x58,0x63,0xb8,0x07}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x58,0xbf,0x33,0x07}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x58,0xbf,0xf7,0x0b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x58,0xca,0xca,0xdd}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x58,0xd0,0x03,0x52}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0x16,0x68,0x30}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0xb3,0x99,0xab}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0xd4,0x4b,0x06}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0xdd,0xd7,0x38}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0xdd,0xf1,0x2c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0xee,0x4d,0x45}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0x6d,0x70,0x5a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0x6d,0x70,0x5e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0x7e,0x76,0xa4}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0xc3,0x2a,0x86}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0xc5,0x2c,0x2b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0xe3,0x2f,0xf7}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0xe4,0x9b,0x3f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0xf0,0x8e,0xe4}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5c,0x3f,0x58,0x7d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5c,0x6b,0xa0,0x4d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5c,0xde,0xb4,0x0f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5d,0x64,0x33,0x30}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5d,0x68,0xd2,0x70}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0x9c,0xae,0x41}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0xd2,0x3e,0x49}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0xf2,0xe8,0x5c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0xfe,0x15,0x51}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0x4f,0x66,0xd1}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0x9a,0x5a,0x63}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xae,0x65,0x0e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd3,0x88,0x56}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd3,0xbd,0x03}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd5,0x89,0x03}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd5,0xb6,0xb6}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x60,0x13,0x1c,0x5b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x60,0x1b,0x08,0xf2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x61,0x5b,0xe0,0xfb}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x62,0xc6,0x68,0x39}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x63,0x45,0x11,0x92}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x65,0x64,0x8d,0x45}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0x38,0x88,0x69}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0x52,0x38,0x19}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0xcb,0x32,0x3a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0xda,0x03,0x7a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0xf2,0x42,0x24}, 3880},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0x23,0x60,0xff}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0xdb,0xfb,0x91}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0xee,0xc6,0xa5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0xef,0xe6,0x83}, 28001},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6b,0x9b,0x78,0x83}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6b,0xb4,0x45,0xeb}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6b,0xb7,0x25,0x9a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6c,0xaa,0x1a,0xd2}, 11333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6c,0xde,0x95,0x53}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0x4b,0xac,0x28}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0x58,0x55,0xb1}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0x6f,0xb2,0xb5}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0xac,0x4d,0xcc}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0xc3,0xb3,0x3f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0xec,0x58,0xe5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6e,0x04,0x28,0x93}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x71,0x69,0x8b,0x2a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x74,0x3e,0xe0,0x17}, 15896},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0xa3,0x78,0xb3}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0xa3,0x7a,0xd0}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0x09,0x74,0x44}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0x0f,0x64,0x78}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0x1c,0x0c,0x98}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0x1c,0xb1,0x42}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0xcd,0xea,0x51}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x78,0x5c,0x75,0x25}, 10001},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x79,0x36,0xaf,0x5a}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x79,0x36,0xaf,0xbf}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x86,0x77,0xdd,0x73}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x88,0x1e,0x2c,0x56}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x88,0x90,0x9b,0x73}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8a,0xc5,0x9c,0x81}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8b,0xc7,0x5a,0xdf}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8f,0x59,0x79,0xcf}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x90,0x4c,0xdc,0x11}, 9002},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x93,0xe5,0x0d,0xd2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x94,0x42,0x3a,0xc2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x98,0xba,0x24,0x56}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9e,0x81,0xd4,0xec}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9e,0x81,0xd4,0xfb}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9f,0xcb,0x6e,0x89}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9f,0xfd,0x15,0x2e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa2,0xd5,0xfc,0x2e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa6,0x46,0x5e,0x6a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x58,0x0f,0x59}, 6001},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa8,0xeb,0x51,0x8f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa9,0x2c,0x22,0x58}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa9,0x39,0x91,0x65}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xab,0x19,0xdd,0x28}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xac,0x68,0x68,0xcb}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0x20,0x0c,0x6c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0x33,0xb1,0x02}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0x47,0x44,0x65}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0x50,0xbe,0x56}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xd1,0x2c,0x22}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xd1,0x35,0x72}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x08,0x85}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xff,0xcc,0x7c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xae,0x61,0xf0,0x1a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xae,0x75,0xf2,0xcd}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x63,0x07,0xfd}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x66,0xc0,0x08}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x7e,0xa7,0x0a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0xdd,0x2b,0x79}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x0c,0x76,0x80}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x0f,0x9e,0xed}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x14,0x37,0xea}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x9b,0x33,0x36}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0xee,0xec,0x82}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb6,0xff,0x3d,0xca}, 28374},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb8,0x3d,0xd5,0x05}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb8,0x46,0x21,0xbe}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb8,0x46,0xfe,0xee}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb8,0x5f,0x30,0xca}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x08,0xa5,0x96}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x0f,0x5c,0x12}, 10993},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x15,0xdf,0xe7}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x19,0x78,0x5b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x23,0x89,0x32}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x32,0xd5,0x7c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x38,0x52,0x1a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x40,0x68,0x02}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x56,0x53,0x35}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x65,0xda,0x8c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x67,0xf3,0x85}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x7f,0x11,0x7d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x85,0x28,0xc8}, 8234},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x8d,0x18,0x7f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x8d,0x18,0xf9}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x94,0xa2,0x23}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x99,0xc6,0xe7}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x9a,0x0f,0xbf}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xa0,0xd0,0x7a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xb0,0x8d,0x0b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xb5,0x0b,0xe2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xb7,0xa1,0x23}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xc2,0x8c,0x9b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xdc,0x21,0x2e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x2a,0x3b,0x74}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x48,0xd6,0x06}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x7e,0x3c,0x33}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x8a,0x21,0x21}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xa8,0x51,0x38}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xac,0x9b,0x51}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xd6,0x1e,0xd8}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xf1,0x3a,0x4f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbd,0x26,0x58,0x69}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbe,0x75,0x85,0xac}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbf,0x65,0xec,0xde}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0x6f,0x98,0x3a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0xa2,0x64,0x9c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0xbb,0x74,0xf5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x17,0xb5,0x87}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x6a,0x1e,0xad}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x2c,0x88,0xb2}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x3f,0x8f,0xc5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x4f,0x08,0x25}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x58,0x6a,0x28}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0xbe,0x5d,0xeb}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc3,0x44,0x9f,0xb5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc3,0x9a,0xeb,0x5d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc3,0xa9,0x8a,0x02}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc4,0x26,0xe9,0x82}, 10333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc6,0x28,0x30,0x16}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc6,0x30,0xd8,0x31}, 9933},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc6,0x62,0x30,0xc0}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc7,0xcc,0xd3,0x57}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcb,0x3c,0x02,0x43}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcb,0x62,0xaf,0x1a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcb,0x62,0xaf,0x2b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcb,0xda,0x09,0x84}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcd,0xb9,0x78,0x3a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcf,0xfe,0x3c,0x0c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd1,0x29,0xba,0x4e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd1,0x6c,0xce,0xe5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd1,0x85,0xdd,0x9f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd1,0x93,0x7f,0x6b}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd2,0xb7,0x0f,0xe3}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd4,0x18,0x60,0xc5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd4,0x2f,0xfc,0x0d}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd4,0x33,0x90,0x2a}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0x71,0xe8,0x2f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0x72,0xf4,0x69}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0x8d,0x9a,0xc9}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0x8f,0x6b,0x8f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0xa8,0x0d,0x97}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd9,0x14,0x82,0x48}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd9,0x67,0x20,0xd5}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd9,0x70,0xfb,0x15}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd9,0x7a,0xc0,0x5c}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd9,0x94,0x5e,0x36}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xdb,0x58,0xe8,0x7f}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xdb,0x75,0xf8,0x37}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xdc,0xc2,0x2b,0xed}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xdd,0xe5,0xa6,0x19}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xde,0xec,0x2c,0x2e}, 9333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xde,0xef,0x0b,0x83}, 9333}
- + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x2b,0x09,0xed}, 62458},
- + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x3f,0x59,0x21}, 62458},
- + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x65,0x76,0x71}, 62458},
- + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x90,0xca,0x08,0x52}, 62458},
- + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x3e,0xd7,0xa7}, 62458}
- };
- static SeedSpec6 pnSeed6_test[] = {
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x09,0x1f,0x43}, 19002},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0xef,0x1e,0xa4}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0x9f,0x0a,0x56}, 19333},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4c,0x5c,0x54}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0xdd,0xe4,0xd6}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0xed,0xf0,0x66}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0xa9,0xed,0x84}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0x8f,0xfe,0x97}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd6,0x63,0xc9}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0x83,0xa1,0xab}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0xf3,0x26,0x22}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0x59,0x9f,0xe5}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8a,0xc9,0xc3,0xca}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8b,0x3b,0x26,0x84}, 9898},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa2,0xd5,0xfc,0x42}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xd1,0x2a,0x07}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x2a,0x3b,0x74}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc3,0x8e,0x6f,0x4d}, 6753},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc6,0x3a,0x66,0x12}, 19335},
- - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xda,0xf4,0x92,0x6f}, 19335}
- +
- };
- #endif // BITCOIN_CHAINPARAMSSEEDS_H
- diff --git a/src/clientversion.cpp b/src/clientversion.cpp
- index dec014e..9c9b978 100644
- --- a/src/clientversion.cpp
- +++ b/src/clientversion.cpp
- @@ -13,7 +13,7 @@
- * for both bitcoind and bitcoin-core, to make it harder for attackers to
- * target servers or GUI users specifically.
- */
- -const std::string CLIENT_NAME("LitecoinCore");
- +const std::string CLIENT_NAME("LitecoinCashCore");
- /**
- * Client version number
- diff --git a/src/consensus/params.h b/src/consensus/params.h
- index 6240e82..f92b5cf 100644
- --- a/src/consensus/params.h
- +++ b/src/consensus/params.h
- @@ -7,6 +7,8 @@
- #define BITCOIN_CONSENSUS_PARAMS_H
- #include "uint256.h"
- +#include "script/script.h"
- +#include "amount.h"
- #include <map>
- #include <string>
- @@ -63,6 +65,13 @@ struct Params {
- int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
- uint256 nMinimumChainWork;
- uint256 defaultAssumeValid;
- +
- + uint32_t powForkTime; // LitecoinCash: Time of PoW hash method change
- + int lastScryptBlock; // LitecoinCash: Height of last scrypt block
- + int slowStartBlocks; // LitecoinCash: Scale post-fork block reward over this many blocks
- + uint256 powLimitSHA; // LitecoinCash: Initial hash target at fork
- + CAmount premineAmount; // LitecoinCash: Premine amount
- + CScript premineOutputScript; // LitecoinCash: Premine output script
- };
- } // namespace Consensus
- diff --git a/src/core_write.cpp b/src/core_write.cpp
- index 1431fa0..2b9deae 100644
- --- a/src/core_write.cpp
- +++ b/src/core_write.cpp
- @@ -23,7 +23,7 @@ UniValue ValueFromAmount(const CAmount& amount)
- int64_t quotient = n_abs / COIN;
- int64_t remainder = n_abs % COIN;
- return UniValue(UniValue::VNUM,
- - strprintf("%s%d.%08d", sign ? "-" : "", quotient, remainder));
- + strprintf("%s%d.%07d", sign ? "-" : "", quotient, remainder)); // LitecoinCash: Updated num decimals
- }
- std::string FormatScript(const CScript& script)
- @@ -68,6 +68,12 @@ const std::map<unsigned char, std::string> mapSigHashTypes = {
- {static_cast<unsigned char>(SIGHASH_NONE|SIGHASH_ANYONECANPAY), std::string("NONE|ANYONECANPAY")},
- {static_cast<unsigned char>(SIGHASH_SINGLE), std::string("SINGLE")},
- {static_cast<unsigned char>(SIGHASH_SINGLE|SIGHASH_ANYONECANPAY), std::string("SINGLE|ANYONECANPAY")},
- + {static_cast<unsigned char>(SIGHASH_ALL|SIGHASH_FORKID), std::string("ALL|FORKID")}, // LitecoinCash: Replay attack protection
- + {static_cast<unsigned char>(SIGHASH_NONE|SIGHASH_FORKID), std::string("NONE|FORKID")}, // LitecoinCash: Replay attack protection
- + {static_cast<unsigned char>(SIGHASH_SINGLE|SIGHASH_FORKID), std::string("SINGLE|FORKID")}, // LitecoinCash: Replay attack protection
- + {static_cast<unsigned char>(SIGHASH_ALL|SIGHASH_FORKID|SIGHASH_ANYONECANPAY), std::string("ALL|FORKID|ANYONECANPAY")}, // LitecoinCash: Replay attack protection
- + {static_cast<unsigned char>(SIGHASH_NONE|SIGHASH_FORKID|SIGHASH_ANYONECANPAY), std::string("NONE|FORKID|ANYONECANPAY")}, // LitecoinCash: Replay attack protection
- + {static_cast<unsigned char>(SIGHASH_SINGLE|SIGHASH_FORKID|SIGHASH_ANYONECANPAY), std::string("SINGLE|FORKID|ANYONECANPAY")}, // LitecoinCash: Replay attack protection
- };
- /**
- @@ -102,7 +108,9 @@ std::string ScriptToAsmStr(const CScript& script, const bool fAttemptSighashDeco
- // this won't decode correctly formatted public keys in Pubkey or Multisig scripts due to
- // the restrictions on the pubkey formats (see IsCompressedOrUncompressedPubKey) being incongruous with the
- // checks in CheckSignatureEncoding.
- - if (CheckSignatureEncoding(vch, SCRIPT_VERIFY_STRICTENC, nullptr)) {
- + // LitecoinCash: use SCRIPT_ENABLE_SIGHASH_FORKID
- + auto flags = SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SIGHASH_FORKID;
- + if (CheckSignatureEncoding(vch, flags, nullptr)) {
- const unsigned char chSigHashType = vch.back();
- if (mapSigHashTypes.count(chSigHashType)) {
- strSigHashDecode = "[" + mapSigHashTypes.find(chSigHashType)->second + "]";
- diff --git a/src/httpserver.cpp b/src/httpserver.cpp
- index dc7016b..86b37f7 100644
- --- a/src/httpserver.cpp
- +++ b/src/httpserver.cpp
- @@ -24,7 +24,6 @@
- #include <event2/thread.h>
- #include <event2/buffer.h>
- -#include <event2/bufferevent.h>
- #include <event2/util.h>
- #include <event2/keyvalq_struct.h>
- @@ -240,16 +239,6 @@ static std::string RequestMethodString(HTTPRequest::RequestMethod m)
- /** HTTP request callback */
- static void http_request_cb(struct evhttp_request* req, void* arg)
- {
- - // Disable reading to work around a libevent bug, fixed in 2.2.0.
- - if (event_get_version_number() >= 0x02010600 && event_get_version_number() < 0x02020001) {
- - evhttp_connection* conn = evhttp_request_get_connection(req);
- - if (conn) {
- - bufferevent* bev = evhttp_connection_get_bufferevent(conn);
- - if (bev) {
- - bufferevent_disable(bev, EV_READ);
- - }
- - }
- - }
- std::unique_ptr<HTTPRequest> hreq(new HTTPRequest(req));
- LogPrint(BCLog::HTTP, "Received a %s request for %s from %s\n",
- @@ -610,24 +599,11 @@ void HTTPRequest::WriteReply(int nStatus, const std::string& strReply)
- struct evbuffer* evb = evhttp_request_get_output_buffer(req);
- assert(evb);
- evbuffer_add(evb, strReply.data(), strReply.size());
- - auto req_copy = req;
- - HTTPEvent* ev = new HTTPEvent(eventBase, true, [req_copy, nStatus]{
- - evhttp_send_reply(req_copy, nStatus, nullptr, nullptr);
- - // Re-enable reading from the socket. This is the second part of the libevent
- - // workaround above.
- - if (event_get_version_number() >= 0x02010600 && event_get_version_number() < 0x02020001) {
- - evhttp_connection* conn = evhttp_request_get_connection(req_copy);
- - if (conn) {
- - bufferevent* bev = evhttp_connection_get_bufferevent(conn);
- - if (bev) {
- - bufferevent_enable(bev, EV_READ | EV_WRITE);
- - }
- - }
- - }
- - });
- - ev->trigger(nullptr);
- + HTTPEvent* ev = new HTTPEvent(eventBase, true,
- + std::bind(evhttp_send_reply, req, nStatus, (const char*)nullptr, (struct evbuffer *)nullptr));
- + ev->trigger(0);
- replySent = true;
- - req = nullptr; // transferred back to main thread
- + req = 0; // transferred back to main thread
- }
- CService HTTPRequest::GetPeer()
- diff --git a/src/init.cpp b/src/init.cpp
- index 4ecf38c..6309a7c 100644
- --- a/src/init.cpp
- +++ b/src/init.cpp
- @@ -197,15 +197,12 @@ void Shutdown()
- }
- #endif
- MapPort(false);
- -
- - // Because these depend on each-other, we make sure that neither can be
- - // using the other before destroying them.
- UnregisterValidationInterface(peerLogic.get());
- - if(g_connman) g_connman->Stop();
- peerLogic.reset();
- g_connman.reset();
- StopTorControl();
- + UnregisterNodeSignals(GetNodeSignals());
- if (fDumpMempoolLater && gArgs.GetArg("-persistmempool", DEFAULT_PERSIST_MEMPOOL)) {
- DumpMempool();
- }
- @@ -369,9 +366,6 @@ std::string HelpMessage(HelpMessageMode mode)
- strUsage += HelpMessageOpt("-maxorphantx=<n>", strprintf(_("Keep at most <n> unconnectable transactions in memory (default: %u)"), DEFAULT_MAX_ORPHAN_TRANSACTIONS));
- strUsage += HelpMessageOpt("-maxmempool=<n>", strprintf(_("Keep the transaction memory pool below <n> megabytes (default: %u)"), DEFAULT_MAX_MEMPOOL_SIZE));
- strUsage += HelpMessageOpt("-mempoolexpiry=<n>", strprintf(_("Do not keep transactions in the mempool longer than <n> hours (default: %u)"), DEFAULT_MEMPOOL_EXPIRY));
- - if (showDebug) {
- - strUsage += HelpMessageOpt("-minimumchainwork=<hex>", strprintf("Minimum work assumed to exist on a valid chain in hex (default: %s, testnet: %s)", defaultChainParams->GetConsensus().nMinimumChainWork.GetHex(), testnetChainParams->GetConsensus().nMinimumChainWork.GetHex()));
- - }
- strUsage += HelpMessageOpt("-persistmempool", strprintf(_("Whether to save the mempool on shutdown and load on restart (default: %u)"), DEFAULT_PERSIST_MEMPOOL));
- strUsage += HelpMessageOpt("-blockreconstructionextratxn=<n>", strprintf(_("Extra transactions to keep in memory for compact block reconstructions (default: %u)"), DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN));
- strUsage += HelpMessageOpt("-par=<n>", strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"),
- @@ -504,7 +498,7 @@ std::string HelpMessage(HelpMessageMode mode)
- strUsage += HelpMessageGroup(_("Block creation options:"));
- strUsage += HelpMessageOpt("-blockmaxweight=<n>", strprintf(_("Set maximum BIP141 block weight (default: %d)"), DEFAULT_BLOCK_MAX_WEIGHT));
- - strUsage += HelpMessageOpt("-blockmaxsize=<n>", _("Set maximum BIP141 block weight to this * 4. Deprecated, use blockmaxweight"));
- + strUsage += HelpMessageOpt("-blockmaxsize=<n>", strprintf(_("Set maximum block size in bytes (default: %d)"), DEFAULT_BLOCK_MAX_SIZE));
- strUsage += HelpMessageOpt("-blockmintxfee=<amt>", strprintf(_("Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s)"), CURRENCY_UNIT, FormatMoney(DEFAULT_BLOCK_MIN_TX_FEE)));
- if (showDebug)
- strUsage += HelpMessageOpt("-blockversion=<n>", "Override block version to test forking scenarios");
- @@ -531,8 +525,8 @@ std::string HelpMessage(HelpMessageMode mode)
- std::string LicenseInfo()
- {
- - const std::string URL_SOURCE_CODE = "<https://github.com/litecoin-project/litecoin>";
- - const std::string URL_WEBSITE = "<https://litecoin.org>";
- + const std::string URL_SOURCE_CODE = "<https://github.com/litecoincash-project/litecoincash>";
- + const std::string URL_WEBSITE = "<https://litecoinca.sh>";
- return CopyrightHolders(strprintf(_("Copyright (C) %i-%i"), 2011, COPYRIGHT_YEAR) + " ") + "\n" +
- "\n" +
- @@ -806,15 +800,6 @@ void InitParameterInteraction()
- if (gArgs.SoftSetBoolArg("-whitelistrelay", true))
- LogPrintf("%s: parameter interaction: -whitelistforcerelay=1 -> setting -whitelistrelay=1\n", __func__);
- }
- -
- - if (gArgs.IsArgSet("-blockmaxsize")) {
- - unsigned int max_size = gArgs.GetArg("-blockmaxsize", 0);
- - if (gArgs.SoftSetArg("blockmaxweight", strprintf("%d", max_size * WITNESS_SCALE_FACTOR))) {
- - LogPrintf("%s: parameter interaction: -blockmaxsize=%d -> setting -blockmaxweight=%d (-blockmaxsize is deprecated!)\n", __func__, max_size, max_size * WITNESS_SCALE_FACTOR);
- - } else {
- - LogPrintf("%s: Ignoring blockmaxsize setting which is overridden by blockmaxweight", __func__);
- - }
- - }
- }
- static std::string ResolveErrMsg(const char * const optname, const std::string& strBind)
- @@ -830,7 +815,7 @@ void InitLogging()
- fLogIPs = gArgs.GetBoolArg("-logips", DEFAULT_LOGIPS);
- LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- - LogPrintf("Litecoin version %s\n", FormatFullVersion());
- + LogPrintf("LitecoinCash version %s\n", FormatFullVersion());
- }
- namespace { // Variables internal to initialization process only
- @@ -998,20 +983,6 @@ bool AppInitParameterInteraction()
- else
- LogPrintf("Validating signatures for all blocks.\n");
- - if (gArgs.IsArgSet("-minimumchainwork")) {
- - const std::string minChainWorkStr = gArgs.GetArg("-minimumchainwork", "");
- - if (!IsHexNumber(minChainWorkStr)) {
- - return InitError(strprintf("Invalid non-hex (%s) minimum chain work value specified", minChainWorkStr));
- - }
- - nMinimumChainWork = UintToArith256(uint256S(minChainWorkStr));
- - } else {
- - nMinimumChainWork = UintToArith256(chainparams.GetConsensus().nMinimumChainWork);
- - }
- - LogPrintf("Setting nMinimumChainWork=%s\n", nMinimumChainWork.GetHex());
- - if (nMinimumChainWork < UintToArith256(chainparams.GetConsensus().nMinimumChainWork)) {
- - LogPrintf("Warning: nMinimumChainWork set below default value of %s\n", chainparams.GetConsensus().nMinimumChainWork.GetHex());
- - }
- -
- // mempool limits
- int64_t nMempoolSizeMax = gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
- int64_t nMempoolSizeMin = gArgs.GetArg("-limitdescendantsize", DEFAULT_DESCENDANT_SIZE_LIMIT) * 1000 * 40;
- @@ -1296,8 +1267,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
- g_connman = std::unique_ptr<CConnman>(new CConnman(GetRand(std::numeric_limits<uint64_t>::max()), GetRand(std::numeric_limits<uint64_t>::max())));
- CConnman& connman = *g_connman;
- - peerLogic.reset(new PeerLogicValidation(&connman, scheduler));
- + peerLogic.reset(new PeerLogicValidation(&connman));
- RegisterValidationInterface(peerLogic.get());
- + RegisterNodeSignals(GetNodeSignals());
- // sanitize comments per BIP-0014, format user agent and check total size
- std::vector<std::string> uacomments;
- @@ -1688,7 +1660,6 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
- connOptions.nMaxFeeler = 1;
- connOptions.nBestHeight = chainActive.Height();
- connOptions.uiInterface = &uiInterface;
- - connOptions.m_msgproc = peerLogic.get();
- connOptions.nSendBufferMaxSize = 1000*gArgs.GetArg("-maxsendbuffer", DEFAULT_MAXSENDBUFFER);
- connOptions.nReceiveFloodSize = 1000*gArgs.GetArg("-maxreceivebuffer", DEFAULT_MAXRECEIVEBUFFER);
- diff --git a/src/leveldb/build_detect_platform b/src/leveldb/build_detect_platform
- old mode 100755
- new mode 100644
- index 4a94715..95e26e9
- --- a/src/leveldb/build_detect_platform
- +++ b/src/leveldb/build_detect_platform
- @@ -217,11 +217,11 @@ EOF
- fi
- # Test whether tcmalloc is available
- - $CXX $CXXFLAGS -x c++ - -o $CXXOUTPUT -ltcmalloc 2>/dev/null <<EOF
- + $CXX $CXXFLAGS -x c++ - -o $CXXOUTPUT -lchmalloc 2>/dev/null <<EOF
- int main() {}
- EOF
- if [ "$?" = 0 ]; then
- - PLATFORM_LIBS="$PLATFORM_LIBS -ltcmalloc"
- + PLATFORM_LIBS="$PLATFORM_LIBS -lchmalloc"
- fi
- rm -f $CXXOUTPUT 2>/dev/null
- diff --git a/src/miner.cpp b/src/miner.cpp
- index adfedcc..01366fe 100644
- --- a/src/miner.cpp
- +++ b/src/miner.cpp
- @@ -44,6 +44,7 @@
- // its ancestors.
- uint64_t nLastBlockTx = 0;
- +uint64_t nLastBlockSize = 0;
- uint64_t nLastBlockWeight = 0;
- int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev)
- @@ -64,6 +65,7 @@ int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParam
- BlockAssembler::Options::Options() {
- blockMinFeeRate = CFeeRate(DEFAULT_BLOCK_MIN_TX_FEE);
- nBlockMaxWeight = DEFAULT_BLOCK_MAX_WEIGHT;
- + nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE;
- }
- BlockAssembler::BlockAssembler(const CChainParams& params, const Options& options) : chainparams(params)
- @@ -71,6 +73,10 @@ BlockAssembler::BlockAssembler(const CChainParams& params, const Options& option
- blockMinFeeRate = options.blockMinFeeRate;
- // Limit weight to between 4K and MAX_BLOCK_WEIGHT-4K for sanity:
- nBlockMaxWeight = std::max<size_t>(4000, std::min<size_t>(MAX_BLOCK_WEIGHT - 4000, options.nBlockMaxWeight));
- + // Limit size to between 1K and MAX_BLOCK_SERIALIZED_SIZE-1K for sanity:
- + nBlockMaxSize = std::max<size_t>(1000, std::min<size_t>(MAX_BLOCK_SERIALIZED_SIZE - 1000, options.nBlockMaxSize));
- + // Whether we need to account for byte usage (in addition to weight usage)
- + fNeedSizeAccounting = (nBlockMaxSize < MAX_BLOCK_SERIALIZED_SIZE - 1000);
- }
- static BlockAssembler::Options DefaultOptions(const CChainParams& params)
- @@ -80,7 +86,20 @@ static BlockAssembler::Options DefaultOptions(const CChainParams& params)
- // If only one is given, only restrict the specified resource.
- // If both are given, restrict both.
- BlockAssembler::Options options;
- - options.nBlockMaxWeight = gArgs.GetArg("-blockmaxweight", DEFAULT_BLOCK_MAX_WEIGHT);
- + options.nBlockMaxWeight = DEFAULT_BLOCK_MAX_WEIGHT;
- + options.nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE;
- + bool fWeightSet = false;
- + if (gArgs.IsArgSet("-blockmaxweight")) {
- + options.nBlockMaxWeight = gArgs.GetArg("-blockmaxweight", DEFAULT_BLOCK_MAX_WEIGHT);
- + options.nBlockMaxSize = MAX_BLOCK_SERIALIZED_SIZE;
- + fWeightSet = true;
- + }
- + if (gArgs.IsArgSet("-blockmaxsize")) {
- + options.nBlockMaxSize = gArgs.GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE);
- + if (!fWeightSet) {
- + options.nBlockMaxWeight = options.nBlockMaxSize * WITNESS_SCALE_FACTOR;
- + }
- + }
- if (gArgs.IsArgSet("-blockmintxfee")) {
- CAmount n = 0;
- ParseMoney(gArgs.GetArg("-blockmintxfee", ""), n);
- @@ -98,6 +117,7 @@ void BlockAssembler::resetBlock()
- inBlock.clear();
- // Reserve space for coinbase tx
- + nBlockSize = 1000;
- nBlockWeight = 4000;
- nBlockSigOpsCost = 400;
- fIncludeWitness = false;
- @@ -156,6 +176,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
- int64_t nTime1 = GetTimeMicros();
- nLastBlockTx = nBlockTx;
- + nLastBlockSize = nBlockSize;
- nLastBlockWeight = nBlockWeight;
- // Create coinbase transaction.
- @@ -170,7 +191,8 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
- pblocktemplate->vchCoinbaseCommitment = GenerateCoinbaseCommitment(*pblock, pindexPrev, chainparams.GetConsensus());
- pblocktemplate->vTxFees[0] = -nFees;
- - LogPrintf("CreateNewBlock(): block weight: %u txs: %u fees: %ld sigops %d\n", GetBlockWeight(*pblock), nBlockTx, nFees, nBlockSigOpsCost);
- + uint64_t nSerializeSize = GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION);
- + LogPrintf("CreateNewBlock(): total size: %u block weight: %u txs: %u fees: %ld sigops %d\n", nSerializeSize, GetBlockWeight(*pblock), nBlockTx, nFees, nBlockSigOpsCost);
- // Fill in header
- pblock->hashPrevBlock = pindexPrev->GetBlockHash();
- @@ -217,13 +239,22 @@ bool BlockAssembler::TestPackage(uint64_t packageSize, int64_t packageSigOpsCost
- // - transaction finality (locktime)
- // - premature witness (in case segwit transactions are added to mempool before
- // segwit activation)
- +// - serialized size (in case -blockmaxsize is in use)
- bool BlockAssembler::TestPackageTransactions(const CTxMemPool::setEntries& package)
- {
- + uint64_t nPotentialBlockSize = nBlockSize; // only used with fNeedSizeAccounting
- for (const CTxMemPool::txiter it : package) {
- if (!IsFinalTx(it->GetTx(), nHeight, nLockTimeCutoff))
- return false;
- if (!fIncludeWitness && it->GetTx().HasWitness())
- return false;
- + if (fNeedSizeAccounting) {
- + uint64_t nTxSize = ::GetSerializeSize(it->GetTx(), SER_NETWORK, PROTOCOL_VERSION);
- + if (nPotentialBlockSize + nTxSize >= nBlockMaxSize) {
- + return false;
- + }
- + nPotentialBlockSize += nTxSize;
- + }
- }
- return true;
- }
- @@ -233,6 +264,9 @@ void BlockAssembler::AddToBlock(CTxMemPool::txiter iter)
- pblock->vtx.emplace_back(iter->GetSharedTx());
- pblocktemplate->vTxFees.push_back(iter->GetFee());
- pblocktemplate->vTxSigOpsCost.push_back(iter->GetSigOpCost());
- + if (fNeedSizeAccounting) {
- + nBlockSize += ::GetSerializeSize(iter->GetTx(), SER_NETWORK, PROTOCOL_VERSION);
- + }
- nBlockWeight += iter->GetTxWeight();
- ++nBlockTx;
- nBlockSigOpsCost += iter->GetSigOpCost();
- diff --git a/src/miner.h b/src/miner.h
- index aa5fccf..c7360c1 100644
- --- a/src/miner.h
- +++ b/src/miner.h
- @@ -139,11 +139,13 @@ private:
- // Configuration parameters for the block size
- bool fIncludeWitness;
- - unsigned int nBlockMaxWeight;
- + unsigned int nBlockMaxWeight, nBlockMaxSize;
- + bool fNeedSizeAccounting;
- CFeeRate blockMinFeeRate;
- // Information on the current status of the block
- uint64_t nBlockWeight;
- + uint64_t nBlockSize;
- uint64_t nBlockTx;
- uint64_t nBlockSigOpsCost;
- CAmount nFees;
- diff --git a/src/net.cpp b/src/net.cpp
- index 8dd942a..6300da7 100644
- --- a/src/net.cpp
- +++ b/src/net.cpp
- @@ -89,6 +89,10 @@ std::string strSubVersion;
- limitedmap<uint256, int64_t> mapAlreadyAskedFor(MAX_INV_SZ);
- +// Signals for message handling
- +static CNodeSignals g_signals;
- +CNodeSignals& GetNodeSignals() { return g_signals; }
- +
- void CConnman::AddOneShot(const std::string& strDest)
- {
- LOCK(cs_vOneShots);
- @@ -661,7 +665,7 @@ void CNode::copyStats(CNodeStats &stats)
- X(cleanSubVer);
- }
- X(fInbound);
- - X(m_manual_connection);
- + X(fAddnode);
- X(nStartingHeight);
- {
- LOCK(cs_vSend);
- @@ -1110,7 +1114,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
- CNode* pnode = new CNode(id, nLocalServices, GetBestHeight(), hSocket, addr, CalculateKeyedNetGroup(addr), nonce, addr_bind, "", true);
- pnode->AddRef();
- pnode->fWhitelisted = whitelisted;
- - m_msgproc->InitializeNode(pnode);
- + GetNodeSignals().InitializeNode(pnode, *this);
- LogPrint(BCLog::NET, "connection from %s accepted\n", addr.ToString());
- @@ -1479,7 +1483,7 @@ void ThreadMapPort()
- }
- }
- - std::string strDesc = "Litecoin " + FormatFullVersion();
- + std::string strDesc = "LitecoinCash " + FormatFullVersion();
- try {
- while (true) {
- @@ -1670,37 +1674,6 @@ void CConnman::ProcessOneShot()
- }
- }
- -bool CConnman::GetTryNewOutboundPeer()
- -{
- - return m_try_another_outbound_peer;
- -}
- -
- -void CConnman::SetTryNewOutboundPeer(bool flag)
- -{
- - m_try_another_outbound_peer = flag;
- - LogPrint(BCLog::NET, "net: setting try another outbound peer=%s\n", flag ? "true" : "false");
- -}
- -
- -// Return the number of peers we have over our outbound connection limit
- -// Exclude peers that are marked for disconnect, or are going to be
- -// disconnected soon (eg one-shots and feelers)
- -// Also exclude peers that haven't finished initial connection handshake yet
- -// (so that we don't decide we're over our desired connection limit, and then
- -// evict some peer that has finished the handshake)
- -int CConnman::GetExtraOutboundCount()
- -{
- - int nOutbound = 0;
- - {
- - LOCK(cs_vNodes);
- - for (CNode* pnode : vNodes) {
- - if (!pnode->fInbound && !pnode->m_manual_connection && !pnode->fFeeler && !pnode->fDisconnect && !pnode->fOneShot && pnode->fSuccessfullyConnected) {
- - ++nOutbound;
- - }
- - }
- - }
- - return std::max(nOutbound - nMaxOutbound, 0);
- -}
- -
- void CConnman::ThreadOpenConnections()
- {
- // Connect to specific addresses
- @@ -1765,7 +1738,7 @@ void CConnman::ThreadOpenConnections()
- {
- LOCK(cs_vNodes);
- for (CNode* pnode : vNodes) {
- - if (!pnode->fInbound && !pnode->m_manual_connection) {
- + if (!pnode->fInbound && !pnode->fAddnode) {
- // Count the peers that have all relevant services
- if (pnode->fSuccessfullyConnected && !pnode->fFeeler && ((pnode->nServices & nRelevantServices) == nRelevantServices)) {
- @@ -1795,8 +1768,7 @@ void CConnman::ThreadOpenConnections()
- // * Only make a feeler connection once every few minutes.
- //
- bool fFeeler = false;
- -
- - if (nOutbound >= nMaxOutbound && !GetTryNewOutboundPeer()) {
- + if (nOutbound >= nMaxOutbound) {
- int64_t nTime = GetTimeMicros(); // The current time right now (in microseconds).
- if (nTime > nNextFeeler) {
- nNextFeeler = PoissonNextSend(nTime, FEELER_INTERVAL);
- @@ -1962,7 +1934,7 @@ void CConnman::ThreadOpenAddedConnections()
- }
- // if successful, this moves the passed grant to the constructed node
- -bool CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFailure, CSemaphoreGrant *grantOutbound, const char *pszDest, bool fOneShot, bool fFeeler, bool manual_connection)
- +bool CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFailure, CSemaphoreGrant *grantOutbound, const char *pszDest, bool fOneShot, bool fFeeler, bool fAddnode)
- {
- //
- // Initiate outbound network connection
- @@ -1991,10 +1963,10 @@ bool CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai
- pnode->fOneShot = true;
- if (fFeeler)
- pnode->fFeeler = true;
- - if (manual_connection)
- - pnode->m_manual_connection = true;
- + if (fAddnode)
- + pnode->fAddnode = true;
- - m_msgproc->InitializeNode(pnode);
- + GetNodeSignals().InitializeNode(pnode, *this);
- {
- LOCK(cs_vNodes);
- vNodes.push_back(pnode);
- @@ -2024,16 +1996,16 @@ void CConnman::ThreadMessageHandler()
- continue;
- // Receive messages
- - bool fMoreNodeWork = m_msgproc->ProcessMessages(pnode, flagInterruptMsgProc);
- + bool fMoreNodeWork = GetNodeSignals().ProcessMessages(pnode, *this, flagInterruptMsgProc);
- fMoreWork |= (fMoreNodeWork && !pnode->fPauseSend);
- if (flagInterruptMsgProc)
- return;
- +
- // Send messages
- {
- LOCK(pnode->cs_sendProcessing);
- - m_msgproc->SendMessages(pnode, flagInterruptMsgProc);
- + GetNodeSignals().SendMessages(pnode, *this, flagInterruptMsgProc);
- }
- -
- if (flagInterruptMsgProc)
- return;
- }
- @@ -2239,7 +2211,6 @@ CConnman::CConnman(uint64_t nSeed0In, uint64_t nSeed1In) : nSeed0(nSeed0In), nSe
- semOutbound = nullptr;
- semAddnode = nullptr;
- flagInterruptMsgProc = false;
- - SetTryNewOutboundPeer(false);
- Options connOptions;
- Init(connOptions);
- @@ -2353,7 +2324,6 @@ bool CConnman::Start(CScheduler& scheduler, const Options& connOptions)
- //
- // Start threads
- //
- - assert(m_msgproc);
- InterruptSocks5(false);
- interruptNet.reset();
- flagInterruptMsgProc = false;
- @@ -2473,10 +2443,9 @@ void CConnman::DeleteNode(CNode* pnode)
- {
- assert(pnode);
- bool fUpdateConnectionTime = false;
- - m_msgproc->FinalizeNode(pnode->GetId(), fUpdateConnectionTime);
- - if(fUpdateConnectionTime) {
- + GetNodeSignals().FinalizeNode(pnode->GetId(), fUpdateConnectionTime);
- + if(fUpdateConnectionTime)
- addrman.Connected(pnode->addr);
- - }
- delete pnode;
- }
- @@ -2735,7 +2704,7 @@ CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn
- strSubVer = "";
- fWhitelisted = false;
- fOneShot = false;
- - m_manual_connection = false;
- + fAddnode = false;
- fClient = false; // set by version message
- fFeeler = false;
- fSuccessfullyConnected = false;
- diff --git a/src/net.h b/src/net.h
- index 6b57d5c..a32736a 100644
- --- a/src/net.h
- +++ b/src/net.h
- @@ -33,6 +33,7 @@
- #include <arpa/inet.h>
- #endif
- +#include <boost/signals2/signal.hpp>
- class CScheduler;
- class CNode;
- @@ -115,7 +116,7 @@ struct CSerializedNetMsg
- std::string command;
- };
- -class NetEventsInterface;
- +
- class CConnman
- {
- public:
- @@ -137,7 +138,6 @@ public:
- int nMaxFeeler = 0;
- int nBestHeight = 0;
- CClientUIInterface* uiInterface = nullptr;
- - NetEventsInterface* m_msgproc = nullptr;
- unsigned int nSendBufferMaxSize = 0;
- unsigned int nReceiveFloodSize = 0;
- uint64_t nMaxOutboundTimeframe = 0;
- @@ -156,7 +156,6 @@ public:
- nMaxFeeler = connOptions.nMaxFeeler;
- nBestHeight = connOptions.nBestHeight;
- clientInterface = connOptions.uiInterface;
- - m_msgproc = connOptions.m_msgproc;
- nSendBufferMaxSize = connOptions.nSendBufferMaxSize;
- nReceiveFloodSize = connOptions.nReceiveFloodSize;
- nMaxOutboundTimeframe = connOptions.nMaxOutboundTimeframe;
- @@ -171,7 +170,7 @@ public:
- void Interrupt();
- bool GetNetworkActive() const { return fNetworkActive; };
- void SetNetworkActive(bool active);
- - bool OpenNetworkConnection(const CAddress& addrConnect, bool fCountFailure, CSemaphoreGrant *grantOutbound = nullptr, const char *strDest = nullptr, bool fOneShot = false, bool fFeeler = false, bool manual_connection = false);
- + bool OpenNetworkConnection(const CAddress& addrConnect, bool fCountFailure, CSemaphoreGrant *grantOutbound = nullptr, const char *strDest = nullptr, bool fOneShot = false, bool fFeeler = false, bool fAddnode = false);
- bool CheckIncomingNonce(uint64_t nonce);
- bool ForNode(NodeId id, std::function<bool(CNode* pnode)> func);
- @@ -251,19 +250,6 @@ public:
- void GetBanned(banmap_t &banmap);
- void SetBanned(const banmap_t &banmap);
- - // This allows temporarily exceeding nMaxOutbound, with the goal of finding
- - // a peer that is better than all our current peers.
- - void SetTryNewOutboundPeer(bool flag);
- - bool GetTryNewOutboundPeer();
- -
- - // Return the number of outbound peers we have in excess of our target (eg,
- - // if we previously called SetTryNewOutboundPeer(true), and have since set
- - // to false, we may have extra peers that we wish to disconnect). This may
- - // return a value less than (num_outbound_connections - num_outbound_slots)
- - // in cases where some outbound connections are not yet fully connected, or
- - // not yet fully disconnected.
- - int GetExtraOutboundCount();
- -
- bool AddNode(const std::string& node);
- bool RemoveAddedNode(const std::string& node);
- std::vector<AddedNodeInfo> GetAddedNodeInfo();
- @@ -410,7 +396,6 @@ private:
- int nMaxFeeler;
- std::atomic<int> nBestHeight;
- CClientUIInterface* clientInterface;
- - NetEventsInterface* m_msgproc;
- /** SipHasher seeds for deterministic randomness */
- const uint64_t nSeed0, nSeed1;
- @@ -429,13 +414,6 @@ private:
- std::thread threadOpenAddedConnections;
- std::thread threadOpenConnections;
- std::thread threadMessageHandler;
- -
- - /** flag for deciding to connect to an extra outbound peer,
- - * in excess of nMaxOutbound
- - * This takes the place of a feeler connection */
- - std::atomic_bool m_try_another_outbound_peer;
- -
- - friend struct CConnmanTest;
- };
- extern std::unique_ptr<CConnman> g_connman;
- void Discover(boost::thread_group& threadGroup);
- @@ -458,18 +436,19 @@ struct CombinerAll
- }
- };
- -/**
- - * Interface for message handling
- - */
- -class NetEventsInterface
- +// Signals for message handling
- +struct CNodeSignals
- {
- -public:
- - virtual bool ProcessMessages(CNode* pnode, std::atomic<bool>& interrupt) = 0;
- - virtual bool SendMessages(CNode* pnode, std::atomic<bool>& interrupt) = 0;
- - virtual void InitializeNode(CNode* pnode) = 0;
- - virtual void FinalizeNode(NodeId id, bool& update_connection_time) = 0;
- + boost::signals2::signal<bool (CNode*, CConnman&, std::atomic<bool>&), CombinerAll> ProcessMessages;
- + boost::signals2::signal<bool (CNode*, CConnman&, std::atomic<bool>&), CombinerAll> SendMessages;
- + boost::signals2::signal<void (CNode*, CConnman&)> InitializeNode;
- + boost::signals2::signal<void (NodeId, bool&)> FinalizeNode;
- };
- +
- +CNodeSignals& GetNodeSignals();
- +
- +
- enum
- {
- LOCAL_NONE, // unknown
- @@ -529,7 +508,7 @@ public:
- int nVersion;
- std::string cleanSubVer;
- bool fInbound;
- - bool m_manual_connection;
- + bool fAddnode;
- int nStartingHeight;
- uint64_t nSendBytes;
- mapMsgCmdSize mapSendBytesPerMsgCmd;
- @@ -639,7 +618,7 @@ public:
- bool fWhitelisted; // This peer can bypass DoS banning.
- bool fFeeler; // If true this node is being used as a short lived feeler.
- bool fOneShot;
- - bool m_manual_connection;
- + bool fAddnode;
- bool fClient;
- const bool fInbound;
- std::atomic_bool fSuccessfullyConnected;
- diff --git a/src/net_processing.cpp b/src/net_processing.cpp
- index a8a2a38..673d4c2 100644
- --- a/src/net_processing.cpp
- +++ b/src/net_processing.cpp
- @@ -23,7 +23,6 @@
- #include "primitives/transaction.h"
- #include "random.h"
- #include "reverse_iterator.h"
- -#include "scheduler.h"
- #include "tinyformat.h"
- #include "txmempool.h"
- #include "ui_interface.h"
- @@ -33,7 +32,7 @@
- #include "validationinterface.h"
- #if defined(NDEBUG)
- -# error "Litecoin cannot be compiled without assertions."
- +# error "LitecoinCash cannot be compiled without assertions."
- #endif
- std::atomic<int64_t> nTimeBestReceived(0); // Used only to inform the wallet of when we last received a block
- @@ -117,12 +116,6 @@ namespace {
- /** Number of peers from which we're downloading blocks. */
- int nPeersWithValidatedDownloads = 0;
- - /** Number of outbound peers with m_chain_sync.m_protect. */
- - int g_outbound_peers_with_protect_from_disconnect = 0;
- -
- - /** When our tip was last updated. */
- - int64_t g_last_tip_update = 0;
- -
- /** Relay map, protected by cs_main. */
- typedef std::map<uint256, CTransactionRef> MapRelay;
- MapRelay mapRelay;
- @@ -130,6 +123,11 @@ namespace {
- std::deque<std::pair<int64_t, MapRelay::iterator>> vRelayExpiration;
- } // namespace
- +//////////////////////////////////////////////////////////////////////////////
- +//
- +// Registration of network node signals.
- +//
- +
- namespace {
- struct CBlockReject {
- @@ -200,36 +198,6 @@ struct CNodeState {
- */
- bool fSupportsDesiredCmpctVersion;
- - /** State used to enforce CHAIN_SYNC_TIMEOUT
- - * Only in effect for outbound, non-manual connections, with
- - * m_protect == false
- - * Algorithm: if a peer's best known block has less work than our tip,
- - * set a timeout CHAIN_SYNC_TIMEOUT seconds in the future:
- - * - If at timeout their best known block now has more work than our tip
- - * when the timeout was set, then either reset the timeout or clear it
- - * (after comparing against our current tip's work)
- - * - If at timeout their best known block still has less work than our
- - * tip did when the timeout was set, then send a getheaders message,
- - * and set a shorter timeout, HEADERS_RESPONSE_TIME seconds in future.
- - * If their best known block is still behind when that new timeout is
- - * reached, disconnect.
- - */
- - struct ChainSyncTimeoutState {
- - //! A timeout used for checking whether our peer has sufficiently synced
- - int64_t m_timeout;
- - //! A header with the work we require on our peer's chain
- - const CBlockIndex * m_work_header;
- - //! After timeout is reached, set to true after sending getheaders
- - bool m_sent_getheaders;
- - //! Whether this peer is protected from disconnection due to a bad/slow chain
- - bool m_protect;
- - };
- -
- - ChainSyncTimeoutState m_chain_sync;
- -
- - //! Time of last new block announcement
- - int64_t m_last_block_announcement;
- -
- CNodeState(CAddress addrIn, std::string addrNameIn) : address(addrIn), name(addrNameIn) {
- fCurrentlyConnected = false;
- nMisbehavior = 0;
- @@ -252,8 +220,6 @@ struct CNodeState {
- fHaveWitness = false;
- fWantsCmpctWitness = false;
- fSupportsDesiredCmpctVersion = false;
- - m_chain_sync = { 0, nullptr, false, false };
- - m_last_block_announcement = 0;
- }
- };
- @@ -278,7 +244,7 @@ void UpdatePreferredDownload(CNode* node, CNodeState* state)
- nPreferredDownload += state->fPreferredDownload;
- }
- -void PushNodeVersion(CNode *pnode, CConnman* connman, int64_t nTime)
- +void PushNodeVersion(CNode *pnode, CConnman& connman, int64_t nTime)
- {
- ServiceFlags nLocalNodeServices = pnode->GetLocalServices();
- uint64_t nonce = pnode->GetLocalNonce();
- @@ -289,7 +255,7 @@ void PushNodeVersion(CNode *pnode, CConnman* connman, int64_t nTime)
- CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService(), addr.nServices));
- CAddress addrMe = CAddress(CService(), nLocalNodeServices);
- - connman->PushMessage(pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERSION, PROTOCOL_VERSION, (uint64_t)nLocalNodeServices, nTime, addrYou, addrMe,
- + connman.PushMessage(pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERSION, PROTOCOL_VERSION, (uint64_t)nLocalNodeServices, nTime, addrYou, addrMe,
- nonce, strSubVersion, nNodeStartingHeight, ::fRelayTxes));
- if (fLogIPs) {
- @@ -299,6 +265,49 @@ void PushNodeVersion(CNode *pnode, CConnman* connman, int64_t nTime)
- }
- }
- +void InitializeNode(CNode *pnode, CConnman& connman) {
- + CAddress addr = pnode->addr;
- + std::string addrName = pnode->GetAddrName();
- + NodeId nodeid = pnode->GetId();
- + {
- + LOCK(cs_main);
- + mapNodeState.emplace_hint(mapNodeState.end(), std::piecewise_construct, std::forward_as_tuple(nodeid), std::forward_as_tuple(addr, std::move(addrName)));
- + }
- + if(!pnode->fInbound)
- + PushNodeVersion(pnode, connman, GetTime());
- +}
- +
- +void FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) {
- + fUpdateConnectionTime = false;
- + LOCK(cs_main);
- + CNodeState *state = State(nodeid);
- +
- + if (state->fSyncStarted)
- + nSyncStarted--;
- +
- + if (state->nMisbehavior == 0 && state->fCurrentlyConnected) {
- + fUpdateConnectionTime = true;
- + }
- +
- + for (const QueuedBlock& entry : state->vBlocksInFlight) {
- + mapBlocksInFlight.erase(entry.hash);
- + }
- + EraseOrphansFor(nodeid);
- + nPreferredDownload -= state->fPreferredDownload;
- + nPeersWithValidatedDownloads -= (state->nBlocksInFlightValidHeaders != 0);
- + assert(nPeersWithValidatedDownloads >= 0);
- +
- + mapNodeState.erase(nodeid);
- +
- + if (mapNodeState.empty()) {
- + // Do a consistency check after the last peer is removed.
- + assert(mapBlocksInFlight.empty());
- + assert(nPreferredDownload == 0);
- + assert(nPeersWithValidatedDownloads == 0);
- + }
- + LogPrint(BCLog::NET, "Cleared nodestate for peer=%d\n", nodeid);
- +}
- +
- // Requires cs_main.
- // Returns a bool indicating whether we requested this block.
- // Also used if a block was /not/ received and timed out or started with another peer
- @@ -393,7 +402,7 @@ void UpdateBlockAvailability(NodeId nodeid, const uint256 &hash) {
- }
- }
- -void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman* connman) {
- +void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman& connman) {
- AssertLockHeld(cs_main);
- CNodeState* nodestate = State(nodeid);
- if (!nodestate || !nodestate->fSupportsDesiredCmpctVersion) {
- @@ -408,35 +417,26 @@ void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman* connman) {
- return;
- }
- }
- - connman->ForNode(nodeid, [connman](CNode* pfrom){
- + connman.ForNode(nodeid, [&connman](CNode* pfrom){
- bool fAnnounceUsingCMPCTBLOCK = false;
- uint64_t nCMPCTBLOCKVersion = (pfrom->GetLocalServices() & NODE_WITNESS) ? 2 : 1;
- if (lNodesAnnouncingHeaderAndIDs.size() >= 3) {
- // As per BIP152, we only get 3 of our peers to announce
- // blocks using compact encodings.
- - connman->ForNode(lNodesAnnouncingHeaderAndIDs.front(), [connman, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion](CNode* pnodeStop){
- - connman->PushMessage(pnodeStop, CNetMsgMaker(pnodeStop->GetSendVersion()).Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- + connman.ForNode(lNodesAnnouncingHeaderAndIDs.front(), [&connman, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion](CNode* pnodeStop){
- + connman.PushMessage(pnodeStop, CNetMsgMaker(pnodeStop->GetSendVersion()).Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- return true;
- });
- lNodesAnnouncingHeaderAndIDs.pop_front();
- }
- fAnnounceUsingCMPCTBLOCK = true;
- - connman->PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- + connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- lNodesAnnouncingHeaderAndIDs.push_back(pfrom->GetId());
- return true;
- });
- }
- }
- -bool TipMayBeStale(const Consensus::Params &consensusParams)
- -{
- - AssertLockHeld(cs_main);
- - if (g_last_tip_update == 0) {
- - g_last_tip_update = GetTime();
- - }
- - return g_last_tip_update < GetTime() - consensusParams.nPowTargetSpacing * 3 && mapBlocksInFlight.empty();
- -}
- -
- // Requires cs_main
- bool CanDirectFetch(const Consensus::Params &consensusParams)
- {
- @@ -466,7 +466,7 @@ void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<con
- // Make sure pindexBestKnownBlock is up to date, we'll need it.
- ProcessBlockAvailability(nodeid);
- - if (state->pindexBestKnownBlock == nullptr || state->pindexBestKnownBlock->nChainWork < chainActive.Tip()->nChainWork || state->pindexBestKnownBlock->nChainWork < nMinimumChainWork) {
- + if (state->pindexBestKnownBlock == nullptr || state->pindexBestKnownBlock->nChainWork < chainActive.Tip()->nChainWork || state->pindexBestKnownBlock->nChainWork < UintToArith256(consensusParams.nMinimumChainWork)) {
- // This peer has nothing interesting.
- return;
- }
- @@ -543,69 +543,6 @@ void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<con
- } // namespace
- -// This function is used for testing the stale tip eviction logic, see
- -// DoS_tests.cpp
- -void UpdateLastBlockAnnounceTime(NodeId node, int64_t time_in_seconds)
- -{
- - LOCK(cs_main);
- - CNodeState *state = State(node);
- - if (state) state->m_last_block_announcement = time_in_seconds;
- -}
- -
- -// Returns true for outbound peers, excluding manual connections, feelers, and
- -// one-shots
- -bool IsOutboundDisconnectionCandidate(const CNode *node)
- -{
- - return !(node->fInbound || node->m_manual_connection || node->fFeeler || node->fOneShot);
- -}
- -
- -void PeerLogicValidation::InitializeNode(CNode *pnode) {
- - CAddress addr = pnode->addr;
- - std::string addrName = pnode->GetAddrName();
- - NodeId nodeid = pnode->GetId();
- - {
- - LOCK(cs_main);
- - mapNodeState.emplace_hint(mapNodeState.end(), std::piecewise_construct, std::forward_as_tuple(nodeid), std::forward_as_tuple(addr, std::move(addrName)));
- - }
- - if(!pnode->fInbound)
- - PushNodeVersion(pnode, connman, GetTime());
- -}
- -
- -void PeerLogicValidation::FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) {
- - fUpdateConnectionTime = false;
- - LOCK(cs_main);
- - CNodeState *state = State(nodeid);
- - assert(state != nullptr);
- -
- - if (state->fSyncStarted)
- - nSyncStarted--;
- -
- - if (state->nMisbehavior == 0 && state->fCurrentlyConnected) {
- - fUpdateConnectionTime = true;
- - }
- -
- - for (const QueuedBlock& entry : state->vBlocksInFlight) {
- - mapBlocksInFlight.erase(entry.hash);
- - }
- - EraseOrphansFor(nodeid);
- - nPreferredDownload -= state->fPreferredDownload;
- - nPeersWithValidatedDownloads -= (state->nBlocksInFlightValidHeaders != 0);
- - assert(nPeersWithValidatedDownloads >= 0);
- - g_outbound_peers_with_protect_from_disconnect -= state->m_chain_sync.m_protect;
- - assert(g_outbound_peers_with_protect_from_disconnect >= 0);
- -
- - mapNodeState.erase(nodeid);
- -
- - if (mapNodeState.empty()) {
- - // Do a consistency check after the last peer is removed.
- - assert(mapBlocksInFlight.empty());
- - assert(nPreferredDownload == 0);
- - assert(nPeersWithValidatedDownloads == 0);
- - assert(g_outbound_peers_with_protect_from_disconnect == 0);
- - }
- - LogPrint(BCLog::NET, "Cleared nodestate for peer=%d\n", nodeid);
- -}
- -
- bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats) {
- LOCK(cs_main);
- CNodeState *state = State(nodeid);
- @@ -621,6 +558,22 @@ bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats) {
- return true;
- }
- +void RegisterNodeSignals(CNodeSignals& nodeSignals)
- +{
- + nodeSignals.ProcessMessages.connect(&ProcessMessages);
- + nodeSignals.SendMessages.connect(&SendMessages);
- + nodeSignals.InitializeNode.connect(&InitializeNode);
- + nodeSignals.FinalizeNode.connect(&FinalizeNode);
- +}
- +
- +void UnregisterNodeSignals(CNodeSignals& nodeSignals)
- +{
- + nodeSignals.ProcessMessages.disconnect(&ProcessMessages);
- + nodeSignals.SendMessages.disconnect(&SendMessages);
- + nodeSignals.InitializeNode.disconnect(&InitializeNode);
- + nodeSignals.FinalizeNode.disconnect(&FinalizeNode);
- +}
- +
- //////////////////////////////////////////////////////////////////////////////
- //
- // mapOrphanTransactions
- @@ -772,17 +725,9 @@ void Misbehaving(NodeId pnode, int howmuch)
- // blockchain -> download logic notification
- //
- -PeerLogicValidation::PeerLogicValidation(CConnman* connmanIn, CScheduler &scheduler) : connman(connmanIn), m_stale_tip_check_time(0) {
- +PeerLogicValidation::PeerLogicValidation(CConnman* connmanIn) : connman(connmanIn) {
- // Initialize global variables that cannot be constructed at startup.
- recentRejects.reset(new CRollingBloomFilter(120000, 0.000001));
- -
- - const Consensus::Params& consensusParams = Params().GetConsensus();
- - // Stale tip checking and peer eviction are on two different timers, but we
- - // don't want them to get out of sync due to drift in the scheduler, so we
- - // combine them in one function and schedule at the quicker (peer-eviction)
- - // timer.
- - static_assert(EXTRA_PEER_CHECK_INTERVAL < STALE_CHECK_INTERVAL, "peer eviction timer should be less than stale tip check timer");
- - scheduler.scheduleEvery(std::bind(&PeerLogicValidation::CheckForStaleTipAndEvictPeers, this, consensusParams), EXTRA_PEER_CHECK_INTERVAL * 1000);
- }
- void PeerLogicValidation::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindex, const std::vector<CTransactionRef>& vtxConflicted) {
- @@ -813,8 +758,6 @@ void PeerLogicValidation::BlockConnected(const std::shared_ptr<const CBlock>& pb
- }
- LogPrint(BCLog::MEMPOOL, "Erased %d orphan tx included or conflicted by block\n", nErased);
- }
- -
- - g_last_tip_update = GetTime();
- }
- // All of the following cache a recent block, and are protected by cs_most_recent_block
- @@ -922,7 +865,7 @@ void PeerLogicValidation::BlockChecked(const CBlock& block, const CValidationSta
- !IsInitialBlockDownload() &&
- mapBlocksInFlight.count(hash) == mapBlocksInFlight.size()) {
- if (it != mapBlockSource.end()) {
- - MaybeSetPeerAsAnnouncingHeaderAndIDs(it->second.first, connman);
- + MaybeSetPeerAsAnnouncingHeaderAndIDs(it->second.first, *connman);
- }
- }
- if (it != mapBlockSource.end())
- @@ -967,16 +910,16 @@ bool static AlreadyHave(const CInv& inv) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
- return true;
- }
- -static void RelayTransaction(const CTransaction& tx, CConnman* connman)
- +static void RelayTransaction(const CTransaction& tx, CConnman& connman)
- {
- CInv inv(MSG_TX, tx.GetHash());
- - connman->ForEachNode([&inv](CNode* pnode)
- + connman.ForEachNode([&inv](CNode* pnode)
- {
- pnode->PushInventory(inv);
- });
- }
- -static void RelayAddress(const CAddress& addr, bool fReachable, CConnman* connman)
- +static void RelayAddress(const CAddress& addr, bool fReachable, CConnman& connman)
- {
- unsigned int nRelayNodes = fReachable ? 2 : 1; // limited relaying of addresses outside our network(s)
- @@ -984,7 +927,7 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman* connma
- // Use deterministic randomness to send to the same nodes for 24 hours
- // at a time so the addrKnowns of the chosen nodes prevent repeats
- uint64_t hashAddr = addr.GetHash();
- - const CSipHasher hasher = connman->GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24*60*60));
- + const CSipHasher hasher = connman.GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24*60*60));
- FastRandomContext insecure_rand;
- std::array<std::pair<uint64_t, CNode*>,2> best{{{0, nullptr}, {0, nullptr}}};
- @@ -1009,10 +952,10 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman* connma
- }
- };
- - connman->ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
- + connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
- }
- -void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParams, CConnman* connman, const std::atomic<bool>& interruptMsgProc)
- +void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParams, CConnman& connman, const std::atomic<bool>& interruptMsgProc)
- {
- std::deque<CInv>::iterator it = pfrom->vRecvGetData.begin();
- std::vector<CInv> vNotFound;
- @@ -1074,7 +1017,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- // disconnect node in case we have reached the outbound limit for serving historical blocks
- // never disconnect whitelisted nodes
- static const int nOneWeek = 7 * 24 * 60 * 60; // assume > 1 week = historical
- - if (send && connman->OutboundTargetReached(true) && ( ((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - mi->second->GetBlockTime() > nOneWeek)) || inv.type == MSG_FILTERED_BLOCK) && !pfrom->fWhitelisted)
- + if (send && connman.OutboundTargetReached(true) && ( ((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - mi->second->GetBlockTime() > nOneWeek)) || inv.type == MSG_FILTERED_BLOCK) && !pfrom->fWhitelisted)
- {
- LogPrint(BCLog::NET, "historical block serving limit reached, disconnect peer=%d\n", pfrom->GetId());
- @@ -1097,9 +1040,9 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- pblock = pblockRead;
- }
- if (inv.type == MSG_BLOCK)
- - connman->PushMessage(pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::BLOCK, *pblock));
- + connman.PushMessage(pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::BLOCK, *pblock));
- else if (inv.type == MSG_WITNESS_BLOCK)
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::BLOCK, *pblock));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::BLOCK, *pblock));
- else if (inv.type == MSG_FILTERED_BLOCK)
- {
- bool sendMerkleBlock = false;
- @@ -1112,7 +1055,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- }
- }
- if (sendMerkleBlock) {
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::MERKLEBLOCK, merkleBlock));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::MERKLEBLOCK, merkleBlock));
- // CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see
- // This avoids hurting performance by pointlessly requiring a round-trip
- // Note that there is currently no way for a node to request any single transactions we didn't send here -
- @@ -1121,7 +1064,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- // however we MUST always provide at least what the remote peer needs
- typedef std::pair<unsigned int, uint256> PairType;
- for (PairType& pair : merkleBlock.vMatchedTxn)
- - connman->PushMessage(pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::TX, *pblock->vtx[pair.first]));
- + connman.PushMessage(pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::TX, *pblock->vtx[pair.first]));
- }
- // else
- // no response
- @@ -1136,13 +1079,13 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- int nSendFlags = fPeerWantsWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
- if (CanDirectFetch(consensusParams) && mi->second->nHeight >= chainActive.Height() - MAX_CMPCTBLOCK_DEPTH) {
- if ((fPeerWantsWitness || !fWitnessesPresentInARecentCompactBlock) && a_recent_compact_block && a_recent_compact_block->header.GetHash() == mi->second->GetBlockHash()) {
- - connman->PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *a_recent_compact_block));
- + connman.PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *a_recent_compact_block));
- } else {
- CBlockHeaderAndShortTxIDs cmpctblock(*pblock, fPeerWantsWitness);
- - connman->PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
- + connman.PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
- }
- } else {
- - connman->PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCK, *pblock));
- + connman.PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCK, *pblock));
- }
- }
- @@ -1154,7 +1097,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- // wait for other stuff first.
- std::vector<CInv> vInv;
- vInv.push_back(CInv(MSG_BLOCK, chainActive.Tip()->GetBlockHash()));
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::INV, vInv));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::INV, vInv));
- pfrom->hashContinue.SetNull();
- }
- }
- @@ -1166,14 +1109,14 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- auto mi = mapRelay.find(inv.hash);
- int nSendFlags = (inv.type == MSG_TX ? SERIALIZE_TRANSACTION_NO_WITNESS : 0);
- if (mi != mapRelay.end()) {
- - connman->PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::TX, *mi->second));
- + connman.PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::TX, *mi->second));
- push = true;
- } else if (pfrom->timeLastMempoolReq) {
- auto txinfo = mempool.info(inv.hash);
- // To protect privacy, do not answer getdata using the mempool when
- // that TX couldn't have been INVed in reply to a MEMPOOL request.
- if (txinfo.tx && txinfo.nTime <= pfrom->timeLastMempoolReq) {
- - connman->PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::TX, *txinfo.tx));
- + connman.PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::TX, *txinfo.tx));
- push = true;
- }
- }
- @@ -1200,7 +1143,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
- // do that because they want to know about (and store and rebroadcast and
- // risk analyze) the dependencies of transactions relevant to them, without
- // having to download the entire memory pool.
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::NOTFOUND, vNotFound));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::NOTFOUND, vNotFound));
- }
- }
- @@ -1212,7 +1155,7 @@ uint32_t GetFetchFlags(CNode* pfrom) {
- return nFetchFlags;
- }
- -inline void static SendBlockTransactions(const CBlock& block, const BlockTransactionsRequest& req, CNode* pfrom, CConnman* connman) {
- +inline void static SendBlockTransactions(const CBlock& block, const BlockTransactionsRequest& req, CNode* pfrom, CConnman& connman) {
- BlockTransactions resp(req);
- for (size_t i = 0; i < req.indexes.size(); i++) {
- if (req.indexes[i] >= block.vtx.size()) {
- @@ -1226,229 +1169,10 @@ inline void static SendBlockTransactions(const CBlock& block, const BlockTransac
- LOCK(cs_main);
- const CNetMsgMaker msgMaker(pfrom->GetSendVersion());
- int nSendFlags = State(pfrom->GetId())->fWantsCmpctWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
- - connman->PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCKTXN, resp));
- + connman.PushMessage(pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCKTXN, resp));
- }
- -bool static ProcessHeadersMessage(CNode *pfrom, CConnman *connman, const std::vector<CBlockHeader>& headers, const CChainParams& chainparams, bool punish_duplicate_invalid)
- -{
- - const CNetMsgMaker msgMaker(pfrom->GetSendVersion());
- - size_t nCount = headers.size();
- -
- - if (nCount == 0) {
- - // Nothing interesting. Stop asking this peers for more headers.
- - return true;
- - }
- -
- - bool received_new_header = false;
- - const CBlockIndex *pindexLast = nullptr;
- - {
- - LOCK(cs_main);
- - CNodeState *nodestate = State(pfrom->GetId());
- -
- - // If this looks like it could be a block announcement (nCount <
- - // MAX_BLOCKS_TO_ANNOUNCE), use special logic for handling headers that
- - // don't connect:
- - // - Send a getheaders message in response to try to connect the chain.
- - // - The peer can send up to MAX_UNCONNECTING_HEADERS in a row that
- - // don't connect before giving DoS points
- - // - Once a headers message is received that is valid and does connect,
- - // nUnconnectingHeaders gets reset back to 0.
- - if (mapBlockIndex.find(headers[0].hashPrevBlock) == mapBlockIndex.end() && nCount < MAX_BLOCKS_TO_ANNOUNCE) {
- - nodestate->nUnconnectingHeaders++;
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexBestHeader), uint256()));
- - LogPrint(BCLog::NET, "received header %s: missing prev block %s, sending getheaders (%d) to end (peer=%d, nUnconnectingHeaders=%d)\n",
- - headers[0].GetHash().ToString(),
- - headers[0].hashPrevBlock.ToString(),
- - pindexBestHeader->nHeight,
- - pfrom->GetId(), nodestate->nUnconnectingHeaders);
- - // Set hashLastUnknownBlock for this peer, so that if we
- - // eventually get the headers - even from a different peer -
- - // we can use this peer to download.
- - UpdateBlockAvailability(pfrom->GetId(), headers.back().GetHash());
- -
- - if (nodestate->nUnconnectingHeaders % MAX_UNCONNECTING_HEADERS == 0) {
- - Misbehaving(pfrom->GetId(), 20);
- - }
- - return true;
- - }
- -
- - uint256 hashLastBlock;
- - for (const CBlockHeader& header : headers) {
- - if (!hashLastBlock.IsNull() && header.hashPrevBlock != hashLastBlock) {
- - Misbehaving(pfrom->GetId(), 20);
- - return error("non-continuous headers sequence");
- - }
- - hashLastBlock = header.GetHash();
- - }
- -
- - // If we don't have the last header, then they'll have given us
- - // something new (if these headers are valid).
- - if (mapBlockIndex.find(hashLastBlock) == mapBlockIndex.end()) {
- - received_new_header = true;
- - }
- - }
- -
- - CValidationState state;
- - CBlockHeader first_invalid_header;
- - if (!ProcessNewBlockHeaders(headers, state, chainparams, &pindexLast, &first_invalid_header)) {
- - int nDoS;
- - if (state.IsInvalid(nDoS)) {
- - LOCK(cs_main);
- - if (nDoS > 0) {
- - Misbehaving(pfrom->GetId(), nDoS);
- - }
- - if (punish_duplicate_invalid && mapBlockIndex.find(first_invalid_header.GetHash()) != mapBlockIndex.end()) {
- - // Goal: don't allow outbound peers to use up our outbound
- - // connection slots if they are on incompatible chains.
- - //
- - // We ask the caller to set punish_invalid appropriately based
- - // on the peer and the method of header delivery (compact
- - // blocks are allowed to be invalid in some circumstances,
- - // under BIP 152).
- - // Here, we try to detect the narrow situation that we have a
- - // valid block header (ie it was valid at the time the header
- - // was received, and hence stored in mapBlockIndex) but know the
- - // block is invalid, and that a peer has announced that same
- - // block as being on its active chain.
- - // Disconnect the peer in such a situation.
- - //
- - // Note: if the header that is invalid was not accepted to our
- - // mapBlockIndex at all, that may also be grounds for
- - // disconnecting the peer, as the chain they are on is likely
- - // to be incompatible. However, there is a circumstance where
- - // that does not hold: if the header's timestamp is more than
- - // 2 hours ahead of our current time. In that case, the header
- - // may become valid in the future, and we don't want to
- - // disconnect a peer merely for serving us one too-far-ahead
- - // block header, to prevent an attacker from splitting the
- - // network by mining a block right at the 2 hour boundary.
- - //
- - // TODO: update the DoS logic (or, rather, rewrite the
- - // DoS-interface between validation and net_processing) so that
- - // the interface is cleaner, and so that we disconnect on all the
- - // reasons that a peer's headers chain is incompatible
- - // with ours (eg block->nVersion softforks, MTP violations,
- - // etc), and not just the duplicate-invalid case.
- - pfrom->fDisconnect = true;
- - }
- - return error("invalid header received");
- - }
- - }
- -
- - {
- - LOCK(cs_main);
- - CNodeState *nodestate = State(pfrom->GetId());
- - if (nodestate->nUnconnectingHeaders > 0) {
- - LogPrint(BCLog::NET, "peer=%d: resetting nUnconnectingHeaders (%d -> 0)\n", pfrom->GetId(), nodestate->nUnconnectingHeaders);
- - }
- - nodestate->nUnconnectingHeaders = 0;
- -
- - assert(pindexLast);
- - UpdateBlockAvailability(pfrom->GetId(), pindexLast->GetBlockHash());
- -
- - // From here, pindexBestKnownBlock should be guaranteed to be non-null,
- - // because it is set in UpdateBlockAvailability. Some nullptr checks
- - // are still present, however, as belt-and-suspenders.
- -
- - if (received_new_header && pindexLast->nChainWork > chainActive.Tip()->nChainWork) {
- - nodestate->m_last_block_announcement = GetTime();
- - }
- -
- - if (nCount == MAX_HEADERS_RESULTS) {
- - // Headers message had its maximum size; the peer may have more headers.
- - // TODO: optimize: if pindexLast is an ancestor of chainActive.Tip or pindexBestHeader, continue
- - // from there instead.
- - LogPrint(BCLog::NET, "more getheaders (%d) to end to peer=%d (startheight:%d)\n", pindexLast->nHeight, pfrom->GetId(), pfrom->nStartingHeight);
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexLast), uint256()));
- - }
- -
- - bool fCanDirectFetch = CanDirectFetch(chainparams.GetConsensus());
- - // If this set of headers is valid and ends in a block with at least as
- - // much work as our tip, download as much as possible.
- - if (fCanDirectFetch && pindexLast->IsValid(BLOCK_VALID_TREE) && chainActive.Tip()->nChainWork <= pindexLast->nChainWork) {
- - std::vector<const CBlockIndex*> vToFetch;
- - const CBlockIndex *pindexWalk = pindexLast;
- - // Calculate all the blocks we'd need to switch to pindexLast, up to a limit.
- - while (pindexWalk && !chainActive.Contains(pindexWalk) && vToFetch.size() <= MAX_BLOCKS_IN_TRANSIT_PER_PEER) {
- - if (!(pindexWalk->nStatus & BLOCK_HAVE_DATA) &&
- - !mapBlocksInFlight.count(pindexWalk->GetBlockHash()) &&
- - (!IsWitnessEnabled(pindexWalk->pprev, chainparams.GetConsensus()) || State(pfrom->GetId())->fHaveWitness)) {
- - // We don't have this block, and it's not yet in flight.
- - vToFetch.push_back(pindexWalk);
- - }
- - pindexWalk = pindexWalk->pprev;
- - }
- - // If pindexWalk still isn't on our main chain, we're looking at a
- - // very large reorg at a time we think we're close to caught up to
- - // the main chain -- this shouldn't really happen. Bail out on the
- - // direct fetch and rely on parallel download instead.
- - if (!chainActive.Contains(pindexWalk)) {
- - LogPrint(BCLog::NET, "Large reorg, won't direct fetch to %s (%d)\n",
- - pindexLast->GetBlockHash().ToString(),
- - pindexLast->nHeight);
- - } else {
- - std::vector<CInv> vGetData;
- - // Download as much as possible, from earliest to latest.
- - for (const CBlockIndex *pindex : reverse_iterate(vToFetch)) {
- - if (nodestate->nBlocksInFlight >= MAX_BLOCKS_IN_TRANSIT_PER_PEER) {
- - // Can't download any more from this peer
- - break;
- - }
- - uint32_t nFetchFlags = GetFetchFlags(pfrom);
- - vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash()));
- - MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), pindex);
- - LogPrint(BCLog::NET, "Requesting block %s from peer=%d\n",
- - pindex->GetBlockHash().ToString(), pfrom->GetId());
- - }
- - if (vGetData.size() > 1) {
- - LogPrint(BCLog::NET, "Downloading blocks toward %s (%d) via headers direct fetch\n",
- - pindexLast->GetBlockHash().ToString(), pindexLast->nHeight);
- - }
- - if (vGetData.size() > 0) {
- - if (nodestate->fSupportsDesiredCmpctVersion && vGetData.size() == 1 && mapBlocksInFlight.size() == 1 && pindexLast->pprev->IsValid(BLOCK_VALID_CHAIN)) {
- - // In any case, we want to download using a compact block, not a regular one
- - vGetData[0] = CInv(MSG_CMPCT_BLOCK, vGetData[0].hash);
- - }
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vGetData));
- - }
- - }
- - }
- - // If we're in IBD, we want outbound peers that will serve us a useful
- - // chain. Disconnect peers that are on chains with insufficient work.
- - if (IsInitialBlockDownload() && nCount != MAX_HEADERS_RESULTS) {
- - // When nCount < MAX_HEADERS_RESULTS, we know we have no more
- - // headers to fetch from this peer.
- - if (nodestate->pindexBestKnownBlock && nodestate->pindexBestKnownBlock->nChainWork < nMinimumChainWork) {
- - // This peer has too little work on their headers chain to help
- - // us sync -- disconnect if using an outbound slot (unless
- - // whitelisted or addnode).
- - // Note: We compare their tip to nMinimumChainWork (rather than
- - // chainActive.Tip()) because we won't start block download
- - // until we have a headers chain that has at least
- - // nMinimumChainWork, even if a peer has a chain past our tip,
- - // as an anti-DoS measure.
- - if (IsOutboundDisconnectionCandidate(pfrom)) {
- - LogPrintf("Disconnecting outbound peer %d -- headers chain has insufficient work\n", pfrom->GetId());
- - pfrom->fDisconnect = true;
- - }
- - }
- - }
- -
- - if (!pfrom->fDisconnect && IsOutboundDisconnectionCandidate(pfrom) && nodestate->pindexBestKnownBlock != nullptr) {
- - // If this is an outbound peer, check to see if we should protect
- - // it from the bad/lagging chain logic.
- - if (g_outbound_peers_with_protect_from_disconnect < MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT && nodestate->pindexBestKnownBlock->nChainWork >= chainActive.Tip()->nChainWork && !nodestate->m_chain_sync.m_protect) {
- - LogPrint(BCLog::NET, "Protecting outbound peer=%d from eviction\n", pfrom->GetId());
- - nodestate->m_chain_sync.m_protect = true;
- - ++g_outbound_peers_with_protect_from_disconnect;
- - }
- - }
- - }
- -
- - return true;
- -}
- -
- -bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, int64_t nTimeReceived, const CChainParams& chainparams, CConnman* connman, const std::atomic<bool>& interruptMsgProc)
- +bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, int64_t nTimeReceived, const CChainParams& chainparams, CConnman& connman, const std::atomic<bool>& interruptMsgProc)
- {
- LogPrint(BCLog::NET, "received: %s (%u bytes) peer=%d\n", SanitizeString(strCommand), vRecv.size(), pfrom->GetId());
- if (gArgs.IsArgSet("-dropmessagestest") && GetRand(gArgs.GetArg("-dropmessagestest", 0)) == 0)
- @@ -1501,7 +1225,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // Each connection can only send one version message
- if (pfrom->nVersion != 0)
- {
- - connman->PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_DUPLICATE, std::string("Duplicate version message")));
- + connman.PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_DUPLICATE, std::string("Duplicate version message")));
- LOCK(cs_main);
- Misbehaving(pfrom->GetId(), 1);
- return false;
- @@ -1525,12 +1249,12 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- nServices = ServiceFlags(nServiceInt);
- if (!pfrom->fInbound)
- {
- - connman->SetServices(pfrom->addr, nServices);
- + connman.SetServices(pfrom->addr, nServices);
- }
- if (pfrom->nServicesExpected & ~nServices)
- {
- LogPrint(BCLog::NET, "peer=%d does not offer the expected services (%08x offered, %08x expected); disconnecting\n", pfrom->GetId(), nServices, pfrom->nServicesExpected);
- - connman->PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_NONSTANDARD,
- + connman.PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_NONSTANDARD,
- strprintf("Expected to offer services %08x", pfrom->nServicesExpected)));
- pfrom->fDisconnect = true;
- return false;
- @@ -1551,7 +1275,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- {
- // disconnect from peers older than this proto version
- LogPrintf("peer=%d using obsolete version %i; disconnecting\n", pfrom->GetId(), nVersion);
- - connman->PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE,
- + connman.PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE,
- strprintf("Version must be %d or greater", MIN_PEER_PROTO_VERSION)));
- pfrom->fDisconnect = true;
- return false;
- @@ -1571,7 +1295,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- if (!vRecv.empty())
- vRecv >> fRelay;
- // Disconnect if we connected to ourself
- - if (pfrom->fInbound && !connman->CheckIncomingNonce(nNonce))
- + if (pfrom->fInbound && !connman.CheckIncomingNonce(nNonce))
- {
- LogPrintf("connected to self at %s, disconnecting\n", pfrom->addr.ToString());
- pfrom->fDisconnect = true;
- @@ -1587,7 +1311,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- if (pfrom->fInbound)
- PushNodeVersion(pfrom, connman, GetAdjustedTime());
- - connman->PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERACK));
- + connman.PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERACK));
- pfrom->nServices = nServices;
- pfrom->SetAddrLocal(addrMe);
- @@ -1638,12 +1362,12 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- }
- // Get recent addresses
- - if (pfrom->fOneShot || pfrom->nVersion >= CADDR_TIME_VERSION || connman->GetAddressCount() < 1000)
- + if (pfrom->fOneShot || pfrom->nVersion >= CADDR_TIME_VERSION || connman.GetAddressCount() < 1000)
- {
- - connman->PushMessage(pfrom, CNetMsgMaker(nSendVersion).Make(NetMsgType::GETADDR));
- + connman.PushMessage(pfrom, CNetMsgMaker(nSendVersion).Make(NetMsgType::GETADDR));
- pfrom->fGetAddr = true;
- }
- - connman->MarkAddressGood(pfrom->addr);
- + connman.MarkAddressGood(pfrom->addr);
- }
- std::string remoteAddr;
- @@ -1662,7 +1386,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // If the peer is old enough to have the old alert system, send it the final alert.
- if (pfrom->nVersion <= 70012) {
- CDataStream finalAlert(ParseHex("5c0100000015f7675900000000ffffff7f00000000ffffff7ffeffff7f0000000000ffffff7f00ffffff7f002f555247454e543a20416c657274206b657920636f6d70726f6d697365642c2075706772616465207265717569726564004630440220405f7e7572b176f3316d4e12deab75ad4ff978844f7a7bcd5ed06f6aa094eb6602207880fcc07d0a78e0f46f188d115e04ed4ad48980ea3572cb0e0cb97921048095"), SER_NETWORK, PROTOCOL_VERSION);
- - connman->PushMessage(pfrom, CNetMsgMaker(nSendVersion).Make("alert", finalAlert));
- + connman.PushMessage(pfrom, CNetMsgMaker(nSendVersion).Make("alert", finalAlert));
- }
- // Feeler connections exist only to verify if address is online.
- @@ -1700,7 +1424,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // We send this to non-NODE NETWORK peers as well, because even
- // non-NODE NETWORK peers can announce blocks (such as pruning
- // nodes)
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDHEADERS));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDHEADERS));
- }
- if (pfrom->nVersion >= SHORT_IDS_BLOCKS_VERSION) {
- // Tell our peer we are willing to provide version 1 or 2 cmpctblocks
- @@ -1711,9 +1435,9 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- bool fAnnounceUsingCMPCTBLOCK = false;
- uint64_t nCMPCTBLOCKVersion = 2;
- if (pfrom->GetLocalServices() & NODE_WITNESS)
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- nCMPCTBLOCKVersion = 1;
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
- }
- pfrom->fSuccessfullyConnected = true;
- }
- @@ -1732,7 +1456,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- vRecv >> vAddr;
- // Don't want addr from older versions unless seeding
- - if (pfrom->nVersion < CADDR_TIME_VERSION && connman->GetAddressCount() > 1000)
- + if (pfrom->nVersion < CADDR_TIME_VERSION && connman.GetAddressCount() > 1000)
- return true;
- if (vAddr.size() > 1000)
- {
- @@ -1766,7 +1490,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- if (fReachable)
- vAddrOk.push_back(addr);
- }
- - connman->AddNewAddresses(vAddrOk, pfrom->addr, 2 * 60 * 60);
- + connman.AddNewAddresses(vAddrOk, pfrom->addr, 2 * 60 * 60);
- if (vAddr.size() < 1000)
- pfrom->fGetAddr = false;
- if (pfrom->fOneShot)
- @@ -1844,7 +1568,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // fell back to inv we probably have a reorg which we should get the headers for first,
- // we now only provide a getheaders response here. When we receive the headers, we will
- // then ask for the blocks we need.
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexBestHeader), inv.hash));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexBestHeader), inv.hash));
- LogPrint(BCLog::NET, "getheaders (%d) %s to peer=%d\n", pindexBestHeader->nHeight, inv.hash.ToString(), pfrom->GetId());
- }
- }
- @@ -2050,7 +1774,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // will re-announce the new block via headers (or compact blocks again)
- // in the SendMessages logic.
- nodestate->pindexBestHeaderSent = pindex ? pindex : chainActive.Tip();
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::HEADERS, vHeaders));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::HEADERS, vHeaders));
- }
- @@ -2231,7 +1955,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- pfrom->GetId(),
- FormatStateMessage(state));
- if (state.GetRejectCode() > 0 && state.GetRejectCode() < REJECT_INTERNAL) // Never send AcceptToMemoryPool's internal codes over P2P
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::REJECT, strCommand, (unsigned char)state.GetRejectCode(),
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::REJECT, strCommand, (unsigned char)state.GetRejectCode(),
- state.GetRejectReason().substr(0, MAX_REJECT_MESSAGE_LENGTH), inv.hash));
- if (nDoS > 0) {
- Misbehaving(pfrom->GetId(), nDoS);
- @@ -2245,21 +1969,15 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- CBlockHeaderAndShortTxIDs cmpctblock;
- vRecv >> cmpctblock;
- - bool received_new_header = false;
- -
- {
- LOCK(cs_main);
- if (mapBlockIndex.find(cmpctblock.header.hashPrevBlock) == mapBlockIndex.end()) {
- // Doesn't connect (or is genesis), instead of DoSing in AcceptBlockHeader, request deeper headers
- if (!IsInitialBlockDownload())
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexBestHeader), uint256()));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexBestHeader), uint256()));
- return true;
- }
- -
- - if (mapBlockIndex.find(cmpctblock.header.GetHash()) == mapBlockIndex.end()) {
- - received_new_header = true;
- - }
- }
- const CBlockIndex *pindex = nullptr;
- @@ -2286,6 +2004,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // If we end up treating this as a plain headers message, call that as well
- // without cs_main.
- bool fRevertToHeaderProcessing = false;
- + CDataStream vHeadersMsg(SER_NETWORK, PROTOCOL_VERSION);
- // Keep a CBlock for "optimistic" compactblock reconstructions (see
- // below)
- @@ -2298,14 +2017,6 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- assert(pindex);
- UpdateBlockAvailability(pfrom->GetId(), pindex->GetBlockHash());
- - CNodeState *nodestate = State(pfrom->GetId());
- -
- - // If this was a new header with more work than our tip, update the
- - // peer's last block announcement time
- - if (received_new_header && pindex->nChainWork > chainActive.Tip()->nChainWork) {
- - nodestate->m_last_block_announcement = GetTime();
- - }
- -
- std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> >::iterator blockInFlightIt = mapBlocksInFlight.find(pindex->GetBlockHash());
- bool fAlreadyInFlight = blockInFlightIt != mapBlocksInFlight.end();
- @@ -2319,7 +2030,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // so we just grab the block via normal getdata
- std::vector<CInv> vInv(1);
- vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
- }
- return true;
- }
- @@ -2328,6 +2039,8 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- if (!fAlreadyInFlight && !CanDirectFetch(chainparams.GetConsensus()))
- return true;
- + CNodeState *nodestate = State(pfrom->GetId());
- +
- if (IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus()) && !nodestate->fSupportsDesiredCmpctVersion) {
- // Don't bother trying to process compact blocks from v1 peers
- // after segwit activates.
- @@ -2361,7 +2074,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // Duplicate txindexes, the block is now in-flight, so just request it
- std::vector<CInv> vInv(1);
- vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
- return true;
- }
- @@ -2378,7 +2091,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- fProcessBLOCKTXN = true;
- } else {
- req.blockhash = pindex->GetBlockHash();
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETBLOCKTXN, req));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETBLOCKTXN, req));
- }
- } else {
- // This block is either already in flight from a different
- @@ -2404,10 +2117,14 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // mempool will probably be useless - request the block normally
- std::vector<CInv> vInv(1);
- vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
- return true;
- } else {
- // If this was an announce-cmpctblock, we want the same treatment as a header message
- + // Dirty hack to process as if it were just a headers message (TODO: move message handling into their own functions)
- + std::vector<CBlock> headers;
- + headers.push_back(cmpctblock.header);
- + vHeadersMsg << headers;
- fRevertToHeaderProcessing = true;
- }
- }
- @@ -2416,14 +2133,8 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- if (fProcessBLOCKTXN)
- return ProcessMessage(pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams, connman, interruptMsgProc);
- - if (fRevertToHeaderProcessing) {
- - // Headers received from HB compact block peers are permitted to be
- - // relayed before full validation (see BIP 152), so we don't want to disconnect
- - // the peer if the header turns out to be for an invalid block.
- - // Note that if a peer tries to build on an invalid chain, that
- - // will be detected and the peer will be banned.
- - return ProcessHeadersMessage(pfrom, connman, {cmpctblock.header}, chainparams, /*punish_duplicate_invalid=*/false);
- - }
- + if (fRevertToHeaderProcessing)
- + return ProcessMessage(pfrom, NetMsgType::HEADERS, vHeadersMsg, nTimeReceived, chainparams, connman, interruptMsgProc);
- if (fBlockReconstructed) {
- // If we got here, we were able to optimistically reconstruct a
- @@ -2433,16 +2144,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- mapBlockSource.emplace(pblock->GetHash(), std::make_pair(pfrom->GetId(), false));
- }
- bool fNewBlock = false;
- - // Setting fForceProcessing to true means that we bypass some of
- - // our anti-DoS protections in AcceptBlock, which filters
- - // unrequested blocks that might be trying to waste our resources
- - // (eg disk space). Because we only try to reconstruct blocks when
- - // we're close to caught up (via the CanDirectFetch() requirement
- - // above, combined with the behavior of not requesting blocks until
- - // we have a chain with at least nMinimumChainWork), and we ignore
- - // compact blocks with less work than our tip, it is safe to treat
- - // reconstructed compact blocks as having been requested.
- - ProcessNewBlock(chainparams, pblock, /*fForceProcessing=*/true, &fNewBlock);
- + ProcessNewBlock(chainparams, pblock, true, &fNewBlock);
- if (fNewBlock) {
- pfrom->nLastBlockTime = GetTime();
- } else {
- @@ -2489,7 +2191,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // Might have collided, fall back to getdata now :(
- std::vector<CInv> invs;
- invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom), resp.blockhash));
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, invs));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, invs));
- } else {
- // Block is either okay, or possibly we received
- // READ_STATUS_CHECKBLOCK_FAILED.
- @@ -2522,11 +2224,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- bool fNewBlock = false;
- // Since we requested this block (it was in mapBlocksInFlight), force it to be processed,
- // even if it would not be a candidate for new tip (missing previous block, chain not long enough, etc)
- - // This bypasses some anti-DoS logic in AcceptBlock (eg to prevent
- - // disk-space attacks), but this should be safe due to the
- - // protections in the compact block handler -- see related comment
- - // in compact block optimistic reconstruction handling.
- - ProcessNewBlock(chainparams, pblock, /*fForceProcessing=*/true, &fNewBlock);
- + ProcessNewBlock(chainparams, pblock, true, &fNewBlock);
- if (fNewBlock) {
- pfrom->nLastBlockTime = GetTime();
- } else {
- @@ -2554,12 +2252,136 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- ReadCompactSize(vRecv); // ignore tx count; assume it is 0.
- }
- - // Headers received via a HEADERS message should be valid, and reflect
- - // the chain the peer is on. If we receive a known-invalid header,
- - // disconnect the peer if it is using one of our outbound connection
- - // slots.
- - bool should_punish = !pfrom->fInbound && !pfrom->m_manual_connection;
- - return ProcessHeadersMessage(pfrom, connman, headers, chainparams, should_punish);
- + if (nCount == 0) {
- + // Nothing interesting. Stop asking this peers for more headers.
- + return true;
- + }
- +
- + const CBlockIndex *pindexLast = nullptr;
- + {
- + LOCK(cs_main);
- + CNodeState *nodestate = State(pfrom->GetId());
- +
- + // If this looks like it could be a block announcement (nCount <
- + // MAX_BLOCKS_TO_ANNOUNCE), use special logic for handling headers that
- + // don't connect:
- + // - Send a getheaders message in response to try to connect the chain.
- + // - The peer can send up to MAX_UNCONNECTING_HEADERS in a row that
- + // don't connect before giving DoS points
- + // - Once a headers message is received that is valid and does connect,
- + // nUnconnectingHeaders gets reset back to 0.
- + if (mapBlockIndex.find(headers[0].hashPrevBlock) == mapBlockIndex.end() && nCount < MAX_BLOCKS_TO_ANNOUNCE) {
- + nodestate->nUnconnectingHeaders++;
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexBestHeader), uint256()));
- + LogPrint(BCLog::NET, "received header %s: missing prev block %s, sending getheaders (%d) to end (peer=%d, nUnconnectingHeaders=%d)\n",
- + headers[0].GetHash().ToString(),
- + headers[0].hashPrevBlock.ToString(),
- + pindexBestHeader->nHeight,
- + pfrom->GetId(), nodestate->nUnconnectingHeaders);
- + // Set hashLastUnknownBlock for this peer, so that if we
- + // eventually get the headers - even from a different peer -
- + // we can use this peer to download.
- + UpdateBlockAvailability(pfrom->GetId(), headers.back().GetHash());
- +
- + if (nodestate->nUnconnectingHeaders % MAX_UNCONNECTING_HEADERS == 0) {
- + Misbehaving(pfrom->GetId(), 20);
- + }
- + return true;
- + }
- +
- + uint256 hashLastBlock;
- + for (const CBlockHeader& header : headers) {
- + if (!hashLastBlock.IsNull() && header.hashPrevBlock != hashLastBlock) {
- + Misbehaving(pfrom->GetId(), 20);
- + return error("non-continuous headers sequence");
- + }
- + hashLastBlock = header.GetHash();
- + }
- + }
- +
- + CValidationState state;
- + if (!ProcessNewBlockHeaders(headers, state, chainparams, &pindexLast)) {
- + int nDoS;
- + if (state.IsInvalid(nDoS)) {
- + if (nDoS > 0) {
- + LOCK(cs_main);
- + Misbehaving(pfrom->GetId(), nDoS);
- + }
- + return error("invalid header received");
- + }
- + }
- +
- + {
- + LOCK(cs_main);
- + CNodeState *nodestate = State(pfrom->GetId());
- + if (nodestate->nUnconnectingHeaders > 0) {
- + LogPrint(BCLog::NET, "peer=%d: resetting nUnconnectingHeaders (%d -> 0)\n", pfrom->GetId(), nodestate->nUnconnectingHeaders);
- + }
- + nodestate->nUnconnectingHeaders = 0;
- +
- + assert(pindexLast);
- + UpdateBlockAvailability(pfrom->GetId(), pindexLast->GetBlockHash());
- +
- + if (nCount == MAX_HEADERS_RESULTS) {
- + // Headers message had its maximum size; the peer may have more headers.
- + // TODO: optimize: if pindexLast is an ancestor of chainActive.Tip or pindexBestHeader, continue
- + // from there instead.
- + LogPrint(BCLog::NET, "more getheaders (%d) to end to peer=%d (startheight:%d)\n", pindexLast->nHeight, pfrom->GetId(), pfrom->nStartingHeight);
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexLast), uint256()));
- + }
- +
- + bool fCanDirectFetch = CanDirectFetch(chainparams.GetConsensus());
- + // If this set of headers is valid and ends in a block with at least as
- + // much work as our tip, download as much as possible.
- + if (fCanDirectFetch && pindexLast->IsValid(BLOCK_VALID_TREE) && chainActive.Tip()->nChainWork <= pindexLast->nChainWork) {
- + std::vector<const CBlockIndex*> vToFetch;
- + const CBlockIndex *pindexWalk = pindexLast;
- + // Calculate all the blocks we'd need to switch to pindexLast, up to a limit.
- + while (pindexWalk && !chainActive.Contains(pindexWalk) && vToFetch.size() <= MAX_BLOCKS_IN_TRANSIT_PER_PEER) {
- + if (!(pindexWalk->nStatus & BLOCK_HAVE_DATA) &&
- + !mapBlocksInFlight.count(pindexWalk->GetBlockHash()) &&
- + (!IsWitnessEnabled(pindexWalk->pprev, chainparams.GetConsensus()) || State(pfrom->GetId())->fHaveWitness)) {
- + // We don't have this block, and it's not yet in flight.
- + vToFetch.push_back(pindexWalk);
- + }
- + pindexWalk = pindexWalk->pprev;
- + }
- + // If pindexWalk still isn't on our main chain, we're looking at a
- + // very large reorg at a time we think we're close to caught up to
- + // the main chain -- this shouldn't really happen. Bail out on the
- + // direct fetch and rely on parallel download instead.
- + if (!chainActive.Contains(pindexWalk)) {
- + LogPrint(BCLog::NET, "Large reorg, won't direct fetch to %s (%d)\n",
- + pindexLast->GetBlockHash().ToString(),
- + pindexLast->nHeight);
- + } else {
- + std::vector<CInv> vGetData;
- + // Download as much as possible, from earliest to latest.
- + for (const CBlockIndex *pindex : reverse_iterate(vToFetch)) {
- + if (nodestate->nBlocksInFlight >= MAX_BLOCKS_IN_TRANSIT_PER_PEER) {
- + // Can't download any more from this peer
- + break;
- + }
- + uint32_t nFetchFlags = GetFetchFlags(pfrom);
- + vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash()));
- + MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), pindex);
- + LogPrint(BCLog::NET, "Requesting block %s from peer=%d\n",
- + pindex->GetBlockHash().ToString(), pfrom->GetId());
- + }
- + if (vGetData.size() > 1) {
- + LogPrint(BCLog::NET, "Downloading blocks toward %s (%d) via headers direct fetch\n",
- + pindexLast->GetBlockHash().ToString(), pindexLast->nHeight);
- + }
- + if (vGetData.size() > 0) {
- + if (nodestate->fSupportsDesiredCmpctVersion && vGetData.size() == 1 && mapBlocksInFlight.size() == 1 && pindexLast->pprev->IsValid(BLOCK_VALID_CHAIN)) {
- + // In any case, we want to download using a compact block, not a regular one
- + vGetData[0] = CInv(MSG_CMPCT_BLOCK, vGetData[0].hash);
- + }
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vGetData));
- + }
- + }
- + }
- + }
- }
- else if (strCommand == NetMsgType::BLOCK && !fImporting && !fReindex) // Ignore blocks received while importing
- @@ -2569,7 +2391,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- LogPrint(BCLog::NET, "received block %s peer=%d\n", pblock->GetHash().ToString(), pfrom->GetId());
- - bool forceProcessing = false;
- + // Process all blocks from whitelisted peers, even if not requested,
- + // unless we're still syncing with the network.
- + // Such an unrequested block may still be processed, subject to the
- + // conditions in AcceptBlock().
- + bool forceProcessing = pfrom->fWhitelisted && !IsInitialBlockDownload();
- const uint256 hash(pblock->GetHash());
- {
- LOCK(cs_main);
- @@ -2612,7 +2438,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- pfrom->fSentAddr = true;
- pfrom->vAddrToSend.clear();
- - std::vector<CAddress> vAddr = connman->GetAddresses();
- + std::vector<CAddress> vAddr = connman.GetAddresses();
- FastRandomContext insecure_rand;
- for (const CAddress &addr : vAddr)
- pfrom->PushAddress(addr, insecure_rand);
- @@ -2628,7 +2454,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- return true;
- }
- - if (connman->OutboundTargetReached(false) && !pfrom->fWhitelisted)
- + if (connman.OutboundTargetReached(false) && !pfrom->fWhitelisted)
- {
- LogPrint(BCLog::NET, "mempool request with bandwidth limit reached, disconnect peer=%d\n", pfrom->GetId());
- pfrom->fDisconnect = true;
- @@ -2657,7 +2483,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- // it, if the remote node sends a ping once per second and this node takes 5
- // seconds to respond to each, the 5th ping the remote sends would appear to
- // return very quickly.
- - connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::PONG, nonce));
- + connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::PONG, nonce));
- }
- }
- @@ -2803,13 +2629,13 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
- return true;
- }
- -static bool SendRejectsAndCheckIfBanned(CNode* pnode, CConnman* connman)
- +static bool SendRejectsAndCheckIfBanned(CNode* pnode, CConnman& connman)
- {
- AssertLockHeld(cs_main);
- CNodeState &state = *State(pnode->GetId());
- for (const CBlockReject& reject : state.rejects) {
- - connman->PushMessage(pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, (std::string)NetMsgType::BLOCK, reject.chRejectCode, reject.strRejectReason, reject.hashBlock));
- + connman.PushMessage(pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, (std::string)NetMsgType::BLOCK, reject.chRejectCode, reject.strRejectReason, reject.hashBlock));
- }
- state.rejects.clear();
- @@ -2817,7 +2643,7 @@ static bool SendRejectsAndCheckIfBanned(CNode* pnode, CConnman* connman)
- state.fShouldBan = false;
- if (pnode->fWhitelisted)
- LogPrintf("Warning: not punishing whitelisted peer %s!\n", pnode->addr.ToString());
- - else if (pnode->m_manual_connection)
- + else if (pnode->fAddnode)
- LogPrintf("Warning: not punishing addnoded peer %s!\n", pnode->addr.ToString());
- else {
- pnode->fDisconnect = true;
- @@ -2825,7 +2651,7 @@ static bool SendRejectsAndCheckIfBanned(CNode* pnode, CConnman* connman)
- LogPrintf("Warning: not banning local peer %s!\n", pnode->addr.ToString());
- else
- {
- - connman->Ban(pnode->addr, BanReasonNodeMisbehaving);
- + connman.Ban(pnode->addr, BanReasonNodeMisbehaving);
- }
- }
- return true;
- @@ -2833,7 +2659,7 @@ static bool SendRejectsAndCheckIfBanned(CNode* pnode, CConnman* connman)
- return false;
- }
- -bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& interruptMsgProc)
- +bool ProcessMessages(CNode* pfrom, CConnman& connman, const std::atomic<bool>& interruptMsgProc)
- {
- const CChainParams& chainparams = Params();
- //
- @@ -2867,7 +2693,7 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
- // Just take one message
- msgs.splice(msgs.begin(), pfrom->vProcessMsg, pfrom->vProcessMsg.begin());
- pfrom->nProcessQueueSize -= msgs.front().vRecv.size() + CMessageHeader::HEADER_SIZE;
- - pfrom->fPauseRecv = pfrom->nProcessQueueSize > connman->GetReceiveFloodSize();
- + pfrom->fPauseRecv = pfrom->nProcessQueueSize > connman.GetReceiveFloodSize();
- fMoreWork = !pfrom->vProcessMsg.empty();
- }
- CNetMessage& msg(msgs.front());
- @@ -2916,7 +2742,7 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
- }
- catch (const std::ios_base::failure& e)
- {
- - connman->PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_MALFORMED, std::string("error parsing message")));
- + connman.PushMessage(pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, strCommand, REJECT_MALFORMED, std::string("error parsing message")));
- if (strstr(e.what(), "end of data"))
- {
- // Allow exceptions from under-length message on vRecv
- @@ -2953,135 +2779,6 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
- return fMoreWork;
- }
- -void PeerLogicValidation::ConsiderEviction(CNode *pto, int64_t time_in_seconds)
- -{
- - AssertLockHeld(cs_main);
- -
- - CNodeState &state = *State(pto->GetId());
- - const CNetMsgMaker msgMaker(pto->GetSendVersion());
- -
- - if (!state.m_chain_sync.m_protect && IsOutboundDisconnectionCandidate(pto) && state.fSyncStarted) {
- - // This is an outbound peer subject to disconnection if they don't
- - // announce a block with as much work as the current tip within
- - // CHAIN_SYNC_TIMEOUT + HEADERS_RESPONSE_TIME seconds (note: if
- - // their chain has more work than ours, we should sync to it,
- - // unless it's invalid, in which case we should find that out and
- - // disconnect from them elsewhere).
- - if (state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock->nChainWork >= chainActive.Tip()->nChainWork) {
- - if (state.m_chain_sync.m_timeout != 0) {
- - state.m_chain_sync.m_timeout = 0;
- - state.m_chain_sync.m_work_header = nullptr;
- - state.m_chain_sync.m_sent_getheaders = false;
- - }
- - } else if (state.m_chain_sync.m_timeout == 0 || (state.m_chain_sync.m_work_header != nullptr && state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock->nChainWork >= state.m_chain_sync.m_work_header->nChainWork)) {
- - // Our best block known by this peer is behind our tip, and we're either noticing
- - // that for the first time, OR this peer was able to catch up to some earlier point
- - // where we checked against our tip.
- - // Either way, set a new timeout based on current tip.
- - state.m_chain_sync.m_timeout = time_in_seconds + CHAIN_SYNC_TIMEOUT;
- - state.m_chain_sync.m_work_header = chainActive.Tip();
- - state.m_chain_sync.m_sent_getheaders = false;
- - } else if (state.m_chain_sync.m_timeout > 0 && time_in_seconds > state.m_chain_sync.m_timeout) {
- - // No evidence yet that our peer has synced to a chain with work equal to that
- - // of our tip, when we first detected it was behind. Send a single getheaders
- - // message to give the peer a chance to update us.
- - if (state.m_chain_sync.m_sent_getheaders) {
- - // They've run out of time to catch up!
- - LogPrintf("Disconnecting outbound peer %d for old chain, best known block = %s\n", pto->GetId(), state.pindexBestKnownBlock != nullptr ? state.pindexBestKnownBlock->GetBlockHash().ToString() : "<none>");
- - pto->fDisconnect = true;
- - } else {
- - LogPrint(BCLog::NET, "sending getheaders to outbound peer=%d to verify chain work (current best known block:%s, benchmark blockhash: %s)\n", pto->GetId(), state.pindexBestKnownBlock != nullptr ? state.pindexBestKnownBlock->GetBlockHash().ToString() : "<none>", state.m_chain_sync.m_work_header->GetBlockHash().ToString());
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(state.m_chain_sync.m_work_header->pprev), uint256()));
- - state.m_chain_sync.m_sent_getheaders = true;
- - constexpr int64_t HEADERS_RESPONSE_TIME = 120; // 2 minutes
- - // Bump the timeout to allow a response, which could clear the timeout
- - // (if the response shows the peer has synced), reset the timeout (if
- - // the peer syncs to the required work but not to our tip), or result
- - // in disconnect (if we advance to the timeout and pindexBestKnownBlock
- - // has not sufficiently progressed)
- - state.m_chain_sync.m_timeout = time_in_seconds + HEADERS_RESPONSE_TIME;
- - }
- - }
- - }
- -}
- -
- -void PeerLogicValidation::EvictExtraOutboundPeers(int64_t time_in_seconds)
- -{
- - // Check whether we have too many outbound peers
- - int extra_peers = connman->GetExtraOutboundCount();
- - if (extra_peers > 0) {
- - // If we have more outbound peers than we target, disconnect one.
- - // Pick the outbound peer that least recently announced
- - // us a new block, with ties broken by choosing the more recent
- - // connection (higher node id)
- - NodeId worst_peer = -1;
- - int64_t oldest_block_announcement = std::numeric_limits<int64_t>::max();
- -
- - LOCK(cs_main);
- -
- - connman->ForEachNode([&](CNode* pnode) {
- - // Ignore non-outbound peers, or nodes marked for disconnect already
- - if (!IsOutboundDisconnectionCandidate(pnode) || pnode->fDisconnect) return;
- - CNodeState *state = State(pnode->GetId());
- - if (state == nullptr) return; // shouldn't be possible, but just in case
- - // Don't evict our protected peers
- - if (state->m_chain_sync.m_protect) return;
- - if (state->m_last_block_announcement < oldest_block_announcement || (state->m_last_block_announcement == oldest_block_announcement && pnode->GetId() > worst_peer)) {
- - worst_peer = pnode->GetId();
- - oldest_block_announcement = state->m_last_block_announcement;
- - }
- - });
- - if (worst_peer != -1) {
- - bool disconnected = connman->ForNode(worst_peer, [&](CNode *pnode) {
- - // Only disconnect a peer that has been connected to us for
- - // some reasonable fraction of our check-frequency, to give
- - // it time for new information to have arrived.
- - // Also don't disconnect any peer we're trying to download a
- - // block from.
- - CNodeState &state = *State(pnode->GetId());
- - if (time_in_seconds - pnode->nTimeConnected > MINIMUM_CONNECT_TIME && state.nBlocksInFlight == 0) {
- - LogPrint(BCLog::NET, "disconnecting extra outbound peer=%d (last block announcement received at time %d)\n", pnode->GetId(), oldest_block_announcement);
- - pnode->fDisconnect = true;
- - return true;
- - } else {
- - LogPrint(BCLog::NET, "keeping outbound peer=%d chosen for eviction (connect time: %d, blocks_in_flight: %d)\n", pnode->GetId(), pnode->nTimeConnected, state.nBlocksInFlight);
- - return false;
- - }
- - });
- - if (disconnected) {
- - // If we disconnected an extra peer, that means we successfully
- - // connected to at least one peer after the last time we
- - // detected a stale tip. Don't try any more extra peers until
- - // we next detect a stale tip, to limit the load we put on the
- - // network from these extra connections.
- - connman->SetTryNewOutboundPeer(false);
- - }
- - }
- - }
- -}
- -
- -void PeerLogicValidation::CheckForStaleTipAndEvictPeers(const Consensus::Params &consensusParams)
- -{
- - if (connman == nullptr) return;
- -
- - int64_t time_in_seconds = GetTime();
- -
- - EvictExtraOutboundPeers(time_in_seconds);
- -
- - if (time_in_seconds > m_stale_tip_check_time) {
- - LOCK(cs_main);
- - // Check whether our tip is stale, and if so, allow using an extra
- - // outbound peer
- - if (TipMayBeStale(consensusParams)) {
- - LogPrintf("Potential stale tip detected, will try using extra outbound peer (last tip update: %d seconds ago)\n", time_in_seconds - g_last_tip_update);
- - connman->SetTryNewOutboundPeer(true);
- - } else if (connman->GetTryNewOutboundPeer()) {
- - connman->SetTryNewOutboundPeer(false);
- - }
- - m_stale_tip_check_time = time_in_seconds + STALE_CHECK_INTERVAL;
- - }
- -}
- -
- class CompareInvMempoolOrder
- {
- CTxMemPool *mp;
- @@ -3099,7 +2796,7 @@ public:
- }
- };
- -bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptMsgProc)
- +bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interruptMsgProc)
- {
- const Consensus::Params& consensusParams = Params().GetConsensus();
- {
- @@ -3131,11 +2828,11 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- pto->nPingUsecStart = GetTimeMicros();
- if (pto->nVersion > BIP0031_VERSION) {
- pto->nPingNonceSent = nonce;
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::PING, nonce));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::PING, nonce));
- } else {
- // Peer is too old to support ping command with nonce, pong will never arrive.
- pto->nPingNonceSent = 0;
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::PING));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::PING));
- }
- }
- @@ -3170,14 +2867,14 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- // receiver rejects addr messages larger than 1000
- if (vAddr.size() >= 1000)
- {
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::ADDR, vAddr));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::ADDR, vAddr));
- vAddr.clear();
- }
- }
- }
- pto->vAddrToSend.clear();
- if (!vAddr.empty())
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::ADDR, vAddr));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::ADDR, vAddr));
- // we only send the big addr message once
- if (pto->vAddrToSend.capacity() > 40)
- pto->vAddrToSend.shrink_to_fit();
- @@ -3204,7 +2901,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- if (pindexStart->pprev)
- pindexStart = pindexStart->pprev;
- LogPrint(BCLog::NET, "initial getheaders (%d) to peer=%d (startheight:%d)\n", pindexStart->nHeight, pto->GetId(), pto->nStartingHeight);
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexStart), uint256()));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::GETHEADERS, chainActive.GetLocator(pindexStart), uint256()));
- }
- }
- @@ -3213,7 +2910,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- // transactions become unconfirmed and spams other nodes.
- if (!fReindex && !fImporting && !IsInitialBlockDownload())
- {
- - GetMainSignals().Broadcast(nTimeBestReceived, connman);
- + GetMainSignals().Broadcast(nTimeBestReceived, &connman);
- }
- //
- @@ -3297,10 +2994,10 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- LOCK(cs_most_recent_block);
- if (most_recent_block_hash == pBestIndex->GetBlockHash()) {
- if (state.fWantsCmpctWitness || !fWitnessesPresentInMostRecentCompactBlock)
- - connman->PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *most_recent_compact_block));
- + connman.PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *most_recent_compact_block));
- else {
- CBlockHeaderAndShortTxIDs cmpctblock(*most_recent_block, state.fWantsCmpctWitness);
- - connman->PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
- + connman.PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
- }
- fGotBlockFromCache = true;
- }
- @@ -3310,7 +3007,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- bool ret = ReadBlockFromDisk(block, pBestIndex, consensusParams);
- assert(ret);
- CBlockHeaderAndShortTxIDs cmpctblock(block, state.fWantsCmpctWitness);
- - connman->PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
- + connman.PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
- }
- state.pindexBestHeaderSent = pBestIndex;
- } else if (state.fPreferHeaders) {
- @@ -3323,7 +3020,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- LogPrint(BCLog::NET, "%s: sending header %s to peer=%d\n", __func__,
- vHeaders.front().GetHash().ToString(), pto->GetId());
- }
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::HEADERS, vHeaders));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::HEADERS, vHeaders));
- state.pindexBestHeaderSent = pBestIndex;
- } else
- fRevertToInv = true;
- @@ -3369,7 +3066,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- for (const uint256& hash : pto->vInventoryBlockToSend) {
- vInv.push_back(CInv(MSG_BLOCK, hash));
- if (vInv.size() == MAX_INV_SZ) {
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- vInv.clear();
- }
- }
- @@ -3415,7 +3112,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- pto->filterInventoryKnown.insert(hash);
- vInv.push_back(inv);
- if (vInv.size() == MAX_INV_SZ) {
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- vInv.clear();
- }
- }
- @@ -3481,7 +3178,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- }
- }
- if (vInv.size() == MAX_INV_SZ) {
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- vInv.clear();
- }
- pto->filterInventoryKnown.insert(hash);
- @@ -3489,7 +3186,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- }
- }
- if (!vInv.empty())
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::INV, vInv));
- // Detect whether we're stalling
- nNow = GetTimeMicros();
- @@ -3548,9 +3245,6 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- }
- }
- - // Check that outbound peers have reasonable chains
- - // GetTime() is used by this anti-DoS logic so we can test this using mocktime
- - ConsiderEviction(pto, GetTime());
- //
- // Message: getdata (blocks)
- @@ -3587,7 +3281,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- vGetData.push_back(inv);
- if (vGetData.size() >= 1000)
- {
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::GETDATA, vGetData));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::GETDATA, vGetData));
- vGetData.clear();
- }
- } else {
- @@ -3597,7 +3291,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- pto->mapAskFor.erase(pto->mapAskFor.begin());
- }
- if (!vGetData.empty())
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::GETDATA, vGetData));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::GETDATA, vGetData));
- //
- // Message: feefilter
- @@ -3614,7 +3308,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
- // We always have a fee filter of at least minRelayTxFee
- filterToSend = std::max(filterToSend, ::minRelayTxFee.GetFeePerK());
- if (filterToSend != pto->lastSentFeeFilter) {
- - connman->PushMessage(pto, msgMaker.Make(NetMsgType::FEEFILTER, filterToSend));
- + connman.PushMessage(pto, msgMaker.Make(NetMsgType::FEEFILTER, filterToSend));
- pto->lastSentFeeFilter = filterToSend;
- }
- pto->nextSendTimeFeeFilter = PoissonNextSend(timeNow, AVG_FEEFILTER_BROADCAST_INTERVAL);
- diff --git a/src/net_processing.h b/src/net_processing.h
- index 7f1b509..db6d81e 100644
- --- a/src/net_processing.h
- +++ b/src/net_processing.h
- @@ -8,7 +8,6 @@
- #include "net.h"
- #include "validationinterface.h"
- -#include "consensus/params.h"
- /** Default for -maxorphantx, maximum number of orphan transactions kept in memory */
- static const unsigned int DEFAULT_MAX_ORPHAN_TRANSACTIONS = 100;
- @@ -22,51 +21,23 @@ static const unsigned int DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN = 100;
- * Timeout = base + per_header * (expected number of headers) */
- static constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_BASE = 15 * 60 * 1000000; // 15 minutes
- static constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1000; // 1ms/header
- -/** Protect at least this many outbound peers from disconnection due to slow/
- - * behind headers chain.
- - */
- -static constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4;
- -/** Timeout for (unprotected) outbound peers to sync to our chainwork, in seconds */
- -static constexpr int64_t CHAIN_SYNC_TIMEOUT = 20 * 60; // 20 minutes
- -/** How frequently to check for stale tips, in seconds */
- -static constexpr int64_t STALE_CHECK_INTERVAL = 2.5 * 60; // 2.5 minutes
- -/** How frequently to check for extra outbound peers and disconnect, in seconds */
- -static constexpr int64_t EXTRA_PEER_CHECK_INTERVAL = 45;
- -/** Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict, in seconds */
- -static constexpr int64_t MINIMUM_CONNECT_TIME = 30;
- -class PeerLogicValidation : public CValidationInterface, public NetEventsInterface {
- +/** Register with a network node to receive its signals */
- +void RegisterNodeSignals(CNodeSignals& nodeSignals);
- +/** Unregister a network node */
- +void UnregisterNodeSignals(CNodeSignals& nodeSignals);
- +
- +class PeerLogicValidation : public CValidationInterface {
- private:
- - CConnman* const connman;
- + CConnman* connman;
- public:
- - explicit PeerLogicValidation(CConnman* connman, CScheduler &scheduler);
- + PeerLogicValidation(CConnman* connmanIn);
- void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected, const std::vector<CTransactionRef>& vtxConflicted) override;
- void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override;
- void BlockChecked(const CBlock& block, const CValidationState& state) override;
- void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& pblock) override;
- -
- -
- - void InitializeNode(CNode* pnode) override;
- - void FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) override;
- - /** Process protocol messages received from a given node */
- - bool ProcessMessages(CNode* pfrom, std::atomic<bool>& interrupt) override;
- - /**
- - * Send queued protocol messages to be sent to a give node.
- - *
- - * @param[in] pto The node which we are sending messages to.
- - * @param[in] interrupt Interrupt condition for processing threads
- - * @return True if there is more work to be done
- - */
- - bool SendMessages(CNode* pto, std::atomic<bool>& interrupt) override;
- -
- - void ConsiderEviction(CNode *pto, int64_t time_in_seconds);
- - void CheckForStaleTipAndEvictPeers(const Consensus::Params &consensusParams);
- - void EvictExtraOutboundPeers(int64_t time_in_seconds);
- -
- -private:
- - int64_t m_stale_tip_check_time; //! Next time to check for stale tip
- };
- struct CNodeStateStats {
- @@ -81,4 +52,16 @@ bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats);
- /** Increase a node's misbehavior score. */
- void Misbehaving(NodeId nodeid, int howmuch);
- +/** Process protocol messages received from a given node */
- +bool ProcessMessages(CNode* pfrom, CConnman& connman, const std::atomic<bool>& interrupt);
- +/**
- + * Send queued protocol messages to be sent to a give node.
- + *
- + * @param[in] pto The node which we are sending messages to.
- + * @param[in] connman The connection manager for that node.
- + * @param[in] interrupt Interrupt condition for processing threads
- + * @return True if there is more work to be done
- + */
- +bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interrupt);
- +
- #endif // BITCOIN_NET_PROCESSING_H
- diff --git a/src/netbase.cpp b/src/netbase.cpp
- index 914124c..05f9f69 100644
- --- a/src/netbase.cpp
- +++ b/src/netbase.cpp
- @@ -184,48 +184,6 @@ struct timeval MillisToTimeval(int64_t nTimeout)
- return timeout;
- }
- -/** SOCKS version */
- -enum SOCKSVersion: uint8_t {
- - SOCKS4 = 0x04,
- - SOCKS5 = 0x05
- -};
- -
- -/** Values defined for METHOD in RFC1928 */
- -enum SOCKS5Method: uint8_t {
- - NOAUTH = 0x00, //! No authentication required
- - GSSAPI = 0x01, //! GSSAPI
- - USER_PASS = 0x02, //! Username/password
- - NO_ACCEPTABLE = 0xff, //! No acceptable methods
- -};
- -
- -/** Values defined for CMD in RFC1928 */
- -enum SOCKS5Command: uint8_t {
- - CONNECT = 0x01,
- - BIND = 0x02,
- - UDP_ASSOCIATE = 0x03
- -};
- -
- -/** Values defined for REP in RFC1928 */
- -enum SOCKS5Reply: uint8_t {
- - SUCCEEDED = 0x00, //! Succeeded
- - GENFAILURE = 0x01, //! General failure
- - NOTALLOWED = 0x02, //! Connection not allowed by ruleset
- - NETUNREACHABLE = 0x03, //! Network unreachable
- - HOSTUNREACHABLE = 0x04, //! Network unreachable
- - CONNREFUSED = 0x05, //! Connection refused
- - TTLEXPIRED = 0x06, //! TTL expired
- - CMDUNSUPPORTED = 0x07, //! Command not supported
- - ATYPEUNSUPPORTED = 0x08, //! Address type not supported
- -};
- -
- -/** Values defined for ATYPE in RFC1928 */
- -enum SOCKS5Atyp: uint8_t {
- - IPV4 = 0x01,
- - DOMAINNAME = 0x03,
- - IPV6 = 0x04,
- -};
- -
- -/** Status codes that can be returned by InterruptibleRecv */
- enum class IntrRecvError {
- OK,
- Timeout,
- @@ -245,7 +203,7 @@ enum class IntrRecvError {
- *
- * @note This function requires that hSocket is in non-blocking mode.
- */
- -static IntrRecvError InterruptibleRecv(uint8_t* data, size_t len, int timeout, const SOCKET& hSocket)
- +static IntrRecvError InterruptibleRecv(char* data, size_t len, int timeout, const SOCKET& hSocket)
- {
- int64_t curTime = GetTimeMillis();
- int64_t endTime = curTime + timeout;
- @@ -253,7 +211,7 @@ static IntrRecvError InterruptibleRecv(uint8_t* data, size_t len, int timeout, c
- // to break off in case of an interruption.
- const int64_t maxWait = 1000;
- while (len > 0 && curTime < endTime) {
- - ssize_t ret = recv(hSocket, (char*)data, len, 0); // Optimistically try the recv first
- + ssize_t ret = recv(hSocket, data, len, 0); // Optimistically try the recv first
- if (ret > 0) {
- len -= ret;
- data += ret;
- @@ -284,35 +242,24 @@ static IntrRecvError InterruptibleRecv(uint8_t* data, size_t len, int timeout, c
- return len == 0 ? IntrRecvError::OK : IntrRecvError::Timeout;
- }
- -/** Credentials for proxy authentication */
- struct ProxyCredentials
- {
- std::string username;
- std::string password;
- };
- -/** Convert SOCKS5 reply to a an error message */
- -std::string Socks5ErrorString(uint8_t err)
- +std::string Socks5ErrorString(int err)
- {
- switch(err) {
- - case SOCKS5Reply::GENFAILURE:
- - return "general failure";
- - case SOCKS5Reply::NOTALLOWED:
- - return "connection not allowed";
- - case SOCKS5Reply::NETUNREACHABLE:
- - return "network unreachable";
- - case SOCKS5Reply::HOSTUNREACHABLE:
- - return "host unreachable";
- - case SOCKS5Reply::CONNREFUSED:
- - return "connection refused";
- - case SOCKS5Reply::TTLEXPIRED:
- - return "TTL expired";
- - case SOCKS5Reply::CMDUNSUPPORTED:
- - return "protocol error";
- - case SOCKS5Reply::ATYPEUNSUPPORTED:
- - return "address type not supported";
- - default:
- - return "unknown";
- + case 0x01: return "general failure";
- + case 0x02: return "connection not allowed";
- + case 0x03: return "network unreachable";
- + case 0x04: return "host unreachable";
- + case 0x05: return "connection refused";
- + case 0x06: return "TTL expired";
- + case 0x07: return "protocol error";
- + case 0x08: return "address type not supported";
- + default: return "unknown";
- }
- }
- @@ -327,34 +274,34 @@ static bool Socks5(const std::string& strDest, int port, const ProxyCredentials
- }
- // Accepted authentication methods
- std::vector<uint8_t> vSocks5Init;
- - vSocks5Init.push_back(SOCKSVersion::SOCKS5);
- + vSocks5Init.push_back(0x05);
- if (auth) {
- - vSocks5Init.push_back(0x02); // Number of methods
- - vSocks5Init.push_back(SOCKS5Method::NOAUTH);
- - vSocks5Init.push_back(SOCKS5Method::USER_PASS);
- + vSocks5Init.push_back(0x02); // # METHODS
- + vSocks5Init.push_back(0x00); // X'00' NO AUTHENTICATION REQUIRED
- + vSocks5Init.push_back(0x02); // X'02' USERNAME/PASSWORD (RFC1929)
- } else {
- - vSocks5Init.push_back(0x01); // Number of methods
- - vSocks5Init.push_back(SOCKS5Method::NOAUTH);
- + vSocks5Init.push_back(0x01); // # METHODS
- + vSocks5Init.push_back(0x00); // X'00' NO AUTHENTICATION REQUIRED
- }
- ssize_t ret = send(hSocket, (const char*)vSocks5Init.data(), vSocks5Init.size(), MSG_NOSIGNAL);
- if (ret != (ssize_t)vSocks5Init.size()) {
- CloseSocket(hSocket);
- return error("Error sending to proxy");
- }
- - uint8_t pchRet1[2];
- + char pchRet1[2];
- if ((recvr = InterruptibleRecv(pchRet1, 2, SOCKS5_RECV_TIMEOUT, hSocket)) != IntrRecvError::OK) {
- CloseSocket(hSocket);
- LogPrintf("Socks5() connect to %s:%d failed: InterruptibleRecv() timeout or other failure\n", strDest, port);
- return false;
- }
- - if (pchRet1[0] != SOCKSVersion::SOCKS5) {
- + if (pchRet1[0] != 0x05) {
- CloseSocket(hSocket);
- return error("Proxy failed to initialize");
- }
- - if (pchRet1[1] == SOCKS5Method::USER_PASS && auth) {
- + if (pchRet1[1] == 0x02 && auth) {
- // Perform username/password authentication (as described in RFC1929)
- std::vector<uint8_t> vAuth;
- - vAuth.push_back(0x01); // Current (and only) version of user/pass subnegotiation
- + vAuth.push_back(0x01);
- if (auth->username.size() > 255 || auth->password.size() > 255)
- return error("Proxy username or password too long");
- vAuth.push_back(auth->username.size());
- @@ -367,7 +314,7 @@ static bool Socks5(const std::string& strDest, int port, const ProxyCredentials
- return error("Error sending authentication to proxy");
- }
- LogPrint(BCLog::PROXY, "SOCKS5 sending proxy authentication %s:%s\n", auth->username, auth->password);
- - uint8_t pchRetA[2];
- + char pchRetA[2];
- if ((recvr = InterruptibleRecv(pchRetA, 2, SOCKS5_RECV_TIMEOUT, hSocket)) != IntrRecvError::OK) {
- CloseSocket(hSocket);
- return error("Error reading proxy authentication response");
- @@ -376,17 +323,17 @@ static bool Socks5(const std::string& strDest, int port, const ProxyCredentials
- CloseSocket(hSocket);
- return error("Proxy authentication unsuccessful");
- }
- - } else if (pchRet1[1] == SOCKS5Method::NOAUTH) {
- + } else if (pchRet1[1] == 0x00) {
- // Perform no authentication
- } else {
- CloseSocket(hSocket);
- return error("Proxy requested wrong authentication method %02x", pchRet1[1]);
- }
- std::vector<uint8_t> vSocks5;
- - vSocks5.push_back(SOCKSVersion::SOCKS5); // VER protocol version
- - vSocks5.push_back(SOCKS5Command::CONNECT); // CMD CONNECT
- - vSocks5.push_back(0x00); // RSV Reserved must be 0
- - vSocks5.push_back(SOCKS5Atyp::DOMAINNAME); // ATYP DOMAINNAME
- + vSocks5.push_back(0x05); // VER protocol version
- + vSocks5.push_back(0x01); // CMD CONNECT
- + vSocks5.push_back(0x00); // RSV Reserved
- + vSocks5.push_back(0x03); // ATYP DOMAINNAME
- vSocks5.push_back(strDest.size()); // Length<=255 is checked at beginning of function
- vSocks5.insert(vSocks5.end(), strDest.begin(), strDest.end());
- vSocks5.push_back((port >> 8) & 0xFF);
- @@ -396,7 +343,7 @@ static bool Socks5(const std::string& strDest, int port, const ProxyCredentials
- CloseSocket(hSocket);
- return error("Error sending to proxy");
- }
- - uint8_t pchRet2[4];
- + char pchRet2[4];
- if ((recvr = InterruptibleRecv(pchRet2, 4, SOCKS5_RECV_TIMEOUT, hSocket)) != IntrRecvError::OK) {
- CloseSocket(hSocket);
- if (recvr == IntrRecvError::Timeout) {
- @@ -408,26 +355,26 @@ static bool Socks5(const std::string& strDest, int port, const ProxyCredentials
- return error("Error while reading proxy response");
- }
- }
- - if (pchRet2[0] != SOCKSVersion::SOCKS5) {
- + if (pchRet2[0] != 0x05) {
- CloseSocket(hSocket);
- return error("Proxy failed to accept request");
- }
- - if (pchRet2[1] != SOCKS5Reply::SUCCEEDED) {
- + if (pchRet2[1] != 0x00) {
- // Failures to connect to a peer that are not proxy errors
- CloseSocket(hSocket);
- LogPrintf("Socks5() connect to %s:%d failed: %s\n", strDest, port, Socks5ErrorString(pchRet2[1]));
- return false;
- }
- - if (pchRet2[2] != 0x00) { // Reserved field must be 0
- + if (pchRet2[2] != 0x00) {
- CloseSocket(hSocket);
- return error("Error: malformed proxy response");
- }
- - uint8_t pchRet3[256];
- + char pchRet3[256];
- switch (pchRet2[3])
- {
- - case SOCKS5Atyp::IPV4: recvr = InterruptibleRecv(pchRet3, 4, SOCKS5_RECV_TIMEOUT, hSocket); break;
- - case SOCKS5Atyp::IPV6: recvr = InterruptibleRecv(pchRet3, 16, SOCKS5_RECV_TIMEOUT, hSocket); break;
- - case SOCKS5Atyp::DOMAINNAME:
- + case 0x01: recvr = InterruptibleRecv(pchRet3, 4, SOCKS5_RECV_TIMEOUT, hSocket); break;
- + case 0x04: recvr = InterruptibleRecv(pchRet3, 16, SOCKS5_RECV_TIMEOUT, hSocket); break;
- + case 0x03:
- {
- recvr = InterruptibleRecv(pchRet3, 1, SOCKS5_RECV_TIMEOUT, hSocket);
- if (recvr != IntrRecvError::OK) {
- diff --git a/src/policy/feerate.cpp b/src/policy/feerate.cpp
- index 64229ed..2b97fba 100644
- --- a/src/policy/feerate.cpp
- +++ b/src/policy/feerate.cpp
- @@ -7,7 +7,7 @@
- #include "tinyformat.h"
- -const std::string CURRENCY_UNIT = "LTC";
- +const std::string CURRENCY_UNIT = "LCC";
- CFeeRate::CFeeRate(const CAmount& nFeePaid, size_t nBytes_)
- {
- @@ -39,5 +39,5 @@ CAmount CFeeRate::GetFee(size_t nBytes_) const
- std::string CFeeRate::ToString() const
- {
- - return strprintf("%d.%08d %s/kB", nSatoshisPerK / COIN, nSatoshisPerK % COIN, CURRENCY_UNIT);
- + return strprintf("%d.%07d %s/kB", nSatoshisPerK / COIN, nSatoshisPerK % COIN, CURRENCY_UNIT); // LitecoinCash: Updated num decimals
- }
- diff --git a/src/policy/policy.h b/src/policy/policy.h
- index 6d0e08c..061c8ef 100644
- --- a/src/policy/policy.h
- +++ b/src/policy/policy.h
- @@ -16,8 +16,10 @@
- class CCoinsViewCache;
- class CTxOut;
- +/** Default for -blockmaxsize, which controls the maximum size of block the mining code will create **/
- +static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000;
- /** Default for -blockmaxweight, which controls the range of block weights the mining code will create **/
- -static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = MAX_BLOCK_WEIGHT - 4000;
- +static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = 3000000;
- /** Default for -blockmintxfee, which sets the minimum feerate for a transaction in blocks created by mining code **/
- static const unsigned int DEFAULT_BLOCK_MIN_TX_FEE = 1000;
- /** The maximum weight for transactions we're willing to relay/mine */
- @@ -63,7 +65,8 @@ static const unsigned int STANDARD_SCRIPT_VERIFY_FLAGS = MANDATORY_SCRIPT_VERIFY
- SCRIPT_VERIFY_LOW_S |
- SCRIPT_VERIFY_WITNESS |
- SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM |
- - SCRIPT_VERIFY_WITNESS_PUBKEYTYPE;
- + SCRIPT_VERIFY_WITNESS_PUBKEYTYPE |
- + SCRIPT_ENABLE_SIGHASH_FORKID; // LitecoinCash: Use SCRIPT_ENABLE_SIGHASH_FORKID
- /** For convenience, standard but not mandatory verify flags. */
- static const unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS = STANDARD_SCRIPT_VERIFY_FLAGS & ~MANDATORY_SCRIPT_VERIFY_FLAGS;
- diff --git a/src/pow.cpp b/src/pow.cpp
- index a7e5a0d..f487405 100644
- --- a/src/pow.cpp
- +++ b/src/pow.cpp
- @@ -11,11 +11,73 @@
- #include "uint256.h"
- #include "util.h"
- -unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params)
- +// LitecoinCash: DarkGravity V3 (https://github.com/dashpay/dash/blob/master/src/pow.cpp#L82)
- +// By Evan Duffield <evan@dash.org>
- +unsigned int DarkGravityWave(const CBlockIndex* pindexLast, const Consensus::Params& params)
- {
- + const arith_uint256 bnPowLimit = UintToArith256(params.powLimitSHA);
- + int64_t nPastBlocks = 24;
- +
- + // LitecoinCash: Make sure we have at least (nPastBlocks + 1) blocks since the fork, otherwise just return powLimitSHA
- + if (!pindexLast || pindexLast->nHeight - params.lastScryptBlock < nPastBlocks) {
- + return bnPowLimit.GetCompact();
- + }
- +
- + const CBlockIndex *pindex = pindexLast;
- + arith_uint256 bnPastTargetAvg;
- +
- + for (unsigned int nCountBlocks = 1; nCountBlocks <= nPastBlocks; nCountBlocks++) {
- + arith_uint256 bnTarget = arith_uint256().SetCompact(pindex->nBits);
- + if (nCountBlocks == 1) {
- + bnPastTargetAvg = bnTarget;
- + } else {
- + // NOTE: that's not an average really...
- + bnPastTargetAvg = (bnPastTargetAvg * nCountBlocks + bnTarget) / (nCountBlocks + 1);
- + }
- +
- + if(nCountBlocks != nPastBlocks) {
- + assert(pindex->pprev); // should never fail
- + pindex = pindex->pprev;
- + }
- + }
- +
- + arith_uint256 bnNew(bnPastTargetAvg);
- +
- + int64_t nActualTimespan = pindexLast->GetBlockTime() - pindex->GetBlockTime();
- + // NOTE: is this accurate? nActualTimespan counts it for (nPastBlocks - 1) blocks only...
- + int64_t nTargetTimespan = nPastBlocks * params.nPowTargetSpacing;
- +
- + if (nActualTimespan < nTargetTimespan/3)
- + nActualTimespan = nTargetTimespan/3;
- + if (nActualTimespan > nTargetTimespan*3)
- + nActualTimespan = nTargetTimespan*3;
- +
- + // Retarget
- + bnNew *= nActualTimespan;
- + bnNew /= nTargetTimespan;
- +
- + if (bnNew > bnPowLimit) {
- + bnNew = bnPowLimit;
- + }
- +
- + return bnNew.GetCompact();
- +}
- +
- +unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params)
- +{
- assert(pindexLast != nullptr);
- +
- + // LitecoinCash: If past fork time, use Dark Gravity Wave
- + if (pindexLast->nHeight >= params.lastScryptBlock)
- + return DarkGravityWave(pindexLast, params);
- + else
- + return GetNextWorkRequiredLTC(pindexLast, pblock, params);
- +}
- +
- +unsigned int GetNextWorkRequiredLTC(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params)
- +{
- unsigned int nProofOfWorkLimit = UintToArith256(params.powLimit).GetCompact();
- -
- +
- // Only change once per difficulty adjustment interval
- if ((pindexLast->nHeight+1) % params.DifficultyAdjustmentInterval() != 0)
- {
- diff --git a/src/pow.h b/src/pow.h
- index e203f49..60fa644 100644
- --- a/src/pow.h
- +++ b/src/pow.h
- @@ -15,6 +15,8 @@ class CBlockIndex;
- class uint256;
- unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params&);
- +unsigned int DarkGravityWave(const CBlockIndex* pindexLast, const Consensus::Params& params);
- +unsigned int GetNextWorkRequiredLTC(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params&);
- unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nFirstBlockTime, const Consensus::Params&);
- /** Check whether a block hash satisfies the proof-of-work requirement specified by nBits */
- diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp
- index 454f10e..7617232 100644
- --- a/src/primitives/block.cpp
- +++ b/src/primitives/block.cpp
- @@ -10,6 +10,7 @@
- #include "utilstrencodings.h"
- #include "crypto/common.h"
- #include "crypto/scrypt.h"
- +#include "chainparams.h"
- uint256 CBlockHeader::GetHash() const
- {
- @@ -18,6 +19,10 @@ uint256 CBlockHeader::GetHash() const
- uint256 CBlockHeader::GetPoWHash() const
- {
- + // LitecoinCash: After powForkTime, the pow hash is sha256
- + if (nTime > Params().GetConsensus().powForkTime)
- + return GetHash();
- +
- uint256 thash;
- scrypt_1024_1_1_256(BEGIN(nVersion), BEGIN(thash));
- return thash;
- @@ -26,8 +31,9 @@ uint256 CBlockHeader::GetPoWHash() const
- std::string CBlock::ToString() const
- {
- std::stringstream s;
- - s << strprintf("CBlock(hash=%s, ver=0x%08x, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%u)\n",
- + s << strprintf("CBlock(hash=%s, powHash=%s, ver=0x%08x, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%u)\n",
- GetHash().ToString(),
- + GetPoWHash().ToString(),
- nVersion,
- hashPrevBlock.ToString(),
- hashMerkleRoot.ToString(),
- diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp
- index 9b6a814..c2638f7 100644
- --- a/src/primitives/transaction.cpp
- +++ b/src/primitives/transaction.cpp
- @@ -51,7 +51,7 @@ CTxOut::CTxOut(const CAmount& nValueIn, CScript scriptPubKeyIn)
- std::string CTxOut::ToString() const
- {
- - return strprintf("CTxOut(nValue=%d.%08d, scriptPubKey=%s)", nValue / COIN, nValue % COIN, HexStr(scriptPubKey).substr(0, 30));
- + return strprintf("CTxOut(nValue=%d.%07d, scriptPubKey=%s)", nValue / COIN, nValue % COIN, HexStr(scriptPubKey).substr(0, 30)); // LitecoinCash: Updated num decimals
- }
- CMutableTransaction::CMutableTransaction() : nVersion(CTransaction::CURRENT_VERSION), nLockTime(0) {}
- diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp
- index 7e10c0a..862e7a1 100644
- --- a/src/qt/addressbookpage.cpp
- +++ b/src/qt/addressbookpage.cpp
- @@ -67,11 +67,11 @@ AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode,
- switch(tab)
- {
- case SendingTab:
- - ui->labelExplanation->setText(tr("These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins."));
- + ui->labelExplanation->setText(tr("These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins."));
- ui->deleteAddress->setVisible(true);
- break;
- case ReceivingTab:
- - ui->labelExplanation->setText(tr("These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction."));
- + ui->labelExplanation->setText(tr("These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction."));
- ui->deleteAddress->setVisible(false);
- break;
- }
- diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp
- index ed0e410..c65cc0c 100644
- --- a/src/qt/askpassphrasedialog.cpp
- +++ b/src/qt/askpassphrasedialog.cpp
- @@ -111,7 +111,7 @@ void AskPassphraseDialog::accept()
- break;
- }
- QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm wallet encryption"),
- - tr("Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!") + "<br><br>" + tr("Are you sure you wish to encrypt your wallet?"),
- + tr("Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!") + "<br><br>" + tr("Are you sure you wish to encrypt your wallet?"),
- QMessageBox::Yes|QMessageBox::Cancel,
- QMessageBox::Cancel);
- if(retval == QMessageBox::Yes)
- @@ -124,7 +124,7 @@ void AskPassphraseDialog::accept()
- "<qt>" +
- tr("%1 will close now to finish the encryption process. "
- "Remember that encrypting your wallet cannot fully protect "
- - "your litecoins from being stolen by malware infecting your computer.").arg(tr(PACKAGE_NAME)) +
- + "your coins from being stolen by malware infecting your computer.").arg(tr(PACKAGE_NAME)) +
- "<br><br><b>" +
- tr("IMPORTANT: Any previous backups you have made of your wallet file "
- "should be replaced with the newly generated, encrypted wallet file. "
- diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
- index a26417e..59414a5 100644
- --- a/src/qt/bitcoin.cpp
- +++ b/src/qt/bitcoin.cpp
- @@ -531,7 +531,7 @@ void BitcoinApplication::shutdownResult()
- void BitcoinApplication::handleRunawayException(const QString &message)
- {
- - QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. Litecoin can no longer continue safely and will quit.") + QString("\n\n") + message);
- + QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. LitecoinCash can no longer continue safely and will quit.") + QString("\n\n") + message);
- ::exit(EXIT_FAILURE);
- }
- diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc
- index 5d4cee0..300f93e 100644
- --- a/src/qt/bitcoin.qrc
- +++ b/src/qt/bitcoin.qrc
- @@ -1,7 +1,7 @@
- <!DOCTYPE RCC><RCC version="1.0">
- <qresource prefix="/icons">
- <file alias="bitcoin">res/icons/bitcoin.png</file>
- - <file alias="litecoin_splash">res/icons/litecoin_splash.png</file>
- + <file alias="litecoincash_splash">res/icons/litecoincash_splash.png</file>
- <file alias="address-book">res/icons/address-book.png</file>
- <file alias="quit">res/icons/quit.png</file>
- <file alias="send">res/icons/send.png</file>
- diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
- index 36d3dce..1ad2a79 100644
- --- a/src/qt/bitcoingui.cpp
- +++ b/src/qt/bitcoingui.cpp
- @@ -113,6 +113,7 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *
- openRPCConsoleAction(0),
- openAction(0),
- showHelpMessageAction(0),
- + importPrivateKeyAction(0),
- trayIcon(0),
- trayIconMenu(0),
- notificator(0),
- @@ -123,11 +124,7 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *
- spinnerFrame(0),
- platformStyle(_platformStyle)
- {
- - QSettings settings;
- - if (!restoreGeometry(settings.value("MainWindowGeometry").toByteArray())) {
- - // Restore failed (perhaps missing setting), center the window
- - move(QApplication::desktop()->availableGeometry().center() - frameGeometry().center());
- - }
- + GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this);
- QString windowTitle = tr(PACKAGE_NAME) + " - ";
- #ifdef ENABLE_WALLET
- @@ -265,8 +262,7 @@ BitcoinGUI::~BitcoinGUI()
- // Unsubscribe from notifications from core
- unsubscribeFromCoreSignals();
- - QSettings settings;
- - settings.setValue("MainWindowGeometry", saveGeometry());
- + GUIUtil::saveWindowGeometry("nWindow", this);
- if(trayIcon) // Hide tray icon, as deleting will let it linger until quit (on Ubuntu)
- trayIcon->hide();
- #ifdef Q_OS_MAC
- @@ -289,7 +285,7 @@ void BitcoinGUI::createActions()
- tabGroup->addAction(overviewAction);
- sendCoinsAction = new QAction(platformStyle->SingleColorIcon(":/icons/send"), tr("&Send"), this);
- - sendCoinsAction->setStatusTip(tr("Send coins to a Litecoin address"));
- + sendCoinsAction->setStatusTip(tr("Send coins to a LitecoinCash address"));
- sendCoinsAction->setToolTip(sendCoinsAction->statusTip());
- sendCoinsAction->setCheckable(true);
- sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2));
- @@ -300,7 +296,7 @@ void BitcoinGUI::createActions()
- sendCoinsMenuAction->setToolTip(sendCoinsMenuAction->statusTip());
- receiveCoinsAction = new QAction(platformStyle->SingleColorIcon(":/icons/receiving_addresses"), tr("&Receive"), this);
- - receiveCoinsAction->setStatusTip(tr("Request payments (generates QR codes and litecoin: URIs)"));
- + receiveCoinsAction->setStatusTip(tr("Request payments (generates QR codes and litecoincash: URIs)"));
- receiveCoinsAction->setToolTip(receiveCoinsAction->statusTip());
- receiveCoinsAction->setCheckable(true);
- receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3));
- @@ -360,9 +356,9 @@ void BitcoinGUI::createActions()
- changePassphraseAction = new QAction(platformStyle->TextColorIcon(":/icons/key"), tr("&Change Passphrase..."), this);
- changePassphraseAction->setStatusTip(tr("Change the passphrase used for wallet encryption"));
- signMessageAction = new QAction(platformStyle->TextColorIcon(":/icons/edit"), tr("Sign &message..."), this);
- - signMessageAction->setStatusTip(tr("Sign messages with your Litecoin addresses to prove you own them"));
- + signMessageAction->setStatusTip(tr("Sign messages with your LitecoinCash addresses to prove you own them"));
- verifyMessageAction = new QAction(platformStyle->TextColorIcon(":/icons/verify"), tr("&Verify message..."), this);
- - verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified Litecoin addresses"));
- + verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified LitecoinCash addresses"));
- openRPCConsoleAction = new QAction(platformStyle->TextColorIcon(":/icons/debugwindow"), tr("&Debug window"), this);
- openRPCConsoleAction->setStatusTip(tr("Open debugging and diagnostic console"));
- @@ -375,11 +371,14 @@ void BitcoinGUI::createActions()
- usedReceivingAddressesAction->setStatusTip(tr("Show the list of used receiving addresses and labels"));
- openAction = new QAction(platformStyle->TextColorIcon(":/icons/open"), tr("Open &URI..."), this);
- - openAction->setStatusTip(tr("Open a litecoin: URI or payment request"));
- + openAction->setStatusTip(tr("Open a litecoincash: URI or payment request"));
- showHelpMessageAction = new QAction(platformStyle->TextColorIcon(":/icons/info"), tr("&Command-line options"), this);
- showHelpMessageAction->setMenuRole(QAction::NoRole);
- - showHelpMessageAction->setStatusTip(tr("Show the %1 help message to get a list with possible Litecoin command-line options").arg(tr(PACKAGE_NAME)));
- + showHelpMessageAction->setStatusTip(tr("Show the %1 help message to get a list with possible LitecoinCash command-line options").arg(tr(PACKAGE_NAME)));
- +
- + importPrivateKeyAction = new QAction(platformStyle->TextColorIcon(":/icons/key"), tr("&Import private key..."), this);
- + importPrivateKeyAction->setToolTip(tr("Import a Litecoin or LitecoinCash private key"));
- connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
- connect(aboutAction, SIGNAL(triggered()), this, SLOT(aboutClicked()));
- @@ -402,6 +401,7 @@ void BitcoinGUI::createActions()
- connect(usedSendingAddressesAction, SIGNAL(triggered()), walletFrame, SLOT(usedSendingAddresses()));
- connect(usedReceivingAddressesAction, SIGNAL(triggered()), walletFrame, SLOT(usedReceivingAddresses()));
- connect(openAction, SIGNAL(triggered()), this, SLOT(openClicked()));
- + connect(importPrivateKeyAction, SIGNAL(triggered()), walletFrame, SLOT(importPrivateKey()));
- }
- #endif // ENABLE_WALLET
- @@ -431,6 +431,8 @@ void BitcoinGUI::createMenuBar()
- file->addAction(usedSendingAddressesAction);
- file->addAction(usedReceivingAddressesAction);
- file->addSeparator();
- + file->addAction(importPrivateKeyAction);
- + file->addSeparator();
- }
- file->addAction(quitAction);
- @@ -572,6 +574,7 @@ void BitcoinGUI::setWalletActionsEnabled(bool enabled)
- usedSendingAddressesAction->setEnabled(enabled);
- usedReceivingAddressesAction->setEnabled(enabled);
- openAction->setEnabled(enabled);
- + importPrivateKeyAction->setEnabled(enabled);
- }
- void BitcoinGUI::createTrayIcon(const NetworkStyle *networkStyle)
- @@ -733,7 +736,7 @@ void BitcoinGUI::updateNetworkState()
- QString tooltip;
- if (clientModel->getNetworkActive()) {
- - tooltip = tr("%n active connection(s) to Litecoin network", "", count) + QString(".<br>") + tr("Click to disable network activity.");
- + tooltip = tr("%n active connection(s) to LitecoinCash network", "", count) + QString(".<br>") + tr("Click to disable network activity.");
- } else {
- tooltip = tr("Network activity disabled.") + QString("<br>") + tr("Click to enable network activity again.");
- icon = ":/icons/network_disabled";
- @@ -877,7 +880,7 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
- void BitcoinGUI::message(const QString &title, const QString &message, unsigned int style, bool *ret)
- {
- - QString strTitle = tr("Litecoin"); // default title
- + QString strTitle = tr("LitecoinCash"); // default title
- // Default to information icon
- int nMBoxIcon = QMessageBox::Information;
- int nNotifyIcon = Notificator::Information;
- diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h
- index aa45ea1..7291a3c 100644
- --- a/src/qt/bitcoingui.h
- +++ b/src/qt/bitcoingui.h
- @@ -111,7 +111,8 @@ private:
- QAction *openRPCConsoleAction;
- QAction *openAction;
- QAction *showHelpMessageAction;
- -
- + QAction *importPrivateKeyAction;
- +
- QSystemTrayIcon *trayIcon;
- QMenu *trayIconMenu;
- Notificator *notificator;
- diff --git a/src/qt/bitcoinunits.cpp b/src/qt/bitcoinunits.cpp
- index 70b252b..da4c55b 100644
- --- a/src/qt/bitcoinunits.cpp
- +++ b/src/qt/bitcoinunits.cpp
- @@ -40,9 +40,9 @@ QString BitcoinUnits::name(int unit)
- {
- switch(unit)
- {
- - case BTC: return QString("LTC");
- - case mBTC: return QString("lites");
- - case uBTC: return QString("photons");
- + case BTC: return QString("LCC");
- + case mBTC: return QString("mLCC");
- + case uBTC: return QString::fromUtf8("?LCC");
- default: return QString("???");
- }
- }
- @@ -51,9 +51,9 @@ QString BitcoinUnits::description(int unit)
- {
- switch(unit)
- {
- - case BTC: return QString("Litecoins");
- - case mBTC: return QString("Lites (1 / 1" THIN_SP_UTF8 "000)");
- - case uBTC: return QString("Photons (1 / 1" THIN_SP_UTF8 "000" THIN_SP_UTF8 "000)");
- + case BTC: return QString("LCC");
- + case mBTC: return QString("Milli-LCC (1 / 1" THIN_SP_UTF8 "000)");
- + case uBTC: return QString("Micro-LCC (1 / 1" THIN_SP_UTF8 "000" THIN_SP_UTF8 "000)");
- default: return QString("???");
- }
- }
- @@ -62,10 +62,10 @@ qint64 BitcoinUnits::factor(int unit)
- {
- switch(unit)
- {
- - case BTC: return 100000000;
- - case mBTC: return 100000;
- - case uBTC: return 100;
- - default: return 100000000;
- + case BTC: return 100000000 / COIN_SCALE; // LitecoinCash: Updated factors
- + case mBTC: return 100000 / COIN_SCALE;
- + case uBTC: return 100 / COIN_SCALE;
- + default: return 100000000 / COIN_SCALE;
- }
- }
- @@ -73,15 +73,16 @@ int BitcoinUnits::decimals(int unit)
- {
- switch(unit)
- {
- - case BTC: return 8;
- - case mBTC: return 5;
- - case uBTC: return 2;
- + case BTC: return 7; // LitecoinCash: Updated decimals
- + case mBTC: return 4;
- + case uBTC: return 1;
- default: return 0;
- }
- }
- QString BitcoinUnits::format(int unit, const CAmount& nIn, bool fPlus, SeparatorStyle separators)
- {
- +
- // Note: not using straight sprintf here because we do NOT want
- // localized number formatting.
- if(!valid(unit))
- diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp
- index 047ebd3..ae492ca 100644
- --- a/src/qt/editaddressdialog.cpp
- +++ b/src/qt/editaddressdialog.cpp
- @@ -107,7 +107,7 @@ void EditAddressDialog::accept()
- break;
- case AddressTableModel::INVALID_ADDRESS:
- QMessageBox::warning(this, windowTitle(),
- - tr("The entered address \"%1\" is not a valid Litecoin address.").arg(ui->addressEdit->text()),
- + tr("The entered address \"%1\" is not a valid LitecoinCash address.").arg(ui->addressEdit->text()),
- QMessageBox::Ok, QMessageBox::Ok);
- break;
- case AddressTableModel::DUPLICATE_ADDRESS:
- diff --git a/src/qt/forms/coincontroldialog.ui b/src/qt/forms/coincontroldialog.ui
- index 0122c27..53874c3 100644
- --- a/src/qt/forms/coincontroldialog.ui
- +++ b/src/qt/forms/coincontroldialog.ui
- @@ -132,7 +132,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -212,7 +212,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -257,7 +257,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -292,7 +292,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- diff --git a/src/qt/forms/modaloverlay.ui b/src/qt/forms/modaloverlay.ui
- index cda0106..cd2ce8f 100644
- --- a/src/qt/forms/modaloverlay.ui
- +++ b/src/qt/forms/modaloverlay.ui
- @@ -130,7 +130,7 @@ QLabel { color: rgb(40,40,40); }</string>
- <item>
- <widget class="QLabel" name="infoText">
- <property name="text">
- - <string>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</string>
- + <string>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</string>
- </property>
- <property name="textFormat">
- <enum>Qt::RichText</enum>
- @@ -149,7 +149,7 @@ QLabel { color: rgb(40,40,40); }</string>
- </font>
- </property>
- <property name="text">
- - <string>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</string>
- + <string>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</string>
- </property>
- <property name="textFormat">
- <enum>Qt::RichText</enum>
- diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui
- index e1c5593..1e08a71 100644
- --- a/src/qt/forms/optionsdialog.ui
- +++ b/src/qt/forms/optionsdialog.ui
- @@ -189,7 +189,7 @@
- <item>
- <widget class="QCheckBox" name="mapPortUpnp">
- <property name="toolTip">
- - <string>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</string>
- + <string>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</string>
- </property>
- <property name="text">
- <string>Map port using &UPnP</string>
- @@ -209,7 +209,7 @@
- <item>
- <widget class="QCheckBox" name="connectSocks">
- <property name="toolTip">
- - <string>Connect to the Litecoin network through a SOCKS5 proxy.</string>
- + <string>Connect to the LitecoinCash network through a SOCKS5 proxy.</string>
- </property>
- <property name="text">
- <string>&Connect through SOCKS5 proxy (default proxy):</string>
- @@ -396,7 +396,7 @@
- <item>
- <widget class="QCheckBox" name="connectSocksTor">
- <property name="toolTip">
- - <string>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</string>
- + <string>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</string>
- </property>
- <property name="text">
- <string>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</string>
- diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui
- index fae6dec..78abd86 100644
- --- a/src/qt/forms/overviewpage.ui
- +++ b/src/qt/forms/overviewpage.ui
- @@ -73,7 +73,7 @@
- </size>
- </property>
- <property name="toolTip">
- - <string>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</string>
- + <string>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</string>
- </property>
- <property name="text">
- <string/>
- @@ -129,7 +129,7 @@
- <string>Unconfirmed transactions to watch-only addresses</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -154,7 +154,7 @@
- <string>Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -179,7 +179,7 @@
- <string>Mined balance in watch-only addresses that has not yet matured</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -237,7 +237,7 @@
- <string>Mined balance that has not yet matured</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -282,7 +282,7 @@
- <string>Your current total balance</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -307,7 +307,7 @@
- <string>Current total balance in watch-only addresses</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -349,7 +349,7 @@
- <string>Your current spendable balance</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -374,7 +374,7 @@
- <string>Your current balance in watch-only addresses</string>
- </property>
- <property name="text">
- - <string notr="true">0.000?000?00 LTC</string>
- + <string notr="true">0.000?000?00 LCC</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- @@ -459,7 +459,7 @@
- </size>
- </property>
- <property name="toolTip">
- - <string>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</string>
- + <string>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</string>
- </property>
- <property name="text">
- <string/>
- diff --git a/src/qt/forms/receivecoinsdialog.ui b/src/qt/forms/receivecoinsdialog.ui
- index 4a1d712..2983a7e 100644
- --- a/src/qt/forms/receivecoinsdialog.ui
- +++ b/src/qt/forms/receivecoinsdialog.ui
- @@ -48,7 +48,7 @@
- <item row="6" column="0">
- <widget class="QLabel" name="label_3">
- <property name="toolTip">
- - <string>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</string>
- + <string>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</string>
- </property>
- <property name="text">
- <string>&Message:</string>
- @@ -71,7 +71,7 @@
- <item row="6" column="2">
- <widget class="QLineEdit" name="reqMessage">
- <property name="toolTip">
- - <string>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</string>
- + <string>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</string>
- </property>
- </widget>
- </item>
- diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui
- index ddbec16..4c28b9b 100644
- --- a/src/qt/forms/sendcoinsdialog.ui
- +++ b/src/qt/forms/sendcoinsdialog.ui
- @@ -324,7 +324,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -404,7 +404,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -455,7 +455,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -484,7 +484,7 @@
- <enum>Qt::ActionsContextMenu</enum>
- </property>
- <property name="text">
- - <string notr="true">0.00 LTC</string>
- + <string notr="true">0.00 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -846,13 +846,19 @@
- <item>
- <layout class="QHBoxLayout" name="horizontalLayoutFee13">
- <item>
- - <widget class="QLabel" name="labelCustomPerKilobyte">
- + <widget class="QRadioButton" name="radioCustomPerKilobyte">
- <property name="toolTip">
- <string>If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte.</string>
- </property>
- <property name="text">
- <string>per kilobyte</string>
- </property>
- + <property name="checked">
- + <bool>true</bool>
- + </property>
- + <attribute name="buttonGroup">
- + <string notr="true">groupCustomFee</string>
- + </attribute>
- </widget>
- </item>
- <item>
- @@ -878,7 +884,7 @@
- <item>
- <widget class="QCheckBox" name="checkBoxMinimumFee">
- <property name="toolTip">
- - <string>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</string>
- + <string>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</string>
- </property>
- <property name="text">
- <string/>
- @@ -891,7 +897,7 @@
- <bool>true</bool>
- </property>
- <property name="toolTip">
- - <string>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</string>
- + <string>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</string>
- </property>
- <property name="text">
- <string>(read the tooltip)</string>
- @@ -1105,6 +1111,16 @@
- </item>
- </layout>
- </item>
- + <item>
- + <widget class="QCheckBox" name="optInRBF">
- + <property name="text">
- + <string>Request Replace-By-Fee</string>
- + </property>
- + <property name="toolTip">
- + <string>Indicates that the sender may wish to replace this transaction with a new one paying higher fees (prior to being confirmed).</string>
- + </property>
- + </widget>
- + </item>
- </layout>
- </widget>
- </item>
- @@ -1237,7 +1253,7 @@
- <cursorShape>IBeamCursor</cursorShape>
- </property>
- <property name="text">
- - <string notr="true">123.456 LTC</string>
- + <string notr="true">123.456 LCC</string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- @@ -1269,5 +1285,6 @@
- <connections/>
- <buttongroups>
- <buttongroup name="groupFee"/>
- + <buttongroup name="groupCustomFee"/>
- </buttongroups>
- </ui>
- diff --git a/src/qt/forms/sendcoinsentry.ui b/src/qt/forms/sendcoinsentry.ui
- index 7b2c471..818122c 100644
- --- a/src/qt/forms/sendcoinsentry.ui
- +++ b/src/qt/forms/sendcoinsentry.ui
- @@ -57,7 +57,7 @@
- <item>
- <widget class="QValidatedLineEdit" name="payTo">
- <property name="toolTip">
- - <string>The Litecoin address to send the payment to</string>
- + <string>The LitecoinCash address to send the payment to</string>
- </property>
- </widget>
- </item>
- @@ -170,7 +170,7 @@
- <item>
- <widget class="QCheckBox" name="checkboxSubtractFeeFromAmount">
- <property name="toolTip">
- - <string>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</string>
- + <string>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</string>
- </property>
- <property name="text">
- <string>S&ubtract fee from amount</string>
- @@ -192,7 +192,7 @@
- <item row="3" column="1">
- <widget class="QLabel" name="messageTextLabel">
- <property name="toolTip">
- - <string>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</string>
- + <string>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</string>
- </property>
- <property name="textFormat">
- <enum>Qt::PlainText</enum>
- diff --git a/src/qt/forms/signverifymessagedialog.ui b/src/qt/forms/signverifymessagedialog.ui
- index 9004d06..d21727b 100644
- --- a/src/qt/forms/signverifymessagedialog.ui
- +++ b/src/qt/forms/signverifymessagedialog.ui
- @@ -30,7 +30,7 @@
- <item>
- <widget class="QLabel" name="infoLabel_SM">
- <property name="text">
- - <string>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</string>
- + <string>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</string>
- </property>
- <property name="textFormat">
- <enum>Qt::PlainText</enum>
- @@ -48,7 +48,7 @@
- <item>
- <widget class="QValidatedLineEdit" name="addressIn_SM">
- <property name="toolTip">
- - <string>The Litecoin address to sign the message with</string>
- + <string>The LitecoinCash address to sign the message with</string>
- </property>
- </widget>
- </item>
- @@ -152,7 +152,7 @@
- <item>
- <widget class="QPushButton" name="signMessageButton_SM">
- <property name="toolTip">
- - <string>Sign the message to prove you own this Litecoin address</string>
- + <string>Sign the message to prove you own this LitecoinCash address</string>
- </property>
- <property name="text">
- <string>Sign &Message</string>
- @@ -258,7 +258,7 @@
- <item>
- <widget class="QValidatedLineEdit" name="addressIn_VM">
- <property name="toolTip">
- - <string>The Litecoin address the message was signed with</string>
- + <string>The LitecoinCash address the message was signed with</string>
- </property>
- </widget>
- </item>
- @@ -295,7 +295,7 @@
- <item>
- <widget class="QPushButton" name="verifyMessageButton_VM">
- <property name="toolTip">
- - <string>Verify the message to ensure it was signed with the specified Litecoin address</string>
- + <string>Verify the message to ensure it was signed with the specified LitecoinCash address</string>
- </property>
- <property name="text">
- <string>Verify &Message</string>
- diff --git a/src/qt/guiconstants.h b/src/qt/guiconstants.h
- index a5efd8a..c28e0dc 100644
- --- a/src/qt/guiconstants.h
- +++ b/src/qt/guiconstants.h
- @@ -48,9 +48,9 @@ static const int MAX_URI_LENGTH = 255;
- /* Number of frames in spinner animation */
- #define SPINNER_FRAMES 36
- -#define QAPP_ORG_NAME "Litecoin"
- -#define QAPP_ORG_DOMAIN "litecoin.org"
- -#define QAPP_APP_NAME_DEFAULT "Litecoin-Qt"
- -#define QAPP_APP_NAME_TESTNET "Litecoin-Qt-testnet"
- +#define QAPP_ORG_NAME "LitecoinCash"
- +#define QAPP_ORG_DOMAIN "litecoinca.sh"
- +#define QAPP_APP_NAME_DEFAULT "LitecoinCash-Qt"
- +#define QAPP_APP_NAME_TESTNET "LitecoinCash-Qt-testnet"
- #endif // BITCOIN_QT_GUICONSTANTS_H
- diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
- index c3836ee..9add88e 100644
- --- a/src/qt/guiutil.cpp
- +++ b/src/qt/guiutil.cpp
- @@ -127,7 +127,7 @@ void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent)
- #if QT_VERSION >= 0x040700
- // We don't want translators to use own addresses in translations
- // and this is the only place, where this address is supplied.
- - widget->setPlaceholderText(QObject::tr("Enter a Litecoin address (e.g. %1)").arg(
- + widget->setPlaceholderText(QObject::tr("Enter a LitecoinCash address (e.g. %1)").arg(
- QString::fromStdString(DummyAddress(Params()))));
- #endif
- widget->setValidator(new BitcoinAddressEntryValidator(parent));
- @@ -146,7 +146,7 @@ void setupAmountWidget(QLineEdit *widget, QWidget *parent)
- bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out)
- {
- // return if URI is not valid or is no bitcoin: URI
- - if(!uri.isValid() || uri.scheme() != QString("litecoin"))
- + if(!uri.isValid() || uri.scheme() != QString("litecoincash"))
- return false;
- SendCoinsRecipient rv;
- @@ -210,9 +210,9 @@ bool parseBitcoinURI(QString uri, SendCoinsRecipient *out)
- //
- // Cannot handle this later, because bitcoin:// will cause Qt to see the part after // as host,
- // which will lower-case it (and thus invalidate the address).
- - if(uri.startsWith("litecoin://", Qt::CaseInsensitive))
- + if(uri.startsWith("litecoincash://", Qt::CaseInsensitive))
- {
- - uri.replace(0, 11, "litecoin:");
- + uri.replace(0, 11, "litecoincash:");
- }
- QUrl uriInstance(uri);
- return parseBitcoinURI(uriInstance, out);
- @@ -220,7 +220,7 @@ bool parseBitcoinURI(QString uri, SendCoinsRecipient *out)
- QString formatBitcoinURI(const SendCoinsRecipient &info)
- {
- - QString ret = QString("litecoin:%1").arg(info.address);
- + QString ret = QString("litecoincash:%1").arg(info.address);
- int paramCount = 0;
- if (info.amount)
- @@ -615,10 +615,10 @@ fs::path static StartupShortcutPath()
- {
- std::string chain = ChainNameFromCommandLine();
- if (chain == CBaseChainParams::MAIN)
- - return GetSpecialFolderPath(CSIDL_STARTUP) / "Litecoin.lnk";
- + return GetSpecialFolderPath(CSIDL_STARTUP) / "LitecoinCash.lnk";
- if (chain == CBaseChainParams::TESTNET) // Remove this special case when CBaseChainParams::TESTNET = "testnet4"
- - return GetSpecialFolderPath(CSIDL_STARTUP) / "Litecoin (testnet).lnk";
- - return GetSpecialFolderPath(CSIDL_STARTUP) / strprintf("Litecoin (%s).lnk", chain);
- + return GetSpecialFolderPath(CSIDL_STARTUP) / "LitecoinCash (testnet).lnk";
- + return GetSpecialFolderPath(CSIDL_STARTUP) / strprintf("LitecoinCash (%s).lnk", chain);
- }
- bool GetStartOnSystemStartup()
- @@ -713,8 +713,8 @@ fs::path static GetAutostartFilePath()
- {
- std::string chain = ChainNameFromCommandLine();
- if (chain == CBaseChainParams::MAIN)
- - return GetAutostartDir() / "litecoin.desktop";
- - return GetAutostartDir() / strprintf("litecoin-%s.lnk", chain);
- + return GetAutostartDir() / "litecoincash.desktop";
- + return GetAutostartDir() / strprintf("litecoincash-%s.lnk", chain);
- }
- bool GetStartOnSystemStartup()
- @@ -757,9 +757,9 @@ bool SetStartOnSystemStartup(bool fAutoStart)
- optionFile << "[Desktop Entry]\n";
- optionFile << "Type=Application\n";
- if (chain == CBaseChainParams::MAIN)
- - optionFile << "Name=Litecoin\n";
- + optionFile << "Name=LitecoinCash\n";
- else
- - optionFile << strprintf("Name=Litecoin (%s)\n", chain);
- + optionFile << strprintf("Name=LitecoinCash (%s)\n", chain);
- optionFile << "Exec=" << pszExePath << strprintf(" -min -testnet=%d -regtest=%d\n", gArgs.GetBoolArg("-testnet", false), gArgs.GetBoolArg("-regtest", false));
- optionFile << "Terminal=false\n";
- optionFile << "Hidden=false\n";
- @@ -842,6 +842,32 @@ bool SetStartOnSystemStartup(bool fAutoStart) { return false; }
- #endif
- +void saveWindowGeometry(const QString& strSetting, QWidget *parent)
- +{
- + QSettings settings;
- + settings.setValue(strSetting + "Pos", parent->pos());
- + settings.setValue(strSetting + "Size", parent->size());
- +}
- +
- +void restoreWindowGeometry(const QString& strSetting, const QSize& defaultSize, QWidget *parent)
- +{
- + QSettings settings;
- + QPoint pos = settings.value(strSetting + "Pos").toPoint();
- + QSize size = settings.value(strSetting + "Size", defaultSize).toSize();
- +
- + parent->resize(size);
- + parent->move(pos);
- +
- + if ((!pos.x() && !pos.y()) || (QApplication::desktop()->screenNumber(parent) == -1))
- + {
- + QRect screen = QApplication::desktop()->screenGeometry();
- + QPoint defaultPos((screen.width() - defaultSize.width()) / 2,
- + (screen.height() - defaultSize.height()) / 2);
- + parent->resize(defaultSize);
- + parent->move(defaultPos);
- + }
- +}
- +
- void setClipboard(const QString& str)
- {
- QApplication::clipboard()->setText(str, QClipboard::Clipboard);
- diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h
- index d10818d..d6aa8c4 100644
- --- a/src/qt/guiutil.h
- +++ b/src/qt/guiutil.h
- @@ -179,6 +179,11 @@ namespace GUIUtil
- bool GetStartOnSystemStartup();
- bool SetStartOnSystemStartup(bool fAutoStart);
- + /** Save window size and position */
- + void saveWindowGeometry(const QString& strSetting, QWidget *parent);
- + /** Restore window size and position */
- + void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent);
- +
- /* Convert QString to OS specific boost path through UTF-8 */
- fs::path qstringToBoostPath(const QString &path);
- diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp
- index 6ff0373..c78c510 100644
- --- a/src/qt/intro.cpp
- +++ b/src/qt/intro.cpp
- @@ -24,7 +24,7 @@ static const uint64_t GB_BYTES = 1000000000LL;
- /* Minimum free space (in GB) needed for data directory */
- static const uint64_t BLOCK_CHAIN_SIZE = 14;
- /* Minimum free space (in GB) needed for data directory when pruned; Does not include prune target */
- -static const uint64_t CHAIN_STATE_SIZE = 3;
- +static const uint64_t CHAIN_STATE_SIZE = 4;
- /* Total required space (in GB) depending on user choice (prune, not prune) */
- static uint64_t requiredSpace;
- @@ -126,8 +126,8 @@ Intro::Intro(QWidget *parent) :
- ui->lblExplanation1->setText(ui->lblExplanation1->text()
- .arg(tr(PACKAGE_NAME))
- .arg(BLOCK_CHAIN_SIZE)
- - .arg(2009)
- - .arg(tr("Bitcoin"))
- + .arg(2011)
- + .arg(tr("Litecoin"))
- );
- ui->lblExplanation2->setText(ui->lblExplanation2->text().arg(tr(PACKAGE_NAME)));
- diff --git a/src/qt/locale/bitcoin_af.ts b/src/qt/locale/bitcoin_af.ts
- index f9c07d6..7ee8b56 100644
- --- a/src/qt/locale/bitcoin_af.ts
- +++ b/src/qt/locale/bitcoin_af.ts
- @@ -62,12 +62,12 @@
- <translation>Ontvanger adresse</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Hierdie is die adresse vanwaar u Litecoin betalings stuur. U moet altyd die bedrag en die adres van die ontvanger nagaan voordat u enige munte stuur.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Hierdie is die adresse vanwaar u LitecoinCash betalings stuur. U moet altyd die bedrag en die adres van die ontvanger nagaan voordat u enige munte stuur.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Hierdie is die adresse waar u Litecoins sal ontvang. Ons beveel aan dat u 'n nuwe adres kies vir elke transaksie</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Hierdie is die adresse waar u LCC sal ontvang. Ons beveel aan dat u 'n nuwe adres kies vir elke transaksie</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Bevestig dat die beursie gekodifiseer is</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Waarskuwing: Indien u die beursie kodifiseer en u vergeet u wagwoord <b>VERLOOR U AL U LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Waarskuwing: Indien u die beursie kodifiseer en u vergeet u wagwoord <b>VERLOOR U AL U LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -330,8 +330,8 @@
- <translation>Besig met herindeksering van blokke op hardeskyf...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Stuur munte na 'n Litecoin adres</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Stuur munte na 'n LitecoinCash adres</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -350,8 +350,8 @@
- <translation>Maak ontfouting en diagnostiese konsole oop</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -378,12 +378,12 @@
- <translation>Kodifiseer die private sleutes wat aan jou beursie gekoppel is.</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Onderteken boodskappe met u Litecoin adresse om u eienaarskap te bewys</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Onderteken boodskappe met u LitecoinCash adresse om u eienaarskap te bewys</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifieër boodskappe om seker te maak dat dit met die gespesifiseerde Litecoin adresse</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifieër boodskappe om seker te maak dat dit met die gespesifiseerde LitecoinCash adresse</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -398,8 +398,8 @@
- <translation>Orebalk</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Versoek betalings (genereer QR-kodes en litecoin: URI's)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Versoek betalings (genereer QR-kodes en litecoincash: URI's)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -410,8 +410,8 @@
- <translation>Vertoon die lys van gebruikte ontvangers-adresse en etikette</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Skep 'n litecoin: URI of betalingsversoek</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Skep 'n litecoincash: URI of betalingsversoek</translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -1012,8 +1012,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Kern</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Kern</translation>
- </message>
- <message>
- <source>Information</source>
- diff --git a/src/qt/locale/bitcoin_af_ZA.ts b/src/qt/locale/bitcoin_af_ZA.ts
- index 01164f7..42f7a1f 100644
- --- a/src/qt/locale/bitcoin_af_ZA.ts
- +++ b/src/qt/locale/bitcoin_af_ZA.ts
- @@ -214,8 +214,8 @@
- <translation>&Opsies</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- diff --git a/src/qt/locale/bitcoin_ar.ts b/src/qt/locale/bitcoin_ar.ts
- index 37b4145..f98ad56 100644
- --- a/src/qt/locale/bitcoin_ar.ts
- +++ b/src/qt/locale/bitcoin_ar.ts
- @@ -62,11 +62,11 @@
- <translation>??????? ????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>??? ?? ?????? Litecion ??????? ?? ?? ??? ????? ???????. ???? ????? ?? ?????? ? ????? ?????? ???????? ??? ????? ???????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>??? ?? ?????? Litecion ??????? ?? ?? ??? ??????? ???????. ???? ??????? ????? ???? ?? ??? ?? ????</translation>
- </message>
- <message>
- @@ -168,8 +168,8 @@
- <translation>????? ????? ???????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>?????: ??? ??? ?????? ?????? ????? ???? ?????? ????? ??, ????? ?? ????? LITECOINS ?????? ??.</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>?????: ??? ??? ?????? ?????? ????? ???? ?????? ????? ??, ????? ?? ????? LCC ?????? ??.</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -330,8 +330,8 @@
- <translation>????? ??????? ????? ??? ????? ...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>???? ????? ??? ????? Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>???? ????? ??? ????? LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -354,7 +354,7 @@
- <translation>&?????? ?? ???????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>?? ????</translation>
- </message>
- <message>
- @@ -382,12 +382,12 @@
- <translation>????? ??????? ????? ???????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>???? ??????? ?????? ??: Litecoin ????? ?? ?????? ??????? ???</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>???? ??????? ?????? ??: LitecoinCash ????? ?? ?????? ??????? ???</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>???? ?? ??????? ?????? ?? ????? ????? ?????? Litecoin ??????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>???? ?? ??????? ?????? ?? ????? ????? ?????? LitecoinCash ??????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -406,7 +406,7 @@
- <translation>???? ????? ?????? ???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- <translation>???? ????? (???? ????? ????? ?????? ???? ????: ???????? ???????)</translation>
- </message>
- <message>
- @@ -418,8 +418,8 @@
- <translation>??? ????? ?????? ????????? ????????? ?????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>??? URI : Litecoin ?? ??? ???</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>??? URI : LitecoinCash ?? ??? ???</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -462,7 +462,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>??? ????? ???????? %1 ?????? ??? ????? ?? ?????? ????? ???? ???? ???????? </translation>
- </message>
- <message>
- @@ -522,8 +522,8 @@
- <translation>??????? <b>?????</b> ? <b>?????</b> ?????</translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>??? ???? ??? . ?? ???? ????? Litecoin ????? ???? ??????</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>??? ???? ??? . ?? ???? ????? LitecoinCash ????? ???? ??????</translation>
- </message>
- </context>
- <context>
- @@ -688,7 +688,7 @@
- <translation>????? ????? ???????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation>??????? ?????? "%1" ??? ????? ??? ???? ????.</translation>
- </message>
- <message>
- @@ -1446,7 +1446,7 @@
- <translation>??? ??? ???????</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation>????? ???? ???? ?????? ???? ?????</translation>
- </message>
- <message>
- @@ -1523,7 +1523,7 @@
- <translation>???????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>??? ??????? ????? ??? ????? ????? ???? ???? ???</translation>
- </message>
- <message>
- @@ -1960,7 +1960,7 @@
- <translation>??? ???? ?????????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- + <source>LitecoinCash Core</source>
- <translation>???? ????? ????</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_be_BY.ts b/src/qt/locale/bitcoin_be_BY.ts
- index f2fd193..2ab5a01 100644
- --- a/src/qt/locale/bitcoin_be_BY.ts
- +++ b/src/qt/locale/bitcoin_be_BY.ts
- @@ -62,12 +62,12 @@
- <translation>?????? ????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>??? ??????????? Litecoin-?????? ??? ????????? ????????. ??????? ???????????? ????????? ? ????? ??????????? ????? ???????????? ??????????.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>??? ??????????? LitecoinCash-?????? ??? ????????? ????????. ??????? ???????????? ????????? ? ????? ??????????? ????? ???????????? ??????????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>??? ??????????? Litecoin-?????? ??? ???????? ????????. ???????? ?????????????? ???? ????? ??? ?????? ??????????.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>??? ??????????? LitecoinCash-?????? ??? ???????? ????????. ???????? ?????????????? ???? ????? ??? ?????? ??????????.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,7 +168,7 @@
- <translation>??????????? ?????????? ???????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>?????: ???? ?? ?????????? ???? ??????? ? ???????? ????????? ?????, ?? <b>???????? ??? ???? ????????</b>!</translation>
- </message>
- <message>
- @@ -298,8 +298,8 @@
- <translation>?????????????? ?????? ?? ?????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>??????? ?????? ?? Litecoin-?????</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>??????? ?????? ?? LitecoinCash-?????</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -322,8 +322,8 @@
- <translation>????????? ????????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -350,12 +350,12 @@
- <translation>??????????? ????????? ?????, ???? ???????? ?????? ???????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>????????? ???????????? ? ????????? Litecoin-?????? ??? ????????, ??? ??? ???????? ???</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>????????? ???????????? ? ????????? LitecoinCash-?????? ??? ????????, ??? ??? ???????? ???</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>?????????? ???????????? ? ????????? Litecoin-?????? ??? ????????, ??? ??? ???????? ???</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>?????????? ???????????? ? ????????? LitecoinCash-?????? ??? ????????, ??? ??? ???????? ???</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -370,8 +370,8 @@
- <translation>????????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>????????????? ?????? (?????????? QR-??? ??? litecoin URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>????????????? ?????? (?????????? QR-??? ??? litecoincash URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -382,8 +382,8 @@
- <translation>???????? ???? ??????? ? ????? ??? ????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>??????? litecoin: URI ?? ????? ???????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>??????? litecoincash: URI ?? ????? ???????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -1258,8 +1258,8 @@
- <translation>????????? ? ???? ?? ????? ? ??????? ???????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Do you want to rebuild the block database now?</source>
- diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts
- index 118d931..d8a7175 100644
- --- a/src/qt/locale/bitcoin_bg.ts
- +++ b/src/qt/locale/bitcoin_bg.ts
- @@ -62,12 +62,12 @@
- <translation>?????? ?? ??????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>???? ?? ???????? ?? ???????????? ?? ????????. ?????? ???????????? ??????? ?? ?????? ? ?????? ?? ??????????, ????? ?? ????????? ??????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>???? ?? ?????? Litecoin ??????,???????????? ?? ????? ?? ?????????? ????????.?????????????? ? ?? ?????????? ???? ?????? ?? ?????????? ?? ????? ??????????.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>???? ?? ?????? LitecoinCash ??????,???????????? ?? ????? ?? ?????????? ????????.?????????????? ? ?? ?????????? ???? ?????? ?? ?????????? ?? ????? ??????????.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,7 +168,7 @@
- <translation>?????????? ?? ??????????? ?? ?????????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>????????: ??? ????????? ?????? ???????? ? ???????? ???????? ??, <b>?? ???????? ???????? ?? ????????</b>!</translation>
- </message>
- <message>
- @@ -330,7 +330,7 @@
- <translation>???????? ??????????? ?? ????????? ?? ?????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- + <source>Send coins to a LitecoinCash address</source>
- <translation>????????? ??? ??????? ?????</translation>
- </message>
- <message>
- @@ -354,7 +354,7 @@
- <translation>&???????? ?? ?????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>???????</translation>
- </message>
- <message>
- @@ -382,12 +382,12 @@
- <translation>????????? ?? ??????? ???????,????? ??????????? ?? ????????? ??.</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>?????? ????????? ??? ???? Litecoin ????? ?? ?? ????????,?? ? ???.</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>?????? ????????? ??? ???? LitecoinCash ????? ?? ?? ????????,?? ? ???.</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>????????????? ?? ????????? ?? ?? ?? ????,?? ?? ???????? ? ???????? Litecoin ??????.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>????????????? ?? ????????? ?? ?? ?? ????,?? ?? ???????? ? ???????? LitecoinCash ??????.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -406,8 +406,8 @@
- <translation>???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>????????? ?? ????????(???????? QR ?????? ? Litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>????????? ?? ????????(???????? QR ?????? ? LitecoinCash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -418,8 +418,8 @@
- <translation>?????? ?????? ? ???????????? ?????? ? ?????.</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>???????? Litecoin: URI ??? ?????? ?? ???????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>???????? LitecoinCash: URI ??? ?????? ?? ???????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -462,8 +462,8 @@
- <translation>?????????????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>?????? %1 ??????? ????????? ?? ?? ??????? ???? ? ???????? Litecoin ???????</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>?????? %1 ??????? ????????? ?? ?? ??????? ???? ? ???????? LitecoinCash ???????</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -706,7 +706,7 @@
- <translation>??????????? ?? ????? ?? ?????????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation>"%1" ?? ? ??????? ??????? ?????.</translation>
- </message>
- <message>
- @@ -928,16 +928,16 @@
- <translation>&????????? ?????????????? ?????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>??????????? ???????? ?? ???????? Litecoin ????. ?????? ???? ? ?????? ?????????? UPnP.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>??????????? ???????? ?? ???????? LitecoinCash ????. ?????? ???? ? ?????? ?????????? UPnP.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>???????? ?? ???????? ???? ???? &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>????????? ? Litecoin ??????? ???? SOCKS5 ??????.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>????????? ? LitecoinCash ??????? ???? SOCKS5 ??????.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1031,7 +1031,7 @@
- <translation>????????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- <translation>???????? ?????????? ?? ?????? ???? ?? ?? ? ????????. ?????? ???????? ?? ?? ???????????? ??????????? ? ??????? ?? ???????, ??? ???? ???? ???????? ? ??? ?? ????????; ???? ?????? ??? ??? ?? ? ?????????.</translation>
- </message>
- <message>
- @@ -1086,8 +1086,8 @@
- <translation>???????? ?????? ?? ????? ?????????? ?? ???????</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Litecoin ?? ???e ?? ?? ????????: click-to-pay handler</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>LitecoinCash ?? ???e ?? ?? ????????: click-to-pay handler</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1160,8 +1160,8 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>???????? Litecoin ????? (????????: %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>???????? LitecoinCash ????? (????????: %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1713,8 +1713,8 @@
- <translation>???????? ?? ??????? ? ???????.</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>????????: ????????? Litecoin ?????</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>????????: ????????? LitecoinCash ?????</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -1833,7 +1833,7 @@
- <translation>???????? ?? ??????? ??????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>????????? ????????? ???? ?????????????, ?? ??????????? ????????? ?????</translation>
- </message>
- <message>
- @@ -1849,7 +1849,7 @@
- <translation>&???????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- <translation>????????? ?????????, ?? ?? ??? ??????? ?? ? ????????? ? ????????? ??????? ?????</translation>
- </message>
- <message>
- @@ -2370,8 +2370,8 @@
- <translation>???????? ??? ???????? ?????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin ????</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash ????</translation>
- </message>
- <message>
- <source><category> can be:</source>
- diff --git a/src/qt/locale/bitcoin_bg_BG.ts b/src/qt/locale/bitcoin_bg_BG.ts
- index 64de74c..0141643 100644
- --- a/src/qt/locale/bitcoin_bg_BG.ts
- +++ b/src/qt/locale/bitcoin_bg_BG.ts
- @@ -62,12 +62,12 @@
- <translation>????? ?? ??????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>???? ?? ?????? Litecoin ?????? ?? ????????? ?? ??????. ?????? ???????????? ???????????? ? ??????????? ????? ????? ?????????. </translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>???? ?? ?????? LitecoinCash ?????? ?? ????????? ?? ??????. ?????? ???????????? ???????????? ? ??????????? ????? ????? ?????????. </translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>???? ?? ?????? Litecoin ?????? ?? ?????????? ?? ??????. ?????????????? ? ?? ???????? ??? ????? ?? ????? ??????????.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>???? ?? ?????? LitecoinCash ?????? ?? ?????????? ?? ??????. ?????????????? ? ?? ???????? ??? ????? ?? ????? ??????????.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -420,8 +420,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin ????</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash ????</translation>
- </message>
- </context>
- </TS>
- \ No newline at end of file
- diff --git a/src/qt/locale/bitcoin_bs.ts b/src/qt/locale/bitcoin_bs.ts
- index 7228c4a..1c4e906 100644
- --- a/src/qt/locale/bitcoin_bs.ts
- +++ b/src/qt/locale/bitcoin_bs.ts
- @@ -14,8 +14,8 @@
- <context>
- <name>BitcoinGUI</name>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- </context>
- <context>
- @@ -156,8 +156,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Jezrga</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Jezrga</translation>
- </message>
- </context>
- </TS>
- \ No newline at end of file
- diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts
- index 3e93b95..aae70c3 100644
- --- a/src/qt/locale/bitcoin_ca.ts
- +++ b/src/qt/locale/bitcoin_ca.ts
- @@ -62,12 +62,12 @@
- <translation>Adreces de recepció</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Aquestes són les vostres adreces de Litecoin per enviar els pagaments. Sempre reviseu l'import i l'adreça del destinatari abans de transferir monedes.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Aquestes són les vostres adreces de LitecoinCash per enviar els pagaments. Sempre reviseu l'import i l'adreça del destinatari abans de transferir monedes.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Aquestes són les vostres adreces Litecoin per rebre pagaments. Es recomana utilitzar una adreça nova de recepció per a cada transacció.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Aquestes són les vostres adreces LitecoinCash per rebre pagaments. Es recomana utilitzar una adreça nova de recepció per a cada transacció.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Confirma l'encriptació del moneder</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Avís: si encripteu el vostre moneder i perdeu la contrasenya, <b>PERDREU TOTS ELS VOSTRES LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Avís: si encripteu el vostre moneder i perdeu la contrasenya, <b>PERDREU TOTS ELS VOSTRES LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Moneder encriptat</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>Ara es tancarà el %1 per finalitzar el procés d'encriptació. Recordeu que encriptar el vostre moneder no garanteix que les vostres litecoins no puguin ser robades per programari maliciós que infecti l'ordinador.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>Ara es tancarà el %1 per finalitzar el procés d'encriptació. Recordeu que encriptar el vostre moneder no garanteix que les vostres coins no puguin ser robades per programari maliciós que infecti l'ordinador.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -334,8 +334,8 @@
- <translation>S'estan reindexant els blocs al disc...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Envia monedes a una adreça Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Envia monedes a una adreça LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -358,8 +358,8 @@
- <translation>&Verifica el missatge...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -386,12 +386,12 @@
- <translation>Encripta les claus privades pertanyents al moneder</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signa el missatges amb la seva adreça de Litecoin per provar que les poseeixes</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signa el missatges amb la seva adreça de LitecoinCash per provar que les poseeixes</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifiqueu els missatges per assegurar-vos que han estat signats amb una adreça Litecoin específica.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifiqueu els missatges per assegurar-vos que han estat signats amb una adreça LitecoinCash específica.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -410,8 +410,8 @@
- <translation>Barra d'eines de les pestanyes</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Sol·licita pagaments (genera codis QR i litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Sol·licita pagaments (genera codis QR i litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -422,16 +422,16 @@
- <translation>Mostra la llista d'adreces de recepció i etiquetes utilitzades</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Obre una litecoin: sol·licitud d'URI o pagament</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Obre una litecoincash: sol·licitud d'URI o pagament</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Opcions de la &línia d'ordres</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n connexió activa a la xarxa Litecoin</numerusform><numerusform>%n connexions actives a la xarxa Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n connexió activa a la xarxa LitecoinCash</numerusform><numerusform>%n connexions actives a la xarxa LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -474,8 +474,8 @@
- <translation>Al dia</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Mostra el missatge d'ajuda del %1 per obtenir una llista amb les possibles opcions de línia d'ordres de Litecoin</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Mostra el missatge d'ajuda del %1 per obtenir una llista amb les possibles opcions de línia d'ordres de LitecoinCash</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -540,8 +540,8 @@
- <translation>El moneder està <b>encriptat</b> i actualment <b>bloquejat</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>S'ha produït un error fatal. Litecoin no pot continuar amb seguretat i finalitzarà.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>S'ha produït un error fatal. LitecoinCash no pot continuar amb seguretat i finalitzarà.</translation>
- </message>
- </context>
- <context>
- @@ -734,8 +734,8 @@
- <translation>Edita l'adreça d'enviament</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>L'adreça introduïda «%1» no és una adreça de Litecoin vàlida.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>L'adreça introduïda «%1» no és una adreça de LitecoinCash vàlida.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -843,8 +843,8 @@
- <translation>Com és la primera vegada que s'executa el programa, podeu triar on %1 emmagatzemarà les dades.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 baixarà i emmagatzemarà una còpia de la cadena de blocs de Litecoin. Com a mínim %2GB de dades s'emmagatzemaran en aquest directori, i augmentarà al llarg del temps. El moneder també s'emmagatzemarà en aquest directori.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 baixarà i emmagatzemarà una còpia de la cadena de blocs de LitecoinCash. Com a mínim %2GB de dades s'emmagatzemaran en aquest directori, i augmentarà al llarg del temps. El moneder també s'emmagatzemarà en aquest directori.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -1020,16 +1020,16 @@
- <translation>&Gasta el canvi sense confirmar</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Obre el port del client de Litecoin al router de forma automàtica. Això només funciona quan el router implementa UPnP i l'opció està activada.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Obre el port del client de LitecoinCash al router de forma automàtica. Això només funciona quan el router implementa UPnP i l'opció està activada.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Port obert amb &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Connecta a la xarxa Litecoin a través d'un proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Connecta a la xarxa LitecoinCash a través d'un proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1068,8 +1068,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Conectar a la red de Litecoin a través de un proxy SOCKS5 per als serveis ocults de Tor</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Conectar a la red de LitecoinCash a través de un proxy SOCKS5 per als serveis ocults de Tor</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1167,8 +1167,8 @@
- <translation>Formulari</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>La informació mostrada pot no estar al día. El teu moneder es sincronitza automàticament amb la xarxa Litecoin un cop s'ha establert connexió, però aquest proces no s'ha completat encara.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>La informació mostrada pot no estar al día. El teu moneder es sincronitza automàticament amb la xarxa LitecoinCash un cop s'ha establert connexió, però aquest proces no s'ha completat encara.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1242,8 +1242,8 @@
- <translation>Error de la sol·licitud de pagament</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>No es pot iniciar litecoin: controlador click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>No es pot iniciar litecoincash: controlador click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1258,8 +1258,8 @@
- <translation>Adreça de pagament no vàlida %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>L'URI no pot ser analitzat! Això pot ser a causa d'una adreça de Litecoin no vàlida o per paràmetres URI amb mal format.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>L'URI no pot ser analitzat! Això pot ser a causa d'una adreça de LitecoinCash no vàlida o per paràmetres URI amb mal format.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1344,8 +1344,8 @@
- <translation>Import</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Introduïu una adreça de Litecoin (p. ex. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Introduïu una adreça de LitecoinCash (p. ex. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1688,8 +1688,8 @@
- <translation>R&eutilitza una adreça de recepció anterior (no recomanat)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un missatge opcional que s'adjuntarà a la sol·licitud de pagament, que es mostrarà quan s'obri la sol·licitud. Nota: El missatge no s'enviarà amb el pagament per la xarxa Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un missatge opcional que s'adjuntarà a la sol·licitud de pagament, que es mostrarà quan s'obri la sol·licitud. Nota: El missatge no s'enviarà amb el pagament per la xarxa LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1917,8 +1917,8 @@
- <translation>total com a mínim</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>No hi ha cap problema en pagar només la comissió mínima sempre que hi hagi menys volum de transacció que espai en els blocs. Però tingueu present que això pot acabar en una transacció que mai es confirmi una vegada hi hagi més demanda de transaccions de litecoins que la xarxa pugui processar.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>No hi ha cap problema en pagar només la comissió mínima sempre que hi hagi menys volum de transacció que espai en els blocs. Però tingueu present que això pot acabar en una transacció que mai es confirmi una vegada hi hagi més demanda de transaccions de coins que la xarxa pugui processar.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2065,8 +2065,8 @@
- <translation>Paga només la comissió necessària de %1</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Avís: adreça Litecoin no vàlida</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Avís: adreça LitecoinCash no vàlida</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2100,8 +2100,8 @@
- <translation>Això és un pagament normal.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>L'adreça Litecoin on enviar el pagament</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>L'adreça LitecoinCash on enviar el pagament</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2120,8 +2120,8 @@
- <translation>Elimina aquesta entrada</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>La comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys litecoins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>La comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys coins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2144,8 +2144,8 @@
- <translation>Introduïu una etiqueta per a aquesta adreça per afegir-la a la llista d'adreces utilitzades</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Un missatge que s'ha adjuntat al litecoin: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Un missatge que s'ha adjuntat al litecoincash: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2185,12 +2185,12 @@
- <translation>&Signa el missatge</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Podeu signar missatges/acords amb les vostres adreces per provar que rebeu les litecoins que s'hi envien. Aneu amb compte no signar res que sigui vague o aleatori, perquè en alguns atacs de suplantació es pot provar que hi signeu la vostra identitat. Només signeu aquelles declaracions completament detallades en què hi esteu d'acord. </translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Podeu signar missatges/acords amb les vostres adreces per provar que rebeu les coins que s'hi envien. Aneu amb compte no signar res que sigui vague o aleatori, perquè en alguns atacs de suplantació es pot provar que hi signeu la vostra identitat. Només signeu aquelles declaracions completament detallades en què hi esteu d'acord. </translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>L'adreça Litecoin amb què signar el missatge</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>L'adreça LitecoinCash amb què signar el missatge</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2221,8 +2221,8 @@
- <translation>Copia la signatura actual al porta-retalls del sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Signa el missatge per provar que ets propietari d'aquesta adreça Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Signa el missatge per provar que ets propietari d'aquesta adreça LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2245,12 +2245,12 @@
- <translation>Introduïu l'adreça del receptor, el missatge (assegureu-vos de copiar els salts de línia, espais, tabuladors, etc. exactament) i signatura de sota per verificar el missatge. Tingueu cura de no llegir més en la signatura del que està al missatge signat, per evitar ser enganyat per un atac d'home-en-el-mig. Tingueu en compte que això només demostra que la part que signa rep amb l'adreça, i no es pot provar l'enviament de qualsevol transacció!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>L'adreça Litecoin amb què va ser signat el missatge</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>L'adreça LitecoinCash amb què va ser signat el missatge</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar el missatge per assegurar-se que ha estat signat amb una adreça Litecoin específica</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar el missatge per assegurar-se que ha estat signat amb una adreça LitecoinCash específica</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2842,8 +2842,8 @@
- <translation>No s'ha pogut iniciar el servidor HTTP. Vegeu debug.log per a més detalls.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_ca@valencia.ts b/src/qt/locale/bitcoin_ca@valencia.ts
- index df53c37..ec381bc 100644
- --- a/src/qt/locale/bitcoin_ca@valencia.ts
- +++ b/src/qt/locale/bitcoin_ca@valencia.ts
- @@ -62,12 +62,12 @@
- <translation>S'estan rebent les adreces</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Estes són les vostres adreces de Litecoin per enviar els pagaments. Sempre reviseu l'import i l'adreça del destinatari abans de transferir monedes.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Estes són les vostres adreces de LitecoinCash per enviar els pagaments. Sempre reviseu l'import i l'adreça del destinatari abans de transferir monedes.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Estes són les vostres adreces Litecoin per rebre pagaments. Es recomana utilitzar una adreça nova de recepció per a cada transacció.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Estes són les vostres adreces LitecoinCash per rebre pagaments. Es recomana utilitzar una adreça nova de recepció per a cada transacció.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Confirma l'encriptació del moneder</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Avís: si encripteu el vostre moneder i perdeu la contrasenya, <b>PERDREU TOTS ELS VOSTRES LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Avís: si encripteu el vostre moneder i perdeu la contrasenya, <b>PERDREU TOTS ELS VOSTRES LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -298,8 +298,8 @@
- <translation>S'estan reindexant els blocs al disc...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Envia monedes a una adreça Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Envia monedes a una adreça LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -322,8 +322,8 @@
- <translation>&Verifica el missatge...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -350,12 +350,12 @@
- <translation>Encripta les claus privades pertanyents al moneder</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signa el missatges amb la seua adreça de Litecoin per provar que les poseeixes</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signa el missatges amb la seua adreça de LitecoinCash per provar que les poseeixes</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifiqueu els missatges per assegurar-vos que han estat signats amb una adreça Litecoin específica.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifiqueu els missatges per assegurar-vos que han estat signats amb una adreça LitecoinCash específica.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -374,8 +374,8 @@
- <translation>Barra d'eines de les pestanyes</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Sol·licita pagaments (genera codis QR i litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Sol·licita pagaments (genera codis QR i litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -386,8 +386,8 @@
- <translation>Mostra la llista d'adreces de recepció i etiquetes utilitzades</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Obri una litecoin: sol·licitud d'URI o pagament</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Obri una litecoincash: sol·licitud d'URI o pagament</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -658,8 +658,8 @@
- <translation>Edita les adreces d'enviament</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>L'adreça introduïda «%1» no és una adreça de Litecoin vàlida.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>L'adreça introduïda «%1» no és una adreça de LitecoinCash vàlida.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -884,16 +884,16 @@
- <translation>&Gasta el canvi sense confirmar</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Obri el port del client de Litecoin al router de forma automàtica. Això només funciona quan el router implementa UPnP i l'opció està activada.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Obri el port del client de LitecoinCash al router de forma automàtica. Això només funciona quan el router implementa UPnP i l'opció està activada.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Port obert amb &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Connecta a la xarxa Litecoin a través d'un proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Connecta a la xarxa LitecoinCash a través d'un proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -995,8 +995,8 @@
- <translation>Formulari</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>La informació mostrada pot no estar al día. El teu moneder es sincronitza automàticament amb la xarxa Litecoin un cop s'ha establit connexió, però este proces no s'ha completat encara.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>La informació mostrada pot no estar al día. El teu moneder es sincronitza automàticament amb la xarxa LitecoinCash un cop s'ha establit connexió, però este proces no s'ha completat encara.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1070,8 +1070,8 @@
- <translation>Error en la sol·licitud de pagament</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>No es pot iniciar litecoin: gestor clica-per-pagar</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>No es pot iniciar litecoincash: gestor clica-per-pagar</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1086,8 +1086,8 @@
- <translation>Adreça de pagament no vàlida %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>L'URI no pot ser analitzat! Això pot ser a causa d'una adreça de Litecoin no vàlida o per paràmetres URI amb mal format.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>L'URI no pot ser analitzat! Això pot ser a causa d'una adreça de LitecoinCash no vàlida o per paràmetres URI amb mal format.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1172,8 +1172,8 @@
- <translation>Import</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Introduïu una adreça de Litecoin (p. ex. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Introduïu una adreça de LitecoinCash (p. ex. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1452,8 +1452,8 @@
- <translation>R&eutilitza una adreça de recepció anterior (no recomanat)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un missatge opcional que s'adjuntarà a la sol·licitud de pagament, que es mostrarà quan s'òbriga la sol·licitud. Nota: El missatge no s'enviarà amb el pagament per la xarxa Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un missatge opcional que s'adjuntarà a la sol·licitud de pagament, que es mostrarà quan s'òbriga la sol·licitud. Nota: El missatge no s'enviarà amb el pagament per la xarxa LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1673,8 +1673,8 @@
- <translation>total com a mínim</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>No hi ha cap problema en pagar només la comissió mínima sempre que hi haja menys volum de transacció que espai en els blocs. Però tingueu present que això pot acabar en una transacció que mai es confirme una vegada hi haja més demanda de transaccions de litecoins que la xarxa puga processar.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>No hi ha cap problema en pagar només la comissió mínima sempre que hi haja menys volum de transacció que espai en els blocs. Però tingueu present que això pot acabar en una transacció que mai es confirme una vegada hi haja més demanda de transaccions de coins que la xarxa puga processar.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -1813,8 +1813,8 @@
- <translation>La sol·licitud de pagament ha vençut.</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Avís: adreça Litecoin no vàlida</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Avís: adreça LitecoinCash no vàlida</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -1848,8 +1848,8 @@
- <translation>Això és un pagament normal.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>L'adreça Litecoin on enviar el pagament</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>L'adreça LitecoinCash on enviar el pagament</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1868,8 +1868,8 @@
- <translation>Elimina esta entrada</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>La comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys litecoins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>La comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys coins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -1892,8 +1892,8 @@
- <translation>Introduïu una etiqueta per a esta adreça per afegir-la a la llista d'adreces utilitzades</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Un missatge que s'ha adjuntat al litecoin: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Un missatge que s'ha adjuntat al litecoincash: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -1933,12 +1933,12 @@
- <translation>&Signa el missatge</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Podeu signar missatges/acords amb les vostres adreces per provar que rebeu les litecoins que s'hi envien. Aneu amb compte no signar res que siga vague o aleatori, perquè en alguns atacs de suplantació es pot provar que hi signeu la vostra identitat. Només signeu aquelles declaracions completament detallades en què hi esteu d'acord. </translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Podeu signar missatges/acords amb les vostres adreces per provar que rebeu les coins que s'hi envien. Aneu amb compte no signar res que siga vague o aleatori, perquè en alguns atacs de suplantació es pot provar que hi signeu la vostra identitat. Només signeu aquelles declaracions completament detallades en què hi esteu d'acord. </translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>L'adreça Litecoin amb què signar el missatge</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>L'adreça LitecoinCash amb què signar el missatge</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -1969,8 +1969,8 @@
- <translation>Copia la signatura actual al porta-retalls del sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Signa el missatge per provar que ets propietari d'esta adreça Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Signa el missatge per provar que ets propietari d'esta adreça LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1993,12 +1993,12 @@
- <translation>Introduïu l'adreça del receptor, el missatge (assegureu-vos de copiar els salts de línia, espais, tabuladors, etc. exactament) i signatura de sota per verificar el missatge. Tingueu cura de no llegir més en la signatura del que està al missatge signat, per evitar ser enganyat per un atac d'home-en-el-mig. Tingueu en compte que això només demostra que la part que signa rep amb l'adreça, i no es pot provar l'enviament de qualsevol transacció!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>L'adreça Litecoin amb què va ser signat el missatge</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>L'adreça LitecoinCash amb què va ser signat el missatge</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar el missatge per assegurar-se que ha estat signat amb una adreça Litecoin específica</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar el missatge per assegurar-se que ha estat signat amb una adreça LitecoinCash específica</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2558,8 +2558,8 @@
- <translation>Executa en segon pla com a programa dimoni i accepta ordes</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_ca_ES.ts b/src/qt/locale/bitcoin_ca_ES.ts
- index 161e45e..cf17db6 100644
- --- a/src/qt/locale/bitcoin_ca_ES.ts
- +++ b/src/qt/locale/bitcoin_ca_ES.ts
- @@ -62,12 +62,12 @@
- <translation>Adreces de recepció</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Aquestes són les vostres adreces de Litecoin per enviar els pagaments. Sempre reviseu l'import i l'adreça del destinatari abans de transferir monedes.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Aquestes són les vostres adreces de LitecoinCash per enviar els pagaments. Sempre reviseu l'import i l'adreça del destinatari abans de transferir monedes.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Aquestes són les vostres adreces Litecoin per rebre pagaments. Es recomana utilitzar una adreça nova de recepció per a cada transacció.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Aquestes són les vostres adreces LitecoinCash per rebre pagaments. Es recomana utilitzar una adreça nova de recepció per a cada transacció.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Confirma l'encriptació del moneder</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Avís: si encripteu el vostre moneder i perdeu la contrasenya, <b>PERDREU TOTS ELS VOSTRES LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Avís: si encripteu el vostre moneder i perdeu la contrasenya, <b>PERDREU TOTS ELS VOSTRES LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Moneder encriptat</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>Ara es tancarà el %1 per finalitzar el procés d'encriptació. Recordeu que encriptar el vostre moneder no garanteix que les vostres litecoins no puguin ser robades per programari maliciós que infecti l'ordinador.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>Ara es tancarà el %1 per finalitzar el procés d'encriptació. Recordeu que encriptar el vostre moneder no garanteix que les vostres coins no puguin ser robades per programari maliciós que infecti l'ordinador.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -334,8 +334,8 @@
- <translation>S'estan reindexant els blocs al disc...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Envia monedes a una adreça Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Envia monedes a una adreça LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -358,8 +358,8 @@
- <translation>&Verifica el missatge...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -386,12 +386,12 @@
- <translation>Encripta les claus privades pertanyents al moneder</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signa el missatges amb la seva adreça de Litecoin per provar que les poseeixes</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signa el missatges amb la seva adreça de LitecoinCash per provar que les poseeixes</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifiqueu els missatges per assegurar-vos que han estat signats amb una adreça Litecoin específica.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifiqueu els missatges per assegurar-vos que han estat signats amb una adreça LitecoinCash específica.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -410,8 +410,8 @@
- <translation>Barra d'eines de les pestanyes</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Sol·licita pagaments (genera codis QR i litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Sol·licita pagaments (genera codis QR i litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -422,16 +422,16 @@
- <translation>Mostra la llista d'adreces de recepció i etiquetes utilitzades</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Obre una litecoin: sol·licitud d'URI o pagament</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Obre una litecoincash: sol·licitud d'URI o pagament</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Opcions de la &línia d'ordres</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n connexió activa a la xarxa Litecoin</numerusform><numerusform>%n connexions actives a la xarxa Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n connexió activa a la xarxa LitecoinCash</numerusform><numerusform>%n connexions actives a la xarxa LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -474,8 +474,8 @@
- <translation>Al dia</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Mostra el missatge d'ajuda del %1 per obtenir una llista amb les possibles opcions de línia d'ordres de Litecoin</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Mostra el missatge d'ajuda del %1 per obtenir una llista amb les possibles opcions de línia d'ordres de LitecoinCash</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -540,8 +540,8 @@
- <translation>El moneder està <b>encriptat</b> i actualment <b>bloquejat</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>S'ha produït un error fatal. Litecoin no pot continuar amb seguretat i finalitzarà.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>S'ha produït un error fatal. LitecoinCash no pot continuar amb seguretat i finalitzarà.</translation>
- </message>
- </context>
- <context>
- @@ -734,8 +734,8 @@
- <translation>Edita l'adreça d'enviament</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>L'adreça introduïda «%1» no és una adreça de Litecoin vàlida.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>L'adreça introduïda «%1» no és una adreça de LitecoinCash vàlida.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -843,8 +843,8 @@
- <translation>Com és la primera vegada que s'executa el programa, podeu triar on %1 emmagatzemarà les dades.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 baixarà i emmagatzemarà una còpia de la cadena de blocs de Litecoin. Com a mínim %2GB de dades s'emmagatzemaran en aquest directori, i augmentarà al llarg del temps. El moneder també s'emmagatzemarà en aquest directori.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 baixarà i emmagatzemarà una còpia de la cadena de blocs de LitecoinCash. Com a mínim %2GB de dades s'emmagatzemaran en aquest directori, i augmentarà al llarg del temps. El moneder també s'emmagatzemarà en aquest directori.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -1024,16 +1024,16 @@
- <translation>&Gasta el canvi sense confirmar</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Obre el port del client de Litecoin al router de forma automàtica. Això només funciona quan el router implementa UPnP i l'opció està activada.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Obre el port del client de LitecoinCash al router de forma automàtica. Això només funciona quan el router implementa UPnP i l'opció està activada.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Port obert amb &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Connecta a la xarxa Litecoin a través d'un proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Connecta a la xarxa LitecoinCash a través d'un proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1072,8 +1072,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Conectar a la red de Litecoin a través de un proxy SOCKS5 per als serveis ocults de Tor</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Conectar a la red de LitecoinCash a través de un proxy SOCKS5 per als serveis ocults de Tor</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1171,8 +1171,8 @@
- <translation>Formulari</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>La informació mostrada pot no estar al día. El teu moneder es sincronitza automàticament amb la xarxa Litecoin un cop s'ha establert connexió, però aquest proces no s'ha completat encara.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>La informació mostrada pot no estar al día. El teu moneder es sincronitza automàticament amb la xarxa LitecoinCash un cop s'ha establert connexió, però aquest proces no s'ha completat encara.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1246,8 +1246,8 @@
- <translation>Error de la sol·licitud de pagament</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>No es pot iniciar litecoin: controlador click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>No es pot iniciar litecoincash: controlador click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1262,8 +1262,8 @@
- <translation>Adreça de pagament no vàlida %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>L'URI no pot ser analitzat! Això pot ser a causa d'una adreça de Litecoin no vàlida o per paràmetres URI amb mal format.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>L'URI no pot ser analitzat! Això pot ser a causa d'una adreça de LitecoinCash no vàlida o per paràmetres URI amb mal format.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1348,8 +1348,8 @@
- <translation>Import</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Introduïu una adreça de Litecoin (p. ex. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Introduïu una adreça de LitecoinCash (p. ex. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1696,8 +1696,8 @@
- <translation>R&eutilitza una adreça de recepció anterior (no recomanat)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un missatge opcional que s'adjuntarà a la sol·licitud de pagament, que es mostrarà quan s'obri la sol·licitud. Nota: El missatge no s'enviarà amb el pagament per la xarxa Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un missatge opcional que s'adjuntarà a la sol·licitud de pagament, que es mostrarà quan s'obri la sol·licitud. Nota: El missatge no s'enviarà amb el pagament per la xarxa LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1925,8 +1925,8 @@
- <translation>total com a mínim</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>No hi ha cap problema en pagar només la comissió mínima sempre que hi hagi menys volum de transacció que espai en els blocs. Però tingueu present que això pot acabar en una transacció que mai es confirmi una vegada hi hagi més demanda de transaccions de litecoins que la xarxa pugui processar.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>No hi ha cap problema en pagar només la comissió mínima sempre que hi hagi menys volum de transacció que espai en els blocs. Però tingueu present que això pot acabar en una transacció que mai es confirmi una vegada hi hagi més demanda de transaccions de coins que la xarxa pugui processar.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2073,8 +2073,8 @@
- <translation>Paga només la comissió necessària de %1</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Avís: adreça Litecoin no vàlida</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Avís: adreça LitecoinCash no vàlida</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2108,8 +2108,8 @@
- <translation>Això és un pagament normal.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>L'adreça Litecoin on enviar el pagament</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>L'adreça LitecoinCash on enviar el pagament</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2128,8 +2128,8 @@
- <translation>Elimina aquesta entrada</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>La comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys litecoins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>La comissió es deduirà de l'import que s'enviarà. El destinatari rebrà menys coins que les que introduïu al camp d'import. Si se seleccionen múltiples destinataris, la comissió es dividirà per igual.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2152,8 +2152,8 @@
- <translation>Introduïu una etiqueta per a aquesta adreça per afegir-la a la llista d'adreces utilitzades</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Un missatge que s'ha adjuntat al litecoin: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Un missatge que s'ha adjuntat al litecoincash: URI que s'emmagatzemarà amb la transacció per a la vostra referència. Nota: el missatge no s'enviarà a través de la xarxa LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2193,12 +2193,12 @@
- <translation>&Signa el missatge</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Podeu signar missatges/acords amb les vostres adreces per provar que rebeu les litecoins que s'hi envien. Aneu amb compte no signar res que sigui vague o aleatori, perquè en alguns atacs de suplantació es pot provar que hi signeu la vostra identitat. Només signeu aquelles declaracions completament detallades en què hi esteu d'acord. </translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Podeu signar missatges/acords amb les vostres adreces per provar que rebeu les coins que s'hi envien. Aneu amb compte no signar res que sigui vague o aleatori, perquè en alguns atacs de suplantació es pot provar que hi signeu la vostra identitat. Només signeu aquelles declaracions completament detallades en què hi esteu d'acord. </translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>L'adreça Litecoin amb què signar el missatge</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>L'adreça LitecoinCash amb què signar el missatge</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2229,8 +2229,8 @@
- <translation>Copia la signatura actual al porta-retalls del sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Signa el missatge per provar que ets propietari d'aquesta adreça Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Signa el missatge per provar que ets propietari d'aquesta adreça LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2253,12 +2253,12 @@
- <translation>Introduïu l'adreça del receptor, el missatge (assegureu-vos de copiar els salts de línia, espais, tabuladors, etc. exactament) i signatura de sota per verificar el missatge. Tingueu cura de no llegir més en la signatura del que està al missatge signat, per evitar ser enganyat per un atac d'home-en-el-mig. Tingueu en compte que això només demostra que la part que signa rep amb l'adreça, i no es pot provar l'enviament de qualsevol transacció!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>L'adreça Litecoin amb què va ser signat el missatge</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>L'adreça LitecoinCash amb què va ser signat el missatge</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar el missatge per assegurar-se que ha estat signat amb una adreça Litecoin específica</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar el missatge per assegurar-se que ha estat signat amb una adreça LitecoinCash específica</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2862,8 +2862,8 @@
- <translation>No s'ha pogut iniciar el servidor HTTP. Vegeu debug.log per a més detalls.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts
- index f3556f7..3c305d7 100644
- --- a/src/qt/locale/bitcoin_cs.ts
- +++ b/src/qt/locale/bitcoin_cs.ts
- @@ -62,12 +62,12 @@
- <translation>P?ijímací adresy</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Tohle jsou tvé litecoinové adresy pro posílání plateb. P?ed odesláním mincí si v?dy zkontroluj ?ástku a cílovou adresu.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Tohle jsou tvé litecoincashové adresy pro posílání plateb. P?ed odesláním mincí si v?dy zkontroluj ?ástku a cílovou adresu.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Tohle jsou tvé litecoinové adresy pro p?íjem plateb. Nezapome? si pro ka?dou transakci v?dy vygenerovat novou adresu.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Tohle jsou tvé litecoincashové adresy pro p?íjem plateb. Nezapome? si pro ka?dou transakci v?dy vygenerovat novou adresu.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Potvr? za?ifrování pen??enky</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Upozorn?ní: Pokud si za?ifruje? pen??enku a ztratí? ?i zapomene? heslo, <b>P?IJDE? O V?ECHNY LITECOINY</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Upozorn?ní: Pokud si za?ifruje? pen??enku a ztratí? ?i zapomene? heslo, <b>P?IJDE? O V?ECHNY LITECOINCASHY</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Pen??enka je za?ifrována</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 se te? ukon?í, aby dokon?il za?ifrování. Pamatuj v?ak, ?e pouhé za?ifrování pen??enky nem??e zabránit kráde?i tvých litecoin? malwarem, kterým se m??e po?íta? nakazit.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 se te? ukon?í, aby dokon?il za?ifrování. Pamatuj v?ak, ?e pouhé za?ifrování pen??enky nem??e zabránit kráde?i tvých litecoincash? malwarem, kterým se m??e po?íta? nakazit.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Vytvá?ím nový index blok? na disku...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Po?li mince na litecoinovou adresu</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Po?li mince na litecoincashovou adresu</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Ov?? zprávu...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Za?ifruj soukromé klí?e ve své pen??ence</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Podepi? zprávy svými litecoinovými adresami, ?ím? proká?e?, ?e jsi jejich vlastníkem</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Podepi? zprávy svými litecoincashovými adresami, ?ím? proká?e?, ?e jsi jejich vlastníkem</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Ov?? zprávy, aby ses ujistil, ?e byly podepsány danými litecoinovými adresami</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Ov?? zprávy, aby ses ujistil, ?e byly podepsány danými litecoincashovými adresami</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Panel s listy</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Po?aduj platby (generuje QR kódy a litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Po?aduj platby (generuje QR kódy a litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Uka? seznam pou?itých p?ijímacích adres a jejich ozna?ení</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Na?ti litecoin: URI nebo platební po?adavek</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Na?ti litecoincash: URI nebo platební po?adavek</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Ar&gumenty p?íkazové ?ádky</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktivní spojení do litecoinové sít?</numerusform><numerusform>%n aktivní spojení do litecoinové sít?</numerusform><numerusform>%n aktivních spojení do litecoinové sít?</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktivní spojení do litecoincashové sít?</numerusform><numerusform>%n aktivní spojení do litecoincashové sít?</numerusform><numerusform>%n aktivních spojení do litecoincashové sít?</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Aktuální</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Seznam argument? Litecoinu pro p?íkazovou ?ádku získá? v nápov?d? %1</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Seznam argument? LitecoinCashu pro p?íkazovou ?ádku získá? v nápov?d? %1</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>Pen??enka je <b>za?ifrovaná</b> a momentáln? <b>zam?ená</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Stala se fatální chyba. Litecoin nem??e bezpe?n? pokra?ovat v ?innosti, a proto skon?í.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Stala se fatální chyba. LitecoinCash nem??e bezpe?n? pokra?ovat v ?innosti, a proto skon?í.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Uprav odesílací adresu</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Zadaná adresa ?%1? není platná litecoinová adresa.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Zadaná adresa ?%1? není platná litecoincashová adresa.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,7 +851,7 @@
- <translation>Tohle je poprvé, co spou?tí? %1, tak?e si m??e? zvolit, kam bude ukládat svá data.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- <translation>%1 bude stahovat kopii ?et?zce blok?. Proto bude pot?eba do tohoto adresá?e ulo?it nejmén? %2 GB dat ? toto ?íslo bude navíc v pr?b?hu ?asu r?st. Tvá pen??enka bude rovn?? ulo?ena v tomto adresá?i.</translation>
- </message>
- <message>
- @@ -886,12 +886,12 @@
- <translation>Formulá?</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Nedávné transakce je?t? nemusí být vid?t, tak?e stav tvého ú?tu nemusí být platný. Jakmile se v?ak tvá pen??enka dosynchronizuje s litecoinovou sítí (viz informace ní?e), tak u? bude stav správn?.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Nedávné transakce je?t? nemusí být vid?t, tak?e stav tvého ú?tu nemusí být platný. Jakmile se v?ak tvá pen??enka dosynchronizuje s litecoincashovou sítí (viz informace ní?e), tak u? bude stav správn?.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Utrácení litecoin?, které u? utratily zatím nezobrazené transakce, nebude litecoinovou sítí umo?n?no.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Utrácení litecoincash?, které u? utratily zatím nezobrazené transakce, nebude litecoincashovou sítí umo?n?no.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,7 +1048,7 @@
- <translation>&Utrácet i je?t? nepotvrzené drobné</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- <translation>Automaticky otev?e pot?ebný port na routeru. Tohle funguje jen za p?edpokladu, ?e tv?j router podporuje UPnP a ?e je UPnP povolené.</translation>
- </message>
- <message>
- @@ -1056,8 +1056,8 @@
- <translation>Namapovat port p?es &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>P?ipojí se do litecoinové sít? p?es SOCKS5 proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>P?ipojí se do litecoincashové sít? p?es SOCKS5 proxy.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>P?ipojí se do litecoinové sít? p?es SOCKS5 proxy vyhrazenou pro skryté slu?by v Tor síti.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>P?ipojí se do litecoincashové sít? p?es SOCKS5 proxy vyhrazenou pro skryté slu?by v Tor síti.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1195,8 +1195,8 @@
- <translation>Formulá?</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Zobrazené informace nemusí být aktuální. Tvá pen??enka se automaticky sesynchronizuje s litecoinovou sítí, jakmile se s ní spojí. Zatím ale je?t? není synchronizace dokon?ena.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Zobrazené informace nemusí být aktuální. Tvá pen??enka se automaticky sesynchronizuje s litecoincashovou sítí, jakmile se s ní spojí. Zatím ale je?t? není synchronizace dokon?ena.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>Chyba platebního po?adavku</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Nem??u spustit litecoin: obsluha click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Nem??u spustit litecoincash: obsluha click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>Neplatná platební adresa %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>Nepoda?ilo se analyzovat URI! D?vodem m??e být neplatná litecoinová adresa nebo po?kozené parametry URI.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>Nepoda?ilo se analyzovat URI! D?vodem m??e být neplatná litecoincashová adresa nebo po?kozené parametry URI.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>?ástka</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Zadej litecoinovou adresu (nap?. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Zadej litecoincashovou adresu (nap?. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>&Recyklovat ji? existující adresy (nedoporu?eno)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Volitelná zpráva, která se p?ipojí k platebnímu po?adavku a která se zobrazí, kdy? se po?adavek otev?e. Poznámka: tahle zpráva se neposílá s platbou po litecoinové síti.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Volitelná zpráva, která se p?ipojí k platebnímu po?adavku a která se zobrazí, kdy? se po?adavek otev?e. Poznámka: tahle zpráva se neposílá s platbou po litecoincashové síti.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2037,8 +2037,8 @@
- <translation>p?inejmen?ím</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Platit jen minimální poplatek je v po?ádku, pokud je zrovna mén? transakcí ne? místa v blocích. Ale po?ítej s tím, ?e to také m??e skon?it transakcí, která nikdy nebude potvrzena, pokud je v?t?í poptávka po litecoinových transakcích, ne? sí? zvládne zpracovat.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Platit jen minimální poplatek je v po?ádku, pokud je zrovna mén? transakcí ne? místa v blocích. Ale po?ítej s tím, ?e to také m??e skon?it transakcí, která nikdy nebude potvrzena, pokud je v?t?í poptávka po litecoincashových transakcích, ne? sí? zvládne zpracovat.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2201,8 +2201,8 @@
- <translation><numerusform>Potvrzování by podle odhadu m?lo za?ít b?hem %n bloku.</numerusform><numerusform>Potvrzování by podle odhadu m?lo za?ít b?hem %n blok?.</numerusform><numerusform>Potvrzování by podle odhadu m?lo za?ít b?hem %n blok?.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Upozorn?ní: Neplatná litecoinová adresa</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Upozorn?ní: Neplatná litecoincashová adresa</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2244,8 +2244,8 @@
- <translation>Tohle je normální platba.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Litecoinová adresa p?íjemce</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>LitecoinCashová adresa p?íjemce</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2264,8 +2264,8 @@
- <translation>Sma? tento záznam</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Poplatek se ode?te od posílané ?ástky. P?íjemce tak dostane mén? litecoin?, ne? zadá? do pole ?ástka. Pokud vybere? více p?íjemc?, tak se poplatek rovnom?rn? rozlo?í.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Poplatek se ode?te od posílané ?ástky. P?íjemce tak dostane mén? litecoincash?, ne? zadá? do pole ?ástka. Pokud vybere? více p?íjemc?, tak se poplatek rovnom?rn? rozlo?í.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2288,8 +2288,8 @@
- <translation>Zadej ozna?ení této adresy; obojí se ti pak ulo?í do adresá?e</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Zpráva, která byla p?ipojena k litecoin: URI a která se ti pro p?ehled ulo?í k transakci. Poznámka: Tahle zpráva se neposílá s platbou po litecoinové síti.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Zpráva, která byla p?ipojena k litecoincash: URI a která se ti pro p?ehled ulo?í k transakci. Poznámka: Tahle zpráva se neposílá s platbou po litecoincashové síti.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2333,12 +2333,12 @@
- <translation>&Podepi? zprávu</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Podepsáním zprávy/smlouvy svými adresami m??e? prokázat, ?e jsi na n? schopen p?ijmout litecoiny. Bu? opatrný a nepodepisuj nic vágního nebo náhodného; nap?íklad p?i phishingových útocích m??e? být lákán, abys n?co takového podepsal. Podepisuj pouze naprosto úplná a detailní prohlá?ení, se kterými souhlasí?.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Podepsáním zprávy/smlouvy svými adresami m??e? prokázat, ?e jsi na n? schopen p?ijmout litecoincashy. Bu? opatrný a nepodepisuj nic vágního nebo náhodného; nap?íklad p?i phishingových útocích m??e? být lákán, abys n?co takového podepsal. Podepisuj pouze naprosto úplná a detailní prohlá?ení, se kterými souhlasí?.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoinová adresa, kterou se zpráva podepí?e</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCashová adresa, kterou se zpráva podepí?e</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2369,8 +2369,8 @@
- <translation>Zkopíruj tento podpis do schránky</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Podepi? zprávu, ?ím? proká?e?, ?e jsi vlastníkem této litecoinové adresy</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Podepi? zprávu, ?ím? proká?e?, ?e jsi vlastníkem této litecoincashové adresy</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2393,12 +2393,12 @@
- <translation>K ov??ení podpisu zprávy zadej adresu p?íjemce, zprávu (ov?? si, ?e správn? kopíruje? zalomení ?ádk?, mezery, tabulátory apod.) a podpis. Dávej pozor na to, abys nezkopíroval do podpisu víc, ne? co je v samotné podepsané zpráv?, abys nebyl napálen man-in-the-middle útokem. Poznamenejme v?ak, ?e takto lze pouze prokázat, ?e podepisující je schopný na dané adrese p?ijmout platbu, ale není mo?néprokázat, ?e odeslal jakoukoli transakci!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Litecoinová adresa, kterou je zpráva podepsána</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>LitecoinCashová adresa, kterou je zpráva podepsána</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Ov?? zprávu, aby ses ujistil, ?e byla podepsána danou litecoinovou adresou</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Ov?? zprávu, aby ses ujistil, ?e byla podepsána danou litecoincashovou adresou</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -3058,8 +3058,8 @@
- <translation>Nemohu spustit HTTP server. Detaily viz v debug.log.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_cy.ts b/src/qt/locale/bitcoin_cy.ts
- index 5cb84d1..d6a44e9 100644
- --- a/src/qt/locale/bitcoin_cy.ts
- +++ b/src/qt/locale/bitcoin_cy.ts
- @@ -154,8 +154,8 @@
- <translation>Newid y cyfrinymadrodd a ddefnyddiwyd ar gyfer amgryptio'r waled</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -640,8 +640,8 @@
- <translation>Opsiynau:</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Craidd Litecoin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Craidd LitecoinCash</translation>
- </message>
- <message>
- <source>Information</source>
- diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts
- index cb1c064..e2f49fa 100644
- --- a/src/qt/locale/bitcoin_da.ts
- +++ b/src/qt/locale/bitcoin_da.ts
- @@ -43,11 +43,11 @@
- </message>
- <message>
- <source>Choose the address to send coins to</source>
- - <translation>Vælg adresse at sende litecoins til</translation>
- + <translation>Vælg adresse at sende coins til</translation>
- </message>
- <message>
- <source>Choose the address to receive coins with</source>
- - <translation>Vælg adresse at modtage litecoins med</translation>
- + <translation>Vælg adresse at modtage coins med</translation>
- </message>
- <message>
- <source>C&hoose</source>
- @@ -62,12 +62,12 @@
- <translation>Modtagelsesadresser</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Disse er dine Litecoin-adresser til afsendelse af betalinger. Tjek altid beløb og modtagelsesadresse, inden du sender litecoins.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Disse er dine LitecoinCash-adresser til afsendelse af betalinger. Tjek altid beløb og modtagelsesadresse, inden du sender coins.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Dette er dine Litecoin-adresser til modtagelse af betalinger. Det anbefales at bruge en ny modtagelsesadresse for hver transaktion.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Dette er dine LitecoinCash-adresser til modtagelse af betalinger. Det anbefales at bruge en ny modtagelsesadresse for hver transaktion.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Bekræft tegnebogskryptering</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b>MISTE ALLE DINE LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b>MISTE ALLE DINE LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Tegnebog krypteret</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 vil nu lukke for at færdiggøre krypteringsprocessen. Husk at kryptering af din tegnebog kan ikke beskytte dine litecoin fuldt ud mod at blive stjålet af eventuel malware, der måtte have inficeret din computer.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 vil nu lukke for at færdiggøre krypteringsprocessen. Husk at kryptering af din tegnebog kan ikke beskytte dine litecoincash fuldt ud mod at blive stjålet af eventuel malware, der måtte have inficeret din computer.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Genindekserer blokke på disken?</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Send litecoins til en Litecoin-adresse</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Send coins til en LitecoinCash-adresse</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Verificér besked?</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Kryptér de private nøgler, der hører til din tegnebog</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signér beskeder med dine Litecoin-adresser for at bevise, at de tilhører dig</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signér beskeder med dine LitecoinCash-adresser for at bevise, at de tilhører dig</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verificér beskeder for at sikre, at de er signeret med de angivne Litecoin-adresser</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verificér beskeder for at sikre, at de er signeret med de angivne LitecoinCash-adresser</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Faneværktøjslinje</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Anmod om betalinger (genererer QR-koder og ?litecoin:?-URI'er)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Anmod om betalinger (genererer QR-koder og ?litecoincash:?-URI'er)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Vis listen over brugte modtagelsesadresser og -mærkater</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Åbn en ?litecoin:?-URI eller betalingsanmodning</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Åbn en ?litecoincash:?-URI eller betalingsanmodning</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Tilvalg for &kommandolinje</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktiv forbindelse til Litecoin-netværket</numerusform><numerusform>%n aktive forbindelser til Litecoin-netværket</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktiv forbindelse til LitecoinCash-netværket</numerusform><numerusform>%n aktive forbindelser til LitecoinCash-netværket</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Opdateret</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Vis %1 hjælpebesked for at få en liste over mulige tilvalg for Litecoin kommandolinje</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Vis %1 hjælpebesked for at få en liste over mulige tilvalg for LitecoinCash kommandolinje</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>Tegnebog er <b>krypteret</b> og i øjeblikket <b>låst</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Der opstod en fatal fejl. Litecoin kan ikke længere fortsætte sikkert og vil afslutte.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Der opstod en fatal fejl. LitecoinCash kan ikke længere fortsætte sikkert og vil afslutte.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Redigér afsendelsesadresse</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Den indtastede adresse ?%1? er ikke en gyldig Litecoin-adresse.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Den indtastede adresse ?%1? er ikke en gyldig LitecoinCash-adresse.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Siden dette er første gang, programmet startes, kan du vælge, hvor %1 skal gemme sin data.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 vil downloade og gemme et kopi af Litecoin-blokkæden. Mindst %2 GB data vil blive gemt i denne mappe, og den vil vokse over tid. Tegnebogen vil også blive gemt i denne mappe.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 vil downloade og gemme et kopi af LitecoinCash-blokkæden. Mindst %2 GB data vil blive gemt i denne mappe, og den vil vokse over tid. Tegnebogen vil også blive gemt i denne mappe.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>Formular</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Nylige transaktioner er måske ikke synlige endnu, og derfor kan din tegnebogs saldo være ukorrekt. Denne information vil være korrekt, når din tegnebog er færdig med at synkronisere med litecoin-netværket, som detaljerne herunder viser.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Nylige transaktioner er måske ikke synlige endnu, og derfor kan din tegnebogs saldo være ukorrekt. Denne information vil være korrekt, når din tegnebog er færdig med at synkronisere med litecoincash-netværket, som detaljerne herunder viser.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Forsøg på at bruge litecoin, som er indeholdt i endnu-ikke-viste transaktioner, accepteres ikke af netværket.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Forsøg på at bruge litecoincash, som er indeholdt i endnu-ikke-viste transaktioner, accepteres ikke af netværket.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>&Brug ubekræftede byttepenge</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Åbn automatisk Litecoin-klientens port på routeren. Dette virker kun, når din router understøtter UPnP, og UPnP er aktiveret.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Åbn automatisk LitecoinCash-klientens port på routeren. Dette virker kun, når din router understøtter UPnP, og UPnP er aktiveret.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Konfigurér port vha. &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Forbind til Litecoin-netværket gennem en SOCKS5-proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Forbind til LitecoinCash-netværket gennem en SOCKS5-proxy.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Forbind til Litecoin-netværket gennem en separat SOCKS5-proxy for skjulte Tor-tjenester.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Forbind til LitecoinCash-netværket gennem en separat SOCKS5-proxy for skjulte Tor-tjenester.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1145,7 +1145,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Vælg standard for underopdeling af enhed, som skal vises i brugergrænsefladen og ved afsendelse af litecoins.</translation>
- + <translation>Vælg standard for underopdeling af enhed, som skal vises i brugergrænsefladen og ved afsendelse af coins.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1195,8 +1195,8 @@
- <translation>Formular</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Den viste information kan være forældet. Din tegnebog synkroniserer automatisk med Litecoin-netværket, når en forbindelse etableres, men denne proces er ikke gennemført endnu.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Den viste information kan være forældet. Din tegnebog synkroniserer automatisk med LitecoinCash-netværket, når en forbindelse etableres, men denne proces er ikke gennemført endnu.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>Fejl i betalingsanmodning</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Kan ikke starte litecoin: click-to-pay-håndtering</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Kan ikke starte litecoincash: click-to-pay-håndtering</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>Ugyldig betalingsadresse %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI kan ikke tolkes! Dette kan skyldes en ugyldig Litecoin-adresse eller forkert udformede URL-parametre.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI kan ikke tolkes! Dette kan skyldes en ugyldig LitecoinCash-adresse eller forkert udformede URL-parametre.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>Beløb</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Indtast en Litecoin-adresse (fx %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Indtast en LitecoinCash-adresse (fx %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>&Genbrug en eksisterende modtagelsesadresse (anbefales ikke)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>En valgfri besked, der føjes til betalingsanmodningen, og som vil vises, når anmodningen åbnes. Bemærk: Beskeden vil ikke sendes sammen med betalingen over Litecoin-netværket.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>En valgfri besked, der føjes til betalingsanmodningen, og som vil vises, når anmodningen åbnes. Bemærk: Beskeden vil ikke sendes sammen med betalingen over LitecoinCash-netværket.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1958,7 +1958,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Send litecoins</translation>
- + <translation>Send coins</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -2037,8 +2037,8 @@
- <translation>total mindst</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Det er helt fint kun at betale det minimale gebyr, så længe den totale transaktionsvolumen er mindre end den plads, der er tilgængelig i blokkene. Men vær opmærksom på, at dette kan ende ud i transaktioner, der aldrig bliver bekræftet, når der bliver større forespørgsel efter litecoin-transaktioner, end hvad netværket kan bearbejde.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Det er helt fint kun at betale det minimale gebyr, så længe den totale transaktionsvolumen er mindre end den plads, der er tilgængelig i blokkene. Men vær opmærksom på, at dette kan ende ud i transaktioner, der aldrig bliver bekræftet, når der bliver større forespørgsel efter litecoincash-transaktioner, end hvad netværket kan bearbejde.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2150,7 +2150,7 @@
- </message>
- <message>
- <source>Confirm send coins</source>
- - <translation>Bekræft afsendelse af litecoins</translation>
- + <translation>Bekræft afsendelse af coins</translation>
- </message>
- <message>
- <source>The recipient address is not valid. Please recheck.</source>
- @@ -2201,8 +2201,8 @@
- <translation><numerusform>Bekræftelse estimeret til at begynde om %n blok.</numerusform><numerusform>Bekræftelse estimeret til at begynde om %n blokke.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Advarsel: Ugyldig Litecoin-adresse</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Advarsel: Ugyldig LitecoinCash-adresse</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2244,8 +2244,8 @@
- <translation>Dette er en normal betaling.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Litecoin-adresse, som betalingen skal sendes til</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>LitecoinCash-adresse, som betalingen skal sendes til</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2264,8 +2264,8 @@
- <translation>Fjern denne indgang</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Gebyret vil blive trukket fra det sendte beløb. Modtageren vil modtage færre litecoin, end du indtaster i beløbfeltet. Hvis flere modtagere vælges, vil gebyret deles ligeligt.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Gebyret vil blive trukket fra det sendte beløb. Modtageren vil modtage færre litecoincash, end du indtaster i beløbfeltet. Hvis flere modtagere vælges, vil gebyret deles ligeligt.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2288,8 +2288,8 @@
- <translation>Indtast et mærkat for denne adresse for at føje den til listen over brugte adresser</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>En besked, som blev føjet til ?bitcon:?-URI'en, som vil gemmes med transaktionen til din reference. Bemærk: Denne besked vil ikke blive sendt over Litecoin-netværket.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>En besked, som blev føjet til ?bitcon:?-URI'en, som vil gemmes med transaktionen til din reference. Bemærk: Denne besked vil ikke blive sendt over LitecoinCash-netværket.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2333,12 +2333,12 @@
- <translation>&Singér besked</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Du kan signere beskeder/aftaler med dine adresser for at bevise, at du kan modtage litecoin, der bliver sendt til adresserne. Vær forsigtig med ikke at signere noget vagt eller tilfældigt, da eventuelle phishing-angreb kan snyde dig til at overlade din identitet til dem. Signér kun fuldt ud detaljerede udsagn, som du er enig i.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Du kan signere beskeder/aftaler med dine adresser for at bevise, at du kan modtage litecoincash, der bliver sendt til adresserne. Vær forsigtig med ikke at signere noget vagt eller tilfældigt, da eventuelle phishing-angreb kan snyde dig til at overlade din identitet til dem. Signér kun fuldt ud detaljerede udsagn, som du er enig i.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoin-adresse, som beskeden skal signeres med</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCash-adresse, som beskeden skal signeres med</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2369,8 +2369,8 @@
- <translation>Kopiér den nuværende signatur til systemets udklipsholder</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Signér denne besked for at bevise, at Litecoin-adressen tilhører dig</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Signér denne besked for at bevise, at LitecoinCash-adressen tilhører dig</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2393,12 +2393,12 @@
- <translation>Indtast modtagerens adresse, besked (vær sikker på at kopiere linjeskift, mellemrum, tabuleringer, etc. præcist) og signatur herunder for at verificere beskeden. Vær forsigtig med ikke at læse noget ud fra signaturen, som ikke står i selve beskeden, for at undgå at blive snydt af et eventuelt man-in-the-middle-angreb. Bemærk, at dette kun beviser, at den signerende person kan modtage med adressen; det kan ikke bevise hvem der har sendt en given transaktion!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Litecoin-adressen, som beskeden blev signeret med</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>LitecoinCash-adressen, som beskeden blev signeret med</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificér beskeden for at sikre, at den er signeret med den angivne Litecoin-adresse</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificér beskeden for at sikre, at den er signeret med den angivne LitecoinCash-adresse</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2623,7 +2623,7 @@
- </message>
- <message>
- <source>Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source>
- - <translation>Minede litecoins skal modne %1 blokke, før de kan bruges. Da du genererede denne blok, blev den transmitteret til netværket for at blive føjet til blokkæden. Hvis det ikke lykkes at få den i kæden, vil dens tilstand ændres til ?ikke accepteret?, og den vil ikke kunne bruges. Dette kan ske nu og da, hvis en anden knude udvinder en blok inden for nogle få sekunder fra din.</translation>
- + <translation>Minede coins skal modne %1 blokke, før de kan bruges. Da du genererede denne blok, blev den transmitteret til netværket for at blive føjet til blokkæden. Hvis det ikke lykkes at få den i kæden, vil dens tilstand ændres til ?ikke accepteret?, og den vil ikke kunne bruges. Dette kan ske nu og da, hvis en anden knude udvinder en blok inden for nogle få sekunder fra din.</translation>
- </message>
- <message>
- <source>Debug information</source>
- @@ -2949,7 +2949,7 @@
- <name>WalletModel</name>
- <message>
- <source>Send Coins</source>
- - <translation>Send litecoins</translation>
- + <translation>Send coins</translation>
- </message>
- </context>
- <context>
- @@ -3058,8 +3058,8 @@
- <translation>Kunne ikke starte HTTP-server. Se fejlretningslog for detaljer.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_de_DE.ts b/src/qt/locale/bitcoin_de_DE.ts
- index 0efb525..3a720f8 100644
- --- a/src/qt/locale/bitcoin_de_DE.ts
- +++ b/src/qt/locale/bitcoin_de_DE.ts
- @@ -51,7 +51,7 @@
- </message>
- <message>
- <source>C&hoose</source>
- - <translation>Dies sind deine Litecoin Adressen zum Senden von Zahlungsmitteln.
- + <translation>Dies sind deine LitecoinCash Adressen zum Senden von Zahlungsmitteln.
- Überprüfe immer die Menge, sowie die Empfänger-Adresse vor dem Senden von Coins.</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts
- index db59698..c49a66f 100644
- --- a/src/qt/locale/bitcoin_el_GR.ts
- +++ b/src/qt/locale/bitcoin_el_GR.ts
- @@ -62,12 +62,12 @@
- <translation>??????????? ?????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>????? ????? ?? Litecoin ??????????? ??? ??? ?? ???????? ????????. ?? ???????? ????? ?? ????, ????? ??? ?? ????????? ????????? ???? ???????? ?????????.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>????? ????? ?? LitecoinCash ??????????? ??? ??? ?? ???????? ????????. ?? ???????? ????? ?? ????, ????? ??? ?? ????????? ????????? ???? ???????? ?????????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>????? ????? ?? Litecoin ??????????? ??? ??? ?? ????????? ????????. ?????????? ?? ?????????????? ??? ??? ????????? ????????? ??? ???? ?????????.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>????? ????? ?? LitecoinCash ??????????? ??? ??? ?? ????????? ????????. ?????????? ?? ?????????????? ??? ??? ????????? ????????? ??? ???? ?????????.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -238,8 +238,8 @@
- <translation>??????? ?????????? ????? ???? ?????? ?????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>?????? ????????? ?? ??? ????????? litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>?????? ????????? ?? ??? ????????? litecoincash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -262,8 +262,8 @@
- <translation>&??????????? ?????????</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -290,12 +290,12 @@
- <translation>?????????????? ?? ???????? ??????? ??? ??????? ??? ????????? ??? </translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- <translation>????????? ??? ?????? ??? ?? ?????????? ??? ????? ? ??????? ????? ??? ??????????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>????????? ??? ?????? ??? ?' ?????????? ??? ?????? ??? ???????????? ????????? Litecoin</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>????????? ??? ?????? ??? ?' ?????????? ??? ?????? ??? ???????????? ????????? LitecoinCash</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -314,8 +314,8 @@
- <translation>???????????? ????????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>?????? ???????? (?????????? QR codes ??? ??????????? litecoin: )</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>?????? ???????? (?????????? QR codes ??? ??????????? litecoincash: )</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -326,8 +326,8 @@
- <translation>??????? ??? ?????? ??? ???????????????? ??????????? ??? ???????? ??????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>??????? litecoin: URI ??????? ????????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>??????? litecoincash: URI ??????? ????????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -736,16 +736,16 @@
- <translation>&?????? ?? ???????????? ??????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>???????? ??????? ??? ????? Litecoin ???? ???????????. ?????????? ???? ?? ? ???????????? ??? ??????????? ?? ?????????? UPnP.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>???????? ??????? ??? ????? LitecoinCash ???? ???????????. ?????????? ???? ?? ? ???????????? ??? ??????????? ?? ?????????? UPnP.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>??????? ????? ?? ?????? &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>??????? ??? Litecoin ?????? ???? ????????????? SOCKS5 (?.?. ??? ??????? ???? Tor)</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>??????? ??? LitecoinCash ?????? ???? ????????????? SOCKS5 (?.?. ??? ??????? ???? Tor)</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -840,8 +840,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>?? ??????????? ??? ???????????? ?????? ?? ????? ????????????. ?? ????????? ??? ????????????? ???????? ?? ?? ?????? Litecoin ???? ??? ??? ???????, ???? ???? ? ?????????? ??? ???? ????? ???????????. </translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>?? ??????????? ??? ???????????? ?????? ?? ????? ????????????. ?? ????????? ??? ????????????? ???????? ?? ?? ?????? LitecoinCash ???? ??? ??? ???????, ???? ???? ? ?????????? ??? ???? ????? ???????????. </translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -921,8 +921,8 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>???????? ??? ????????? Litecoin (?.?. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>???????? ??? ????????? LitecoinCash (?.?. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1389,8 +1389,8 @@
- <translation>???? ????? ??? ???? ???????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>? ????????? Litecoin ??? ?? ?????? ? ???????</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>? ????????? LitecoinCash ??? ?? ?????? ? ???????</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1446,8 +1446,8 @@
- <translation>&???????? ?????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>????????? Litecoin ??? ?? ?????? ?? ??????</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>????????? LitecoinCash ??? ?? ?????? ?? ??????</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -1478,8 +1478,8 @@
- <translation>????????? ??? ??????????? ?????????? ??? ???????? ??? ??????????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>????????? ??? ?????? ??? ?' ?????????? ??? ??? ?????? ??? ???????????? ????????? Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>????????? ??? ?????? ??? ?' ?????????? ??? ??? ?????? ??? ???????????? ????????? LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1498,12 +1498,12 @@
- <translation>&??????????? ?????????</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>????????? Litecoin ? ????? ?? ?????? ???? ?????????</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>????????? LitecoinCash ? ????? ?? ?????? ???? ?????????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>????????? ??? ?????? ??? ?' ?????????? ??? ??????????? ??? ??? ???????????? ????????? Litecoin</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>????????? ??? ?????? ??? ?' ?????????? ??? ??????????? ??? ??? ???????????? ????????? LitecoinCash</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1715,8 +1715,8 @@
- <translation>???????? ??? ?????????? ?? ??????? ???????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts
- index 3f6ee05..dc1626c 100644
- --- a/src/qt/locale/bitcoin_en.ts
- +++ b/src/qt/locale/bitcoin_en.ts
- @@ -80,12 +80,12 @@
- </message>
- <message>
- <location line="+7"/>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+4"/>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -211,7 +211,7 @@
- </message>
- <message>
- <location line="+1"/>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -227,7 +227,7 @@
- </message>
- <message>
- <location line="-56"/>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -430,8 +430,8 @@
- </message>
- <message>
- <location line="-510"/>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Send coins to a Litecoin address</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Send coins to a LitecoinCash address</translation>
- </message>
- <message>
- <location line="+67"/>
- @@ -460,8 +460,8 @@
- </message>
- <message>
- <location line="+516"/>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <location line="-741"/>
- @@ -495,13 +495,13 @@
- </message>
- <message>
- <location line="+7"/>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Sign messages with your Litecoin addresses to prove you own them</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Sign messages with your LitecoinCash addresses to prove you own them</translation>
- </message>
- <message>
- <location line="+2"/>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verify messages to ensure they were signed with specified Litecoin addresses</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verify messages to ensure they were signed with specified LitecoinCash addresses</translation>
- </message>
- <message>
- <location line="+58"/>
- @@ -525,7 +525,7 @@
- </message>
- <message>
- <location line="-158"/>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -540,7 +540,7 @@
- </message>
- <message>
- <location line="+3"/>
- - <source>Open a litecoin: URI or payment request</source>
- + <source>Open a litecoincash: URI or payment request</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -550,10 +550,10 @@
- </message>
- <message numerus="yes">
- <location line="+356"/>
- - <source>%n active connection(s) to Litecoin network</source>
- + <source>%n active connection(s) to LitecoinCash network</source>
- <translation>
- - <numerusform>%n active connection to Litecoin network</numerusform>
- - <numerusform>%n active connections to Litecoin network</numerusform>
- + <numerusform>%n active connection to LitecoinCash network</numerusform>
- + <numerusform>%n active connections to LitecoinCash network</numerusform>
- </translation>
- </message>
- <message>
- @@ -611,7 +611,7 @@
- </message>
- <message>
- <location line="-440"/>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -691,7 +691,7 @@
- </message>
- <message>
- <location filename="../bitcoin.cpp" line="+534"/>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- <translation type="unfinished"></translation>
- </message>
- </context>
- @@ -934,7 +934,7 @@
- </message>
- <message>
- <location line="+71"/>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -1094,8 +1094,8 @@
- </message>
- <message>
- <location filename="../intro.cpp" line="+20"/>
- - <source>Litecoin</source>
- - <translation type="unfinished">Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation type="unfinished">LitecoinCash</translation>
- </message>
- <message>
- <location line="+6"/>
- @@ -1109,7 +1109,7 @@
- </message>
- <message>
- <location line="+8"/>
- - <source>%1 will download and store a copy of the Litecoin block chain.</source>
- + <source>%1 will download and store a copy of the LitecoinCash block chain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -1153,12 +1153,12 @@
- </message>
- <message>
- <location line="+119"/>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+19"/>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -1376,8 +1376,8 @@
- </message>
- <message>
- <location line="+30"/>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</translation>
- </message>
- <message>
- <location line="+3"/>
- @@ -1386,7 +1386,7 @@
- </message>
- <message>
- <location line="+17"/>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -1434,7 +1434,7 @@
- </message>
- <message>
- <location line="+25"/>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -1579,8 +1579,8 @@
- <message>
- <location line="+62"/>
- <location line="+386"/>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</translation>
- </message>
- <message>
- <location line="-139"/>
- @@ -1677,7 +1677,7 @@
- </message>
- <message>
- <location line="-402"/>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -1699,7 +1699,7 @@
- </message>
- <message>
- <location line="+8"/>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -1821,7 +1821,7 @@
- </message>
- <message>
- <location filename="../guiutil.cpp" line="+130"/>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -2407,7 +2407,7 @@
- <message>
- <location line="+14"/>
- <location line="+23"/>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -2705,7 +2705,7 @@
- <message>
- <location line="+84"/>
- <location line="+13"/>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -2921,7 +2921,7 @@
- </message>
- <message>
- <location line="+101"/>
- - <source>Warning: Invalid Litecoin address</source>
- + <source>Warning: Invalid LitecoinCash address</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -2976,7 +2976,7 @@
- </message>
- <message>
- <location line="+39"/>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -3003,7 +3003,7 @@
- </message>
- <message>
- <location line="-1021"/>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -3033,7 +3033,7 @@
- </message>
- <message>
- <location line="+47"/>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -3090,12 +3090,12 @@
- </message>
- <message>
- <location line="+6"/>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+18"/>
- - <source>The Litecoin address to sign the message with</source>
- + <source>The LitecoinCash address to sign the message with</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- @@ -3137,8 +3137,8 @@
- </message>
- <message>
- <location line="+21"/>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Sign the message to prove you own this Litecoin address</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Sign the message to prove you own this LitecoinCash address</translation>
- </message>
- <message>
- <location line="+3"/>
- @@ -3168,13 +3168,13 @@
- </message>
- <message>
- <location line="+21"/>
- - <source>The Litecoin address the message was signed with</source>
- + <source>The LitecoinCash address the message was signed with</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+37"/>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verify the message to ensure it was signed with the specified Litecoin address</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verify the message to ensure it was signed with the specified LitecoinCash address</translation>
- </message>
- <message>
- <location line="+3"/>
- @@ -4066,8 +4066,8 @@
- </message>
- <message>
- <location line="-384"/>
- - <source>Litecoin Core</source>
- - <translation type="unfinished">Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation type="unfinished">LitecoinCash Core</translation>
- </message>
- <message>
- <location line="+1"/>
- diff --git a/src/qt/locale/bitcoin_en_AU.ts b/src/qt/locale/bitcoin_en_AU.ts
- index a84b499..7976d71 100644
- --- a/src/qt/locale/bitcoin_en_AU.ts
- +++ b/src/qt/locale/bitcoin_en_AU.ts
- @@ -40,8 +40,8 @@
- <context>
- <name>ModalOverlay</name>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronising with the litecoin network, as detailed below.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronising with the litecoincash network, as detailed below.</translation>
- </message>
- </context>
- <context>
- @@ -69,8 +69,8 @@
- <context>
- <name>OverviewPage</name>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>The displayed information may be out of date. Your wallet automatically synchronises with the Litecoin network after a connection is established, but this process has not completed yet.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>The displayed information may be out of date. Your wallet automatically synchronises with the LitecoinCash network after a connection is established, but this process has not completed yet.</translation>
- </message>
- </context>
- <context>
- diff --git a/src/qt/locale/bitcoin_en_GB.ts b/src/qt/locale/bitcoin_en_GB.ts
- index 4c2dab3..6092f6f 100644
- --- a/src/qt/locale/bitcoin_en_GB.ts
- +++ b/src/qt/locale/bitcoin_en_GB.ts
- @@ -226,8 +226,8 @@
- <translation>Reindexing blocks on disk...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Send coins to a Litecoin address</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Send coins to a LitecoinCash address</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -250,8 +250,8 @@
- <translation>&Verify message...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -278,12 +278,12 @@
- <translation>Encrypt the private keys that belong to your wallet</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Sign messages with your Litecoin addresses to prove you own them</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Sign messages with your LitecoinCash addresses to prove you own them</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verify messages to ensure they were signed with specified Litecoin addresses</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verify messages to ensure they were signed with specified LitecoinCash addresses</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -302,8 +302,8 @@
- <translation>Tabs toolbar</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Request payments (generates QR codes and litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Request payments (generates QR codes and litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -314,16 +314,16 @@
- <translation>Show the list of used receiving addresses and labels</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Open a litecoin: URI or payment request</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Open a litecoincash: URI or payment request</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Command-line options</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n active connection to Litecoin network</numerusform><numerusform>%n active connections to Litecoin network</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n active connection to LitecoinCash network</numerusform><numerusform>%n active connections to LitecoinCash network</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -366,8 +366,8 @@
- <translation>Up to date</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Show the %1 help message to get a list with possible Litecoin command-line options</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Show the %1 help message to get a list with possible LitecoinCash command-line options</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -615,8 +615,8 @@
- <translation>As this is the first time the program is launched, you can choose where %1 will store its data.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -772,16 +772,16 @@
- <translation>&Spend unconfirmed change</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Map port using &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Connect to the Litecoin network through a SOCKS5 proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Connect to the LitecoinCash network through a SOCKS5 proxy.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -820,8 +820,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -919,8 +919,8 @@
- <translation>Form</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>The displayed information may be out of date. Your Wallet automatically synchronises with the Litecoin Network after a connection is established, but this process has not been completed yet.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>The displayed information may be out of date. Your Wallet automatically synchronises with the LitecoinCash Network after a connection is established, but this process has not been completed yet.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1008,8 +1008,8 @@
- <translation>Amount</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Enter a Litecoin address (e.g. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Enter a LitecoinCash address (e.g. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1352,8 +1352,8 @@
- <translation>R&euse an existing receiving address (not recommended)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1521,8 +1521,8 @@
- <translation>total at least</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -1608,8 +1608,8 @@
- <translation>This is a normal payment.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>The Litecoin address to send the payment to</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>The LitecoinCash address to send the payment to</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1628,8 +1628,8 @@
- <translation>Remove this entry</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -1652,8 +1652,8 @@
- <translation>Enter a label for this address to add it to the list of used addresses</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -1689,12 +1689,12 @@
- <translation>&Sign Message</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>The Litecoin address to sign the message with</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>The LitecoinCash address to sign the message with</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -1725,8 +1725,8 @@
- <translation>Copy the current signature to the system clipboard</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Sign the message to prove you own this Litecoin address</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Sign the message to prove you own this LitecoinCash address</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1749,12 +1749,12 @@
- <translation>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>The Litecoin address the message was signed with</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>The LitecoinCash address the message was signed with</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verify the message to ensure it was signed with the specified Litecoin address</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verify the message to ensure it was signed with the specified LitecoinCash address</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1894,8 +1894,8 @@
- <translation>Unable to start HTTP server. See debug log for details.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_eo.ts b/src/qt/locale/bitcoin_eo.ts
- index 220a1e7..986a5a1 100644
- --- a/src/qt/locale/bitcoin_eo.ts
- +++ b/src/qt/locale/bitcoin_eo.ts
- @@ -62,12 +62,12 @@
- <translation>Ricevaj adresoj</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Jen viaj Litecoin-adresoj por sendi pagojn. Zorge kontrolu la sumon kaj la alsendan adreson anta? ol sendi.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Jen viaj LitecoinCash-adresoj por sendi pagojn. Zorge kontrolu la sumon kaj la alsendan adreson anta? ol sendi.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Jen viaj litecoinj adresoj por ricevi pagojn. Estas konsilinde uzi apartan ricevan adreson por ?iu transakcio.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Jen viaj litecoincashj adresoj por ricevi pagojn. Estas konsilinde uzi apartan ricevan adreson por ?iu transakcio.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -214,8 +214,8 @@
- <translation>Reindeksado de blokoj sur disko...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Sendi monon al Litecoin-adreso</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Sendi monon al LitecoinCash-adreso</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -238,8 +238,8 @@
- <translation>&Kontroli mesa?on...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -266,12 +266,12 @@
- <translation>C?ifri la privatajn s?losilojn de via monujo</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Subskribi mesag?ojn per via Litecoin-adresoj por pravigi, ke vi estas la posedanto</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Subskribi mesag?ojn per via LitecoinCash-adresoj por pravigi, ke vi estas la posedanto</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Kontroli mesag?ojn por kontroli ?u ili estas subskribitaj per specifaj Litecoin-adresoj</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Kontroli mesag?ojn por kontroli ?u ili estas subskribitaj per specifaj LitecoinCash-adresoj</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -290,8 +290,8 @@
- <translation>Langeto-breto</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Peti pagon (kreas QR-kodojn kaj URI-ojn kun prefikso litecoin:)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Peti pagon (kreas QR-kodojn kaj URI-ojn kun prefikso litecoincash:)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -302,8 +302,8 @@
- <translation>Vidigi la liston de uzitaj ricevaj adresoj kaj etikedoj</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Malfermi litecoin:-URI-on a? pagpeton</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Malfermi litecoincash:-URI-on a? pagpeton</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -628,8 +628,8 @@
- <translation>Fakulo</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Au?tomate malfermi la kursilan pordon por Litecoino. Tio funkcias nur se via kursilo havas la UPnP-funkcion, kaj se tiu c?i estas s?altita.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Au?tomate malfermi la kursilan pordon por LitecoinCasho. Tio funkcias nur se via kursilo havas la UPnP-funkcion, kaj se tiu c?i estas s?altita.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -685,7 +685,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Elekti la defau?ltan manieron por montri litecoinjn sumojn en la interfaco, kaj kiam vi sendos bitmonon.</translation>
- + <translation>Elekti la defau?ltan manieron por montri litecoincashjn sumojn en la interfaco, kaj kiam vi sendos bitmonon.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -723,8 +723,8 @@
- <translation>Formularo</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Eblas, ke la informoj videblaj c?i tie estas eksdataj. Via monujo au?tomate sinkonig?as kun la litecoin reto kiam ili konektig?as, sed tiu procezo ankorau? ne finfarig?is.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Eblas, ke la informoj videblaj c?i tie estas eksdataj. Via monujo au?tomate sinkonig?as kun la litecoincash reto kiam ili konektig?as, sed tiu procezo ankorau? ne finfarig?is.</translation>
- </message>
- <message>
- <source>Your current spendable balance</source>
- @@ -1030,7 +1030,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Sendi Litecoinn</translation>
- + <translation>Sendi LitecoinCashn</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -1213,8 +1213,8 @@
- <translation>Kopii la aktualan subskribon al la tondejo</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Subskribi la mesag?on por pravigi, ke vi estas la posedanto de tiu Litecoin-adreso</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Subskribi la mesag?on por pravigi, ke vi estas la posedanto de tiu LitecoinCash-adreso</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1233,8 +1233,8 @@
- <translation>&Kontroli Mesag?on</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Kontroli la mesag?on por pravigi, ke g?i ja estas subskribita per la specifa Litecoin-adreso</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Kontroli la mesag?on por pravigi, ke g?i ja estas subskribita per la specifa LitecoinCash-adreso</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1338,8 +1338,8 @@
- <translation>Ruli fone kiel demono kaj akcepti komandojn</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Kerno de Litecoino</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Kerno de LitecoinCasho</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts
- index d6182c7..32a9813 100644
- --- a/src/qt/locale/bitcoin_es.ts
- +++ b/src/qt/locale/bitcoin_es.ts
- @@ -62,12 +62,12 @@
- <translation>Direcciones de recepción</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Estas son sus direcciones Litecoin para enviar pagos. Verifique siempre la cantidad y la dirección de recepción antes de enviar litecoins.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Estas son sus direcciones LitecoinCash para enviar pagos. Verifique siempre la cantidad y la dirección de recepción antes de enviar coins.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Estas son sus direcciones Litecoin para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Estas son sus direcciones LitecoinCash para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Confirmar cifrado del monedero</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Advertencia: Si cifra su monedero y pierde su contraseña<b>¡PERDERÁ TODOS SUS LITECOINS!</b></translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Advertencia: Si cifra su monedero y pierde su contraseña<b>¡PERDERÁ TODOS SUS LCC!</b></translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,7 +180,7 @@
- <translation>Monedero cifrado</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 se cerrará ahora para terminar el proceso de cifrado. Recuerde que cifrar su monedero no puede proteger completamente su monedero de ser robado por malware que infecte su ordenador.</translation>
- </message>
- <message>
- @@ -338,8 +338,8 @@
- <translation>Reindexando bloques en disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar litecoins a una dirección Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar coins a una dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Verificar mensaje...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Cifrar las claves privadas de su monedero</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Firmar mensajes con sus direcciones Litecoin para demostrar la propiedad</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Firmar mensajes con sus direcciones LitecoinCash para demostrar la propiedad</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verificar mensajes comprobando que están firmados con direcciones Litecoin concretas</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verificar mensajes comprobando que están firmados con direcciones LitecoinCash concretas</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Barra de pestañas</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Solicitar pagos (generando códigos QR e identificadores URI "litecoin:")</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Solicitar pagos (generando códigos QR e identificadores URI "litecoincash:")</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Muestra la lista de direcciones de recepción y etiquetas</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Abrir un identificador URI "litecoin:" o una petición de pago</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Abrir un identificador URI "litecoincash:" o una petición de pago</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Opciones de consola de comandos</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n conexión activa hacia la red Litecoin</numerusform><numerusform>%n conexiones activas hacia la red Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n conexión activa hacia la red LitecoinCash</numerusform><numerusform>%n conexiones activas hacia la red LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Actualizado</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Mostrar el mensaje de ayuda %1 para obtener una lista de los posibles comandos de linea de comandos de Litecoin</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Mostrar el mensaje de ayuda %1 para obtener una lista de los posibles comandos de linea de comandos de LitecoinCash</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>El monedero está <b>cifrado</b> y actualmente <b>bloqueado</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Ha ocurrido un error fatal. Litecoin no puede seguir seguro y se cerrará.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Ha ocurrido un error fatal. LitecoinCash no puede seguir seguro y se cerrará.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Editar dirección de envío</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>La dirección introducida "%1" no es una dirección Litecoin válida.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>La dirección introducida "%1" no es una dirección LitecoinCash válida.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Al ser la primera vez que se ejecuta el programa, puede elegir donde %1 almacenará sus datos.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 va a descargar y almacenar una copia de la cadena de bloques de Litecoin. Al menos %2GB de datos seran almacenados en este directorio, que ira creciendo con el tiempo. El monedero se guardara tambien en ese directorio. </translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 va a descargar y almacenar una copia de la cadena de bloques de LitecoinCash. Al menos %2GB de datos seran almacenados en este directorio, que ira creciendo con el tiempo. El monedero se guardara tambien en ese directorio. </translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>Formulario</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Las transacciones recientes aún no pueden ser visibles, y por lo tanto el saldo de su monedero podría ser incorrecto. Esta información será correcta cuando su monedero haya terminado de sincronizarse con la red de litecoin, como se detalla abajo.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Las transacciones recientes aún no pueden ser visibles, y por lo tanto el saldo de su monedero podría ser incorrecto. Esta información será correcta cuando su monedero haya terminado de sincronizarse con la red de litecoincash, como se detalla abajo.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>La red no aceptará el intentar gastar litecoins que están afectados por transacciones aún no mostradas.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>La red no aceptará el intentar gastar coins que están afectados por transacciones aún no mostradas.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>&Gastar cambio no confirmado</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Abrir automáticamente el puerto del cliente Litecoin en el router. Esta opción solo funciona si el router admite UPnP y está activado.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Abrir automáticamente el puerto del cliente LitecoinCash en el router. Esta opción solo funciona si el router admite UPnP y está activado.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapear el puerto mediante &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Conectarse a la red Litecoin a través de un proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Conectarse a la red LitecoinCash a través de un proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Conectar a la red Litecoin mediante un proxy SOCKS5 por separado para los servicios ocultos de Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Conectar a la red LitecoinCash mediante un proxy SOCKS5 por separado para los servicios ocultos de Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1145,7 +1145,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían litecoins.</translation>
- + <translation>Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían coins.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1195,8 +1195,8 @@
- <translation>Formulario</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red Litecoin después de que se haya establecido una conexión, pero este proceso aún no se ha completado.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red LitecoinCash después de que se haya establecido una conexión, pero este proceso aún no se ha completado.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>Fallo en la solicitud de pago</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>No se puede iniciar litecoin: encargado click-para-pagar</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>No se puede iniciar litecoincash: encargado click-para-pagar</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>Dirección de pago inválida %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI no puede ser analizado! Esto puede ser causado por una dirección Litecoin inválida o parametros URI mal formados.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI no puede ser analizado! Esto puede ser causado por una dirección LitecoinCash inválida o parametros URI mal formados.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>Cantidad</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Introducir una dirección Litecoin (p. ej. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Introducir una dirección LitecoinCash (p. ej. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>R&eutilizar una dirección existente para recibir (no recomendado)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un mensaje opcional para adjuntar a la solicitud de pago, que se muestra cuando se abre la solicitud. Nota: El mensaje no se enviará con el pago por la red Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un mensaje opcional para adjuntar a la solicitud de pago, que se muestra cuando se abre la solicitud. Nota: El mensaje no se enviará con el pago por la red LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1958,7 +1958,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Enviar litecoins</translation>
- + <translation>Enviar coins</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -2037,8 +2037,8 @@
- <translation>total por lo menos</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Pagar solamente la comisión mínima es correcto, siempre y cuando haya menos volumen de transacciones que el espacio en los bloques. Pero tenga en cuenta que esto puede terminar en una transacción nunca confirmada, una vez que haya más demanda para transacciones Litecoin que la red pueda procesar.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Pagar solamente la comisión mínima es correcto, siempre y cuando haya menos volumen de transacciones que el espacio en los bloques. Pero tenga en cuenta que esto puede terminar en una transacción nunca confirmada, una vez que haya más demanda para transacciones LitecoinCash que la red pueda procesar.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2201,8 +2201,8 @@
- <translation><numerusform>Estimado para empezar la confirmación dentro de %n bloque.</numerusform><numerusform>Estimado para empezar la confirmación dentro de %n bloques.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Alerta: dirección Litecoin inválida</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Alerta: dirección LitecoinCash inválida</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2244,8 +2244,8 @@
- <translation>Esto es un pago ordinario.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Dirección Litecoin a la que enviar el pago</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Dirección LitecoinCash a la que enviar el pago</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2264,8 +2264,8 @@
- <translation>Eliminar esta transacción</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>La comisión será deducida de la cantidad que sea mandada. El destinatario recibirá menos litecoins de la cantidad introducida en el campo Cantidad. Si hay varios destinatarios, la comisión será distribuida a partes iguales.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>La comisión será deducida de la cantidad que sea mandada. El destinatario recibirá menos coins de la cantidad introducida en el campo Cantidad. Si hay varios destinatarios, la comisión será distribuida a partes iguales.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2288,8 +2288,8 @@
- <translation>Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Un mensaje que se adjuntó a la litecoin: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Un mensaje que se adjuntó a la litecoincash: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2333,12 +2333,12 @@
- <translation>&Firmar mensaje</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Puede firmar los mensajes con sus direcciones para demostrar que las posee. Tenga cuidado de no firmar cualquier cosa de manera vaga o aleatoria, pues los ataques de phishing pueden tratar de engañarle firmando su identidad a través de ellos. Sólo firme declaraciones totalmente detalladas con las que usted esté de acuerdo.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Dirección Litecoin con la que firmar el mensaje</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>Dirección LitecoinCash con la que firmar el mensaje</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2369,8 +2369,8 @@
- <translation>Copiar la firma actual al portapapeles del sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Firmar el mensaje para demostrar que se posee esta dirección Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Firmar el mensaje para demostrar que se posee esta dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2393,12 +2393,12 @@
- <translation>Introduzca la dirección para la firma, el mensaje (asegurándose de copiar tal cual los saltos de línea, espacios, tabulaciones, etc.) y la firma a continuación para verificar el mensaje. Tenga cuidado de no asumir más información de lo que dice el propio mensaje firmado para evitar fraudes basados en ataques de tipo man-in-the-middle. </translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>La dirección Litecoin con la que se firmó el mensaje</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>La dirección LitecoinCash con la que se firmó el mensaje</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar el mensaje para comprobar que fue firmado con la dirección Litecoin indicada</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar el mensaje para comprobar que fue firmado con la dirección LitecoinCash indicada</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2623,7 +2623,7 @@
- </message>
- <message>
- <source>Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source>
- - <translation>Los litecoins generados deben madurar %1 bloques antes de que puedan gastarse. Cuando generó este bloque, se transmitió a la red para que se añadiera a la cadena de bloques. Si no consigue entrar en la cadena, su estado cambiará a "no aceptado" y ya no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del suyo.</translation>
- + <translation>Los coins generados deben madurar %1 bloques antes de que puedan gastarse. Cuando generó este bloque, se transmitió a la red para que se añadiera a la cadena de bloques. Si no consigue entrar en la cadena, su estado cambiará a "no aceptado" y ya no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del suyo.</translation>
- </message>
- <message>
- <source>Debug information</source>
- @@ -3061,8 +3061,8 @@
- <translation>No se ha podido comenzar el servidor HTTP. Ver debug log para detalles.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_es_419.ts b/src/qt/locale/bitcoin_es_419.ts
- index 44348d5..2578cb4 100644
- --- a/src/qt/locale/bitcoin_es_419.ts
- +++ b/src/qt/locale/bitcoin_es_419.ts
- @@ -42,8 +42,8 @@
- <translation>Recibiendo direcciones</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Estas son sus direcciones de Litecoin para enviar sus pagos. Siempre revise el monto y la dirección recibida antes de enviar monedas.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Estas son sus direcciones de LitecoinCash para enviar sus pagos. Siempre revise el monto y la dirección recibida antes de enviar monedas.</translation>
- </message>
- </context>
- <context>
- diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts
- index 75803f0..2934456 100644
- --- a/src/qt/locale/bitcoin_es_CL.ts
- +++ b/src/qt/locale/bitcoin_es_CL.ts
- @@ -142,8 +142,8 @@
- <translation>Cargando el index de bloques...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar monedas a una dirección litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar monedas a una dirección litecoincash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -166,8 +166,8 @@
- <translation>Verificar mensaje....</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -186,7 +186,7 @@
- <translation>&Mostrar/Ocultar</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- <translation>Firmar un mensaje para provar que usted es dueño de esta dirección</translation>
- </message>
- <message>
- @@ -206,8 +206,8 @@
- <translation>Barra de pestañas</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Pide pagos (genera codigos QR and litecoin: URls)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Pide pagos (genera codigos QR and litecoincash: URls)</translation>
- </message>
- <message>
- <source>Error</source>
- @@ -363,8 +363,8 @@
- <translation>experto</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Abre automáticamente el puerto del cliente Litecoin en el router. Esto funciona solo cuando tu router es compatible con UPnP y está habilitado.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Abre automáticamente el puerto del cliente LitecoinCash en el router. Esto funciona solo cuando tu router es compatible con UPnP y está habilitado.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -687,7 +687,7 @@
- <translation>Firma</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>Firmar un mensjage para probar que usted es dueño de esta dirección</translation>
- </message>
- <message>
- @@ -772,8 +772,8 @@
- </translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>litecoin core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>litecoincash core</translation>
- </message>
- <message>
- <source>Error loading block database</source>
- diff --git a/src/qt/locale/bitcoin_es_CO.ts b/src/qt/locale/bitcoin_es_CO.ts
- index 1d10df4..5bc2b06 100644
- --- a/src/qt/locale/bitcoin_es_CO.ts
- +++ b/src/qt/locale/bitcoin_es_CO.ts
- @@ -126,8 +126,8 @@
- <translation>Abrir &URL...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviando monedas a una dirección de Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviando monedas a una dirección de LitecoinCash</translation>
- </message>
- <message>
- <source>Change the passphrase used for wallet encryption</source>
- @@ -146,8 +146,8 @@
- <translation>&Verificar Mensaje...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -296,8 +296,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Insufficient funds</source>
- diff --git a/src/qt/locale/bitcoin_es_DO.ts b/src/qt/locale/bitcoin_es_DO.ts
- index a3a3353..ea53f62 100644
- --- a/src/qt/locale/bitcoin_es_DO.ts
- +++ b/src/qt/locale/bitcoin_es_DO.ts
- @@ -142,8 +142,8 @@
- <translation>Reindexando bloques en disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar monedas a una dirección Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar monedas a una dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -166,8 +166,8 @@
- <translation>&Verificar mensaje...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -194,12 +194,12 @@
- <translation>Cifrar las claves privadas de su monedero</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Firmar mensajes con sus direcciones Litecoin para demostrar la propiedad</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Firmar mensajes con sus direcciones LitecoinCash para demostrar la propiedad</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verificar mensajes comprobando que están firmados con direcciones Litecoin concretas</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verificar mensajes comprobando que están firmados con direcciones LitecoinCash concretas</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -218,8 +218,8 @@
- <translation>Barra de pestañas</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Solicitar pagos (genera codigo QR y URL's de Litecoin)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Solicitar pagos (genera codigo QR y URL's de LitecoinCash)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -230,8 +230,8 @@
- <translation>Muestra la lista de direcciones de recepción y etiquetas</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Abrir un litecoin: URI o petición de pago</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Abrir un litecoincash: URI o petición de pago</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -494,8 +494,8 @@
- <translation>Experto</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Abrir automáticamente el puerto del cliente Litecoin en el router. Esta opción solo funciona si el router admite UPnP y está activado.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Abrir automáticamente el puerto del cliente LitecoinCash en el router. Esta opción solo funciona si el router admite UPnP y está activado.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -589,8 +589,8 @@
- <translation>Desde</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red Litecoin después de que se haya establecido una conexión, pero este proceso aún no se ha completado.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red LitecoinCash después de que se haya establecido una conexión, pero este proceso aún no se ha completado.</translation>
- </message>
- <message>
- <source>Your current spendable balance</source>
- @@ -1019,8 +1019,8 @@
- <translation>Copiar la firma actual al portapapeles del sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Firmar el mensaje para demostrar que se posee esta dirección Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Firmar el mensaje para demostrar que se posee esta dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1039,8 +1039,8 @@
- <translation>&Verificar mensaje</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar el mensaje para comprobar que fue firmado con la dirección Litecoin indicada</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar el mensaje para comprobar que fue firmado con la dirección LitecoinCash indicada</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1123,8 +1123,8 @@
- </translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Núcleo de Litecoin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Núcleo de LitecoinCash</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_es_ES.ts b/src/qt/locale/bitcoin_es_ES.ts
- index 82c0dc8..cc57970 100644
- --- a/src/qt/locale/bitcoin_es_ES.ts
- +++ b/src/qt/locale/bitcoin_es_ES.ts
- @@ -62,12 +62,12 @@
- <translation>Direcciones para recibir pagos</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Estas son sus direcciones Litecoin para enviar pagos. Verifique siempre la cantidad y la dirección de destino antes de enviar monedas.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Estas son sus direcciones LitecoinCash para enviar pagos. Verifique siempre la cantidad y la dirección de destino antes de enviar monedas.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Estas son sus direcciones Litecoin para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Estas son sus direcciones LitecoinCash para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Confirmar encriptación del monedero</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Advertencia: Si encripta su monedero y pierde su frase clave <b>PERDERÁ TODOS SUS LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Advertencia: Si encripta su monedero y pierde su frase clave <b>PERDERÁ TODOS SUS LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,7 +180,7 @@
- <translation>Monedero encriptado</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 se cerrará ahora para terminar el proceso de encriptación. Recuerde que encriptar su monedero no puede proteger completamente su monedero de ser robado por malware que infecte su ordenador.</translation>
- </message>
- <message>
- @@ -338,8 +338,8 @@
- <translation>Reindexando bloques en disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar litecoins a una dirección Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar coins a una dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Verificar mensaje...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Cifrar las claves privadas de su monedero</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Firmar mensajes con sus direcciones Litecoin para demostrar la propiedad</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Firmar mensajes con sus direcciones LitecoinCash para demostrar la propiedad</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verificar mensajes comprobando que están firmados con direcciones Litecoin concretas</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verificar mensajes comprobando que están firmados con direcciones LitecoinCash concretas</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Barra de pestañas</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Solicitar pagos (generando códigos QR e identificadores URI "litecoin:")</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Solicitar pagos (generando códigos QR e identificadores URI "litecoincash:")</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Muestra la lista de direcciones de recepción y etiquetas</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Abrir un identificador URI "litecoin:" o una petición de pago</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Abrir un identificador URI "litecoincash:" o una petición de pago</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Opciones de consola de comandos</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n conexión activa hacia la red Litecoin</numerusform><numerusform>%n conexiones activas hacia la red Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n conexión activa hacia la red LitecoinCash</numerusform><numerusform>%n conexiones activas hacia la red LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Actualizado</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Mostrar el mensaje de ayuda %1 para obtener una lista de los posibles comandos de linea de comandos de Litecoin</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Mostrar el mensaje de ayuda %1 para obtener una lista de los posibles comandos de linea de comandos de LitecoinCash</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>El monedero está <b>cifrado</b> y actualmente <b>bloqueado</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Ha ocurrido un error fatal. Litecoin no puede continuar de manera segura y se cerrará.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Ha ocurrido un error fatal. LitecoinCash no puede continuar de manera segura y se cerrará.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Editar dirección de envío</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>La dirección introducida "%1" no es una dirección Litecoin válida.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>La dirección introducida "%1" no es una dirección LitecoinCash válida.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Al ser la primera vez que se ejecuta el programa, puede elegir donde %1 almacenara sus datos</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 va a descargar y almacenar una copia de la cadena de bloques de Litecoin. Al menos %2GB de datos seran almacenados en este directorio, que ira creciendo con el tiempo. El monedero se guardara tambien en ese directorio. </translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 va a descargar y almacenar una copia de la cadena de bloques de LitecoinCash. Al menos %2GB de datos seran almacenados en este directorio, que ira creciendo con el tiempo. El monedero se guardara tambien en ese directorio. </translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,8 +886,8 @@
- <translation>Formulario</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Las transacciones recientes podrían no ser visibles todavía, por lo que el balance de la cartera podría ser incorrecto. Esta información será correcta una vez su cartera se haya terminado de sincronizar con la red litecoin, como se detalla más abajo.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Las transacciones recientes podrían no ser visibles todavía, por lo que el balance de la cartera podría ser incorrecto. Esta información será correcta una vez su cartera se haya terminado de sincronizar con la red litecoincash, como se detalla más abajo.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1044,16 +1044,16 @@
- <translation>&Gastar cambio no confirmado</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Abrir automáticamente el puerto del cliente Litecoin en el router. Esta opción solo funciona si el router admite UPnP y está activado.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Abrir automáticamente el puerto del cliente LitecoinCash en el router. Esta opción solo funciona si el router admite UPnP y está activado.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapear el puerto mediante &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Conectarse a la red Litecoin a través de un proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Conectarse a la red LitecoinCash a través de un proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1092,8 +1092,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Conectar a la red Litecoin mediante un proxy SOCKS5 por separado para los servicios ocultos de Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Conectar a la red LitecoinCash mediante un proxy SOCKS5 por separado para los servicios ocultos de Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1141,7 +1141,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían litecoins.</translation>
- + <translation>Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían coins.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1191,8 +1191,8 @@
- <translation>Formulario</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red Litecoin después de que se haya establecido una conexión, pero este proceso aún no se ha completado.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red LitecoinCash después de que se haya establecido una conexión, pero este proceso aún no se ha completado.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1266,8 +1266,8 @@
- <translation>Fallo en la solicitud de pago</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>No se puede iniciar litecoin: encargado click-para-pagar</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>No se puede iniciar litecoincash: encargado click-para-pagar</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1282,8 +1282,8 @@
- <translation>Dirección de pago inválida %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI no puede ser analizado! Esto puede ser causado por una dirección Litecoin inválida o parametros URI mal formados.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI no puede ser analizado! Esto puede ser causado por una dirección LitecoinCash inválida o parametros URI mal formados.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1376,8 +1376,8 @@
- <translation>Cantidad</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Introducir una dirección Litecoin (p. ej. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Introducir una dirección LitecoinCash (p. ej. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1792,8 +1792,8 @@
- <translation>R&eutilizar una dirección existente para recibir (no recomendado)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un mensaje opcional para adjuntar a la solicitud de pago, que se muestra cuando se abre la solicitud. Nota: El mensaje no se enviará con el pago por la red Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un mensaje opcional para adjuntar a la solicitud de pago, que se muestra cuando se abre la solicitud. Nota: El mensaje no se enviará con el pago por la red LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1946,7 +1946,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Enviar litecoins</translation>
- + <translation>Enviar coins</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -2025,8 +2025,8 @@
- <translation>total por lo menos</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Pagando solamente la cuota mínima es correcto, siempre y cuando haya menos volumen de transacciones que el espacio en los bloques. Pero tenga en cuenta que esto puede terminar en una transacción nunca confirmada, una vez que haya más demanda para transacciones Litecoin que la red pueda procesar.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Pagando solamente la cuota mínima es correcto, siempre y cuando haya menos volumen de transacciones que el espacio en los bloques. Pero tenga en cuenta que esto puede terminar en una transacción nunca confirmada, una vez que haya más demanda para transacciones LitecoinCash que la red pueda procesar.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2185,8 +2185,8 @@
- <translation>Pagar únicamente la cuota solicitada de %1</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Alerta: dirección Litecoin inválida</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Alerta: dirección LitecoinCash inválida</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2228,8 +2228,8 @@
- <translation>Esto es un pago ordinario.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Dirección Litecoin a la que enviar el pago</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Dirección LitecoinCash a la que enviar el pago</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2248,8 +2248,8 @@
- <translation>Eliminar esta transacción</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>La cuota será deducida de la cantidad que sea mandada. El destinatario recibirá menos litecoins de los que entres en el </translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>La cuota será deducida de la cantidad que sea mandada. El destinatario recibirá menos coins de los que entres en el </translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2272,8 +2272,8 @@
- <translation>Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Un mensaje que se adjuntó a la litecoin: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Un mensaje que se adjuntó a la litecoincash: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2317,12 +2317,12 @@
- <translation>&Firmar mensaje</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Puede firmar los mensajes con sus direcciones para demostrar que las posee. Tenga cuidado de no firmar cualquier cosa de manera vaga o aleatoria, pues los ataques de phishing pueden tratar de engañarle firmando su identidad a través de ellos. Sólo firme declaraciones totalmente detalladas con las que usted esté de acuerdo.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Dirección Litecoin con la que firmar el mensaje</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>Dirección LitecoinCash con la que firmar el mensaje</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2353,8 +2353,8 @@
- <translation>Copiar la firma actual al portapapeles del sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Firmar el mensaje para demostrar que se posee esta dirección Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Firmar el mensaje para demostrar que se posee esta dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2377,12 +2377,12 @@
- <translation>Introduzca la dirección para la firma, el mensaje (asegurándose de copiar tal cual los saltos de línea, espacios, tabulaciones, etc.) y la firma a continuación para verificar el mensaje. Tenga cuidado de no asumir más información de lo que dice el propio mensaje firmado para evitar fraudes basados en ataques de tipo man-in-the-middle. </translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>La dirección Litecoin con la que se firmó el mensaje</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>La dirección LitecoinCash con la que se firmó el mensaje</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar el mensaje para comprobar que fue firmado con la dirección Litecoin indicada</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar el mensaje para comprobar que fue firmado con la dirección LitecoinCash indicada</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2595,7 +2595,7 @@
- </message>
- <message>
- <source>Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source>
- - <translation>Los litecoins generados deben madurar %1 bloques antes de que puedan gastarse. Cuando generó este bloque, se transmitió a la red para que se añadiera a la cadena de bloques. Si no consigue entrar en la cadena, su estado cambiará a "no aceptado" y ya no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del suyo.</translation>
- + <translation>Los coins generados deben madurar %1 bloques antes de que puedan gastarse. Cuando generó este bloque, se transmitió a la red para que se añadiera a la cadena de bloques. Si no consigue entrar en la cadena, su estado cambiará a "no aceptado" y ya no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del suyo.</translation>
- </message>
- <message>
- <source>Debug information</source>
- @@ -3017,8 +3017,8 @@
- <translation>No se ha podido comenzar el servidor HTTP. Ver debug log para detalles.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_es_MX.ts b/src/qt/locale/bitcoin_es_MX.ts
- index f718645..857a1fb 100644
- --- a/src/qt/locale/bitcoin_es_MX.ts
- +++ b/src/qt/locale/bitcoin_es_MX.ts
- @@ -150,8 +150,8 @@
- <translation>Reindexando bloques en el disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar monedas a una dirección Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar monedas a una dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -174,8 +174,8 @@
- <translation>&Verificar mensaje...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -418,8 +418,8 @@
- <translation>Mensaje:</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Mensaje opcional para agregar a la solicitud de pago, el cual será mostrado cuando la solicitud este abierta. Nota: El mensaje no se manda con el pago a travéz de la red de Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Mensaje opcional para agregar a la solicitud de pago, el cual será mostrado cuando la solicitud este abierta. Nota: El mensaje no se manda con el pago a travéz de la red de LitecoinCash.</translation>
- </message>
- <message>
- <source>Use this form to request payments. All fields are <b>optional</b>.</source>
- @@ -608,8 +608,8 @@
- <translation>Opciones:</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>nucleo Litecoin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>nucleo LitecoinCash</translation>
- </message>
- <message>
- <source><category> can be:</source>
- diff --git a/src/qt/locale/bitcoin_es_UY.ts b/src/qt/locale/bitcoin_es_UY.ts
- index 7c9e0e0..05c6827 100644
- --- a/src/qt/locale/bitcoin_es_UY.ts
- +++ b/src/qt/locale/bitcoin_es_UY.ts
- @@ -110,16 +110,16 @@
- <translation>Recibiendo direcciones</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar monedas a una dirección Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar monedas a una dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Change the passphrase used for wallet encryption</source>
- <translation>Cambie la clave utilizada para el cifrado del monedero</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- diff --git a/src/qt/locale/bitcoin_es_VE.ts b/src/qt/locale/bitcoin_es_VE.ts
- index 80f2e41..3fe133a 100644
- --- a/src/qt/locale/bitcoin_es_VE.ts
- +++ b/src/qt/locale/bitcoin_es_VE.ts
- @@ -114,8 +114,8 @@
- <translation>Reindexando bloques en el disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar monedas a una dirección Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar monedas a una dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -130,8 +130,8 @@
- <translation>Abre la consola de depuración y diágnostico</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -158,12 +158,12 @@
- <translation>Encriptar las llaves privadas que pertenecen a tu billetera</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Firma mensajes con tus direcciones Litecoin para probar que eres dueño de ellas</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Firma mensajes con tus direcciones LitecoinCash para probar que eres dueño de ellas</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verificar mensajes para asegurar que estaban firmados con direcciones Litecoin especificas</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verificar mensajes para asegurar que estaban firmados con direcciones LitecoinCash especificas</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -608,8 +608,8 @@
- <translation>Correr en segundo plano como daemon y aceptar comandos</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts
- index e994878..3525f83 100644
- --- a/src/qt/locale/bitcoin_et.ts
- +++ b/src/qt/locale/bitcoin_et.ts
- @@ -62,12 +62,12 @@
- <translation>Vastuvõtvad aadressid</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Need on sinu Litecoin aadressid maksete saatmiseks. Ennem müntide saatmist kontrolli alati summat ja makse saaja aadressi.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Need on sinu LitecoinCash aadressid maksete saatmiseks. Ennem müntide saatmist kontrolli alati summat ja makse saaja aadressi.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Need on sinu Litecoin aadressid sisenevate maksete vastu võtmiseks. Soovitav on iga tehingu tarbeks kasutada uut aadressi.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Need on sinu LitecoinCash aadressid sisenevate maksete vastu võtmiseks. Soovitav on iga tehingu tarbeks kasutada uut aadressi.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Kinnita rahakoti krüpteerimine.</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Hoiatus:Kui sa krüpteerid oma rahakoti ja kaotad salafraasi, siis sa<b>KAOTAD OMA LITECOINID</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Hoiatus:Kui sa krüpteerid oma rahakoti ja kaotad salafraasi, siis sa<b>KAOTAD OMA LITECOINCASHID</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -290,8 +290,8 @@
- <translation>Kettal olevate blokkide re-indekseerimine...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Saada münte Litecoini aadressile</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Saada münte LitecoinCashi aadressile</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -314,8 +314,8 @@
- <translation>&Kontrolli sõnumit...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -342,12 +342,12 @@
- <translation>Krüpteeri oma rahakoti privaatvõtmed</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Omandi tõestamiseks allkirjasta sõnumid oma Litecoini aadressiga</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Omandi tõestamiseks allkirjasta sõnumid oma LitecoinCashi aadressiga</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Kinnita sõnumid kindlustamaks et need allkirjastati määratud Litecoini aadressiga</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Kinnita sõnumid kindlustamaks et need allkirjastati määratud LitecoinCashi aadressiga</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -366,20 +366,20 @@
- <translation>Vahelehe tööriistariba</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Loo maksepäring (genereerib QR koodid ja litecoini: URId)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Loo maksepäring (genereerib QR koodid ja litecoincashi: URId)</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Ava litecoini: URI või maksepäring</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Ava litecoincashi: URI või maksepäring</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Käsurea valikud</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktiivne ühendus Litecoini võrku</numerusform><numerusform>%n aktiivset ühendust Litecoini võrku</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktiivne ühendus LitecoinCashi võrku</numerusform><numerusform>%n aktiivset ühendust LitecoinCashi võrku</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -626,8 +626,8 @@
- <translation>Muuda saatvat aadressi</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Sisestatud aadress "%1" ei ole korrektne Litecoin aadress.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Sisestatud aadress "%1" ei ole korrektne LitecoinCash aadress.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -756,8 +756,8 @@
- <translation>Ekspert</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Litecoini kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>LitecoinCashi kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -855,7 +855,7 @@
- <translation>Vorm</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- <translation>Kuvatav info ei pruugi olla ajakohane. Ühenduse loomisel süngitakse sinu rahakott automaatselt Liteconi võrgustikuga, kuid see toiming on hetkel lõpetamata.</translation>
- </message>
- <message>
- @@ -1337,8 +1337,8 @@
- <translation>Maksepäring aegunud.</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Hoiatus: Ebakorrektne Litecoin aadress</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Hoiatus: Ebakorrektne LitecoinCash aadress</translation>
- </message>
- <message>
- <source>(no label)</source>
- @@ -1417,8 +1417,8 @@
- <translation>&Allkirjastamise teade</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoin aadress millega sõnum allkirjastada</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCash aadress millega sõnum allkirjastada</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -1449,8 +1449,8 @@
- <translation>Kopeeri praegune signatuur vahemällu</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Allkirjasta sõnum Litecoini aadressi sulle kuulumise tõestamiseks</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Allkirjasta sõnum LitecoinCashi aadressi sulle kuulumise tõestamiseks</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1469,12 +1469,12 @@
- <translation>&Kinnita Sõnum</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Litecoin aadress millega sõnum on allkirjastatud</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>LitecoinCash aadress millega sõnum on allkirjastatud</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Kinnita sõnum tõestamaks selle allkirjastatust määratud Litecoini aadressiga.</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Kinnita sõnum tõestamaks selle allkirjastatust määratud LitecoinCashi aadressiga.</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1758,8 +1758,8 @@
- <translation>Tööta taustal ning aktsepteeri käsklusi</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoini tuumik</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCashi tuumik</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_et_EE.ts b/src/qt/locale/bitcoin_et_EE.ts
- index fca1ffb..e6e3ce2 100644
- --- a/src/qt/locale/bitcoin_et_EE.ts
- +++ b/src/qt/locale/bitcoin_et_EE.ts
- @@ -130,8 +130,8 @@
- <translation>Kõvakettal olevate plokkide reindekseerimine...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -760,8 +760,8 @@
- <translation>Valikud:</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Information</source>
- diff --git a/src/qt/locale/bitcoin_eu_ES.ts b/src/qt/locale/bitcoin_eu_ES.ts
- index 5be1b05..85bbc8b 100644
- --- a/src/qt/locale/bitcoin_eu_ES.ts
- +++ b/src/qt/locale/bitcoin_eu_ES.ts
- @@ -62,12 +62,12 @@
- <translation>Helbideak jasotzen</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Hauek dira zure Litecoin helbideak dirua bidaltzeko. Beti egiaztatu diru-kantitatea eta jasotzeko helbidea bidali baino lehen.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Hauek dira zure LitecoinCash helbideak dirua bidaltzeko. Beti egiaztatu diru-kantitatea eta jasotzeko helbidea bidali baino lehen.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Hauek dira zure Litecoin helbideak dirua jasotzeko. Gomendagarria da erabiltzea jasotzeko helbide berri bat operazio bakoitzeko.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Hauek dira zure LitecoinCash helbideak dirua jasotzeko. Gomendagarria da erabiltzea jasotzeko helbide berri bat operazio bakoitzeko.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -160,8 +160,8 @@
- <translation>Berretsi zorroaren enkriptazioa</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Abisua: Zuk enkriptatzen baduzu zure diruzorroa eta zure pasahitza galtzen baduzu, <b>LITECOIN GUZTIAK GALDUKO DITUZU</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Abisua: Zuk enkriptatzen baduzu zure diruzorroa eta zure pasahitza galtzen baduzu, <b>LITECOINCASH GUZTIAK GALDUKO DITUZU</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -239,7 +239,7 @@
- </message>
- <message>
- <source>Show information about Qt</source>
- - <translation>Erakutsi Litecoin-i buruzko informazioa</translation>
- + <translation>Erakutsi LitecoinCash-i buruzko informazioa</translation>
- </message>
- <message>
- <source>&Options...</source>
- diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts
- index 88d88ac..b9478b5 100644
- --- a/src/qt/locale/bitcoin_fa.ts
- +++ b/src/qt/locale/bitcoin_fa.ts
- @@ -62,7 +62,7 @@
- <translation>???? ??? ??????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>????? ???? ??? ??? ???? ??????? ?????? ????. ????? ??? ?? ??????? ??? ?? ????? ? ???? ?????? ????? ?? ?? ????.</translation>
- </message>
- <message>
- @@ -298,8 +298,8 @@
- <translation>???????? ??????? ??? ????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>????? ??? ?? ????? Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>????? ??? ?? ????? LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -322,8 +322,8 @@
- <translation>??&????? ????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -350,12 +350,12 @@
- <translation>???????? ??????? ????? ????? ?? ??? ??? ???</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>???? ????? ????? ??????? ?? ??? ???? ?????? ????? ?? ?? ????? Litecoin ??? ???? ????</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>???? ????? ????? ??????? ?? ??? ???? ?????? ????? ?? ?? ????? LitecoinCash ??? ???? ????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>???? ???? ??????? ?? ????? ???? ?? ????? Litecoin ???? ??? ???? ??? ?? ???? ???? ?? ??????? ????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>???? ???? ??????? ?? ????? ???? ?? ????? LitecoinCash ???? ??? ???? ??? ?? ???? ???? ?? ??????? ????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -374,8 +374,8 @@
- <translation>????????? ???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>??????? ?????? ( ????? ?? ????? ? ???? litecoin)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>??????? ?????? ( ????? ?? ????? ? ???? litecoincash)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -386,16 +386,16 @@
- <translation>????? ???? ???? ??? ?????? ? ???? ??</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>??????? ?? litecoin: ???? ?? ??????? ??????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>??????? ?? litecoincash: ???? ?? ??????? ??????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>????????? ????????</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ?????? ???? ?? ????? Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ?????? ???? ?? ????? LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Processing blocks on disk...</source>
- @@ -642,8 +642,8 @@
- <translation>?????? ???? ???????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>????? ???? ??? "%1" ?? ????? ????? Litecoin ????.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>????? ???? ??? "%1" ?? ????? ????? LitecoinCash ????.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -852,8 +852,8 @@
- <translation>???????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>??? ???? ?????? ????? ????? Litecoin ??? ??????. ???? ????? ??? ?????? ?? ???? ?? ?????? UPnP ???????? ??? ? ??? ?????? ???? ????.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>??? ???? ?????? ????? ????? LitecoinCash ??? ??????. ???? ????? ??? ?????? ?? ???? ?? ?????? UPnP ???????? ??? ? ??? ?????? ???? ????.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -951,8 +951,8 @@
- <translation>???</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>??????? ?????????? ??? ???? ??? ????? ?????. ??? ?? ??? ?? ?? ????? ?? ???? ?????? ??? ??? ??? ??? ??????? ?????? ?? ????? Litecoin ?????????? ??????. ??? ??? ???? ???? ???? ???? ???.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>??????? ?????????? ??? ???? ??? ????? ?????. ??? ?? ??? ?? ?? ????? ?? ???? ?????? ??? ??? ??? ??? ??????? ?????? ?? ????? LitecoinCash ?????????? ??????. ??? ??? ???? ???? ???? ???? ???.</translation>
- </message>
- <message>
- <source>Available:</source>
- @@ -1016,8 +1016,8 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>?? ???? Litecoin ???? ???? (????? %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>?? ???? LitecoinCash ???? ???? (????? %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1476,8 +1476,8 @@
- <translation>??? ?? ?????? ???? ???</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>????? Litecoin ???? ????? ?????? ?? ??</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>????? LitecoinCash ???? ????? ?????? ?? ??</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1529,8 +1529,8 @@
- <translation>?&???? ????</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>????? Litecoin ???? ????? ????? ?? ??</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>????? LitecoinCash ???? ????? ????? ?? ??</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -1561,7 +1561,7 @@
- <translation>????? ???? ?? ?? ?????? ????? ??? ??</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>???? ????? ???? ??? ????? ?? ???? ???? ?? ???? ????</translation>
- </message>
- <message>
- @@ -1581,12 +1581,12 @@
- <translation>&??????? ????</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>????? Litecoin ?? ????? ?? ?? ????? ???</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>????? LitecoinCash ?? ????? ?? ?? ????? ???</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>???? ???? ??????? ?? ????? ???? ?? ????? Litecoin ???? ??? ???? ??? ?? ???? ???? ?? ??????? ????</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>???? ???? ??????? ?? ????? ???? ?? ????? LitecoinCash ???? ??? ???? ??? ?? ???? ???? ?? ??????? ????</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1702,8 +1702,8 @@
- <translation>???? ?? ??? ????? ??????? ?? ????? ? ????? ???????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation> ???? Litecoin </translation>
- + <source>LitecoinCash Core</source>
- + <translation> ???? LitecoinCash </translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_fa_IR.ts b/src/qt/locale/bitcoin_fa_IR.ts
- index 1168dfb..1dcd4c0 100644
- --- a/src/qt/locale/bitcoin_fa_IR.ts
- +++ b/src/qt/locale/bitcoin_fa_IR.ts
- @@ -62,11 +62,11 @@
- <translation>???????? ??????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>????? ???????? ??????? ??? ???? ????? ???? ?????. ????? ??? ?? ?????? ????? ? ???? ?????? ?? ????? ????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>????? ???????? ??????? ??? ???? ?????? ???? ?????. ????? ?????? ???? ?? ?????? ?? ?? ???? ???? ??????? ????.</translation>
- </message>
- <message>
- @@ -206,8 +206,8 @@
- <translation>?????? ???? ??</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>????? ???? ?? ???? litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>????? ???? ?? ???? litecoincash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -226,8 +226,8 @@
- <translation>????? ????</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>litecoincash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -505,8 +505,8 @@
- <translation>???</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>??????? ????? ???? ??? ???? ??? ?????? ?????. wallet ??? ?? ???? ?????? ??? ?? ??????? ????? ?? ???? litecoin ?? ??? ?? ??? ??? ??? ?????? ???? ????? ???? ???.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>??????? ????? ???? ??? ???? ??? ?????? ?????. wallet ??? ?? ???? ?????? ??? ?? ??????? ????? ?? ???? litecoincash ?? ??? ?? ??? ??? ??? ?????? ???? ????? ???? ???.</translation>
- </message>
- <message>
- <source>Available:</source>
- diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts
- index 40d997e..939bc18 100644
- --- a/src/qt/locale/bitcoin_fi.ts
- +++ b/src/qt/locale/bitcoin_fi.ts
- @@ -62,12 +62,12 @@
- <translation>Vastaanotto-osoitteet</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Nämä ovat Litecoin-osoitteesi maksujen lähettämistä varten. Tarkista aina määrä ja vastaanotto-osoite ennen kolikoiden lähettämistä.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Nämä ovat LitecoinCash-osoitteesi maksujen lähettämistä varten. Tarkista aina määrä ja vastaanotto-osoite ennen kolikoiden lähettämistä.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Tässä ovat Litecoin vastaanotto-osoitteesi. On suositeltavaa käyttää uutta vastaanotto-osoitetta jokaista lähetystä varten.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Tässä ovat LitecoinCash vastaanotto-osoitteesi. On suositeltavaa käyttää uutta vastaanotto-osoitetta jokaista lähetystä varten.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Vahvista lompakon salaaminen</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Varoitus: Jos salaat lompakkosi ja menetät tunnuslauseesi, <b>MENETÄT KAIKKI LITECOINISI</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Varoitus: Jos salaat lompakkosi ja menetät tunnuslauseesi, <b>MENETÄT KAIKKI LITECOINCASHISI</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,7 +180,7 @@
- <translation>Lompakko salattiin</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 sulkeutuu lopettaakseen salausprosessin. Muista, että salattukaan lompakko ei täysin suojaa sitä haittaohjelmien aiheuttamilta varkauksilta.</translation>
- </message>
- <message>
- @@ -338,8 +338,8 @@
- <translation>Ladataan lohkoindeksiä...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Lähetä kolikoita Litecoin-osoitteeseen</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Lähetä kolikoita LitecoinCash-osoitteeseen</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>Varmista &viesti...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -383,19 +383,19 @@
- </message>
- <message>
- <source>Show or hide the main Window</source>
- - <translation>Näytä tai piilota Litecoin-ikkuna</translation>
- + <translation>Näytä tai piilota LitecoinCash-ikkuna</translation>
- </message>
- <message>
- <source>Encrypt the private keys that belong to your wallet</source>
- <translation>Suojaa yksityiset avaimet, jotka kuuluvat lompakkoosi</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Allekirjoita viestisi omalla Litecoin -osoitteellasi todistaaksesi, että omistat ne</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Allekirjoita viestisi omalla LitecoinCash -osoitteellasi todistaaksesi, että omistat ne</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Varmista, että viestisi on allekirjoitettu määritetyllä Litecoin -osoitteella</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Varmista, että viestisi on allekirjoitettu määritetyllä LitecoinCash -osoitteella</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Välilehtipalkki</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Pyydä maksuja (Luo QR koodit ja litecoin: URIt)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Pyydä maksuja (Luo QR koodit ja litecoincash: URIt)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Näytä vastaanottamiseen käytettyjen osoitteiden ja nimien lista</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Avaa litecoin: URI tai maksupyyntö</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Avaa litecoincash: URI tai maksupyyntö</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Komentorivin valinnat</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktiivinen yhteys Litecoin-verkkoon</numerusform><numerusform>%n aktiivista yhteyttä Litecoin-verkkoon</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktiivinen yhteys LitecoinCash-verkkoon</numerusform><numerusform>%n aktiivista yhteyttä LitecoinCash-verkkoon</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Rahansiirtohistoria on ajan tasalla</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Näytä %1 ohjeet saadaksesi listan mahdollisista Litecoinin komentorivivalinnoista</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Näytä %1 ohjeet saadaksesi listan mahdollisista LitecoinCashin komentorivivalinnoista</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>Lompakko on <b>salattu</b> ja tällä hetkellä <b>lukittuna</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Peruuttamaton virhe on tapahtunut. Litecoin ei voi enää jatkaa turvallisesti ja sammutetaan.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Peruuttamaton virhe on tapahtunut. LitecoinCash ei voi enää jatkaa turvallisesti ja sammutetaan.</translation>
- </message>
- </context>
- <context>
- @@ -734,8 +734,8 @@
- <translation>Muokkaa lähettävää osoitetta</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Antamasi osoite "%1" ei ole kelvollinen Litecoin-osoite.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Antamasi osoite "%1" ei ole kelvollinen LitecoinCash-osoite.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -843,8 +843,8 @@
- <translation>Tämä on ensimmäinen kerta, kun %1 on käynnistetty, joten voit valita data-hakemiston paikan.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 lataa ja tallentaa kopion Litecoinin lohkoketjusta. Vähintään %2Gt dataa tullaan tallentamaan tähän hakemistoon, ja tarve kasvaa ajan myötä. Lompakko tullaan myös tallentamaan tähän hakemistoon.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 lataa ja tallentaa kopion LitecoinCashin lohkoketjusta. Vähintään %2Gt dataa tullaan tallentamaan tähän hakemistoon, ja tarve kasvaa ajan myötä. Lompakko tullaan myös tallentamaan tähän hakemistoon.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -1020,16 +1020,16 @@
- <translation>&Käytä varmistamattomia vaihtorahoja</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Avaa Litecoin-asiakasohjelman portti reitittimellä automaattisesti. Tämä toimii vain, jos reitittimesi tukee UPnP:tä ja se on käytössä.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Avaa LitecoinCash-asiakasohjelman portti reitittimellä automaattisesti. Tämä toimii vain, jos reitittimesi tukee UPnP:tä ja se on käytössä.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Portin uudelleenohjaus &UPnP:llä</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Yhdistä Litecoin-verkkoon SOCKS5-välityspalvelimen kautta.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Yhdistä LitecoinCash-verkkoon SOCKS5-välityspalvelimen kautta.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1068,8 +1068,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Yhdistä Litecoin-verkkoon erillisen SOCKS5-välityspalvelimen kautta piilotettuja Tor-palveluja varten.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Yhdistä LitecoinCash-verkkoon erillisen SOCKS5-välityspalvelimen kautta piilotettuja Tor-palveluja varten.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1105,11 +1105,11 @@
- </message>
- <message>
- <source>&Unit to show amounts in:</source>
- - <translation>Yksikkö jona litecoin-määrät näytetään</translation>
- + <translation>Yksikkö jona litecoincash-määrät näytetään</translation>
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Valitse mitä yksikköä käytetään ensisijaisesti litecoin-määrien näyttämiseen.</translation>
- + <translation>Valitse mitä yksikköä käytetään ensisijaisesti litecoincash-määrien näyttämiseen.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1159,8 +1159,8 @@
- <translation>Lomake</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Näytetyt tiedot eivät välttämättä ole ajantasalla. Lompakkosi synkronoituu Litecoin-verkon kanssa automaattisesti yhteyden muodostamisen jälkeen, mutta synkronointi on vielä meneillään.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Näytetyt tiedot eivät välttämättä ole ajantasalla. Lompakkosi synkronoituu LitecoinCash-verkon kanssa automaattisesti yhteyden muodostamisen jälkeen, mutta synkronointi on vielä meneillään.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1200,7 +1200,7 @@
- </message>
- <message>
- <source>Your current total balance</source>
- - <translation>Tililläsi tällä hetkellä olevien Litecoinien määrä</translation>
- + <translation>Tililläsi tällä hetkellä olevien LitecoinCashien määrä</translation>
- </message>
- <message>
- <source>Your current balance in watch-only addresses</source>
- @@ -1252,8 +1252,8 @@
- <translation>Määrä</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Syötä Litecoin-osoite (esim. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Syötä LitecoinCash-osoite (esim. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1620,8 +1620,8 @@
- <translation>&Uudelleenkäytä vastaanotto-osoitetta (ei suositella)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Valinnainen viesti liitetään maksupyyntöön ja näytetään avattaessa. Viestiä ei lähetetä Litecoin-verkkoon.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Valinnainen viesti liitetään maksupyyntöön ja näytetään avattaessa. Viestiä ei lähetetä LitecoinCash-verkkoon.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1746,7 +1746,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Lähetä Litecoineja</translation>
- + <translation>Lähetä LitecoinCasheja</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -1940,8 +1940,8 @@
- <translation>Tämä on normaali maksu.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Litecoin-osoite johon maksu lähetetään</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>LitecoinCash-osoite johon maksu lähetetään</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1960,8 +1960,8 @@
- <translation>Poista tämä alkio</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Kulu vähennetään lähetettävästä määrästä. Saaja vastaanottaa vähemmän litecoineja kuin merkitset Määrä-kenttään. Jos saajia on monia, kulu jaetaan tasan.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Kulu vähennetään lähetettävästä määrästä. Saaja vastaanottaa vähemmän litecoincasheja kuin merkitset Määrä-kenttään. Jos saajia on monia, kulu jaetaan tasan.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -1984,8 +1984,8 @@
- <translation>Aseta nimi tälle osoitteelle lisätäksesi sen käytettyjen osoitteiden listalle.</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Viesti joka liitettiin litecoin: URI:iin tallennetaan rahansiirtoon viitteeksi. Tätä viestiä ei lähetetä Litecoin-verkkoon.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Viesti joka liitettiin litecoincash: URI:iin tallennetaan rahansiirtoon viitteeksi. Tätä viestiä ei lähetetä LitecoinCash-verkkoon.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2025,8 +2025,8 @@
- <translation>&Allekirjoita viesti</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoin-osoite jolla viesti allekirjoitetaan</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCash-osoite jolla viesti allekirjoitetaan</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2057,8 +2057,8 @@
- <translation>Kopioi tämänhetkinen allekirjoitus leikepöydälle</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Allekirjoita viesti todistaaksesi, että omistat tämän Litecoin-osoitteen</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Allekirjoita viesti todistaaksesi, että omistat tämän LitecoinCash-osoitteen</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2077,12 +2077,12 @@
- <translation>&Varmista viesti</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Litecoin-osoite jolla viesti on allekirjoitettu</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>LitecoinCash-osoite jolla viesti on allekirjoitettu</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä Litecoin-osoitteella</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä LitecoinCash-osoitteella</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2430,8 +2430,8 @@
- <translation>HTTP-palvelinta ei voitu käynnistää. Katso debug-lokista lisätietoja.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin-ydin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash-ydin</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts
- index fb7fd32..1ca34ae 100644
- --- a/src/qt/locale/bitcoin_fr.ts
- +++ b/src/qt/locale/bitcoin_fr.ts
- @@ -62,12 +62,12 @@
- <translation>Adresses de réception</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Voici vos adresses Litecoin pour envoyer des paiements. Vérifiez toujours le montant et l'adresse du destinataire avant d'envoyer des pièces.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Voici vos adresses LitecoinCash pour envoyer des paiements. Vérifiez toujours le montant et l'adresse du destinataire avant d'envoyer des pièces.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Voici vos adresses Litecoin pour recevoir des paiements. Il est recommandé d'utiliser une nouvelle adresse de réception pour chaque transaction.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Voici vos adresses LitecoinCash pour recevoir des paiements. Il est recommandé d'utiliser une nouvelle adresse de réception pour chaque transaction.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Confirmer le chiffrement du porte-monnaie</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Avertissement : si vous chiffrez votre porte-monnaie et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS LITECOINS</b> !</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Avertissement : si vous chiffrez votre porte-monnaie et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS LCC</b> !</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Le porte-monnaie est chiffré</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 va maintenant se fermer pour terminer le processus de chiffrement. Souvenez-vous que le chiffrement de votre porte-monnaie ne peut pas protéger entièrement vos litecoins contre le vol par des logiciels malveillants qui infecteraient votre ordinateur.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 va maintenant se fermer pour terminer le processus de chiffrement. Souvenez-vous que le chiffrement de votre porte-monnaie ne peut pas protéger entièrement vos coins contre le vol par des logiciels malveillants qui infecteraient votre ordinateur.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Réindexation des blocs sur le disque...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Envoyer des pièces à une adresse Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Envoyer des pièces à une adresse LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Vérifier un message...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Chiffrer les clés privées qui appartiennent à votre porte-monnaie</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signer les messages avec vos adresses Litecoin pour prouver que vous les détenez</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signer les messages avec vos adresses LitecoinCash pour prouver que vous les détenez</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Vérifier les messages pour s'assurer qu'ils ont été signés avec les adresses Litecoin spécifiées</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Vérifier les messages pour s'assurer qu'ils ont été signés avec les adresses LitecoinCash spécifiées</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Barre d'outils des onglets</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Demander des paiements (génère des codes QR et des URI litecoin:)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Demander des paiements (génère des codes QR et des URI litecoincash:)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Afficher la liste d'adresses de réception et d'étiquettes utilisées</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Ouvrir une URI litecoin: ou une demande de paiement</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Ouvrir une URI litecoincash: ou une demande de paiement</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Options de ligne de &commande</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n connexion active avec le réseau Litecoin</numerusform><numerusform>%n connexions actives avec le réseau Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n connexion active avec le réseau LitecoinCash</numerusform><numerusform>%n connexions actives avec le réseau LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>À jour</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Afficher le message d'aide de %1 pour obtenir la liste des options de ligne de commande Litecoin possibles.</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Afficher le message d'aide de %1 pour obtenir la liste des options de ligne de commande LitecoinCash possibles.</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>Le porte-monnaie est <b>chiffré</b> et actuellement <b>verrouillé</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Une erreur fatale est survenue. Litecoin ne peut plus continuer en toute sécurité et va s'arrêter.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Une erreur fatale est survenue. LitecoinCash ne peut plus continuer en toute sécurité et va s'arrêter.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Modifier l?adresse d'envoi</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>L'adresse saisie « %1 » n'est pas une adresse Litecoin valide.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>L'adresse saisie « %1 » n'est pas une adresse LitecoinCash valide.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Puisque c'est la première fois que le logiciel est lancé, vous pouvez choisir où %1 stockera ses données.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 téléchargera et stockera une copie de la chaîne de blocs de Litecoin. Au moins %2 Go de données seront stockés dans ce répertoire et sa taille augmentera avec le temps. Le porte-monnaie sera également stocké dans ce répertoire.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 téléchargera et stockera une copie de la chaîne de blocs de LitecoinCash. Au moins %2 Go de données seront stockés dans ce répertoire et sa taille augmentera avec le temps. Le porte-monnaie sera également stocké dans ce répertoire.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>Formulaire</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Les transactions récentes ne sont peut-être pas encore visibles et par conséquent le solde de votre porte-monnaie est peut-être erroné. Cette information sera juste quand votre porte-monnaie aura fini de se synchroniser avec le réseau Litecoin, comme décrit ci-dessous.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Les transactions récentes ne sont peut-être pas encore visibles et par conséquent le solde de votre porte-monnaie est peut-être erroné. Cette information sera juste quand votre porte-monnaie aura fini de se synchroniser avec le réseau LitecoinCash, comme décrit ci-dessous.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Toute tentative de dépense de litecoins affectés par des transactions qui ne sont pas encore affichées ne sera pas acceptée par le réseau.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Toute tentative de dépense de coins affectés par des transactions qui ne sont pas encore affichées ne sera pas acceptée par le réseau.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>&Dépenser la monnaie non confirmée</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Ouvrir automatiquement le port du client Litecoin sur le routeur. Cela ne fonctionne que si votre routeur prend en charge l'UPnP et si la fonction est activée.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Ouvrir automatiquement le port du client LitecoinCash sur le routeur. Cela ne fonctionne que si votre routeur prend en charge l'UPnP et si la fonction est activée.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapper le port avec l'&UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Se connecter au réseau Litecoin par un mandataire SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Se connecter au réseau LitecoinCash par un mandataire SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Se connecter au réseau Litecoin au travers d'un mandataire SOCKS5 séparé pour les services cachés de Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Se connecter au réseau LitecoinCash au travers d'un mandataire SOCKS5 séparé pour les services cachés de Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1195,8 +1195,8 @@
- <translation>Formulaire</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Les informations affichées peuvent être obsolètes. Votre porte-monnaie est automatiquement synchronisé avec le réseau Litecoin lorsque la connexion s'établit, or ce processus n'est pas encore terminé.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Les informations affichées peuvent être obsolètes. Votre porte-monnaie est automatiquement synchronisé avec le réseau LitecoinCash lorsque la connexion s'établit, or ce processus n'est pas encore terminé.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>Erreur de demande de paiement</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Impossible de démarrer le gestionnaire de cliquer-pour-payer litecoin:</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Impossible de démarrer le gestionnaire de cliquer-pour-payer litecoincash:</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>Adresse de paiement invalide %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>L'URI ne peut pas être analysée ! Cela peut être causé par une adresse Litecoin invalide ou par des paramètres d'URI mal formés.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>L'URI ne peut pas être analysée ! Cela peut être causé par une adresse LitecoinCash invalide ou par des paramètres d'URI mal formés.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>Montant</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Saisir une adresse Litecoin (p. ex. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Saisir une adresse LitecoinCash (p. ex. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>Ré&utiliser une adresse de réception existante (non recommandé)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un message facultatif à joindre à la demande de paiement et qui sera affiché à l'ouverture de celle-ci. Note : le message ne sera pas envoyé avec le paiement par le réseau Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un message facultatif à joindre à la demande de paiement et qui sera affiché à l'ouverture de celle-ci. Note : le message ne sera pas envoyé avec le paiement par le réseau LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2037,7 +2037,7 @@
- <translation>total au moins</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>Il est correct de payer les frais minimum tant que le volume transactionnel est inférieur à l'espace dans les blocs. Mais soyez conscient que cela pourrait résulter en une transaction n'étant jamais confirmée une fois qu'il y aura plus de transactions que le réseau ne pourra en traiter.</translation>
- </message>
- <message>
- @@ -2201,8 +2201,8 @@
- <translation><numerusform>Il est estimé que la confirmation commencera dans %n bloc.</numerusform><numerusform>Il est estimé que la confirmation commencera dans %n blocs.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Avertissement : adresse Litecoin invalide</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Avertissement : adresse LitecoinCash invalide</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2244,8 +2244,8 @@
- <translation>Ceci est un paiement normal.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>L'adresse Litecoin à laquelle envoyer le paiement</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>L'adresse LitecoinCash à laquelle envoyer le paiement</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2264,8 +2264,8 @@
- <translation>Retirer cette entrée</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Les frais seront déduits du montant envoyé. Le destinataire recevra moins de litecoins que le montant saisi dans le champ de montant. Si plusieurs destinataires sont sélectionnés, les frais seront partagés également..</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Les frais seront déduits du montant envoyé. Le destinataire recevra moins de coins que le montant saisi dans le champ de montant. Si plusieurs destinataires sont sélectionnés, les frais seront partagés également..</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2288,8 +2288,8 @@
- <translation>Saisir une étiquette pour cette adresse afin de l'ajouter à la liste d'adresses utilisées</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Un message qui était joint à l'URI litecoin: et qui sera stocké avec la transaction pour référence. Note : ce message ne sera pas envoyé par le réseau Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Un message qui était joint à l'URI litecoincash: et qui sera stocké avec la transaction pour référence. Note : ce message ne sera pas envoyé par le réseau LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2333,12 +2333,12 @@
- <translation>&Signer un message</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Vous pouvez signer des messages ou des accords avec vos adresses pour prouver que vous pouvez recevoir des litecoins à ces dernières. Faites attention de ne rien signer de vague ou au hasard, car des attaques d'hameçonnage pourraient essayer de vous faire signer avec votre identité afin de l'usurper. Ne signez que des déclarations entièrement détaillées et avec lesquelles vous êtes d'accord.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Vous pouvez signer des messages ou des accords avec vos adresses pour prouver que vous pouvez recevoir des coins à ces dernières. Faites attention de ne rien signer de vague ou au hasard, car des attaques d'hameçonnage pourraient essayer de vous faire signer avec votre identité afin de l'usurper. Ne signez que des déclarations entièrement détaillées et avec lesquelles vous êtes d'accord.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>L'adresse Litecoin avec laquelle signer le message</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>L'adresse LitecoinCash avec laquelle signer le message</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2369,8 +2369,8 @@
- <translation>Copier la signature actuelle dans le presse-papiers</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Signer le message afin de prouver que vous détenez cette adresse Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Signer le message afin de prouver que vous détenez cette adresse LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2393,12 +2393,12 @@
- <translation>Saisir ci-dessous l'adresse du destinataire, le message (s'assurer de copier fidèlement les retours à la ligne, les espaces, les tabulations, etc.) et la signature pour vérifier le message. Faire attention à ne pas déduire davantage de la signature que ce qui est contenu dans le message signé même, pour éviter d'être trompé par une attaque d'homme du milieu. Prendre en compte que cela ne fait que prouver que le signataire reçoit l'adresse et ne peut pas prouver la provenance d'une transaction !</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>L'adresse Litecoin avec laquelle le message a été signé</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>L'adresse LitecoinCash avec laquelle le message a été signé</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Vérifier le message pour s'assurer qu'il a été signé avec l'adresse Litecoin spécifiée</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Vérifier le message pour s'assurer qu'il a été signé avec l'adresse LitecoinCash spécifiée</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -3058,8 +3058,8 @@
- <translation>Impossible de démarrer le serveur HTTP. Voir le journal de débogage pour plus de détails.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_fr_FR.ts b/src/qt/locale/bitcoin_fr_FR.ts
- index eda597c..0273f5a 100644
- --- a/src/qt/locale/bitcoin_fr_FR.ts
- +++ b/src/qt/locale/bitcoin_fr_FR.ts
- @@ -43,11 +43,11 @@
- </message>
- <message>
- <source>Choose the address to send coins to</source>
- - <translation>Choisissez une adresse où envoyer les litecoins</translation>
- + <translation>Choisissez une adresse où envoyer les coins</translation>
- </message>
- <message>
- <source>Choose the address to receive coins with</source>
- - <translation>Choisissez une adresse où recevoir les litecoins</translation>
- + <translation>Choisissez une adresse où recevoir les coins</translation>
- </message>
- <message>
- <source>C&hoose</source>
- @@ -128,8 +128,8 @@
- <translation>Décrypter le porte-monnaie</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Attention : Si vous chiffrez votre portefeuille et que vous perdez votre mot de passe vous <b> PERDREZ TOUS VOS LITECOINS</b> !</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Attention : Si vous chiffrez votre portefeuille et que vous perdez votre mot de passe vous <b> PERDREZ TOUS VOS LCC</b> !</translation>
- </message>
- <message>
- <source>Wallet encrypted</source>
- @@ -238,8 +238,8 @@
- <translation>Réindexer les blocs sur le disque...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Envoyer des pièces à une adresse Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Envoyer des pièces à une adresse LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -262,8 +262,8 @@
- <translation>&Vérification du message</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -290,8 +290,8 @@
- <translation>Crypter les clé privées qui appartiennent votre portefeuille</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signer vos messages avec vos adresses Litecoin pour prouver que vous les détenez</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signer vos messages avec vos adresses LitecoinCash pour prouver que vous les détenez</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -310,24 +310,24 @@
- <translation>Barre d'outils des onglets</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Demander des paiements (générer QR codes et litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Demander des paiements (générer QR codes et litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- <translation>Montrer la liste des adresses d'envois utilisées et les étiquettes</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Ouvrir un litecoin: URI ou demande de paiement</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Ouvrir un litecoincash: URI ou demande de paiement</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Options de ligne de commande</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n connexion active au réseau Litecoin</numerusform><numerusform>%n connexions actives au réseau Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n connexion active au réseau LitecoinCash</numerusform><numerusform>%n connexions actives au réseau LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -712,8 +712,8 @@
- <translation>Expert</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Ouvrir le port du client Litecoin automatiquement sur le routeur. Cela ne fonctionne que si votre routeur supporte l'UPnP et si la fonctionnalité est activée.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Ouvrir le port du client LitecoinCash automatiquement sur le routeur. Cela ne fonctionne que si votre routeur supporte l'UPnP et si la fonctionnalité est activée.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -872,8 +872,8 @@
- <translation>Montant</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Entrer une adresse Litecoin (e.g. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Entrer une adresse LitecoinCash (e.g. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1734,8 +1734,8 @@
- <translation>Impossible de démarrer le serveur HTTP. Voir le journal de débogage pour plus de détails.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source><category> can be:</source>
- diff --git a/src/qt/locale/bitcoin_gl.ts b/src/qt/locale/bitcoin_gl.ts
- index 8939179..2ab9faf 100644
- --- a/src/qt/locale/bitcoin_gl.ts
- +++ b/src/qt/locale/bitcoin_gl.ts
- @@ -130,8 +130,8 @@
- <translation>Reindexando bloques no disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar moedas a unha dirección Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar moedas a unha dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -154,8 +154,8 @@
- <translation>&Verificar mensaxe...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -182,12 +182,12 @@
- <translation>Encriptar as claves privadas que pertencen ao teu moedeiro</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Asina mensaxes coas túas direccións Litecoin para probar que te pertencen</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Asina mensaxes coas túas direccións LitecoinCash para probar que te pertencen</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verificar mensaxes para asegurar que foron asinados con direccións Litecoin dadas.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verificar mensaxes para asegurar que foron asinados con direccións LitecoinCash dadas.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -206,8 +206,8 @@
- <translation>Barra de ferramentas</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Solicitar pagos (xenera códigos QR e litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Solicitar pagos (xenera códigos QR e litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -218,8 +218,8 @@
- <translation>Amosar a listaxe de etiquetas e direccións para recibir empregadas</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Abrir un litecoin: URI ou solicitude de pago</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Abrir un litecoincash: URI ou solicitude de pago</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -466,8 +466,8 @@
- <translation>Moedeiro</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Abrir automáticamente o porto do cliente Litecoin no router. Esto so funciona se o teu router soporta UPnP e está habilitado.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Abrir automáticamente o porto do cliente LitecoinCash no router. Esto so funciona se o teu router soporta UPnP e está habilitado.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -545,8 +545,8 @@
- <translation>Formulario</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>A información amosada por estar desactualizada. O teu moedeiro sincronízase automáticamente coa rede Litecoin despois de que se estableza unha conexión, pero este proceso non está todavía rematado.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>A información amosada por estar desactualizada. O teu moedeiro sincronízase automáticamente coa rede LitecoinCash despois de que se estableza unha conexión, pero este proceso non está todavía rematado.</translation>
- </message>
- <message>
- <source>Your current spendable balance</source>
- @@ -927,8 +927,8 @@
- <translation>Copiar a sinatura actual ao portapapeis do sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Asina a mensaxe para probar que posees esta dirección Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Asina a mensaxe para probar que posees esta dirección LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -947,8 +947,8 @@
- <translation>&Verificar Mensaxe</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar a mensaxe para asegurar que foi asinada coa dirección Litecoin especificada</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar a mensaxe para asegurar que foi asinada coa dirección LitecoinCash especificada</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1028,8 +1028,8 @@
- <translation>Executar no fondo como un demo e aceptar comandos</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Core de Litecoin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Core de LitecoinCash</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts
- index 39968cf..06f10f4 100644
- --- a/src/qt/locale/bitcoin_he.ts
- +++ b/src/qt/locale/bitcoin_he.ts
- @@ -62,11 +62,11 @@
- <translation>?????? ?????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>??? ?? ?????? ???????? ??? ?????? ???????. ???? ????? ?? ???? ??????? ??????? ???? ????? ??????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>??? ?? ?????? ???????? ??? ????? ???????. ????? ?????? ?????? ???? ??? ?????.</translation>
- </message>
- <message>
- @@ -168,7 +168,7 @@
- <translation>????? ????? ?????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>?????: ????? ???? ????? ???? ????? ????? ????? ????? ??? <b>??? ?????????? ??? ?????</b>!</translation>
- </message>
- <message>
- @@ -180,7 +180,7 @@
- <translation>????? ?????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 ????? ??? ??? ????? ?? ????? ??????. ?? ???? ?? ?? ????? ????? ??? ?? ???? ???? ?? ?????????? ??? ???? ????? ?? ????? ?????? ?? ?????.</translation>
- </message>
- <message>
- @@ -338,7 +338,7 @@
- <translation>??????? ?????? ????? ??????</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- + <source>Send coins to a LitecoinCash address</source>
- <translation>????? ?????? ?????? ????????</translation>
- </message>
- <message>
- @@ -362,7 +362,7 @@
- <translation>&????? ??????</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>????????</translation>
- </message>
- <message>
- @@ -390,11 +390,11 @@
- <translation>????? ??????? ??????? ??????? ????? ???</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- <translation>???? ?? ?????? ?? ?????? ???????? ??? ??? ?????? ??? ???????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- <translation>??? ?????? ??? ?????? ??? ????? ?? ????? ???????? ???????</translation>
- </message>
- <message>
- @@ -414,8 +414,8 @@
- <translation>???? ???? ???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>???? ??????? (????? ?? ????? ???? QR ??????? ?????? ???? ?? :litecoin)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>???? ??????? (????? ?? ????? ???? QR ??????? ?????? ???? ?? :litecoincash)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,7 +426,7 @@
- <translation>???? ????? ??????? ???????? ??????? ??????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- + <source>Open a litecoincash: URI or payment request</source>
- <translation>????? ????????: ????? ???? ?? ???? ?????</translation>
- </message>
- <message>
- @@ -434,7 +434,7 @@
- <translation>???????? &???? ??????</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- + <source>%n active connection(s) to LitecoinCash network</source>
- <translation><numerusform>????? ??? ???? ???? ????????</numerusform><numerusform>%n ??????? ?????? ???? ????????</numerusform></translation>
- </message>
- <message>
- @@ -470,7 +470,7 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>?? ????? ?? ????? ????? ?? %1 ??? ????? ????? ?? ???????? ???? ????? ????????</translation>
- </message>
- <message>
- @@ -532,7 +532,7 @@
- <translation>????? <b>?????</b> ?<b>????</b> ????</translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- <translation>????? ????? ?????. ??? ?????? ?????? ??? ????????? ????? ?????? ??????? ?????.</translation>
- </message>
- </context>
- @@ -714,7 +714,7 @@
- <translation>????? ????? ??????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation>?????? ??????? ?%1? ??? ???? ????? ???????? ?????.</translation>
- </message>
- <message>
- @@ -996,7 +996,7 @@
- <translation>???? &???? ????? ???????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- <translation>????? ????? ?? ???????? ???? ????? ???????. ???? ?? ?? UPnP ????? ????? ????.</translation>
- </message>
- <message>
- @@ -1004,7 +1004,7 @@
- <translation>????? ???? ??????? UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- <translation>????? ???? ???????? ??? ?????? SOCKS5.</translation>
- </message>
- <message>
- @@ -1123,7 +1123,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- <translation>????? ????? ???? ????? ?????. ????? ??? ??????? ????? ??????? ?? ??? ???????? ???? ????? ??????, ?? ?????? ??? ??????.</translation>
- </message>
- <message>
- @@ -1198,8 +1198,8 @@
- <translation>????? ???? ?????</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>?? ???? ?????? ?? ????? litecoin: click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>?? ???? ?????? ?? ????? litecoincash: click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1272,7 +1272,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- <translation>?? ????? ????? ???????? (????: %1)</translation>
- </message>
- <message>
- @@ -1672,7 +1672,7 @@
- <translation>?&???? &???? ?????? ???? ????? (?? ?????)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- <translation>????? ???? ?????? ????? ?????? ????? ??? ????? ?????. ?????? ???: ?????? ?? ????? ?? ?????? ???? ????????.</translation>
- </message>
- <message>
- @@ -2029,7 +2029,7 @@
- <translation>????? ?? ????? ?????? ???? ?? ?? %1</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- + <source>Warning: Invalid LitecoinCash address</source>
- <translation>?????: ????? ??????? ?????</translation>
- </message>
- <message>
- @@ -2072,7 +2072,7 @@
- <translation>??? ????? ????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation>????? ???????? ?? ?????</translation>
- </message>
- <message>
- @@ -2092,7 +2092,7 @@
- <translation>???? ????? ??</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>????? ????? ?????? ?????. ????? ???? ???? ????????? ??? ????? ???? ?????. ?? ????? ???? ??????, ????? ????? ????? ????.</translation>
- </message>
- <message>
- @@ -2112,7 +2112,7 @@
- <translation>?? ????? ????? ???? ????? ?? ??? ?????? ???? ?????? ??????? ??????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- <translation>????? ?????? ????????: ????? ??????? ?????? ????? ???? ????. ?????? ???: ????? ?? ?? ????? ???? ????????.</translation>
- </message>
- <message>
- @@ -2153,7 +2153,7 @@
- <translation>????? ?? ??&???</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- + <source>The LitecoinCash address to sign the message with</source>
- <translation>????? ???????? ??? ????? ??? ?? ??????</translation>
- </message>
- <message>
- @@ -2185,7 +2185,7 @@
- <translation>????? ?????? ??????? ???? ???????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>???? ????? ?? ?????? ??? ?????? ?????? ???????? ??? ???????.</translation>
- </message>
- <message>
- @@ -2205,11 +2205,11 @@
- <translation>&????? ?????</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- + <source>The LitecoinCash address the message was signed with</source>
- <translation>????? ???????? ???? ????? ??????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- <translation>???? ???? ?? ?????? ??? ?????? ???? ????? ?? ????? ???????? ??????</translation>
- </message>
- <message>
- @@ -2714,7 +2714,7 @@
- <translation>???? ????? ???? ????? ??????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- + <source>LitecoinCash Core</source>
- <translation>???? ????????</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_he_IL.ts b/src/qt/locale/bitcoin_he_IL.ts
- index 0b88446..c7c32b4 100644
- --- a/src/qt/locale/bitcoin_he_IL.ts
- +++ b/src/qt/locale/bitcoin_he_IL.ts
- @@ -62,11 +62,11 @@
- <translation>???? ??????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>??? ?? ?????? ???????? ??? ?????? ???????. ???? ???? ?? ????? ????? ????? ???? ????? ??????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>??? ?? ?????? ???????? ??? ????? ???????. ????? ?????? ?????? ???? ??? ????? ??????</translation>
- </message>
- </context>
- @@ -82,7 +82,7 @@
- <context>
- <name>BitcoinGUI</name>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>????????</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_hi_IN.ts b/src/qt/locale/bitcoin_hi_IN.ts
- index 96ffb82..ae4188c 100644
- --- a/src/qt/locale/bitcoin_hi_IN.ts
- +++ b/src/qt/locale/bitcoin_hi_IN.ts
- @@ -91,7 +91,7 @@
- <translation>????? ????/????? ?? ????? ????????? ?? ??? ???????? ???? ?? ??? ?????!</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>???????</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_hr.ts b/src/qt/locale/bitcoin_hr.ts
- index 71b70e2..40c7467 100644
- --- a/src/qt/locale/bitcoin_hr.ts
- +++ b/src/qt/locale/bitcoin_hr.ts
- @@ -54,8 +54,8 @@
- <translation>&Odaberi</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Ovo su va?e Litecoin adrese za slanje novca. Uvijek provjerite iznos i adresu primatelja prije slanja novca.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Ovo su va?e LitecoinCash adrese za slanje novca. Uvijek provjerite iznos i adresu primatelja prije slanja novca.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -174,8 +174,8 @@
- <translation>Re-indeksiranje blokova na disku...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Slanje novca na litecoin adresu</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Slanje novca na litecoincash adresu</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -198,8 +198,8 @@
- <translation>&Potvrdite poruku...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -226,12 +226,12 @@
- <translation>?ifriranje privatnih klju?eva koji u nov?aniku</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Poruku potpi?emo s litecoin adresom, kako bi dokazali vlasni?tvo nad tom adresom</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Poruku potpi?emo s litecoincash adresom, kako bi dokazali vlasni?tvo nad tom adresom</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Provjeravanje poruke, kao dokaz, da je potpisana navedenom litecoin adresom</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Provjeravanje poruke, kao dokaz, da je potpisana navedenom litecoincash adresom</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -250,8 +250,8 @@
- <translation>Traka kartica</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Zatra?i uplatu (stvara QR kod i litecoin: URI adresu)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Zatra?i uplatu (stvara QR kod i litecoincash: URI adresu)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -262,16 +262,16 @@
- <translation>Prika?i popis kori?tenih adresa i oznaka za primanje novca</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Otvori litecoin: URI adresu ili zahtjev za uplatu</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Otvori litecoincash: URI adresu ili zahtjev za uplatu</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Opcije &naredbene linije</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktivna veza na Litecoin mre?u</numerusform><numerusform>%n aktivnih veza na Litecoin mre?u</numerusform><numerusform>%n aktivnih veza na Litecoin mre?u</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktivna veza na LitecoinCash mre?u</numerusform><numerusform>%n aktivnih veza na LitecoinCash mre?u</numerusform><numerusform>%n aktivnih veza na LitecoinCash mre?u</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Processed %n block(s) of transaction history.</source>
- @@ -423,11 +423,11 @@
- </message>
- <message>
- <source>The label associated with this address list entry</source>
- - <translation>Oznaka litecoin adrese</translation>
- + <translation>Oznaka litecoincash adrese</translation>
- </message>
- <message>
- <source>The address associated with this address list entry. This can only be modified for sending addresses.</source>
- - <translation>Litecoin adresa. Izmjene adrese su mogu?e samo za adrese za slanje.</translation>
- + <translation>LitecoinCash adresa. Izmjene adrese su mogu?e samo za adrese za slanje.</translation>
- </message>
- <message>
- <source>&Address</source>
- @@ -568,8 +568,8 @@
- <translation>&Tro?enje nepotvr?enih vra?enih iznosa</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Automatski otvori port Litecoin klijenta na ruteru. To radi samo ako ruter podr?ava UPnP i ako je omogu?en.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Automatski otvori port LitecoinCash klijenta na ruteru. To radi samo ako ruter podr?ava UPnP i ako je omogu?en.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -617,7 +617,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Izaberite ?eljeni najmanji dio litecoina koji ?e biti prikazan u su?elju i koji ?e se koristiti za pla?anje.</translation>
- + <translation>Izaberite ?eljeni najmanji dio litecoincasha koji ?e biti prikazan u su?elju i koji ?e se koristiti za pla?anje.</translation>
- </message>
- <message>
- <source>&OK</source>
- @@ -643,8 +643,8 @@
- <translation>Oblik</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Prikazani podatci mogu biti zastarjeli. Va? nov?anik se automatski sinkronizira s Litecoin mre?om kada je veza uspostavljena, ali taj proces jo? nije zavr?en.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Prikazani podatci mogu biti zastarjeli. Va? nov?anik se automatski sinkronizira s LitecoinCash mre?om kada je veza uspostavljena, ali taj proces jo? nije zavr?en.</translation>
- </message>
- <message>
- <source>Total:</source>
- @@ -1034,8 +1034,8 @@
- <translation>Izvr?avaj u pozadini kao uslu?nik i prihva?aj komande</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Block creation options:</source>
- diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts
- index 75d4c4d..0d1fa42 100644
- --- a/src/qt/locale/bitcoin_hu.ts
- +++ b/src/qt/locale/bitcoin_hu.ts
- @@ -62,12 +62,12 @@
- <translation>Fogadási cím</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Ezek a Litecoin címeid kifizetések küldéséhez. Mindíg ellen?rizd az összeget és a fogadó címet miel?tt coinokat küldenél.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Ezek a LitecoinCash címeid kifizetések küldéséhez. Mindíg ellen?rizd az összeget és a fogadó címet miel?tt coinokat küldenél.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Ezek a Litecoin címeid kifizetések fogadásához. Ajánlott új címet használni minden új fogadáshoz.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Ezek a LitecoinCash címeid kifizetések fogadásához. Ajánlott új címet használni minden új fogadáshoz.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -165,8 +165,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Tárca titkosításának meger?sítése</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Figyelem: Ha titkosítja a tárcáját és elveszíti a jelszavát, akkor <b>AZ ÖSSZES LITECOINJA ELVESZIK</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Figyelem: Ha titkosítja a tárcáját és elveszíti a jelszavát, akkor <b>AZ ÖSSZES LITECOINCASHJA ELVESZIK</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -177,8 +177,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Tárca titkosítva</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>A %1 most bezár, hogy befejezze a titkosítást. Ne feledje, hogy a tárca titkosítása nem nyújt teljes védelmet azzal szemben, hogy kártékony programok megfert?zzék a számítógépét és ellopják a litecoinjait.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>A %1 most bezár, hogy befejezze a titkosítást. Ne feledje, hogy a tárca titkosítása nem nyújt teljes védelmet azzal szemben, hogy kártékony programok megfert?zzék a számítógépét és ellopják a litecoincashjait.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -331,8 +331,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Lemezen lév? blokkok újraindexelése...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Litecoin küldése megadott címre</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>LitecoinCash küldése megadott címre</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -355,8 +355,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Üzenet &valódiságának ellen?rzése</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -383,12 +383,12 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>A tárcádhoz tartozó privát kulcsok titkosítása</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Üzenetek aláírása a Litecoin-címmeiddel, amivel bizonyítod, hogy a cím a sajátod</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Üzenetek aláírása a LitecoinCash-címmeiddel, amivel bizonyítod, hogy a cím a sajátod</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Üzenetek ellen?rzése, hogy valóban a megjelölt Litecoin-címekkel vannak-e aláírva</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Üzenetek ellen?rzése, hogy valóban a megjelölt LitecoinCash-címekkel vannak-e aláírva</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -407,8 +407,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Fül eszköztár</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Fizetési kérelem (QR-kódot és "litecoin:" URI azonosítót hoz létre)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Fizetési kérelem (QR-kódot és "litecoincash:" URI azonosítót hoz létre)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -419,16 +419,16 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>A használt fogadó címek és címkék megtekintése</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>"litecoin:" URI azonosító vagy fizetési kérelem megnyitása</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>"litecoincash:" URI azonosító vagy fizetési kérelem megnyitása</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Paran&cssor kapcsolók</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktív kapcsolat a Litecoin hálózathoz</numerusform><numerusform>%n aktív kapcsolat a Litecoin hálózathoz</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktív kapcsolat a LitecoinCash hálózathoz</numerusform><numerusform>%n aktív kapcsolat a LitecoinCash hálózathoz</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -471,8 +471,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Naprakész</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>A %1 súgó megjelenítése a Litecoin lehetséges parancssori kapcsolóinak listájával</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>A %1 súgó megjelenítése a LitecoinCash lehetséges parancssori kapcsolóinak listájával</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -541,8 +541,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Tárca <b>kódolva</b> és jelenleg <b>zárva</b>.</translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Végzetes hiba történt. A Litecoin m?ködése nem biztonságos és hamarosan leáll.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Végzetes hiba történt. A LitecoinCash m?ködése nem biztonságos és hamarosan leáll.</translation>
- </message>
- </context>
- <context>
- @@ -731,8 +731,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Küld? cím szerkesztése</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>A megadott "%1" cím nem egy érvényes Litecoin-cím.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>A megadott "%1" cím nem egy érvényes LitecoinCash-cím.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -863,12 +863,12 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>?rlap</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>A legutóbbi tranzakciók még lehet, hogy nem látszanak, ezért el?fordulhat, hogy a pénztárca egyenlege nem a valós állapotot mutatja. Ha a pénztárca befejezte a szinkronizációt a litecoin hálózattal, utána már az aktuális egyenleget fogja mutatni, amint alant részletesen látszik.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>A legutóbbi tranzakciók még lehet, hogy nem látszanak, ezért el?fordulhat, hogy a pénztárca egyenlege nem a valós állapotot mutatja. Ha a pénztárca befejezte a szinkronizációt a litecoincash hálózattal, utána már az aktuális egyenleget fogja mutatni, amint alant részletesen látszik.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>A hálózat nem fogadja el azoknak a litecoinoknak az elköltését, amelyek érintettek a még nem látszódó tranzakciókban.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>A hálózat nem fogadja el azoknak a litecoincashoknak az elköltését, amelyek érintettek a még nem látszódó tranzakciókban.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1025,16 +1025,16 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>&Költése a a jóváhagyatlan változásnak</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>A Litecoin-kliens portjának automatikus megnyitása a routeren. Ez csak akkor m?ködik, ha a routered támogatja az UPnP-t és az engedélyezve is van rajta.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>A LitecoinCash-kliens portjának automatikus megnyitása a routeren. Ez csak akkor m?ködik, ha a routered támogatja az UPnP-t és az engedélyezve is van rajta.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>&UPnP port-feltérképezés</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Csatlakozás a Litecoin hálózatához SOCKS5 proxyn keresztül</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Csatlakozás a LitecoinCash hálózatához SOCKS5 proxyn keresztül</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1069,8 +1069,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Csatlakozás a Litecoin hálózathoz külön SOCKS5 proxy használatával a Tor rejtett szolgáltatásainak eléréséhez.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Csatlakozás a LitecoinCash hálózathoz külön SOCKS5 proxy használatával a Tor rejtett szolgáltatásainak eléréséhez.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1168,8 +1168,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>?rlap</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>A kijelzett információ lehet, hogy elavult. A pénztárcája automatikusan szinkronizálja magát a Litecoin hálózattal miután a kapcsolat létrejön, de ez e folyamat még nem fejez?dött be.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>A kijelzett információ lehet, hogy elavult. A pénztárcája automatikusan szinkronizálja magát a LitecoinCash hálózattal miután a kapcsolat létrejön, de ez e folyamat még nem fejez?dött be.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1243,8 +1243,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Hiba történt a fizetési kérelem során</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>A litecoin nem tud elindulni: click-to-pay kezel?</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>A litecoincash nem tud elindulni: click-to-pay kezel?</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1255,8 +1255,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Érvénytelen fizetési cím %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>Nem sikerült az URI elemzése! Ezt okozhatja érvénytelen Litecoin cím, vagy rossz URI paraméterezés.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>Nem sikerült az URI elemzése! Ezt okozhatja érvénytelen LitecoinCash cím, vagy rossz URI paraméterezés.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1345,8 +1345,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Összeg</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Ad meg egy Litecoin címet (pl: %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Ad meg egy LitecoinCash címet (pl: %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1733,8 +1733,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>&Újrafelhasznál egy létez? fogadó címet (nem ajánlott)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Egy opcionális üzenet csatolása a fizetési kérelemhez, amely megjelenik a kérelem megnyitásakor. Megjegyzés: Az üzenet nem lesz elküldve a fizetséggel a Litecoin hálózaton keresztül.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Egy opcionális üzenet csatolása a fizetési kérelemhez, amely megjelenik a kérelem megnyitásakor. Megjegyzés: Az üzenet nem lesz elküldve a fizetséggel a LitecoinCash hálózaton keresztül.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2090,8 +2090,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Csak a szükséges %1 díj fizetése</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Figyelmeztetés: Érvénytelen Litecoin cím</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Figyelmeztetés: Érvénytelen LitecoinCash cím</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2129,8 +2129,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Válassz egy korábban már használt címet</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Erre a Litecoin címre küldje az összeget</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Erre a LitecoinCash címre küldje az összeget</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2202,8 +2202,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Üzenet aláírása...</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoin cím, amivel alá kívánja írni az üzenetet</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCash cím, amivel alá kívánja írni az üzenetet</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2234,7 +2234,7 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>A jelenleg kiválasztott aláírás másolása a rendszer-vágólapra</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>Üzenet </translation>
- </message>
- <message>
- @@ -2250,12 +2250,12 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- <translation>Üzenet ellen?rzése</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Litecoin cím, amivel aláírta az üzenetet</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>LitecoinCash cím, amivel aláírta az üzenetet</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Ellen?rizze az üzenetet, hogy valóban a megjelölt Litecoin címmel van-e aláírva</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Ellen?rizze az üzenetet, hogy valóban a megjelölt LitecoinCash címmel van-e aláírva</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2787,8 +2787,8 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- </translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- @@ -3002,7 +3002,7 @@ Kérem a kulcsmondatban használjon <b> tíz vagy több véletlenszer? ka
- </message>
- <message>
- <source>Insufficient funds</source>
- - <translation>Nincs elég litecoinod.</translation>
- + <translation>Nincs elég litecoincashod.</translation>
- </message>
- <message>
- <source>Loading block index...</source>
- diff --git a/src/qt/locale/bitcoin_id_ID.ts b/src/qt/locale/bitcoin_id_ID.ts
- index 6357f6a..68e3674 100644
- --- a/src/qt/locale/bitcoin_id_ID.ts
- +++ b/src/qt/locale/bitcoin_id_ID.ts
- @@ -62,12 +62,12 @@
- <translation>Alamat-alamat penerima</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Ini adalah alamat- alamat Litecoin Anda untuk mengirimkan pembayaran. Selalu periksa jumlah dan alamat penerima sebelum mengirimkan koin.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Ini adalah alamat- alamat LitecoinCash Anda untuk mengirimkan pembayaran. Selalu periksa jumlah dan alamat penerima sebelum mengirimkan koin.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Ini adalah alamat- alamat Litecoin Anda untuk menerima pembayaran. Dianjurkan untuk menggunakan alamat penerima yang baru setiap melakukan transaksi.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Ini adalah alamat- alamat LitecoinCash Anda untuk menerima pembayaran. Dianjurkan untuk menggunakan alamat penerima yang baru setiap melakukan transaksi.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -164,8 +164,8 @@
- <translation>Konfirmasi pengenkripsian dompet</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Peringatan: Jika Anda enkripsi dompet Anda dan lupa kata sandi anda, Anda akan <b>KEHILANGAN SEMUA LITECOIN ANDA</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Peringatan: Jika Anda enkripsi dompet Anda dan lupa kata sandi anda, Anda akan <b>KEHILANGAN SEMUA LITECOINCASH ANDA</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -176,7 +176,7 @@
- <translation>Dompet terenkripsi</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 sekarang akan ditutup untuk menyelesaikan proses enkripsi. Ingatlah bahwa mengenkripsi dompet Anda tidak dapat sepenuhnya melindungi komputer Anda dari pencurian malware yang menginfeksi komputer Anda.</translation>
- </message>
- <message>
- @@ -334,8 +334,8 @@
- <translation>Mengindex ulang blok di dalam disk...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Kirim koin ke alamat Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Kirim koin ke alamat LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -358,8 +358,8 @@
- <translation>&Verifikasi pesan...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -386,12 +386,12 @@
- <translation>Enkripsi private key yang dimiliki dompet Anda</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Tanda tangani sebuah pesan menggunakan alamat Litecoin Anda untuk membuktikan bahwa Anda adalah pemilik alamat tersebut</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Tanda tangani sebuah pesan menggunakan alamat LitecoinCash Anda untuk membuktikan bahwa Anda adalah pemilik alamat tersebut</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifikasi pesan untuk memastikan bahwa pesan tersebut ditanda tangani oleh suatu alamat Litecoin tertentu</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifikasi pesan untuk memastikan bahwa pesan tersebut ditanda tangani oleh suatu alamat LitecoinCash tertentu</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -410,8 +410,8 @@
- <translation>Baris tab</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Permintaan pembayaran (membuat kode QR dan litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Permintaan pembayaran (membuat kode QR dan litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -422,16 +422,16 @@
- <translation>Tampilkan daftar alamat dan label yang diterima</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Buka URI litecoin: atau permintaan pembayaran</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Buka URI litecoincash: atau permintaan pembayaran</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&pilihan Command-line</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n koneksi aktif ke jaringan Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n koneksi aktif ke jaringan LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -474,8 +474,8 @@
- <translation>Terbaru</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Tampilkan %1 pesan bantuan untuk mendapatkan daftar opsi baris perintah Litecoin yang memungkinkan</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Tampilkan %1 pesan bantuan untuk mendapatkan daftar opsi baris perintah LitecoinCash yang memungkinkan</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -544,8 +544,8 @@
- <translation>Dompet saat ini <b>terenkripsi</b> dan <b>terkunci</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Terjadi Kesalahan Fatal. Litecoin Tidak Dapat Melanjutkan Dengan Aman Dan Akan Keluar</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Terjadi Kesalahan Fatal. LitecoinCash Tidak Dapat Melanjutkan Dengan Aman Dan Akan Keluar</translation>
- </message>
- </context>
- <context>
- @@ -722,8 +722,8 @@
- <translation>Ubah alamat pengirim</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Alamat yang dimasukkan "%1" bukanlah alamat Litecoin yang valid.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Alamat yang dimasukkan "%1" bukanlah alamat LitecoinCash yang valid.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -972,16 +972,16 @@
- <translation>&Perubahan saldo untuk transaksi yang belum dikonfirmasi</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Otomatis membuka port client Litecoin di router. Hanya berjalan apabila router anda mendukung UPnP dan di-enable.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Otomatis membuka port client LitecoinCash di router. Hanya berjalan apabila router anda mendukung UPnP dan di-enable.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Petakan port dengan &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Hubungkan ke jaringan Litecoin melalui SOCKS5 proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Hubungkan ke jaringan LitecoinCash melalui SOCKS5 proxy.</translation>
- </message>
- <message>
- <source>Proxy &IP:</source>
- @@ -1087,8 +1087,8 @@
- <translation>Formulir</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Informasi terlampir mungkin sudah kedaluwarsa. Dompet Anda secara otomatis mensinkronisasi dengan jaringan Litecoin ketika sebuah hubungan terbentuk, namun proses ini belum selesai.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Informasi terlampir mungkin sudah kedaluwarsa. Dompet Anda secara otomatis mensinkronisasi dengan jaringan LitecoinCash ketika sebuah hubungan terbentuk, namun proses ini belum selesai.</translation>
- </message>
- <message>
- <source>Available:</source>
- @@ -1144,8 +1144,8 @@
- <translation>Nilai</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Masukkan alamat Litecoin (contoh %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Masukkan alamat LitecoinCash (contoh %1)</translation>
- </message>
- <message>
- <source>%1 h</source>
- @@ -1679,8 +1679,8 @@
- <translation>Salin tanda tangan terpilih ke sistem klipboard</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Tandai pesan untuk menyetujui kamu pemiliki alamat Litecoin ini</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Tandai pesan untuk menyetujui kamu pemiliki alamat LitecoinCash ini</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1820,8 +1820,8 @@
- <translation>Berjalan dibelakang sebagai daemin dan menerima perintah</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
- diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts
- index 6d97225..2b13da1 100644
- --- a/src/qt/locale/bitcoin_it.ts
- +++ b/src/qt/locale/bitcoin_it.ts
- @@ -43,11 +43,11 @@
- </message>
- <message>
- <source>Choose the address to send coins to</source>
- - <translation>Scegli l'indirizzo a cui inviare litecoin</translation>
- + <translation>Scegli l'indirizzo a cui inviare litecoincash</translation>
- </message>
- <message>
- <source>Choose the address to receive coins with</source>
- - <translation>Scegli l'indirizzo con cui ricevere litecoin</translation>
- + <translation>Scegli l'indirizzo con cui ricevere litecoincash</translation>
- </message>
- <message>
- <source>C&hoose</source>
- @@ -62,12 +62,12 @@
- <translation>Indirizzi di ricezione</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Questo è un elenco di indirizzi Litecoin a cui puoi inviare pagamenti. Controlla sempre l'importo e l'indirizzo del beneficiario prima di inviare litecoin.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Questo è un elenco di indirizzi LitecoinCash a cui puoi inviare pagamenti. Controlla sempre l'importo e l'indirizzo del beneficiario prima di inviare litecoincash.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Questi sono i tuoi indirizzi Litecoin che puoi usare per ricevere pagamenti. Si raccomanda di generare un nuovo indirizzo per ogni transazione.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Questi sono i tuoi indirizzi LitecoinCash che puoi usare per ricevere pagamenti. Si raccomanda di generare un nuovo indirizzo per ogni transazione.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Conferma la cifratura del portamonete</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Attenzione: perdendo la passphrase di un portamonete cifrato <b>TUTTI I PROPRI LITECOIN ANDRANNO PERSI</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Attenzione: perdendo la passphrase di un portamonete cifrato <b>TUTTI I PROPRI LITECOINCASH ANDRANNO PERSI</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -334,8 +334,8 @@
- <translation>Re-indicizzazione blocchi su disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Invia fondi ad un indirizzo Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Invia fondi ad un indirizzo LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -358,8 +358,8 @@
- <translation>&Verifica messaggio...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -386,12 +386,12 @@
- <translation>Cifra le chiavi private che appartengono al tuo portamonete</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Firma messaggi con i tuoi indirizzi Litecoin per dimostrarne il possesso</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Firma messaggi con i tuoi indirizzi LitecoinCash per dimostrarne il possesso</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifica che i messaggi siano stati firmati con gli indirizzi Litecoin specificati</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifica che i messaggi siano stati firmati con gli indirizzi LitecoinCash specificati</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -410,8 +410,8 @@
- <translation>Barra degli strumenti</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Richiedi pagamenti (genera codici QR e litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Richiedi pagamenti (genera codici QR e litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -422,16 +422,16 @@
- <translation>Mostra la lista degli indirizzi di ricezione utilizzati</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Apri un litecoin: URI o una richiesta di pagamento</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Apri un litecoincash: URI o una richiesta di pagamento</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Opzioni della riga di &comando</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n connessione attiva alla rete Litecoin</numerusform><numerusform>%n connessioni alla rete Litecoin attive</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n connessione attiva alla rete LitecoinCash</numerusform><numerusform>%n connessioni alla rete LitecoinCash attive</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -474,8 +474,8 @@
- <translation>Aggiornato</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Mostra il messaggio di aiuto di %1 per ottenere una lista di opzioni di comando per Litecoin </translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Mostra il messaggio di aiuto di %1 per ottenere una lista di opzioni di comando per LitecoinCash </translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -544,8 +544,8 @@
- <translation>Il portamonete è <b>cifrato</b> ed attualmente <b>bloccato</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Si è verificato un errore critico. Litecoin non può più funzionare in maniera sicura e verrà chiuso.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Si è verificato un errore critico. LitecoinCash non può più funzionare in maniera sicura e verrà chiuso.</translation>
- </message>
- </context>
- <context>
- @@ -738,8 +738,8 @@
- <translation>Modifica indirizzo d'invio</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>L'indirizzo inserito "%1" non è un indirizzo litecoin valido.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>L'indirizzo inserito "%1" non è un indirizzo litecoincash valido.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -847,8 +847,8 @@
- <translation>Dato che questa è la prima volta che il programma viene lanciato, puoi scegliere dove %1 salverà i suoi dati.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 scaricherà e salverà una copia della Blockchain di Litecoin. Saranno salvati almeno %2GB di dati in questo percorso e continueranno ad aumentare col tempo. Anche il portafoglio verrà salvato in questo percorso.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 scaricherà e salverà una copia della Blockchain di LitecoinCash. Saranno salvati almeno %2GB di dati in questo percorso e continueranno ad aumentare col tempo. Anche il portafoglio verrà salvato in questo percorso.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -882,8 +882,8 @@
- <translation>Modulo</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Transazioni recenti potrebbero non essere visibili ancora, perciò il saldo del tuo portafoglio potrebbe non essere corretto. Questa informazione risulterà corretta quando il tuo portafoglio avrà terminato la sincronizzazione con la rete litecoin, come indicato in dettaglio più sotto.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Transazioni recenti potrebbero non essere visibili ancora, perciò il saldo del tuo portafoglio potrebbe non essere corretto. Questa informazione risulterà corretta quando il tuo portafoglio avrà terminato la sincronizzazione con la rete litecoincash, come indicato in dettaglio più sotto.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1041,16 +1041,16 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>&Spendi resti non confermati</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Apri automaticamente la porta del client Litecoin sul router. Il protocollo UPnP deve essere supportato da parte del router ed attivo.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Apri automaticamente la porta del client LitecoinCash sul router. Il protocollo UPnP deve essere supportato da parte del router ed attivo.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mappa le porte tramite &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Connessione alla rete Litecoin attraverso un proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Connessione alla rete LitecoinCash attraverso un proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1089,8 +1089,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Connette alla rete Litecoin attraverso un proxy SOCKS5 separato per Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Connette alla rete LitecoinCash attraverso un proxy SOCKS5 separato per Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1138,7 +1138,7 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Scegli l'unità di suddivisione predefinita da utilizzare per l'interfaccia e per l'invio di litecoin.</translation>
- + <translation>Scegli l'unità di suddivisione predefinita da utilizzare per l'interfaccia e per l'invio di litecoincash.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1188,8 +1188,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Modulo</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Le informazioni visualizzate potrebbero non essere aggiornate. Il portamonete si sincronizza automaticamente con la rete Litecoin una volta stabilita una connessione, ma questo processo non è ancora stato completato.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Le informazioni visualizzate potrebbero non essere aggiornate. Il portamonete si sincronizza automaticamente con la rete LitecoinCash una volta stabilita una connessione, ma questo processo non è ancora stato completato.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1263,8 +1263,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Errore di richiesta di pagamento</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Impossibile avviare litecoin: gestore click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Impossibile avviare litecoincash: gestore click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1279,8 +1279,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Indirizzo di pagamento non valido %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>Impossibile interpretare l'URI! I parametri dell'URI o l'indirizzo Litecoin potrebbero non essere corretti.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>Impossibile interpretare l'URI! I parametri dell'URI o l'indirizzo LitecoinCash potrebbero non essere corretti.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1369,8 +1369,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Importo</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Inserisci un indirizzo Litecoin (ad es. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Inserisci un indirizzo LitecoinCash (ad es. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1789,8 +1789,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>R&iusa un indirizzo di ricezione (non raccomandato)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un messaggio opzionale da allegare e mostrare all'apertura della richiesta di pagamento. Nota: Il messaggio non sarà inviato con il pagamento sulla rete Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un messaggio opzionale da allegare e mostrare all'apertura della richiesta di pagamento. Nota: Il messaggio non sarà inviato con il pagamento sulla rete LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1943,7 +1943,7 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Invia Litecoin</translation>
- + <translation>Invia LitecoinCash</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -2022,7 +2022,7 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>somma almeno</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>Non vi è alcuna controindicazione a pagare la commissione minima, a patto che il volume delle transazioni sia inferiore allo spazio disponibile nei blocchi. Occorre comunque essere consapevoli che ciò potrebbe impedire la conferma delle transazioni nel caso in cui la rete risultasse satura.</translation>
- </message>
- <message>
- @@ -2182,8 +2182,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation><numerusform>Inizio delle conferme stimato entro %n blocchi.</numerusform><numerusform>Inizio delle conferme stimato entro %n blocchi.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Attenzione: Indirizzo Litecoin non valido</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Attenzione: Indirizzo LitecoinCash non valido</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2217,8 +2217,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Questo è un normale pagamento.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>L'indirizzo Litecoin a cui vuoi inviare il pagamento</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>L'indirizzo LitecoinCash a cui vuoi inviare il pagamento</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2237,8 +2237,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Rimuovi questa voce</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>La commissione sarà sottratta dall'importo che si sta inviando. Il beneficiario riceverà un totale di litecoin inferiore al valore digitato. Nel caso in cui siano stati selezionati più beneficiari la commissione sarà suddivisa in parti uguali.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>La commissione sarà sottratta dall'importo che si sta inviando. Il beneficiario riceverà un totale di litecoincash inferiore al valore digitato. Nel caso in cui siano stati selezionati più beneficiari la commissione sarà suddivisa in parti uguali.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2261,8 +2261,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Inserisci un'etichetta per questo indirizzo per aggiungerlo alla lista degli indirizzi utilizzati</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Messaggio incluso nel litecoin URI e che sarà memorizzato con la transazione per vostro riferimento. Nota: Questo messaggio non sarà inviato attraverso la rete Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Messaggio incluso nel litecoincash URI e che sarà memorizzato con la transazione per vostro riferimento. Nota: Questo messaggio non sarà inviato attraverso la rete LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2302,12 +2302,12 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>&Firma Messaggio</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>È possibile firmare messaggi/accordi con i propri indirizzi in modo da dimostrare di poter ricevere litecoin attraverso di essi. Si consiglia di prestare attenzione a non firmare dichiarazioni vaghe o casuali, attacchi di phishing potrebbero cercare di indurre ad apporre la firma su di esse. Si raccomanda di firmare esclusivamente dichiarazioni completamente dettagliate e delle quali si condivide in pieno il contenuto.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>È possibile firmare messaggi/accordi con i propri indirizzi in modo da dimostrare di poter ricevere litecoincash attraverso di essi. Si consiglia di prestare attenzione a non firmare dichiarazioni vaghe o casuali, attacchi di phishing potrebbero cercare di indurre ad apporre la firma su di esse. Si raccomanda di firmare esclusivamente dichiarazioni completamente dettagliate e delle quali si condivide in pieno il contenuto.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>L'indirizzo Litecoin da utilizzare per firmare il messaggio</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>L'indirizzo LitecoinCash da utilizzare per firmare il messaggio</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2338,8 +2338,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Copia la firma corrente nella clipboard</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Firma un messaggio per dimostrare di possedere questo indirizzo Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Firma un messaggio per dimostrare di possedere questo indirizzo LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2362,11 +2362,11 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Per verificare il messaggio inserire l'indirizzo del firmatario, il messaggio e la firma nei campi sottostanti, assicurandosi di copiare esattamente anche ritorni a capo, spazi, tabulazioni, etc.. Si raccomanda di non lasciarsi fuorviare dalla firma a leggere più di quanto non sia riportato nel testo del messaggio stesso, in modo da evitare di cadere vittima di attacchi di tipo man-in-the-middle. Si ricorda che la verifica della firma dimostra soltanto che il firmatario può ricevere pagamenti con l'indirizzo corrispondente, non prova l'invio di alcuna transazione.</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>L'indirizzo Litecoin con cui è stato contrassegnato il messaggio</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>L'indirizzo LitecoinCash con cui è stato contrassegnato il messaggio</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- <translation>Verifica il messaggio per accertare che sia stato firmato con l'indirizzo specificato</translation>
- </message>
- <message>
- @@ -2391,7 +2391,7 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- </message>
- <message>
- <source>The entered address does not refer to a key.</source>
- - <translation>L'indirizzo litecoin inserito non è associato a nessuna chiave.</translation>
- + <translation>L'indirizzo litecoincash inserito non è associato a nessuna chiave.</translation>
- </message>
- <message>
- <source>Wallet unlock was cancelled.</source>
- @@ -2850,7 +2850,7 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <name>WalletModel</name>
- <message>
- <source>Send Coins</source>
- - <translation>Invia Litecoin</translation>
- + <translation>Invia LitecoinCash</translation>
- </message>
- </context>
- <context>
- @@ -2947,8 +2947,8 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
- <translation>Impossibile avviare il server HTTP. Dettagli nel log di debug.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_ja.ts b/src/qt/locale/bitcoin_ja.ts
- index a28d75d..d99576f 100644
- --- a/src/qt/locale/bitcoin_ja.ts
- +++ b/src/qt/locale/bitcoin_ja.ts
- @@ -62,11 +62,11 @@
- <translation>????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>??????????????????? Litecoin ??????????????????????????????????????</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>??????????????????? LitecoinCash ??????????????????????????????????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>??????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -168,8 +168,8 @@
- <translation>??????????????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>??: ???????????????????????????????????<b>???? Litecoin ?????????</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>??: ???????????????????????????????????<b>???? LitecoinCash ?????????</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,7 +180,7 @@
- <translation>??????????????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>????????????? %1 ??????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -338,8 +338,8 @@
- <translation>??????????????????????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Litecoin ???????????</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>LitecoinCash ???????????</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>????????... (&V)</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>????????????????????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>????????????????????????? Litecoin ???????????????????</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>????????????????????????? LitecoinCash ???????????????????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>????? Litecoin ???????????????????????????????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>????? LitecoinCash ???????????????????????????????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>???????? (QR????litecoin:?????URI?????)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>???????? (QR????litecoincash:?????URI?????)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>?????????????????????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>litecoin: URI??????????????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>litecoincash: URI??????????????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>???????????? (&C)</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ? Litecoin ????????????????</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ? LitecoinCash ????????????????</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>??????????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>??? Litecoin ???????? ??????????? %1 ????????????????</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>??? LitecoinCash ???????? ??????????? %1 ????????????????</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>??????<b>????????????????</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>???????????????Litecoin ???????????????????????</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>???????????????LitecoinCash ???????????????????????</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>????????? "%1" ???? Litecoin ???????</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>????????? "%1" ???? LitecoinCash ???????</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,7 +851,7 @@
- <translation>????????????????%1 ????????????????????</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- <translation>%1 ?????????????????????????????????????????? %2 ????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -886,11 +886,11 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- <translation>?????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -1048,16 +1048,16 @@
- <translation>???????????? (&S)</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>?????????? Litecoin ????????????????????????? UPnP ????????????????????????????</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>?????????? LitecoinCash ????????????????????????? UPnP ????????????????????????????</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>UPnP ????????????? (&U)</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>SOCKS5 ???????Litecoin???????????</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>SOCKS5 ???????LitecoinCash???????????</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Tor?????????????????SOCKS5???????Litecoin???????????</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Tor?????????????????SOCKS5???????LitecoinCash???????????</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1195,8 +1195,8 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>?????????????????????????????????????? Litecoin ????????????????????????????????????</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>?????????????????????????????????????? LitecoinCash ????????????????????????????????????</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>???????????????</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Litecoin ????????: click-to-pay handler</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>LitecoinCash ????????: click-to-pay handler</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>?????????%1??????</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI ????????! ?????? Litecoin ?????????????? URI ?????????????????????????</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI ????????! ?????? LitecoinCash ?????????????? URI ?????????????????????????</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Litecoin????????????? (? %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>LitecoinCash????????????? (? %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>???????????????? (???) (&E)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>????????????????????????????????????????????????????Litecoin??????????????????????????????</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>????????????????????????????????????????????????????LitecoinCash??????????????????????????????</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2037,8 +2037,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>??????????????????????????????????????????????????????????????????litecoin????????????????????????????????????????????????????????????????????????</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>??????????????????????????????????????????????????????????????????litecoincash????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2201,8 +2201,8 @@
- <translation><numerusform>%n ???????????????????????</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>??????Litecoin??????</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>??????LitecoinCash??????</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2244,8 +2244,8 @@
- <translation>???????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>??????Litecoin????</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>??????LitecoinCash????</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2264,7 +2264,7 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>??????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -2288,8 +2288,8 @@
- <translation>?????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>litecoin: URI???????????????????????????????????????????????????????Litecoin?????????????????????????</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>litecoincash: URI???????????????????????????????????????????????????????LitecoinCash?????????????????????????</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2333,12 +2333,12 @@
- <translation>???????? (&S)</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>??????????Litecoin????</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>??????????LitecoinCash????</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2369,8 +2369,8 @@
- <translation>????????????????????????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>?? Litecoin ?????????????????????????????</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>?? LitecoinCash ?????????????????????????????</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2393,12 +2393,12 @@
- <translation>???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>?????????????Litecoin????</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>?????????????LitecoinCash????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>????? Litecoin ?????????????????????????</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>????? LitecoinCash ?????????????????????????</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -3058,8 +3058,8 @@
- <translation>HTTP?????????????????????????????????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin ???</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash ???</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_ja_JP.ts b/src/qt/locale/bitcoin_ja_JP.ts
- index e6e27a3..2338e0e 100644
- --- a/src/qt/locale/bitcoin_ja_JP.ts
- +++ b/src/qt/locale/bitcoin_ja_JP.ts
- @@ -62,11 +62,11 @@
- <translation>??????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>???????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -168,7 +168,7 @@
- <translation>????????????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>??: ???????????????????? <b>????????????????????</b>!</translation>
- </message>
- <message>
- @@ -180,7 +180,7 @@
- <translation>????????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>??????????????????%1????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -338,7 +338,7 @@
- <translation>??????????????????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- + <source>Send coins to a LitecoinCash address</source>
- <translation>?????????????????</translation>
- </message>
- <message>
- @@ -362,7 +362,7 @@
- <translation>&????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>??????</translation>
- </message>
- <message>
- @@ -390,11 +390,11 @@
- <translation>??????????????????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- <translation>????????????????????????????????????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- <translation>???????????????????????????????????</translation>
- </message>
- <message>
- @@ -414,7 +414,7 @@
- <translation>???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- <translation>????? (QR???????????URI???)</translation>
- </message>
- <message>
- @@ -426,7 +426,7 @@
- <translation>?????????????????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- + <source>Open a litecoincash: URI or payment request</source>
- <translation>???????URI??????????</translation>
- </message>
- <message>
- @@ -470,7 +470,7 @@
- <translation>???</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>????????????????????????????????%1???????????</translation>
- </message>
- <message>
- @@ -540,7 +540,7 @@
- <translation>??? <b>?????</b> ????? <b>?????????</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- <translation>??????????????????????????????????????</translation>
- </message>
- </context>
- @@ -734,7 +734,7 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation>????????? "%1" ??????????????????????</translation>
- </message>
- <message>
- @@ -866,11 +866,11 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation>??????????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- <translation>???????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -1028,7 +1028,7 @@
- <translation>&??????????????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- <translation>????????????????????????????????????????UPnP?????????????????????</translation>
- </message>
- <message>
- @@ -1036,7 +1036,7 @@
- <translation>&UPnP??????????????</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- <translation>SOCKS5????????????????????????</translation>
- </message>
- <message>
- @@ -1072,7 +1072,7 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- <translation>Tor?????????????????SOCKS5?????????????????????</translation>
- </message>
- <message>
- @@ -1171,7 +1171,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- <translation>?????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -1246,7 +1246,7 @@
- <translation>????????</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- <translation>??????????????: click-to-pay handler</translation>
- </message>
- <message>
- @@ -1262,7 +1262,7 @@
- <translation>????????? %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- <translation>URL????????????! ?????????????????????URI????????????????????????</translation>
- </message>
- <message>
- @@ -1356,7 +1356,7 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- <translation>????????????? (? %1)</translation>
- </message>
- <message>
- @@ -1744,7 +1744,7 @@
- <translation>&???????????????????(???)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- <translation>????????????????????????????????????????: ???????????????????????????????????</translation>
- </message>
- <message>
- @@ -1973,7 +1973,7 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -2121,7 +2121,7 @@
- <translation>%1??????????</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- + <source>Warning: Invalid LitecoinCash address</source>
- <translation>??: ?????????????</translation>
- </message>
- <message>
- @@ -2164,7 +2164,7 @@
- <translation>???????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation>?????????????????</translation>
- </message>
- <message>
- @@ -2184,7 +2184,7 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>???????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -2208,7 +2208,7 @@
- <translation>?????????????????????????????????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- <translation>???????????????????URI?????????????????: ????????????????????????</translation>
- </message>
- <message>
- @@ -2253,11 +2253,11 @@
- <translation>&???????</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- + <source>The LitecoinCash address to sign the message with</source>
- <translation>??????????????????????</translation>
- </message>
- <message>
- @@ -2289,7 +2289,7 @@
- <translation>??????????????????????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>???????????????????????????</translation>
- </message>
- <message>
- @@ -2313,11 +2313,11 @@
- <translation>??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- + <source>The LitecoinCash address the message was signed with</source>
- <translation>??????????????????????????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- <translation>?????????????????????????????????????????</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_ka.ts b/src/qt/locale/bitcoin_ka.ts
- index 0213c36..ff092cb 100644
- --- a/src/qt/locale/bitcoin_ka.ts
- +++ b/src/qt/locale/bitcoin_ka.ts
- @@ -190,8 +190,8 @@
- <translation>?????? ???????? ????????????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>????????? ???????? Litecoin-??????????</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>????????? ???????? LitecoinCash-??????????</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -214,8 +214,8 @@
- <translation>&???????????</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -242,12 +242,12 @@
- <translation>?????? ??????? ?????? ??????????? ????????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>????????? ????????? ?????? Litecoin-???????????? ???? ????????, ??? ?? ???????</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>????????? ????????? ?????? LitecoinCash-???????????? ???? ????????, ??? ?? ???????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>?????????, ??? ???????? ???????????? ?????????? Litecoin-??????????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>?????????, ??? ???????? ???????????? ?????????? LitecoinCash-??????????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -266,8 +266,8 @@
- <translation>????????? ??????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>???????? ???????? (????????? QR-?????? ?? litecoin: ???????)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>???????? ???????? (????????? QR-?????? ?? litecoincash: ???????)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -278,8 +278,8 @@
- <translation>???????????? ??????? ????????????? ?? ?????????? ???? ???????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>litecoin: URI-?? ?? ???????? ????????? ??????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>litecoincash: URI-?? ?? ???????? ????????? ??????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -642,8 +642,8 @@
- <translation>?????????????? ?????? ??????????? ????????? ?????? ???? ?????????? ?????????? ??????, ????? ??????????? ?? ?????? ???? ??????? ?????. ?? ???????? ?????? ?????? ?????????.</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>???????? Litecoin-???????? ?????? ?????????? ??????. ???????, ?? ?????? ??????? ??????? ???? UPnP.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>???????? LitecoinCash-???????? ?????? ?????????? ??????. ???????, ?? ?????? ??????? ??????? ???? UPnP.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -749,8 +749,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>????????? ?????????? ???????? ??????????? ????. ?????? ?????? ??????????? ????????????? Litecoin-?? ??????? ???????? ?????????? ??????, ?? ??????? ??? ?? ???? ???????????.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>????????? ?????????? ???????? ??????????? ????. ?????? ?????? ??????????? ????????????? LitecoinCash-?? ??????? ???????? ?????????? ??????, ?? ??????? ??? ?? ???? ???????????.</translation>
- </message>
- <message>
- <source>Available:</source>
- @@ -954,7 +954,7 @@
- <translation>??&?? ???????????? ??????? ?????????? ?????????? (?? ???? ?????????????)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- <translation>????????????? ??????, ??????? ?????? ???????? ????????? ?? ????????? ?????? ????????? ?????????. ????????: ?????? ?? ??????? ???????? ????????? ??????.</translation>
- </message>
- <message>
- @@ -1170,7 +1170,7 @@
- <translation>????????? ?? ?????????? ??????? ???????????? ???????????? ????? ????????????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- <translation>??????, ??????? ??? ?????? ????????: URI, ??????? ????????? ?????????????? ????? ?????????. ????????: ?????? ?? ??????? ???????? ????????? ??????.</translation>
- </message>
- <message>
- @@ -1231,7 +1231,7 @@
- <translation>????????? ?????????? ???????? ??????????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>???????? ???? ???? ???????????????, ??? ?? ????????? ???????</translation>
- </message>
- <message>
- @@ -1251,8 +1251,8 @@
- <translation>??????? &???????????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>?????????, ??? ?????? ???????????? ?????????? Litecoin-??????????</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>?????????, ??? ?????? ???????????? ?????????? LitecoinCash-??????????</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1336,8 +1336,8 @@
- <translation>???????????? ??????? ?? ?????????? ??????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_kk_KZ.ts b/src/qt/locale/bitcoin_kk_KZ.ts
- index 71ad4fe..24faf62 100644
- --- a/src/qt/locale/bitcoin_kk_KZ.ts
- +++ b/src/qt/locale/bitcoin_kk_KZ.ts
- @@ -70,7 +70,7 @@
- <translation>????? ????? ???????</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>???????</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_ko_KR.ts b/src/qt/locale/bitcoin_ko_KR.ts
- index 63befd2..8282ff6 100644
- --- a/src/qt/locale/bitcoin_ko_KR.ts
- +++ b/src/qt/locale/bitcoin_ko_KR.ts
- @@ -62,11 +62,11 @@
- <translation>?? ???</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>??????? ??? ?? ?????. ??? ??? ?? ??? ?? ??? ?? ?????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>??????? ?? ? ?? ?? ?????. ? ???? ??? ?? ??? ?????. </translation>
- </message>
- <message>
- @@ -168,7 +168,7 @@
- <translation>?? ??? ??</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>??: ?? ??? ? ??? ????? ???? ??, <b>?? ???????? ???? ? ????</b>!</translation>
- </message>
- <message>
- @@ -180,7 +180,7 @@
- <translation>?? ??? ??</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>??? ?? ??? ??? ?? %1? ?????. ?? ???? ????? ??? ???? ?? ?????? ??? ??? ??? ? ??? ?????.</translation>
- </message>
- <message>
- @@ -338,7 +338,7 @@
- <translation>????? ?? ?? ???...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- + <source>Send coins to a LitecoinCash address</source>
- <translation>?????? ??? ?? ??</translation>
- </message>
- <message>
- @@ -362,7 +362,7 @@
- <translation>??? ??(&V)...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>??????</translation>
- </message>
- <message>
- @@ -390,11 +390,11 @@
- <translation>??? ??? ??? ?????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- <translation>?? ??? ?? ???? ???? ?? ?????? ??? ??? ? ????.</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- <translation>?????? ??? ?? ?? ??? ?? ??? ???? ?? ?? ?? ??? ? ????.</translation>
- </message>
- <message>
- @@ -414,7 +414,7 @@
- <translation>?? ???</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- <translation>?? ???? (QR??? ??????? ?????: URIs)</translation>
- </message>
- <message>
- @@ -426,15 +426,15 @@
- <translation>?? ?? ??? ?? ??? ?? ??? ??? ?????.</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>litecoin: URI ?? ???? ??</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>litecoincash: URI ?? ???? ??</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>??? ??(&C)</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- + <source>%n active connection(s) to LitecoinCash network</source>
- <translation><numerusform>?????? ????? %n?? ??? ????? ????.</numerusform></translation>
- </message>
- <message>
- @@ -478,7 +478,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>??? ? ?? ?????? ??? ?? ??? ???? ?? %1 ??? ???? ?????.</translation>
- </message>
- <message>
- @@ -548,7 +548,7 @@
- <translation>??? <b>???</b> ??? ?? <b>???</b> ????</translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- <translation>???? ??? ??????. ??????? ??? ???? ??? ? ?? ? ?????.</translation>
- </message>
- </context>
- @@ -742,7 +742,7 @@
- <translation>??? ?? ??</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation>??? "%1" ??? ??? ?????? ??? ????.</translation>
- </message>
- <message>
- @@ -851,7 +851,7 @@
- <translation>????? ???? ???? ????. %1? ??? ???? ???? ??? ? ????. </translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- <translation>%1? ????? ???? ???? ?????. ??? %2GB? ???? ? ??? ???? ??? ????? ?? ?????. ??? ?? ?? ? ??? ?????. </translation>
- </message>
- <message>
- @@ -886,11 +886,11 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation>?? ??? ?? ??? ?? ????, ???? ??? ??? ??? ?? ?? ????. ? ??? ?????? ????? ??? ???? ???? ??? ??? ?? ??????.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- <translation>?? ???? ?? ??? ??? ?? ??????? ????? ?? ?? ?????? ???? ????.</translation>
- </message>
- <message>
- @@ -1048,15 +1048,15 @@
- <translation>???? ?? ?? ?? (&S)</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>????? Litecoin ????? ??? ????? ???. ????? UPnP? ???? ??? ?? ???? ?????.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>????? LitecoinCash ????? ??? ????? ???. ????? UPnP? ???? ??? ?? ???? ?????.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>???? &UPnP ?? ??</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- <translation>SOCKS5 ???? ?? ?????? ???? ??</translation>
- </message>
- <message>
- @@ -1096,7 +1096,7 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- <translation>Tor ???? ???? ?????? ????? ???? ?? ??? SOCKS5 ???? ??.</translation>
- </message>
- <message>
- @@ -1195,7 +1195,7 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- <translation>??? ??? ??? ? ????. ?????? ????? ???? ? ??? ??? ???? ??? ???, ?? ??? ???? ?????.</translation>
- </message>
- <message>
- @@ -1270,7 +1270,7 @@
- <translation>?? ?? ??</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- <translation>??????? ??? ? ????: ?????? ?????</translation>
- </message>
- <message>
- @@ -1286,7 +1286,7 @@
- <translation>??? ?? ????? %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- <translation>URI? ??? ??? ??????. ??? ?????? ??? URI ???? ??? ??? ??? ? ????.</translation>
- </message>
- <message>
- @@ -1380,7 +1380,7 @@
- <translation>???</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- <translation>?????? ??? ???? (?. %1)</translation>
- </message>
- <message>
- @@ -1804,7 +1804,7 @@
- <translation>??? ??? ??? ?????(&E) (???? ????)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- <translation>?? ??? ???? ????? ??? ???. ? ???? ??? ?? ? ??? ? ???. ??: ? ???? ?????? ????? ???? ????.</translation>
- </message>
- <message>
- @@ -2037,7 +2037,7 @@
- <translation>?? ???</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>??? ???? ??? ??? ?? ???? ???? ??????? ?????. ??? ?????? ????? ????? ? ?? ?? ??? ??? ??? ? ? ?? ????.</translation>
- </message>
- <message>
- @@ -2201,7 +2201,7 @@
- <translation><numerusform>%n ?? ?? ??? ??? ??? ?????.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- + <source>Warning: Invalid LitecoinCash address</source>
- <translation>??: ??? ???????????</translation>
- </message>
- <message>
- @@ -2244,7 +2244,7 @@
- <translation>??? ???? ?????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation>? ?????? ??? ?????</translation>
- </message>
- <message>
- @@ -2264,7 +2264,7 @@
- <translation>??? ????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>???? ???? ???? ?????. ???? ?? ???? ??? ???? ?? ??? ???? ???. ?? ??? ?? ?? ?? ???? ???? ??????.</translation>
- </message>
- <message>
- @@ -2288,7 +2288,7 @@
- <translation>??? ?? ??? ? ??? ???? ?? ?? ??? ??? ???. </translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- <translation>??????? ??? ???: ????? ??? ?? ??? URI. ??: ? ???? ?????? ????? ???? ????.</translation>
- </message>
- <message>
- @@ -2333,11 +2333,11 @@
- <translation>??? ??(&S)</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>??? ??? ???? ?? ??? ???? ??? ? ????. ?? ???? ???? ???? ??? ?? ?? ???? ? ? ????, ???? ?? ?? ??? ??? ??????. ???? ?? ???? ?? ? ???? ???? ??????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- + <source>The LitecoinCash address to sign the message with</source>
- <translation>???? ??? ?????? ??</translation>
- </message>
- <message>
- @@ -2369,7 +2369,7 @@
- <translation>?? ??? ??? ????? ??</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>???? ?????? ??? ????? ??? ??????</translation>
- </message>
- <message>
- @@ -2393,11 +2393,11 @@
- <translation>???? ???? ?? ?? ?? ?? ?? ??? ???, ????? ?????. (??? ??? ????, ????, ? ?? ?? ???? ????? ??? ??? ???? ?????) ? ??? ??? ??? ? ????, ???? ???? ?? ???? ??? ???? ??? ???? ??? ???? ???. </translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- + <source>The LitecoinCash address the message was signed with</source>
- <translation>???? ??? ??? ?????? ??</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- <translation>??? ????????? ????? ???? ?????</translation>
- </message>
- <message>
- @@ -3058,7 +3058,7 @@
- <translation>HTTP ??? ??? ? ????. ??? ??? ??? ??? ?? ???.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- + <source>LitecoinCash Core</source>
- <translation>?????? ??</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_ky.ts b/src/qt/locale/bitcoin_ky.ts
- index c7acefb..0d8cbbe 100644
- --- a/src/qt/locale/bitcoin_ky.ts
- +++ b/src/qt/locale/bitcoin_ky.ts
- @@ -38,8 +38,8 @@
- <translation>?????????? &????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- diff --git a/src/qt/locale/bitcoin_la.ts b/src/qt/locale/bitcoin_la.ts
- index 79a7e39..bf131cd 100644
- --- a/src/qt/locale/bitcoin_la.ts
- +++ b/src/qt/locale/bitcoin_la.ts
- @@ -114,8 +114,8 @@
- <translation>Recreans indicem frustorum in disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Mitte nummos ad inscriptionem Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Mitte nummos ad inscriptionem LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -138,8 +138,8 @@
- <translation>&Verifica nuntium...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -166,12 +166,12 @@
- <translation>Cifra claves privatas quae cassidili tui sunt</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signa nuntios cum tuis inscriptionibus Litecoin ut demonstres te eas possidere</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signa nuntios cum tuis inscriptionibus LitecoinCash ut demonstres te eas possidere</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifica nuntios ut certus sis eos signatos esse cum specificatis inscriptionibus Litecoin</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifica nuntios ut certus sis eos signatos esse cum specificatis inscriptionibus LitecoinCash</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -346,8 +346,8 @@
- <translation>Cassidile</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Aperi per se portam clientis Litecoin in itineratore. Hoc tantum effectivum est si itineratrum tuum supportat UPnP et id activum est.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Aperi per se portam clientis LitecoinCash in itineratore. Hoc tantum effectivum est si itineratrum tuum supportat UPnP et id activum est.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -425,8 +425,8 @@
- <translation>Schema</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Monstrata informatio fortasse non recentissima est. Tuum cassidile per se synchronizat cum rete Litecoin postquam conexio constabilita est, sed hoc actio nondum perfecta est.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Monstrata informatio fortasse non recentissima est. Tuum cassidile per se synchronizat cum rete LitecoinCash postquam conexio constabilita est, sed hoc actio nondum perfecta est.</translation>
- </message>
- <message>
- <source>Immature:</source>
- @@ -671,8 +671,8 @@
- <translation>Copia signationem in latibulum systematis</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Signa nuntium ut demonstres hanc inscriptionem Litecoin a te possessa esse</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Signa nuntium ut demonstres hanc inscriptionem LitecoinCash a te possessa esse</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -691,8 +691,8 @@
- <translation>&Verifica Nuntium</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verifica nuntium ut cures signatum esse cum specifica inscriptione Litecoin</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verifica nuntium ut cures signatum esse cum specifica inscriptione LitecoinCash</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -768,8 +768,8 @@
- <translation>Operare infere sicut daemon et mandata accipe</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Nucleus</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Nucleus</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_lt.ts b/src/qt/locale/bitcoin_lt.ts
- index 43384e5..3ffe785 100644
- --- a/src/qt/locale/bitcoin_lt.ts
- +++ b/src/qt/locale/bitcoin_lt.ts
- @@ -162,8 +162,8 @@
- <translation>Blokai i? naujo indeksuojami...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Si?sti monetas Litecoin adresui</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Si?sti monetas LitecoinCash adresui</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -186,8 +186,8 @@
- <translation>&Tikrinti ?inut?...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -432,8 +432,8 @@
- <translation>Pinigin?</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Automati?kai atidaryti Litecoin kliento prievad? mar?rutizatoriuje. Tai veikia tik tada, kai j?s? mar?rutizatorius palaiko UPnP ir ji ?jungta.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Automati?kai atidaryti LitecoinCash kliento prievad? mar?rutizatoriuje. Tai veikia tik tada, kai j?s? mar?rutizatorius palaiko UPnP ir ji ?jungta.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -865,7 +865,7 @@
- <translation>?veskite prane?im?, kur? norite pasira?yti ?ia</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>Registruotis ?inute ?rodymuii, kad turite ?? adres?</translation>
- </message>
- <message>
- @@ -881,8 +881,8 @@
- <translation>&Patikrinti ?inut?</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Patikrinkite ?inut?, jog ?sitikintum?te, kad j? pasira?? nurodytas Litecoin adresas</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Patikrinkite ?inut?, jog ?sitikintum?te, kad j? pasira?? nurodytas LitecoinCash adresas</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -958,8 +958,8 @@
- <translation>Dirbti fone kaip ?e??lyje ir priimti komandas</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin branduolys</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash branduolys</translation>
- </message>
- <message>
- <source>Error opening block database</source>
- diff --git a/src/qt/locale/bitcoin_lv_LV.ts b/src/qt/locale/bitcoin_lv_LV.ts
- index 3029d5c..8495d01 100644
- --- a/src/qt/locale/bitcoin_lv_LV.ts
- +++ b/src/qt/locale/bitcoin_lv_LV.ts
- @@ -39,11 +39,11 @@
- </message>
- <message>
- <source>Choose the address to send coins to</source>
- - <translation>Izv?lies adresi uz kuru s?t?t litecoins</translation>
- + <translation>Izv?lies adresi uz kuru s?t?t coins</translation>
- </message>
- <message>
- <source>Choose the address to receive coins with</source>
- - <translation>Izv?lies adresi ar kuru sa?emt litecoins</translation>
- + <translation>Izv?lies adresi ar kuru sa?emt coins</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -202,8 +202,8 @@
- <translation>Bloku reindeks??ana no diska...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Nos?t?t bitkoinus uz Litecoin adresi</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Nos?t?t bitkoinus uz LitecoinCash adresi</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -226,8 +226,8 @@
- <translation>&P?rbaud?t zi?ojumu...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -254,12 +254,12 @@
- <translation>?ifr?t priv?t?s atsl?gas kuras pieder tavam maci?am</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Parakst?t zi?ojumus ar sav?m Litecoin adres?m lai pier?d?tu ka t?s pieder tev</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Parakst?t zi?ojumus ar sav?m LitecoinCash adres?m lai pier?d?tu ka t?s pieder tev</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>P?rbaud?t zi?ojumus lai p?rliecin?tos, ka tie tika parakst?ti ar nor?d?taj?m Litecoin adres?m</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>P?rbaud?t zi?ojumus lai p?rliecin?tos, ka tie tika parakst?ti ar nor?d?taj?m LitecoinCash adres?m</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -278,12 +278,12 @@
- <translation>Ci??u r?kjosla</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Piepras?t maks?jumus (izveido QR kodu un litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Piepras?t maks?jumus (izveido QR kodu un litecoincash: URIs)</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Atv?rt litecoin URI vai maks?juma piepras?jumu</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Atv?rt litecoincash URI vai maks?juma piepras?jumu</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -563,15 +563,15 @@
- </message>
- <message>
- <source>Enable coin &control features</source>
- - <translation>Iesl?gt litecoin &kontroles funkcijas</translation>
- + <translation>Iesl?gt litecoincash &kontroles funkcijas</translation>
- </message>
- <message>
- <source>&Spend unconfirmed change</source>
- <translation>&T?r?t neapstiprin?tu atlikumu</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Uz r?tera autom?tiski atv?rt Litecoin klienta portu. Tas str?d? tikai tad, ja r?teris atbalsta UPnP un tas ir iesl?gts.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Uz r?tera autom?tiski atv?rt LitecoinCash klienta portu. Tas str?d? tikai tad, ja r?teris atbalsta UPnP un tas ir iesl?gts.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -623,7 +623,7 @@
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- - <translation>Vai r?d?t Litecoin kontroles funkcijas vai n?.</translation>
- + <translation>Vai r?d?t LitecoinCash kontroles funkcijas vai n?.</translation>
- </message>
- <message>
- <source>&OK</source>
- @@ -657,8 +657,8 @@
- <translation>Forma</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Att?lot? inform?cija var b?t novecojusi. J?su maci?? p?c savienojuma izveides autom?tiski sinhroniz?jas ar Litecoin t?klu, ta?u ?is process v?l nav beidzies.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Att?lot? inform?cija var b?t novecojusi. J?su maci?? p?c savienojuma izveides autom?tiski sinhroniz?jas ar LitecoinCash t?klu, ta?u ?is process v?l nav beidzies.</translation>
- </message>
- <message>
- <source>Available:</source>
- @@ -932,7 +932,7 @@
- </message>
- <message>
- <source>Coin Control Features</source>
- - <translation>Litecoin Kontroles Funkcijas</translation>
- + <translation>LitecoinCash Kontroles Funkcijas</translation>
- </message>
- <message>
- <source>Inputs...</source>
- @@ -1111,8 +1111,8 @@
- <translation>Kop?t parakstu uz sist?mas starpliktuvi</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Parakst?t zi?ojumu lai pier?d?tu, ka esi ??s Litecoin adreses ?pa?nieks.</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Parakst?t zi?ojumu lai pier?d?tu, ka esi ??s LitecoinCash adreses ?pa?nieks.</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1228,8 +1228,8 @@
- <translation>Darbin?t fon? k? servisu un pie?emt komandas</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source><category> can be:</source>
- diff --git a/src/qt/locale/bitcoin_mk_MK.ts b/src/qt/locale/bitcoin_mk_MK.ts
- index bc24233..7249817 100644
- --- a/src/qt/locale/bitcoin_mk_MK.ts
- +++ b/src/qt/locale/bitcoin_mk_MK.ts
- @@ -138,7 +138,7 @@
- <translation>???????? ??????????? ?? ??????? ?? ??????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- + <source>Send coins to a LitecoinCash address</source>
- <translation>??????? ???????? ?? ??????? ??????</translation>
- </message>
- <message>
- @@ -146,7 +146,7 @@
- <translation>&??????? ??????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>???????</translation>
- </message>
- <message>
- @@ -578,7 +578,7 @@
- <translation>?????:</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- + <source>LitecoinCash Core</source>
- <translation>??????? Core</translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_mn.ts b/src/qt/locale/bitcoin_mn.ts
- index 046fd5e..09c7441 100644
- --- a/src/qt/locale/bitcoin_mn.ts
- +++ b/src/qt/locale/bitcoin_mn.ts
- @@ -126,8 +126,8 @@
- <translation>????????? ?? ???????? ???????? ????????</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- diff --git a/src/qt/locale/bitcoin_ms_MY.ts b/src/qt/locale/bitcoin_ms_MY.ts
- index da2638f..a4c32fb 100644
- --- a/src/qt/locale/bitcoin_ms_MY.ts
- +++ b/src/qt/locale/bitcoin_ms_MY.ts
- @@ -63,12 +63,12 @@ Alihkan fail data ke dalam tab semasa</translation>
- <translation>alamat-alamat penerimaan</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Ini adalah alamat Litecoin anda untuk pembayaran. Periksa jumlah dan alamat penerima sebelum membuat penghantaran koin sentiasa.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Ini adalah alamat LitecoinCash anda untuk pembayaran. Periksa jumlah dan alamat penerima sebelum membuat penghantaran koin sentiasa.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Ini adalah alamat Litecoin anda untuk menerima pembayaraan. Anda disyorkan untuk menguna alamat menerima untuk setiap transaksi.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Ini adalah alamat LitecoinCash anda untuk menerima pembayaraan. Anda disyorkan untuk menguna alamat menerima untuk setiap transaksi.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -169,8 +169,8 @@ Alihkan fail data ke dalam tab semasa</translation>
- <translation>Mengesahkan enkripsi dompet</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Amaran: Jika anda enkripkan dompet anda dan hilangkan frasa laluan, anda akan <b>ANDA AKAN HILANGKAN SEMUA LITECOIN ANDA</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Amaran: Jika anda enkripkan dompet anda dan hilangkan frasa laluan, anda akan <b>ANDA AKAN HILANGKAN SEMUA LITECOINCASH ANDA</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -181,8 +181,8 @@ Alihkan fail data ke dalam tab semasa</translation>
- <translation>Dompet dienkripsi</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 akan tutup untuk menyelesaikan proses enkripsi. Ingat bahawa enkripsi tidak boleh melidungi sepenuhnya litecoins anda daripada dicuri oleh malware yang menjangkiti komputer anda.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 akan tutup untuk menyelesaikan proses enkripsi. Ingat bahawa enkripsi tidak boleh melidungi sepenuhnya coins anda daripada dicuri oleh malware yang menjangkiti komputer anda.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -339,8 +339,8 @@ Alihkan fail data ke dalam tab semasa</translation>
- <translation>Reindexi blok pada cakera...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Menghantar koin kepada alamat Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Menghantar koin kepada alamat LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -363,8 +363,8 @@ Alihkan fail data ke dalam tab semasa</translation>
- <translation>sahkan mesej</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -391,12 +391,12 @@ Alihkan fail data ke dalam tab semasa</translation>
- <translation>sulitkan kata laluan milik peribadi anda </translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Log mesej dengan alamat Litecoin anda untuk membuktikan anda memilikinya</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Log mesej dengan alamat LitecoinCash anda untuk membuktikan anda memilikinya</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Sahkan mesej untuk memastikan mereka telah ditandatangani dengan alamat Litecoin yang ditentukan</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Sahkan mesej untuk memastikan mereka telah ditandatangani dengan alamat LitecoinCash yang ditentukan</translation>
- </message>
- <message>
- <source>&File</source>
- diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts
- index cf0b6dd..b7534b1 100644
- --- a/src/qt/locale/bitcoin_nb.ts
- +++ b/src/qt/locale/bitcoin_nb.ts
- @@ -62,12 +62,12 @@
- <translation>Mottaksadresser</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Dette er dine Litecoin-adresser for sending av betalinger. Sjekk alltid beløpet og mottakeradressen før sending av mynter.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Dette er dine LitecoinCash-adresser for sending av betalinger. Sjekk alltid beløpet og mottakeradressen før sending av mynter.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Dette er dine Litecoin-adresser for å sende betalinger med. Det er anbefalt å bruke en ny mottaksadresse for hver transaksjon.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Dette er dine LitecoinCash-adresser for å sende betalinger med. Det er anbefalt å bruke en ny mottaksadresse for hver transaksjon.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Bekreft kryptering av lommebok</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Advarsel: Hvis du krypterer lommeboken og mister adgangsfrasen, så vil du <b>MISTE ALLE DINE LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Advarsel: Hvis du krypterer lommeboken og mister adgangsfrasen, så vil du <b>MISTE ALLE DINE LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Lommebok kryptert</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine litecoins fra å bli stjålet om skadevare infiserer datamaskinen din.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine coins fra å bli stjålet om skadevare infiserer datamaskinen din.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -334,8 +334,8 @@
- <translation>Reindekserer blokker på harddisk...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Send til en Litecoin-adresse</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Send til en LitecoinCash-adresse</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -358,8 +358,8 @@
- <translation>&Verifiser melding...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -386,12 +386,12 @@
- <translation>Krypter de private nøklene som tilhører lommeboken din</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signer en melding med Litecoin-adressene dine for å bevise at du eier dem</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signer en melding med LitecoinCash-adressene dine for å bevise at du eier dem</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Bekreft meldinger for å være sikker på at de ble signert av en angitt Litecoin-adresse</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Bekreft meldinger for å være sikker på at de ble signert av en angitt LitecoinCash-adresse</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -410,8 +410,8 @@
- <translation>Verktøylinje for faner</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Forespør betalinger (genererer QR-koder og litecoin: URIer)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Forespør betalinger (genererer QR-koder og litecoincash: URIer)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -422,16 +422,16 @@
- <translation>Vis listen over bruke mottaksadresser og merkelapper</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Åpne en Litecoin: URI eller betalingsetterspørring</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Åpne en LitecoinCash: URI eller betalingsetterspørring</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Kommandolinjevalg</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktiv forbindelse til Litecoin-nettverket</numerusform><numerusform>%n aktive forbindelser til Litecoin-nettverket</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktiv forbindelse til LitecoinCash-nettverket</numerusform><numerusform>%n aktive forbindelser til LitecoinCash-nettverket</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -532,8 +532,8 @@
- <translation>Lommeboken er <b>kryptert</b> og for tiden <b>låst</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>En fatal feil har inntruffet. Litecoin kan ikke lenger trygt fortsette, og må derfor avslutte.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>En fatal feil har inntruffet. LitecoinCash kan ikke lenger trygt fortsette, og må derfor avslutte.</translation>
- </message>
- </context>
- <context>
- @@ -960,16 +960,16 @@
- <translation>&Bruk ubekreftet veksel</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Åpne automatisk Litecoin klientporten på ruteren. Dette virker kun om din ruter støtter UPnP og dette er påslått.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Åpne automatisk LitecoinCash klientporten på ruteren. Dette virker kun om din ruter støtter UPnP og dette er påslått.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Sett opp port ved hjelp av &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Koble til Litecoin-nettverket gjennom en SOCKS5 proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Koble til LitecoinCash-nettverket gjennom en SOCKS5 proxy.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1008,8 +1008,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Koble til Litecoin-nettverket gjennom en separat SOCKS5 mellomtjener for Tor skjulte tjenester.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Koble til LitecoinCash-nettverket gjennom en separat SOCKS5 mellomtjener for Tor skjulte tjenester.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1053,7 +1053,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Velg standard delt enhet for visning i grensesnittet og for sending av litecoins.</translation>
- + <translation>Velg standard delt enhet for visning i grensesnittet og for sending av coins.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1103,8 +1103,8 @@
- <translation>Skjema</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Informasjonen som vises kan være foreldet. Din lommebok synkroniseres automatisk med Litecoin-nettverket etter at tilkobling er opprettet, men denne prosessen er ikke ferdig enda.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Informasjonen som vises kan være foreldet. Din lommebok synkroniseres automatisk med LitecoinCash-nettverket etter at tilkobling er opprettet, men denne prosessen er ikke ferdig enda.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1192,8 +1192,8 @@
- <translation>Beløp</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Oppgi en Litecoin-adresse (f.eks. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Oppgi en LitecoinCash-adresse (f.eks. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1568,8 +1568,8 @@
- <translation>Gj&enbruk en eksisterende mottaksadresse (ikke anbefalt)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>En valgfri melding å tilknytte betalingsetterspørringen, som vil bli vist når forespørselen er åpnet. Meldingen vil ikke bli sendt med betalingen over Litecoin-nettverket.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>En valgfri melding å tilknytte betalingsetterspørringen, som vil bli vist når forespørselen er åpnet. Meldingen vil ikke bli sendt med betalingen over LitecoinCash-nettverket.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1674,7 +1674,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Send Litecoins</translation>
- + <translation>Send LCC</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -1753,8 +1753,8 @@
- <translation>minstebeløp</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Betaling av bare minimumsavgiften går helt fint så lenge det er mindre transaksjonsvolum enn plass i blokkene. Men vær klar over at dette kan ende opp i en transaksjon som aldri blir bekreftet når det er mer etterspørsel etter Litecoin-transaksjoner enn nettverket kan behandle.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Betaling av bare minimumsavgiften går helt fint så lenge det er mindre transaksjonsvolum enn plass i blokkene. Men vær klar over at dette kan ende opp i en transaksjon som aldri blir bekreftet når det er mer etterspørsel etter LitecoinCash-transaksjoner enn nettverket kan behandle.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -1860,8 +1860,8 @@
- <translation>Dette er en normal betaling.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Litecoin-adressen betalingen skal sendes til</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>LitecoinCash-adressen betalingen skal sendes til</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1880,8 +1880,8 @@
- <translation>Fjern denne oppføringen</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Gebyret vil bli trukket fra beløpet som blir sendt. Mottakeren vil motta mindre litecoins enn det du skriver inn i beløpsfeltet. Hvis det er valgt flere mottakere, deles gebyret likt.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Gebyret vil bli trukket fra beløpet som blir sendt. Mottakeren vil motta mindre coins enn det du skriver inn i beløpsfeltet. Hvis det er valgt flere mottakere, deles gebyret likt.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -1904,8 +1904,8 @@
- <translation>Skriv inn en merkelapp for denne adressen for å legge den til listen av brukte adresser</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>En melding som var tilknyttet litecoinen: URI vil bli lagret med transaksjonen for din oversikt. Denne meldingen vil ikke bli sendt over Litecoin-nettverket.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>En melding som var tilknyttet litecoincashen: URI vil bli lagret med transaksjonen for din oversikt. Denne meldingen vil ikke bli sendt over LitecoinCash-nettverket.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -1945,12 +1945,12 @@
- <translation>&Signer Melding</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Du kan signere meldinger/avtaler med adresser for å bevise at du kan motta litecoins sendt til dem. Vær forsiktig med å signere noe vagt eller tilfeldig, siden phishing-angrep kan prøve å lure deg til å signere din identitet over til dem. Bare signer fullt detaljerte utsagn som du er enig i.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Du kan signere meldinger/avtaler med adresser for å bevise at du kan motta coins sendt til dem. Vær forsiktig med å signere noe vagt eller tilfeldig, siden phishing-angrep kan prøve å lure deg til å signere din identitet over til dem. Bare signer fullt detaljerte utsagn som du er enig i.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoin-adressen meldingen skal signeres med</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCash-adressen meldingen skal signeres med</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -1981,8 +1981,8 @@
- <translation>Kopier valgt signatur til utklippstavle</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Signer meldingen for å bevise at du eier denne Litecoin-adressen</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Signer meldingen for å bevise at du eier denne LitecoinCash-adressen</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2005,12 +2005,12 @@
- <translation>Skriv inn mottakerens adresse, melding (forsikre deg om at du kopier linjeskift, mellomrom, faner osv. nøyaktig) og underskrift nedenfor for å bekrefte meldingen. Vær forsiktig så du ikke leser mer ut av signaturen enn hva som er i den signerte meldingen i seg selv, for å unngå å bli lurt av et man-in-the-middle-angrep. Merk at dette bare beviser at den som signerer kan motta med adressen, dette beviser ikke hvem som har sendt transaksjoner!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Litecoin-adressen meldingen ble signert med</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>LitecoinCash-adressen meldingen ble signert med</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verifiser meldingen for å være sikker på at den ble signert av den angitte Litecoin-adressen</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verifiser meldingen for å være sikker på at den ble signert av den angitte LitecoinCash-adressen</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2254,8 +2254,8 @@
- <translation>Kunne ikke starte HTTP server. Se debug logg for detaljer.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_nb_NO.ts b/src/qt/locale/bitcoin_nb_NO.ts
- index 31e8f25..7d558a5 100644
- --- a/src/qt/locale/bitcoin_nb_NO.ts
- +++ b/src/qt/locale/bitcoin_nb_NO.ts
- @@ -62,12 +62,12 @@
- <translation>Mottager adresser</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Dette er dine Litecoin adresser for å sende å sende betalinger. Husk å sjekke beløp og mottager adresser før du sender mynter.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Dette er dine LitecoinCash adresser for å sende å sende betalinger. Husk å sjekke beløp og mottager adresser før du sender mynter.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Dette er dine Litecoin adresse for å motta betalinger. Det er anbefalt å bruke en ny mottager adresse for hver transaksjon.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Dette er dine LitecoinCash adresse for å motta betalinger. Det er anbefalt å bruke en ny mottager adresse for hver transaksjon.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Bekreft kryptering av lommeboken</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Advarsel: Dersom du krypterer lommeboken og mister passordsetningen vil du <b>MISTE ALLE DINE LITECOIN</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Advarsel: Dersom du krypterer lommeboken og mister passordsetningen vil du <b>MISTE ALLE DINE LITECOINCASH</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Lommeboken er kryptert</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 vil nå lukkes for å fullføre krypteringsprosessen. Husk at å kryptere lommeboken ikke kan beskytte dine litecoin fullstendig fra å bli stjålet av skadelig programvare som har infisert datamaskinen din.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 vil nå lukkes for å fullføre krypteringsprosessen. Husk at å kryptere lommeboken ikke kan beskytte dine litecoincash fullstendig fra å bli stjålet av skadelig programvare som har infisert datamaskinen din.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Reindekserer blokker på disken</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Send mynter til en Litecoin adresse</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Send mynter til en LitecoinCash adresse</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Verifiser meldingen...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Krypter de private nøklene som tilhører lommeboken din</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signer meldingene med Litecoin adresse for å bevise at diu eier dem</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signer meldingene med LitecoinCash adresse for å bevise at diu eier dem</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifiser meldinger for å sikre at de ble signert med en angitt Litecoin adresse</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifiser meldinger for å sikre at de ble signert med en angitt LitecoinCash adresse</translation>
- </message>
- <message>
- <source>&File</source>
- diff --git a/src/qt/locale/bitcoin_ne.ts b/src/qt/locale/bitcoin_ne.ts
- index 5dc67d4..9811ad3 100644
- --- a/src/qt/locale/bitcoin_ne.ts
- +++ b/src/qt/locale/bitcoin_ne.ts
- @@ -183,8 +183,8 @@
- <translation>??????? ??????? ???? ??????? ??????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Litecoin ???????? ?????? ??????????</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>LitecoinCash ???????? ?????? ??????????</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -227,8 +227,8 @@
- <context>
- <name>Intro</name>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 ?? Litecoin ???? ????? ???? ????????? ??????? ? ??????? ?????? ? ?? ???????????? ??????? ??? %2GB ???? ??????? ??????, ? ?? ??????? ?????? ? ???????? ??? ?? ???????????? ??????? ?????? ?</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 ?? LitecoinCash ???? ????? ???? ????????? ??????? ? ??????? ?????? ? ?? ???????????? ??????? ??? %2GB ???? ??????? ??????, ? ?? ??????? ?????? ? ???????? ??? ?? ???????????? ??????? ?????? ?</translation>
- </message>
- </context>
- <context>
- @@ -247,8 +247,8 @@
- <context>
- <name>OverviewPage</name>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>???????? ????? ?????? ??? ???? ? ??????? ??????? ?????, ??????? ????? Litecoin ????????? ???????? ????? ?????? ????? , ?? ?? ????????? ????? ???? ???? ???? ??? ?</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>???????? ????? ?????? ??? ???? ? ??????? ??????? ?????, ??????? ????? LitecoinCash ????????? ???????? ????? ?????? ????? , ?? ?? ????????? ????? ???? ???? ???? ??? ?</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -312,8 +312,8 @@
- <translation>???</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>????? Litecoin ?????? ?????? ????????? (?????? %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>????? LitecoinCash ?????? ?????? ????????? (?????? %1)</translation>
- </message>
- </context>
- <context>
- @@ -356,16 +356,16 @@
- <translation>????? ?????? ?????? ?????? ?????? ?????????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>??????? ????? ?????? ????? ????? ?????? ? ?????????????? ??????? ??? ????????? ?????? ????? ????? ???? Litecoin ??????? ????? ??? ? ???? ???????????? ??? ?????? ? ??? ???? ????? ????? ??????? ?????? ?</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>??????? ????? ?????? ????? ????? ?????? ? ?????????????? ??????? ??? ????????? ?????? ????? ????? ???? LitecoinCash ??????? ????? ??? ? ???? ???????????? ??? ?????? ? ??? ???? ????? ????? ??????? ?????? ?</translation>
- </message>
- <message>
- <source>Enter a label for this address to add it to the list of used addresses</source>
- <translation>?? ????????? ?????? ?????? ???????? ?????? ???? ???? ???? ???????? ?????????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Litecoin?? ?????? ?????? ??????: ??????? ????????? ???? ????????? ????? ??????? ????? URI ? ???: ?? ?????? Litecoin ??????? ?????? ?????? ??? ?</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>LitecoinCash?? ?????? ?????? ??????: ??????? ????????? ???? ????????? ????? ??????? ????? URI ? ???: ?? ?????? LitecoinCash ??????? ?????? ?????? ??? ?</translation>
- </message>
- </context>
- <context>
- @@ -377,8 +377,8 @@
- <context>
- <name>SignVerifyMessageDialog</name>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>????? ???????? ??????? Litecoin ??????? ???? ?????? ???? ???????? ???? ??????? ?? ???????? ??????/???????????? ????????? ???? ?????????? ? ????? ???????? ???????? ??????? ????? ???? ??????? ??????? ????????? ?????? ?????? ???? ????? ?????? ??????? ?? ????????? ????????? ????? ????? ???????? ? ??? ???? ???? ????? ???????-????? ????? ????????? ????????? ?</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>????? ???????? ??????? LitecoinCash ??????? ???? ?????? ???? ???????? ???? ??????? ?? ???????? ??????/???????????? ????????? ???? ?????????? ? ????? ???????? ???????? ??????? ????? ???? ??????? ??????? ????????? ?????? ?????? ???? ????? ?????? ??????? ?? ????????? ????????? ????? ????? ???????? ? ??? ???? ???? ????? ???????-????? ????? ????????? ????????? ?</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts
- index a96bcdd..73ac6da 100644
- --- a/src/qt/locale/bitcoin_nl.ts
- +++ b/src/qt/locale/bitcoin_nl.ts
- @@ -62,12 +62,12 @@
- <translation>Ontvangstadressen</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Dit zijn uw Litecoinadressen om betalingen mee te verzenden. Controleer altijd het bedrag en het ontvangstadres voordat u uw litecoins verzendt.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Dit zijn uw LitecoinCashadressen om betalingen mee te verzenden. Controleer altijd het bedrag en het ontvangstadres voordat u uw coins verzendt.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Dit zijn uw Litecoin-adressen waarmee u betalingen kunt ontvangen. We raden u aan om een nieuw ontvangstadres voor elke transactie te gebruiken.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Dit zijn uw LitecoinCash-adressen waarmee u betalingen kunt ontvangen. We raden u aan om een nieuw ontvangstadres voor elke transactie te gebruiken.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Bevestig versleuteling van de portemonnee</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Waarschuwing: Als u uw portemonnee versleutelt en uw wachtwoord vergeet, zult u <b>AL UW LITECOINS VERLIEZEN</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Waarschuwing: Als u uw portemonnee versleutelt en uw wachtwoord vergeet, zult u <b>AL UW LCC VERLIEZEN</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Portemonnee versleuteld</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 zal nu afsluiten om het versleutelingsproces te voltooien. Onthoud dat het versleutelen van uw portemonnee u niet volledig kan beschermen: Malware kan uw computer infecteren en uw litecoins stelen.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 zal nu afsluiten om het versleutelingsproces te voltooien. Onthoud dat het versleutelen van uw portemonnee u niet volledig kan beschermen: Malware kan uw computer infecteren en uw coins stelen.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Bezig met herindexeren van blokken op harde schijf...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Verstuur munten naar een Litecoinadres</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Verstuur munten naar een LitecoinCashadres</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Verifiëer bericht...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Versleutel de geheime sleutels die bij uw portemonnee horen</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Onderteken berichten met uw Litecoinadressen om te bewijzen dat u deze adressen bezit</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Onderteken berichten met uw LitecoinCashadressen om te bewijzen dat u deze adressen bezit</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifiëer handtekeningen om zeker te zijn dat de berichten zijn ondertekend met de gespecificeerde Litecoinadressen</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifiëer handtekeningen om zeker te zijn dat de berichten zijn ondertekend met de gespecificeerde LitecoinCashadressen</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Tab-werkbalk</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Vraag betaling aan (genereert QR-codes en litecoin: URI's)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Vraag betaling aan (genereert QR-codes en litecoincash: URI's)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Toon de lijst met gebruikte ontvangstadressen en labels</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Open een litecoin: URI of betalingsverzoek</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Open een litecoincash: URI of betalingsverzoek</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Opdrachtregelopties</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n actieve verbinding met Litecoinnetwerk</numerusform><numerusform>%n actieve verbindingen met Litecoinnetwerk</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n actieve verbinding met LitecoinCashnetwerk</numerusform><numerusform>%n actieve verbindingen met LitecoinCashnetwerk</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Bijgewerkt</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Toon het %1 hulpbericht om een lijst te krijgen met mogelijke Litecoin commandoregelopties</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Toon het %1 hulpbericht om een lijst te krijgen met mogelijke LitecoinCash commandoregelopties</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>Portemonnee is <b>versleuteld</b> en momenteel <b>gesloten</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Een fatale fout heeft zich voorgedaan. Litecoin kan niet veilig worden verdergezet en wordt afgesloten.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Een fatale fout heeft zich voorgedaan. LitecoinCash kan niet veilig worden verdergezet en wordt afgesloten.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Bewerk verzendadres</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Het opgegeven adres "%1" is een ongeldig Litecoinadres.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Het opgegeven adres "%1" is een ongeldig LitecoinCashadres.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Omdat dit de eerste keer is dat het programma gestart is, kunt u nu kiezen waar %1 de data moet opslaan.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 zal een kopie van de Litecoin blokketen downloaden en opslaan. Tenminste %2 GB aan data wordt opgeslagen in deze map en het zal groeien in de tijd. De portemonnee wordt ook in deze map opgeslagen.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 zal een kopie van de LitecoinCash blokketen downloaden en opslaan. Tenminste %2 GB aan data wordt opgeslagen in deze map en het zal groeien in de tijd. De portemonnee wordt ook in deze map opgeslagen.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>Vorm</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Recente transacties zijn mogelijk nog niet zichtbaar. De balans van de geldbeugel is daarom mogelijk niet correct. Deze informatie is correct van zodra de synchronisatie met het Litecoin-netwerk werd voltooid, zoals onderaan beschreven.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Recente transacties zijn mogelijk nog niet zichtbaar. De balans van de geldbeugel is daarom mogelijk niet correct. Deze informatie is correct van zodra de synchronisatie met het LitecoinCash-netwerk werd voltooid, zoals onderaan beschreven.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Poging om litecoins te besteden die door "nog niet weergegeven" transacties worden beïnvloed, worden niet door het netwerk geaccepteerd.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Poging om coins te besteden die door "nog niet weergegeven" transacties worden beïnvloed, worden niet door het netwerk geaccepteerd.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>&Spendeer onbevestigd wisselgeld</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Open de Litecoinpoort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Open de LitecoinCashpoort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Portmapping via &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Verbind met het Litecoinnetwerk via een SOCKS5 proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Verbind met het LitecoinCashnetwerk via een SOCKS5 proxy.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Maak verbinding met Litecoinnetwerk door een aparte SOCKS5-proxy voor verborgen diensten van Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Maak verbinding met LitecoinCashnetwerk door een aparte SOCKS5-proxy voor verborgen diensten van Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1195,8 +1195,8 @@
- <translation>Vorm</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>De weergegeven informatie kan verouderd zijn. Uw portemonnee synchroniseert automatisch met het Litecoinnetwerk nadat een verbinding is gelegd, maar dit proces is nog niet voltooid.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>De weergegeven informatie kan verouderd zijn. Uw portemonnee synchroniseert automatisch met het LitecoinCashnetwerk nadat een verbinding is gelegd, maar dit proces is nog niet voltooid.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>Fout bij betalingsverzoek</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Kan litecoin niet starten: click-to-pay handler</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Kan litecoincash niet starten: click-to-pay handler</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>Ongeldig betalingsadres %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI kan niet verwerkt worden! Dit kan het gevolg zijn van een ongeldig Litecoin adres of misvormde URI parameters.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI kan niet verwerkt worden! Dit kan het gevolg zijn van een ongeldig LitecoinCash adres of misvormde URI parameters.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>Bedrag</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Voer een Litecoinadres in (bijv. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Voer een LitecoinCashadres in (bijv. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>H&ergebruik en bestaand ontvangstadres (niet aanbevolen)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Een optioneel bericht om bij te voegen aan het betalingsverzoek, welke zal getoond worden wanneer het verzoek is geopend. Opmerking: Het bericht zal niet worden verzonden met de betaling over het Litecoinnetwerk.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Een optioneel bericht om bij te voegen aan het betalingsverzoek, welke zal getoond worden wanneer het verzoek is geopend. Opmerking: Het bericht zal niet worden verzonden met de betaling over het LitecoinCashnetwerk.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2037,8 +2037,8 @@
- <translation>totaal ten minste</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>De minimale toeslag betalen is prima mits het transactievolume kleiner is dan de ruimte in de blokken. Let wel op dat dit tot gevolg kan hebben dat een transactie nooit wordt bevestigd als er meer vraag is naar litecointransacties dan het netwerk kan verwerken.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>De minimale toeslag betalen is prima mits het transactievolume kleiner is dan de ruimte in de blokken. Let wel op dat dit tot gevolg kan hebben dat een transactie nooit wordt bevestigd als er meer vraag is naar litecoincashtransacties dan het netwerk kan verwerken.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2201,8 +2201,8 @@
- <translation><numerusform>Schatting is dat bevestiging begint over %n blok.</numerusform><numerusform>Schatting is dat bevestiging begint over %n blokken.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Waarschuwing: Ongeldig Litecoinadres</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Waarschuwing: Ongeldig LitecoinCashadres</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2244,8 +2244,8 @@
- <translation>Dit is een normale betaling.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Het Litecoinadres om betaling aan te versturen</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Het LitecoinCashadres om betaling aan te versturen</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2264,8 +2264,8 @@
- <translation>Verwijder deze toevoeging</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>De transactiekosten zal worden afgetrokken van het bedrag dat verstuurd wordt. De ontvangers zullen minder litecoins ontvangen dan ingevoerd is in het hoeveelheidsveld. Als er meerdere ontvangers geselecteerd zijn, dan worden de transactiekosten gelijk verdeeld.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>De transactiekosten zal worden afgetrokken van het bedrag dat verstuurd wordt. De ontvangers zullen minder coins ontvangen dan ingevoerd is in het hoeveelheidsveld. Als er meerdere ontvangers geselecteerd zijn, dan worden de transactiekosten gelijk verdeeld.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2288,8 +2288,8 @@
- <translation>Vul een label voor dit adres in om het aan de lijst met gebruikte adressen toe te voegen</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Een bericht dat werd toegevoegd aan de litecoin: URI welke wordt opgeslagen met de transactie ter referentie. Opmerking: Dit bericht zal niet worden verzonden over het Litecoinnetwerk.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Een bericht dat werd toegevoegd aan de litecoincash: URI welke wordt opgeslagen met de transactie ter referentie. Opmerking: Dit bericht zal niet worden verzonden over het LitecoinCashnetwerk.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2333,12 +2333,12 @@
- <translation>&Onderteken Bericht</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>U kunt berichten/overeenkomsten ondertekenen met uw adres om te bewijzen dat u Litecoins kunt versturen. Wees voorzichtig met het ondertekenen van iets vaags of willekeurigs, omdat phishingaanvallen u kunnen proberen te misleiden tot het ondertekenen van overeenkomsten om uw identiteit aan hen toe te vertrouwen. Onderteken alleen volledig gedetailleerde verklaringen voordat u akkoord gaat.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>U kunt berichten/overeenkomsten ondertekenen met uw adres om te bewijzen dat u LCC kunt versturen. Wees voorzichtig met het ondertekenen van iets vaags of willekeurigs, omdat phishingaanvallen u kunnen proberen te misleiden tot het ondertekenen van overeenkomsten om uw identiteit aan hen toe te vertrouwen. Onderteken alleen volledig gedetailleerde verklaringen voordat u akkoord gaat.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Het Litecoinadres om bericht mee te ondertekenen</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>Het LitecoinCashadres om bericht mee te ondertekenen</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2369,8 +2369,8 @@
- <translation>Kopieer de huidige handtekening naar het systeemklembord</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Onderteken een bericht om te bewijzen dat u een bepaald Litecoinadres bezit</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Onderteken een bericht om te bewijzen dat u een bepaald LitecoinCashadres bezit</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2393,12 +2393,12 @@
- <translation>Voer het adres van de ontvanger in, bericht (zorg ervoor dat de regeleinden, spaties, tabs etc. precies kloppen) en onderteken onderaan om het bericht te verifiëren. Wees voorzicht om niet meer in de ondertekening te lezen dan in het getekende bericht zelf, om te voorkomen dat je wordt aangevallen met een man-in-the-middle attack. Houd er mee rekening dat dit alleen de ondertekende partij bewijst met het ontvangen adres, er kan niet bewezen worden dat er een transactie heeft plaatsgevonden!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Het Litecoinadres waarmee het bericht ondertekend is</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>Het LitecoinCashadres waarmee het bericht ondertekend is</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Controleer een bericht om te verifiëren dat het gespecificeerde Litecoinadres het bericht heeft ondertekend.</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Controleer een bericht om te verifiëren dat het gespecificeerde LitecoinCashadres het bericht heeft ondertekend.</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -3054,8 +3054,8 @@
- <translation>Niet mogelijk ok HTTP-server te starten. Zie debuglogboek voor details.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_nl_NL.ts b/src/qt/locale/bitcoin_nl_NL.ts
- index 5de8545..3a7b048 100644
- --- a/src/qt/locale/bitcoin_nl_NL.ts
- +++ b/src/qt/locale/bitcoin_nl_NL.ts
- @@ -62,12 +62,12 @@
- <translation>Ontvangstadres</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Dit zijn uw Litecoin adressen voor het versturen van betalingen. Controleer altijd het bedrag en het ontvangstadres voordat u munten verstuurd.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Dit zijn uw LitecoinCash adressen voor het versturen van betalingen. Controleer altijd het bedrag en het ontvangstadres voordat u munten verstuurd.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Dit zijn uw Litecoin adressen voor het ontvangen van betalingen. Het wordt aanbevolen om voor elke transactie een nieuw ontvangstadres te gebruiken.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Dit zijn uw LitecoinCash adressen voor het ontvangen van betalingen. Het wordt aanbevolen om voor elke transactie een nieuw ontvangstadres te gebruiken.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- diff --git a/src/qt/locale/bitcoin_pam.ts b/src/qt/locale/bitcoin_pam.ts
- index 843e25a..47d9e80 100644
- --- a/src/qt/locale/bitcoin_pam.ts
- +++ b/src/qt/locale/bitcoin_pam.ts
- @@ -122,8 +122,8 @@
- <translation>Address king pamag-Tanggap</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Magpadalang barya king Litecoin address</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Magpadalang barya king LitecoinCash address</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -146,8 +146,8 @@
- <translation>&Beripikan ing message...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -322,8 +322,8 @@
- <translation>&Network</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Ibuklat yang antimanu ing Litecoin client port king router. Gagana yamu ini istung ing router mu susuporta yang UPnP at magsilbi ya.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Ibuklat yang antimanu ing LitecoinCash client port king router. Gagana yamu ini istung ing router mu susuporta yang UPnP at magsilbi ya.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- @@ -397,8 +397,8 @@
- <translation>Form</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Ing makaltong impormasion mapalyaring luma ne. Ing kekang wallet otomatiku yang mag-synchronize keng Litecoin network istung mekakonekta ne king network, oneng ing prosesung ini ali ya pa kumpletu.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Ing makaltong impormasion mapalyaring luma ne. Ing kekang wallet otomatiku yang mag-synchronize keng LitecoinCash network istung mekakonekta ne king network, oneng ing prosesung ini ali ya pa kumpletu.</translation>
- </message>
- <message>
- <source>Your current spendable balance</source>
- @@ -655,8 +655,8 @@
- <translation>Kopyan ing kasalungsungan pirma king system clipboard</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Pirman ing mensayi ban patune na keka ya ining Litecoin address</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Pirman ing mensayi ban patune na keka ya ining LitecoinCash address</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -675,8 +675,8 @@
- <translation>&Beripikan ing Mensayi</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Beripikan ing mensayi ban asiguradu a me pirma ya ini gamit ing mepiling Litecoin address</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Beripikan ing mensayi ban asiguradu a me pirma ya ini gamit ing mepiling LitecoinCash address</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -752,8 +752,8 @@
- <translation>Gumana king gulut bilang daemon at tumanggap commands</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Kapilubluban ning Litecoin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Kapilubluban ning LitecoinCash</translation>
- </message>
- <message>
- <source>Block creation options:</source>
- diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts
- index a60ee40..ec77e1f 100644
- --- a/src/qt/locale/bitcoin_pl.ts
- +++ b/src/qt/locale/bitcoin_pl.ts
- @@ -62,12 +62,12 @@
- <translation>Adresy odbioru</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Tutaj znajduj? si? adresy Litecoin na które wysy?asz p?atno?ci. Zawsze sprawdzaj ilo?? i adres odbiorcy przed wysy?k? monet.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Tutaj znajduj? si? adresy LitecoinCash na które wysy?asz p?atno?ci. Zawsze sprawdzaj ilo?? i adres odbiorcy przed wysy?k? monet.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>To s? twoje adresy Litecoin do odbierania p?atno?ci. Zaleca si? u?ywanie nowych adresów odbiorczych dla ka?dej transakcji.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>To s? twoje adresy LitecoinCash do odbierania p?atno?ci. Zaleca si? u?ywanie nowych adresów odbiorczych dla ka?dej transakcji.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Potwierd? szyfrowanie portfela</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Uwaga: je?li zaszyfrujesz swój portfel i zgubisz has?o <b>STRACISZ WSZYSTKIE SWOJE LITECOINY</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Uwaga: je?li zaszyfrujesz swój portfel i zgubisz has?o <b>STRACISZ WSZYSTKIE SWOJE LITECOINCASHY</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Portfel zaszyfrowany</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 zamknie si? aby doko?czy? proces szyfrowania. Pami?taj, ?e szyfrowanie portfela nie zabezpiecza w pe?ni Twoich litecoinów przed kradzie?? przez wirusy lub trojany mog?ce zainfekowa? Twój komputer.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 zamknie si? aby doko?czy? proces szyfrowania. Pami?taj, ?e szyfrowanie portfela nie zabezpiecza w pe?ni Twoich litecoincashów przed kradzie?? przez wirusy lub trojany mog?ce zainfekowa? Twój komputer.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Ponowne indeksowanie bloków na dysku...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Wy?lij monety na adres litecoinowy</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Wy?lij monety na adres litecoincashowy</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Zweryfikuj wiadomo??...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Szyfruj klucze prywatne, które s? w twoim portfelu</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- <translation>Podpisz wiadomo?ci swoim adresem aby udowodni? jego posiadanie</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Zweryfikuj wiadomo??, aby upewni? si?, ?e zosta?a podpisana podanym adresem litecoinowym.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Zweryfikuj wiadomo??, aby upewni? si?, ?e zosta?a podpisana podanym adresem litecoincashowym.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Pasek zak?adek</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>??daj p?atno?ci (generuje kod QR oraz litecoinowe URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>??daj p?atno?ci (generuje kod QR oraz litecoincashowe URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Poka? list? adresów i etykiet u?ytych do odbierania</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Otwórz URI litecoin: lub ??danie zap?aty</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Otwórz URI litecoincash: lub ??danie zap?aty</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Opcje linii komend</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktywnych po??cze? do sieci Litecoin</numerusform><numerusform>%n aktywnych po??cze? do sieci Litecoin</numerusform><numerusform>%n aktywnych po??cze? do sieci Litecoin</numerusform><numerusform>%n aktywnych po??cze? do sieci Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktywnych po??cze? do sieci LitecoinCash</numerusform><numerusform>%n aktywnych po??cze? do sieci LitecoinCash</numerusform><numerusform>%n aktywnych po??cze? do sieci LitecoinCash</numerusform><numerusform>%n aktywnych po??cze? do sieci LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,7 +478,7 @@
- <translation>Aktualny</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>Poka? pomoc %1 aby zobaczy? list? wszystkich opcji lnii polece?.</translation>
- </message>
- <message>
- @@ -548,8 +548,8 @@
- <translation>Portfel jest <b>zaszyfrowany</b> i obecnie <b>zablokowany</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Wyst?pi? krytyczny b??d. Litecoin nie jest w stanie kontynuowa? bezpiecznie i zostanie zamkni?ty.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Wyst?pi? krytyczny b??d. LitecoinCash nie jest w stanie kontynuowa? bezpiecznie i zostanie zamkni?ty.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Zmie? adres wysy?ania</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Wprowadzony adres "%1" nie jest prawid?owym adresem Litecoin.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Wprowadzony adres "%1" nie jest prawid?owym adresem LitecoinCash.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Poniewa? jest to pierwsze uruchomienie programu, mo?esz wybra? gdzie %1 b?dzie przechowywa? swoje dane.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 pobierze i b?dzie przechowywa? kopi? ?a?cucha bloków Litecoin. W wybranym katalogu zostanie zapisanych %2GB danych, a z czasem ta ilo?? b?dzie ros?a. Portfel b?dzie przechowywany w tym samym katalogu.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 pobierze i b?dzie przechowywa? kopi? ?a?cucha bloków LitecoinCash. W wybranym katalogu zostanie zapisanych %2GB danych, a z czasem ta ilo?? b?dzie ros?a. Portfel b?dzie przechowywany w tym samym katalogu.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>Formularz</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>?wie?e transakcje mog? nie by? jeszcze widoczne, a zatem saldo portfela mo?e by? nieprawid?owe. Te detale b?d? poprawne, gdy portfel zako?czy synchronizacj? z sieci? litecoin, zgodnie z poni?szym opisem.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>?wie?e transakcje mog? nie by? jeszcze widoczne, a zatem saldo portfela mo?e by? nieprawid?owe. Te detale b?d? poprawne, gdy portfel zako?czy synchronizacj? z sieci? litecoincash, zgodnie z poni?szym opisem.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Próba wydania litecoinów które nie s? jeszcze wy?wietlone jako transakcja zostanie odrzucona przez sie?. </translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Próba wydania litecoincashów które nie s? jeszcze wy?wietlone jako transakcja zostanie odrzucona przez sie?. </translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>Wydaj niepotwierdzon? re&szt?</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Automatycznie otwiera port klienta Litecoin na routerze. Ta opcja dzie?a tylko je?li twój router wspiera UPnP i jest ono w??czone.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Automatycznie otwiera port klienta LitecoinCash na routerze. Ta opcja dzie?a tylko je?li twój router wspiera UPnP i jest ono w??czone.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapuj port u?ywaj?c &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Po??cz si? z sieci? Litecoin poprzez proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Po??cz si? z sieci? LitecoinCash poprzez proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Po??cz si? z sieci? Litecoin przy pomocy oddzielnego SOCKS5 proxy dla sieci TOR</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Po??cz si? z sieci? LitecoinCash przy pomocy oddzielnego SOCKS5 proxy dla sieci TOR</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1195,8 +1195,8 @@
- <translation>Formularz</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Wy?wietlana informacja mo?e by? nieaktualna. Twój portfel synchronizuje si? automatycznie z sieci? litecoin, zaraz po tym jak uzyskano po??czenie, ale proces ten nie zosta? jeszcze uko?czony.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Wy?wietlana informacja mo?e by? nieaktualna. Twój portfel synchronizuje si? automatycznie z sieci? litecoincash, zaraz po tym jak uzyskano po??czenie, ale proces ten nie zosta? jeszcze uko?czony.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>B??d ??dania p?atno?ci</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Nie mo?na uruchomi? protoko?u litecoin: kliknij-by-zap?aci?</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Nie mo?na uruchomi? protoko?u litecoincash: kliknij-by-zap?aci?</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1356,8 +1356,8 @@
- <translation>Kwota</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Wprowad? adres litecoinowy (np. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Wprowad? adres litecoincashowy (np. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1780,8 +1780,8 @@
- <translation>U&?yj ponownie istniej?cego adresu odbiorczego (niepolecane)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Opcjonalna wiadomo?? do do??czenia do ??dania p?atno?ci, która b?dzie wy?wietlana, gdy ??danie zostanie otwarte. Uwaga: wiadomo?? ta nie zostanie wys?ana wraz z p?atno?ci? w sieci Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Opcjonalna wiadomo?? do do??czenia do ??dania p?atno?ci, która b?dzie wy?wietlana, gdy ??danie zostanie otwarte. Uwaga: wiadomo?? ta nie zostanie wys?ana wraz z p?atno?ci? w sieci LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2013,8 +2013,8 @@
- <translation>razem przynajmniej</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Zap?acenie tylko minimalnej op?aty jest nadal wystarczaj?ce, dopóki jest mniejszy wolumen transakcji ni? miejsca w blokach. Nale?y jednak mie? ?wiadomo??, ?e mo?e sko?czy? si? to niezatwierdzeniem nigdy transakcji, gdy jest wi?ksze zapotrzebowanie na transakcje litecoina ni? sie? mo?e przetworzy?.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Zap?acenie tylko minimalnej op?aty jest nadal wystarczaj?ce, dopóki jest mniejszy wolumen transakcji ni? miejsca w blokach. Nale?y jednak mie? ?wiadomo??, ?e mo?e sko?czy? si? to niezatwierdzeniem nigdy transakcji, gdy jest wi?ksze zapotrzebowanie na transakcje litecoincasha ni? sie? mo?e przetworzy?.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2173,8 +2173,8 @@
- <translation><numerusform>Przybli?ony czas zatwierdzenia: %n blok.</numerusform><numerusform>Przybli?ony czas zatwierdzenia: %n bloki.</numerusform><numerusform>Przybli?ony czas zatwierdzenia: %n bloków.</numerusform><numerusform>Przybli?ony czas zatwierdzenia: %n bloków.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Ostrze?enie: nieprawid?owy adres Litecoin</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Ostrze?enie: nieprawid?owy adres LitecoinCash</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2212,8 +2212,8 @@
- <translation>To jest standardowa p?atno??</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Adres Litecoin gdzie wys?a? p?atno??</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Adres LitecoinCash gdzie wys?a? p?atno??</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2232,8 +2232,8 @@
- <translation>Usu? ten wpis</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Op?ata zostanie odj?ta od kwoty wysy?ane.Odbiorca otrzyma mniej ni? litecoins wpisz w polu kwoty. Je?li wybrano kilku odbiorców, op?ata jest podzielona równo.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Op?ata zostanie odj?ta od kwoty wysy?ane.Odbiorca otrzyma mniej ni? coins wpisz w polu kwoty. Je?li wybrano kilku odbiorców, op?ata jest podzielona równo.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2256,8 +2256,8 @@
- <translation>Wprowad? etykiet? dla tego adresu by doda? go do listy u?ytych adresów</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Wiadomo??, która zosta?a do??czona do URI litecoin:, która b?dzie przechowywana wraz z transakcj? w celach informacyjnych. Uwaga: Ta wiadomo?? nie b?dzie rozsy?ana w sieci Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Wiadomo??, która zosta?a do??czona do URI litecoincash:, która b?dzie przechowywana wraz z transakcj? w celach informacyjnych. Uwaga: Ta wiadomo?? nie b?dzie rozsy?ana w sieci LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2301,12 +2301,12 @@
- <translation>Podpi&sz Wiadomo??</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Mo?esz podpisywa? wiadomo?ci swoimi adresami aby udowodni?, ?e jeste? ich w?a?cicielem. Uwa?aj, aby nie podpisywa? niczego co wzbudza Twoje podejrzenia, poniewa? kto? mo?e stosowa? phishing próbuj?c nak?oni? Ci? do ich podpisania. Akceptuj i podpisuj tylko w pe?ni zrozumia?e komunikaty i wiadomo?ci.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Adres Litecoin, za pomoc? którego podpisa? wiadomo??</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>Adres LitecoinCash, za pomoc? którego podpisa? wiadomo??</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2337,7 +2337,7 @@
- <translation>Kopiuje aktualny podpis do schowka systemowego</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>Podpisz wiadomo?? aby dowie??, ?e ten adres jest twój</translation>
- </message>
- <message>
- @@ -2362,12 +2362,12 @@
- Zwró? uwag?, ?e poprawnie zweryfikowana wiadomo?? potwierdza to, ?e nadawca posiada klucz do adresu, natomiast nie potwierdza to, ?e poprawne wys?anie jakiejkolwiek transakcji! </translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Adres Litecoin, którym zosta?a podpisana wiadomo??</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>Adres LitecoinCash, którym zosta?a podpisana wiadomo??</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Zweryfikuj wiadomo??, aby upewni? si?, ?e zosta?a podpisana odpowiednim adresem Litecoin.</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Zweryfikuj wiadomo??, aby upewni? si?, ?e zosta?a podpisana odpowiednim adresem LitecoinCash.</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2963,8 +2963,8 @@ Zwró? uwag?, ?e poprawnie zweryfikowana wiadomo?? potwierdza to, ?e nadaw
- <translation>Uruchomienie serwera HTTP nie powiod?o si?. Zobacz dziennik debugowania, aby uzyska? wi?cej szczegó?ów.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Rdze? Litecoina</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Rdze? LitecoinCasha</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts
- index f91e44d..7c5b7be 100644
- --- a/src/qt/locale/bitcoin_pt_BR.ts
- +++ b/src/qt/locale/bitcoin_pt_BR.ts
- @@ -62,11 +62,11 @@
- <translation>Endereços de recebimento</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>Estes são os seus endereços para enviar pagamentos. Sempre cheque a quantia e o endereço do destinatário antes de enviar moedas.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>Estes são os seus endereços para receber pagamentos. É recomendado usar um novo para cada transação.</translation>
- </message>
- <message>
- @@ -168,8 +168,8 @@
- <translation>Confirmar criptografia da carteira</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Aviso: Se você criptografar sua carteira e perder sua senha, você vai <b>PERDER TODOS OS SEUS LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Aviso: Se você criptografar sua carteira e perder sua senha, você vai <b>PERDER TODOS OS SEUS LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -334,8 +334,8 @@
- <translation>Reindexando blocos no disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar moedas para um endereço litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar moedas para um endereço litecoincash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -358,8 +358,8 @@
- <translation>&Verificar mensagem...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -386,12 +386,12 @@
- <translation>Criptografar as chaves privadas que pertencem à sua carteira</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Assine mensagens com seus endereços Litecoin para provar que você é dono delas</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Assine mensagens com seus endereços LitecoinCash para provar que você é dono delas</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verificar mensagens para se assegurar que elas foram assinadas pelo dono de Endereços Litecoin específicos</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verificar mensagens para se assegurar que elas foram assinadas pelo dono de Endereços LitecoinCash específicos</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -410,8 +410,8 @@
- <translation>Barra de ferramentas</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Solicitações de pagamentos (gera códigos QR e litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Solicitações de pagamentos (gera códigos QR e litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -422,16 +422,16 @@
- <translation>Mostrar a lista de endereços de recebimento usados ??e rótulos</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Abrir um litecoin: URI ou cobrança</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Abrir um litecoincash: URI ou cobrança</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Opções de linha de &comando</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n conexão ativa na rede Litecoin</numerusform><numerusform>%n conexões ativas na rede Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n conexão ativa na rede LitecoinCash</numerusform><numerusform>%n conexões ativas na rede LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -474,8 +474,8 @@
- <translation>Atualizado</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Mostrar a mensagem de ajuda do %1 para obter uma lista com possíveis opções de linha de comando Litecoin</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Mostrar a mensagem de ajuda do %1 para obter uma lista com possíveis opções de linha de comando LitecoinCash</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -544,8 +544,8 @@
- <translation>Carteira está <b>criptografada</b> e atualmente <b>bloqueada</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Um erro fatal ocorreu. Litecoin não pode continuar em segurança e irá fechar.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Um erro fatal ocorreu. LitecoinCash não pode continuar em segurança e irá fechar.</translation>
- </message>
- </context>
- <context>
- @@ -738,7 +738,7 @@
- <translation>Editar endereço de envio</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation>O endereço digitado "%1" não é um endereço válido.</translation>
- </message>
- <message>
- @@ -847,8 +847,8 @@
- <translation>Como essa é a primeira vez que o programa é executado, você pode escolher onde %1 armazenará seus dados.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>O %1 irá baixar e armazenar uma cópia do block chain do Litecoin. Pelo menos %2GB de dados serão armazenados neste diretório, e ele crescerá ao longo do tempo. A carteira também será armazenada neste diretório.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>O %1 irá baixar e armazenar uma cópia do block chain do LitecoinCash. Pelo menos %2GB de dados serão armazenados neste diretório, e ele crescerá ao longo do tempo. A carteira também será armazenada neste diretório.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -882,11 +882,11 @@
- <translation>Formulário</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation>Transações recentes podem não estar visíveis ainda, portanto o seu saldo pode estar incorreto. Esta informação será corrigida assim que sua carteira for sincronizada com a rede, como detalhado abaixo.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- <translation>Gastar moedas de transações desconhecidas podem não ser aceitas pela rede.</translation>
- </message>
- <message>
- @@ -1044,16 +1044,16 @@
- <translation>Ga&star mudança não confirmada</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Abrir as portas do cliente Litecoin automaticamente no roteador. Isto só funcionará se seu roteador suportar UPnP e esta função estiver habilitada.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Abrir as portas do cliente LitecoinCash automaticamente no roteador. Isto só funcionará se seu roteador suportar UPnP e esta função estiver habilitada.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapear porta usando &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Conectar na rede Litecoin através de um proxy SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Conectar na rede LitecoinCash através de um proxy SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1092,8 +1092,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Conecte-se à rede Litecoin através de um proxy SOCKS5 separado para utilizar serviços ocultos Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Conecte-se à rede LitecoinCash através de um proxy SOCKS5 separado para utilizar serviços ocultos Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1141,7 +1141,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Escolha a unidade padrão de subdivisão para interface mostrar quando enviar litecoins.</translation>
- + <translation>Escolha a unidade padrão de subdivisão para interface mostrar quando enviar coins.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1191,8 +1191,8 @@
- <translation>Formulário</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>A informação mostrada pode estar desatualizada. Sua carteira sincroniza automaticamente com a rede Litecoin depois que a conexão é estabelecida, mas este processo pode não estar completo ainda.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>A informação mostrada pode estar desatualizada. Sua carteira sincroniza automaticamente com a rede LitecoinCash depois que a conexão é estabelecida, mas este processo pode não estar completo ainda.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1266,8 +1266,8 @@
- <translation>Erro no pedido de pagamento</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Não foi possível iniciar litecoin: manipulador click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Não foi possível iniciar litecoincash: manipulador click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1282,7 +1282,7 @@
- <translation>Endereço de pagamento %1 inválido</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- <translation>URI não pode ser analisado! Isto pode ser causado por um endereço inválido ou parâmetros URI informados incorretamente.</translation>
- </message>
- <message>
- @@ -1376,8 +1376,8 @@
- <translation>Quantidade</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Informe um endereço Litecoin (ex: %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Informe um endereço LitecoinCash (ex: %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1800,8 +1800,8 @@
- <translation>R&eutilize um endereço de recebimento (não recomendado)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Uma mensagem opcional que será anexada na cobrança e será mostrada quando ela for aberta. Nota: A mensagem não será enviada com o pagamento pela rede Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Uma mensagem opcional que será anexada na cobrança e será mostrada quando ela for aberta. Nota: A mensagem não será enviada com o pagamento pela rede LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2033,7 +2033,7 @@
- <translation>pelo menos</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>Pagando apenas a taxa mínima é bom, desde que haja pouco volume de transações. Mas esteja ciente de que isso pode acabar em uma transação nunca confirmanda uma vez que há mais demanda por transações do que a rede pode processar.</translation>
- </message>
- <message>
- @@ -2197,7 +2197,7 @@
- <translation><numerusform>Confirmação em %n bloco.</numerusform><numerusform>Confirmação em %n blocos.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- + <source>Warning: Invalid LitecoinCash address</source>
- <translation>Aviso: Endereço inválido</translation>
- </message>
- <message>
- @@ -2240,7 +2240,7 @@
- <translation>Este é um pagamento normal.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation>Endereço que enviará o pagamento</translation>
- </message>
- <message>
- @@ -2260,8 +2260,8 @@
- <translation>Remover esta entrada</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>A taxa será deduzida da quantia que está sendo enviada. O destinatário receberá menos litecoins do que você colocou no campo de quantidade. Se vários destinatários estão selecionados, a taxa é dividida igualmente.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>A taxa será deduzida da quantia que está sendo enviada. O destinatário receberá menos coins do que você colocou no campo de quantidade. Se vários destinatários estão selecionados, a taxa é dividida igualmente.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2284,8 +2284,8 @@
- <translation>Digite um rótulo para este endereço para adicioná-lo no catálogo</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>A mensagem que foi anexada ao litecoin: URI na qual será gravada na transação para sua referência. Nota: Essa mensagem não será gravada publicamente na rede Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>A mensagem que foi anexada ao litecoincash: URI na qual será gravada na transação para sua referência. Nota: Essa mensagem não será gravada publicamente na rede LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2329,12 +2329,12 @@
- <translation>&Assinar mensagem</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Você pode assinar mensagens com seus endereços para provar que você pode receber litecoins enviados por alguém. Cuidado para não assinar nada vago ou aleatório, pois ataques phishing podem tentar te enganar para assinar coisas para eles como se fosse você. Somente assine termos bem detalhados que você concorde.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Você pode assinar mensagens com seus endereços para provar que você pode receber coins enviados por alguém. Cuidado para não assinar nada vago ou aleatório, pois ataques phishing podem tentar te enganar para assinar coisas para eles como se fosse você. Somente assine termos bem detalhados que você concorde.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>O enderesso Litecoin que assinará a mensagem</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>O enderesso LitecoinCash que assinará a mensagem</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2365,8 +2365,8 @@
- <translation>Copiar a assinatura para a área de transferência do sistema</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Assinar mensagem para provar que você é dono deste endereço Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Assinar mensagem para provar que você é dono deste endereço LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2389,12 +2389,12 @@
- <translation>Coloque o endereço do autor, a mensagem (certifique-se de copiar toda a mensagem, incluindo quebras de linha, espaços, tabulações, etc.) e a assinatura embaixo para verificar a mensagem. Cuidado para não ler mais da assinatura do que está assinado na mensagem, para evitar ser enganado pelo ataque man-in-the-middle. Note que isso somente prova a propriedade de um endereço, e não o remetende de qualquer transação.</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>O enderesso Litecoin que assionou a mesnagem</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>O enderesso LitecoinCash que assionou a mesnagem</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verificar mensagem para se assegurar que ela foi assinada pelo dono de um endereço Litecoin específico.</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verificar mensagem para se assegurar que ela foi assinada pelo dono de um endereço LitecoinCash específico.</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -3054,8 +3054,8 @@
- <translation>Não foi possível iniciar o servidor HTTP. Veja o log para detaihes.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_pt_PT.ts b/src/qt/locale/bitcoin_pt_PT.ts
- index 2d41794..49985ae 100644
- --- a/src/qt/locale/bitcoin_pt_PT.ts
- +++ b/src/qt/locale/bitcoin_pt_PT.ts
- @@ -62,12 +62,12 @@
- <translation>A receber endereços</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Estes são os seus endereços Litecoin para enviar pagamentos. Verifique sempre o valor e o endereço de envio antes de enviar moedas.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Estes são os seus endereços LitecoinCash para enviar pagamentos. Verifique sempre o valor e o endereço de envio antes de enviar moedas.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Estes são os seus endereços Litecoin para receber pagamentos. É recomendado que utilize um endereço novo para cada transacção.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Estes são os seus endereços LitecoinCash para receber pagamentos. É recomendado que utilize um endereço novo para cada transacção.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Confirmar encriptação da carteira</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Aviso: se encriptar a sua carteira e perder a sua frase de segurnça, <b>PERDERÁ TODOS OS SEUS LITECOINS</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Aviso: se encriptar a sua carteira e perder a sua frase de segurnça, <b>PERDERÁ TODOS OS SEUS LCC</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Carteira encriptada</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 irá agora ser fechado para terminar o processo de encriptação. Recorde que a encriptação da sua carteira não protegerá totalmente os seus litecoins de serem roubados por programas maliciosos que infectem o seu computador.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 irá agora ser fechado para terminar o processo de encriptação. Recorde que a encriptação da sua carteira não protegerá totalmente os seus coins de serem roubados por programas maliciosos que infectem o seu computador.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>A reindexar os blocos no disco...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Enviar moedas para um endereço Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Enviar moedas para um endereço LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&Verificar mensagem...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Encriptar as chaves privadas que pertencem à sua carteira</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Assine as mensagens com os seus endereços Litecoin para provar que é o proprietário dos mesmos</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Assine as mensagens com os seus endereços LitecoinCash para provar que é o proprietário dos mesmos</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifique mensagens para assegurar que foram assinadas com o endereço Litecoin especificado</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifique mensagens para assegurar que foram assinadas com o endereço LitecoinCash especificado</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Barra de ferramentas dos separadores</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Solicitar pagamentos (gera códigos QR e litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Solicitar pagamentos (gera códigos QR e litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Mostrar a lista de rótulos e endereços de receção usados</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Abrir URI litecoin: ou pedido de pagamento</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Abrir URI litecoincash: ou pedido de pagamento</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Opções da linha de &comando</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ligação ativa à rede Litecoin</numerusform><numerusform>%n ligações ativas à rede Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ligação ativa à rede LitecoinCash</numerusform><numerusform>%n ligações ativas à rede LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,7 +478,7 @@
- <translation>Atualizado</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>Mostrar a mensagem de ajuda %1 para obter uma lista com possíveis opções a usar na linha de comandos.</translation>
- </message>
- <message>
- @@ -548,8 +548,8 @@
- <translation>A carteira está <b>encriptada</b> e atualmente <b>bloqueada</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Ocorreu um erro fatal. O Litecoin não pode continuar com segurança e irá fechar.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Ocorreu um erro fatal. O LitecoinCash não pode continuar com segurança e irá fechar.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Editar o endereço de envio</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>O endereço introduzido "%1" não é um endereço litecoin válido.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>O endereço introduzido "%1" não é um endereço litecoincash válido.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -847,7 +847,7 @@
- <translation>Bem-vindo ao %1.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- <translation>O %1 irá transferir e armazenar uma cópia da blockchain. Pelo menos %2GB serão armazenados neste diretório, sendo que o valor irá crescer ao longo do tempo. A carteira também será armazenada neste mesmo diretório.</translation>
- </message>
- <message>
- @@ -882,12 +882,12 @@
- <translation>Formulário</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation>Transações recentes podem não ser visíveis por agora, portanto o saldo da sua carteira pode estar incorreto. Esta informação será corrigida quando a sua carteira acabar de sincronizar com a rede, como está explicado em baixo.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Tentar enviar litecoins que estão afetadas por transações ainda não exibidas não será aceite pela rede.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Tentar enviar coins que estão afetadas por transações ainda não exibidas não será aceite pela rede.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1045,16 +1045,16 @@
- <translation>&Gastar troco não confirmado</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Abrir a porta do cliente litecoin automaticamente no seu router. Isto apenas funciona se o seu router suportar UPnP e este se encontrar ligado.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Abrir a porta do cliente litecoincash automaticamente no seu router. Isto apenas funciona se o seu router suportar UPnP e este se encontrar ligado.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapear porta, utilizando &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Conectar à rede da Litecoin através dum proxy SOCLS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Conectar à rede da LitecoinCash através dum proxy SOCLS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1093,8 +1093,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Ligar à rede Litecoin através de um proxy SOCKS5 separado para utilizar os serviços ocultos do Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Ligar à rede LitecoinCash através de um proxy SOCKS5 separado para utilizar os serviços ocultos do Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1192,8 +1192,8 @@
- <translation>Formulário</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>A informação mostrada poderá estar desatualizada. A sua carteira sincroniza automaticamente com a rede Litecoin depois de estabelecer ligação, mas este processo ainda não está completo.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>A informação mostrada poderá estar desatualizada. A sua carteira sincroniza automaticamente com a rede LitecoinCash depois de estabelecer ligação, mas este processo ainda não está completo.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1267,8 +1267,8 @@
- <translation>Erro do pedido de pagamento</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Impossível iniciar o controlador de litecoin: click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Impossível iniciar o controlador de litecoincash: click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1283,8 +1283,8 @@
- <translation>Endereço de pagamento inválido %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI não foi lido correctamente! Isto pode ser causado por um endereço Litecoin inválido ou por parâmetros URI malformados.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI não foi lido correctamente! Isto pode ser causado por um endereço LitecoinCash inválido ou por parâmetros URI malformados.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1377,8 +1377,8 @@
- <translation>Quantia</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Entre um endereço Litecoin (ex. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Entre um endereço LitecoinCash (ex. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1797,8 +1797,8 @@
- <translation>Reutilizar um endereço de receção existente (não recomendado)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Uma mensagem opcional para anexar ao pedido de pagamento, que será exibida quando o pedido for aberto. Nota: A mensagem não será enviada com o pagamento através da rede Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Uma mensagem opcional para anexar ao pedido de pagamento, que será exibida quando o pedido for aberto. Nota: A mensagem não será enviada com o pagamento através da rede LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2030,7 +2030,7 @@
- <translation>total minimo</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>Pode pagar somente a taxa minima desde que haja um volume de transações inferior ao espaço nos blocos. No entanto tenha em atenção que esta opção poderá acabar em uma transação nunca confirmada assim que os pedidos de transações excedam a capacidade de processamento da rede.</translation>
- </message>
- <message>
- @@ -2194,8 +2194,8 @@
- <translation><numerusform>Estimativa para iniciar a confirmação dentro de %n bloco.</numerusform><numerusform>Estimativa para iniciar a confirmação dentro de %n blocos.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Aviso: endereço Litecoin inválido</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Aviso: endereço LitecoinCash inválido</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2237,8 +2237,8 @@
- <translation>Este é um pagamento normal.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>O endereço Litecoin para enviar o pagamento</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>O endereço LitecoinCash para enviar o pagamento</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2257,8 +2257,8 @@
- <translation>Remover esta entrada</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>A taxa será deduzida ao montante enviado. O destinatário irá receber menos litecoins do que as que introduziu no campo montante. Caso sejam seleccionados múltiplos destinatários, a taxa será repartida equitativamente.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>A taxa será deduzida ao montante enviado. O destinatário irá receber menos coins do que as que introduziu no campo montante. Caso sejam seleccionados múltiplos destinatários, a taxa será repartida equitativamente.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2281,8 +2281,8 @@
- <translation>Introduza um rótulo para este endereço para o adicionar à sua lista de endereços usados</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Uma mensagem que estava anexada ao URI litecoin: que será armazenada com a transação para sua referência. Nota: Esta mensagem não será enviada através da rede Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Uma mensagem que estava anexada ao URI litecoincash: que será armazenada com a transação para sua referência. Nota: Esta mensagem não será enviada através da rede LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2326,12 +2326,12 @@
- <translation>&Assinar Mensagem</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Pode assinar mensagens com os seus endereços para provar que são seus. Tenha atenção ao assinar mensagens ambíguas, pois ataques de phishing podem tentar enganá-lo de modo a assinar a sua identidade para os atacantes. Apenas assine declarações detalhadas com as quais concorde.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>O endereço Litecoin para designar a mensagem</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>O endereço LitecoinCash para designar a mensagem</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2362,8 +2362,8 @@
- <translation>Copiar a assinatura actual para a área de transferência</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Assine uma mensagem para provar que é dono deste endereço Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Assine uma mensagem para provar que é dono deste endereço LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2386,12 +2386,12 @@
- <translation>Introduza o endereço de assinatura, mensagem (assegure-se que copia quebras de linha, espaços, tabulações, etc. exactamente) e assinatura abaixo para verificar a mensagem. Tenha atenção para não ler mais na assinatura do que o que estiver na mensagem assinada, para evitar ser enganado por um atacante que se encontre entre si e quem assinou a mensagem.</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>O endereço Litecoin com que a mensagem foi designada</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>O endereço LitecoinCash com que a mensagem foi designada</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verifique a mensagem para assegurar que foi assinada com o endereço Litecoin especificado</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verifique a mensagem para assegurar que foi assinada com o endereço LitecoinCash especificado</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2983,8 +2983,8 @@
- <translation>Não é possível iniciar o servidor HTTP. Verifique o debug.log para detalhes.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_ro.ts b/src/qt/locale/bitcoin_ro.ts
- index 480a246..32e31d4 100644
- --- a/src/qt/locale/bitcoin_ro.ts
- +++ b/src/qt/locale/bitcoin_ro.ts
- @@ -142,8 +142,8 @@
- <translation>Deschide &URI...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Trimite monedele c?tre o adres? Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Trimite monedele c?tre o adres? LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -166,8 +166,8 @@
- <translation>&Verific? mesajul...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -194,12 +194,12 @@
- <translation>Cripteaz? cheile private care apar?in portofelului t?u.</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Semneaz? mesajele cu adresa ta de Litecoin pentru a face dovada c? î?i apar?in.</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Semneaz? mesajele cu adresa ta de LitecoinCash pentru a face dovada c? î?i apar?in.</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verific? mesajele cu scopul de a asigura faptul c? au fost semnate cu adresa de Litecoin specificat?.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verific? mesajele cu scopul de a asigura faptul c? au fost semnate cu adresa de LitecoinCash specificat?.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -214,12 +214,12 @@
- <translation>&Ajutor</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Cerere plat? (genereaz? coduri QR ?i litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Cerere plat? (genereaz? coduri QR ?i litecoincash: URIs)</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Deschide un litecoin: URI sau cerere de plat?</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Deschide un litecoincash: URI sau cerere de plat?</translation>
- </message>
- <message>
- <source>%1 behind</source>
- @@ -748,8 +748,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Information</source>
- diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts
- index 41ba229..9a9eeeb 100644
- --- a/src/qt/locale/bitcoin_ro_RO.ts
- +++ b/src/qt/locale/bitcoin_ro_RO.ts
- @@ -54,12 +54,12 @@
- <translation>Adresa de primire</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Acestea sunt adresele tale Litecoin pentru efectuarea platilor. Intotdeauna verifica atent suma de plata si adresa beneficiarului inainte de a trimite monede.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Acestea sunt adresele tale LitecoinCash pentru efectuarea platilor. Intotdeauna verifica atent suma de plata si adresa beneficiarului inainte de a trimite monede.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Acestea sunt adresele tale Litecoin pentru receptionarea platilor. Este recomandat sa folosesti mereu o adresa noua pentru primirea platilor.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Acestea sunt adresele tale LitecoinCash pentru receptionarea platilor. Este recomandat sa folosesti mereu o adresa noua pentru primirea platilor.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -230,8 +230,8 @@
- <translation>Se reindexeaz? blocurile pe disc...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Trimite monede c?tre o adres? Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Trimite monede c?tre o adres? LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -254,8 +254,8 @@
- <translation>&Verific? mesaj...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -282,12 +282,12 @@
- <translation>Cripteaz? cheile private ale portofelului dvs.</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Semna?i mesaje cu adresa dvs. Litecoin pentru a dovedi c? v? apar?in</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Semna?i mesaje cu adresa dvs. LitecoinCash pentru a dovedi c? v? apar?in</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifica?i mesaje pentru a v? asigura c? au fost semnate cu adresa Litecoin specificat?</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifica?i mesaje pentru a v? asigura c? au fost semnate cu adresa LitecoinCash specificat?</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -306,8 +306,8 @@
- <translation>Bara de unelte</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Cere?i pl??i (genereaz? coduri QR ?i litecoin-uri: URls)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Cere?i pl??i (genereaz? coduri QR ?i litecoincash-uri: URls)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -318,16 +318,16 @@
- <translation>Arat? lista de adrese pentru primire ?i etichetele</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Deschidere litecoin: o adresa URI sau o cerere de plat?</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Deschidere litecoincash: o adresa URI sau o cerere de plat?</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Op?iuni linie de &comand?</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n conexiune activ? c?tre re?eaua Litecoin</numerusform><numerusform>%n conexiuni active c?tre re?eaua Litecoin</numerusform><numerusform>%n de conexiuni active c?tre re?eaua Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n conexiune activ? c?tre re?eaua LitecoinCash</numerusform><numerusform>%n conexiuni active c?tre re?eaua LitecoinCash</numerusform><numerusform>%n de conexiuni active c?tre re?eaua LitecoinCash</numerusform></translation>
- </message>
- <message numerus="yes">
- <source>Processed %n block(s) of transaction history.</source>
- @@ -732,16 +732,16 @@
- <translation>Cheltuire rest neconfirmat</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Deschide automat în router portul aferent clientului Litecoin. Func?ioneaz? doar dac? routerul duport? UPnP ?i e activat.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Deschide automat în router portul aferent clientului LitecoinCash. Func?ioneaz? doar dac? routerul duport? UPnP ?i e activat.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapare port folosind &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Conectare la re?eaua Litecoin printr-un proxy SOCKS.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Conectare la re?eaua LitecoinCash printr-un proxy SOCKS.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -801,7 +801,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Alege?i subdiviziunea folosit? la afi?area interfe?ei ?i la trimiterea de litecoin.</translation>
- + <translation>Alege?i subdiviziunea folosit? la afi?area interfe?ei ?i la trimiterea de litecoincash.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -841,7 +841,7 @@
- </message>
- <message>
- <source>The supplied proxy address is invalid.</source>
- - <translation>Adresa litecoin pe care a?i specificat-o nu este valid?.</translation>
- + <translation>Adresa litecoincash pe care a?i specificat-o nu este valid?.</translation>
- </message>
- </context>
- <context>
- @@ -851,8 +851,8 @@
- <translation>Form</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Informa?iile afi?ate pot fi neactualizate. Portofelul dvs. se sincronizeaz? automat cu re?eaua Litecoin dup? ce o conexiune este stabilit?, dar acest proces nu a fost finalizat înc?.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Informa?iile afi?ate pot fi neactualizate. Portofelul dvs. se sincronizeaz? automat cu re?eaua LitecoinCash dup? ce o conexiune este stabilit?, dar acest proces nu a fost finalizat înc?.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -940,8 +940,8 @@
- <translation>Cantitate</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Introduce?i o adres? Litecoin (de exemplu %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Introduce?i o adres? LitecoinCash (de exemplu %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1240,8 +1240,8 @@
- <translation>R&efolose?te o adres? de primire (nu este recomandat)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Un mesaj op?ional de ata?at la cererea de plat?, care va fi afi?at cînd cererea este deschis?. Not?: Acest mesaj nu va fi trimis cu plata c?tre re?eaua Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Un mesaj op?ional de ata?at la cererea de plat?, care va fi afi?at cînd cererea este deschis?. Not?: Acest mesaj nu va fi trimis cu plata c?tre re?eaua LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1472,8 +1472,8 @@
- <translation>Aceasta este o tranzac?ie normal?.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Adresa litecoin c?tre care se face plata</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Adresa litecoincash c?tre care se face plata</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1500,8 +1500,8 @@
- <translation>Introduce?i eticheta pentru ca aceast? adresa s? fie introdus? în lista de adrese folosite</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>un mesaj a fost ata?at la litecoin: URI care va fi stocat cu tranzac?ia pentru referin?a dvs. Not?: Acest mesaj nu va fi trimis c?tre re?eaua litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>un mesaj a fost ata?at la litecoincash: URI care va fi stocat cu tranzac?ia pentru referin?a dvs. Not?: Acest mesaj nu va fi trimis c?tre re?eaua litecoincash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -1537,7 +1537,7 @@
- <translation>&Semneaz? mesaj</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- + <source>The LitecoinCash address to sign the message with</source>
- <translation>Adresa cu care semna?i mesajul</translation>
- </message>
- <message>
- @@ -1569,8 +1569,8 @@
- <translation>Copiaz? semnatura curent? în clipboard-ul sistemului</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Semneaz? mesajul pentru a dovedi ca de?ine?i acest? adres? Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Semneaz? mesajul pentru a dovedi ca de?ine?i acest? adres? LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -1589,12 +1589,12 @@
- <translation>&Verific? mesaj</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Introduce?i o adres? Litecoin</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>Introduce?i o adres? LitecoinCash</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verifica?i mesajul pentru a v? asigura c? a fost semnat cu adresa Litecoin specificat?</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verifica?i mesajul pentru a v? asigura c? a fost semnat cu adresa LitecoinCash specificat?</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1702,8 +1702,8 @@
- <translation>Ruleaz? în fundal ca un demon ?i accept? comenzi</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Nucleul Litecoin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Nucleul LitecoinCash</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts
- index 7ce0e82..b604859 100644
- --- a/src/qt/locale/bitcoin_ru.ts
- +++ b/src/qt/locale/bitcoin_ru.ts
- @@ -62,12 +62,12 @@
- <translation>?????? ?????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>??? ???? ?????? Litecoin ??? ???????? ????????. ?????? ?????????? ????? ? ????? ?????????? ????? ????????? ????????.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>??? ???? ?????? LitecoinCash ??? ???????? ????????. ?????? ?????????? ????? ? ????? ?????????? ????? ????????? ????????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>??? ???? ?????? Litecoin ??? ?????? ????????. ????????????? ???????????? ????? ????? ????????? ??? ?????? ??????????.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>??? ???? ?????? LitecoinCash ??? ?????? ????????. ????????????? ???????????? ????? ????? ????????? ??? ?????? ??????????.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,7 +168,7 @@
- <translation>??????????? ?????????? ?????????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>??????????????: ???? ?? ?????????? ???????? ? ????????? ??????, ?? <b>????????? ??? ???? ????????</b>!</translation>
- </message>
- <message>
- @@ -180,7 +180,7 @@
- <translation>???????? ??????????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>?????? %1 ????????? ??? ?????????? ???????? ??????????. ???????, ??? ?????????? ?????? ????????? ?? ????? ????????? ???????? ???? ???????? ?? ????? ? ??????? ????????????? ?????? ?????????? ??????????? ??.</translation>
- </message>
- <message>
- @@ -338,8 +338,8 @@
- <translation>???? ?????????????? ?????? ?? ?????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>????????? ?????? ?? ????????? ????? Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>????????? ?????? ?? ????????? ????? LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>&????????? ?????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>??????????? ????????? ?????, ????????????? ?????? ?????????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>????????? ????????? ????? ??????? Litecoin, ????? ????????, ??? ?? ?? ????????</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>????????? ????????? ????? ??????? LitecoinCash, ????? ????????, ??? ?? ?? ????????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>????????? ?????????, ????? ??????????????, ??? ??? ???? ????????? ???????????? ??????? Litecoin</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>????????? ?????????, ????? ??????????????, ??? ??? ???? ????????? ???????????? ??????? LitecoinCash</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>?????? ???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>????????? ??????? (??????? QR-???? ? litecoin: ??????)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>????????? ??????? (??????? QR-???? ? litecoincash: ??????)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>???????? ?????? ?????????????? ??????? ? ????? ?????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>??????? litecoin: URI ??? ?????? ???????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>??????? litecoincash: URI ??? ?????? ???????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&????????? ????????? ??????</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ???????? ?????????? ? ????? Litecoin</numerusform><numerusform>%n ???????? ?????????? ? ????? Litecoin</numerusform><numerusform>%n ???????? ?????????? ? ????? Litecoin</numerusform><numerusform>%n ???????? ?????????? ? ????? Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ???????? ?????????? ? ????? LitecoinCash</numerusform><numerusform>%n ???????? ?????????? ? ????? LitecoinCash</numerusform><numerusform>%n ???????? ?????????? ? ????? LitecoinCash</numerusform><numerusform>%n ???????? ?????????? ? ????? LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,7 +478,7 @@
- <translation>????????????????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>???????? ?????? ?? %1, ????? ???????? ?????? ????????? ?????????? ????????? ??????</translation>
- </message>
- <message>
- @@ -548,8 +548,8 @@
- <translation>???????? <b>??????????</b> ? ? ????????? ????? <b>????????????</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>????????? ???????????? ??????. Litecoin ?? ????? ????????? ?????????? ?????? ? ????? ??????.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>????????? ???????????? ??????. LitecoinCash ?? ????? ????????? ?????????? ?????? ? ????? ??????.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>???????? ????? ????????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>????????? ????? "%1" ?? ???????? ?????????? Litecoin-???????.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>????????? ????? "%1" ?? ???????? ?????????? LitecoinCash-???????.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,7 +851,7 @@
- <translation>??? ?????? ??????? ????????? ?? ?????? ??????? ??? %1 ????? ??????? ???? ??????.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- <translation>%1 ??????? ? ???????? ????? ???? ??????. ??? ??????? %2GB ????? ???????? ? ???? ???????, ? ?? ???????? ?? ????? ?????. ???????? ????? ????? ???????? ? ???? ????????.</translation>
- </message>
- <message>
- @@ -886,11 +886,11 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation>???????? ?????????? ????? ???? ???? ?? ?????, ??????? ??? ?????? ????? ???????????? ???????????. ??? ?????????? ?????? ??????????, ??? ?????? ??? ???????? ????? ??????????????? ? ?????, ??. ??????????? ????.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- <translation>??????? ????????? ???????? ?? ??? ?? ???????????? ?????????? ????? ?????????? ?????.</translation>
- </message>
- <message>
- @@ -1048,20 +1048,20 @@
- <translation>&??????? ???????????????? ?????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>????????????? ??????? ???? ??? Litecoin-??????? ?? ???????. ???????? ?????? ???? ??? ?????? ???????????? UPnP, ? ?????? ??????? ????????.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>????????????? ??????? ???? ??? LitecoinCash-??????? ?? ???????. ???????? ?????? ???? ??? ?????? ???????????? UPnP, ? ?????? ??????? ????????.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>?????????? ???? ????? &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>???????????? ? ???? Litecoin ????? ?????? SOCKS5</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>???????????? ? ???? LitecoinCash ????? ?????? SOCKS5</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- - <translation>&???????????? ? ???? Litecoin ????? ?????? SOCKS5 (?????? ?? ?????????):</translation>
- + <translation>&???????????? ? ???? LitecoinCash ????? ?????? SOCKS5 (?????? ?? ?????????):</translation>
- </message>
- <message>
- <source>Proxy &IP:</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>???????????? ? ???? Litecoin ????? ?????? SOCKS5 ??? ??????? ???????? Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>???????????? ? ???? LitecoinCash ????? ?????? SOCKS5 ??? ??????? ???????? Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1195,8 +1195,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>???????????? ?????????? ????? ???? ??????????. ??? ???????? ????????????? ???????????????? ? ????? Litecoin ????? ???????????, ?? ???? ??????? ???? ?? ????????.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>???????????? ?????????? ????? ???? ??????????. ??? ???????? ????????????? ???????????????? ? ????? LitecoinCash ????? ???????????, ?? ???? ??????? ???? ?? ????????.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>?????? ??????? ???????</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>?? ??????? ????????? litecoin: ?????????? click-to-pay</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>?? ??????? ????????? litecoincash: ?????????? click-to-pay</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>???????? ????? ??????? %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>?? ??????? ?????????? URI! ??? ????? ???? ??????? ? ???????? ??????? Litecoin ??? ????????????? ??????????? URI.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>?? ??????? ?????????? URI! ??? ????? ???? ??????? ? ???????? ??????? LitecoinCash ??? ????????????? ??????????? URI.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>??????? ????? Litecoin (????????, %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>??????? ????? LitecoinCash (????????, %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>&???????? ???????????? ???????????? ????? ????????? (?? ?????????????)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>?????????????? ????????? ??? ??????? ???????, ??????? ????? ???????? ??? ???????? ???????. ????????: ????????? ?? ????? ?????????? ?????? ? ???????? ????? ???? Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>?????????????? ????????? ??? ??????? ???????, ??????? ????? ???????? ??? ???????? ???????. ????????: ????????? ?? ????? ?????????? ?????? ? ???????? ????? ???? LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2037,7 +2037,7 @@
- <translation>????? ??? ???????</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>?????? ??????????? ???????? ? ?? ????????, ???? ????? ?????????? ??????, ??? ????????? ????? ? ??????. ??????, ??????, ??? ????? ?????????? ????? ??????? ?? ?????????????, ???? ????? ?? ?????????? ????????? ??????????? ???? ?? ?? ?????????.</translation>
- </message>
- <message>
- @@ -2201,8 +2201,8 @@
- <translation><numerusform>?????? ????????????? ????????? ????? %n ????.</numerusform><numerusform>?????? ????????????? ????????? ????? %n ?????.</numerusform><numerusform>?????? ????????????? ????????? ????? %n ??????.</numerusform><numerusform>?????? ????????????? ????????? ????? %n ??????.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>????????: ???????? ????? Litecoin</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>????????: ???????? ????? LitecoinCash</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2244,8 +2244,8 @@
- <translation>??? ?????????? ??????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>????? Litecoin, ?? ??????? ????????? ??????</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>????? LitecoinCash, ?? ??????? ????????? ??????</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2264,7 +2264,7 @@
- <translation>??????? ??? ??????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>? ???????????? ????? ????? ???????? ????????. ?????????? ?????? ?????? ?????????, ??? ?? ??????? ? ???? ??????????. ???? ??????? ????????? ???????????, ???????? ?????????????? ???????.</translation>
- </message>
- <message>
- @@ -2288,8 +2288,8 @@
- <translation>??????? ????? ??? ????? ??????, ????? ???????? ??? ? ?????? ??????????????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>? litecoin: URI ???? ??????????? ?????????, ??????? ????? ????????? ?????? ? ??????????? ??? ?????? ????????. ????????: ????????? ?? ????? ?????????? ????? ???? Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>? litecoincash: URI ???? ??????????? ?????????, ??????? ????? ????????? ?????? ? ??????????? ??? ?????? ????????. ????????: ????????? ?? ????? ?????????? ????? ???? LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2333,12 +2333,12 @@
- <translation>&????????? ?????????</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>?? ?????? ??????????? ?????????/?????????? ?????? ????????, ????? ???????? ???? ??????????? ???????? ???????? ?? ???. ?????? ?????????, ?? ???????????? ???-?? ?????????????? ??? ?????????, ??? ??? ?????????? ????? ????? ???????? ????? ????????? ??? ????????? ????????????? ?????????. ???????????? ?????? ?? ?????????, ? ???????? ?? ???????? ?????? ?? ???????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>????? Litecoin, ??????? ????????? ?????????</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>????? LitecoinCash, ??????? ????????? ?????????</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2369,8 +2369,8 @@
- <translation>??????????? ??????? ??????? ? ????????? ????? ??????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>????????? ?????????, ????? ???????? ???????? ??????? Litecoin</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>????????? ?????????, ????? ???????? ???????? ??????? LitecoinCash</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2393,12 +2393,12 @@
- <translation>??????? ???? ????? ??????????, ????????? (?????????, ??? ???????? ?????, ???????, ???? ? ?.?. ? ???????? ???????????) ? ???????, ????? ????????? ?????????. ?????????, ??? ?? ??????????? ??????? ? ???????, ?? ????????? ? ????? ????????????? ??????????, ????? ?? ????? ??????? ????? "man-in-the-middle". ????????, ??? ??? ???????? ???????????? ???? ????????? ????????????, ?? ?? ????? ???????????? ??????????? ??????????.</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>????? Litecoin, ??????? ???? ????????? ?????????</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>????? LitecoinCash, ??????? ???? ????????? ?????????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>????????? ?????????, ????? ?????????, ??? ??? ???? ????????? ????????? ??????? Litecoin</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>????????? ?????????, ????? ?????????, ??? ??? ???? ????????? ????????? ??????? LitecoinCash</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -3058,8 +3058,8 @@
- <translation>?????????? ????????? HTTP ??????. ?????? debug ??? ??? ????????????.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_ru_RU.ts b/src/qt/locale/bitcoin_ru_RU.ts
- index 24fe375..82f81e3 100644
- --- a/src/qt/locale/bitcoin_ru_RU.ts
- +++ b/src/qt/locale/bitcoin_ru_RU.ts
- @@ -230,8 +230,8 @@
- <translation>&????????? ?????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -442,8 +442,8 @@
- <translation>?????????? ???? ????? &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>??????????? ? ???? Litecoin ????? SOCKS5 ??????.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>??????????? ? ???? LitecoinCash ????? SOCKS5 ??????.</translation>
- </message>
- <message>
- <source>Proxy &IP:</source>
- @@ -522,7 +522,7 @@
- <context>
- <name>QObject</name>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- <translation>??????? ???????-????? (????. %1)</translation>
- </message>
- <message numerus="yes">
- @@ -832,8 +832,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway</source>
- diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts
- index 5b96863..2b6fde7 100644
- --- a/src/qt/locale/bitcoin_sk.ts
- +++ b/src/qt/locale/bitcoin_sk.ts
- @@ -62,12 +62,12 @@
- <translation>Prijímajúce adresy</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Toto sú Va?e Litecoin adresy pre posielanie platieb. V?dy skontrolujte sumu a prijímaciu adresu pred poslaním mincí.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Toto sú Va?e LitecoinCash adresy pre posielanie platieb. V?dy skontrolujte sumu a prijímaciu adresu pred poslaním mincí.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Toto sú va?e Litecoin adresy pre prijímanie platieb. Odporú?a sa pou?i? v?dy novú prijímaciu adresu pre ka?dú transakciu.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Toto sú va?e LitecoinCash adresy pre prijímanie platieb. Odporú?a sa pou?i? v?dy novú prijímaciu adresu pre ka?dú transakciu.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>Potvr?te za?ifrovanie pe?a?enky</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>Varovanie: Ak za?ifrujete pe?a?enku a stratíte heslo, <b>STRATÍTE V?ETKY VA?E LITECOINY</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>Varovanie: Ak za?ifrujete pe?a?enku a stratíte heslo, <b>STRATÍTE V?ETKY VA?E LITECOINCASHY</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,8 +180,8 @@
- <translation>Pe?a?enka za?ifrovaná</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 sa teraz zavrie, aby sa ukon?il proces ?ifrovania. Za?ifrovanie pe?a?enky neochráni úplne pred kráde?ou litecoinov ?kodlivými programami, ktoré prenikli do vá?ho po?íta?a.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 sa teraz zavrie, aby sa ukon?il proces ?ifrovania. Za?ifrovanie pe?a?enky neochráni úplne pred kráde?ou litecoincashov ?kodlivými programami, ktoré prenikli do vá?ho po?íta?a.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Preindexúvam bloky na disku...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Posla? litecoins na adresu</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Posla? coins na adresu</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>O&veri? správu...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Za?ifruj súkromné k?ú?e ktoré patria do va?ej pe?a?enky</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Podpísa? správu s va?ou adresou Litecoin aby ste preukázali ?e ju vlastníte</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Podpísa? správu s va?ou adresou LitecoinCash aby ste preukázali ?e ju vlastníte</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Overi? ?i správa bola podpísaná uvedenou Litecoin adresou</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Overi? ?i správa bola podpísaná uvedenou LitecoinCash adresou</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Li?ta zálo?iek</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Vy?iada? platby (vygeneruje QR kódy a litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Vy?iada? platby (vygeneruje QR kódy a litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Zobrazi? zoznam pou?itých prijímacích adries a ich popisov</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Otvori? litecoin URI alebo výzvu k platbe</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Otvori? litecoincash URI alebo výzvu k platbe</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Mo?nosti príkazového riadku</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktívne pripojenie do siete Litecoin</numerusform><numerusform>%n aktívne pripojenia do siete Litecoin</numerusform><numerusform>%n aktívnych pripojení do siete Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktívne pripojenie do siete LitecoinCash</numerusform><numerusform>%n aktívne pripojenia do siete LitecoinCash</numerusform><numerusform>%n aktívnych pripojení do siete LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Aktualizovaný</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Uká? %1 zoznam mo?ných nastavení Litecoinu pomocou príkazového riadku</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Uká? %1 zoznam mo?ných nastavení LitecoinCashu pomocou príkazového riadku</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,8 +548,8 @@
- <translation>Pe?a?enka je <b>za?ifrovaná</b> a momentálne <b>zamknutá</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Vyskytla sa kritická chyba. Litecoin nemô?e ?alej bezpe?ne pokra?ova? a ukon?í sa.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Vyskytla sa kritická chyba. LitecoinCash nemô?e ?alej bezpe?ne pokra?ova? a ukon?í sa.</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>Upravi? odosielaciu adresu</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Vlo?ená adresa "%1" nieje platnou adresou Litecoin.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Vlo?ená adresa "%1" nieje platnou adresou LitecoinCash.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Ke??e toto je prvé spustenie programu, mô?ete si vybra?, kam %1 bude uklada? va?e údaje.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 stiahne a ulo?í kópiu Litecoin block chain. Minimálne %2GB dát bude ulo?ených v tejto zlo?ke, a bude sa zvä??ova? postupom ?asu. Pe?a?enka bude taktie? ulo?ená v tejto zlo?ke.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 stiahne a ulo?í kópiu LitecoinCash block chain. Minimálne %2GB dát bude ulo?ených v tejto zlo?ke, a bude sa zvä??ova? postupom ?asu. Pe?a?enka bude taktie? ulo?ená v tejto zlo?ke.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>Forma</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Nedávne transakcie nemusia by? e?te vidite?né preto mô?e by? zostatok vo va?ej pe?a?enke nesprávny. Táto informácia bude správna ke? sa dokon?í synchronizovanie pe?a?enky so sie?ou litecoin, ako je rozpísané ni??ie.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Nedávne transakcie nemusia by? e?te vidite?né preto mô?e by? zostatok vo va?ej pe?a?enke nesprávny. Táto informácia bude správna ke? sa dokon?í synchronizovanie pe?a?enky so sie?ou litecoincash, ako je rozpísané ni??ie.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Pokus o minutie litecoinov, ktoré sú ovplyvnené e?te nezobrazenými transakciami, nebude sie?ou akceptovaný.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Pokus o minutie litecoincashov, ktoré sú ovplyvnené e?te nezobrazenými transakciami, nebude sie?ou akceptovaný.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>Minú? nepotvrdený výdavok</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Automaticky otvorit port pre Litecoin na routeri. Toto funguje len ak router podporuje UPnP a je táto podpora aktivovaná.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Automaticky otvorit port pre LitecoinCash na routeri. Toto funguje len ak router podporuje UPnP a je táto podpora aktivovaná.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Mapova? port pomocou &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Pripoji? do siete Litecoin cez proxy server SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Pripoji? do siete LitecoinCash cez proxy server SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Pripoji? k Litecoinovej sieti cez separované SOCKS5 proxy pre skrytú slu?bu Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Pripoji? k LitecoinCashovej sieti cez separované SOCKS5 proxy pre skrytú slu?bu Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1145,7 +1145,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Zvo?te ako deli? litecoin pri zobrazovaní pri platbách a u?ívate?skom rozhraní.</translation>
- + <translation>Zvo?te ako deli? litecoincash pri zobrazovaní pri platbách a u?ívate?skom rozhraní.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1195,8 +1195,8 @@
- <translation>Forma</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Zobrazené informácie mô?u by? neaktuálne. Va?a pe?a?enka sa automaticky synchronizuje so sie?ou Litecoin po nadviazaní spojenia, ale tento proces e?te nie je ukon?ený.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Zobrazené informácie mô?u by? neaktuálne. Va?a pe?a?enka sa automaticky synchronizuje so sie?ou LitecoinCash po nadviazaní spojenia, ale tento proces e?te nie je ukon?ený.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1282,8 +1282,8 @@
- <translation>Neplatná adresa platby %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI sa nedá analyzova?! To mô?e by? spôsobené neplatnou Litecoin adresou alebo zle nastavenými vlastnos?ami URI.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI sa nedá analyzova?! To mô?e by? spôsobené neplatnou LitecoinCash adresou alebo zle nastavenými vlastnos?ami URI.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1376,8 +1376,8 @@
- <translation>Suma</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Zadajte litecoin adresu (napr. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Zadajte litecoincash adresu (napr. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1793,8 +1793,8 @@
- <translation>Znovu pou?i? jestvujúcu prijímaciu adresu (neodporú?a sa)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Prida? volite?nú správu k výzve na zaplatenie, ktorá sa zobrazí ke? bude výzva otvorená. Poznámka: Správa nebude poslaná s platbou cez sie? Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Prida? volite?nú správu k výzve na zaplatenie, ktorá sa zobrazí ke? bude výzva otvorená. Poznámka: Správa nebude poslaná s platbou cez sie? LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1947,7 +1947,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Posla? Litecoins</translation>
- + <translation>Posla? LCC</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -2026,7 +2026,7 @@
- <translation>spolu aspo?</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>Zaplatenie len minimálneho poplatku je v poriadku, pokia? existuje menej transakcií ako miesta v blokoch. Uvedomte si v?ak, ?e ak bude vy??í dopyt po transakciách ako doká?e sie? spracova?, mô?e by? va?a transakcia odsúvaná a nepotvrdená donekone?na.</translation>
- </message>
- <message>
- @@ -2190,8 +2190,8 @@
- <translation><numerusform>Odhadovaný za?iatok potvrdzovania po %n bloku.</numerusform><numerusform>Odhadovaný za?iatok potvrdzovania po %n blokoch.</numerusform><numerusform>Odhadovaný za?iatok potvrdzovania po %n blokoch.</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Varovanie: Neplatná Litecoin adresa</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Varovanie: Neplatná LitecoinCash adresa</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2233,7 +2233,7 @@
- <translation>Toto je normálna platba.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation>Zvo?te adresu kam posla? platbu</translation>
- </message>
- <message>
- @@ -2253,8 +2253,8 @@
- <translation>Odstráni? túto polo?ku</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Poplatok sa odpo?íta od ?iastky, ktorú odosielate. Príjemca dostane menej litecoinov ako zadáte. Ak je vybraných viacero príjemcov, poplatok je rozdelený rovným dielom.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Poplatok sa odpo?íta od ?iastky, ktorú odosielate. Príjemca dostane menej litecoincashov ako zadáte. Ak je vybraných viacero príjemcov, poplatok je rozdelený rovným dielom.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2277,8 +2277,8 @@
- <translation>Vlo?te popis pre túto adresu aby sa ulo?ila do zoznamu pou?itých adries</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Správa ktorá bola pripojená k litecoin: URI a ktorá bude ulo?ená s transakcou pre Va?e potreby. Poznámka: Táto správa nebude poslaná cez sie? Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Správa ktorá bola pripojená k litecoincash: URI a ktorá bude ulo?ená s transakcou pre Va?e potreby. Poznámka: Táto správa nebude poslaná cez sie? LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2322,12 +2322,12 @@
- <translation>&Podpísa? Správu</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>Mô?ete podpísa? správy svojou adresou a dokáza?, ?e viete prijíma? mince zaslané na túto adresu. Bu?te v?ak opatrní a podpí?te len podrobné prehlásenia, s ktorými plne súhlasíte, nako?ko útoky typu "phishing" Vás mô?u láka? k podpísaniu nejasných alebo príli? v?eobecných tvrdení ?ím prevezmú va?u identitu.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoin adresa pre podpísanie správy s</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCash adresa pre podpísanie správy s</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2358,7 +2358,7 @@
- <translation>Kopírova? tento podpis do systémovej schránky</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>Podpí?te správu aby ste dokázali ?e vlastníte túto adresu</translation>
- </message>
- <message>
- @@ -2382,12 +2382,12 @@
- <translation>Vlo?te adresu príjemcu, správu (uistite sa, ?e presne kopírujete ukon?enia riadkov, medzery, odrá?ky, at?.) a podpis pre potvrdenie správy. Bu?te opatrní a nedomý??ajte si viac ne? je uvedené v samotnej podpísanej správe a mô?ete sa tak vyhnú? podvodu MITM útokom. Toto len potvrdzuje, ?e podpisujúca strana mô?e prijíma? na tejto adrese, nepotvrdzuje to vlastníctvo ?iadnej transakcie!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Adresa Litecoin, ktorou bola podpísaná správa</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>Adresa LitecoinCash, ktorou bola podpísaná správa</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Overím správy sa uisti? ?e bola podpísaná ozna?enou Litecoin adresou</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Overím správy sa uisti? ?e bola podpísaná ozna?enou LitecoinCash adresou</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2987,8 +2987,8 @@
- <translation>Nepodarilo sa spusti? HTTP server. Pre viac detailov zobrazte debug log.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_sl_SI.ts b/src/qt/locale/bitcoin_sl_SI.ts
- index f04c846..c5711f1 100644
- --- a/src/qt/locale/bitcoin_sl_SI.ts
- +++ b/src/qt/locale/bitcoin_sl_SI.ts
- @@ -202,8 +202,8 @@
- <translation>Poustvarjam kazalo blokov na disku ...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Izvedite pla?ilo na naslov Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Izvedite pla?ilo na naslov LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -226,8 +226,8 @@
- <translation>&Preveri sporo?ilo ...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -254,12 +254,12 @@
- <translation>?ifrirajte zasebne klju?e, ki se nahajajo v denarnici</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Podpi?ite poljubno sporo?ilo z enim svojih naslovov Litecoin, da prejemniku sporo?ila doka?ete, da je ta naslov v va?i lasti.</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Podpi?ite poljubno sporo?ilo z enim svojih naslovov LitecoinCash, da prejemniku sporo?ila doka?ete, da je ta naslov v va?i lasti.</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Preverite, ?e je bilo prejeto sporo?ilo podpisano z dolo?enim naslovom Litecoin</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Preverite, ?e je bilo prejeto sporo?ilo podpisano z dolo?enim naslovom LitecoinCash</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -278,8 +278,8 @@
- <translation>Orodna vrstica zavihkov</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Zahtevajte pla?ilo (ustvarite zahtevek s kodo QR in URI tipa litecoin:)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Zahtevajte pla?ilo (ustvarite zahtevek s kodo QR in URI tipa litecoincash:)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -290,16 +290,16 @@
- <translation>Preglejte in uredite seznam naslovov, na katere ste kdaj prejeli pla?ila</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Izvedite pla?ilo iz zahtevka v datoteki ali iz URI tipa litecoin:</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Izvedite pla?ilo iz zahtevka v datoteki ali iz URI tipa litecoincash:</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>Opcije &ukazne vrstice</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktivna povezava v omre?je Litecoin</numerusform><numerusform>%n aktivni povezavi v omre?je Litecoin</numerusform><numerusform>%n aktivne povezave v omre?je Litecoin</numerusform><numerusform>%n aktivnih povezav v omre?je Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktivna povezava v omre?je LitecoinCash</numerusform><numerusform>%n aktivni povezavi v omre?je LitecoinCash</numerusform><numerusform>%n aktivne povezave v omre?je LitecoinCash</numerusform><numerusform>%n aktivnih povezav v omre?je LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -712,7 +712,7 @@
- <translation>Omogo?i &tro?enje drobi?a iz ?e nepotrjenih pla?il</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- <translation>Program samodejno odpre ustrezna vrata na usmerjevalniku. To deluje samo, ?e va? usmerjevalnik podpira in ima omogo?en UPnP.</translation>
- </message>
- <message>
- @@ -720,8 +720,8 @@
- <translation>Preslikaj vrata z uporabo &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Pove?i se v omre?je Litecoin preko posredni?kega stre?nika SOCKS5.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Pove?i se v omre?je LitecoinCash preko posredni?kega stre?nika SOCKS5.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -823,8 +823,8 @@
- <translation>Oblika</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Prikazani podatki so morda zastareli. Program ob vzpostavitvi povezave samodejno sinhronizira denarnico z omre?jem Litecoin, a trenutno ta proces ?e ni zaklju?en.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Prikazani podatki so morda zastareli. Program ob vzpostavitvi povezave samodejno sinhronizira denarnico z omre?jem LitecoinCash, a trenutno ta proces ?e ni zaklju?en.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -912,8 +912,8 @@
- <translation>Znesek</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Vnesite naslov Litecoin (npr. %1):</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Vnesite naslov LitecoinCash (npr. %1):</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1176,8 +1176,8 @@
- <translation>P&onovno uporabite obstoje? naslov za prejemanje. (Ni priporo?eno.)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Neobvezno sporo?ilo kot priponka zahtevku za pla?ilo, ki bo prikazano, ko bo zahtevek odprt. Opomba: Opravljeno pla?ilo.prek omre?ja Litecoin tega sporo?ila ne bo vsebovalo.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Neobvezno sporo?ilo kot priponka zahtevku za pla?ilo, ki bo prikazano, ko bo zahtevek odprt. Opomba: Opravljeno pla?ilo.prek omre?ja LitecoinCash tega sporo?ila ne bo vsebovalo.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1345,7 +1345,7 @@
- <translation>skupno vsaj</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>Dokler bo v blokih ?e dovolj prostora za vse nastajajo?e transakcije, zadostuje, ?e pla?ate samo minimalno provizijo. Ko pa se bo koli?ina vseh transakcij pove?ala do meja zmogljivosti omre?ja, se lahko zgodi, da va?a transakcija brez ve?je provizije nikoli ne bo potrjena.</translation>
- </message>
- <message>
- @@ -1432,8 +1432,8 @@
- <translation>Pla?ilo je navadne vrste.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Naslov Litecoin, na katerega bo pla?ilo poslano</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Naslov LitecoinCash, na katerega bo pla?ilo poslano</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1452,7 +1452,7 @@
- <translation>Izpraznite vsebino polja</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>Znesek pla?ila bo zmanj?an za znesek provizije. Prejemnik bo prejel manj?e ?tevilo kovancev, kot je bil vne?eni znesek. ?e je prejemnikov ve?, bo provizija med njih enakomerno porazdeljena.</translation>
- </message>
- <message>
- @@ -1476,8 +1476,8 @@
- <translation>?e vnesete oznako za zgornji naslov, se bo skupaj z naslovom shranila v imenk ?e uporabljenih naslovov</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Sporo?ilo, ki ste ga pripeli na URI tipa litecoin:. Shranjeno bo skupaj s podatki o transakciji. Opomba: Sporo?ilo ne bo poslano preko omre?ja Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Sporo?ilo, ki ste ga pripeli na URI tipa litecoincash:. Shranjeno bo skupaj s podatki o transakciji. Opomba: Sporo?ilo ne bo poslano preko omre?ja LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -1509,12 +1509,12 @@
- <translation>&Podpi?i sporo?ilo</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>S svojimi naslovi lahko podpisujete sporo?ila ali pogodbe in s tem dokazujete, da na teh naslovih lahko prejemate kovance. Bodite previdni in ne podpisujte ni?esar nejasnega ali naklju?nega, ker vas zlikovci preko ribarjenja (phishing) lahko prelisi?ijo, da na njih prepi?ete svojo identiteto. Podpisujte samo podrobno opisane izjave, s katerimi se strinjate.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Naslov Litecoin, s katerim podpisujete sporo?ilo</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>Naslov LitecoinCash, s katerim podpisujete sporo?ilo</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -1545,7 +1545,7 @@
- <translation>Kopiranje trenutnega podpisa na sistemsko odlo?i??e.</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>Podpi?ite sporo?ilo, da doka?ete lastni?tvo nad zgornjim naslovom.</translation>
- </message>
- <message>
- @@ -1569,12 +1569,12 @@
- <translation>Da preverite verodostojnost sporo?ila, spodaj vnesite: prejemnikov naslov, prejeto sporo?ilo (pazljivo skopirajte vse prelome vrstic, presledke, tabulatorje ipd.,) in prejeti podpis. Da se izognete napadom tipa man-in-the-middle, vedite, da iz veljavnega podpisa ne sledi ni? drugega, kot tisto, kar je navedeno v sporo?ilu. Podpis samo potrjuje dejstvo, da ima podpisnik v lasti prejemni naslov, ne more pa dokazati vira nobene transakcije!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Naslov Litecoin, s katerim je bilo sporo?ilo podpisano</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>Naslov LitecoinCash, s katerim je bilo sporo?ilo podpisano</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Preverite, ali je bilo sporo?ilo v resnici podpisano z navedenim naslovom Litecoin.</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Preverite, ali je bilo sporo?ilo v resnici podpisano z navedenim naslovom LitecoinCash.</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -1682,8 +1682,8 @@
- <translation>Teci v ozadju in sprejemaj ukaze</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_sq.ts b/src/qt/locale/bitcoin_sq.ts
- index 6e95b91..cc84c45 100644
- --- a/src/qt/locale/bitcoin_sq.ts
- +++ b/src/qt/locale/bitcoin_sq.ts
- @@ -46,12 +46,12 @@
- <translation>Duke marr adresen</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Këto janë Litecoin adresat e juaja për të dërguar pagesa. Gjithmon kontrolloni shumën dhe adresën pranuese para se të dërgoni monedha.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Këto janë LitecoinCash adresat e juaja për të dërguar pagesa. Gjithmon kontrolloni shumën dhe adresën pranuese para se të dërgoni monedha.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Këto janë Litecoin adresat e juaja për të pranuar pagesa. Rekomandohet që gjithmon të përdorni një adresë të re për çdo transaksion.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Këto janë LitecoinCash adresat e juaja për të pranuar pagesa. Rekomandohet që gjithmon të përdorni një adresë të re për çdo transaksion.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -214,8 +214,8 @@
- <translation>Ndrysho frazkalimin e përdorur per enkriptimin e portofolit</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -784,8 +784,8 @@
- <translation>Opsionet:</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Berthama Litecoin</translation>
- + <source>LitecoinCash Core</source>
- + <translation>Berthama LitecoinCash</translation>
- </message>
- <message>
- <source>Information</source>
- diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts
- index 6d06017..8021f91 100644
- --- a/src/qt/locale/bitcoin_sr.ts
- +++ b/src/qt/locale/bitcoin_sr.ts
- @@ -130,8 +130,8 @@
- <translation>??????? &???????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>???????? ????? ?? litecoin ??????</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>???????? ????? ?? litecoincash ??????</translation>
- </message>
- <message>
- <source>Change the passphrase used for wallet encryption</source>
- diff --git a/src/qt/locale/bitcoin_sr@latin.ts b/src/qt/locale/bitcoin_sr@latin.ts
- index 0a736dc..00a9aa2 100644
- --- a/src/qt/locale/bitcoin_sr@latin.ts
- +++ b/src/qt/locale/bitcoin_sr@latin.ts
- @@ -58,12 +58,12 @@
- <translation>Adresa na koju se prima</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Ovo su Va?e Litecoin adrese na koju se vr?e uplate. Uvek proverite iznos i prijemnu adresu pre slanja nov?i?a</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Ovo su Va?e LitecoinCash adrese na koju se vr?e uplate. Uvek proverite iznos i prijemnu adresu pre slanja nov?i?a</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Ovo su Va?e Litecoin adrese za primanje uplata. Preporu?uje se upotreba nove adrese za svaku transakciju.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Ovo su Va?e LitecoinCash adrese za primanje uplata. Preporu?uje se upotreba nove adrese za svaku transakciju.</translation>
- </message>
- <message>
- <source>Copy &Label</source>
- @@ -132,7 +132,7 @@
- <translation>Potvrdite ?ifrovanje nov?anika</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>Upozorenje: Ako ?ifrujete svoj nov?anik, i potom izgubite svoju pristupnu frazu <b>IZGUBI?ETE SVE SVOJE BITKOINE</b>!</translation>
- </message>
- <message>
- @@ -198,16 +198,16 @@
- <translation>Otvori &URI...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Po?alji nov?i?e na Litecoin adresu</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Po?alji nov?i?e na LitecoinCash adresu</translation>
- </message>
- <message>
- <source>&Verify message...</source>
- <translation>&Proveri poruku...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -446,8 +446,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Information</source>
- diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts
- index f35e151..e98a668 100644
- --- a/src/qt/locale/bitcoin_sv.ts
- +++ b/src/qt/locale/bitcoin_sv.ts
- @@ -62,12 +62,12 @@
- <translation>Mottagaradresser</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Detta är dina Litecoin adresser för att skicka betalningar. Kolla alltid summan och den mottagande adressen innan du skickar Litecoins.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Detta är dina LitecoinCash adresser för att skicka betalningar. Kolla alltid summan och den mottagande adressen innan du skickar LCC.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Detta är dina Litecoin adresser för att ta emot betalningar. Det rekommenderas att använda en ny mottagningsadress för varje transaktion.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Detta är dina LitecoinCash adresser för att ta emot betalningar. Det rekommenderas att använda en ny mottagningsadress för varje transaktion.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -169,8 +169,8 @@ Var vänlig och försök igen.</translation>
- <translation>Bekräfta kryptering av plånbok</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>VARNING: Om du krypterar din plånbok och glömmer ditt lösenord, kommer du att <b>FÖRLORA ALLA DINA LITECOIN</b>!</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>VARNING: Om du krypterar din plånbok och glömmer ditt lösenord, kommer du att <b>FÖRLORA ALLA DINA LITECOINCASH</b>!</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -181,7 +181,7 @@ Var vänlig och försök igen.</translation>
- <translation>Plånbok krypterad</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 kommer nu att stänga ner för att färdigställa krypteringen. Tänk på att en krypterad plånbok inte skyddar mot stöld om din dator är infekterad med en keylogger.</translation>
- </message>
- <message>
- @@ -339,8 +339,8 @@ Var vänlig och försök igen.</translation>
- <translation>Återindexerar block på disken...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Skicka litecoins till en Litecoin-adress</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Skicka coins till en LitecoinCash-adress</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -363,8 +363,8 @@ Var vänlig och försök igen.</translation>
- <translation>&Verifiera meddelande...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -391,12 +391,12 @@ Var vänlig och försök igen.</translation>
- <translation>Kryptera de privata nycklar som tillhör din plånbok</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Signera meddelanden med din Litecoin-adress för att bevisa att du äger dem</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Signera meddelanden med din LitecoinCash-adress för att bevisa att du äger dem</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Verifiera meddelanden för att vara säker på att de var signerade med specificerade Litecoin-adresser</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Verifiera meddelanden för att vara säker på att de var signerade med specificerade LitecoinCash-adresser</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -415,8 +415,8 @@ Var vänlig och försök igen.</translation>
- <translation>Verktygsfält för tabbar</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Begär betalning (genererar QR-koder och litecoin-URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Begär betalning (genererar QR-koder och litecoincash-URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -427,16 +427,16 @@ Var vänlig och försök igen.</translation>
- <translation>Visa listan av använda mottagningsadresser och etiketter</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Öppna en litecoin: URI eller betalningsbegäran</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Öppna en litecoincash: URI eller betalningsbegäran</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Kommandoradsalternativ</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n aktiva anslutningar till Litecoin-nätverket.</numerusform><numerusform>%n aktiva anslutningar till Litecoin-nätverket.</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n aktiva anslutningar till LitecoinCash-nätverket.</numerusform><numerusform>%n aktiva anslutningar till LitecoinCash-nätverket.</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -479,8 +479,8 @@ Var vänlig och försök igen.</translation>
- <translation>Uppdaterad</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Visa %1 hjälpmeddelande för att få en lista med möjliga Litecoin kommandoradsalternativ.</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Visa %1 hjälpmeddelande för att få en lista med möjliga LitecoinCash kommandoradsalternativ.</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -549,8 +549,8 @@ Var vänlig och försök igen.</translation>
- <translation>Denna plånbok är <b>krypterad</b> och för närvarande <b>låst</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Ett kritiskt fel uppstod. Litecoin kan inte fortsätta att köra säkert och kommer att avslutas.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Ett kritiskt fel uppstod. LitecoinCash kan inte fortsätta att köra säkert och kommer att avslutas.</translation>
- </message>
- </context>
- <context>
- @@ -743,8 +743,8 @@ Var vänlig och försök igen.</translation>
- <translation>Redigera avsändaradress</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Den angivna adressen "%1" är inte en giltig Litecoin-adress.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Den angivna adressen "%1" är inte en giltig LitecoinCash-adress.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -852,8 +852,8 @@ Var vänlig och försök igen.</translation>
- <translation>Eftersom detta är första gången programmet startas får du välja var %1 skall lagra sitt data.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 kommer att ladda ner och spara en kopia av Litecoin blockkedjan. Åtminstone %2GB av data kommer att sparas i denna katalog, och den kommer att växa över tiden. Plånboken kommer också att sparas i denna katalog.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 kommer att ladda ner och spara en kopia av LitecoinCash blockkedjan. Åtminstone %2GB av data kommer att sparas i denna katalog, och den kommer att växa över tiden. Plånboken kommer också att sparas i denna katalog.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -887,8 +887,8 @@ Var vänlig och försök igen.</translation>
- <translation>Formulär</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Nyligen gjorda transaktioner visas inte korrekt och därför kan ditt din plånboks saldo visas felaktigt. Denna information kommer att visas korrekt så snart din plånbok har synkroniserat klart med litecoin nätverket, enligt detaljer nedan.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Nyligen gjorda transaktioner visas inte korrekt och därför kan ditt din plånboks saldo visas felaktigt. Denna information kommer att visas korrekt så snart din plånbok har synkroniserat klart med litecoincash nätverket, enligt detaljer nedan.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1045,16 +1045,16 @@ Var vänlig och försök igen.</translation>
- <translation>&Spendera obekräftad växel</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Öppna automatiskt Litecoin-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Öppna automatiskt LitecoinCash-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Tilldela port med hjälp av &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Anslut till Litecoin-nätverket genom en SOCKS5-proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>Anslut till LitecoinCash-nätverket genom en SOCKS5-proxy.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1093,8 +1093,8 @@ Var vänlig och försök igen.</translation>
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Anslut till Litecoin-nätverket genom en separat SOCKS5-proxy för dolda tjänster i Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>Anslut till LitecoinCash-nätverket genom en separat SOCKS5-proxy för dolda tjänster i Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1192,8 +1192,8 @@ Var vänlig och försök igen.</translation>
- <translation>Formulär</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Den visade informationen kan vara inaktuell. Plånboken synkroniseras automatiskt med Litecoin-nätverket efter att anslutningen är upprättad, men denna process har inte slutförts ännu.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Den visade informationen kan vara inaktuell. Plånboken synkroniseras automatiskt med LitecoinCash-nätverket efter att anslutningen är upprättad, men denna process har inte slutförts ännu.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1267,8 +1267,8 @@ Var vänlig och försök igen.</translation>
- <translation>Fel vid betalningsbegäran</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Kan inte starta litecoin: klicka-och-betala handhavare</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>Kan inte starta litecoincash: klicka-och-betala handhavare</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1283,8 +1283,8 @@ Var vänlig och försök igen.</translation>
- <translation>Ogiltig betalningsadress %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI kan inte tolkas! Detta kan orsakas av en ogiltig Litecoin-adress eller felaktiga URI parametrar.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI kan inte tolkas! Detta kan orsakas av en ogiltig LitecoinCash-adress eller felaktiga URI parametrar.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1377,8 +1377,8 @@ Var vänlig och försök igen.</translation>
- <translation>Mängd</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Ange en Litecoin-adress (t.ex. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Ange en LitecoinCash-adress (t.ex. %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1793,8 +1793,8 @@ Var vänlig och försök igen.</translation>
- <translation>Åt&eranvänd en existerande mottagningsadress (rekommenderas inte)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Ett frivilligt meddelande att bifoga betalningsbegäran, vilket visas när begäran öppnas. NB: Meddelandet kommer inte att sändas med betalningen över Litecoinnätverket.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Ett frivilligt meddelande att bifoga betalningsbegäran, vilket visas när begäran öppnas. NB: Meddelandet kommer inte att sändas med betalningen över LitecoinCashnätverket.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2026,8 +2026,8 @@ Var vänlig och försök igen.</translation>
- <translation>totalt minst</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Att betala endast den minsta avgiften är bara bra så länge det är mindre transaktionsvolym än utrymme i blocken. Men tänk på att det kan hamna i en aldrig bekräftar transaktion när det finns mer efterfrågan på litecoin transaktioner än nätverket kan bearbeta.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Att betala endast den minsta avgiften är bara bra så länge det är mindre transaktionsvolym än utrymme i blocken. Men tänk på att det kan hamna i en aldrig bekräftar transaktion när det finns mer efterfrågan på litecoincash transaktioner än nätverket kan bearbeta.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2186,8 +2186,8 @@ Var vänlig och försök igen.</translation>
- <translation>Betala endast den nödvändiga avgiften på %1</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Varning: Felaktig Litecoinadress</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Varning: Felaktig LitecoinCashadress</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2229,8 +2229,8 @@ Var vänlig och försök igen.</translation>
- <translation>Detta är en normal betalning.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Litecoinadress att sända betalning till</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>LitecoinCashadress att sända betalning till</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2249,8 +2249,8 @@ Var vänlig och försök igen.</translation>
- <translation>Radera denna post</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Avgiften dras från beloppet som skickas. Mottagaren kommer att få mindre litecoins än du angivit i belopp-fältet. Om flera mottagare valts kommer avgiften delas jämt.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Avgiften dras från beloppet som skickas. Mottagaren kommer att få mindre coins än du angivit i belopp-fältet. Om flera mottagare valts kommer avgiften delas jämt.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2273,8 +2273,8 @@ Var vänlig och försök igen.</translation>
- <translation>Ange en etikett för denna adress att adderas till listan över använda adresser</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Ett meddelande som bifogades litecoin-URI, vilket lagras med transaktionen som referens. NB: Meddelandet kommer inte att sändas över Litecoinnätverket.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Ett meddelande som bifogades litecoincash-URI, vilket lagras med transaktionen som referens. NB: Meddelandet kommer inte att sändas över LitecoinCashnätverket.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2318,12 +2318,12 @@ Var vänlig och försök igen.</translation>
- <translation>&Signera Meddelande</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Du kan underteckna meddelanden/avtal med dina adresser för att bevisa att du kan ta emot litecoins som skickats till dem. Var försiktig så du inte undertecknar något oklart eller konstigt, eftersom phishing-angrepp kan försöka få dig att underteckna din identitet till dem. Underteckna endast väldetaljerade meddelanden som du godkänner.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Du kan underteckna meddelanden/avtal med dina adresser för att bevisa att du kan ta emot coins som skickats till dem. Var försiktig så du inte undertecknar något oklart eller konstigt, eftersom phishing-angrepp kan försöka få dig att underteckna din identitet till dem. Underteckna endast väldetaljerade meddelanden som du godkänner.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>Litecoinadress att signera meddelandet med</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>LitecoinCashadress att signera meddelandet med</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2354,7 +2354,7 @@ Var vänlig och försök igen.</translation>
- <translation>Kopiera signaturen till systemets Urklipp</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>Signera meddelandet för att bevisa att du äger denna adress</translation>
- </message>
- <message>
- @@ -2378,12 +2378,12 @@ Var vänlig och försök igen.</translation>
- <translation>Ange mottagarens adress, meddelande (kopiera radbrytningar, mellanrum, flikar, etc. exakt) och signatur nedan för att verifiera meddelandet. Undvik att läsa in mera information i signaturen än vad som stod i själva undertecknade meddelandet, för att undvika ett man-in-the-middle-angrepp. Notera att detta endast bevisar att undertecknad tar emot med adressen, det bevisar inte vem som skickat transaktionen!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>Litecoinadressen som meddelandet signerades med</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>LitecoinCashadressen som meddelandet signerades med</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Verifiera meddelandet för att vara säker på att den var signerad med den angivna Litecoin-adressen</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Verifiera meddelandet för att vara säker på att den var signerad med den angivna LitecoinCash-adressen</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2898,7 +2898,7 @@ Var vänlig och försök igen.</translation>
- <name>WalletModel</name>
- <message>
- <source>Send Coins</source>
- - <translation>Skicka Litecoins</translation>
- + <translation>Skicka LCC</translation>
- </message>
- </context>
- <context>
- @@ -3007,8 +3007,8 @@ Var vänlig och försök igen.</translation>
- <translation>Kunde inte starta HTTP-server. Se avlusningsloggen för detaljer.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- @@ -3796,7 +3796,7 @@ Var vänlig och försök igen.</translation>
- </message>
- <message>
- <source>Insufficient funds</source>
- - <translation>Otillräckligt med litecoins</translation>
- + <translation>Otillräckligt med coins</translation>
- </message>
- <message>
- <source>Loading block index...</source>
- diff --git a/src/qt/locale/bitcoin_ta.ts b/src/qt/locale/bitcoin_ta.ts
- index 3a6291c..a3c21b3 100644
- --- a/src/qt/locale/bitcoin_ta.ts
- +++ b/src/qt/locale/bitcoin_ta.ts
- @@ -90,8 +90,8 @@
- <translation>&???????? ???????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -708,8 +708,8 @@
- <context>
- <name>bitcoin-core</name>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin ?????</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash ?????</translation>
- </message>
- <message>
- <source>(default: %u)</source>
- diff --git a/src/qt/locale/bitcoin_te.ts b/src/qt/locale/bitcoin_te.ts
- index f7471ee..ebf0424 100644
- --- a/src/qt/locale/bitcoin_te.ts
- +++ b/src/qt/locale/bitcoin_te.ts
- @@ -38,11 +38,11 @@
- <translation>???????? ??????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>??? ???? ???? ?????????? ??????????? ??????????. ?????? ???? ????? ????????? ???????? ???????? ????? ????????? ?????? ????????????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>??? ???? ???????? ?????????? ??????????? ??????????. ????? ?????????? ??????? ???????? ???????? ????? ??????.</translation>
- </message>
- <message>
- @@ -84,7 +84,7 @@
- <translation>?????? ??????? ????????? ???????.<br/> <b>??? ???? ?????? ????????? ????????</b>, ??? <b>??????? ???? ?????? ?????</b> ????? ???? ????????? ?????? ??????.</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>????????: ?? ?????? ?????????? ?? ????????? ????????, <b>?? ????????????? ????? ??????????</b></translation>
- </message>
- <message>
- diff --git a/src/qt/locale/bitcoin_th_TH.ts b/src/qt/locale/bitcoin_th_TH.ts
- index 8fc2863..0b18ff7 100644
- --- a/src/qt/locale/bitcoin_th_TH.ts
- +++ b/src/qt/locale/bitcoin_th_TH.ts
- @@ -163,11 +163,11 @@
- </message>
- <message>
- <source>&Sending addresses...</source>
- - <translation>&??????????? ???????? litecoin</translation>
- + <translation>&??????????? ???????? litecoincash</translation>
- </message>
- <message>
- <source>&Receiving addresses...</source>
- - <translation>&??????????? ???????? litecoin</translation>
- + <translation>&??????????? ???????? litecoincash</translation>
- </message>
- <message>
- <source>Open &URI...</source>
- @@ -178,8 +178,8 @@
- <translation>???????????? ???????????? ???? ???????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>??? coins ????? ??????? Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>??? coins ????? ??????? LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -202,8 +202,8 @@
- <translation>&?????????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -230,12 +230,12 @@
- <translation>???????? private keys/ ??????????? ????????????????????????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>??????????????????? ??????? Litecoin ??????????????????????????? litecoin ???????</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>??????????????????? ??????? LitecoinCash ??????????????????????????? litecoincash ???????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>??????? ??????? ???????????????? ????????????? ??????????? Litecoin ????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>??????? ??????? ???????????????? ????????????? ??????????? LitecoinCash ????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -254,28 +254,28 @@
- <translation>?????????????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>????????? ??????????? (????? QR codes ??? litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>????????? ??????????? (????? QR codes ??? litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- - <translation>?????????? ??????????????????? litecoin ??? ??????????? ????????????</translation>
- + <translation>?????????? ??????????????????? litecoincash ??? ??????????? ????????????</translation>
- </message>
- <message>
- <source>Show the list of used receiving addresses and labels</source>
- - <translation>?????????? ??????????????????? litecoin ???? ??????????? ????????????</translation>
- + <translation>?????????? ??????????????????? litecoincash ???? ??????????? ????????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>???? litecoin: URI ???? ???????????????? (???????????????????)</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>???? litecoincash: URI ???? ???????????????? (???????????????????)</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&???????? Command-line</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ???????????????????????????? ??????????????????????? Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ???????????????????????????? ??????????????????????? LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -318,8 +318,8 @@
- <translation>???????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>???? %1 ???????????????? ??????????????? ?????????????????????????? Litecoin command-line</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>???? %1 ???????????????? ??????????????? ?????????????????????????? LitecoinCash command-line</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -563,8 +563,8 @@
- <translation>???????????????????????????? ??????????????? ????????????????????? %1</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 ??????????????????????????????????? ???????? Litecoin ??? ??????????????????? %2GB ????????????????????????? ???????????????????????????????? ??????????? ?????????????????????????????</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 ??????????????????????????????????? ???????? LitecoinCash ??? ??????????????????? %2GB ????????????????????????? ???????????????????????????????? ??????????? ?????????????????????????????</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -712,16 +712,16 @@
- <translation>&?????????????????????????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>???? Litecoin ???????????????/client port ?? router ???????????? ?????????????????? router ???????? UPnP ??????????????????</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>???? LitecoinCash ???????????????/client port ?? router ???????????? ?????????????????? router ???????? UPnP ??????????????????</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>???????? ?????? &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>???????????? Litecoin ?????????? ??????????????? SOCKS5</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>???????????? LitecoinCash ?????????? ??????????????? SOCKS5</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -760,8 +760,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>???????????? ????????? Litecoin ??????? ???????? SOCKS5 ?????????? ?????? Tor ????????</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>???????????? ????????? LitecoinCash ??????? ???????? SOCKS5 ?????????? ?????? Tor ????????</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts
- index ba740cc..5c7b690 100644
- --- a/src/qt/locale/bitcoin_tr.ts
- +++ b/src/qt/locale/bitcoin_tr.ts
- @@ -62,12 +62,12 @@
- <translation>Al?m adresleri</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>Bunlar ödemeleri göndermek için kullanaca??n?z Litecoin adreslerinizdir. Litecoin yollamadan önce tutar? ve al?c?n?n al?m adresini her zaman kontrol ediniz.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>Bunlar ödemeleri göndermek için kullanaca??n?z LitecoinCash adreslerinizdir. LitecoinCash yollamadan önce tutar? ve al?c?n?n al?m adresini her zaman kontrol ediniz.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>Bunlar ödemeleri almak için kullanaca??n?z Litecoin adreslerinizdir. Her i?lem için yeni bir al?m adresi kullanman?z tavsiye edilir.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>Bunlar ödemeleri almak için kullanaca??n?z LitecoinCash adreslerinizdir. Her i?lem için yeni bir al?m adresi kullanman?z tavsiye edilir.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,7 +168,7 @@
- <translation>Cüzdan ?ifrelemesini onayla</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>Uyar?: E?er cüzdan?n?z? ?ifreler ve parolan?z? kaybederseniz <b>TÜM B?TCO?NLER?N?Z? KAYBEDECEKS?N?Z</b>!</translation>
- </message>
- <message>
- @@ -180,8 +180,8 @@
- <translation>Cüzdan ?ifrelendi</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>?ifreleme i?leminin bitirilmesi için %1 kapat?lacak. Her ne kadar cüzdan?n?z? ?ifreleseniz de ?ifrelemenin litecoinlerinizi bilgisayar?n?za bula?an zararl?lardan tam olarak koruyamayaca??n? unutmay?n.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>?ifreleme i?leminin bitirilmesi için %1 kapat?lacak. Her ne kadar cüzdan?n?z? ?ifreleseniz de ?ifrelemenin litecoincashlerinizi bilgisayar?n?za bula?an zararl?lardan tam olarak koruyamayaca??n? unutmay?n.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,8 +338,8 @@
- <translation>Diskteki bloklar yeniden indeksleniyor...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>Bir litecoin adresine litecoin gönder</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>Bir litecoincash adresine litecoincash gönder</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>?letiyi &kontrol et...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>Cüzdan?n?za ait özel anahtarlar? ?ifreleyin</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>?letileri adreslerin size ait oldu?unu ispatlamak için Litecoin adresleri ile imzala</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>?letileri adreslerin size ait oldu?unu ispatlamak için LitecoinCash adresleri ile imzala</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Belirtilen Litecoin adresleri ile imzaland?klar?ndan emin olmak için iletileri kontrol et</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Belirtilen LitecoinCash adresleri ile imzaland?klar?ndan emin olmak için iletileri kontrol et</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>Sekme araç çubu?u</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Ödeme talep et (QR kodu ve litecoin URI'si olu?turur)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Ödeme talep et (QR kodu ve litecoincash URI'si olu?turur)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>Kullan?lm?? al?m adresleri ve etiketlerin listesini göster</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Bir litecoin: ba?lant?s? ya da ödeme talebi aç</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>Bir litecoincash: ba?lant?s? ya da ödeme talebi aç</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&Komut sat?r? seçenekleri</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>Litecoin ?ebekesine %n faal ba?lant?</numerusform><numerusform>Litecoin a??na %n etkin ba?lant? var</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>LitecoinCash ?ebekesine %n faal ba?lant?</numerusform><numerusform>LitecoinCash a??na %n etkin ba?lant? var</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,8 +478,8 @@
- <translation>Güncel</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- - <translation>Olas? Litecoin komut sat?r? seçeneklerinin listesini görmek için %1 yard?m mesaj?n? göster</translation>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- + <translation>Olas? LitecoinCash komut sat?r? seçeneklerinin listesini görmek için %1 yard?m mesaj?n? göster</translation>
- </message>
- <message>
- <source>%1 client</source>
- @@ -548,15 +548,15 @@
- <translation>Cüzdan <b>?ifrelenmi?tir</b> ve ?u anda <b>kilitlidir</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>Ölümcül bir hata olu?tu. Litecoin yaz?l?m? art?k güvenli bir ?ekilde çal??maya devam edemedi?i için kapat?lacakt?r.</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>Ölümcül bir hata olu?tu. LitecoinCash yaz?l?m? art?k güvenli bir ?ekilde çal??maya devam edemedi?i için kapat?lacakt?r.</translation>
- </message>
- </context>
- <context>
- <name>CoinControlDialog</name>
- <message>
- <source>Coin Selection</source>
- - <translation>Litecoin Seçimi</translation>
- + <translation>LitecoinCash Seçimi</translation>
- </message>
- <message>
- <source>Quantity:</source>
- @@ -742,8 +742,8 @@
- <translation>Gönderi adresini düzenle</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>Girilen "%1" adresi geçerli bir Litecoin adresi de?ildir.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>Girilen "%1" adresi geçerli bir LitecoinCash adresi de?ildir.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>Bu program?n ilk kez ba?lat?lmas?ndan dolay? %1 yaz?l?m?n?n verilerini nerede saklayaca??n? seçebilirsiniz.</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1, Litecoin blok zincirinin bir kopyas?n? indirecek ve saklayacakt?r. Bu klasörde en az %2 GB veri saklanacak ve bu zamanla artacakt?r. Cüzdan da bu klasörde saklanacakt?r.</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1, LitecoinCash blok zincirinin bir kopyas?n? indirecek ve saklayacakt?r. Bu klasörde en az %2 GB veri saklanacak ve bu zamanla artacakt?r. Cüzdan da bu klasörde saklanacakt?r.</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>Form</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>Son i?lemler henüz görünmeyebilir ve bu nedenle cüzdan?n?z?n bakiyesi yanl?? olabilir. Bu bilgiler, a?a??da detayland?r?ld??? gibi, cüzdan?n?z litecoin a?? ile senkronizasyonunu tamamlad???nda do?ru olacakt?r. </translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>Son i?lemler henüz görünmeyebilir ve bu nedenle cüzdan?n?z?n bakiyesi yanl?? olabilir. Bu bilgiler, a?a??da detayland?r?ld??? gibi, cüzdan?n?z litecoincash a?? ile senkronizasyonunu tamamlad???nda do?ru olacakt?r. </translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>Henüz görüntülenmeyen i?lemlerden etkilenen litecoinleri harcama giri?iminde bulunmak a? taraf?ndan kabul edilmeyecektir.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>Henüz görüntülenmeyen i?lemlerden etkilenen litecoincashleri harcama giri?iminde bulunmak a? taraf?ndan kabul edilmeyecektir.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>Do?rulanmam?? para üstünü &harca</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>Yönlendiricide Litecoin istemci portlar?n? otomatik olarak açar. Bu, sadece yönlendiricinizin UPnP deste?i bulunuyorsa ve etkinse çal??abilir.</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>Yönlendiricide LitecoinCash istemci portlar?n? otomatik olarak açar. Bu, sadece yönlendiricinizin UPnP deste?i bulunuyorsa ve etkinse çal??abilir.</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>Portlar? &UPnP kullanarak haritala</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>Litecoin a??na bir SOCKS5 vekil sunucusu arac?l???yla ba?lan.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>LitecoinCash a??na bir SOCKS5 vekil sunucusu arac?l???yla ba?lan.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>Litecoin a??na gizli Tor servisleri için ayr? bir SOCKS5 vekil sunucusu arac?l???yla ba?lan.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>LitecoinCash a??na gizli Tor servisleri için ayr? bir SOCKS5 vekil sunucusu arac?l???yla ba?lan.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1145,7 +1145,7 @@
- </message>
- <message>
- <source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
- - <translation>Litecoin gönderildi?inde arayüzde gösterilecek varsay?lan alt birimi seçiniz.</translation>
- + <translation>LitecoinCash gönderildi?inde arayüzde gösterilecek varsay?lan alt birimi seçiniz.</translation>
- </message>
- <message>
- <source>Whether to show coin control features or not.</source>
- @@ -1195,8 +1195,8 @@
- <translation>Form</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>Görüntülenen bilgiler güncel olmayabilir. Ba?lant? kuruldu?unda cüzdan?n?z otomatik olarak Litecoin a?? ile senkronize olur ancak bu i?lem henüz tamamlanmam??t?r.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>Görüntülenen bilgiler güncel olmayabilir. Ba?lant? kuruldu?unda cüzdan?n?z otomatik olarak LitecoinCash a?? ile senkronize olur ancak bu i?lem henüz tamamlanmam??t?r.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>Ödeme talebi hatas?</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>Litecoin ba?lat?lamad?: t?kla-ve-öde yöneticisi</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>LitecoinCash ba?lat?lamad?: t?kla-ve-öde yöneticisi</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>%1 ödeme adresi geçersizdir</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>URI ayr??t?r?lam?yor! Bunun nedeni geçersiz bir Litecoin adresi veya hatal? biçimlendirilmi? URI de?i?kenleri olabilir.</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>URI ayr??t?r?lam?yor! Bunun nedeni geçersiz bir LitecoinCash adresi veya hatal? biçimlendirilmi? URI de?i?kenleri olabilir.</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>Tutar</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Bir Litecoin adresi giriniz (mesela %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>Bir LitecoinCash adresi giriniz (mesela %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1726,7 +1726,7 @@
- </message>
- <message>
- <source>WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command.</source>
- - <translation>UYARI: Litecoin doland?r?c?lar?n?n çok fazla etkin oldu?u zamanlarda, doland?r?c?lar baz? kullan?c?lara buraya komutlar yazmalar?n? söylerek onlar?n cüzdanlar?ndaki litecoinleri çalm??lard?r. Bir komutun sonuçlar?n? tam olarak anlamadan bu konsolu kullanmay?n.</translation>
- + <translation>UYARI: LitecoinCash doland?r?c?lar?n?n çok fazla etkin oldu?u zamanlarda, doland?r?c?lar baz? kullan?c?lara buraya komutlar yazmalar?n? söylerek onlar?n cüzdanlar?ndaki litecoincashleri çalm??lard?r. Bir komutun sonuçlar?n? tam olarak anlamadan bu konsolu kullanmay?n.</translation>
- </message>
- <message>
- <source>Network activity disabled</source>
- @@ -1804,8 +1804,8 @@
- <translation>&Hâlihaz?rda bulunan bir al?m adresini kullan (önerilmez)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>Talep aç?ld???nda gösterilecek, iste?inize dayal?, ödeme talebi ile ili?kilendirilecek bir ileti. Not: Bu ileti ödeme ile birlikte Litecoin a?? üzerinden gönderilmeyecektir.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>Talep aç?ld???nda gösterilecek, iste?inize dayal?, ödeme talebi ile ili?kilendirilecek bir ileti. Not: Bu ileti ödeme ile birlikte LitecoinCash a?? üzerinden gönderilmeyecektir.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1958,7 +1958,7 @@
- <name>SendCoinsDialog</name>
- <message>
- <source>Send Coins</source>
- - <translation>Litecoin yolla</translation>
- + <translation>LitecoinCash yolla</translation>
- </message>
- <message>
- <source>Coin Control Features</source>
- @@ -2037,8 +2037,8 @@
- <translation>toplam asgari</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>Gerekli olan en az ücreti ödemek, bloklarda bo?luktan daha az i?lem hacmi oldu?u sürece bir sorun ç?karmaz. Fakat a??n i?leyecebilece?inden daha çok litecoin i?lemi talebi oldu?unda bunun asla do?rulanmayan bir i?lem olabilece?inin fark?nda olmal?s?n?z.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>Gerekli olan en az ücreti ödemek, bloklarda bo?luktan daha az i?lem hacmi oldu?u sürece bir sorun ç?karmaz. Fakat a??n i?leyecebilece?inden daha çok litecoincash i?lemi talebi oldu?unda bunun asla do?rulanmayan bir i?lem olabilece?inin fark?nda olmal?s?n?z.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -2150,7 +2150,7 @@
- </message>
- <message>
- <source>Confirm send coins</source>
- - <translation>Litecoin gönderimini onaylay?n</translation>
- + <translation>LitecoinCash gönderimini onaylay?n</translation>
- </message>
- <message>
- <source>The recipient address is not valid. Please recheck.</source>
- @@ -2197,8 +2197,8 @@
- <translation>Sadece asgari ücret olan %1 tutar?n? öde</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>Uyar?: geçersiz Litecoin adresi</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>Uyar?: geçersiz LitecoinCash adresi</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2240,8 +2240,8 @@
- <translation>Bu, normal bir ödemedir.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>Ödemenin yollanaca?? Litecoin adresi</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>Ödemenin yollanaca?? LitecoinCash adresi</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2260,8 +2260,8 @@
- <translation>Bu ögeyi kald?r</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>Ücret yollanan tutardan al?nacakt?r. Al?c? tutar alan?na girdi?inizden daha az litecoin alacakt?r. E?er birden çok al?c? seçiliyse ücret e?it olarak bölünecektir.</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>Ücret yollanan tutardan al?nacakt?r. Al?c? tutar alan?na girdi?inizden daha az litecoincash alacakt?r. E?er birden çok al?c? seçiliyse ücret e?it olarak bölünecektir.</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2284,8 +2284,8 @@
- <translation>Kullan?lm?? adres listesine eklemek için bu adrese bir etiket girin</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>Referans için litecoin: URI'siyle ili?tirilmi? i?lemle birlikte depolanacak bir ileti. Not: Bu mesaj Litecoin a?? üzerinden gönderilmeyecektir.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>Referans için litecoincash: URI'siyle ili?tirilmi? i?lemle birlikte depolanacak bir ileti. Not: Bu mesaj LitecoinCash a?? üzerinden gönderilmeyecektir.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2329,12 +2329,12 @@
- <translation>?leti &imzala</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- - <translation>Adreslerinize yollanan litecoinleri alabilece?iniz ispatlamak için adreslerinizle iletiler/anla?malar imzalayabilirsiniz. Oltalama sald?r?lar?n?n kimli?inizi imzan?zla elde etmeyi deneyebilecekleri için belirsiz ya da rastgele hiçbir ?ey imzalamamaya dikkat ediniz. Sadece ayr?nt?l? aç?klamas? olan ve tümüne kat?ld???n?z ifadeleri imzalay?n?z.</translation>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <translation>Adreslerinize yollanan litecoincashleri alabilece?iniz ispatlamak için adreslerinizle iletiler/anla?malar imzalayabilirsiniz. Oltalama sald?r?lar?n?n kimli?inizi imzan?zla elde etmeyi deneyebilecekleri için belirsiz ya da rastgele hiçbir ?ey imzalamamaya dikkat ediniz. Sadece ayr?nt?l? aç?klamas? olan ve tümüne kat?ld???n?z ifadeleri imzalay?n?z.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>?letinin imzalanmas?nda kullan?lacak Litecoin adresi</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>?letinin imzalanmas?nda kullan?lacak LitecoinCash adresi</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2365,8 +2365,8 @@
- <translation>Güncel imzay? sistem panosuna kopyala</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>Bu Litecoin adresinin sizin oldu?unu ispatlamak için iletiyi imzalay?n</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>Bu LitecoinCash adresinin sizin oldu?unu ispatlamak için iletiyi imzalay?n</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2389,12 +2389,12 @@
- <translation>Al?c?n?n adresini, iletiyi (sat?r sonlar?, bo?luklar, sekmeler vs. karakterleri tam olarak kopyalad???n?zdan emin olunuz) ve imzay? a?a??ya giriniz. Bir ortadaki adam sald?r?s? taraf?ndan kand?r?lmaya engel olmak için imzadan, imzal? iletinin içeri?ini a?an bir anlam ç?karmamaya dikkat ediniz. Bunun sadece imzalayan taraf?n adres ile al?m yapabildi?ini ispatlad???n? ve herhangi bir i?lemin gönderi taraf?n? kan?tlayamayaca??n? unutmay?n?z!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>?letinin imzalanmas?nda kullan?lan Litecoin adresi</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>?letinin imzalanmas?nda kullan?lan LitecoinCash adresi</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>Belirtilen Litecoin adresi ile imzaland???n? do?rulamak için iletiyi kontrol et</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>Belirtilen LitecoinCash adresi ile imzaland???n? do?rulamak için iletiyi kontrol et</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2619,7 +2619,7 @@
- </message>
- <message>
- <source>Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source>
- - <translation>Olu?turulan litecoin'lerin harcanabilmelerinden önce %1 blok beklemeleri gerekmektedir. Bu blok, olu?turdu?unuzda, blok zincirine eklenmesi için a?da yay?nland?. Zincire eklenmesi ba?ar?s?z olursa, durumu "kabul edilmedi" olarak de?i?tirilecek ve harcanamayacakt?r. Bu, bazen ba?ka bir dü?üm sizden birkaç saniye önce ya da sonra blok olu?turursa meydana gelebilir.</translation>
- + <translation>Olu?turulan litecoincash'lerin harcanabilmelerinden önce %1 blok beklemeleri gerekmektedir. Bu blok, olu?turdu?unuzda, blok zincirine eklenmesi için a?da yay?nland?. Zincire eklenmesi ba?ar?s?z olursa, durumu "kabul edilmedi" olarak de?i?tirilecek ve harcanamayacakt?r. Bu, bazen ba?ka bir dü?üm sizden birkaç saniye önce ya da sonra blok olu?turursa meydana gelebilir.</translation>
- </message>
- <message>
- <source>Debug information</source>
- @@ -2945,7 +2945,7 @@
- <name>WalletModel</name>
- <message>
- <source>Send Coins</source>
- - <translation>Litecoini Gönder</translation>
- + <translation>LitecoinCashi Gönder</translation>
- </message>
- </context>
- <context>
- @@ -3054,8 +3054,8 @@
- <translation>HTTP sunucusu ba?lat?lamad?. Ayr?nt?lar için debug.log dosyas?na bak?n?z.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Çekirde?i</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Çekirde?i</translation>
- </message>
- <message>
- <source>The %s developers</source>
- @@ -3135,7 +3135,7 @@
- </message>
- <message>
- <source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source>
- - <translation>Bu kararl? sürümden önceki bir deneme sürümüdür. - risklerini bilerek kullanma sorumlulu?u sizdedir - litecoin olu?turmak ya da ticari uygulamalar için kullanmay?n?z</translation>
- + <translation>Bu kararl? sürümden önceki bir deneme sürümüdür. - risklerini bilerek kullanma sorumlulu?u sizdedir - litecoincash olu?turmak ya da ticari uygulamalar için kullanmay?n?z</translation>
- </message>
- <message>
- <source>Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source>
- @@ -3575,7 +3575,7 @@
- </message>
- <message>
- <source>The transaction amount is too small to pay the fee</source>
- - <translation>??lemdeki litecoin tutar? ücreti ödemek için çok dü?ük</translation>
- + <translation>??lemdeki litecoincash tutar? ücreti ödemek için çok dü?ük</translation>
- </message>
- <message>
- <source>This is experimental software.</source>
- diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts
- index 39a6c2c..eebf02c 100644
- --- a/src/qt/locale/bitcoin_uk.ts
- +++ b/src/qt/locale/bitcoin_uk.ts
- @@ -62,12 +62,12 @@
- <translation>?????? ?????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>?? ???? ?????? Litecoin ??? ?????????? ????????. ?????? ??????????? ???? ?? ?????? ?????????? ????? ????????????? ?????.</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>?? ???? ?????? LitecoinCash ??? ?????????? ????????. ?????? ??????????? ???? ?? ?????? ?????????? ????? ????????????? ?????.</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>?? ???? ?????? Litecoin ??? ????????? ????????. ??? ?????? ?????????? ?????????????? ??????????????? ???? ?????? ??????????.</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>?? ???? ?????? LitecoinCash ??? ????????? ????????. ??? ?????? ?????????? ?????????????? ??????????????? ???? ?????? ??????????.</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,7 +168,7 @@
- <translation>??????????? ?????????? ???????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>?????: ???? ?? ?????????? ???????? ? ???????? ??????, ?? <b>???????? ??? ???? ????????</b>!</translation>
- </message>
- <message>
- @@ -180,8 +180,8 @@
- <translation>???????? ???????????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 ???? ??????? ?????, ??? ????????? ?????? ??????????. ???'??????, ?? ?????????? ??????? ?? ???? ???????? ????????? ???? litecoin? ??? ???????? ?????????? ??????????, ? ??????? ???? ??? ????'???? ???? ??????????.</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 ???? ??????? ?????, ??? ????????? ?????? ??????????. ???'??????, ?? ?????????? ??????? ?? ???? ???????? ????????? ???? litecoincash? ??? ???????? ?????????? ??????????, ? ??????? ???? ??? ????'???? ???? ??????????.</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -338,7 +338,7 @@
- <translation>?????????????? ?????? ?? ????? ...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- + <source>Send coins to a LitecoinCash address</source>
- <translation>?????????? ?????? ?? ??????? ??????</translation>
- </message>
- <message>
- @@ -362,8 +362,8 @@
- <translation>?&????????? ????????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>??????????? ??????? ?????, ?? ??????????? ? ?????? ???????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>???????????, ?? ?? ? ????????? ???????????? ?????????? ???? ????? Litecoin-??????? </translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>???????????, ?? ?? ? ????????? ???????????? ?????????? ???? ????? LitecoinCash-??????? </translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>????????? ???????????? ??? ???????????, ?? ???? ????????? ???????? Litecoin-???????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>????????? ???????????? ??? ???????????, ?? ???? ????????? ???????? LitecoinCash-???????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>?????? ???????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>???????? ????? ??????? (??????? QR-??? ?? litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>???????? ????? ??????? (??????? QR-??? ?? litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>???????? ?????? ????? ? ?????, ?? ???? ??????????? ??? ?????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>???????? litecoin: URI ?? ????? ???????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>???????? litecoincash: URI ?? ????? ???????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>?&???????? ?????????? ?????</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ??????? ?'??????? ? ??????? Litecoin</numerusform><numerusform>%n ??????? ?'??????? ? ??????? Litecoin</numerusform><numerusform>%n ???????? ?'?????? ? ??????? Litecoin</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ??????? ?'??????? ? ??????? LitecoinCash</numerusform><numerusform>%n ??????? ?'??????? ? ??????? LitecoinCash</numerusform><numerusform>%n ???????? ?'?????? ? ??????? LitecoinCash</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,7 +478,7 @@
- <translation>??????????????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>???????? ??????? %1 ??? ????????? ???????? ???????? ?????????? ?????????? ?????.</translation>
- </message>
- <message>
- @@ -548,7 +548,7 @@
- <translation><b>????????????</b> ???????? <b>???????????</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- <translation>??????? ???????? ???????. ??????? ?? ??????? ? ????????? ???????. ???????? ???? ???????.</translation>
- </message>
- </context>
- @@ -738,8 +738,8 @@
- <translation>?????????? ?????? ??? ????????????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>??????? ?????? "%1" ?? ? ??????? ? ?????? Litecoin.</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>??????? ?????? "%1" ?? ? ??????? ? ?????? LitecoinCash.</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -878,12 +878,12 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>????????? ?????????? ?? ?? ??????????????, ???? ?????? ?????? ??????? ???? ???? ????????. ?? ?????????? ???? ?????? ????? ????, ?? ??? ???????? ????????? ????????????? ? ??????? litecoin, ??????????? ????????? ?????.</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>????????? ?????????? ?? ?? ??????????????, ???? ?????? ?????? ??????? ???? ???? ????????. ?? ?????????? ???? ?????? ????? ????, ?? ??? ???????? ????????? ????????????? ? ??????? litecoincash, ??????????? ????????? ?????.</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>?????? ?????????? litecoin?, ??? ?? ?? ??????????????, ?? ???? ???????? ???????.</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>?????? ?????????? litecoincash?, ??? ?? ?? ??????????????, ?? ???? ???????? ???????.</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1036,7 +1036,7 @@
- <translation>&????????? ?????????????? ?????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- <translation>??????????? ?????????? ???? ??? ??????? ??????? ?? ???????. ?????? ???? ???? ??? ?????? ????????? UPnP ? ?? ??????? ?????????.</translation>
- </message>
- <message>
- @@ -1044,8 +1044,8 @@
- <translation>???????????? ????? ????? &UPnP</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>??????????? ?? ?????? Litecoin ????? SOCKS5 ??????.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>??????????? ?? ?????? LitecoinCash ????? SOCKS5 ??????.</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1084,8 +1084,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>???????????? ?? ?????? Litecoin ????? ??????? SOCKS5 ?????? ??? ?????????? ???????? Tor.</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>???????????? ?? ?????? LitecoinCash ????? ??????? SOCKS5 ?????? ??? ?????????? ???????? Tor.</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1175,8 +1175,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>???????? ?????????? ??? ???? ???? ??????????. ??? ???????? ???? ??????????? ?????????????? ? ??????? Litecoin ????? ???????????? ???????????, ??? ??? ?????? ?? ?? ?????????.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>???????? ?????????? ??? ???? ???? ??????????. ??? ???????? ???? ??????????? ?????????????? ? ??????? LitecoinCash ????? ???????????? ???????????, ??? ??? ?????? ?? ?? ?????????.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1276,8 +1276,8 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>??????? ?????? Litecoin (????????? %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>??????? ?????? LitecoinCash (????????? %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1632,8 +1632,8 @@
- <translation>??&?????? ??????????? ?????? ??? ????????? (?? ??????????????)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>??????'?????? ???????????? ?? ??????? ?? ?????? ???????, ????? ???? ???????? ??? ??? ????????? ??????. ????????: ?? ???????????? ?? ???? ??????????? ? ???????? ????? ?????? Litecoin.</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>??????'?????? ???????????? ?? ??????? ?? ?????? ???????, ????? ???? ???????? ??? ??? ????????? ??????. ????????: ?? ???????????? ?? ???? ??????????? ? ???????? ????? ?????? LitecoinCash.</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -1849,8 +1849,8 @@
- <translation>?????? ??????????</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- - <translation>?????? ?????? ??????????? ??????? ? ??????????, ?????? ????? ?????????? ? ?????? ???????? ? ??????. ??? ????? ?? ?????, ?? ?? ???? ????????? ??????????, ???? ????? ?? Litecoin ?????????? ????? ???????, ??? ?????? ????? ????????.</translation>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- + <translation>?????? ?????? ??????????? ??????? ? ??????????, ?????? ????? ?????????? ? ?????? ???????? ? ??????. ??? ????? ?? ?????, ?? ?? ???? ????????? ??????????, ???? ????? ?? LitecoinCash ?????????? ????? ???????, ??? ?????? ????? ????????.</translation>
- </message>
- <message>
- <source>(read the tooltip)</source>
- @@ -1968,8 +1968,8 @@
- <translation>?? ????????? ??????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>?????? Litecoin ??? ???????????? ???????</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>?????? LitecoinCash ??? ???????????? ???????</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -1988,7 +1988,7 @@
- <translation>???????? ??? ?????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>??????? ???? ????? ?? ???????? ????. ?? ?????????? ??????? ????? ?????????, ??? ???? ??????? ? ???? ?????????. ???? ? ??????????? ???????? - ??????? ???? ??????????? ??? ????.</translation>
- </message>
- <message>
- @@ -2012,8 +2012,8 @@
- <translation>??????? ????? ??? ???? ?????? ??? ????????? ?? ? ?????? ???????????? ?????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>????????????, ?? ???? ?????? ?? litecoin:URI ?? ???? ????????? ????? ? ??????????? ??? ???????. ????????: ?? ???????????? ?? ???? ??????????? ? ?????? Litecoin.</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>????????????, ?? ???? ?????? ?? litecoincash:URI ?? ???? ????????? ????? ? ??????????? ??? ???????. ????????: ?? ???????????? ?? ???? ??????????? ? ?????? LitecoinCash.</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2053,12 +2053,12 @@
- <translation>&????????? ????????????</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>?? ?????? ??????????? ????????????/????? ?????? ????????, ??? ??????? ?????????? ????????? ?????????, ?? ?????? ????????? ?? ???. ????????????? ??????????? ????-?? ??????? ?? ???????????, ??? ?? ?? ????????? ??????-????? ??? ?????? ?????????? ?????? ? ????? ??? ????????? ?????? ??????? ??? ?????? ???????. ?????????? ???? ????? ??????????, ? ????? ?? ???????? ??????.</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>?????? Litecoin ??? ??????? ????? ????????????</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>?????? LitecoinCash ??? ??????? ????? ????????????</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2089,7 +2089,7 @@
- <translation>????????? ??????? ????????? ?? ?????????? ?????? ??????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>????????? ???????????? ??? ???????, ?? ?? ? ????????? ???? ??????</translation>
- </message>
- <message>
- @@ -2113,12 +2113,12 @@
- <translation>??????? ????? ?????? ??????????, ???????????? (??????????, ?? ?? ????? ?????????? ??????? ?????????? ?????, ?????????, ??????? ????) ?? ?????? ??? ????????? ????????????. ??????????, ?? ? ?????? ?? ???? ?????? ?????? ????????: ?? ???????? ???????? ???? ???? «?????? ??????????». ????????, ?? ?? ???? ????????? ?????????? ????????? ?????????? ????????????, ??? ?? ? ????? ??????????? ??????? ?????? ??????????!</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>?????? Litecoin, ???? ???? ????????? ?? ????????????</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>?????? LitecoinCash, ???? ???? ????????? ?? ????????????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>????????? ???????????? ??? ???????????, ?? ???? ????????? ???????? Litecoin-???????</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>????????? ???????????? ??? ???????????, ?? ???? ????????? ???????? LitecoinCash-???????</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -2654,8 +2654,8 @@
- <translation>????????? ????????? HTTP-??????. ??????????? ???? ???????? ? ??????? ???????????.</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
- diff --git a/src/qt/locale/bitcoin_uz@Cyrl.ts b/src/qt/locale/bitcoin_uz@Cyrl.ts
- index 5e94a15..632fd48 100644
- --- a/src/qt/locale/bitcoin_uz@Cyrl.ts
- +++ b/src/qt/locale/bitcoin_uz@Cyrl.ts
- @@ -146,8 +146,8 @@
- <translation>???????? ??????? ????? ??????????????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>?????????? Litecoin ????????? ???????</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>?????????? LitecoinCash ????????? ???????</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -170,8 +170,8 @@
- <translation>??????? &?????????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -198,12 +198,12 @@
- <translation>???????????? ??????? ?????? ?????????? ??????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Litecoin ?????????? ????? ????? ?????????????? ???????? ???? ???????? ?????</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>LitecoinCash ?????????? ????? ????? ?????????????? ???????? ???? ???????? ?????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>?????????? ?????? Litecoin ?????????????? ????? ????????????? ????? ????? ????? ???? ?????? ??????????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>?????????? ?????? LitecoinCash ?????????????? ????? ????????????? ????? ????? ????? ???? ?????? ??????????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -222,8 +222,8 @@
- <translation>???? ??????? ???????? ??????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>???????? (QR ??????? ?? litecoin ???????? ?????????: URI????) ?????</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>???????? (QR ??????? ?? litecoincash ???????? ?????????: URI????) ?????</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -234,16 +234,16 @@
- <translation>????????????? ????? ???????? ????????? ?? ???????? ????????? ????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>Litecoin??? ????: URI ??? ????? ??????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>LitecoinCash??? ????: URI ??? ????? ??????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>&????????? ????? ???????????</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ?? Litecoin ????????? ???? ?????? ??????</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ?? LitecoinCash ????????? ???? ?????? ??????</numerusform></translation>
- </message>
- <message>
- <source>%1 behind</source>
- @@ -601,8 +601,8 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>??????????? ???????? ???????? ?????? ??????. ?????????? ????? ????????????? ???? Litecoin ?????? ????? ????????? ?????? ?????????????, ???? ?????? ???????? ????????????.</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>??????????? ???????? ???????? ?????? ??????. ?????????? ????? ????????????? ???? LitecoinCash ?????? ????? ????????? ?????? ?????????????, ???? ?????? ???????? ????????????.</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -682,8 +682,8 @@
- <translation>???????</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>Litecoin ????????? ???????? (???????. %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>LitecoinCash ????????? ???????? (???????. %1)</translation>
- </message>
- <message>
- <source>%1 m</source>
- @@ -1208,8 +1208,8 @@
- <translation>????? ???????? ???? ????? ???? ???????? ?? ??????????? ???? ??????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>Connection options:</source>
- diff --git a/src/qt/locale/bitcoin_vi_VN.ts b/src/qt/locale/bitcoin_vi_VN.ts
- index 433f885..a2693fe 100644
- --- a/src/qt/locale/bitcoin_vi_VN.ts
- +++ b/src/qt/locale/bitcoin_vi_VN.ts
- @@ -186,8 +186,8 @@
- <translation>?ánh ch? s? (indexing) l?i các kh?i (blocks) trên ? ??a ...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>G?i coins ??n tài kho?n Litecoin</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>G?i coins ??n tài kho?n LitecoinCash</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -206,8 +206,8 @@
- <translation>&Tin nh?n xác th?c</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -234,12 +234,12 @@
- <translation>Mã hoá các khoá bí m?t trong Ví c?a b?n.</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>Dùng ??a ch? Litecoin c?a b?n ký các tin nh?n ?? xác minh nh?ng n?i dung tin nh?n ?ó là c?a b?n.</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>Dùng ??a ch? LitecoinCash c?a b?n ký các tin nh?n ?? xác minh nh?ng n?i dung tin nh?n ?ó là c?a b?n.</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>Ki?m tra các tin nh?n ?? ch?c ch?n r?ng chúng ???c ký b?ng các ??a ch? Litecoin xác ??nh.</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>Ki?m tra các tin nh?n ?? ch?c ch?n r?ng chúng ???c ký b?ng các ??a ch? LitecoinCash xác ??nh.</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -258,8 +258,8 @@
- <translation>Thanh công c? (toolbar)</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>Yêu c?u thanh toán(t?o mã QR và ??a ch? Litecoin: URLs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>Yêu c?u thanh toán(t?o mã QR và ??a ch? LitecoinCash: URLs)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -270,8 +270,8 @@
- <translation>Hi?n th? danh sách các ??a ch? và nhãn ?ã dùng ?? nh?n.</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>M? litecoin:URL ho?c yêu c?u thanh toán</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>M? litecoincash:URL ho?c yêu c?u thanh toán</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- @@ -536,8 +536,8 @@
- <translation>Ví</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>K?t n?i ??n máy ch? Litecoin thông qua SOCKS5 proxy.</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>K?t n?i ??n máy ch? LitecoinCash thông qua SOCKS5 proxy.</translation>
- </message>
- <message>
- <source>Proxy &IP:</source>
- @@ -1018,8 +1018,8 @@
- <translation>L?a ch?n:</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>(default: %u)</source>
- diff --git a/src/qt/locale/bitcoin_zh.ts b/src/qt/locale/bitcoin_zh.ts
- index 720dd0c..d658d02 100644
- --- a/src/qt/locale/bitcoin_zh.ts
- +++ b/src/qt/locale/bitcoin_zh.ts
- @@ -107,7 +107,7 @@
- <translation>??????%1</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- + <source>Warning: Invalid LitecoinCash address</source>
- <translation>??????????</translation>
- </message>
- </context>
- diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts
- index 305aaf1..e876785 100644
- --- a/src/qt/locale/bitcoin_zh_CN.ts
- +++ b/src/qt/locale/bitcoin_zh_CN.ts
- @@ -62,11 +62,11 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- <translation>???????????????????????????????????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- <translation>????????????????????????????????????</translation>
- </message>
- <message>
- @@ -168,7 +168,7 @@
- <translation>??????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- <translation>??: ???????????????????<b>???????????</b>?</translation>
- </message>
- <message>
- @@ -180,7 +180,7 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 ????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -338,7 +338,7 @@
- <translation>??????????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- + <source>Send coins to a LitecoinCash address</source>
- <translation>?????????????</translation>
- </message>
- <message>
- @@ -362,7 +362,7 @@
- <translation>????(&V)...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- + <source>LitecoinCash</source>
- <translation>???</translation>
- </message>
- <message>
- @@ -390,11 +390,11 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- <translation>??????????????????????????????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- <translation>??????????????????????????</translation>
- </message>
- <message>
- @@ -414,8 +414,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>???? (?????? litecoin: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>???? (?????? litecoincash: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,15 +426,15 @@
- <translation>???????????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>???? litecoin: URI ?????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>???? litecoincash: URI ?????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>?????(&C)</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- + <source>%n active connection(s) to LitecoinCash network</source>
- <translation><numerusform>%n ????????????</numerusform></translation>
- </message>
- <message>
- @@ -478,7 +478,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>?? %1 ????????????????</translation>
- </message>
- <message>
- @@ -548,7 +548,7 @@
- <translation>????<b>??</b>????<b>??</b>??</translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- <translation>?????????????????????????</translation>
- </message>
- </context>
- @@ -742,7 +742,7 @@
- <translation>??????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- <translation>????? %1 ????????????</translation>
- </message>
- <message>
- @@ -852,7 +852,7 @@
- <translation>??????????????????%1?????????</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- <translation>%1 ????????????????????? %2GB ??????????????????????????????????????</translation>
- </message>
- <message>
- @@ -887,11 +887,11 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- <translation>???????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- <translation>???????????????????????</translation>
- </message>
- <message>
- @@ -1049,7 +1049,7 @@
- <translation>?????????(&S)</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- <translation>?????????????????????????? UPnP ??????????</translation>
- </message>
- <message>
- @@ -1057,7 +1057,7 @@
- <translation>?? &UPnP ????</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- <translation>?? SOCKS5 ??????????</translation>
- </message>
- <message>
- @@ -1097,7 +1097,7 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- <translation>? Tor ?????????? SOCKS5 ?????????</translation>
- </message>
- <message>
- @@ -1196,7 +1196,7 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- <translation>????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -1271,8 +1271,8 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>???? litecoin ????
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>???? litecoincash ????
- ????????</translation>
- </message>
- <message>
- @@ -1288,7 +1288,7 @@
- <translation>??????? %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- <translation>???? URI ?????????????????? URI ???????</translation>
- </message>
- <message>
- @@ -1382,7 +1382,7 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- <translation>?????????? (?? %1)</translation>
- </message>
- <message>
- @@ -1802,7 +1802,7 @@
- <translation>??????????????</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- <translation>?????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -2035,7 +2035,7 @@
- <translation>??? </translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>???????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -2199,7 +2199,7 @@
- <translation><numerusform>?? %n ?????????</numerusform></translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- + <source>Warning: Invalid LitecoinCash address</source>
- <translation>??: ???????</translation>
- </message>
- <message>
- @@ -2238,7 +2238,7 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- + <source>The LitecoinCash address to send the payment to</source>
- <translation>??????</translation>
- </message>
- <message>
- @@ -2258,7 +2258,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- <translation>?????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -2282,8 +2282,8 @@
- <translation>???????????????????????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>litecoin:URI ????????????????????? ??????????????????</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>litecoincash:URI ????????????????????? ??????????????????</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2327,11 +2327,11 @@
- <translation>????(&S)</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>???????????/???????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- + <source>The LitecoinCash address to sign the message with</source>
- <translation>?????????? </translation>
- </message>
- <message>
- @@ -2363,7 +2363,7 @@
- <translation>??????????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- <translation>???????????????</translation>
- </message>
- <message>
- @@ -2387,11 +2387,11 @@
- <translation>??????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- + <source>The LitecoinCash address the message was signed with</source>
- <translation>?????????</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- <translation>????????????????????????</translation>
- </message>
- <message>
- @@ -3045,8 +3045,8 @@
- <translation>????HTTP?????????????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/locale/bitcoin_zh_HK.ts b/src/qt/locale/bitcoin_zh_HK.ts
- index e953496..cc5e8df 100644
- --- a/src/qt/locale/bitcoin_zh_HK.ts
- +++ b/src/qt/locale/bitcoin_zh_HK.ts
- @@ -156,8 +156,8 @@
- <translation>??????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>??: ??????????????????<b>???? Litecoin ?</b>?</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>??: ??????????????????<b>???? LitecoinCash ?</b>?</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -168,8 +168,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- - <translation>%1 ????????????????????????????? Litecoins ??????????????</translation>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- + <translation>%1 ????????????????????????????? LCC ??????????????</translation>
- </message>
- <message>
- <source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
- @@ -310,8 +310,8 @@
- <translation>???????????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>????? Litecoin ??</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>????? LitecoinCash ??</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -334,8 +334,8 @@
- <translation>????... &V</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -370,8 +370,8 @@
- <translation>?? &H</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>???? (??QR? litecoin: URIs)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>???? (??QR? litecoincash: URIs)</translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -440,8 +440,8 @@
- <context>
- <name>QObject</name>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>???? Litecoin ?? (?? %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>???? LitecoinCash ?? (?? %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts
- index 8e5059b..9ff39ad 100644
- --- a/src/qt/locale/bitcoin_zh_TW.ts
- +++ b/src/qt/locale/bitcoin_zh_TW.ts
- @@ -62,12 +62,12 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- - <translation>?????????? Litecoin ??????????????????????????</translation>
- + <source>These are your LitecoinCash addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
- + <translation>?????????? LitecoinCash ??????????????????????????</translation>
- </message>
- <message>
- - <source>These are your Litecoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- - <translation>????????? Litecoin ????????????????????????</translation>
- + <source>These are your LitecoinCash addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
- + <translation>????????? LitecoinCash ????????????????????????</translation>
- </message>
- <message>
- <source>&Copy Address</source>
- @@ -168,8 +168,8 @@
- <translation>??????</translation>
- </message>
- <message>
- - <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LITECOINS</b>!</source>
- - <translation>??: ???????????????????<b>??????? Litecoin ?</b>?</translation>
- + <source>Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR LCC</b>!</source>
- + <translation>??: ???????????????????<b>??????? LitecoinCash ?</b>?</translation>
- </message>
- <message>
- <source>Are you sure you wish to encrypt your wallet?</source>
- @@ -180,7 +180,7 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your litecoins from being stolen by malware infecting your computer.</source>
- + <source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer.</source>
- <translation>%1 ????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -338,8 +338,8 @@
- <translation>?????????????...</translation>
- </message>
- <message>
- - <source>Send coins to a Litecoin address</source>
- - <translation>????? Litecoin ??</translation>
- + <source>Send coins to a LitecoinCash address</source>
- + <translation>????? LitecoinCash ??</translation>
- </message>
- <message>
- <source>Backup wallet to another location</source>
- @@ -362,8 +362,8 @@
- <translation>????...</translation>
- </message>
- <message>
- - <source>Litecoin</source>
- - <translation>Litecoin</translation>
- + <source>LitecoinCash</source>
- + <translation>LitecoinCash</translation>
- </message>
- <message>
- <source>Wallet</source>
- @@ -390,12 +390,12 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>Sign messages with your Litecoin addresses to prove you own them</source>
- - <translation>? Litecoin ??????????????</translation>
- + <source>Sign messages with your LitecoinCash addresses to prove you own them</source>
- + <translation>? LitecoinCash ??????????????</translation>
- </message>
- <message>
- - <source>Verify messages to ensure they were signed with specified Litecoin addresses</source>
- - <translation>???????????????? Litecoin ?????</translation>
- + <source>Verify messages to ensure they were signed with specified LitecoinCash addresses</source>
- + <translation>???????????????? LitecoinCash ?????</translation>
- </message>
- <message>
- <source>&File</source>
- @@ -414,8 +414,8 @@
- <translation>?????</translation>
- </message>
- <message>
- - <source>Request payments (generates QR codes and litecoin: URIs)</source>
- - <translation>????(?? QR Code ? litecoin ??????????: URI)</translation>
- + <source>Request payments (generates QR codes and litecoincash: URIs)</source>
- + <translation>????(?? QR Code ? litecoincash ??????????: URI)</translation>
- </message>
- <message>
- <source>Show the list of used sending addresses and labels</source>
- @@ -426,16 +426,16 @@
- <translation>?????????????????</translation>
- </message>
- <message>
- - <source>Open a litecoin: URI or payment request</source>
- - <translation>?? litecoin ????????(URI)?????</translation>
- + <source>Open a litecoincash: URI or payment request</source>
- + <translation>?? litecoincash ????????(URI)?????</translation>
- </message>
- <message>
- <source>&Command-line options</source>
- <translation>?????</translation>
- </message>
- <message numerus="yes">
- - <source>%n active connection(s) to Litecoin network</source>
- - <translation><numerusform>%n ????? Litecoin ????</numerusform></translation>
- + <source>%n active connection(s) to LitecoinCash network</source>
- + <translation><numerusform>%n ????? LitecoinCash ????</numerusform></translation>
- </message>
- <message>
- <source>Indexing blocks on disk...</source>
- @@ -478,7 +478,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Show the %1 help message to get a list with possible Litecoin command-line options</source>
- + <source>Show the %1 help message to get a list with possible LitecoinCash command-line options</source>
- <translation>?? %1 ???????????????????</translation>
- </message>
- <message>
- @@ -548,8 +548,8 @@
- <translation>??<b>???</b>??<b>???</b></translation>
- </message>
- <message>
- - <source>A fatal error occurred. Litecoin can no longer continue safely and will quit.</source>
- - <translation>?????????Litecoin ??????????????????</translation>
- + <source>A fatal error occurred. LitecoinCash can no longer continue safely and will quit.</source>
- + <translation>?????????LitecoinCash ??????????????????</translation>
- </message>
- </context>
- <context>
- @@ -742,8 +742,8 @@
- <translation>??????</translation>
- </message>
- <message>
- - <source>The entered address "%1" is not a valid Litecoin address.</source>
- - <translation>????? %1 ?????? Litecoin ???</translation>
- + <source>The entered address "%1" is not a valid LitecoinCash address.</source>
- + <translation>????? %1 ?????? LitecoinCash ???</translation>
- </message>
- <message>
- <source>The entered address "%1" is already in the address book.</source>
- @@ -851,8 +851,8 @@
- <translation>????????????????? %1 ????????</translation>
- </message>
- <message>
- - <source>%1 will download and store a copy of the Litecoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- - <translation>%1 ???????? Litecoin ?????????? %2GB ??????????????????????????????????????</translation>
- + <source>%1 will download and store a copy of the LitecoinCash block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
- + <translation>%1 ???????? LitecoinCash ?????????? %2GB ??????????????????????????????????????</translation>
- </message>
- <message>
- <source>Use the default data directory</source>
- @@ -886,12 +886,12 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoin network, as detailed below.</source>
- - <translation>???????????????????????????????? litecoin ????????????????????????</translation>
- + <source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the litecoincash network, as detailed below.</source>
- + <translation>???????????????????????????????? litecoincash ????????????????????????</translation>
- </message>
- <message>
- - <source>Attempting to spend litecoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- - <translation>???????????????? litecoin ???????????</translation>
- + <source>Attempting to spend coins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
- + <translation>???????????????? litecoincash ???????????</translation>
- </message>
- <message>
- <source>Number of blocks left</source>
- @@ -1048,16 +1048,16 @@
- <translation>??????????</translation>
- </message>
- <message>
- - <source>Automatically open the Litecoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- - <translation>????????? Litecoin ???????????????????????????????(UPnP)??????</translation>
- + <source>Automatically open the LitecoinCash client port on the router. This only works when your router supports UPnP and it is enabled.</source>
- + <translation>????????? LitecoinCash ???????????????????????????????(UPnP)??????</translation>
- </message>
- <message>
- <source>Map port using &UPnP</source>
- <translation>? &UPnP ???????</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a SOCKS5 proxy.</source>
- - <translation>?? SOCKS5 ????????? Litecoin ???</translation>
- + <source>Connect to the LitecoinCash network through a SOCKS5 proxy.</source>
- + <translation>?? SOCKS5 ????????? LitecoinCash ???</translation>
- </message>
- <message>
- <source>&Connect through SOCKS5 proxy (default proxy):</source>
- @@ -1096,8 +1096,8 @@
- <translation>Tor</translation>
- </message>
- <message>
- - <source>Connect to the Litecoin network through a separate SOCKS5 proxy for Tor hidden services.</source>
- - <translation>????? SOCKS5 ????????? Litecoin ???? Tor ?????</translation>
- + <source>Connect to the LitecoinCash network through a separate SOCKS5 proxy for Tor hidden services.</source>
- + <translation>????? SOCKS5 ????????? LitecoinCash ???? Tor ?????</translation>
- </message>
- <message>
- <source>Use separate SOCKS5 proxy to reach peers via Tor hidden services:</source>
- @@ -1195,8 +1195,8 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>The displayed information may be out of date. Your wallet automatically synchronizes with the Litecoin network after a connection is established, but this process has not completed yet.</source>
- - <translation>????????????? Litecoin ?????????????????????????????????</translation>
- + <source>The displayed information may be out of date. Your wallet automatically synchronizes with the LitecoinCash network after a connection is established, but this process has not completed yet.</source>
- + <translation>????????????? LitecoinCash ?????????????????????????????????</translation>
- </message>
- <message>
- <source>Watch-only:</source>
- @@ -1270,8 +1270,8 @@
- <translation>?????????</translation>
- </message>
- <message>
- - <source>Cannot start litecoin: click-to-pay handler</source>
- - <translation>????? litecoin ???????????</translation>
- + <source>Cannot start litecoincash: click-to-pay handler</source>
- + <translation>????? litecoincash ???????????</translation>
- </message>
- <message>
- <source>URI handling</source>
- @@ -1286,8 +1286,8 @@
- <translation>??????? %1</translation>
- </message>
- <message>
- - <source>URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters.</source>
- - <translation>????? URI ???????? Litecoin ??????? URI ???????</translation>
- + <source>URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters.</source>
- + <translation>????? URI ???????? LitecoinCash ??????? URI ???????</translation>
- </message>
- <message>
- <source>Payment request file handling</source>
- @@ -1380,8 +1380,8 @@
- <translation>??</translation>
- </message>
- <message>
- - <source>Enter a Litecoin address (e.g. %1)</source>
- - <translation>?? Litecoin ?? (??? %1)</translation>
- + <source>Enter a LitecoinCash address (e.g. %1)</source>
- + <translation>?? LitecoinCash ?? (??? %1)</translation>
- </message>
- <message>
- <source>%1 d</source>
- @@ -1804,8 +1804,8 @@
- <translation>???????????(???)</translation>
- </message>
- <message>
- - <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Litecoin network.</source>
- - <translation>??????????????????????????????: ???????????? Litecoin ????</translation>
- + <source>An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the LitecoinCash network.</source>
- + <translation>??????????????????????????????: ???????????? LitecoinCash ????</translation>
- </message>
- <message>
- <source>An optional label to associate with the new receiving address.</source>
- @@ -2037,7 +2037,7 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoin transactions than the network can process.</source>
- + <source>Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for litecoincash transactions than the network can process.</source>
- <translation>???????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- @@ -2197,8 +2197,8 @@
- <translation>???????? %1</translation>
- </message>
- <message>
- - <source>Warning: Invalid Litecoin address</source>
- - <translation>??: Litecoin ????</translation>
- + <source>Warning: Invalid LitecoinCash address</source>
- + <translation>??: LitecoinCash ????</translation>
- </message>
- <message>
- <source>Warning: Unknown change address</source>
- @@ -2240,8 +2240,8 @@
- <translation>??????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to send the payment to</source>
- - <translation>????? Litecoin ??</translation>
- + <source>The LitecoinCash address to send the payment to</source>
- + <translation>????? LitecoinCash ??</translation>
- </message>
- <message>
- <source>Alt+A</source>
- @@ -2260,8 +2260,8 @@
- <translation>??????</translation>
- </message>
- <message>
- - <source>The fee will be deducted from the amount being sent. The recipient will receive less litecoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- - <translation>??????????????????????????????????? litecoin????????????????????????</translation>
- + <source>The fee will be deducted from the amount being sent. The recipient will receive less coins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
- + <translation>??????????????????????????????????? litecoincash????????????????????????</translation>
- </message>
- <message>
- <source>S&ubtract fee from amount</source>
- @@ -2284,8 +2284,8 @@
- <translation>???????????????????????????</translation>
- </message>
- <message>
- - <source>A message that was attached to the litecoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Litecoin network.</source>
- - <translation>??? Litecoin ??????????(URI)???????????????????????????: ???????? Litecoin ????</translation>
- + <source>A message that was attached to the litecoincash: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the LitecoinCash network.</source>
- + <translation>??? LitecoinCash ??????????(URI)???????????????????????????: ???????? LitecoinCash ????</translation>
- </message>
- <message>
- <source>Pay To:</source>
- @@ -2329,12 +2329,12 @@
- <translation>????</translation>
- </message>
- <message>
- - <source>You can sign messages/agreements with your addresses to prove you can receive litecoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- + <source>You can sign messages/agreements with your addresses to prove you can receive coins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
- <translation>??????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address to sign the message with</source>
- - <translation>??????? Litecoin ??</translation>
- + <source>The LitecoinCash address to sign the message with</source>
- + <translation>??????? LitecoinCash ??</translation>
- </message>
- <message>
- <source>Choose previously used address</source>
- @@ -2365,8 +2365,8 @@
- <translation>?????????????</translation>
- </message>
- <message>
- - <source>Sign the message to prove you own this Litecoin address</source>
- - <translation>??????????? Litecoin ?????</translation>
- + <source>Sign the message to prove you own this LitecoinCash address</source>
- + <translation>??????????? LitecoinCash ?????</translation>
- </message>
- <message>
- <source>Sign &Message</source>
- @@ -2389,12 +2389,12 @@
- <translation>???????????????(????????????????????????)????????????????????????????????????????????????????????????????????????????????????????????????????</translation>
- </message>
- <message>
- - <source>The Litecoin address the message was signed with</source>
- - <translation>??????? Litecoin ??</translation>
- + <source>The LitecoinCash address the message was signed with</source>
- + <translation>??????? LitecoinCash ??</translation>
- </message>
- <message>
- - <source>Verify the message to ensure it was signed with the specified Litecoin address</source>
- - <translation>?????????????? Litecoin ?????</translation>
- + <source>Verify the message to ensure it was signed with the specified LitecoinCash address</source>
- + <translation>?????????????? LitecoinCash ?????</translation>
- </message>
- <message>
- <source>Verify &Message</source>
- @@ -3055,8 +3055,8 @@
- <translation>???? HTTP ?????????????</translation>
- </message>
- <message>
- - <source>Litecoin Core</source>
- - <translation>Litecoin Core</translation>
- + <source>LitecoinCash Core</source>
- + <translation>LitecoinCash Core</translation>
- </message>
- <message>
- <source>The %s developers</source>
- diff --git a/src/qt/macnotificationhandler.mm b/src/qt/macnotificationhandler.mm
- index baa2d5b..b648751 100644
- --- a/src/qt/macnotificationhandler.mm
- +++ b/src/qt/macnotificationhandler.mm
- @@ -13,7 +13,7 @@
- - (NSString *)__bundleIdentifier
- {
- if (self == [NSBundle mainBundle]) {
- - return @"org.litecoin.Litecoin-Qt";
- + return @"org.litecoincash.LitecoinCash-Qt";
- } else {
- return [self __bundleIdentifier];
- }
- diff --git a/src/qt/modaloverlay.cpp b/src/qt/modaloverlay.cpp
- index 4f357e2..a83f285 100644
- --- a/src/qt/modaloverlay.cpp
- +++ b/src/qt/modaloverlay.cpp
- @@ -99,18 +99,15 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
- progressDelta = progressStart-sample.second;
- timeDelta = blockProcessTime[0].first - sample.first;
- progressPerHour = progressDelta/(double)timeDelta*1000*3600;
- - remainingMSecs = (progressDelta > 0) ? remainingProgress / progressDelta * timeDelta : -1;
- + remainingMSecs = remainingProgress / progressDelta * timeDelta;
- break;
- }
- }
- // show progress increase per hour
- ui->progressIncreasePerH->setText(QString::number(progressPerHour*100, 'f', 2)+"%");
- - if(remainingMSecs >= 0) {
- - ui->expectedTimeLeft->setText(GUIUtil::formatNiceTimeOffset(remainingMSecs / 1000.0));
- - } else {
- - ui->expectedTimeLeft->setText(QObject::tr("unknown"));
- - }
- + // show expected remaining time
- + ui->expectedTimeLeft->setText(GUIUtil::formatNiceTimeOffset(remainingMSecs/1000.0));
- static const int MAX_SAMPLES = 5000;
- if (blockProcessTime.count() > MAX_SAMPLES)
- @@ -172,4 +169,4 @@ void ModalOverlay::closeClicked()
- {
- showHide(true);
- userClosed = true;
- -}
- \ No newline at end of file
- +}
- diff --git a/src/qt/networkstyle.cpp b/src/qt/networkstyle.cpp
- index 5ae272e..c6e8d36 100644
- --- a/src/qt/networkstyle.cpp
- +++ b/src/qt/networkstyle.cpp
- @@ -31,7 +31,7 @@ NetworkStyle::NetworkStyle(const QString &_appName, const int iconColorHueShift,
- if (std::char_traits<char>::length(_titleAddText) == 0) {
- pixmap.load(":/icons/bitcoin");
- } else {
- - pixmap.load(":/icons/litecoin_splash");
- + pixmap.load(":/icons/litecoincash_splash");
- }
- if(iconColorHueShift != 0 && iconColorSaturationReduction != 0)
- diff --git a/src/qt/openuridialog.cpp b/src/qt/openuridialog.cpp
- index 520c8f5..00475d2 100644
- --- a/src/qt/openuridialog.cpp
- +++ b/src/qt/openuridialog.cpp
- @@ -16,7 +16,7 @@ OpenURIDialog::OpenURIDialog(QWidget *parent) :
- {
- ui->setupUi(this);
- #if QT_VERSION >= 0x040700
- - ui->uriEdit->setPlaceholderText("litecoin:");
- + ui->uriEdit->setPlaceholderText("litecoincash:");
- #endif
- }
- @@ -48,5 +48,5 @@ void OpenURIDialog::on_selectFileButton_clicked()
- if(filename.isEmpty())
- return;
- QUrl fileUri = QUrl::fromLocalFile(filename);
- - ui->uriEdit->setText("litecoin:?r=" + QUrl::toPercentEncoding(fileUri.toString()));
- + ui->uriEdit->setText("litecoincash:?r=" + QUrl::toPercentEncoding(fileUri.toString()));
- }
- diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
- index 550884e..b80b654 100644
- --- a/src/qt/optionsdialog.cpp
- +++ b/src/qt/optionsdialog.cpp
- @@ -80,8 +80,6 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
- ui->bitcoinAtStartup->setToolTip(ui->bitcoinAtStartup->toolTip().arg(tr(PACKAGE_NAME)));
- ui->bitcoinAtStartup->setText(ui->bitcoinAtStartup->text().arg(tr(PACKAGE_NAME)));
- - ui->openBitcoinConfButton->setToolTip(ui->openBitcoinConfButton->toolTip().arg(tr(PACKAGE_NAME)));
- -
- ui->lang->setToolTip(ui->lang->toolTip().arg(tr(PACKAGE_NAME)));
- ui->lang->addItem(QString("(") + tr("default") + QString(")"), QVariant(""));
- for (const QString &langStr : translations.entryList())
- diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
- index a2dd52d..77efef3 100644
- --- a/src/qt/optionsmodel.cpp
- +++ b/src/qt/optionsmodel.cpp
- @@ -151,32 +151,10 @@ void OptionsModel::Init(bool resetSettings)
- language = settings.value("language").toString();
- }
- -/** Helper function to copy contents from one QSettings to another.
- - * By using allKeys this also covers nested settings in a hierarchy.
- - */
- -static void CopySettings(QSettings& dst, const QSettings& src)
- -{
- - for (const QString& key : src.allKeys()) {
- - dst.setValue(key, src.value(key));
- - }
- -}
- -
- -/** Back up a QSettings to an ini-formatted file. */
- -static void BackupSettings(const fs::path& filename, const QSettings& src)
- -{
- - qWarning() << "Backing up GUI settings to" << GUIUtil::boostPathToQString(filename);
- - QSettings dst(GUIUtil::boostPathToQString(filename), QSettings::IniFormat);
- - dst.clear();
- - CopySettings(dst, src);
- -}
- -
- void OptionsModel::Reset()
- {
- QSettings settings;
- - // Backup old settings to chain-specific datadir for troubleshooting
- - BackupSettings(GetDataDir(true) / "guisettings.ini.bak", settings);
- -
- // Save the strDataDir setting
- QString dataDir = Intro::getDefaultDataDirectory();
- dataDir = settings.value("strDataDir", dataDir).toString();
- diff --git a/src/qt/paymentrequest.proto b/src/qt/paymentrequest.proto
- index 0017443..d1d1d4b 100644
- --- a/src/qt/paymentrequest.proto
- +++ b/src/qt/paymentrequest.proto
- @@ -9,7 +9,7 @@
- syntax = "proto2";
- package payments;
- -option java_package = "org.litecoin.protocols.payments";
- +option java_package = "org.litecoincash.protocols.payments";
- option java_outer_classname = "Protos";
- // Generalized form of "send payment to this/these bitcoin addresses"
- diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp
- index c2b4a51..7bec8b3 100644
- --- a/src/qt/paymentserver.cpp
- +++ b/src/qt/paymentserver.cpp
- @@ -47,14 +47,14 @@
- #endif
- const int BITCOIN_IPC_CONNECT_TIMEOUT = 1000; // milliseconds
- -const QString BITCOIN_IPC_PREFIX("litecoin:");
- +const QString BITCOIN_IPC_PREFIX("litecoincash:");
- // BIP70 payment protocol messages
- const char* BIP70_MESSAGE_PAYMENTACK = "PaymentACK";
- const char* BIP70_MESSAGE_PAYMENTREQUEST = "PaymentRequest";
- // BIP71 payment protocol media types
- -const char* BIP71_MIMETYPE_PAYMENT = "application/litecoin-payment";
- -const char* BIP71_MIMETYPE_PAYMENTACK = "application/litecoin-paymentack";
- -const char* BIP71_MIMETYPE_PAYMENTREQUEST = "application/litecoin-paymentrequest";
- +const char* BIP71_MIMETYPE_PAYMENT = "application/litecoincash-payment";
- +const char* BIP71_MIMETYPE_PAYMENTACK = "application/litecoincash-paymentack";
- +const char* BIP71_MIMETYPE_PAYMENTREQUEST = "application/litecoincash-paymentrequest";
- struct X509StoreDeleter {
- void operator()(X509_STORE* b) {
- @@ -78,7 +78,7 @@ namespace // Anon namespace
- //
- static QString ipcServerName()
- {
- - QString name("LitecoinQt");
- + QString name("LitecoinCashQt");
- // Append a simple hash of the datadir
- // Note that GetDataDir(true) returns a different path
- @@ -326,7 +326,7 @@ PaymentServer::PaymentServer(QObject* parent, bool startLocalServer) :
- if (!uriServer->listen(name)) {
- // constructor is called early in init, so don't use "Q_EMIT message()" here
- QMessageBox::critical(0, tr("Payment request error"),
- - tr("Cannot start litecoin: click-to-pay handler"));
- + tr("Cannot start litecoincash: click-to-pay handler"));
- }
- else {
- connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection()));
- @@ -451,7 +451,7 @@ void PaymentServer::handleURIOrFile(const QString& s)
- }
- else
- Q_EMIT message(tr("URI handling"),
- - tr("URI cannot be parsed! This can be caused by an invalid Litecoin address or malformed URI parameters."),
- + tr("URI cannot be parsed! This can be caused by an invalid LitecoinCash address or malformed URI parameters."),
- CClientUIInterface::ICON_WARNING);
- return;
- diff --git a/src/qt/res/bitcoin-qt-res.rc b/src/qt/res/bitcoin-qt-res.rc
- index 9f7d0ea..7d37916 100644
- --- a/src/qt/res/bitcoin-qt-res.rc
- +++ b/src/qt/res/bitcoin-qt-res.rc
- @@ -19,13 +19,13 @@ BEGIN
- BEGIN
- BLOCK "040904E4" // U.S. English - multilingual (hex)
- BEGIN
- - VALUE "CompanyName", "Litecoin"
- - VALUE "FileDescription", PACKAGE_NAME " (GUI node for Litecoin)"
- + VALUE "CompanyName", "LitecoinCash"
- + VALUE "FileDescription", PACKAGE_NAME " (GUI node for LitecoinCash)"
- VALUE "FileVersion", VER_FILEVERSION_STR
- - VALUE "InternalName", "litecoin-qt"
- + VALUE "InternalName", "litecoincash-qt"
- VALUE "LegalCopyright", COPYRIGHT_STR
- VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
- - VALUE "OriginalFilename", "litecoin-qt.exe"
- + VALUE "OriginalFilename", "litecoincash-qt.exe"
- VALUE "ProductName", PACKAGE_NAME
- VALUE "ProductVersion", VER_PRODUCTVERSION_STR
- END
- diff --git a/src/qt/res/icons/about.png b/src/qt/res/icons/about.png
- index ae0c260..b802a34 100644
- Binary files a/src/qt/res/icons/about.png and b/src/qt/res/icons/about.png differ
- diff --git a/src/qt/res/icons/bitcoin.icns b/src/qt/res/icons/bitcoin.icns
- index 93644f0..e0c050c 100644
- Binary files a/src/qt/res/icons/bitcoin.icns and b/src/qt/res/icons/bitcoin.icns differ
- diff --git a/src/qt/res/icons/bitcoin.ico b/src/qt/res/icons/bitcoin.ico
- old mode 100755
- new mode 100644
- index 22b5b18..9d02d8d
- Binary files a/src/qt/res/icons/bitcoin.ico and b/src/qt/res/icons/bitcoin.ico differ
- diff --git a/src/qt/res/icons/bitcoin.png b/src/qt/res/icons/bitcoin.png
- old mode 100755
- new mode 100644
- index a638fdf..d44be3e
- Binary files a/src/qt/res/icons/bitcoin.png and b/src/qt/res/icons/bitcoin.png differ
- diff --git a/src/qt/res/icons/bitcoin_testnet.ico b/src/qt/res/icons/bitcoin_testnet.ico
- index 3caf343..1b1fdb3 100644
- Binary files a/src/qt/res/icons/bitcoin_testnet.ico and b/src/qt/res/icons/bitcoin_testnet.ico differ
- diff --git a/src/qt/res/icons/litecoin_splash.png b/src/qt/res/icons/litecoin_splash.png
- deleted file mode 100755
- index 603ac5b..0000000
- Binary files a/src/qt/res/icons/litecoin_splash.png and /dev/null differ
- diff --git a/src/qt/res/icons/litecoincash_splash.png b/src/qt/res/icons/litecoincash_splash.png
- new file mode 100644
- index 0000000..bcc373e
- Binary files /dev/null and b/src/qt/res/icons/litecoincash_splash.png differ
- diff --git a/src/qt/res/movies/makespinner.sh b/src/qt/res/movies/makespinner.sh
- old mode 100755
- new mode 100644
- diff --git a/src/qt/res/src/bitcoin.svg b/src/qt/res/src/bitcoin.svg
- index 14cf0c5..b8c7e19 100644
- --- a/src/qt/res/src/bitcoin.svg
- +++ b/src/qt/res/src/bitcoin.svg
- @@ -1,58 +1,58 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -
- -<!-- Designer: Jonas Schnelli
- - License: MIT
- --->
- -
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1"
- - id="svg2" sodipodi:docname="bitcoin-logo-noshadow.svg" inkscape:version="0.48.2 r9819" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- - xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px"
- - viewBox="-34 -34 580 580" enable-background="new 0 0 1024 1024" xml:space="preserve">
- -
- - <!-- nice shadow with alpha 0.35 -->
- - <filter id="dropShadowAlpha">
- - <feColorMatrix result="matrixOut" in="SourceAlpha" type="saturate"
- - values="0.1" />
- - <feGaussianBlur in="matrixOut" result="blur-out" stdDeviation="6" />
- - <feColorMatrix in="blur-out" result="color-out" type="matrix"
- - values="0 0 0 0 0
- - 0 0 0 0 0
- - 0 0 0 0 0
- - 0 0 0 0.35 0"/>
- - <feBlend in="SourceGraphic" in2="color-out" mode="normal" />
- - </filter>
- -
- - <g>
- - <!-- white background circle for making B not transparent but still keep inner shadows -->
- - <circle cx="255" cy="255" r="200" stroke-width="2" fill="white"/>
- -
- - <radialGradient id="innerBtop" cx="277.4905" cy="196.4412" r="34.3969" gradientUnits="userSpaceOnUse">
- - <stop offset="0" style="stop-color:#F9AA4B"/>
- - <stop offset="1" style="stop-color:#F7931A"/>
- - </radialGradient>
- - <path fill="url(#innerBtop)" filter="url(#dropShadowAlpha)" d="M254.647,174.6l-13.983,56.08c15.855,3.951,64.735,20.071,72.656-11.656
- - C321.568,185.928,270.503,178.552,254.647,174.6z"/>
- -
- - <radialGradient id="innerBbottom" cx="261.9153" cy="284.5671" r="39.8381" gradientUnits="userSpaceOnUse">
- - <stop offset="0" style="stop-color:#F9AA4B"/>
- - <stop offset="1" style="stop-color:#F7931A"/>
- - </radialGradient>
- - <path fill="url(#innerBbottom)" filter="url(#dropShadowAlpha)" d="M233.608,258.984l-15.425,61.832c19.04,4.729,77.769,23.584,86.448-11.296
- - C313.703,273.144,252.647,263.736,233.608,258.984z"/>
- -
- - <radialGradient id="coinShape" cx="256.0276" cy="256.0027" r="255.9878" gradientUnits="userSpaceOnUse">
- - <stop offset="0" style="stop-color:#F9AA4B"/>
- - <stop offset="1" style="stop-color:#F7931A"/>
- - </radialGradient>
- - <path fill="url(#coinShape)" filter="url(#dropShadowAlpha)" d="M317.871,7.656c-137.12-34.192-276.024,49.28-310.2,186.44
- - c-34.208,137.136,49.256,276.048,186.36,310.24c137.16,34.199,276.063-49.265,310.256-186.408
- - C538.479,180.776,455.023,41.848,317.871,7.656z M368.807,219.528c-3.688,24.936-17.512,37.008-35.864,41.24
- - c25.2,13.12,38.024,33.239,25.809,68.12c-15.16,43.319-51.176,46.976-99.072,37.912l-11.624,46.584l-28.088-7l11.472-45.96
- - c-7.279-1.809-14.72-3.729-22.384-5.809l-11.512,46.177l-28.056-7l11.624-46.673c-6.561-1.68-13.225-3.464-20.024-5.168
- - l-36.552-9.111l13.943-32.152c0,0,20.696,5.504,20.416,5.096c7.952,1.969,11.48-3.216,12.872-6.672l18.368-73.64l0.048-0.2
- - l13.104-52.568c0.344-5.968-1.712-13.496-13.088-16.336c0.439-0.296-20.4-5.072-20.4-5.072l7.472-30l38.736,9.673l-0.032,0.144
- - c5.824,1.448,11.824,2.824,17.937,4.216L245.423,89.2l28.072,7l-11.28,45.224c7.536,1.721,15.12,3.456,22.504,5.297l11.2-44.929
- - l28.088,7l-11.504,46.145C347.967,167.152,373.904,185.464,368.807,219.528z"/>
- - </g>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +
- +<!-- Designer: Jonas Schnelli
- + License: MIT
- +-->
- +
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1"
- + id="svg2" sodipodi:docname="bitcoin-logo-noshadow.svg" inkscape:version="0.48.2 r9819" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px"
- + viewBox="-34 -34 580 580" enable-background="new 0 0 1024 1024" xml:space="preserve">
- +
- + <!-- nice shadow with alpha 0.35 -->
- + <filter id="dropShadowAlpha">
- + <feColorMatrix result="matrixOut" in="SourceAlpha" type="saturate"
- + values="0.1" />
- + <feGaussianBlur in="matrixOut" result="blur-out" stdDeviation="6" />
- + <feColorMatrix in="blur-out" result="color-out" type="matrix"
- + values="0 0 0 0 0
- + 0 0 0 0 0
- + 0 0 0 0 0
- + 0 0 0 0.35 0"/>
- + <feBlend in="SourceGraphic" in2="color-out" mode="normal" />
- + </filter>
- +
- + <g>
- + <!-- white background circle for making B not transparent but still keep inner shadows -->
- + <circle cx="255" cy="255" r="200" stroke-width="2" fill="white"/>
- +
- + <radialGradient id="innerBtop" cx="277.4905" cy="196.4412" r="34.3969" gradientUnits="userSpaceOnUse">
- + <stop offset="0" style="stop-color:#F9AA4B"/>
- + <stop offset="1" style="stop-color:#F7931A"/>
- + </radialGradient>
- + <path fill="url(#innerBtop)" filter="url(#dropShadowAlpha)" d="M254.647,174.6l-13.983,56.08c15.855,3.951,64.735,20.071,72.656-11.656
- + C321.568,185.928,270.503,178.552,254.647,174.6z"/>
- +
- + <radialGradient id="innerBbottom" cx="261.9153" cy="284.5671" r="39.8381" gradientUnits="userSpaceOnUse">
- + <stop offset="0" style="stop-color:#F9AA4B"/>
- + <stop offset="1" style="stop-color:#F7931A"/>
- + </radialGradient>
- + <path fill="url(#innerBbottom)" filter="url(#dropShadowAlpha)" d="M233.608,258.984l-15.425,61.832c19.04,4.729,77.769,23.584,86.448-11.296
- + C313.703,273.144,252.647,263.736,233.608,258.984z"/>
- +
- + <radialGradient id="coinShape" cx="256.0276" cy="256.0027" r="255.9878" gradientUnits="userSpaceOnUse">
- + <stop offset="0" style="stop-color:#F9AA4B"/>
- + <stop offset="1" style="stop-color:#F7931A"/>
- + </radialGradient>
- + <path fill="url(#coinShape)" filter="url(#dropShadowAlpha)" d="M317.871,7.656c-137.12-34.192-276.024,49.28-310.2,186.44
- + c-34.208,137.136,49.256,276.048,186.36,310.24c137.16,34.199,276.063-49.265,310.256-186.408
- + C538.479,180.776,455.023,41.848,317.871,7.656z M368.807,219.528c-3.688,24.936-17.512,37.008-35.864,41.24
- + c25.2,13.12,38.024,33.239,25.809,68.12c-15.16,43.319-51.176,46.976-99.072,37.912l-11.624,46.584l-28.088-7l11.472-45.96
- + c-7.279-1.809-14.72-3.729-22.384-5.809l-11.512,46.177l-28.056-7l11.624-46.673c-6.561-1.68-13.225-3.464-20.024-5.168
- + l-36.552-9.111l13.943-32.152c0,0,20.696,5.504,20.416,5.096c7.952,1.969,11.48-3.216,12.872-6.672l18.368-73.64l0.048-0.2
- + l13.104-52.568c0.344-5.968-1.712-13.496-13.088-16.336c0.439-0.296-20.4-5.072-20.4-5.072l7.472-30l38.736,9.673l-0.032,0.144
- + c5.824,1.448,11.824,2.824,17.937,4.216L245.423,89.2l28.072,7l-11.28,45.224c7.536,1.721,15.12,3.456,22.504,5.297l11.2-44.929
- + l28.088,7l-11.504,46.145C347.967,167.152,373.904,185.464,368.807,219.528z"/>
- + </g>
- +</svg>
- diff --git a/src/qt/res/src/clock_0.svg b/src/qt/res/src/clock_0.svg
- index 2a4ae02..b9904d7 100644
- --- a/src/qt/res/src/clock_0.svg
- +++ b/src/qt/res/src/clock_0.svg
- @@ -1,14 +1,14 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- -<g>
- - <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- - s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- - c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- - c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- -</g>
- -<path fill="#000000" d="M293.5,452.6h99.6c14.9,0,24.8-9.9,24.8-24.8S408,403,393.1,403h-74.8V278.2c0-14.9-9.9-24.8-24.8-24.8
- - c-14.9,0-24.8,9.9-24.8,24.8v149.6C268.7,440.2,278.7,452.6,293.5,452.6z"/>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- +<g>
- + <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- + s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- + c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- + c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- +</g>
- +<path fill="#000000" d="M293.5,452.6h99.6c14.9,0,24.8-9.9,24.8-24.8S408,403,393.1,403h-74.8V278.2c0-14.9-9.9-24.8-24.8-24.8
- + c-14.9,0-24.8,9.9-24.8,24.8v149.6C268.7,440.2,278.7,452.6,293.5,452.6z"/>
- +</svg>
- diff --git a/src/qt/res/src/clock_1.svg b/src/qt/res/src/clock_1.svg
- index 2a3d84c..23c1fae 100644
- --- a/src/qt/res/src/clock_1.svg
- +++ b/src/qt/res/src/clock_1.svg
- @@ -1,15 +1,15 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- -<g>
- - <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- - s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- - c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- - c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- -</g>
- -<path
- - d="M 478.3,253.4 297.6,184.6 c 0,0 0,78.8 0,118.2 0,117.5 -0.4,118.1 118.2,118.1 39.4,0 118.2,0 118.2,0 z"
- - id="polygon7" />
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- +<g>
- + <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- + s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- + c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- + c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- +</g>
- +<path
- + d="M 478.3,253.4 297.6,184.6 c 0,0 0,78.8 0,118.2 0,117.5 -0.4,118.1 118.2,118.1 39.4,0 118.2,0 118.2,0 z"
- + id="polygon7" />
- +</svg>
- diff --git a/src/qt/res/src/clock_2.svg b/src/qt/res/src/clock_2.svg
- index 2de8d46..36a41e2 100644
- --- a/src/qt/res/src/clock_2.svg
- +++ b/src/qt/res/src/clock_2.svg
- @@ -1,13 +1,13 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- -<g>
- - <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- - s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- - c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- - c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- -</g>
- -<polygon points="465.2,601.6 534,420.9 478.3,253.4 297.6,184.6 297.6,420.9 297.6,657.3 "/>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- +<g>
- + <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- + s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- + c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- + c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- +</g>
- +<polygon points="465.2,601.6 534,420.9 478.3,253.4 297.6,184.6 297.6,420.9 297.6,657.3 "/>
- +</svg>
- diff --git a/src/qt/res/src/clock_3.svg b/src/qt/res/src/clock_3.svg
- index b691043..df2fead 100644
- --- a/src/qt/res/src/clock_3.svg
- +++ b/src/qt/res/src/clock_3.svg
- @@ -1,15 +1,15 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- -<g>
- - <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- - s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- - c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- - c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- -</g>
- -<path
- - d="M 465.2,601.6 534,420.9 478.3,253.4 297.6,184.6 c 0,0 0,78.8 0,118.2 0,117.7 0.4,118.1 -118.1,118.1 -39.4,0 -118.2,0 -118.2,0 l 55.7,167.6 180.6,68.8 z"
- - id="polygon7" />
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 841.9 841.9" enable-background="new 0 0 841.9 841.9" xml:space="preserve">
- +<g>
- + <path d="M297.6,677.3c-68.5,0-132.9-26.7-181.3-75.1S41.3,489.4,41.3,420.9s26.7-132.9,75.1-181.3c48.4-48.4,112.8-75.1,181.3-75.1
- + s132.9,26.7,181.3,75.1c48.4,48.4,75.1,112.8,75.1,181.3s-26.7,132.9-75.1,181.3S366.1,677.3,297.6,677.3z M297.6,204.6
- + c-57.8,0-112.1,22.5-153,63.4c-40.9,40.9-63.4,95.2-63.4,153c0,57.8,22.5,112.1,63.4,153c40.9,40.9,95.2,63.4,153,63.4
- + c57.8,0,112.1-22.5,153-63.4c40.9-40.9,63.4-95.2,63.4-153c0-57.8-22.5-112.1-63.4-153C409.8,227.1,355.4,204.6,297.6,204.6z"/>
- +</g>
- +<path
- + d="M 465.2,601.6 534,420.9 478.3,253.4 297.6,184.6 c 0,0 0,78.8 0,118.2 0,117.7 0.4,118.1 -118.1,118.1 -39.4,0 -118.2,0 -118.2,0 l 55.7,167.6 180.6,68.8 z"
- + id="polygon7" />
- +</svg>
- diff --git a/src/qt/res/src/hd_disabled.svg b/src/qt/res/src/hd_disabled.svg
- index 035f443..ab576cd 100644
- --- a/src/qt/res/src/hd_disabled.svg
- +++ b/src/qt/res/src/hd_disabled.svg
- @@ -1,26 +1,26 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 595.3 841.9" enable-background="new 0 0 595.3 841.9" xml:space="preserve">
- -<g>
- - <path d="M81.3,336.5v66.8h70.4v-66.8H190v174h-38.3v-75.1H81.3v75.1H43v-174H81.3z"/>
- - <path d="M298.7,336.5c11.2,0,21.6,1.8,31.3,5.4c9.7,3.6,18,8.9,25.1,16.1c7.1,7.2,12.6,16.1,16.6,26.8c4,10.7,6,23.3,6,37.8
- - c0,12.7-1.6,24.4-4.9,35.1c-3.3,10.7-8.2,20-14.7,27.8c-6.6,7.8-14.8,13.9-24.6,18.4c-9.8,4.5-21.4,6.7-34.7,6.7h-75.1v-174H298.7z
- - M296,478.3c5.5,0,10.9-0.9,16.1-2.7c5.2-1.8,9.8-4.8,13.9-8.9c4.1-4.1,7.3-9.5,9.7-16.2c2.4-6.7,3.7-14.8,3.7-24.4
- - c0-8.8-0.9-16.7-2.6-23.8s-4.5-13.1-8.4-18.2c-3.9-5-9.1-8.9-15.5-11.6c-6.4-2.7-14.3-4-23.8-4h-27.3v109.7H296z"/>
- -</g>
- -<g>
- - <g>
- - <line x1="32" y1="555.9" x2="358" y2="293.9"/>
- - </g>
- - <g>
- - <path fill="#FFFFFF" d="M32,580.9c-7.3,0-14.6-3.2-19.5-9.3c-8.6-10.8-6.9-26.5,3.8-35.1l326-262c10.8-8.6,26.5-6.9,35.1,3.8
- - c8.6,10.8,6.9,26.5-3.8,35.1l-326,262C43,579.1,37.5,580.9,32,580.9z"/>
- - </g>
- - <g>
- - <path d="M32,573.9c-5.3,0-10.5-2.3-14-6.7c-6.2-7.7-5-19.1,2.8-25.3l326-262c7.8-6.2,19.1-5,25.3,2.8c6.2,7.7,5,19.1-2.8,25.3
- - l-326,262C40,572.6,36,573.9,32,573.9z"/>
- - </g>
- -</g>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 595.3 841.9" enable-background="new 0 0 595.3 841.9" xml:space="preserve">
- +<g>
- + <path d="M81.3,336.5v66.8h70.4v-66.8H190v174h-38.3v-75.1H81.3v75.1H43v-174H81.3z"/>
- + <path d="M298.7,336.5c11.2,0,21.6,1.8,31.3,5.4c9.7,3.6,18,8.9,25.1,16.1c7.1,7.2,12.6,16.1,16.6,26.8c4,10.7,6,23.3,6,37.8
- + c0,12.7-1.6,24.4-4.9,35.1c-3.3,10.7-8.2,20-14.7,27.8c-6.6,7.8-14.8,13.9-24.6,18.4c-9.8,4.5-21.4,6.7-34.7,6.7h-75.1v-174H298.7z
- + M296,478.3c5.5,0,10.9-0.9,16.1-2.7c5.2-1.8,9.8-4.8,13.9-8.9c4.1-4.1,7.3-9.5,9.7-16.2c2.4-6.7,3.7-14.8,3.7-24.4
- + c0-8.8-0.9-16.7-2.6-23.8s-4.5-13.1-8.4-18.2c-3.9-5-9.1-8.9-15.5-11.6c-6.4-2.7-14.3-4-23.8-4h-27.3v109.7H296z"/>
- +</g>
- +<g>
- + <g>
- + <line x1="32" y1="555.9" x2="358" y2="293.9"/>
- + </g>
- + <g>
- + <path fill="#FFFFFF" d="M32,580.9c-7.3,0-14.6-3.2-19.5-9.3c-8.6-10.8-6.9-26.5,3.8-35.1l326-262c10.8-8.6,26.5-6.9,35.1,3.8
- + c8.6,10.8,6.9,26.5-3.8,35.1l-326,262C43,579.1,37.5,580.9,32,580.9z"/>
- + </g>
- + <g>
- + <path d="M32,573.9c-5.3,0-10.5-2.3-14-6.7c-6.2-7.7-5-19.1,2.8-25.3l326-262c7.8-6.2,19.1-5,25.3,2.8c6.2,7.7,5,19.1-2.8,25.3
- + l-326,262C40,572.6,36,573.9,32,573.9z"/>
- + </g>
- +</g>
- +</svg>
- diff --git a/src/qt/res/src/hd_enabled.svg b/src/qt/res/src/hd_enabled.svg
- index cbaa16f..e55fbec 100644
- --- a/src/qt/res/src/hd_enabled.svg
- +++ b/src/qt/res/src/hd_enabled.svg
- @@ -1,13 +1,13 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 595.3 841.9" enable-background="new 0 0 595.3 841.9" xml:space="preserve">
- -<g>
- - <path d="M81.3,336.5v66.8h70.4v-66.8H190v174h-38.3v-75.1H81.3v75.1H43v-174H81.3z"/>
- - <path d="M298.7,336.5c11.2,0,21.6,1.8,31.3,5.4c9.7,3.6,18,8.9,25.1,16.1c7.1,7.2,12.6,16.1,16.6,26.8c4,10.7,6,23.3,6,37.8
- - c0,12.7-1.6,24.4-4.9,35.1c-3.3,10.7-8.2,20-14.7,27.8c-6.6,7.8-14.8,13.9-24.6,18.4c-9.8,4.5-21.4,6.7-34.7,6.7h-75.1v-174H298.7z
- - M296,478.3c5.5,0,10.9-0.9,16.1-2.7c5.2-1.8,9.8-4.8,13.9-8.9c4.1-4.1,7.3-9.5,9.7-16.2c2.4-6.7,3.7-14.8,3.7-24.4
- - c0-8.8-0.9-16.7-2.6-23.8s-4.5-13.1-8.4-18.2c-3.9-5-9.1-8.9-15.5-11.6c-6.4-2.7-14.3-4-23.8-4h-27.3v109.7H296z"/>
- -</g>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 595.3 841.9" enable-background="new 0 0 595.3 841.9" xml:space="preserve">
- +<g>
- + <path d="M81.3,336.5v66.8h70.4v-66.8H190v174h-38.3v-75.1H81.3v75.1H43v-174H81.3z"/>
- + <path d="M298.7,336.5c11.2,0,21.6,1.8,31.3,5.4c9.7,3.6,18,8.9,25.1,16.1c7.1,7.2,12.6,16.1,16.6,26.8c4,10.7,6,23.3,6,37.8
- + c0,12.7-1.6,24.4-4.9,35.1c-3.3,10.7-8.2,20-14.7,27.8c-6.6,7.8-14.8,13.9-24.6,18.4c-9.8,4.5-21.4,6.7-34.7,6.7h-75.1v-174H298.7z
- + M296,478.3c5.5,0,10.9-0.9,16.1-2.7c5.2-1.8,9.8-4.8,13.9-8.9c4.1-4.1,7.3-9.5,9.7-16.2c2.4-6.7,3.7-14.8,3.7-24.4
- + c0-8.8-0.9-16.7-2.6-23.8s-4.5-13.1-8.4-18.2c-3.9-5-9.1-8.9-15.5-11.6c-6.4-2.7-14.3-4-23.8-4h-27.3v109.7H296z"/>
- +</g>
- +</svg>
- diff --git a/src/qt/res/src/mine.svg b/src/qt/res/src/mine.svg
- index 4a3f786..dd69263 100644
- --- a/src/qt/res/src/mine.svg
- +++ b/src/qt/res/src/mine.svg
- @@ -1,12 +1,12 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 841.9 595.3" enable-background="new 0 0 841.9 595.3" xml:space="preserve">
- -<rect x="464" y="158.6" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 1027.5018 42.8013)" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="81.9" height="151.3"/>
- -<rect x="190" y="342.1" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 882.9977 387.9771)" fill="none" stroke="#000000" stroke-width="30" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="342.3" height="69.4"/>
- -<path stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M445.7,186l32.2-32.2
- - c-44.6-37.2-124-74.4-218.3-64.5l-2.5,9.9C361.4,114.1,403.6,153.8,445.7,186z"/>
- -<path stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M552.4,292.7l32.2-32.2
- - c37.2,44.6,74.4,124,64.5,218.3l-9.9,2.5C624.3,377,584.6,332.4,552.4,292.7z"/>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 841.9 595.3" enable-background="new 0 0 841.9 595.3" xml:space="preserve">
- +<rect x="464" y="158.6" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 1027.5018 42.8013)" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="81.9" height="151.3"/>
- +<rect x="190" y="342.1" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 882.9977 387.9771)" fill="none" stroke="#000000" stroke-width="30" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="342.3" height="69.4"/>
- +<path stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M445.7,186l32.2-32.2
- + c-44.6-37.2-124-74.4-218.3-64.5l-2.5,9.9C361.4,114.1,403.6,153.8,445.7,186z"/>
- +<path stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M552.4,292.7l32.2-32.2
- + c37.2,44.6,74.4,124,64.5,218.3l-9.9,2.5C624.3,377,584.6,332.4,552.4,292.7z"/>
- +</svg>
- diff --git a/src/qt/res/src/tx_in.svg b/src/qt/res/src/tx_in.svg
- index a8911f9..751f792 100644
- --- a/src/qt/res/src/tx_in.svg
- +++ b/src/qt/res/src/tx_in.svg
- @@ -1,9 +1,9 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
- -<path d="M13,17.5c-2.5,0-4.5-2-4.5-4.5c0-0.6-0.4-1-1-1s-1,0.4-1,1c0,3.6,2.9,6.5,6.5,6.5s6.5-2.9,6.5-6.5S16.6,6.5,13,6.5
- - c-0.6,0-1,0.4-1,1s0.4,1,1,1c2.5,0,4.5,2,4.5,4.5S15.5,17.5,13,17.5z M3.7,10.3c-0.6,0-1-0.4-1-1s0.4-1,1-1H7L5.3,6.6L1.2,2.5
- - c-0.4-0.4-0.4-1,0-1.4c0.2-0.2,0.4-0.3,0.7-0.3s0.5,0.1,0.7,0.3l4.1,4.1l1.7,1.7V3.6c0-0.6,0.4-1,1-1s1,0.4,1,1v6.7L3.7,10.3"/>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
- +<path d="M13,17.5c-2.5,0-4.5-2-4.5-4.5c0-0.6-0.4-1-1-1s-1,0.4-1,1c0,3.6,2.9,6.5,6.5,6.5s6.5-2.9,6.5-6.5S16.6,6.5,13,6.5
- + c-0.6,0-1,0.4-1,1s0.4,1,1,1c2.5,0,4.5,2,4.5,4.5S15.5,17.5,13,17.5z M3.7,10.3c-0.6,0-1-0.4-1-1s0.4-1,1-1H7L5.3,6.6L1.2,2.5
- + c-0.4-0.4-0.4-1,0-1.4c0.2-0.2,0.4-0.3,0.7-0.3s0.5,0.1,0.7,0.3l4.1,4.1l1.7,1.7V3.6c0-0.6,0.4-1,1-1s1,0.4,1,1v6.7L3.7,10.3"/>
- +</svg>
- diff --git a/src/qt/res/src/tx_inout.svg b/src/qt/res/src/tx_inout.svg
- index 5b66889..aa3d6ef 100644
- --- a/src/qt/res/src/tx_inout.svg
- +++ b/src/qt/res/src/tx_inout.svg
- @@ -1,11 +1,11 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
- -<path d="M14.7,19.5c-2.5,0-4.5-2-4.5-4.5c0-0.6-0.4-1-1-1c-0.6,0-1,0.4-1,1c0,3.6,2.9,6.5,6.5,6.5s6.5-2.9,6.5-6.5s-2.9-6.5-6.5-6.5
- - c-0.6,0-1,0.4-1,1s0.4,1,1,1c2.5,0,4.5,2,4.5,4.5S17.2,19.5,14.7,19.5z M5.9,12.5c-0.6,0-1-0.4-1-1s0.4-1,1-1h3.2L7.4,8.8L3.3,4.7
- - c-0.4-0.4-0.4-1,0-1.4C3.5,3.1,3.7,3,4,3s0.5,0.1,0.7,0.3l4.1,4.1l1.7,1.7V5.8c0-0.6,0.4-1,1-1s1,0.4,1,1v6.7L5.9,12.5 M7.5,0.8
- - c0.6,0,1,0.4,1,1s-0.4,1-1,1H4.3L6,4.5l4.1,4.1c0.4,0.4,0.4,1,0,1.4c-0.2,0.2-0.4,0.3-0.7,0.3S8.9,10.2,8.7,10L4.6,5.9L2.9,4.2v3.2
- - c0,0.6-0.4,1-1,1s-1-0.4-1-1V0.8L7.5,0.8"/>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
- +<path d="M14.7,19.5c-2.5,0-4.5-2-4.5-4.5c0-0.6-0.4-1-1-1c-0.6,0-1,0.4-1,1c0,3.6,2.9,6.5,6.5,6.5s6.5-2.9,6.5-6.5s-2.9-6.5-6.5-6.5
- + c-0.6,0-1,0.4-1,1s0.4,1,1,1c2.5,0,4.5,2,4.5,4.5S17.2,19.5,14.7,19.5z M5.9,12.5c-0.6,0-1-0.4-1-1s0.4-1,1-1h3.2L7.4,8.8L3.3,4.7
- + c-0.4-0.4-0.4-1,0-1.4C3.5,3.1,3.7,3,4,3s0.5,0.1,0.7,0.3l4.1,4.1l1.7,1.7V5.8c0-0.6,0.4-1,1-1s1,0.4,1,1v6.7L5.9,12.5 M7.5,0.8
- + c0.6,0,1,0.4,1,1s-0.4,1-1,1H4.3L6,4.5l4.1,4.1c0.4,0.4,0.4,1,0,1.4c-0.2,0.2-0.4,0.3-0.7,0.3S8.9,10.2,8.7,10L4.6,5.9L2.9,4.2v3.2
- + c0,0.6-0.4,1-1,1s-1-0.4-1-1V0.8L7.5,0.8"/>
- +</svg>
- diff --git a/src/qt/res/src/verify.svg b/src/qt/res/src/verify.svg
- index 1ff11b7..10c4c09 100644
- --- a/src/qt/res/src/verify.svg
- +++ b/src/qt/res/src/verify.svg
- @@ -1,14 +1,14 @@
- -<?xml version="1.0" encoding="utf-8"?>
- -<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- - viewBox="0 0 841.9 595.3" enable-background="new 0 0 841.9 595.3" xml:space="preserve">
- -<path d="M654.1,317.5c-14.9-9.9-37.2-2.5-44.6,12.4l-62,111.6l-34.7-34.7c-12.4-12.4-34.7-12.4-47.1,0c-12.4,12.4-12.4,34.7,0,47.1
- - l67,67c7.4,7.4,14.9,9.9,22.3,9.9h5c9.9-2.5,19.8-7.4,24.8-17.4l81.9-148.8C676.4,347.2,671.5,327.4,654.1,317.5z"/>
- -<path d="M326.7,471.3H177.9V362.1l94.3-94.3c-5-14.9-7.4-29.8-7.4-44.6c0-81.9,67-148.8,148.8-148.8s148.8,67,148.8,148.8
- - s-67,148.8-148.8,148.8h-37.2v49.6h-49.6L326.7,471.3L326.7,471.3z M227.5,421.7h49.6v-49.6h49.6v-49.6h86.8
- - c54.6,0,99.2-44.6,99.2-99.2S468.1,124,413.5,124s-99.2,44.6-99.2,99.2c0,14.9,2.5,27.3,9.9,39.7l7.4,14.9L230,379.5v42.2H227.5z
- - M413.5,198.4c14.9,0,24.8,9.9,24.8,24.8c0,14.9-9.9,24.8-24.8,24.8c-14.9,0-24.8-9.9-24.8-24.8
- - C388.7,208.3,401.1,198.4,413.5,198.4 M413.5,173.6c-27.3,0-49.6,22.3-49.6,49.6c0,27.3,22.3,49.6,49.6,49.6
- - c27.3,0,49.6-22.3,49.6-49.6C463.1,195.9,443.3,173.6,413.5,173.6z"/>
- -</svg>
- +<?xml version="1.0" encoding="utf-8"?>
- +<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
- +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- + viewBox="0 0 841.9 595.3" enable-background="new 0 0 841.9 595.3" xml:space="preserve">
- +<path d="M654.1,317.5c-14.9-9.9-37.2-2.5-44.6,12.4l-62,111.6l-34.7-34.7c-12.4-12.4-34.7-12.4-47.1,0c-12.4,12.4-12.4,34.7,0,47.1
- + l67,67c7.4,7.4,14.9,9.9,22.3,9.9h5c9.9-2.5,19.8-7.4,24.8-17.4l81.9-148.8C676.4,347.2,671.5,327.4,654.1,317.5z"/>
- +<path d="M326.7,471.3H177.9V362.1l94.3-94.3c-5-14.9-7.4-29.8-7.4-44.6c0-81.9,67-148.8,148.8-148.8s148.8,67,148.8,148.8
- + s-67,148.8-148.8,148.8h-37.2v49.6h-49.6L326.7,471.3L326.7,471.3z M227.5,421.7h49.6v-49.6h49.6v-49.6h86.8
- + c54.6,0,99.2-44.6,99.2-99.2S468.1,124,413.5,124s-99.2,44.6-99.2,99.2c0,14.9,2.5,27.3,9.9,39.7l7.4,14.9L230,379.5v42.2H227.5z
- + M413.5,198.4c14.9,0,24.8,9.9,24.8,24.8c0,14.9-9.9,24.8-24.8,24.8c-14.9,0-24.8-9.9-24.8-24.8
- + C388.7,208.3,401.1,198.4,413.5,198.4 M413.5,173.6c-27.3,0-49.6,22.3-49.6,49.6c0,27.3,22.3,49.6,49.6,49.6
- + c27.3,0,49.6-22.3,49.6-49.6C463.1,195.9,443.3,173.6,413.5,173.6z"/>
- +</svg>
- diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp
- index d895fc1..3590a98 100644
- --- a/src/qt/rpcconsole.cpp
- +++ b/src/qt/rpcconsole.cpp
- @@ -28,7 +28,6 @@
- #include <wallet/wallet.h>
- #endif
- -#include <QDesktopWidget>
- #include <QKeyEvent>
- #include <QMenu>
- #include <QMessageBox>
- @@ -429,11 +428,7 @@ RPCConsole::RPCConsole(const PlatformStyle *_platformStyle, QWidget *parent) :
- consoleFontSize(0)
- {
- ui->setupUi(this);
- - QSettings settings;
- - if (!restoreGeometry(settings.value("RPCConsoleWindowGeometry").toByteArray())) {
- - // Restore failed (perhaps missing setting), center the window
- - move(QApplication::desktop()->availableGeometry().center() - frameGeometry().center());
- - }
- + GUIUtil::restoreWindowGeometry("nRPCConsoleWindow", this->size(), this);
- ui->openDebugLogfileButton->setToolTip(ui->openDebugLogfileButton->toolTip().arg(tr(PACKAGE_NAME)));
- @@ -471,14 +466,14 @@ RPCConsole::RPCConsole(const PlatformStyle *_platformStyle, QWidget *parent) :
- ui->detailWidget->hide();
- ui->peerHeading->setText(tr("Select a peer to view detailed information."));
- + QSettings settings;
- consoleFontSize = settings.value(fontSizeSettingsKey, QFontInfo(QFont()).pointSize()).toInt();
- clear();
- }
- RPCConsole::~RPCConsole()
- {
- - QSettings settings;
- - settings.setValue("RPCConsoleWindowGeometry", saveGeometry());
- + GUIUtil::saveWindowGeometry("nRPCConsoleWindow", this);
- RPCUnsetTimerInterface(rpcTimerInterface);
- delete rpcTimerInterface;
- delete ui;
- diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
- index e68d5d0..60f3271 100644
- --- a/src/qt/sendcoinsdialog.cpp
- +++ b/src/qt/sendcoinsdialog.cpp
- @@ -114,6 +114,10 @@ SendCoinsDialog::SendCoinsDialog(const PlatformStyle *_platformStyle, QWidget *p
- settings.setValue("nFeeRadio", 1); // custom
- if (!settings.contains("nFeeRadio"))
- settings.setValue("nFeeRadio", 0); // recommended
- + if (!settings.contains("nCustomFeeRadio") && settings.contains("nTransactionFee") && settings.value("nTransactionFee").toLongLong() > 0) // compatibility
- + settings.setValue("nCustomFeeRadio", 1); // total at least
- + if (!settings.contains("nCustomFeeRadio"))
- + settings.setValue("nCustomFeeRadio", 0); // per kilobyte
- if (!settings.contains("nSmartFeeSliderPosition"))
- settings.setValue("nSmartFeeSliderPosition", 0);
- if (!settings.contains("nTransactionFee"))
- @@ -123,6 +127,8 @@ SendCoinsDialog::SendCoinsDialog(const PlatformStyle *_platformStyle, QWidget *p
- ui->groupFee->setId(ui->radioSmartFee, 0);
- ui->groupFee->setId(ui->radioCustomFee, 1);
- ui->groupFee->button((int)std::max(0, std::min(1, settings.value("nFeeRadio").toInt())))->setChecked(true);
- + ui->groupCustomFee->setId(ui->radioCustomPerKilobyte, 0);
- + ui->groupCustomFee->button(0)->setChecked(true);
- ui->customFee->setValue(settings.value("nTransactionFee").toLongLong());
- ui->checkBoxMinimumFee->setChecked(settings.value("fPayOnlyMinFee").toBool());
- minimizeFeeSection(settings.value("fFeeSectionMinimized").toBool());
- @@ -172,21 +178,20 @@ void SendCoinsDialog::setModel(WalletModel *_model)
- connect(ui->confTargetSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(coinControlUpdateLabels()));
- connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(updateFeeSectionControls()));
- connect(ui->groupFee, SIGNAL(buttonClicked(int)), this, SLOT(coinControlUpdateLabels()));
- + connect(ui->groupCustomFee, SIGNAL(buttonClicked(int)), this, SLOT(coinControlUpdateLabels()));
- connect(ui->customFee, SIGNAL(valueChanged()), this, SLOT(coinControlUpdateLabels()));
- connect(ui->checkBoxMinimumFee, SIGNAL(stateChanged(int)), this, SLOT(setMinimumFee()));
- connect(ui->checkBoxMinimumFee, SIGNAL(stateChanged(int)), this, SLOT(updateFeeSectionControls()));
- connect(ui->checkBoxMinimumFee, SIGNAL(stateChanged(int)), this, SLOT(coinControlUpdateLabels()));
- - // Litecoin: Disabled RBF UI
- - // connect(ui->optInRBF, SIGNAL(stateChanged(int)), this, SLOT(updateSmartFeeLabel()));
- - // connect(ui->optInRBF, SIGNAL(stateChanged(int)), this, SLOT(coinControlUpdateLabels()));
- + connect(ui->optInRBF, SIGNAL(stateChanged(int)), this, SLOT(updateSmartFeeLabel()));
- + connect(ui->optInRBF, SIGNAL(stateChanged(int)), this, SLOT(coinControlUpdateLabels()));
- ui->customFee->setSingleStep(CWallet::GetRequiredFee(1000));
- updateFeeSectionControls();
- updateMinFeeLabel();
- updateSmartFeeLabel();
- // set default rbf checkbox state
- - // Litecoin: Disabled RBF UI
- - //ui->optInRBF->setCheckState(model->getDefaultWalletRbf() ? Qt::Checked : Qt::Unchecked);
- + ui->optInRBF->setCheckState(model->getDefaultWalletRbf() ? Qt::Checked : Qt::Unchecked);
- // set the smartfee-sliders default value (wallets default conf.target or last stored value)
- QSettings settings;
- @@ -209,6 +214,7 @@ SendCoinsDialog::~SendCoinsDialog()
- QSettings settings;
- settings.setValue("fFeeSectionMinimized", fFeeMinimized);
- settings.setValue("nFeeRadio", ui->groupFee->checkedId());
- + settings.setValue("nCustomFeeRadio", ui->groupCustomFee->checkedId());
- settings.setValue("nConfTarget", getConfTargetForIndex(ui->confTargetSelector->currentIndex()));
- settings.setValue("nTransactionFee", (qint64)ui->customFee->value());
- settings.setValue("fPayOnlyMinFee", ui->checkBoxMinimumFee->isChecked());
- @@ -344,15 +350,12 @@ void SendCoinsDialog::on_sendButton_clicked()
- questionString.append(QString("<span style='font-size:10pt;font-weight:normal;'><br />(=%2)</span>")
- .arg(alternativeUnits.join(" " + tr("or") + "<br />")));
- - /*
- - Litecoin: Disabled RBF UI
- if (ui->optInRBF->isChecked())
- {
- questionString.append("<hr /><span>");
- questionString.append(tr("This transaction signals replaceability (optin-RBF)."));
- questionString.append("</span>");
- }
- - */
- SendConfirmationDialog confirmationDialog(tr("Confirm send coins"),
- questionString.arg(formatted.join("<br />")), SEND_CONFIRM_DELAY, this);
- @@ -606,6 +609,7 @@ void SendCoinsDialog::on_buttonMinimizeFee_clicked()
- void SendCoinsDialog::setMinimumFee()
- {
- + ui->radioCustomPerKilobyte->setChecked(true);
- ui->customFee->setValue(CWallet::GetRequiredFee(1000));
- }
- @@ -618,7 +622,7 @@ void SendCoinsDialog::updateFeeSectionControls()
- ui->labelFeeEstimation ->setEnabled(ui->radioSmartFee->isChecked());
- ui->checkBoxMinimumFee ->setEnabled(ui->radioCustomFee->isChecked());
- ui->labelMinFeeWarning ->setEnabled(ui->radioCustomFee->isChecked());
- - ui->labelCustomPerKilobyte ->setEnabled(ui->radioCustomFee->isChecked() && !ui->checkBoxMinimumFee->isChecked());
- + ui->radioCustomPerKilobyte ->setEnabled(ui->radioCustomFee->isChecked() && !ui->checkBoxMinimumFee->isChecked());
- ui->customFee ->setEnabled(ui->radioCustomFee->isChecked() && !ui->checkBoxMinimumFee->isChecked());
- }
- @@ -630,7 +634,8 @@ void SendCoinsDialog::updateFeeMinimizedLabel()
- if (ui->radioSmartFee->isChecked())
- ui->labelFeeMinimized->setText(ui->labelSmartFee->text());
- else {
- - ui->labelFeeMinimized->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), ui->customFee->value()) + "/kB");
- + ui->labelFeeMinimized->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), ui->customFee->value()) +
- + ((ui->radioCustomPerKilobyte->isChecked()) ? "/kB" : ""));
- }
- }
- @@ -652,8 +657,7 @@ void SendCoinsDialog::updateCoinControlState(CCoinControl& ctrl)
- // Avoid using global defaults when sending money from the GUI
- // Either custom fee will be used or if not selected, the confirmation target from dropdown box
- ctrl.m_confirm_target = getConfTargetForIndex(ui->confTargetSelector->currentIndex());
- - // Litecoin: Disabled RBF UI
- - //ctrl.signalRbf = ui->optInRBF->isChecked();
- + ctrl.signalRbf = ui->optInRBF->isChecked();
- }
- void SendCoinsDialog::updateSmartFeeLabel()
- @@ -781,12 +785,14 @@ void SendCoinsDialog::coinControlChangeEdited(const QString& text)
- }
- else if (!addr.IsValid()) // Invalid address
- {
- - ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Litecoin address"));
- + ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid LitecoinCash address"));
- }
- else // Valid address
- {
- - const CTxDestination dest = addr.Get();
- - if (!model->IsSpendable(dest)) {
- + CKeyID keyid;
- + addr.GetKeyID(keyid);
- + if (!model->havePrivKey(keyid)) // Unknown change address
- + {
- ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change address"));
- // confirmation dialog
- @@ -794,7 +800,7 @@ void SendCoinsDialog::coinControlChangeEdited(const QString& text)
- QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);
- if(btnRetVal == QMessageBox::Yes)
- - CoinControlDialog::coinControl->destChange = dest;
- + CoinControlDialog::coinControl->destChange = addr.Get();
- else
- {
- ui->lineEditCoinControlChange->setText("");
- @@ -813,7 +819,7 @@ void SendCoinsDialog::coinControlChangeEdited(const QString& text)
- else
- ui->labelCoinControlChangeLabel->setText(tr("(no label)"));
- - CoinControlDialog::coinControl->destChange = dest;
- + CoinControlDialog::coinControl->destChange = addr.Get();
- }
- }
- }
- diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp
- index c8e04da..8f477da 100644
- --- a/src/qt/splashscreen.cpp
- +++ b/src/qt/splashscreen.cpp
- @@ -30,7 +30,7 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
- QWidget(0, f), curAlignment(0)
- {
- // set reference point, paddings
- - int paddingRight = 50;
- + int paddingRight = 10;
- int paddingTop = 50;
- int titleVersionVSpace = 17;
- int titleCopyrightVSpace = 40;
- @@ -42,7 +42,7 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
- #endif
- // define text to place
- - QString titleText = tr(PACKAGE_NAME);
- + QString titleText = tr("Litecoin Cash");
- QString versionText = QString("Version %1").arg(QString::fromStdString(FormatFullVersion()));
- QString copyrightText = QString::fromUtf8(CopyrightHolders(strprintf("\xc2\xA9 %u-%u ", 2011, COPYRIGHT_YEAR)).c_str());
- QString titleAddText = networkStyle->getTitleAddText();
- diff --git a/src/qt/test/paymentrequestdata.h b/src/qt/test/paymentrequestdata.h
- index 8431b94..0dbd7e0 100644
- --- a/src/qt/test/paymentrequestdata.h
- +++ b/src/qt/test/paymentrequestdata.h
- @@ -435,7 +435,7 @@ d2hj739GDLz0b5KuJ2SG6VknMRQM976w/m2qlq0ccVGaaZ2zMIGfpzL3p6adwx/5\
- ";
- //
- -// Payment request with amount overflow (amount is set to 84000001 LTC)
- +// Payment request with amount overflow (amount is set to 84000001 LCC)
- //
- const char* paymentrequest5_cert2_BASE64 =
- "\
- diff --git a/src/qt/test/rpcnestedtests.cpp b/src/qt/test/rpcnestedtests.cpp
- index 23904a4..1088a2a 100644
- --- a/src/qt/test/rpcnestedtests.cpp
- +++ b/src/qt/test/rpcnestedtests.cpp
- @@ -11,6 +11,7 @@
- #include "rpc/register.h"
- #include "rpc/server.h"
- #include "rpcconsole.h"
- +#include "test/testutil.h"
- #include "test/test_bitcoin.h"
- #include "univalue.h"
- #include "util.h"
- @@ -36,6 +37,11 @@ void RPCNestedTests::rpcNestedTests()
- // do some test setup
- // could be moved to a more generic place when we add more tests on QT level
- tableRPC.appendCommand("rpcNestedTest", &vRPCCommands[0]);
- + ClearDatadirCache();
- + std::string path = QDir::tempPath().toStdString() + "/" + strprintf("test_litecoincash_qt_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000)));
- + QDir dir(QString::fromStdString(path));
- + dir.mkpath(".");
- + gArgs.ForceSetArg("-datadir", path);
- //mempool.setSanityCheck(1.0);
- TestingSetup test;
- @@ -130,4 +136,6 @@ void RPCNestedTests::rpcNestedTests()
- QVERIFY_EXCEPTION_THROWN(RPCConsole::RPCExecuteCommandLine(result, "rpcNestedTest(abc,,abc)"), std::runtime_error); //don't tollerate empty arguments when using ,
- QVERIFY_EXCEPTION_THROWN(RPCConsole::RPCExecuteCommandLine(result, "rpcNestedTest(abc,,)"), std::runtime_error); //don't tollerate empty arguments when using ,
- #endif
- +
- + fs::remove_all(fs::path(path));
- }
- diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp
- index 2f734d5..03fd278 100644
- --- a/src/qt/test/test_main.cpp
- +++ b/src/qt/test/test_main.cpp
- @@ -53,10 +53,6 @@ int main(int argc, char *argv[])
- SetupNetworking();
- SelectParams(CBaseChainParams::MAIN);
- noui_connect();
- - ClearDatadirCache();
- - fs::path pathTemp = fs::temp_directory_path() / strprintf("test_bitcoin-qt_%lu_%i", (unsigned long)GetTime(), (int)GetRand(100000));
- - fs::create_directories(pathTemp);
- - gArgs.ForceSetArg("-datadir", pathTemp.string());
- bool fInvalid = false;
- @@ -72,7 +68,7 @@ int main(int argc, char *argv[])
- // Don't remove this, it's needed to access
- // QApplication:: and QCoreApplication:: in the tests
- QApplication app(argc, argv);
- - app.setApplicationName("Litecoin-Qt-test");
- + app.setApplicationName("LitecoinCash-Qt-test");
- SSL_library_init();
- @@ -101,7 +97,5 @@ int main(int argc, char *argv[])
- }
- #endif
- - fs::remove_all(pathTemp);
- -
- return fInvalid;
- }
- diff --git a/src/qt/test/uritests.cpp b/src/qt/test/uritests.cpp
- index e7b5025..e62bcac 100644
- --- a/src/qt/test/uritests.cpp
- +++ b/src/qt/test/uritests.cpp
- @@ -13,54 +13,57 @@ void URITests::uriTests()
- {
- SendCoinsRecipient rv;
- QUrl uri;
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?req-dontexist="));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?req-dontexist="));
- QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?dontexist="));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?dontexist="));
- QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));
- - QVERIFY(rv.address == QString("LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2"));
- + QVERIFY(rv.address == QString("CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns"));
- QVERIFY(rv.label == QString());
- QVERIFY(rv.amount == 0);
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?label=Wikipedia Example Address"));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?label=Wikipedia Example Address"));
- QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));
- - QVERIFY(rv.address == QString("LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2"));
- + QVERIFY(rv.address == QString("CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns"));
- QVERIFY(rv.label == QString("Wikipedia Example Address"));
- QVERIFY(rv.amount == 0);
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?amount=0.001"));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?amount=0.001"));
- QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));
- - QVERIFY(rv.address == QString("LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2"));
- + QVERIFY(rv.address == QString("CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns"));
- QVERIFY(rv.label == QString());
- - QVERIFY(rv.amount == 100000);
- + QVERIFY(rv.amount == 10000);
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?amount=1.001"));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?amount=1.001"));
- QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));
- - QVERIFY(rv.address == QString("LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2"));
- + QVERIFY(rv.address == QString("CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns"));
- QVERIFY(rv.label == QString());
- - QVERIFY(rv.amount == 100100000);
- + QVERIFY(rv.amount == 10010000);
- +
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?amount=100&label=Wikipedia Example"));
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?amount=100&label=Wikipedia Example"));
- QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));
- - QVERIFY(rv.address == QString("LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2"));
- - QVERIFY(rv.amount == 10000000000LL);
- + QVERIFY(rv.address == QString("CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns"));
- +
- + QVERIFY(rv.amount == 1000000000LL);
- QVERIFY(rv.label == QString("Wikipedia Example"));
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?message=Wikipedia Example Address"));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?message=Wikipedia Example Address"));
- QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));
- - QVERIFY(rv.address == QString("LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2"));
- + QVERIFY(rv.address == QString("CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns"));
- QVERIFY(rv.label == QString());
- - QVERIFY(GUIUtil::parseBitcoinURI("litecoin://LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?message=Wikipedia Example Address", &rv));
- - QVERIFY(rv.address == QString("LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2"));
- + QVERIFY(GUIUtil::parseBitcoinURI("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?message=Wikipedia Example Address", &rv));
- + printf("%s",rv.address.toLatin1().data());
- + QVERIFY(rv.address == QString("CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns"));
- QVERIFY(rv.label == QString());
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?req-message=Wikipedia Example Address"));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?req-message=Wikipedia Example Address"));
- QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?amount=1,000&label=Wikipedia Example"));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?amount=1,000&label=Wikipedia Example"));
- QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));
- - uri.setUrl(QString("litecoin:LEr4HnaeFWYhBmGxCfP2po1NPRueIk8kM2?amount=1,000.0&label=Wikipedia Example"));
- + uri.setUrl(QString("litecoincash:CKfokwkxV3U64sRqZkJ62a3LXmsuFWnNns?amount=1,000.0&label=Wikipedia Example"));
- QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));
- }
- diff --git a/src/qt/test/wallettests.cpp b/src/qt/test/wallettests.cpp
- index 0f4b934..ff1eb59 100644
- --- a/src/qt/test/wallettests.cpp
- +++ b/src/qt/test/wallettests.cpp
- @@ -63,12 +63,10 @@ uint256 SendCoins(CWallet& wallet, SendCoinsDialog& sendCoinsDialog, const CBitc
- SendCoinsEntry* entry = qobject_cast<SendCoinsEntry*>(entries->itemAt(0)->widget());
- entry->findChild<QValidatedLineEdit*>("payTo")->setText(QString::fromStdString(address.ToString()));
- entry->findChild<BitcoinAmountField*>("payAmount")->setValue(amount);
- - /* Litecoin: Disabled RBF UI
- sendCoinsDialog.findChild<QFrame*>("frameFee")
- ->findChild<QFrame*>("frameFeeSelection")
- ->findChild<QCheckBox*>("optInRBF")
- ->setCheckState(rbf ? Qt::Checked : Qt::Unchecked);
- - */
- uint256 txid;
- boost::signals2::scoped_connection c(wallet.NotifyTransactionChanged.connect([&txid](CWallet*, const uint256& hash, ChangeType status) {
- if (status == CT_NEW) txid = hash;
- @@ -181,11 +179,10 @@ void TestSendCoins()
- QVERIFY(FindTx(*transactionTableModel, txid2).isValid());
- // Call bumpfee. Test disabled, canceled, enabled, then failing cases.
- - // Litecoin: Disable BumpFee tests
- - // BumpFee(transactionView, txid1, true /* expect disabled */, "not BIP 125 replaceable" /* expected error */, false /* cancel */);
- - // BumpFee(transactionView, txid2, false /* expect disabled */, {} /* expected error */, true /* cancel */);
- - // BumpFee(transactionView, txid2, false /* expect disabled */, {} /* expected error */, false /* cancel */);
- - // BumpFee(transactionView, txid2, true /* expect disabled */, "already bumped" /* expected error */, false /* cancel */);
- + BumpFee(transactionView, txid1, true /* expect disabled */, "not BIP 125 replaceable" /* expected error */, false /* cancel */);
- + BumpFee(transactionView, txid2, false /* expect disabled */, {} /* expected error */, true /* cancel */);
- + BumpFee(transactionView, txid2, false /* expect disabled */, {} /* expected error */, false /* cancel */);
- + BumpFee(transactionView, txid2, true /* expect disabled */, "already bumped" /* expected error */, false /* cancel */);
- bitdb.Flush(true);
- bitdb.Reset();
- diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp
- index 39dfdb5..53c38da 100644
- --- a/src/qt/transactionview.cpp
- +++ b/src/qt/transactionview.cpp
- @@ -33,7 +33,6 @@
- #include <QScrollBar>
- #include <QSignalMapper>
- #include <QTableView>
- -#include <QTimer>
- #include <QUrl>
- #include <QVBoxLayout>
- @@ -113,17 +112,6 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
- amountWidget->setValidator(new QDoubleValidator(0, 1e20, 8, this));
- hlayout->addWidget(amountWidget);
- - // Delay before filtering transactions in ms
- - static const int input_filter_delay = 200;
- -
- - QTimer* amount_typing_delay = new QTimer(this);
- - amount_typing_delay->setSingleShot(true);
- - amount_typing_delay->setInterval(input_filter_delay);
- -
- - QTimer* prefix_typing_delay = new QTimer(this);
- - prefix_typing_delay->setSingleShot(true);
- - prefix_typing_delay->setInterval(input_filter_delay);
- -
- QVBoxLayout *vlayout = new QVBoxLayout(this);
- vlayout->setContentsMargins(0,0,0,0);
- vlayout->setSpacing(0);
- @@ -185,10 +173,8 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
- connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int)));
- connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int)));
- connect(watchOnlyWidget, SIGNAL(activated(int)), this, SLOT(chooseWatchonly(int)));
- - connect(amountWidget, SIGNAL(textChanged(QString)), amount_typing_delay, SLOT(start()));
- - connect(amount_typing_delay, SIGNAL(timeout()), this, SLOT(changedAmount()));
- - connect(addressWidget, SIGNAL(textChanged(QString)), prefix_typing_delay, SLOT(start()));
- - connect(prefix_typing_delay, SIGNAL(timeout()), this, SLOT(changedPrefix()));
- + connect(addressWidget, SIGNAL(textChanged(QString)), this, SLOT(changedPrefix(QString)));
- + connect(amountWidget, SIGNAL(textChanged(QString)), this, SLOT(changedAmount(QString)));
- connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex)));
- connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint)));
- @@ -326,19 +312,20 @@ void TransactionView::chooseWatchonly(int idx)
- (TransactionFilterProxy::WatchOnlyFilter)watchOnlyWidget->itemData(idx).toInt());
- }
- -void TransactionView::changedPrefix()
- +void TransactionView::changedPrefix(const QString &prefix)
- {
- if(!transactionProxyModel)
- return;
- - transactionProxyModel->setAddressPrefix(addressWidget->text());
- + transactionProxyModel->setAddressPrefix(prefix);
- }
- -void TransactionView::changedAmount()
- +void TransactionView::changedAmount(const QString &amount)
- {
- if(!transactionProxyModel)
- return;
- CAmount amount_parsed = 0;
- - if (BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), amountWidget->text(), &amount_parsed)) {
- + if(BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), amount, &amount_parsed))
- + {
- transactionProxyModel->setMinAmount(amount_parsed);
- }
- else
- diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h
- index 5b4cfd4..52e57ca 100644
- --- a/src/qt/transactionview.h
- +++ b/src/qt/transactionview.h
- @@ -112,8 +112,8 @@ public Q_SLOTS:
- void chooseDate(int idx);
- void chooseType(int idx);
- void chooseWatchonly(int idx);
- - void changedAmount();
- - void changedPrefix();
- + void changedPrefix(const QString &prefix);
- + void changedAmount(const QString &amount);
- void exportClicked();
- void focusTransaction(const QModelIndex&);
- diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp
- index 7ff0180..64bdf4f 100644
- --- a/src/qt/utilitydialog.cpp
- +++ b/src/qt/utilitydialog.cpp
- @@ -70,7 +70,7 @@ HelpMessageDialog::HelpMessageDialog(QWidget *parent, bool about) :
- } else {
- setWindowTitle(tr("Command-line options"));
- QString header = tr("Usage:") + "\n" +
- - " litecoin-qt [" + tr("command-line options") + "] " + "\n";
- + " litecoincash-qt [" + tr("command-line options") + "] " + "\n";
- QTextCursor cursor(ui->helpMessage->document());
- cursor.insertText(version);
- cursor.insertBlock();
- diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp
- index f318332..ef5d89b 100644
- --- a/src/qt/walletframe.cpp
- +++ b/src/qt/walletframe.cpp
- @@ -178,6 +178,13 @@ void WalletFrame::unlockWallet()
- walletView->unlockWallet();
- }
- +void WalletFrame::importPrivateKey()
- +{
- + WalletView *walletView = currentWalletView();
- + if(walletView)
- + walletView->importPrivateKey();
- +}
- +
- void WalletFrame::usedSendingAddresses()
- {
- WalletView *walletView = currentWalletView();
- diff --git a/src/qt/walletframe.h b/src/qt/walletframe.h
- index 42ce69f..73645d6 100644
- --- a/src/qt/walletframe.h
- +++ b/src/qt/walletframe.h
- @@ -84,6 +84,8 @@ public Q_SLOTS:
- void changePassphrase();
- /** Ask for passphrase to unlock wallet temporarily */
- void unlockWallet();
- + /** LitecoinCash: Ask for and import a private key */
- + void importPrivateKey();
- /** Show used sending addresses */
- void usedSendingAddresses();
- diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
- index aedbf22..3ca726d 100644
- --- a/src/qt/walletmodel.cpp
- +++ b/src/qt/walletmodel.cpp
- @@ -561,9 +561,9 @@ bool WalletModel::getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const
- return wallet->GetPubKey(address, vchPubKeyOut);
- }
- -bool WalletModel::IsSpendable(const CTxDestination& dest) const
- +bool WalletModel::havePrivKey(const CKeyID &address) const
- {
- - return IsMine(*wallet, dest) & ISMINE_SPENDABLE;
- + return wallet->HaveKey(address);
- }
- bool WalletModel::getPrivKey(const CKeyID &address, CKey& vchPrivKeyOut) const
- diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h
- index 05733f8..6be36a5 100644
- --- a/src/qt/walletmodel.h
- +++ b/src/qt/walletmodel.h
- @@ -190,7 +190,7 @@ public:
- UnlockContext requestUnlock();
- bool getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const;
- - bool IsSpendable(const CTxDestination& dest) const;
- + bool havePrivKey(const CKeyID &address) const;
- bool getPrivKey(const CKeyID &address, CKey& vchPrivKeyOut) const;
- void getOutputs(const std::vector<COutPoint>& vOutpoints, std::vector<COutput>& vOutputs);
- bool isSpent(const COutPoint& outpoint) const;
- diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp
- index 971f5e0..e1549af 100644
- --- a/src/qt/walletview.cpp
- +++ b/src/qt/walletview.cpp
- @@ -18,6 +18,9 @@
- #include "transactiontablemodel.h"
- #include "transactionview.h"
- #include "walletmodel.h"
- +#include "wallet/rpcwallet.h"
- +#include "wallet/wallet.h"
- +#include "validation.h" // for cs_main
- #include "ui_interface.h"
- @@ -28,6 +31,9 @@
- #include <QProgressDialog>
- #include <QPushButton>
- #include <QVBoxLayout>
- +#include <QInputDialog>
- +
- +#include <boost/thread.hpp>
- WalletView::WalletView(const PlatformStyle *_platformStyle, QWidget *parent):
- QStackedWidget(parent),
- @@ -100,7 +106,7 @@ void WalletView::setBitcoinGUI(BitcoinGUI *gui)
- // Pass through transaction notifications
- connect(this, SIGNAL(incomingTransaction(QString,int,CAmount,QString,QString,QString)), gui, SLOT(incomingTransaction(QString,int,CAmount,QString,QString,QString)));
- - // Connect HD enabled state signal
- + // Connect HD enabled state signal
- connect(this, SIGNAL(hdEnabledStatusChanged(int)), gui, SLOT(setHDStatus(int)));
- }
- }
- @@ -328,3 +334,79 @@ void WalletView::requestedSyncWarningInfo()
- {
- Q_EMIT outOfSyncWarningClicked();
- }
- +
- +void WalletView::doRescan(CWallet* pwallet, int64_t startTime)
- +{
- + pwallet->RescanFromTime(TIMESTAMP_MIN, true);
- + QMessageBox::information(0, tr(PACKAGE_NAME), tr("Rescan complete."));
- +}
- +
- +// LitecoinCash: Helper to import a private key instead of making the user go to the debug console
- +void WalletView::importPrivateKey()
- +{
- + bool ok;
- + QString privKey = QInputDialog::getText(0, tr(PACKAGE_NAME), tr("Enter a Litecoin/LitecoinCash private key to import into your wallet."), QLineEdit::Normal, "", &ok);
- + if (ok && !privKey.isEmpty()) {
- + CWallet* pwallet = GetWalletForQTKeyImport();
- +
- + if(!pwallet) {
- + QMessageBox::critical(0, tr(PACKAGE_NAME), tr("Couldn't select valid wallet."));
- + return;
- + }
- +
- + if (!EnsureWalletIsAvailable(pwallet, false)) {
- + QMessageBox::critical(0, tr(PACKAGE_NAME), tr("Wallet isn't open."));
- + return;
- + }
- +
- + LOCK2(cs_main, pwallet->cs_wallet);
- +
- + WalletModel::UnlockContext ctx(walletModel->requestUnlock());
- + if(!ctx.isValid()) // Unlock wallet was cancelled
- + return;
- +
- + CBitcoinSecret vchSecret;
- + if (!vchSecret.SetString(privKey.toStdString())) {
- + QMessageBox::critical(0, tr(PACKAGE_NAME), tr("This doesn't appear to be a Litecoin/LitecoinCash private key."));
- + return;
- + }
- +
- + CKey key = vchSecret.GetKey();
- + if (!key.IsValid()) {
- + QMessageBox::critical(0, tr(PACKAGE_NAME), tr("Private key outside allowed range."));
- + return;
- + }
- +
- + CPubKey pubkey = key.GetPubKey();
- + assert(key.VerifyPubKey(pubkey));
- + CKeyID vchAddress = pubkey.GetID();
- + {
- + pwallet->MarkDirty();
- + pwallet->SetAddressBook(vchAddress, "", "receive");
- +
- + if (pwallet->HaveKey(vchAddress)) {
- + QMessageBox::critical(0, tr(PACKAGE_NAME), tr("This key has already been added."));
- + return;
- + }
- +
- + pwallet->mapKeyMetadata[vchAddress].nCreateTime = 1;
- +
- + if (!pwallet->AddKeyPubKey(key, pubkey)) {
- + QMessageBox::critical(0, tr(PACKAGE_NAME), tr("Error adding key to wallet."));
- + return;
- + }
- +
- + pwallet->UpdateTimeFirstKey(1); // Mark as rescan needed, even if we don't do it now (it'll happen next restart if not before)
- +
- + QMessageBox msgBox;
- + msgBox.setText(tr("Key successfully added to wallet."));
- + msgBox.setInformativeText("Rescan now? (Select No if you have more keys to import)");
- + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
- + msgBox.setDefaultButton(QMessageBox::No);
- +
- + if (msgBox.exec() == QMessageBox::Yes)
- + boost::thread t{WalletView::doRescan, pwallet, TIMESTAMP_MIN};
- + }
- + return;
- + }
- +}
- diff --git a/src/qt/walletview.h b/src/qt/walletview.h
- index c1f8422..b7253f2 100644
- --- a/src/qt/walletview.h
- +++ b/src/qt/walletview.h
- @@ -6,6 +6,7 @@
- #define BITCOIN_QT_WALLETVIEW_H
- #include "amount.h"
- +#include "wallet/wallet.h"
- #include <QStackedWidget>
- @@ -54,6 +55,8 @@ public:
- void showOutOfSyncWarning(bool fShow);
- + static void doRescan(CWallet* pwallet, int64_t startTime);
- +
- private:
- ClientModel *clientModel;
- WalletModel *walletModel;
- @@ -98,6 +101,8 @@ public Q_SLOTS:
- void changePassphrase();
- /** Ask for passphrase to unlock wallet temporarily */
- void unlockWallet();
- + /** LitecoinCash: Ask for and import a private key */
- + void importPrivateKey();
- /** Show used sending addresses */
- void usedSendingAddresses();
- diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp
- index f91bfdc..ec68943 100644
- --- a/src/rpc/blockchain.cpp
- +++ b/src/rpc/blockchain.cpp
- @@ -944,10 +944,9 @@ UniValue gettxout(const JSONRPCRequest& request)
- "gettxout \"txid\" n ( include_mempool )\n"
- "\nReturns details about an unspent transaction output.\n"
- "\nArguments:\n"
- - "1. \"txid\" (string, required) The transaction id\n"
- - "2. \"n\" (numeric, required) vout number\n"
- - "3. \"include_mempool\" (boolean, optional) Whether to include the mempool. Default: true."
- - " Note that an unspent output that is spent in the mempool won't appear.\n"
- + "1. \"txid\" (string, required) The transaction id\n"
- + "2. n (numeric, required) vout number\n"
- + "3. include_mempool (boolean, optional) Whether to include the mempool\n"
- "\nResult:\n"
- "{\n"
- " \"bestblock\" : \"hash\", (string) the block hash\n"
- @@ -958,8 +957,8 @@ UniValue gettxout(const JSONRPCRequest& request)
- " \"hex\" : \"hex\", (string) \n"
- " \"reqSigs\" : n, (numeric) Number of required signatures\n"
- " \"type\" : \"pubkeyhash\", (string) The type, eg pubkeyhash\n"
- - " \"addresses\" : [ (array of string) array of litecoin addresses\n"
- - " \"address\" (string) litecoin address\n"
- + " \"addresses\" : [ (array of string) array of litecoincash addresses\n"
- + " \"address\" (string) litecoincash address\n"
- " ,...\n"
- " ]\n"
- " },\n"
- diff --git a/src/rpc/client.cpp b/src/rpc/client.cpp
- index 406ad2f..4179453 100644
- --- a/src/rpc/client.cpp
- +++ b/src/rpc/client.cpp
- @@ -115,8 +115,8 @@ static const CRPCConvertParam vRPCConvertParams[] =
- { "keypoolrefill", 0, "newsize" },
- { "getrawmempool", 0, "verbose" },
- { "estimatefee", 0, "nblocks" },
- - { "estimatesmartfee", 0, "conf_target" },
- - { "estimaterawfee", 0, "conf_target" },
- + { "estimatesmartfee", 0, "nblocks" },
- + { "estimaterawfee", 0, "nblocks" },
- { "estimaterawfee", 1, "threshold" },
- { "prioritisetransaction", 1, "dummy" },
- { "prioritisetransaction", 2, "fee_delta" },
- diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp
- index 9a970fd..931fdf5 100644
- --- a/src/rpc/mining.cpp
- +++ b/src/rpc/mining.cpp
- @@ -161,7 +161,7 @@ UniValue generatetoaddress(const JSONRPCRequest& request)
- "\nMine blocks immediately to a specified address (before the RPC call returns)\n"
- "\nArguments:\n"
- "1. nblocks (numeric, required) How many blocks are generated immediately.\n"
- - "2. address (string, required) The address to send the newly generated litecoin to.\n"
- + "2. address (string, required) The address to send the newly generated litecoincash to.\n"
- "3. maxtries (numeric, optional) How many iterations to try (default = 1000000).\n"
- "\nResult:\n"
- "[ blockhashes ] (array) hashes of blocks generated\n"
- @@ -195,6 +195,7 @@ UniValue getmininginfo(const JSONRPCRequest& request)
- "\nResult:\n"
- "{\n"
- " \"blocks\": nnn, (numeric) The current block\n"
- + " \"currentblocksize\": nnn, (numeric) The last block size\n"
- " \"currentblockweight\": nnn, (numeric) The last block weight\n"
- " \"currentblocktx\": nnn, (numeric) The last block transaction\n"
- " \"difficulty\": xxx.xxxxx (numeric) The current difficulty\n"
- @@ -213,6 +214,7 @@ UniValue getmininginfo(const JSONRPCRequest& request)
- UniValue obj(UniValue::VOBJ);
- obj.push_back(Pair("blocks", (int)chainActive.Height()));
- + obj.push_back(Pair("currentblocksize", (uint64_t)nLastBlockSize));
- obj.push_back(Pair("currentblockweight", (uint64_t)nLastBlockWeight));
- obj.push_back(Pair("currentblocktx", (uint64_t)nLastBlockTx));
- obj.push_back(Pair("difficulty", (double)GetDifficulty()));
- @@ -438,10 +440,10 @@ UniValue getblocktemplate(const JSONRPCRequest& request)
- throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
- if (g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL) == 0)
- - throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Litecoin is not connected!");
- + throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "LitecoinCash is not connected!");
- if (IsInitialBlockDownload())
- - throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Litecoin is downloading blocks...");
- + throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "LitecoinCash is downloading blocks...");
- static unsigned int nTransactionsUpdatedLast;
- @@ -823,7 +825,7 @@ UniValue estimatesmartfee(const JSONRPCRequest& request)
- " \"CONSERVATIVE\"\n"
- "\nResult:\n"
- "{\n"
- - " \"feerate\" : x.x, (numeric, optional) estimate fee-per-kilobyte (in LTC)\n"
- + " \"feerate\" : x.x, (numeric, optional) estimate fee-per-kilobyte (in LCC)\n"
- " \"errors\": [ str... ] (json array of strings, optional) Errors encountered during processing\n"
- " \"blocks\" : n (numeric) block number where estimate was found\n"
- "}\n"
- diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp
- index adc24f6..8b2ce05 100644
- --- a/src/rpc/misc.cpp
- +++ b/src/rpc/misc.cpp
- @@ -56,7 +56,7 @@ UniValue getinfo(const JSONRPCRequest& request)
- " \"version\": xxxxx, (numeric) the server version\n"
- " \"protocolversion\": xxxxx, (numeric) the protocol version\n"
- " \"walletversion\": xxxxx, (numeric) the wallet version\n"
- - " \"balance\": xxxxxxx, (numeric) the total litecoin balance of the wallet\n"
- + " \"balance\": xxxxxxx, (numeric) the total litecoincash balance of the wallet\n"
- " \"blocks\": xxxxxx, (numeric) the current number of blocks processed in the server\n"
- " \"timeoffset\": xxxxx, (numeric) the time offset\n"
- " \"connections\": xxxxx, (numeric) the number of connections\n"
- @@ -168,13 +168,13 @@ UniValue validateaddress(const JSONRPCRequest& request)
- if (request.fHelp || request.params.size() != 1)
- throw std::runtime_error(
- "validateaddress \"address\"\n"
- - "\nReturn information about the given litecoin address.\n"
- + "\nReturn information about the given litecoincash address.\n"
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address to validate\n"
- + "1. \"address\" (string, required) The litecoincash address to validate\n"
- "\nResult:\n"
- "{\n"
- " \"isvalid\" : true|false, (boolean) If the address is valid or not. If not, this is the only property returned.\n"
- - " \"address\" : \"address\", (string) The litecoin address validated\n"
- + " \"address\" : \"address\", (string) The litecoincash address validated\n"
- " \"scriptPubKey\" : \"hex\", (string) The hex encoded scriptPubKey generated by the address\n"
- " \"ismine\" : true|false, (boolean) If the address is yours or not\n"
- " \"iswatchonly\" : true|false, (boolean) If the address is watchonly\n"
- @@ -333,9 +333,9 @@ UniValue createmultisig(const JSONRPCRequest& request)
- "\nArguments:\n"
- "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n"
- - "2. \"keys\" (string, required) A json array of keys which are litecoin addresses or hex-encoded public keys\n"
- + "2. \"keys\" (string, required) A json array of keys which are litecoincash addresses or hex-encoded public keys\n"
- " [\n"
- - " \"key\" (string) litecoin address or hex-encoded public key\n"
- + " \"key\" (string) litecoincash address or hex-encoded public key\n"
- " ,...\n"
- " ]\n"
- @@ -373,7 +373,7 @@ UniValue verifymessage(const JSONRPCRequest& request)
- "verifymessage \"address\" \"signature\" \"message\"\n"
- "\nVerify a signed message\n"
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address to use for the signature.\n"
- + "1. \"address\" (string, required) The litecoincash address to use for the signature.\n"
- "2. \"signature\" (string, required) The signature provided by the signer in base 64 encoding (see signmessage).\n"
- "3. \"message\" (string, required) The message that was signed.\n"
- "\nResult:\n"
- @@ -642,7 +642,7 @@ UniValue echo(const JSONRPCRequest& request)
- "echo|echojson \"message\" ...\n"
- "\nSimply echo back the input arguments. This command is for testing.\n"
- "\nThe difference between echo and echojson is that echojson has argument conversion enabled in the client-side table in"
- - "litecoin-cli and the GUI. There is no server-side difference."
- + "litecoincash-cli and the GUI. There is no server-side difference."
- );
- return request.params;
- diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp
- index 4248d2c..2082d29 100644
- --- a/src/rpc/net.cpp
- +++ b/src/rpc/net.cpp
- @@ -156,7 +156,7 @@ UniValue getpeerinfo(const JSONRPCRequest& request)
- // their ver message.
- obj.push_back(Pair("subver", stats.cleanSubVer));
- obj.push_back(Pair("inbound", stats.fInbound));
- - obj.push_back(Pair("addnode", stats.m_manual_connection));
- + obj.push_back(Pair("addnode", stats.fAddnode));
- obj.push_back(Pair("startingheight", stats.nStartingHeight));
- if (fStateStats) {
- obj.push_back(Pair("banscore", statestats.nMisbehavior));
- @@ -247,9 +247,9 @@ UniValue disconnectnode(const JSONRPCRequest& request)
- "1. \"address\" (string, optional) The IP address/port of the node\n"
- "2. \"nodeid\" (number, optional) The node ID (see getpeerinfo for node IDs)\n"
- "\nExamples:\n"
- - + HelpExampleCli("disconnectnode", "\"192.168.0.6:8333\"")
- + + HelpExampleCli("disconnectnode", "\"192.168.0.6:62458\"")
- + HelpExampleCli("disconnectnode", "\"\" 1")
- - + HelpExampleRpc("disconnectnode", "\"192.168.0.6:8333\"")
- + + HelpExampleRpc("disconnectnode", "\"192.168.0.6:62458\"")
- + HelpExampleRpc("disconnectnode", "\"\", 1")
- );
- @@ -294,7 +294,7 @@ UniValue getaddednodeinfo(const JSONRPCRequest& request)
- " \"connected\" : true|false, (boolean) If connected\n"
- " \"addresses\" : [ (list of objects) Only when connected = true\n"
- " {\n"
- - " \"address\" : \"192.168.0.201:9333\", (string) The litecoin server IP and port we're connected to\n"
- + " \"address\" : \"192.168.0.201:9333\", (string) The litecoincash server IP and port we're connected to\n"
- " \"connected\" : \"outbound\" (string) connection, inbound or outbound\n"
- " }\n"
- " ]\n"
- diff --git a/src/rpc/protocol.cpp b/src/rpc/protocol.cpp
- index dc6bcec..db0626b 100644
- --- a/src/rpc/protocol.cpp
- +++ b/src/rpc/protocol.cpp
- @@ -66,14 +66,9 @@ static const std::string COOKIEAUTH_USER = "__cookie__";
- /** Default name for auth cookie file */
- static const std::string COOKIEAUTH_FILE = ".cookie";
- -/** Get name of RPC authentication cookie file */
- -static fs::path GetAuthCookieFile(bool temp=false)
- +fs::path GetAuthCookieFile()
- {
- - std::string arg = gArgs.GetArg("-rpccookiefile", COOKIEAUTH_FILE);
- - if (temp) {
- - arg += ".tmp";
- - }
- - fs::path path(arg);
- + fs::path path(gArgs.GetArg("-rpccookiefile", COOKIEAUTH_FILE));
- if (!path.is_complete()) path = GetDataDir() / path;
- return path;
- }
- @@ -89,20 +84,14 @@ bool GenerateAuthCookie(std::string *cookie_out)
- * these are set to 077 in init.cpp unless overridden with -sysperms.
- */
- std::ofstream file;
- - fs::path filepath_tmp = GetAuthCookieFile(true);
- - file.open(filepath_tmp.string().c_str());
- + fs::path filepath = GetAuthCookieFile();
- + file.open(filepath.string().c_str());
- if (!file.is_open()) {
- - LogPrintf("Unable to open cookie authentication file %s for writing\n", filepath_tmp.string());
- + LogPrintf("Unable to open cookie authentication file %s for writing\n", filepath.string());
- return false;
- }
- file << cookie;
- file.close();
- -
- - fs::path filepath = GetAuthCookieFile(false);
- - if (!RenameOver(filepath_tmp, filepath)) {
- - LogPrintf("Unable to rename cookie authentication file %s to %s\n", filepath_tmp.string(), filepath.string());
- - return false;
- - }
- LogPrintf("Generated RPC authentication cookie %s\n", filepath.string());
- if (cookie_out)
- diff --git a/src/rpc/protocol.h b/src/rpc/protocol.h
- index 5c9c64f..4bd4702 100644
- --- a/src/rpc/protocol.h
- +++ b/src/rpc/protocol.h
- @@ -91,6 +91,8 @@ UniValue JSONRPCReplyObj(const UniValue& result, const UniValue& error, const Un
- std::string JSONRPCReply(const UniValue& result, const UniValue& error, const UniValue& id);
- UniValue JSONRPCError(int code, const std::string& message);
- +/** Get name of RPC authentication cookie file */
- +fs::path GetAuthCookieFile();
- /** Generate a new RPC authentication cookie and write it to disk */
- bool GenerateAuthCookie(std::string *cookie_out);
- /** Read the RPC authentication cookie from disk */
- diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp
- index ac770ca..ad43f8a 100644
- --- a/src/rpc/rawtransaction.cpp
- +++ b/src/rpc/rawtransaction.cpp
- @@ -112,7 +112,7 @@ UniValue getrawtransaction(const JSONRPCRequest& request)
- " \"reqSigs\" : n, (numeric) The required sigs\n"
- " \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash'\n"
- " \"addresses\" : [ (json array of string)\n"
- - " \"address\" (string) litecoin address\n"
- + " \"address\" (string) litecoincash address\n"
- " ,...\n"
- " ]\n"
- " }\n"
- @@ -310,7 +310,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request)
- " ]\n"
- "2. \"outputs\" (object, required) a json object with outputs\n"
- " {\n"
- - " \"address\": x.xxx, (numeric or string, required) The key is the litecoin address, the numeric value (can be string) is the " + CURRENCY_UNIT + " amount\n"
- + " \"address\": x.xxx, (numeric or string, required) The key is the litecoincash address, the numeric value (can be string) is the " + CURRENCY_UNIT + " amount\n"
- " \"data\": \"hex\" (string, required) The key is \"data\", the value is hex encoded data\n"
- " ,...\n"
- " }\n"
- @@ -395,7 +395,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request)
- } else {
- CBitcoinAddress address(name_);
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Litecoin address: ")+name_);
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid LitecoinCash address: ")+name_);
- if (setAddress.count(address))
- throw JSONRPCError(RPC_INVALID_PARAMETER, std::string("Invalid parameter, duplicated address: ")+name_);
- @@ -457,7 +457,7 @@ UniValue decoderawtransaction(const JSONRPCRequest& request)
- " \"reqSigs\" : n, (numeric) The required sigs\n"
- " \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash'\n"
- " \"addresses\" : [ (json array of string)\n"
- - " \"12tvKAXCxZjSmdNbao16dKXC8tRWfcF5oc\" (string) litecoin address\n"
- + " \"12tvKAXCxZjSmdNbao16dKXC8tRWfcF5oc\" (string) litecoincash address\n"
- " ,...\n"
- " ]\n"
- " }\n"
- @@ -500,7 +500,7 @@ UniValue decodescript(const JSONRPCRequest& request)
- " \"type\":\"type\", (string) The output type\n"
- " \"reqSigs\": n, (numeric) The required signatures\n"
- " \"addresses\": [ (json array of string)\n"
- - " \"address\" (string) litecoin address\n"
- + " \"address\" (string) litecoincash address\n"
- " ,...\n"
- " ],\n"
- " \"p2sh\",\"address\" (string) address of P2SH script wrapping this redeem script (not returned if the script is already a P2SH).\n"
- @@ -824,22 +824,28 @@ UniValue signrawtransaction(const JSONRPCRequest& request)
- const CKeyStore& keystore = tempKeystore;
- #endif
- - int nHashType = SIGHASH_ALL;
- - if (request.params.size() > 3 && !request.params[3].isNull()) {
- - static std::map<std::string, int> mapSigHashValues = {
- - {std::string("ALL"), int(SIGHASH_ALL)},
- - {std::string("ALL|ANYONECANPAY"), int(SIGHASH_ALL|SIGHASH_ANYONECANPAY)},
- - {std::string("NONE"), int(SIGHASH_NONE)},
- - {std::string("NONE|ANYONECANPAY"), int(SIGHASH_NONE|SIGHASH_ANYONECANPAY)},
- - {std::string("SINGLE"), int(SIGHASH_SINGLE)},
- - {std::string("SINGLE|ANYONECANPAY"), int(SIGHASH_SINGLE|SIGHASH_ANYONECANPAY)},
- - };
- - std::string strHashType = request.params[3].get_str();
- - if (mapSigHashValues.count(strHashType))
- - nHashType = mapSigHashValues[strHashType];
- - else
- - throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid sighash param");
- - }
- + int nHashType = SIGHASH_ALL | SIGHASH_FORKID; // LitecoinCash: Replay attack protection
- + if (request.params.size() > 3 && !request.params[3].isNull()) {
- + static std::map<std::string, int> mapSigHashValues = {
- + {std::string("ALL"), int(SIGHASH_ALL)},
- + {std::string("ALL|ANYONECANPAY"), int(SIGHASH_ALL|SIGHASH_ANYONECANPAY)},
- + {std::string("NONE"), int(SIGHASH_NONE)},
- + {std::string("NONE|ANYONECANPAY"), int(SIGHASH_NONE|SIGHASH_ANYONECANPAY)},
- + {std::string("SINGLE"), int(SIGHASH_SINGLE)},
- + {std::string("SINGLE|ANYONECANPAY"), int(SIGHASH_SINGLE|SIGHASH_ANYONECANPAY)},
- + {std::string("ALL|FORKID"), int(SIGHASH_ALL|SIGHASH_FORKID)}, // LitecoinCash: Replay attack protection
- + {std::string("NONE|FORKID"), int(SIGHASH_NONE|SIGHASH_FORKID)}, // LitecoinCash: Replay attack protection
- + {std::string("SINGLE|FORKID"), int(SIGHASH_SINGLE|SIGHASH_FORKID)}, // LitecoinCash: Replay attack protection
- + {std::string("ALL|FORKID|ANYONECANPAY"), int(SIGHASH_ALL|SIGHASH_FORKID|SIGHASH_ANYONECANPAY)}, // LitecoinCash: Replay attack protection
- + {std::string("NONE|FORKID|ANYONECANPAY"), int(SIGHASH_NONE|SIGHASH_FORKID|SIGHASH_ANYONECANPAY)}, // LitecoinCash: Replay attack protection
- + {std::string("SINGLE|FORKID|ANYONECANPAY"), int(SIGHASH_SINGLE|SIGHASH_FORKID|SIGHASH_ANYONECANPAY)}, // LitecoinCash: Replay attack protection
- + };
- + std::string strHashType = request.params[3].get_str();
- + if (mapSigHashValues.count(strHashType))
- + nHashType = mapSigHashValues[strHashType] | SIGHASH_FORKID; // LitecoinCash: Replay attack protection
- + else
- + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid sighash param");
- + }
- bool fHashSingle = ((nHashType & ~SIGHASH_ANYONECANPAY) == SIGHASH_SINGLE);
- diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp
- index 8d50d02..8e85809 100644
- --- a/src/rpc/server.cpp
- +++ b/src/rpc/server.cpp
- @@ -116,7 +116,7 @@ CAmount AmountFromValue(const UniValue& value)
- if (!value.isNum() && !value.isStr())
- throw JSONRPCError(RPC_TYPE_ERROR, "Amount is not a number or string");
- CAmount amount;
- - if (!ParseFixedPoint(value.getValStr(), 8, &amount))
- + if (!ParseFixedPoint(value.getValStr(), 7, &amount)) // LitecoinCash: Digits fix
- throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount");
- if (!MoneyRange(amount))
- throw JSONRPCError(RPC_TYPE_ERROR, "Amount out of range");
- @@ -240,11 +240,11 @@ UniValue stop(const JSONRPCRequest& jsonRequest)
- if (jsonRequest.fHelp || jsonRequest.params.size() > 1)
- throw std::runtime_error(
- "stop\n"
- - "\nStop Litecoin server.");
- + "\nStop LitecoinCash server.");
- // Event loop will exit after current HTTP requests have been handled, so
- // this reply will get back to the client.
- StartShutdown();
- - return "Litecoin server stopping";
- + return "LitecoinCash server stopping";
- }
- UniValue uptime(const JSONRPCRequest& jsonRequest)
- @@ -514,13 +514,13 @@ std::vector<std::string> CRPCTable::listCommands() const
- std::string HelpExampleCli(const std::string& methodname, const std::string& args)
- {
- - return "> litecoin-cli " + methodname + " " + args + "\n";
- + return "> litecoincash-cli " + methodname + " " + args + "\n";
- }
- std::string HelpExampleRpc(const std::string& methodname, const std::string& args)
- {
- return "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", "
- - "\"method\": \"" + methodname + "\", \"params\": [" + args + "] }' -H 'content-type: text/plain;' http://127.0.0.1:9332/\n";
- + "\"method\": \"" + methodname + "\", \"params\": [" + args + "] }' -H 'content-type: text/plain;' http://127.0.0.1:62457/\n";
- }
- void RPCSetTimerInterfaceIfUnset(RPCTimerInterface *iface)
- diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp
- index f9716df..8220e28 100644
- --- a/src/script/interpreter.cpp
- +++ b/src/script/interpreter.cpp
- @@ -185,13 +185,27 @@ bool static IsDefinedHashtypeSignature(const valtype &vchSig) {
- if (vchSig.size() == 0) {
- return false;
- }
- - unsigned char nHashType = vchSig[vchSig.size() - 1] & (~(SIGHASH_ANYONECANPAY));
- + unsigned char nHashType = vchSig[vchSig.size() - 1] & (~(SIGHASH_ANYONECANPAY | SIGHASH_FORKID)); // LitecoinCash: Use SIGHASH_FORKID
- if (nHashType < SIGHASH_ALL || nHashType > SIGHASH_SINGLE)
- return false;
- return true;
- }
- +// LitecoinCash: Drop the signature in scripts when SIGHASH_FORKID is not used
- +static uint32_t GetHashType(const valtype &vchSig) {
- + if (vchSig.size() == 0)
- + return 0;
- +
- + return vchSig[vchSig.size() - 1];
- +}
- +
- +static void CleanupScriptCode(CScript &scriptCode, const std::vector<uint8_t> &vchSig, uint32_t flags) {
- + uint32_t nHashType = GetHashType(vchSig);
- + if (!(flags & SCRIPT_ENABLE_SIGHASH_FORKID) || !(nHashType & SIGHASH_FORKID))
- + scriptCode.FindAndDelete(CScript(vchSig));
- +}
- +
- bool CheckSignatureEncoding(const std::vector<unsigned char> &vchSig, unsigned int flags, ScriptError* serror) {
- // Empty signature. Not strictly DER encoded, but allowed to provide a
- // compact way to provide an invalid signature for use with CHECK(MULTI)SIG
- @@ -203,8 +217,19 @@ bool CheckSignatureEncoding(const std::vector<unsigned char> &vchSig, unsigned i
- } else if ((flags & SCRIPT_VERIFY_LOW_S) != 0 && !IsLowDERSignature(vchSig, serror)) {
- // serror is set
- return false;
- - } else if ((flags & SCRIPT_VERIFY_STRICTENC) != 0 && !IsDefinedHashtypeSignature(vchSig)) {
- - return set_error(serror, SCRIPT_ERR_SIG_HASHTYPE);
- + // LitecoinCash: Enforce fork ID checking
- + } else if ((flags & SCRIPT_VERIFY_STRICTENC) != 0) {
- + if (!IsDefinedHashtypeSignature(vchSig)) {
- + return set_error(serror, SCRIPT_ERR_SIG_HASHTYPE);
- + }
- + bool usesForkId = GetHashType(vchSig) & SIGHASH_FORKID;
- + bool forkIdEnabled = flags & SCRIPT_ENABLE_SIGHASH_FORKID;
- + if (!forkIdEnabled && usesForkId) {
- + return set_error(serror, SCRIPT_ERR_ILLEGAL_FORKID);
- + }
- + if (forkIdEnabled && !usesForkId) {
- + return set_error(serror, SCRIPT_ERR_MUST_USE_FORKID);
- + }
- }
- return true;
- }
- @@ -890,7 +915,8 @@ bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript&
- // Drop the signature in pre-segwit scripts but not segwit scripts
- if (sigversion == SIGVERSION_BASE) {
- - scriptCode.FindAndDelete(CScript(vchSig));
- + // LitecoinCash: Check fork ID before calling FindAndDelete
- + CleanupScriptCode(scriptCode, vchSig, flags);
- }
- if (!CheckSignatureEncoding(vchSig, flags, serror) || !CheckPubKeyEncoding(vchPubKey, flags, sigversion, serror)) {
- @@ -954,7 +980,8 @@ bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript&
- {
- valtype& vchSig = stacktop(-isig-k);
- if (sigversion == SIGVERSION_BASE) {
- - scriptCode.FindAndDelete(CScript(vchSig));
- + // LitecoinCash: Check fork ID before calling FindAndDelete
- + CleanupScriptCode(scriptCode, vchSig, flags);
- }
- }
- @@ -1217,6 +1244,13 @@ uint256 SignatureHash(const CScript& scriptCode, const CTransaction& txTo, unsig
- // Sighash type
- ss << nHashType;
- + /*
- + // LitecoinCash: Append some extra data to introduce more inter-chain sig variance.
- + if (nHashType & SIGHASH_FORKID){
- + ss << std::string("LCC");
- + }
- + */
- +
- return ss.GetHash();
- }
- diff --git a/src/script/interpreter.h b/src/script/interpreter.h
- index 437826b..109d099 100644
- --- a/src/script/interpreter.h
- +++ b/src/script/interpreter.h
- @@ -24,6 +24,7 @@ enum
- SIGHASH_ALL = 1,
- SIGHASH_NONE = 2,
- SIGHASH_SINGLE = 3,
- + SIGHASH_FORKID = 0x40, // LitecoinCash: Fork ID
- SIGHASH_ANYONECANPAY = 0x80,
- };
- @@ -106,6 +107,10 @@ enum
- // Public keys in segregated witness scripts must be compressed
- //
- SCRIPT_VERIFY_WITNESS_PUBKEYTYPE = (1U << 15),
- +
- + // LitecoinCash: Support SIGHASH_FORKID
- + //
- + SCRIPT_ENABLE_SIGHASH_FORKID = (1U << 16),
- };
- bool CheckSignatureEncoding(const std::vector<unsigned char> &vchSig, unsigned int flags, ScriptError* serror);
- diff --git a/src/script/ismine.cpp b/src/script/ismine.cpp
- index c3aade1..0a39619 100644
- --- a/src/script/ismine.cpp
- +++ b/src/script/ismine.cpp
- @@ -46,8 +46,6 @@ isminetype IsMine(const CKeyStore &keystore, const CTxDestination& dest, bool& i
- isminetype IsMine(const CKeyStore &keystore, const CScript& scriptPubKey, bool& isInvalid, SigVersion sigversion)
- {
- - isInvalid = false;
- -
- std::vector<valtype> vSolutions;
- txnouttype whichType;
- if (!Solver(scriptPubKey, whichType, vSolutions)) {
- diff --git a/src/script/script_error.cpp b/src/script/script_error.cpp
- index c9d13c9..0014bfc 100644
- --- a/src/script/script_error.cpp
- +++ b/src/script/script_error.cpp
- @@ -87,6 +87,13 @@ const char* ScriptErrorString(const ScriptError serror)
- return "Witness provided for non-witness script";
- case SCRIPT_ERR_WITNESS_PUBKEYTYPE:
- return "Using non-compressed keys in segwit";
- +
- + // LitecoinCash: Additional replay attack prevention error messages
- + case SCRIPT_ERR_ILLEGAL_FORKID:
- + return "Illegal use of SIGHASH_FORKID";
- + case SCRIPT_ERR_MUST_USE_FORKID:
- + return "Signature must use SIGHASH_FORKID";
- +
- case SCRIPT_ERR_UNKNOWN_ERROR:
- case SCRIPT_ERR_ERROR_COUNT:
- default: break;
- diff --git a/src/script/script_error.h b/src/script/script_error.h
- index 3200e94..df5de0e 100644
- --- a/src/script/script_error.h
- +++ b/src/script/script_error.h
- @@ -63,6 +63,10 @@ typedef enum ScriptError_t
- SCRIPT_ERR_WITNESS_MALLEATED_P2SH,
- SCRIPT_ERR_WITNESS_UNEXPECTED,
- SCRIPT_ERR_WITNESS_PUBKEYTYPE,
- +
- + // LitecoinCash: Replay attack prevention
- + SCRIPT_ERR_ILLEGAL_FORKID,
- + SCRIPT_ERR_MUST_USE_FORKID,
- SCRIPT_ERR_ERROR_COUNT
- } ScriptError;
- diff --git a/src/script/sign.cpp b/src/script/sign.cpp
- index dc50467..c182213 100644
- --- a/src/script/sign.cpp
- +++ b/src/script/sign.cpp
- @@ -417,6 +417,7 @@ bool DummySignatureCreator::CreateSig(std::vector<unsigned char>& vchSig, const
- vchSig[4 + 33] = 0x02;
- vchSig[5 + 33] = 32;
- vchSig[6 + 33] = 0x01;
- - vchSig[6 + 33 + 32] = SIGHASH_ALL;
- + // LitecoinCash: Include SIGHASH_FORKID
- + vchSig[6 + 33 + 32] = SIGHASH_ALL | SIGHASH_FORKID;
- return true;
- }
- diff --git a/src/script/sign.h b/src/script/sign.h
- index bd45862..d8ef461 100644
- --- a/src/script/sign.h
- +++ b/src/script/sign.h
- @@ -39,7 +39,7 @@ class TransactionSignatureCreator : public BaseSignatureCreator {
- const TransactionSignatureChecker checker;
- public:
- - TransactionSignatureCreator(const CKeyStore* keystoreIn, const CTransaction* txToIn, unsigned int nInIn, const CAmount& amountIn, int nHashTypeIn=SIGHASH_ALL);
- + TransactionSignatureCreator(const CKeyStore* keystoreIn, const CTransaction* txToIn, unsigned int nInIn, const CAmount& amountIn, int nHashTypeIn=SIGHASH_ALL | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- const BaseSignatureChecker& Checker() const override { return checker; }
- bool CreateSig(std::vector<unsigned char>& vchSig, const CKeyID& keyid, const CScript& scriptCode, SigVersion sigversion) const override;
- };
- diff --git a/src/secp256k1/autogen.sh b/src/secp256k1/autogen.sh
- old mode 100755
- new mode 100644
- diff --git a/src/secp256k1/src/modules/recovery/main_impl.h b/src/secp256k1/src/modules/recovery/main_impl.h
- old mode 100755
- new mode 100644
- diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp
- index d1f9e63..ffbeeb7 100644
- --- a/src/test/DoS_tests.cpp
- +++ b/src/test/DoS_tests.cpp
- @@ -40,138 +40,8 @@ CService ip(uint32_t i)
- static NodeId id = 0;
- -void UpdateLastBlockAnnounceTime(NodeId node, int64_t time_in_seconds);
- -
- BOOST_FIXTURE_TEST_SUITE(DoS_tests, TestingSetup)
- -// Test eviction of an outbound peer whose chain never advances
- -// Mock a node connection, and use mocktime to simulate a peer
- -// which never sends any headers messages. PeerLogic should
- -// decide to evict that outbound peer, after the appropriate timeouts.
- -// Note that we protect 4 outbound nodes from being subject to
- -// this logic; this test takes advantage of that protection only
- -// being applied to nodes which send headers with sufficient
- -// work.
- -BOOST_AUTO_TEST_CASE(outbound_slow_chain_eviction)
- -{
- - std::atomic<bool> interruptDummy(false);
- -
- - // Mock an outbound peer
- - CAddress addr1(ip(0xa0b0c001), NODE_NONE);
- - CNode dummyNode1(id++, ServiceFlags(NODE_NETWORK|NODE_WITNESS), 0, INVALID_SOCKET, addr1, 0, 0, CAddress(), "", /*fInboundIn=*/ false);
- - dummyNode1.SetSendVersion(PROTOCOL_VERSION);
- -
- - peerLogic->InitializeNode(&dummyNode1);
- - dummyNode1.nVersion = 1;
- - dummyNode1.fSuccessfullyConnected = true;
- -
- - // This test requires that we have a chain with non-zero work.
- - BOOST_CHECK(chainActive.Tip() != nullptr);
- - BOOST_CHECK(chainActive.Tip()->nChainWork > 0);
- -
- - // Test starts here
- - peerLogic->SendMessages(&dummyNode1, interruptDummy); // should result in getheaders
- - BOOST_CHECK(dummyNode1.vSendMsg.size() > 0);
- - dummyNode1.vSendMsg.clear();
- -
- - int64_t nStartTime = GetTime();
- - // Wait 21 minutes
- - SetMockTime(nStartTime+21*60);
- - peerLogic->SendMessages(&dummyNode1, interruptDummy); // should result in getheaders
- - BOOST_CHECK(dummyNode1.vSendMsg.size() > 0);
- - // Wait 3 more minutes
- - SetMockTime(nStartTime+24*60);
- - peerLogic->SendMessages(&dummyNode1, interruptDummy); // should result in disconnect
- - BOOST_CHECK(dummyNode1.fDisconnect == true);
- - SetMockTime(0);
- -
- - bool dummy;
- - peerLogic->FinalizeNode(dummyNode1.GetId(), dummy);
- -}
- -
- -void AddRandomOutboundPeer(std::vector<CNode *> &vNodes, PeerLogicValidation &peerLogic)
- -{
- - CAddress addr(ip(GetRandInt(0xffffffff)), NODE_NONE);
- - vNodes.emplace_back(new CNode(id++, ServiceFlags(NODE_NETWORK|NODE_WITNESS), 0, INVALID_SOCKET, addr, 0, 0, CAddress(), "", /*fInboundIn=*/ false));
- - CNode &node = *vNodes.back();
- - node.SetSendVersion(PROTOCOL_VERSION);
- -
- - peerLogic.InitializeNode(&node);
- - node.nVersion = 1;
- - node.fSuccessfullyConnected = true;
- -
- - CConnmanTest::AddNode(node);
- -}
- -
- -BOOST_AUTO_TEST_CASE(stale_tip_peer_management)
- -{
- - const Consensus::Params& consensusParams = Params().GetConsensus();
- - constexpr int nMaxOutbound = 8;
- - CConnman::Options options;
- - options.nMaxConnections = 125;
- - options.nMaxOutbound = nMaxOutbound;
- - options.nMaxFeeler = 1;
- -
- - connman->Init(options);
- - std::vector<CNode *> vNodes;
- -
- - // Mock some outbound peers
- - for (int i=0; i<nMaxOutbound; ++i) {
- - AddRandomOutboundPeer(vNodes, *peerLogic);
- - }
- -
- - peerLogic->CheckForStaleTipAndEvictPeers(consensusParams);
- -
- - // No nodes should be marked for disconnection while we have no extra peers
- - for (const CNode *node : vNodes) {
- - BOOST_CHECK(node->fDisconnect == false);
- - }
- -
- - SetMockTime(GetTime() + 3*consensusParams.nPowTargetSpacing + 1);
- -
- - // Now tip should definitely be stale, and we should look for an extra
- - // outbound peer
- - peerLogic->CheckForStaleTipAndEvictPeers(consensusParams);
- - BOOST_CHECK(connman->GetTryNewOutboundPeer());
- -
- - // Still no peers should be marked for disconnection
- - for (const CNode *node : vNodes) {
- - BOOST_CHECK(node->fDisconnect == false);
- - }
- -
- - // If we add one more peer, something should get marked for eviction
- - // on the next check (since we're mocking the time to be in the future, the
- - // required time connected check should be satisfied).
- - AddRandomOutboundPeer(vNodes, *peerLogic);
- -
- - peerLogic->CheckForStaleTipAndEvictPeers(consensusParams);
- - for (int i=0; i<nMaxOutbound; ++i) {
- - BOOST_CHECK(vNodes[i]->fDisconnect == false);
- - }
- - // Last added node should get marked for eviction
- - BOOST_CHECK(vNodes.back()->fDisconnect == true);
- -
- - vNodes.back()->fDisconnect = false;
- -
- - // Update the last announced block time for the last
- - // peer, and check that the next newest node gets evicted.
- - UpdateLastBlockAnnounceTime(vNodes.back()->GetId(), GetTime());
- -
- - peerLogic->CheckForStaleTipAndEvictPeers(consensusParams);
- - for (int i=0; i<nMaxOutbound-1; ++i) {
- - BOOST_CHECK(vNodes[i]->fDisconnect == false);
- - }
- - BOOST_CHECK(vNodes[nMaxOutbound-1]->fDisconnect == true);
- - BOOST_CHECK(vNodes.back()->fDisconnect == false);
- -
- - bool dummy;
- - for (const CNode *node : vNodes) {
- - peerLogic->FinalizeNode(node->GetId(), dummy);
- - }
- -
- - CConnmanTest::ClearNodes();
- -}
- -
- BOOST_AUTO_TEST_CASE(DoS_banning)
- {
- std::atomic<bool> interruptDummy(false);
- @@ -180,31 +50,27 @@ BOOST_AUTO_TEST_CASE(DoS_banning)
- CAddress addr1(ip(0xa0b0c001), NODE_NONE);
- CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 0, 0, CAddress(), "", true);
- dummyNode1.SetSendVersion(PROTOCOL_VERSION);
- - peerLogic->InitializeNode(&dummyNode1);
- + GetNodeSignals().InitializeNode(&dummyNode1, *connman);
- dummyNode1.nVersion = 1;
- dummyNode1.fSuccessfullyConnected = true;
- Misbehaving(dummyNode1.GetId(), 100); // Should get banned
- - peerLogic->SendMessages(&dummyNode1, interruptDummy);
- + SendMessages(&dummyNode1, *connman, interruptDummy);
- BOOST_CHECK(connman->IsBanned(addr1));
- BOOST_CHECK(!connman->IsBanned(ip(0xa0b0c001|0x0000ff00))); // Different IP, not banned
- CAddress addr2(ip(0xa0b0c002), NODE_NONE);
- CNode dummyNode2(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr2, 1, 1, CAddress(), "", true);
- dummyNode2.SetSendVersion(PROTOCOL_VERSION);
- - peerLogic->InitializeNode(&dummyNode2);
- + GetNodeSignals().InitializeNode(&dummyNode2, *connman);
- dummyNode2.nVersion = 1;
- dummyNode2.fSuccessfullyConnected = true;
- Misbehaving(dummyNode2.GetId(), 50);
- - peerLogic->SendMessages(&dummyNode2, interruptDummy);
- + SendMessages(&dummyNode2, *connman, interruptDummy);
- BOOST_CHECK(!connman->IsBanned(addr2)); // 2 not banned yet...
- BOOST_CHECK(connman->IsBanned(addr1)); // ... but 1 still should be
- Misbehaving(dummyNode2.GetId(), 50);
- - peerLogic->SendMessages(&dummyNode2, interruptDummy);
- + SendMessages(&dummyNode2, *connman, interruptDummy);
- BOOST_CHECK(connman->IsBanned(addr2));
- -
- - bool dummy;
- - peerLogic->FinalizeNode(dummyNode1.GetId(), dummy);
- - peerLogic->FinalizeNode(dummyNode2.GetId(), dummy);
- }
- BOOST_AUTO_TEST_CASE(DoS_banscore)
- @@ -216,22 +82,19 @@ BOOST_AUTO_TEST_CASE(DoS_banscore)
- CAddress addr1(ip(0xa0b0c001), NODE_NONE);
- CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 3, 1, CAddress(), "", true);
- dummyNode1.SetSendVersion(PROTOCOL_VERSION);
- - peerLogic->InitializeNode(&dummyNode1);
- + GetNodeSignals().InitializeNode(&dummyNode1, *connman);
- dummyNode1.nVersion = 1;
- dummyNode1.fSuccessfullyConnected = true;
- Misbehaving(dummyNode1.GetId(), 100);
- - peerLogic->SendMessages(&dummyNode1, interruptDummy);
- + SendMessages(&dummyNode1, *connman, interruptDummy);
- BOOST_CHECK(!connman->IsBanned(addr1));
- Misbehaving(dummyNode1.GetId(), 10);
- - peerLogic->SendMessages(&dummyNode1, interruptDummy);
- + SendMessages(&dummyNode1, *connman, interruptDummy);
- BOOST_CHECK(!connman->IsBanned(addr1));
- Misbehaving(dummyNode1.GetId(), 1);
- - peerLogic->SendMessages(&dummyNode1, interruptDummy);
- + SendMessages(&dummyNode1, *connman, interruptDummy);
- BOOST_CHECK(connman->IsBanned(addr1));
- gArgs.ForceSetArg("-banscore", std::to_string(DEFAULT_BANSCORE_THRESHOLD));
- -
- - bool dummy;
- - peerLogic->FinalizeNode(dummyNode1.GetId(), dummy);
- }
- BOOST_AUTO_TEST_CASE(DoS_bantime)
- @@ -245,12 +108,12 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
- CAddress addr(ip(0xa0b0c001), NODE_NONE);
- CNode dummyNode(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr, 4, 4, CAddress(), "", true);
- dummyNode.SetSendVersion(PROTOCOL_VERSION);
- - peerLogic->InitializeNode(&dummyNode);
- + GetNodeSignals().InitializeNode(&dummyNode, *connman);
- dummyNode.nVersion = 1;
- dummyNode.fSuccessfullyConnected = true;
- Misbehaving(dummyNode.GetId(), 100);
- - peerLogic->SendMessages(&dummyNode, interruptDummy);
- + SendMessages(&dummyNode, *connman, interruptDummy);
- BOOST_CHECK(connman->IsBanned(addr));
- SetMockTime(nStartTime+60*60);
- @@ -258,9 +121,6 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
- SetMockTime(nStartTime+60*60*24+1);
- BOOST_CHECK(!connman->IsBanned(addr));
- -
- - bool dummy;
- - peerLogic->FinalizeNode(dummyNode.GetId(), dummy);
- }
- CTransactionRef RandomOrphan()
- diff --git a/src/test/README.md b/src/test/README.md
- index de4b68b..b58c57c 100644
- --- a/src/test/README.md
- +++ b/src/test/README.md
- @@ -1,11 +1,11 @@
- # Notes
- The sources in this directory are unit test cases. Boost includes a
- -unit testing framework, and since litecoin already uses boost, it makes
- +unit testing framework, and since litecoincash already uses boost, it makes
- sense to simply use this framework rather than require developers to
- configure some other framework (we want as few impediments to creating
- unit tests as possible).
- -The build system is setup to compile an executable called "test_litecoin"
- +The build system is setup to compile an executable called "test_litecoincash"
- that runs all of the unit tests. The main source file is called
- test_bitcoin.cpp, which simply includes other files that contain the
- actual unit tests (outside of a couple required preprocessor
- diff --git a/src/test/addrman_tests.cpp b/src/test/addrman_tests.cpp
- index 2ad22d3..c65dcc1 100644
- --- a/src/test/addrman_tests.cpp
- +++ b/src/test/addrman_tests.cpp
- @@ -92,15 +92,15 @@ BOOST_AUTO_TEST_CASE(addrman_simple)
- BOOST_CHECK_EQUAL(addr_null.ToString(), "[::]:0");
- // Test: Does Addrman::Add work as expected.
- - CService addr1 = ResolveService("250.1.1.1", 8333);
- + CService addr1 = ResolveService("250.1.1.1", 62458);
- BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source));
- BOOST_CHECK_EQUAL(addrman.size(), 1);
- CAddrInfo addr_ret1 = addrman.Select();
- - BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333");
- + BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:62458");
- // Test: Does IP address deduplication work correctly.
- // Expected dup IP should not be added.
- - CService addr1_dup = ResolveService("250.1.1.1", 8333);
- + CService addr1_dup = ResolveService("250.1.1.1", 62458);
- BOOST_CHECK(!addrman.Add(CAddress(addr1_dup, NODE_NONE), source));
- BOOST_CHECK_EQUAL(addrman.size(), 1);
- @@ -111,7 +111,7 @@ BOOST_AUTO_TEST_CASE(addrman_simple)
- // hash collisions may occur. But we can always be sure of at least one
- // success.
- - CService addr2 = ResolveService("250.1.1.2", 8333);
- + CService addr2 = ResolveService("250.1.1.2", 62458);
- BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), source));
- BOOST_CHECK(addrman.size() >= 1);
- @@ -123,8 +123,8 @@ BOOST_AUTO_TEST_CASE(addrman_simple)
- // Test: AddrMan::Add multiple addresses works as expected
- std::vector<CAddress> vAddr;
- - vAddr.push_back(CAddress(ResolveService("250.1.1.3", 8333), NODE_NONE));
- - vAddr.push_back(CAddress(ResolveService("250.1.1.4", 8333), NODE_NONE));
- + vAddr.push_back(CAddress(ResolveService("250.1.1.3", 62458), NODE_NONE));
- + vAddr.push_back(CAddress(ResolveService("250.1.1.4", 62458), NODE_NONE));
- BOOST_CHECK(addrman.Add(vAddr, source));
- BOOST_CHECK(addrman.size() >= 1);
- }
- @@ -138,7 +138,7 @@ BOOST_AUTO_TEST_CASE(addrman_ports)
- BOOST_CHECK_EQUAL(addrman.size(), 0);
- // Test 7; Addr with same IP but diff port does not replace existing addr.
- - CService addr1 = ResolveService("250.1.1.1", 8333);
- + CService addr1 = ResolveService("250.1.1.1", 62458);
- addrman.Add(CAddress(addr1, NODE_NONE), source);
- BOOST_CHECK_EQUAL(addrman.size(), 1);
- @@ -146,7 +146,7 @@ BOOST_AUTO_TEST_CASE(addrman_ports)
- addrman.Add(CAddress(addr1_port, NODE_NONE), source);
- BOOST_CHECK_EQUAL(addrman.size(), 1);
- CAddrInfo addr_ret2 = addrman.Select();
- - BOOST_CHECK_EQUAL(addr_ret2.ToString(), "250.1.1.1:8333");
- + BOOST_CHECK_EQUAL(addr_ret2.ToString(), "250.1.1.1:62458");
- // Test: Add same IP but diff port to tried table, it doesn't get added.
- // Perhaps this is not ideal behavior but it is the current behavior.
- @@ -154,7 +154,7 @@ BOOST_AUTO_TEST_CASE(addrman_ports)
- BOOST_CHECK_EQUAL(addrman.size(), 1);
- bool newOnly = true;
- CAddrInfo addr_ret3 = addrman.Select(newOnly);
- - BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333");
- + BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:62458");
- }
- @@ -165,13 +165,13 @@ BOOST_AUTO_TEST_CASE(addrman_select)
- CNetAddr source = ResolveIP("252.2.2.2");
- // Test: Select from new with 1 addr in new.
- - CService addr1 = ResolveService("250.1.1.1", 8333);
- + CService addr1 = ResolveService("250.1.1.1", 62458);
- addrman.Add(CAddress(addr1, NODE_NONE), source);
- BOOST_CHECK_EQUAL(addrman.size(), 1);
- bool newOnly = true;
- CAddrInfo addr_ret1 = addrman.Select(newOnly);
- - BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333");
- + BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:62458");
- // Test: move addr to tried, select from new expected nothing returned.
- addrman.Good(CAddress(addr1, NODE_NONE));
- @@ -180,30 +180,30 @@ BOOST_AUTO_TEST_CASE(addrman_select)
- BOOST_CHECK_EQUAL(addr_ret2.ToString(), "[::]:0");
- CAddrInfo addr_ret3 = addrman.Select();
- - BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333");
- + BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:62458");
- BOOST_CHECK_EQUAL(addrman.size(), 1);
- // Add three addresses to new table.
- - CService addr2 = ResolveService("250.3.1.1", 8333);
- + CService addr2 = ResolveService("250.3.1.1", 62458);
- CService addr3 = ResolveService("250.3.2.2", 9999);
- CService addr4 = ResolveService("250.3.3.3", 9999);
- - addrman.Add(CAddress(addr2, NODE_NONE), ResolveService("250.3.1.1", 8333));
- - addrman.Add(CAddress(addr3, NODE_NONE), ResolveService("250.3.1.1", 8333));
- - addrman.Add(CAddress(addr4, NODE_NONE), ResolveService("250.4.1.1", 8333));
- + addrman.Add(CAddress(addr2, NODE_NONE), ResolveService("250.3.1.1", 62458));
- + addrman.Add(CAddress(addr3, NODE_NONE), ResolveService("250.3.1.1", 62458));
- + addrman.Add(CAddress(addr4, NODE_NONE), ResolveService("250.4.1.1", 62458));
- // Add three addresses to tried table.
- - CService addr5 = ResolveService("250.4.4.4", 8333);
- + CService addr5 = ResolveService("250.4.4.4", 62458);
- CService addr6 = ResolveService("250.4.5.5", 7777);
- - CService addr7 = ResolveService("250.4.6.6", 8333);
- + CService addr7 = ResolveService("250.4.6.6", 62458);
- - addrman.Add(CAddress(addr5, NODE_NONE), ResolveService("250.3.1.1", 8333));
- + addrman.Add(CAddress(addr5, NODE_NONE), ResolveService("250.3.1.1", 62458));
- addrman.Good(CAddress(addr5, NODE_NONE));
- - addrman.Add(CAddress(addr6, NODE_NONE), ResolveService("250.3.1.1", 8333));
- + addrman.Add(CAddress(addr6, NODE_NONE), ResolveService("250.3.1.1", 62458));
- addrman.Good(CAddress(addr6, NODE_NONE));
- - addrman.Add(CAddress(addr7, NODE_NONE), ResolveService("250.1.1.3", 8333));
- + addrman.Add(CAddress(addr7, NODE_NONE), ResolveService("250.1.1.3", 62458));
- addrman.Good(CAddress(addr7, NODE_NONE));
- // Test: 6 addrs + 1 addr from last test = 7.
- @@ -276,9 +276,9 @@ BOOST_AUTO_TEST_CASE(addrman_find)
- BOOST_CHECK_EQUAL(addrman.size(), 0);
- - CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE);
- + CAddress addr1 = CAddress(ResolveService("250.1.2.1", 62458), NODE_NONE);
- CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE);
- - CAddress addr3 = CAddress(ResolveService("251.255.2.1", 8333), NODE_NONE);
- + CAddress addr3 = CAddress(ResolveService("251.255.2.1", 62458), NODE_NONE);
- CNetAddr source1 = ResolveIP("250.1.2.1");
- CNetAddr source2 = ResolveIP("250.1.2.2");
- @@ -290,7 +290,7 @@ BOOST_AUTO_TEST_CASE(addrman_find)
- // Test: ensure Find returns an IP matching what we searched on.
- CAddrInfo* info1 = addrman.Find(addr1);
- BOOST_REQUIRE(info1);
- - BOOST_CHECK_EQUAL(info1->ToString(), "250.1.2.1:8333");
- + BOOST_CHECK_EQUAL(info1->ToString(), "250.1.2.1:62458");
- // Test 18; Find does not discriminate by port number.
- CAddrInfo* info2 = addrman.Find(addr2);
- @@ -300,7 +300,7 @@ BOOST_AUTO_TEST_CASE(addrman_find)
- // Test: Find returns another IP matching what we searched on.
- CAddrInfo* info3 = addrman.Find(addr3);
- BOOST_REQUIRE(info3);
- - BOOST_CHECK_EQUAL(info3->ToString(), "251.255.2.1:8333");
- + BOOST_CHECK_EQUAL(info3->ToString(), "251.255.2.1:62458");
- }
- BOOST_AUTO_TEST_CASE(addrman_create)
- @@ -309,17 +309,17 @@ BOOST_AUTO_TEST_CASE(addrman_create)
- BOOST_CHECK_EQUAL(addrman.size(), 0);
- - CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE);
- + CAddress addr1 = CAddress(ResolveService("250.1.2.1", 62458), NODE_NONE);
- CNetAddr source1 = ResolveIP("250.1.2.1");
- int nId;
- CAddrInfo* pinfo = addrman.Create(addr1, source1, &nId);
- // Test: The result should be the same as the input addr.
- - BOOST_CHECK_EQUAL(pinfo->ToString(), "250.1.2.1:8333");
- + BOOST_CHECK_EQUAL(pinfo->ToString(), "250.1.2.1:62458");
- CAddrInfo* info2 = addrman.Find(addr1);
- - BOOST_CHECK_EQUAL(info2->ToString(), "250.1.2.1:8333");
- + BOOST_CHECK_EQUAL(info2->ToString(), "250.1.2.1:62458");
- }
- @@ -329,7 +329,7 @@ BOOST_AUTO_TEST_CASE(addrman_delete)
- BOOST_CHECK_EQUAL(addrman.size(), 0);
- - CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE);
- + CAddress addr1 = CAddress(ResolveService("250.1.2.1", 62458), NODE_NONE);
- CNetAddr source1 = ResolveIP("250.1.2.1");
- int nId;
- @@ -353,15 +353,15 @@ BOOST_AUTO_TEST_CASE(addrman_getaddr)
- std::vector<CAddress> vAddr1 = addrman.GetAddr();
- BOOST_CHECK_EQUAL(vAddr1.size(), 0);
- - CAddress addr1 = CAddress(ResolveService("250.250.2.1", 8333), NODE_NONE);
- + CAddress addr1 = CAddress(ResolveService("250.250.2.1", 62458), NODE_NONE);
- addr1.nTime = GetAdjustedTime(); // Set time so isTerrible = false
- CAddress addr2 = CAddress(ResolveService("250.251.2.2", 9999), NODE_NONE);
- addr2.nTime = GetAdjustedTime();
- - CAddress addr3 = CAddress(ResolveService("251.252.2.3", 8333), NODE_NONE);
- + CAddress addr3 = CAddress(ResolveService("251.252.2.3", 62458), NODE_NONE);
- addr3.nTime = GetAdjustedTime();
- - CAddress addr4 = CAddress(ResolveService("252.253.3.4", 8333), NODE_NONE);
- + CAddress addr4 = CAddress(ResolveService("252.253.3.4", 62458), NODE_NONE);
- addr4.nTime = GetAdjustedTime();
- - CAddress addr5 = CAddress(ResolveService("252.254.4.5", 8333), NODE_NONE);
- + CAddress addr5 = CAddress(ResolveService("252.254.4.5", 62458), NODE_NONE);
- addr5.nTime = GetAdjustedTime();
- CNetAddr source1 = ResolveIP("250.1.2.1");
- CNetAddr source2 = ResolveIP("250.2.3.3");
- @@ -408,7 +408,7 @@ BOOST_AUTO_TEST_CASE(caddrinfo_get_tried_bucket)
- {
- CAddrManTest addrman;
- - CAddress addr1 = CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE);
- + CAddress addr1 = CAddress(ResolveService("250.1.1.1", 62458), NODE_NONE);
- CAddress addr2 = CAddress(ResolveService("250.1.1.1", 9999), NODE_NONE);
- CNetAddr source1 = ResolveIP("250.1.1.1");
- @@ -420,7 +420,7 @@ BOOST_AUTO_TEST_CASE(caddrinfo_get_tried_bucket)
- uint256 nKey2 = (uint256)(CHashWriter(SER_GETHASH, 0) << 2).GetHash();
- - BOOST_CHECK_EQUAL(info1.GetTriedBucket(nKey1), 40);
- + BOOST_CHECK_EQUAL(info1.GetTriedBucket(nKey1), 62);
- // Test: Make sure key actually randomizes bucket placement. A fail on
- // this test could be a security issue.
- @@ -462,7 +462,7 @@ BOOST_AUTO_TEST_CASE(caddrinfo_get_new_bucket)
- {
- CAddrManTest addrman;
- - CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE);
- + CAddress addr1 = CAddress(ResolveService("250.1.2.1", 62458), NODE_NONE);
- CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE);
- CNetAddr source1 = ResolveIP("250.1.2.1");
- diff --git a/src/test/amount_tests.cpp b/src/test/amount_tests.cpp
- index ec9078a..3bb75b9 100644
- --- a/src/test/amount_tests.cpp
- +++ b/src/test/amount_tests.cpp
- @@ -102,7 +102,7 @@ BOOST_AUTO_TEST_CASE(ToStringTest)
- {
- CFeeRate feeRate;
- feeRate = CFeeRate(1);
- - BOOST_CHECK_EQUAL(feeRate.ToString(), "0.00000001 LTC/kB");
- + BOOST_CHECK_EQUAL(feeRate.ToString(), "0.0000001 LCC/kB");
- }
- BOOST_AUTO_TEST_SUITE_END()
- diff --git a/src/test/compress_tests.cpp b/src/test/compress_tests.cpp
- index 08f4f4d..4a3e018 100644
- --- a/src/test/compress_tests.cpp
- +++ b/src/test/compress_tests.cpp
- @@ -39,12 +39,13 @@ bool static TestPair(uint64_t dec, uint64_t enc) {
- BOOST_AUTO_TEST_CASE(compress_amounts)
- {
- - BOOST_CHECK(TestPair( 0, 0x0));
- - BOOST_CHECK(TestPair( 1, 0x1));
- - BOOST_CHECK(TestPair( CENT, 0x7));
- - BOOST_CHECK(TestPair( COIN, 0x9));
- - BOOST_CHECK(TestPair( 50*COIN, 0x32));
- - BOOST_CHECK(TestPair(84000000*COIN, 0x501BD00));
- +
- + BOOST_CHECK(TestPair( 0, 0x0));
- + BOOST_CHECK(TestPair( 1, 0x1));
- + BOOST_CHECK(TestPair( CENT*COIN_SCALE, 0x7));
- + BOOST_CHECK(TestPair( COIN*COIN_SCALE, 0x9));
- + BOOST_CHECK(TestPair( 50*COIN*COIN_SCALE, 0x32));
- + BOOST_CHECK(TestPair(84000000*COIN*COIN_SCALE, 0x501BD00));
- for (uint64_t i = 1; i <= NUM_MULTIPLES_UNIT; i++)
- BOOST_CHECK(TestEncode(i));
- diff --git a/src/test/data/base58_keys_valid.json b/src/test/data/base58_keys_valid.json
- index 3e91309..4e59ef0 100644
- --- a/src/test/data/base58_keys_valid.json
- +++ b/src/test/data/base58_keys_valid.json
- @@ -1,6 +1,6 @@
- [
- [
- - "LdwLvykqj2nUH3MWcut6mtjHxVxVFC7st5",
- + "CbBHEoo5XRWwvNZn8XDj5PHZNQod2TGVyH",
- "cd463dbc6f8076c7021f2766b36ea7e19c5c9e2e",
- {
- "addrType": "pubkey",
- @@ -18,7 +18,7 @@
- }
- ],
- [
- - "mmCKZS7toE69QgXNs1JZcjW6LFj8LfUbz6",
- + "JQDJc3rJWxaZoD3VCUeteCzbXxCz1v2m18",
- "3e4a9a4a79dcad8800b6cfcdf102bf98064b7454",
- {
- "addrType": "pubkey",
- @@ -72,7 +72,7 @@
- }
- ],
- [
- - "LWZR9ybwmT8vSXP6tmrBX4b6nE9o94AjQG",
- + "CToMToeBZqsQ5rbNQPBopZ9NC8zvuZ1GqR",
- "7c57bc50a38d8377ad55260f29f2c8619846ef08",
- {
- "addrType": "pubkey",
- @@ -90,7 +90,7 @@
- }
- ],
- [
- - "mvJg85FLYqN7xAcZeFZRVg7pMbJ53BqKmy",
- + "JZKfAgykGZrYLh8fyiukX9cKZHmvd4Vfcr",
- "a237653c5ae7e18e840d6463d380701ce3ba5035",
- {
- "addrType": "pubkey",
- @@ -144,7 +144,7 @@
- }
- ],
- [
- - "LWkdEB9SHUfuBiTvZofK2LqYE4RTTtUcqi",
- + "CTzZY1Bg5sQNq3gC5QzwKqPodyGbKNDb7U",
- "7e766382cb564021bcbc273e23569dcaed536ac6",
- {
- "addrType": "pubkey",
- @@ -162,7 +162,7 @@
- }
- ],
- [
- - "mtei3esVvHhww4Rw9FYnMdTUTVvbpWhLfF",
- + "JXfh6Gbue2CNKax3Uiu7P6wyfCQTTz6XCZ",
- "901111ab28cf850a5b6846e94e8c0c4a505603a9",
- {
- "addrType": "pubkey",
- @@ -216,7 +216,7 @@
- }
- ],
- [
- - "LVcGHJcTv1ctR6GLRXxR4SQSsycdmQ6pwZ",
- + "CSrCb8ehiQMN4RUbw9J3MvxiHtTmcJ8U8o",
- "71e9734a1283f2368bbd5a397d3c7a22610b2958",
- {
- "addrType": "pubkey",
- @@ -234,7 +234,7 @@
- }
- ],
- [
- - "myWBvpVEeY86YvJLb5kwH2iWbdXPGjTtZk",
- + "JcXAySDeNGcWwSpSvZ7GJWD1oL1EspMwxJ",
- "c54d3aa920e78e56b72c0076d36e99bc87058397",
- {
- "addrType": "pubkey",
- @@ -288,7 +288,7 @@
- }
- ],
- [
- - "LPD8ZwGjE4WmQ1EEnjZHrvofSyvGtbEWsH",
- + "CLT4smJy2TFF3LSWJLtvARMvrtmQcA1cNw",
- "2bb8b0991f396d7f411c2227af00cc09d1ae0adf",
- {
- "addrType": "pubkey",
- @@ -306,7 +306,7 @@
- }
- ],
- [
- - "mhv2Ti1xy9CsWoYgnEjehEunbhFiyFwLAp",
- + "JLw1WKkNgshHuL4o7i5yiiQHoPjacoqMG1",
- "1a4d4bf230aabafd3a425770b8b98700bf06e370",
- {
- "addrType": "pubkey",
- @@ -360,7 +360,7 @@
- }
- ],
- [
- - "LPGeGFBPCVLHdGVD1i1oikzD92XZoTEVyh",
- + "CLWaa5Dczt4mGbhUXKMS2FYUYwNhY6CKfn",
- "2c62b9d0c13b499167506863248f473416b18850",
- {
- "addrType": "pubkey",
- @@ -378,7 +378,7 @@
- }
- ],
- [
- - "mhvk8vH4LaAgUBUJsU4UtL4KSWLavssToW",
- + "JLwjBY1U4Jf6rhzRCwQouoYpeCpSXkzoPo",
- "1a701609b7d938f932d9517f965eb938ec45d067",
- {
- "addrType": "pubkey",
- @@ -432,7 +432,7 @@
- }
- ],
- [
- - "LhLu7S8qdG7YZR1GgSP8g4aqN8nXCRLkzX",
- + "CeaqRGB5Rer2CkDYC3ikyZ96n3dewcCiJQ",
- "f2a30c60e4abcbbdcdf7cb34520b742ae07b6018",
- {
- "addrType": "pubkey",
- diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json
- index 698e898..49da825 100644
- --- a/src/test/data/script_tests.json
- +++ b/src/test/data/script_tests.json
- @@ -1254,10 +1254,10 @@
- ["0x27 0x302402107777777777777777777777777777777702108777777777777777777777777777777701", "0 CHECKSIG NOT", "DERSIG", "SIG_DER", "Negative S is incorrectly encoded for DERSIG"],
- ["Some basic segwit checks"],
- -[["00", 0.00000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "P2SH,WITNESS", "EVAL_FALSE", "Invalid witness script"],
- -[["51", 0.00000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "P2SH,WITNESS", "WITNESS_PROGRAM_MISMATCH", "Witness script hash mismatch"],
- -[["00", 0.00000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "", "OK", "Invalid witness script without WITNESS"],
- -[["51", 0.00000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "", "OK", "Witness script hash mismatch without WITNESS"],
- +[["00", 0.0000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "P2SH,WITNESS", "EVAL_FALSE", "Invalid witness script"],
- +[["51", 0.0000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "P2SH,WITNESS", "WITNESS_PROGRAM_MISMATCH", "Witness script hash mismatch"],
- +[["00", 0.0000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "", "OK", "Invalid witness script without WITNESS"],
- +[["51", 0.0000000 ], "", "0 0x206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", "", "OK", "Witness script hash mismatch without WITNESS"],
- ["Automatically generated test cases"],
- [
- @@ -1861,7 +1861,7 @@
- [
- "304402200d461c140cfdfcf36b94961db57ae8c18d1cb80e9d95a9e47ac22470c1bf125502201c8dc1cbfef6a3ef90acbbb992ca22fe9466ee6f9d4898eda277a7ac3ab4b25101",
- "410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0xb95237b48faaa69eb078e1170be3b5cbb3fddf16d0a991e14ad274f7b33a4f64",
- @@ -1873,7 +1873,7 @@
- [
- "304402201e7216e5ccb3b61d46946ec6cc7e8c4e0117d13ac2fd4b152197e4805191c74202203e9903e33e84d9ee1dd13fb057afb7ccfb47006c23f6a067185efbc9dd780fc501",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5",
- @@ -1885,7 +1885,7 @@
- [
- "3044022066e02c19a513049d49349cf5311a1b012b7c4fae023795a18ab1d91c23496c22022025e216342c8e07ce8ef51e8daee88f84306a9de66236cab230bb63067ded1ad301",
- "410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x0020b95237b48faaa69eb078e1170be3b5cbb3fddf16d0a991e14ad274f7b33a4f64",
- "HASH160 0x14 0xf386c2ba255cc56d20cfa6ea8b062f8b59945518 EQUAL",
- @@ -1897,7 +1897,7 @@
- [
- "304402200929d11561cd958460371200f82e9cae64c727a495715a31828e27a7ad57b36d0220361732ced04a6f97351ecca21a56d0b8cd4932c1da1f8f569a2b68e5e48aed7801",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000001
- + 0.0000001
- ],
- "0x16 0x001491b24bf9f5288532960ac687abb035127b1d28a5",
- "HASH160 0x14 0x17743beb429c55c942d2ec703b98c4d57c2df5c6 EQUAL",
- @@ -1909,7 +1909,7 @@
- [
- "304402202589f0512cb2408fb08ed9bd24f85eb3059744d9e4f2262d0b7f1338cff6e8b902206c0978f449693e0578c71bc543b11079fd0baae700ee5e9a6bee94db490af9fc01",
- "41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x20 0xac8ebd9e52c17619a381fa4f71aebb696087c6ef17c960fd0587addad99c0610",
- @@ -1921,7 +1921,7 @@
- [
- "304402206ef7fdb2986325d37c6eb1a8bb24aeb46dede112ed8fc76c7d7500b9b83c0d3d02201edc2322c794fe2d6b0bd73ed319e714aa9b86d8891961530d5c9b7156b60d4e01",
- "048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x14 0x7cf9c846cd4882efec4bf07e44ebdad495c94f4b",
- @@ -1933,7 +1933,7 @@
- [
- "30440220069ea3581afaf8187f63feee1fd2bd1f9c0dc71ea7d6e8a8b07ee2ebcf824bf402201a4fdef4c532eae59223be1eda6a397fc835142d4ddc6c74f4aa85b766a5c16f01",
- "41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac",
- - 0.00000000
- + 0.0000000
- ],
- "0x22 0x0020ac8ebd9e52c17619a381fa4f71aebb696087c6ef17c960fd0587addad99c0610",
- "HASH160 0x14 0x61039a003883787c0d6ebc66d97fdabe8e31449d EQUAL",
- @@ -1945,7 +1945,7 @@
- [
- "304402204209e49457c2358f80d0256bc24535b8754c14d08840fc4be762d6f5a0aed80b02202eaf7d8fc8d62f60c67adcd99295528d0e491ae93c195cec5a67e7a09532a88001",
- "048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
- - 0.00000000
- + 0.0000000
- ],
- "0x16 0x00147cf9c846cd4882efec4bf07e44ebdad495c94f4b",
- "HASH160 0x14 0x4e0c2aed91315303fc6a1dc4c7bc21c88f75402e EQUAL",
- @@ -1957,7 +1957,7 @@
- [
- "304402202589f0512cb2408fb08ed9bd24f85eb3059744d9e4f2262d0b7f1338cff6e8b902206c0978f449693e0578c71bc543b11079fd0baae700ee5e9a6bee94db490af9fc01",
- "41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x20 0xac8ebd9e52c17619a381fa4f71aebb696087c6ef17c960fd0587addad99c0610",
- @@ -1969,7 +1969,7 @@
- [
- "304402206ef7fdb2986325d37c6eb1a8bb24aeb46dede112ed8fc76c7d7500b9b83c0d3d02201edc2322c794fe2d6b0bd73ed319e714aa9b86d8891961530d5c9b7156b60d4e01",
- "048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x14 0x7cf9c846cd4882efec4bf07e44ebdad495c94f4b",
- @@ -1981,7 +1981,7 @@
- [
- "30440220069ea3581afaf8187f63feee1fd2bd1f9c0dc71ea7d6e8a8b07ee2ebcf824bf402201a4fdef4c532eae59223be1eda6a397fc835142d4ddc6c74f4aa85b766a5c16f01",
- "41048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26cafac",
- - 0.00000000
- + 0.0000000
- ],
- "0x22 0x0020ac8ebd9e52c17619a381fa4f71aebb696087c6ef17c960fd0587addad99c0610",
- "HASH160 0x14 0x61039a003883787c0d6ebc66d97fdabe8e31449d EQUAL",
- @@ -1993,7 +1993,7 @@
- [
- "304402204209e49457c2358f80d0256bc24535b8754c14d08840fc4be762d6f5a0aed80b02202eaf7d8fc8d62f60c67adcd99295528d0e491ae93c195cec5a67e7a09532a88001",
- "048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
- - 0.00000000
- + 0.0000000
- ],
- "0x16 0x00147cf9c846cd4882efec4bf07e44ebdad495c94f4b",
- "HASH160 0x14 0x4e0c2aed91315303fc6a1dc4c7bc21c88f75402e EQUAL",
- @@ -2005,7 +2005,7 @@
- [
- "3044022066faa86e74e8b30e82691b985b373de4f9e26dc144ec399c4f066aa59308e7c202204712b86f28c32503faa051dbeabff2c238ece861abc36c5e0b40b1139ca222f001",
- "410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x20 0xb95237b48faaa69eb078e1170be3b5cbb3fddf16d0a991e14ad274f7b33a4f64",
- @@ -2017,7 +2017,7 @@
- [
- "304402203b3389b87448d7dfdb5e82fb854fcf92d7925f9938ea5444e36abef02c3d6a9602202410bc3265049abb07fd2e252c65ab7034d95c9d5acccabe9fadbdc63a52712601",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5",
- @@ -2029,7 +2029,7 @@
- [
- "3044022000a30c4cfc10e4387be528613575434826ad3c15587475e0df8ce3b1746aa210022008149265e4f8e9dafe1f3ea50d90cb425e9e40ea7ebdd383069a7cfa2b77004701",
- "410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
- - 0.00000000
- + 0.0000000
- ],
- "0x22 0x0020b95237b48faaa69eb078e1170be3b5cbb3fddf16d0a991e14ad274f7b33a4f64",
- "HASH160 0x14 0xf386c2ba255cc56d20cfa6ea8b062f8b59945518 EQUAL",
- @@ -2041,7 +2041,7 @@
- [
- "304402204fc3a2cd61a47913f2a5f9107d0ad4a504c7b31ee2d6b3b2f38c2b10ee031e940220055d58b7c3c281aaa381d8f486ac0f3e361939acfd568046cb6a311cdfa974cf01",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000000
- + 0.0000000
- ],
- "0x16 0x001491b24bf9f5288532960ac687abb035127b1d28a5",
- "HASH160 0x14 0x17743beb429c55c942d2ec703b98c4d57c2df5c6 EQUAL",
- @@ -2053,7 +2053,7 @@
- [
- "304402205ae57ae0534c05ca9981c8a6cdf353b505eaacb7375f96681a2d1a4ba6f02f84022056248e68643b7d8ce7c7d128c9f1f348bcab8be15d094ad5cadd24251a28df8001",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "1 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5",
- @@ -2065,7 +2065,7 @@
- [
- "3044022064100ca0e2a33332136775a86cd83d0230e58b9aebb889c5ac952abff79a46ef02205f1bf900e022039ad3091bdaf27ac2aef3eae9ed9f190d821d3e508405b9513101",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x1f 0xb34b78da162751647974d5cb7410aa428ad339dbf7d1e16e833f68a0cbf1c3",
- @@ -2084,7 +2084,7 @@
- [
- "3044022039105b995a5f448639a997a5c90fda06f50b49df30c3bdb6663217bf79323db002206fecd54269dec569fcc517178880eb58bb40f381a282bb75766ff3637d5f4b4301",
- "400479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x20 0xb95237b48faaa69eb078e1170be3b5cbb3fddf16d0a991e14ad274f7b33a4f64",
- @@ -2097,7 +2097,7 @@
- "304402201a96950593cb0af32d080b0f193517f4559241a8ebd1e95e414533ad64a3f423022047f4f6d3095c23235bdff3aeff480d0529c027a3f093cb265b7cbf148553b85101",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- "",
- - 0.00000000
- + 0.0000000
- ],
- "",
- "0 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5",
- @@ -2109,7 +2109,7 @@
- [
- "304402201a96950593cb0af32d080b0f193517f4559241a8ebd1e95e414533ad64a3f423022047f4f6d3095c23235bdff3aeff480d0529c027a3f093cb265b7cbf148553b85101",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000000
- + 0.0000000
- ],
- "11",
- "0 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5",
- @@ -2121,7 +2121,7 @@
- [
- "304402204209e49457c2358f80d0256bc24535b8754c14d08840fc4be762d6f5a0aed80b02202eaf7d8fc8d62f60c67adcd99295528d0e491ae93c195cec5a67e7a09532a88001",
- "048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
- - 0.00000000
- + 0.0000000
- ],
- "11 0x16 0x00147cf9c846cd4882efec4bf07e44ebdad495c94f4b",
- "HASH160 0x14 0x4e0c2aed91315303fc6a1dc4c7bc21c88f75402e EQUAL",
- @@ -2132,7 +2132,7 @@
- [
- [
- "",
- - 0.00000000
- + 0.0000000
- ],
- "0x47 0x304402200a5c6163f07b8d3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
- "0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
- @@ -2146,7 +2146,7 @@
- [
- "304402204256146fcf8e73b0fd817ffa2a4e408ff0418ff987dd08a4f485b62546f6c43c02203f3c8c3e2febc051e1222867f5f9d0eaf039d6792911c10940aa3cc74123378e01",
- "210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x1863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262",
- @@ -2158,7 +2158,7 @@
- [
- "304402204edf27486f11432466b744df533e1acac727e0c83e5f912eb289a3df5bf8035f022075809fdd876ede40ad21667eba8b7e96394938f9c9c50f11b6a1280cce2cea8601",
- "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x14 0x751e76e8199196d454941c45d1b3a323f1433bd6",
- @@ -2170,7 +2170,7 @@
- [
- "304402203a549090cc46bce1e5e95c4922ea2c12747988e0207b04c42f81cdbe87bb1539022050f57a245b875fd5119c419aaf050bcdf41384f0765f04b809e5bced1fe7093d01",
- "210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262",
- "HASH160 0x14 0xe4300531190587e3880d4c3004f5355d88ff928d EQUAL",
- @@ -2182,7 +2182,7 @@
- [
- "304402201bc0d53046827f4a35a3166e33e3b3366c4085540dc383b95d21ed2ab11e368a0220333e78c6231214f5f8e59621e15d7eeab0d4e4d0796437e00bfbd2680c5f9c1701",
- "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
- - 0.00000001
- + 0.0000001
- ],
- "0x16 0x0014751e76e8199196d454941c45d1b3a323f1433bd6",
- "HASH160 0x14 0xbcfeb728b584253d5f3f70bcb780e9ef218a68f4 EQUAL",
- @@ -2196,7 +2196,7 @@
- [
- "304402200d461c140cfdfcf36b94961db57ae8c18d1cb80e9d95a9e47ac22470c1bf125502201c8dc1cbfef6a3ef90acbbb992ca22fe9466ee6f9d4898eda277a7ac3ab4b25101",
- "410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0xb95237b48faaa69eb078e1170be3b5cbb3fddf16d0a991e14ad274f7b33a4f64",
- @@ -2208,7 +2208,7 @@
- [
- "304402201e7216e5ccb3b61d46946ec6cc7e8c4e0117d13ac2fd4b152197e4805191c74202203e9903e33e84d9ee1dd13fb057afb7ccfb47006c23f6a067185efbc9dd780fc501",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x14 0x91b24bf9f5288532960ac687abb035127b1d28a5",
- @@ -2220,7 +2220,7 @@
- [
- "3044022066e02c19a513049d49349cf5311a1b012b7c4fae023795a18ab1d91c23496c22022025e216342c8e07ce8ef51e8daee88f84306a9de66236cab230bb63067ded1ad301",
- "410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x0020b95237b48faaa69eb078e1170be3b5cbb3fddf16d0a991e14ad274f7b33a4f64",
- "HASH160 0x14 0xf386c2ba255cc56d20cfa6ea8b062f8b59945518 EQUAL",
- @@ -2232,7 +2232,7 @@
- [
- "304402200929d11561cd958460371200f82e9cae64c727a495715a31828e27a7ad57b36d0220361732ced04a6f97351ecca21a56d0b8cd4932c1da1f8f569a2b68e5e48aed7801",
- "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
- - 0.00000001
- + 0.0000001
- ],
- "0x16 0x001491b24bf9f5288532960ac687abb035127b1d28a5",
- "HASH160 0x14 0x17743beb429c55c942d2ec703b98c4d57c2df5c6 EQUAL",
- @@ -2247,7 +2247,7 @@
- "",
- "304402207eb8a59b5c65fc3f6aeef77066556ed5c541948a53a3ba7f7c375b8eed76ee7502201e036a7a9a98ff919ff94dc905d67a1ec006f79ef7cff0708485c8bb79dce38e01",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x06c24420938f0fa3c1cb2707d867154220dca365cdbfa0dd2a83854730221460",
- @@ -2260,7 +2260,7 @@
- "",
- "3044022033706aed33b8155d5486df3b9bca8cdd3bd4bdb5436dce46d72cdaba51d22b4002203626e94fe53a178af46624f17315c6931f20a30b103f5e044e1eda0c3fe185c601",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x002006c24420938f0fa3c1cb2707d867154220dca365cdbfa0dd2a83854730221460",
- "HASH160 0x14 0x26282aad7c29369d15fed062a778b6100d31a340 EQUAL",
- @@ -2273,7 +2273,7 @@
- "",
- "304402204048b7371ab1c544362efb89af0c80154747d665aa4fcfb2edfd2d161e57b42e02207e043748e96637080ffc3acbd4dcc6fee1e58d30f6d1269535f32188e5ddae7301",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x06c24420938f0fa3c1cb2707d867154220dca365cdbfa0dd2a83854730221460",
- @@ -2286,7 +2286,7 @@
- "",
- "3044022073902ef0b8a554c36c44cc03c1b64df96ce2914ebcf946f5bb36078fd5245cdf02205b148f1ba127065fb8c83a5a9576f2dcd111739788ed4bb3ee08b2bd3860c91c01",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x002006c24420938f0fa3c1cb2707d867154220dca365cdbfa0dd2a83854730221460",
- "HASH160 0x14 0x26282aad7c29369d15fed062a778b6100d31a340 EQUAL",
- @@ -2301,7 +2301,7 @@
- "",
- "304402202d092ededd1f060609dbf8cb76950634ff42b3e62cf4adb69ab92397b07d742302204ff886f8d0817491a96d1daccdcc820f6feb122ee6230143303100db37dfa79f01",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x08a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- @@ -2314,7 +2314,7 @@
- "",
- "304402202dd7e91243f2235481ffb626c3b7baf2c859ae3a5a77fb750ef97b99a8125dc002204960de3d3c3ab9496e218ec57e5240e0e10a6f9546316fe240c216d45116d29301",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x002008a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- "HASH160 0x14 0x6f5ecd4b83b77f3c438f5214eff96454934fc5d1 EQUAL",
- @@ -2327,7 +2327,7 @@
- "",
- "304402202d092ededd1f060609dbf8cb76950634ff42b3e62cf4adb69ab92397b07d742302204ff886f8d0817491a96d1daccdcc820f6feb122ee6230143303100db37dfa79f01",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x08a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- @@ -2340,7 +2340,7 @@
- "",
- "304402202dd7e91243f2235481ffb626c3b7baf2c859ae3a5a77fb750ef97b99a8125dc002204960de3d3c3ab9496e218ec57e5240e0e10a6f9546316fe240c216d45116d29301",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x002008a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- "HASH160 0x14 0x6f5ecd4b83b77f3c438f5214eff96454934fc5d1 EQUAL",
- @@ -2353,7 +2353,7 @@
- "",
- "304402201e9e6f7deef5b2f21d8223c5189b7d5e82d237c10e97165dd08f547c4e5ce6ed02206796372eb1cc6acb52e13ee2d7f45807780bf96b132cb6697f69434be74b1af901",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x08a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- @@ -2366,7 +2366,7 @@
- "",
- "3044022045e667f3f0f3147b95597a24babe9afecea1f649fd23637dfa7ed7e9f3ac18440220295748e81005231135289fe3a88338dabba55afa1bdb4478691337009d82b68d01",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x002008a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- "HASH160 0x14 0x6f5ecd4b83b77f3c438f5214eff96454934fc5d1 EQUAL",
- @@ -2379,7 +2379,7 @@
- "",
- "304402201e9e6f7deef5b2f21d8223c5189b7d5e82d237c10e97165dd08f547c4e5ce6ed02206796372eb1cc6acb52e13ee2d7f45807780bf96b132cb6697f69434be74b1af901",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x08a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- @@ -2392,7 +2392,7 @@
- "",
- "3044022045e667f3f0f3147b95597a24babe9afecea1f649fd23637dfa7ed7e9f3ac18440220295748e81005231135289fe3a88338dabba55afa1bdb4478691337009d82b68d01",
- "5121038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x002008a6665ebfd43b02323423e764e185d98d1587f903b81507dbb69bfc41005efa",
- "HASH160 0x14 0x6f5ecd4b83b77f3c438f5214eff96454934fc5d1 EQUAL",
- @@ -2405,7 +2405,7 @@
- "",
- "3044022046f5367a261fd8f8d7de6eb390491344f8ec2501638fb9a1095a0599a21d3f4c02205c1b3b51d20091c5f1020841bbca87b44ebe25405c64e4acf758f2eae8665f8401",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- @@ -2418,7 +2418,7 @@
- "",
- "3044022053e210e4fb1881e6092fd75c3efc5163105599e246ded661c0ee2b5682cc2d6c02203a26b7ada8682a095b84c6d1b881637000b47d761fc837c4cee33555296d63f101",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x0020230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- "HASH160 0x14 0x3478e7019ce61a68148f87549579b704cbe4c393 EQUAL",
- @@ -2431,7 +2431,7 @@
- "",
- "3044022046f5367a261fd8f8d7de6eb390491344f8ec2501638fb9a1095a0599a21d3f4c02205c1b3b51d20091c5f1020841bbca87b44ebe25405c64e4acf758f2eae8665f8401",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- @@ -2444,7 +2444,7 @@
- "",
- "3044022053e210e4fb1881e6092fd75c3efc5163105599e246ded661c0ee2b5682cc2d6c02203a26b7ada8682a095b84c6d1b881637000b47d761fc837c4cee33555296d63f101",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x0020230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- "HASH160 0x14 0x3478e7019ce61a68148f87549579b704cbe4c393 EQUAL",
- @@ -2457,7 +2457,7 @@
- "",
- "304402206c6d9f5daf85b54af2a93ec38b15ab27f205dbf5c735365ff12451e43613d1f40220736a44be63423ed5ebf53491618b7cc3d8a5093861908da853739c73717938b701",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- @@ -2470,7 +2470,7 @@
- "",
- "30440220687871bc6144012d75baf585bb26ce13997f7d8c626f4d8825b069c3b2d064470220108936fe1c57327764782253e99090b09c203ec400ed35ce9e026ce2ecf842a001",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x0020230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- "HASH160 0x14 0x3478e7019ce61a68148f87549579b704cbe4c393 EQUAL",
- @@ -2483,7 +2483,7 @@
- "",
- "304402206c6d9f5daf85b54af2a93ec38b15ab27f205dbf5c735365ff12451e43613d1f40220736a44be63423ed5ebf53491618b7cc3d8a5093861908da853739c73717938b701",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "",
- "0 0x20 0x230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- @@ -2496,7 +2496,7 @@
- "",
- "30440220687871bc6144012d75baf585bb26ce13997f7d8c626f4d8825b069c3b2d064470220108936fe1c57327764782253e99090b09c203ec400ed35ce9e026ce2ecf842a001",
- "5141048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179852ae",
- - 0.00000001
- + 0.0000001
- ],
- "0x22 0x0020230828ed48871f0f362ce9432aa52f620f442cc8d9ce7a8b5e798365595a38bb",
- "HASH160 0x14 0x3478e7019ce61a68148f87549579b704cbe4c393 EQUAL",
- @@ -2540,60 +2540,60 @@
- ["0x01 0x00 0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"],
- ["0x03 0x645168", "HASH160 0x14 0x0c3f8fe3d6ca266e76311ecda544c67d15fdd5b0 EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- ["P2WSH IF 1 ENDIF"],
- -[["01", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"],
- -[["02", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"],
- -[["0100", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"],
- -[["", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["00", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["01", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "OK"],
- -[["02", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["0100", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- -[["00", "635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- -[["635168", 0.00000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- +[["01", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"],
- +[["02", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"],
- +[["0100", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "OK"],
- +[["", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["00", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["01", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "OK"],
- +[["02", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["0100", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- +[["00", "635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- +[["635168", 0.0000001], "", "0 0x20 0xc7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- ["P2WSH NOTIF 1 ENDIF"],
- -[["01", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["02", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["0100", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "OK"],
- -[["00", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "OK"],
- -[["01", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- -[["02", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["0100", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "OK"],
- -[["00", "645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- -[["645168", 0.00000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- +[["01", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["02", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["0100", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "OK"],
- +[["00", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "OK"],
- +[["01", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- +[["02", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["0100", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "OK"],
- +[["00", "645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- +[["645168", 0.0000001], "", "0 0x20 0xf913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- ["P2SH-P2WSH IF 1 ENDIF"],
- -[["01", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "OK"],
- -[["02", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "OK"],
- -[["0100", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "OK"],
- -[["", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["00", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["01", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"],
- -[["02", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["0100", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- -[["00", "635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- -[["635168", 0.00000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- +[["01", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "OK"],
- +[["02", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "OK"],
- +[["0100", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "OK"],
- +[["", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["00", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["01", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"],
- +[["02", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["0100", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- +[["00", "635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- +[["635168", 0.0000001], "0x22 0x0020c7eaf06d5ae01a58e376e126eb1e6fab2036076922b96b2711ffbec1e590665d", "HASH160 0x14 0x9b27ee6d9010c21bf837b334d043be5d150e7ba7 EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- ["P2SH-P2WSH NOTIF 1 ENDIF"],
- -[["01", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["02", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["0100", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- -[["", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "OK"],
- -[["00", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "OK"],
- -[["01", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- -[["02", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["0100", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"],
- -[["00", "645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- -[["645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- -[["645168", 0.00000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- +[["01", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["02", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["0100", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "EVAL_FALSE"],
- +[["", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "OK"],
- +[["00", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "OK"],
- +[["01", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "EVAL_FALSE"],
- +[["02", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["0100", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "OK"],
- +[["00", "645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "MINIMALIF"],
- +[["645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS", "UNBALANCED_CONDITIONAL"],
- +[["645168", 0.0000001], "0x22 0x0020f913eacf2e38a5d6fc3a8311d72ae704cb83866350a984dd3e5eb76d2a8c28e8", "HASH160 0x14 0xdbb7d1c0a56b7a9c423300c8cca6e6e065baf1dc EQUAL", "P2SH,WITNESS,MINIMALIF", "UNBALANCED_CONDITIONAL"],
- ["NULLFAIL should cover all signatures and signatures only"],
- ["0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", "0x01 0x14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0x01 0x14 CHECKMULTISIG NOT", "DERSIG", "OK", "BIP66 and NULLFAIL-compliant"],
- diff --git a/src/test/dbwrapper_tests.cpp b/src/test/dbwrapper_tests.cpp
- index d90fe50..6ed6e77 100644
- --- a/src/test/dbwrapper_tests.cpp
- +++ b/src/test/dbwrapper_tests.cpp
- @@ -204,31 +204,19 @@ BOOST_AUTO_TEST_CASE(iterator_ordering)
- for (int x=0x00; x<256; ++x) {
- uint8_t key = x;
- uint32_t value = x*x;
- - if (!(x & 1)) BOOST_CHECK(dbw.Write(key, value));
- + BOOST_CHECK(dbw.Write(key, value));
- }
- - // Check that creating an iterator creates a snapshot
- std::unique_ptr<CDBIterator> it(const_cast<CDBWrapper&>(dbw).NewIterator());
- -
- - for (int x=0x00; x<256; ++x) {
- - uint8_t key = x;
- - uint32_t value = x*x;
- - if (x & 1) BOOST_CHECK(dbw.Write(key, value));
- - }
- -
- for (int seek_start : {0x00, 0x80}) {
- it->Seek((uint8_t)seek_start);
- - for (int x=seek_start; x<255; ++x) {
- + for (int x=seek_start; x<256; ++x) {
- uint8_t key;
- uint32_t value;
- BOOST_CHECK(it->Valid());
- if (!it->Valid()) // Avoid spurious errors about invalid iterator's key and value in case of failure
- break;
- BOOST_CHECK(it->GetKey(key));
- - if (x & 1) {
- - BOOST_CHECK_EQUAL(key, x + 1);
- - continue;
- - }
- BOOST_CHECK(it->GetValue(value));
- BOOST_CHECK_EQUAL(key, x);
- BOOST_CHECK_EQUAL(value, x*x);
- diff --git a/src/test/key_tests.cpp b/src/test/key_tests.cpp
- index 9b83b9e..98ea849 100644
- --- a/src/test/key_tests.cpp
- +++ b/src/test/key_tests.cpp
- @@ -20,10 +20,10 @@ static const std::string strSecret1 ("6uGFQ4DSW7zh1viHZi6iiVT17CncvoaV4MHvGv
- static const std::string strSecret2 ("6vVo7sPkeLTwVdAntrv4Gbnsyr75H8ChD3P5iyHziwaqe8mCYR5");
- static const std::string strSecret1C ("T3gJYmBuZXsdd65E7NQF88ZmUP2MaUanqnZg9GFS94W7kND4Ebjq");
- static const std::string strSecret2C ("T986ZKRRdnuuXLeDZuKBRrZW1ujotAncU9WTrFU1n7vMgRW75ZtF");
- -static const CBitcoinAddress addr1 ("LiUo6Zn39joYJBzPUhssbDwAywhjFcoHE3");
- -static const CBitcoinAddress addr2 ("LZJvLSP5SGKcFS13MHgdrVhpFUbEMB5XVC");
- -static const CBitcoinAddress addr1C("Lh2G82Bi33RNuzz4UfSMZbh54jnWHVnmw8");
- -static const CBitcoinAddress addr2C("LWegHWHB5rmaF5rgWYt1YN3StapRdnGJfU");
- +static const CBitcoinAddress addr1 ("CfijQPpGx8Y1wXCezKDVtiVSPrYs1TqKcS");
- +static const CBitcoinAddress addr2 ("CWYreGRKEf45tmDJru2G9zG5fPSN7JN6T1");
- +static const CBitcoinAddress addr1C("CeGCRrDwqS9rZLCKzGmys6FLUede24ZV4o");
- +static const CBitcoinAddress addr2C("CTtcbLKQtFW3tR4x2ADdqrbiJVfZQD9cFm");
- static const std::string strAddressBad("Lbi6bpMhSwp2CXkivEeUK9wzyQEFzHDfSr");
- diff --git a/src/test/main_tests.cpp b/src/test/main_tests.cpp
- index 721f0d7..c19832c 100644
- --- a/src/test/main_tests.cpp
- +++ b/src/test/main_tests.cpp
- @@ -16,24 +16,32 @@ BOOST_FIXTURE_TEST_SUITE(main_tests, TestingSetup)
- static void TestBlockSubsidyHalvings(const Consensus::Params& consensusParams)
- {
- int maxHalvings = 64;
- - CAmount nInitialSubsidy = 50 * COIN;
- + CAmount nInitialSubsidy = 50 * COIN * COIN_SCALE;
- CAmount nPreviousSubsidy = nInitialSubsidy * 2; // for height == 0
- BOOST_CHECK_EQUAL(nPreviousSubsidy, nInitialSubsidy * 2);
- for (int nHalvings = 0; nHalvings < maxHalvings; nHalvings++) {
- int nHeight = nHalvings * consensusParams.nSubsidyHalvingInterval;
- CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams);
- - BOOST_CHECK(nSubsidy <= nInitialSubsidy);
- - BOOST_CHECK_EQUAL(nSubsidy, nPreviousSubsidy / 2);
- - nPreviousSubsidy = nSubsidy;
- + if(nHeight >= 6164768) { // LitecoinCash: Money issue has finished by this point
- + BOOST_CHECK(nSubsidy == 0);
- + } else {
- + BOOST_CHECK(nSubsidy <= nInitialSubsidy);
- + BOOST_CHECK_EQUAL(nSubsidy, nPreviousSubsidy / 2);
- + nPreviousSubsidy = nSubsidy;
- + }
- }
- BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings * consensusParams.nSubsidyHalvingInterval, consensusParams), 0);
- }
- static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval)
- {
- + const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
- + const Consensus::Params mainConsensusParams = chainParams->GetConsensus(); // Get Litecoin Cash extra params
- Consensus::Params consensusParams;
- consensusParams.nSubsidyHalvingInterval = nSubsidyHalvingInterval;
- + consensusParams.lastScryptBlock = mainConsensusParams.lastScryptBlock; // Set Litecoin Cash extra params
- + consensusParams.slowStartBlocks = mainConsensusParams.slowStartBlocks; // Set Litecoin Cash extra params
- TestBlockSubsidyHalvings(consensusParams);
- }
- @@ -45,19 +53,44 @@ BOOST_AUTO_TEST_CASE(block_subsidy_test)
- TestBlockSubsidyHalvings(1000); // Just another interval
- }
- -BOOST_AUTO_TEST_CASE(subsidy_limit_test)
- +BOOST_AUTO_TEST_CASE(block_subsidy_slowstart_test) // LitecoinCash
- {
- const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
- - CAmount nSum = 0;
- - for (int nHeight = 0; nHeight < 56000000; nHeight += 1000) {
- + const Consensus::Params consensusParams = chainParams->GetConsensus();
- +
- + int slowStart = consensusParams.lastScryptBlock + 1;
- + int slowEnd = consensusParams.lastScryptBlock + consensusParams.slowStartBlocks + 3;
- +
- + CAmount nSum = 0;
- + for (int nHeight = slowStart; nHeight < slowEnd; nHeight += 1) {
- CAmount nSubsidy = GetBlockSubsidy(nHeight, chainParams->GetConsensus());
- - BOOST_CHECK(nSubsidy <= 50 * COIN);
- - nSum += nSubsidy * 1000;
- + if(nHeight == slowStart)
- + BOOST_CHECK(nSubsidy == 550000 * COIN * COIN_SCALE);
- +
- + if(nHeight >= slowEnd)
- + BOOST_CHECK(nSubsidy == 25 * COIN * COIN_SCALE); // First halvening happenned
- +
- + nSum += nSubsidy;
- +
- BOOST_CHECK(MoneyRange(nSum));
- - }
- - BOOST_CHECK_EQUAL(nSum, 8399999990760000ULL);
- + }
- + BOOST_CHECK_EQUAL(nSum, 57506248750000ULL);
- }
- +BOOST_AUTO_TEST_CASE(block_subsidy_money_limit) // LitecoinCash
- +{
- + const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
- + const Consensus::Params consensusParams = chainParams->GetConsensus();
- + CAmount nSum = 0;
- + for (int nHeight = 0; nHeight < 6215971; nHeight += 1) { // Test a few blocks past money limit block
- + CAmount nSubsidy = GetBlockSubsidy(nHeight, chainParams->GetConsensus());
- + nSum += nSubsidy;
- + BOOST_CHECK(MoneyRange(nSum));
- + }
- + BOOST_CHECK_EQUAL(nSum, 8399999998750000ULL);
- +}
- +
- +
- bool ReturnFalse() { return false; }
- bool ReturnTrue() { return true; }
- diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp
- index 999a7e9..2d38ef8 100644
- --- a/src/test/miner_tests.cpp
- +++ b/src/test/miner_tests.cpp
- @@ -243,10 +243,10 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
- // Just to make sure we can still make simple blocks
- BOOST_CHECK(pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey));
- - const CAmount BLOCKSUBSIDY = 50*COIN;
- - const CAmount LOWFEE = CENT;
- - const CAmount HIGHFEE = COIN;
- - const CAmount HIGHERFEE = 4*COIN;
- + const CAmount BLOCKSUBSIDY = 50*COIN*COIN_SCALE;
- + const CAmount LOWFEE = CENT*COIN_SCALE;
- + const CAmount HIGHFEE = COIN*COIN_SCALE;
- + const CAmount HIGHERFEE = 4*COIN*COIN_SCALE;
- // block sigops > limit: 1000 CHECKMULTISIG + 1
- tx.vin.resize(1);
- diff --git a/src/test/multisig_tests.cpp b/src/test/multisig_tests.cpp
- index de7f3b4..9d0aee5 100644
- --- a/src/test/multisig_tests.cpp
- +++ b/src/test/multisig_tests.cpp
- @@ -16,12 +16,14 @@
- #include <boost/test/unit_test.hpp>
- +typedef std::vector<unsigned char> valtype;
- +
- BOOST_FIXTURE_TEST_SUITE(multisig_tests, BasicTestingSetup)
- CScript
- sign_multisig(CScript scriptPubKey, std::vector<CKey> keys, CTransaction transaction, int whichIn)
- {
- - uint256 hash = SignatureHash(scriptPubKey, transaction, whichIn, SIGHASH_ALL, 0, SIGVERSION_BASE);
- + uint256 hash = SignatureHash(scriptPubKey, transaction, whichIn, SIGHASH_ALL | SIGHASH_FORKID, 0, SIGVERSION_BASE); // LitecoinCash: Replay attack protection
- CScript result;
- result << OP_0; // CHECKMULTISIG bug workaround
- @@ -29,7 +31,7 @@ sign_multisig(CScript scriptPubKey, std::vector<CKey> keys, CTransaction transac
- {
- std::vector<unsigned char> vchSig;
- BOOST_CHECK(key.Sign(hash, vchSig));
- - vchSig.push_back((unsigned char)SIGHASH_ALL);
- + vchSig.push_back((unsigned char)SIGHASH_ALL | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- result << vchSig;
- }
- return result;
- @@ -37,7 +39,7 @@ sign_multisig(CScript scriptPubKey, std::vector<CKey> keys, CTransaction transac
- BOOST_AUTO_TEST_CASE(multisig_verify)
- {
- - unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC;
- + unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SIGHASH_FORKID; // LitecoinCash: Replay attack protection
- ScriptError err;
- CKey key[4];
- @@ -171,6 +173,95 @@ BOOST_AUTO_TEST_CASE(multisig_IsStandard)
- BOOST_CHECK(!::IsStandard(malformed[i], whichType));
- }
- +BOOST_AUTO_TEST_CASE(multisig_Solver1)
- +{
- + // Tests Solver() that returns lists of keys that are
- + // required to satisfy a ScriptPubKey
- + //
- + // Also tests IsMine() and ExtractDestination()
- + //
- + // Note: ExtractDestination for the multisignature transactions
- + // always returns false for this release, even if you have
- + // one key that would satisfy an (a|b) or 2-of-3 keys needed
- + // to spend an escrow transaction.
- + //
- + CBasicKeyStore keystore, emptykeystore, partialkeystore;
- + CKey key[3];
- + CTxDestination keyaddr[3];
- + for (int i = 0; i < 3; i++)
- + {
- + key[i].MakeNewKey(true);
- + keystore.AddKey(key[i]);
- + keyaddr[i] = key[i].GetPubKey().GetID();
- + }
- + partialkeystore.AddKey(key[0]);
- +
- + {
- + std::vector<valtype> solutions;
- + txnouttype whichType;
- + CScript s;
- + s << ToByteVector(key[0].GetPubKey()) << OP_CHECKSIG;
- + BOOST_CHECK(Solver(s, whichType, solutions));
- + BOOST_CHECK(solutions.size() == 1);
- + CTxDestination addr;
- + BOOST_CHECK(ExtractDestination(s, addr));
- + BOOST_CHECK(addr == keyaddr[0]);
- + BOOST_CHECK(IsMine(keystore, s));
- + BOOST_CHECK(!IsMine(emptykeystore, s));
- + }
- + {
- + std::vector<valtype> solutions;
- + txnouttype whichType;
- + CScript s;
- + s << OP_DUP << OP_HASH160 << ToByteVector(key[0].GetPubKey().GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- + BOOST_CHECK(Solver(s, whichType, solutions));
- + BOOST_CHECK(solutions.size() == 1);
- + CTxDestination addr;
- + BOOST_CHECK(ExtractDestination(s, addr));
- + BOOST_CHECK(addr == keyaddr[0]);
- + BOOST_CHECK(IsMine(keystore, s));
- + BOOST_CHECK(!IsMine(emptykeystore, s));
- + }
- + {
- + std::vector<valtype> solutions;
- + txnouttype whichType;
- + CScript s;
- + s << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey()) << OP_2 << OP_CHECKMULTISIG;
- + BOOST_CHECK(Solver(s, whichType, solutions));
- + BOOST_CHECK_EQUAL(solutions.size(), 4U);
- + CTxDestination addr;
- + BOOST_CHECK(!ExtractDestination(s, addr));
- + BOOST_CHECK(IsMine(keystore, s));
- + BOOST_CHECK(!IsMine(emptykeystore, s));
- + BOOST_CHECK(!IsMine(partialkeystore, s));
- + }
- + {
- + std::vector<valtype> solutions;
- + txnouttype whichType;
- + CScript s;
- + s << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey()) << OP_2 << OP_CHECKMULTISIG;
- + BOOST_CHECK(Solver(s, whichType, solutions));
- + BOOST_CHECK_EQUAL(solutions.size(), 4U);
- + std::vector<CTxDestination> addrs;
- + int nRequired;
- + BOOST_CHECK(ExtractDestinations(s, whichType, addrs, nRequired));
- + BOOST_CHECK(addrs[0] == keyaddr[0]);
- + BOOST_CHECK(addrs[1] == keyaddr[1]);
- + BOOST_CHECK(nRequired == 1);
- + BOOST_CHECK(IsMine(keystore, s));
- + BOOST_CHECK(!IsMine(emptykeystore, s));
- + BOOST_CHECK(!IsMine(partialkeystore, s));
- + }
- + {
- + std::vector<valtype> solutions;
- + txnouttype whichType;
- + CScript s;
- + s << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey()) << ToByteVector(key[2].GetPubKey()) << OP_3 << OP_CHECKMULTISIG;
- + BOOST_CHECK(Solver(s, whichType, solutions));
- + BOOST_CHECK(solutions.size() == 5);
- + }
- +}
- +
- BOOST_AUTO_TEST_CASE(multisig_Sign)
- {
- // Test SignSignature() (and therefore the version of Solver() that signs transactions)
- @@ -209,7 +300,7 @@ BOOST_AUTO_TEST_CASE(multisig_Sign)
- for (int i = 0; i < 3; i++)
- {
- - BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0, SIGHASH_ALL), strprintf("SignSignature %d", i));
- + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0, SIGHASH_ALL | SIGHASH_FORKID), strprintf("SignSignature %d", i)); // LitecoinCash: Replay attack protection
- }
- }
- diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp
- index 31b05d8..9bb37a0 100644
- --- a/src/test/net_tests.cpp
- +++ b/src/test/net_tests.cpp
- @@ -91,13 +91,13 @@ BOOST_AUTO_TEST_CASE(caddrdb_read)
- addrmanUncorrupted.MakeDeterministic();
- CService addr1, addr2, addr3;
- - Lookup("250.7.1.1", addr1, 8333, false);
- + Lookup("250.7.1.1", addr1, 62458, false);
- Lookup("250.7.2.2", addr2, 9999, false);
- Lookup("250.7.3.3", addr3, 9999, false);
- // Add three addresses to new table.
- CService source;
- - Lookup("252.5.1.1", source, 8333, false);
- + Lookup("252.5.1.1", source, 62458, false);
- addrmanUncorrupted.Add(CAddress(addr1, NODE_NONE), source);
- addrmanUncorrupted.Add(CAddress(addr2, NODE_NONE), source);
- addrmanUncorrupted.Add(CAddress(addr3, NODE_NONE), source);
- diff --git a/src/test/netbase_tests.cpp b/src/test/netbase_tests.cpp
- index 1baf764..8aceaff 100644
- --- a/src/test/netbase_tests.cpp
- +++ b/src/test/netbase_tests.cpp
- @@ -87,15 +87,15 @@ BOOST_AUTO_TEST_CASE(netbase_splithost)
- BOOST_CHECK(TestSplitHost("www.bitcoin.org:80", "www.bitcoin.org", 80));
- BOOST_CHECK(TestSplitHost("[www.bitcoin.org]:80", "www.bitcoin.org", 80));
- BOOST_CHECK(TestSplitHost("127.0.0.1", "127.0.0.1", -1));
- - BOOST_CHECK(TestSplitHost("127.0.0.1:8333", "127.0.0.1", 8333));
- + BOOST_CHECK(TestSplitHost("127.0.0.1:62458", "127.0.0.1", 62458));
- BOOST_CHECK(TestSplitHost("[127.0.0.1]", "127.0.0.1", -1));
- - BOOST_CHECK(TestSplitHost("[127.0.0.1]:8333", "127.0.0.1", 8333));
- + BOOST_CHECK(TestSplitHost("[127.0.0.1]:62458", "127.0.0.1", 62458));
- BOOST_CHECK(TestSplitHost("::ffff:127.0.0.1", "::ffff:127.0.0.1", -1));
- - BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:8333", "::ffff:127.0.0.1", 8333));
- - BOOST_CHECK(TestSplitHost("[::]:8333", "::", 8333));
- - BOOST_CHECK(TestSplitHost("::8333", "::8333", -1));
- - BOOST_CHECK(TestSplitHost(":8333", "", 8333));
- - BOOST_CHECK(TestSplitHost("[]:8333", "", 8333));
- + BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:62458", "::ffff:127.0.0.1", 62458));
- + BOOST_CHECK(TestSplitHost("[::]:62458", "::", 62458));
- + BOOST_CHECK(TestSplitHost("::62458", "::62458", -1));
- + BOOST_CHECK(TestSplitHost(":62458", "", 62458));
- + BOOST_CHECK(TestSplitHost("[]:62458", "", 62458));
- BOOST_CHECK(TestSplitHost("", "", -1));
- }
- @@ -108,10 +108,10 @@ bool static TestParse(std::string src, std::string canon)
- BOOST_AUTO_TEST_CASE(netbase_lookupnumeric)
- {
- BOOST_CHECK(TestParse("127.0.0.1", "127.0.0.1:65535"));
- - BOOST_CHECK(TestParse("127.0.0.1:8333", "127.0.0.1:8333"));
- + BOOST_CHECK(TestParse("127.0.0.1:62458", "127.0.0.1:62458"));
- BOOST_CHECK(TestParse("::ffff:127.0.0.1", "127.0.0.1:65535"));
- BOOST_CHECK(TestParse("::", "[::]:65535"));
- - BOOST_CHECK(TestParse("[::]:8333", "[::]:8333"));
- + BOOST_CHECK(TestParse("[::]:62458", "[::]:62458"));
- BOOST_CHECK(TestParse("[127.0.0.1]", "127.0.0.1:65535"));
- BOOST_CHECK(TestParse(":::", "[::]:0"));
- diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp
- index 7b60221..5bac2ad 100644
- --- a/src/test/rpc_tests.cpp
- +++ b/src/test/rpc_tests.cpp
- @@ -143,37 +143,36 @@ BOOST_AUTO_TEST_CASE(rpc_createraw_op_return)
- BOOST_AUTO_TEST_CASE(rpc_format_monetary_values)
- {
- - BOOST_CHECK(ValueFromAmount(0LL).write() == "0.00000000");
- - BOOST_CHECK(ValueFromAmount(1LL).write() == "0.00000001");
- - BOOST_CHECK(ValueFromAmount(17622195LL).write() == "0.17622195");
- - BOOST_CHECK(ValueFromAmount(50000000LL).write() == "0.50000000");
- - BOOST_CHECK(ValueFromAmount(89898989LL).write() == "0.89898989");
- - BOOST_CHECK(ValueFromAmount(100000000LL).write() == "1.00000000");
- - BOOST_CHECK(ValueFromAmount(2099999999999990LL).write() == "20999999.99999990");
- - BOOST_CHECK(ValueFromAmount(2099999999999999LL).write() == "20999999.99999999");
- -
- - BOOST_CHECK_EQUAL(ValueFromAmount(0).write(), "0.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount((COIN/10000)*123456789).write(), "12345.67890000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(-COIN).write(), "-1.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(-COIN/10).write(), "-0.10000000");
- -
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*100000000).write(), "100000000.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*10000000).write(), "10000000.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*1000000).write(), "1000000.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*100000).write(), "100000.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*10000).write(), "10000.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*1000).write(), "1000.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*100).write(), "100.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN*10).write(), "10.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN).write(), "1.00000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/10).write(), "0.10000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/100).write(), "0.01000000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/1000).write(), "0.00100000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/10000).write(), "0.00010000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/100000).write(), "0.00001000");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/1000000).write(), "0.00000100");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/10000000).write(), "0.00000010");
- - BOOST_CHECK_EQUAL(ValueFromAmount(COIN/100000000).write(), "0.00000001");
- + BOOST_CHECK(ValueFromAmount(0LL).write() == "0.0000000");
- + BOOST_CHECK(ValueFromAmount(1LL).write() == "0.0000001");
- + BOOST_CHECK(ValueFromAmount(17622195LL).write() == "1.7622195");
- + BOOST_CHECK(ValueFromAmount(50000000LL).write() == "5.0000000");
- + BOOST_CHECK(ValueFromAmount(89898989LL).write() == "8.9898989");
- + BOOST_CHECK(ValueFromAmount(100000000LL).write() == "10.0000000");
- + BOOST_CHECK(ValueFromAmount(2099999999999990LL).write() == "209999999.9999990");
- + BOOST_CHECK(ValueFromAmount(2099999999999999LL).write() == "209999999.9999999");
- +
- + BOOST_CHECK_EQUAL(ValueFromAmount(0).write(), "0.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount((COIN/10000)*123456789).write(), "12345.6789000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(-COIN).write(), "-1.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(-COIN/10).write(), "-0.1000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*100000000).write(), "100000000.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*10000000).write(), "10000000.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*1000000).write(), "1000000.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*100000).write(), "100000.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*10000).write(), "10000.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*1000).write(), "1000.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*100).write(), "100.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN*10).write(), "10.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN).write(), "1.0000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/10).write(), "0.1000000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/100).write(), "0.0100000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/1000).write(), "0.0010000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/10000).write(), "0.0001000");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/100000).write(), "0.0000100");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/1000000).write(), "0.0000010");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/10000000).write(), "0.0000001");
- + BOOST_CHECK_EQUAL(ValueFromAmount(COIN/100000000).write(), "0.0000000");
- }
- static UniValue ValueFromString(const std::string &str)
- @@ -185,30 +184,34 @@ static UniValue ValueFromString(const std::string &str)
- BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values)
- {
- - BOOST_CHECK_THROW(AmountFromValue(ValueFromString("-0.00000001")), UniValue);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0")), 0LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000000")), 0LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001")), 1LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.17622195")), 17622195LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5")), 50000000LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.50000000")), 50000000LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.89898989")), 89898989LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1.00000000")), 100000000LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.9999999")), 2099999999999990LL);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.99999999")), 2099999999999999LL);
- -
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1e-8")), COIN/100000000);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1e-7")), COIN/100000000);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.01e-6")), COIN/100000000);
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000000000000000000000000000000000000000000000000000000000000000000000000001e+68")), COIN/100000000);
- +
- + BOOST_CHECK_THROW(AmountFromValue(ValueFromString("-0.0000001")), UniValue); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0")), 0LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000000")), 0LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000001")), 1LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1762219")), 1762219LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5")), 5000000LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5000000")), 5000000LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.8989898")), 8989898LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1.0000000")), 10000000LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.999999")), 209999999999990LL); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.9999999")), 209999999999999LL); // LitecoinCash: Coinscale
- +
- +
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1e-7")), COIN/10000000); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1e-6")), COIN/10000000); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.01e-5")), COIN/10000000); // LitecoinCash: Coinscale
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.000000000000000000000000000000000000000000000000000000000000000000000000001e+68")), COIN/10000000); // LitecoinCash: Coinscale
- +
- BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("10000000000000000000000000000000000000000000000000000000000000000e-64")), COIN);
- BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000e64")), COIN);
- +
- BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e-9")), UniValue); //should fail
- BOOST_CHECK_THROW(AmountFromValue(ValueFromString("0.000000019")), UniValue); //should fail
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001000000")), 1LL); //should pass, cut trailing 0
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000001000000")), 1LL); //should pass, cut trailing 0 // LitecoinCash: Coinscale
- BOOST_CHECK_THROW(AmountFromValue(ValueFromString("19e-9")), UniValue); //should fail
- - BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.19e-6")), 19); //should pass, leading 0 is present
- + BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.19e-5")), 19); //should pass, leading 0 is present // LiteconCash: Coinscale
- BOOST_CHECK_THROW(AmountFromValue(ValueFromString("92233720368.54775808")), UniValue); //overflow error
- BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e+11")), UniValue); //overflow error
- @@ -223,9 +226,8 @@ BOOST_AUTO_TEST_CASE(json_parse_errors)
- // Valid, with leading or trailing whitespace
- BOOST_CHECK_EQUAL(ParseNonRFCJSONValue(" 1.0").get_real(), 1.0);
- BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0 ").get_real(), 1.0);
- -
- BOOST_CHECK_THROW(AmountFromValue(ParseNonRFCJSONValue(".19e-6")), std::runtime_error); //should fail, missing leading 0, therefore invalid JSON
- - BOOST_CHECK_EQUAL(AmountFromValue(ParseNonRFCJSONValue("0.00000000000000000000000000000000000001e+30 ")), 1);
- + BOOST_CHECK_EQUAL(AmountFromValue(ParseNonRFCJSONValue("0.0000000000000000000000000000000000001e+30 ")), 1); // LitecoinCash: Coinscale
- // Invalid, initial garbage
- BOOST_CHECK_THROW(ParseNonRFCJSONValue("[1.0"), std::runtime_error);
- BOOST_CHECK_THROW(ParseNonRFCJSONValue("a1.0"), std::runtime_error);
- diff --git a/src/test/script_P2SH_tests.cpp b/src/test/script_P2SH_tests.cpp
- index efd0f77..1ea04c2 100644
- --- a/src/test/script_P2SH_tests.cpp
- +++ b/src/test/script_P2SH_tests.cpp
- @@ -102,7 +102,7 @@ BOOST_AUTO_TEST_CASE(sign)
- }
- for (int i = 0; i < 8; i++)
- {
- - BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0, SIGHASH_ALL), strprintf("SignSignature %d", i));
- + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0, SIGHASH_ALL | SIGHASH_FORKID), strprintf("SignSignature %d", i)); // LitecoinCash: Replay attack protection
- }
- // All of the above should be OK, and the txTos have valid signatures
- // Check to make sure signature verification fails if we use the wrong ScriptSig:
- @@ -113,7 +113,7 @@ BOOST_AUTO_TEST_CASE(sign)
- CScript sigSave = txTo[i].vin[0].scriptSig;
- txTo[i].vin[0].scriptSig = txTo[j].vin[0].scriptSig;
- const CTxOut& output = txFrom.vout[txTo[i].vin[0].prevout.n];
- - bool sigOK = CScriptCheck(output.scriptPubKey, output.nValue, txTo[i], 0, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, false, &txdata)();
- + bool sigOK = CScriptCheck(output.scriptPubKey, output.nValue, txTo[i], 0, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC | SCRIPT_ENABLE_SIGHASH_FORKID, false, &txdata)(); // LitecoinCash: Replay attack protection
- if (i == j)
- BOOST_CHECK_MESSAGE(sigOK, strprintf("VerifySignature %d %d", i, j));
- else
- @@ -200,7 +200,7 @@ BOOST_AUTO_TEST_CASE(set)
- }
- for (int i = 0; i < 4; i++)
- {
- - BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0, SIGHASH_ALL), strprintf("SignSignature %d", i));
- + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0, SIGHASH_ALL | SIGHASH_FORKID), strprintf("SignSignature %d", i)); // LitecoinCash: Replay attack protection
- BOOST_CHECK_MESSAGE(IsStandardTx(txTo[i], reason), strprintf("txTo[%d].IsStandard", i));
- }
- }
- @@ -329,9 +329,9 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
- txTo.vin[i].prevout.n = i;
- txTo.vin[i].prevout.hash = txFrom.GetHash();
- }
- - BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 0, SIGHASH_ALL));
- - BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 1, SIGHASH_ALL));
- - BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 2, SIGHASH_ALL));
- + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 0, SIGHASH_ALL | SIGHASH_FORKID)); // LitecoinCash: Replay attack protection
- + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 1, SIGHASH_ALL | SIGHASH_FORKID)); // LitecoinCash: Replay attack protection
- + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 2, SIGHASH_ALL | SIGHASH_FORKID)); // LitecoinCash: Replay attack protection
- // SignSignature doesn't know how to sign these. We're
- // not testing validating signatures, so just create
- // dummy signatures that DO include the correct P2SH scripts:
- diff --git a/src/test/script_standard_tests.cpp b/src/test/script_standard_tests.cpp
- deleted file mode 100644
- index 3d17a0d..0000000
- --- a/src/test/script_standard_tests.cpp
- +++ /dev/null
- @@ -1,740 +0,0 @@
- -// Copyright (c) 2017 The Bitcoin Core developers
- -// Distributed under the MIT software license, see the accompanying
- -// file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -
- -#include "key.h"
- -#include "keystore.h"
- -#include "script/ismine.h"
- -#include "script/script.h"
- -#include "script/script_error.h"
- -#include "script/standard.h"
- -#include "test/test_bitcoin.h"
- -
- -#include <boost/test/unit_test.hpp>
- -
- -
- -BOOST_FIXTURE_TEST_SUITE(script_standard_tests, BasicTestingSetup)
- -
- -BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
- -{
- - CKey keys[3];
- - CPubKey pubkeys[3];
- - for (int i = 0; i < 3; i++) {
- - keys[i].MakeNewKey(true);
- - pubkeys[i] = keys[i].GetPubKey();
- - }
- -
- - CScript s;
- - txnouttype whichType;
- - std::vector<std::vector<unsigned char> > solutions;
- -
- - // TX_PUBKEY
- - s.clear();
- - s << ToByteVector(pubkeys[0]) << OP_CHECKSIG;
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_PUBKEY);
- - BOOST_CHECK_EQUAL(solutions.size(), 1);
- - BOOST_CHECK(solutions[0] == ToByteVector(pubkeys[0]));
- -
- - // TX_PUBKEYHASH
- - s.clear();
- - s << OP_DUP << OP_HASH160 << ToByteVector(pubkeys[0].GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_PUBKEYHASH);
- - BOOST_CHECK_EQUAL(solutions.size(), 1);
- - BOOST_CHECK(solutions[0] == ToByteVector(pubkeys[0].GetID()));
- -
- - // TX_SCRIPTHASH
- - CScript redeemScript(s); // initialize with leftover P2PKH script
- - s.clear();
- - s << OP_HASH160 << ToByteVector(CScriptID(redeemScript)) << OP_EQUAL;
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_SCRIPTHASH);
- - BOOST_CHECK_EQUAL(solutions.size(), 1);
- - BOOST_CHECK(solutions[0] == ToByteVector(CScriptID(redeemScript)));
- -
- - // TX_MULTISIG
- - s.clear();
- - s << OP_1 <<
- - ToByteVector(pubkeys[0]) <<
- - ToByteVector(pubkeys[1]) <<
- - OP_2 << OP_CHECKMULTISIG;
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_MULTISIG);
- - BOOST_CHECK_EQUAL(solutions.size(), 4);
- - BOOST_CHECK(solutions[0] == std::vector<unsigned char>({1}));
- - BOOST_CHECK(solutions[1] == ToByteVector(pubkeys[0]));
- - BOOST_CHECK(solutions[2] == ToByteVector(pubkeys[1]));
- - BOOST_CHECK(solutions[3] == std::vector<unsigned char>({2}));
- -
- - s.clear();
- - s << OP_2 <<
- - ToByteVector(pubkeys[0]) <<
- - ToByteVector(pubkeys[1]) <<
- - ToByteVector(pubkeys[2]) <<
- - OP_3 << OP_CHECKMULTISIG;
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_MULTISIG);
- - BOOST_CHECK_EQUAL(solutions.size(), 5);
- - BOOST_CHECK(solutions[0] == std::vector<unsigned char>({2}));
- - BOOST_CHECK(solutions[1] == ToByteVector(pubkeys[0]));
- - BOOST_CHECK(solutions[2] == ToByteVector(pubkeys[1]));
- - BOOST_CHECK(solutions[3] == ToByteVector(pubkeys[2]));
- - BOOST_CHECK(solutions[4] == std::vector<unsigned char>({3}));
- -
- - // TX_NULL_DATA
- - s.clear();
- - s << OP_RETURN <<
- - std::vector<unsigned char>({0}) <<
- - std::vector<unsigned char>({75}) <<
- - std::vector<unsigned char>({255});
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_NULL_DATA);
- - BOOST_CHECK_EQUAL(solutions.size(), 0);
- -
- - // TX_WITNESS_V0_KEYHASH
- - s.clear();
- - s << OP_0 << ToByteVector(pubkeys[0].GetID());
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_WITNESS_V0_KEYHASH);
- - BOOST_CHECK_EQUAL(solutions.size(), 1);
- - BOOST_CHECK(solutions[0] == ToByteVector(pubkeys[0].GetID()));
- -
- - // TX_WITNESS_V0_SCRIPTHASH
- - uint256 scriptHash;
- - CSHA256().Write(&redeemScript[0], redeemScript.size())
- - .Finalize(scriptHash.begin());
- -
- - s.clear();
- - s << OP_0 << ToByteVector(scriptHash);
- - BOOST_CHECK(Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_WITNESS_V0_SCRIPTHASH);
- - BOOST_CHECK_EQUAL(solutions.size(), 1);
- - BOOST_CHECK(solutions[0] == ToByteVector(scriptHash));
- -
- - // TX_NONSTANDARD
- - s.clear();
- - s << OP_9 << OP_ADD << OP_11 << OP_EQUAL;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- - BOOST_CHECK_EQUAL(whichType, TX_NONSTANDARD);
- -}
- -
- -BOOST_AUTO_TEST_CASE(script_standard_Solver_failure)
- -{
- - CKey key;
- - CPubKey pubkey;
- - key.MakeNewKey(true);
- - pubkey = key.GetPubKey();
- -
- - CScript s;
- - txnouttype whichType;
- - std::vector<std::vector<unsigned char> > solutions;
- -
- - // TX_PUBKEY with incorrectly sized pubkey
- - s.clear();
- - s << std::vector<unsigned char>(30, 0x01) << OP_CHECKSIG;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_PUBKEYHASH with incorrectly sized key hash
- - s.clear();
- - s << OP_DUP << OP_HASH160 << ToByteVector(pubkey) << OP_EQUALVERIFY << OP_CHECKSIG;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_SCRIPTHASH with incorrectly sized script hash
- - s.clear();
- - s << OP_HASH160 << std::vector<unsigned char>(21, 0x01) << OP_EQUAL;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_MULTISIG 0/2
- - s.clear();
- - s << OP_0 << ToByteVector(pubkey) << OP_1 << OP_CHECKMULTISIG;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_MULTISIG 2/1
- - s.clear();
- - s << OP_2 << ToByteVector(pubkey) << OP_1 << OP_CHECKMULTISIG;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_MULTISIG n = 2 with 1 pubkey
- - s.clear();
- - s << OP_1 << ToByteVector(pubkey) << OP_2 << OP_CHECKMULTISIG;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_MULTISIG n = 1 with 0 pubkeys
- - s.clear();
- - s << OP_1 << OP_1 << OP_CHECKMULTISIG;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_NULL_DATA with other opcodes
- - s.clear();
- - s << OP_RETURN << std::vector<unsigned char>({75}) << OP_ADD;
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_WITNESS with unknown version
- - s.clear();
- - s << OP_1 << ToByteVector(pubkey);
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -
- - // TX_WITNESS with incorrect program size
- - s.clear();
- - s << OP_0 << std::vector<unsigned char>(19, 0x01);
- - BOOST_CHECK(!Solver(s, whichType, solutions));
- -}
- -
- -BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
- -{
- - CKey key;
- - CPubKey pubkey;
- - key.MakeNewKey(true);
- - pubkey = key.GetPubKey();
- -
- - CScript s;
- - CTxDestination address;
- -
- - // TX_PUBKEY
- - s.clear();
- - s << ToByteVector(pubkey) << OP_CHECKSIG;
- - BOOST_CHECK(ExtractDestination(s, address));
- - BOOST_CHECK(boost::get<CKeyID>(&address) &&
- - *boost::get<CKeyID>(&address) == pubkey.GetID());
- -
- - // TX_PUBKEYHASH
- - s.clear();
- - s << OP_DUP << OP_HASH160 << ToByteVector(pubkey.GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- - BOOST_CHECK(ExtractDestination(s, address));
- - BOOST_CHECK(boost::get<CKeyID>(&address) &&
- - *boost::get<CKeyID>(&address) == pubkey.GetID());
- -
- - // TX_SCRIPTHASH
- - CScript redeemScript(s); // initialize with leftover P2PKH script
- - s.clear();
- - s << OP_HASH160 << ToByteVector(CScriptID(redeemScript)) << OP_EQUAL;
- - BOOST_CHECK(ExtractDestination(s, address));
- - BOOST_CHECK(boost::get<CScriptID>(&address) &&
- - *boost::get<CScriptID>(&address) == CScriptID(redeemScript));
- -
- - // TX_MULTISIG
- - s.clear();
- - s << OP_1 << ToByteVector(pubkey) << OP_1 << OP_CHECKMULTISIG;
- - BOOST_CHECK(!ExtractDestination(s, address));
- -
- - // TX_NULL_DATA
- - s.clear();
- - s << OP_RETURN << std::vector<unsigned char>({75});
- - BOOST_CHECK(!ExtractDestination(s, address));
- -
- - // TX_WITNESS_V0_KEYHASH
- - s.clear();
- - s << OP_0 << ToByteVector(pubkey);
- - BOOST_CHECK(!ExtractDestination(s, address));
- -
- - // TX_WITNESS_V0_SCRIPTHASH
- - s.clear();
- - s << OP_0 << ToByteVector(CScriptID(redeemScript));
- - BOOST_CHECK(!ExtractDestination(s, address));
- -}
- -
- -BOOST_AUTO_TEST_CASE(script_standard_ExtractDestinations)
- -{
- - CKey keys[3];
- - CPubKey pubkeys[3];
- - for (int i = 0; i < 3; i++) {
- - keys[i].MakeNewKey(true);
- - pubkeys[i] = keys[i].GetPubKey();
- - }
- -
- - CScript s;
- - txnouttype whichType;
- - std::vector<CTxDestination> addresses;
- - int nRequired;
- -
- - // TX_PUBKEY
- - s.clear();
- - s << ToByteVector(pubkeys[0]) << OP_CHECKSIG;
- - BOOST_CHECK(ExtractDestinations(s, whichType, addresses, nRequired));
- - BOOST_CHECK_EQUAL(whichType, TX_PUBKEY);
- - BOOST_CHECK_EQUAL(addresses.size(), 1);
- - BOOST_CHECK_EQUAL(nRequired, 1);
- - BOOST_CHECK(boost::get<CKeyID>(&addresses[0]) &&
- - *boost::get<CKeyID>(&addresses[0]) == pubkeys[0].GetID());
- -
- - // TX_PUBKEYHASH
- - s.clear();
- - s << OP_DUP << OP_HASH160 << ToByteVector(pubkeys[0].GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- - BOOST_CHECK(ExtractDestinations(s, whichType, addresses, nRequired));
- - BOOST_CHECK_EQUAL(whichType, TX_PUBKEYHASH);
- - BOOST_CHECK_EQUAL(addresses.size(), 1);
- - BOOST_CHECK_EQUAL(nRequired, 1);
- - BOOST_CHECK(boost::get<CKeyID>(&addresses[0]) &&
- - *boost::get<CKeyID>(&addresses[0]) == pubkeys[0].GetID());
- -
- - // TX_SCRIPTHASH
- - CScript redeemScript(s); // initialize with leftover P2PKH script
- - s.clear();
- - s << OP_HASH160 << ToByteVector(CScriptID(redeemScript)) << OP_EQUAL;
- - BOOST_CHECK(ExtractDestinations(s, whichType, addresses, nRequired));
- - BOOST_CHECK_EQUAL(whichType, TX_SCRIPTHASH);
- - BOOST_CHECK_EQUAL(addresses.size(), 1);
- - BOOST_CHECK_EQUAL(nRequired, 1);
- - BOOST_CHECK(boost::get<CScriptID>(&addresses[0]) &&
- - *boost::get<CScriptID>(&addresses[0]) == CScriptID(redeemScript));
- -
- - // TX_MULTISIG
- - s.clear();
- - s << OP_2 <<
- - ToByteVector(pubkeys[0]) <<
- - ToByteVector(pubkeys[1]) <<
- - OP_2 << OP_CHECKMULTISIG;
- - BOOST_CHECK(ExtractDestinations(s, whichType, addresses, nRequired));
- - BOOST_CHECK_EQUAL(whichType, TX_MULTISIG);
- - BOOST_CHECK_EQUAL(addresses.size(), 2);
- - BOOST_CHECK_EQUAL(nRequired, 2);
- - BOOST_CHECK(boost::get<CKeyID>(&addresses[0]) &&
- - *boost::get<CKeyID>(&addresses[0]) == pubkeys[0].GetID());
- - BOOST_CHECK(boost::get<CKeyID>(&addresses[1]) &&
- - *boost::get<CKeyID>(&addresses[1]) == pubkeys[1].GetID());
- -
- - // TX_NULL_DATA
- - s.clear();
- - s << OP_RETURN << std::vector<unsigned char>({75});
- - BOOST_CHECK(!ExtractDestinations(s, whichType, addresses, nRequired));
- -
- - // TX_WITNESS_V0_KEYHASH
- - s.clear();
- - s << OP_0 << ToByteVector(pubkeys[0].GetID());
- - BOOST_CHECK(!ExtractDestinations(s, whichType, addresses, nRequired));
- -
- - // TX_WITNESS_V0_SCRIPTHASH
- - s.clear();
- - s << OP_0 << ToByteVector(CScriptID(redeemScript));
- - BOOST_CHECK(!ExtractDestinations(s, whichType, addresses, nRequired));
- -}
- -
- -BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
- -{
- - CKey keys[3];
- - CPubKey pubkeys[3];
- - for (int i = 0; i < 3; i++) {
- - keys[i].MakeNewKey(true);
- - pubkeys[i] = keys[i].GetPubKey();
- - }
- -
- - CScript expected, result;
- -
- - // CKeyID
- - expected.clear();
- - expected << OP_DUP << OP_HASH160 << ToByteVector(pubkeys[0].GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- - result = GetScriptForDestination(pubkeys[0].GetID());
- - BOOST_CHECK(result == expected);
- -
- - // CScriptID
- - CScript redeemScript(result);
- - expected.clear();
- - expected << OP_HASH160 << ToByteVector(CScriptID(redeemScript)) << OP_EQUAL;
- - result = GetScriptForDestination(CScriptID(redeemScript));
- - BOOST_CHECK(result == expected);
- -
- - // CNoDestination
- - expected.clear();
- - result = GetScriptForDestination(CNoDestination());
- - BOOST_CHECK(result == expected);
- -
- - // GetScriptForRawPubKey
- - expected.clear();
- - expected << ToByteVector(pubkeys[0]) << OP_CHECKSIG;
- - result = GetScriptForRawPubKey(pubkeys[0]);
- - BOOST_CHECK(result == expected);
- -
- - // GetScriptForMultisig
- - expected.clear();
- - expected << OP_2 <<
- - ToByteVector(pubkeys[0]) <<
- - ToByteVector(pubkeys[1]) <<
- - ToByteVector(pubkeys[2]) <<
- - OP_3 << OP_CHECKMULTISIG;
- - result = GetScriptForMultisig(2, std::vector<CPubKey>(pubkeys, pubkeys + 3));
- - BOOST_CHECK(result == expected);
- -
- - // GetScriptForWitness
- - CScript witnessScript;
- -
- - witnessScript << ToByteVector(pubkeys[0]) << OP_CHECKSIG;
- - expected.clear();
- - expected << OP_0 << ToByteVector(pubkeys[0].GetID());
- - result = GetScriptForWitness(witnessScript);
- - BOOST_CHECK(result == expected);
- -
- - witnessScript.clear();
- - witnessScript << OP_DUP << OP_HASH160 << ToByteVector(pubkeys[0].GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- - result = GetScriptForWitness(witnessScript);
- - BOOST_CHECK(result == expected);
- -
- - witnessScript.clear();
- - witnessScript << OP_1 << ToByteVector(pubkeys[0]) << OP_1 << OP_CHECKMULTISIG;
- -
- - uint256 scriptHash;
- - CSHA256().Write(&witnessScript[0], witnessScript.size())
- - .Finalize(scriptHash.begin());
- -
- - expected.clear();
- - expected << OP_0 << ToByteVector(scriptHash);
- - result = GetScriptForWitness(witnessScript);
- - BOOST_CHECK(result == expected);
- -}
- -
- -BOOST_AUTO_TEST_CASE(script_standard_IsMine)
- -{
- - CKey keys[2];
- - CPubKey pubkeys[2];
- - for (int i = 0; i < 2; i++) {
- - keys[i].MakeNewKey(true);
- - pubkeys[i] = keys[i].GetPubKey();
- - }
- -
- - CKey uncompressedKey;
- - uncompressedKey.MakeNewKey(false);
- - CPubKey uncompressedPubkey = uncompressedKey.GetPubKey();
- -
- - CScript scriptPubKey;
- - isminetype result;
- - bool isInvalid;
- -
- - // P2PK compressed
- - {
- - CBasicKeyStore keystore;
- - scriptPubKey.clear();
- - scriptPubKey << ToByteVector(pubkeys[0]) << OP_CHECKSIG;
- -
- - // Keystore does not have key
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has key
- - keystore.AddKey(keys[0]);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2PK uncompressed
- - {
- - CBasicKeyStore keystore;
- - scriptPubKey.clear();
- - scriptPubKey << ToByteVector(uncompressedPubkey) << OP_CHECKSIG;
- -
- - // Keystore does not have key
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has key
- - keystore.AddKey(uncompressedKey);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2PKH compressed
- - {
- - CBasicKeyStore keystore;
- - scriptPubKey.clear();
- - scriptPubKey << OP_DUP << OP_HASH160 << ToByteVector(pubkeys[0].GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- -
- - // Keystore does not have key
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has key
- - keystore.AddKey(keys[0]);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2PKH uncompressed
- - {
- - CBasicKeyStore keystore;
- - scriptPubKey.clear();
- - scriptPubKey << OP_DUP << OP_HASH160 << ToByteVector(uncompressedPubkey.GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- -
- - // Keystore does not have key
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has key
- - keystore.AddKey(uncompressedKey);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2SH
- - {
- - CBasicKeyStore keystore;
- -
- - CScript redeemScript;
- - redeemScript << OP_DUP << OP_HASH160 << ToByteVector(pubkeys[0].GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_HASH160 << ToByteVector(CScriptID(redeemScript)) << OP_EQUAL;
- -
- - // Keystore does not have redeemScript or key
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has redeemScript but no key
- - keystore.AddCScript(redeemScript);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has redeemScript and key
- - keystore.AddKey(keys[0]);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2WPKH compressed
- - {
- - CBasicKeyStore keystore;
- - keystore.AddKey(keys[0]);
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_0 << ToByteVector(pubkeys[0].GetID());
- -
- - // Keystore has key, but no P2SH redeemScript
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has key and P2SH redeemScript
- - keystore.AddCScript(scriptPubKey);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2WPKH uncompressed
- - {
- - CBasicKeyStore keystore;
- - keystore.AddKey(uncompressedKey);
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_0 << ToByteVector(uncompressedPubkey.GetID());
- -
- - // Keystore has key, but no P2SH redeemScript
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has key and P2SH redeemScript
- - keystore.AddCScript(scriptPubKey);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(isInvalid);
- - }
- -
- - // scriptPubKey multisig
- - {
- - CBasicKeyStore keystore;
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_2 <<
- - ToByteVector(uncompressedPubkey) <<
- - ToByteVector(pubkeys[1]) <<
- - OP_2 << OP_CHECKMULTISIG;
- -
- - // Keystore does not have any keys
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has 1/2 keys
- - keystore.AddKey(uncompressedKey);
- -
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has 2/2 keys
- - keystore.AddKey(keys[1]);
- -
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2SH multisig
- - {
- - CBasicKeyStore keystore;
- - keystore.AddKey(uncompressedKey);
- - keystore.AddKey(keys[1]);
- -
- - CScript redeemScript;
- - redeemScript << OP_2 <<
- - ToByteVector(uncompressedPubkey) <<
- - ToByteVector(pubkeys[1]) <<
- - OP_2 << OP_CHECKMULTISIG;
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_HASH160 << ToByteVector(CScriptID(redeemScript)) << OP_EQUAL;
- -
- - // Keystore has no redeemScript
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has redeemScript
- - keystore.AddCScript(redeemScript);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2WSH multisig with compressed keys
- - {
- - CBasicKeyStore keystore;
- - keystore.AddKey(keys[0]);
- - keystore.AddKey(keys[1]);
- -
- - CScript witnessScript;
- - witnessScript << OP_2 <<
- - ToByteVector(pubkeys[0]) <<
- - ToByteVector(pubkeys[1]) <<
- - OP_2 << OP_CHECKMULTISIG;
- -
- - uint256 scriptHash;
- - CSHA256().Write(&witnessScript[0], witnessScript.size())
- - .Finalize(scriptHash.begin());
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_0 << ToByteVector(scriptHash);
- -
- - // Keystore has keys, but no witnessScript or P2SH redeemScript
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has keys and witnessScript, but no P2SH redeemScript
- - keystore.AddCScript(witnessScript);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has keys, witnessScript, P2SH redeemScript
- - keystore.AddCScript(scriptPubKey);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // P2WSH multisig with uncompressed key
- - {
- - CBasicKeyStore keystore;
- - keystore.AddKey(uncompressedKey);
- - keystore.AddKey(keys[1]);
- -
- - CScript witnessScript;
- - witnessScript << OP_2 <<
- - ToByteVector(uncompressedPubkey) <<
- - ToByteVector(pubkeys[1]) <<
- - OP_2 << OP_CHECKMULTISIG;
- -
- - uint256 scriptHash;
- - CSHA256().Write(&witnessScript[0], witnessScript.size())
- - .Finalize(scriptHash.begin());
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_0 << ToByteVector(scriptHash);
- -
- - // Keystore has keys, but no witnessScript or P2SH redeemScript
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has keys and witnessScript, but no P2SH redeemScript
- - keystore.AddCScript(witnessScript);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has keys, witnessScript, P2SH redeemScript
- - keystore.AddCScript(scriptPubKey);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(isInvalid);
- - }
- -
- - // P2WSH multisig wrapped in P2SH
- - {
- - CBasicKeyStore keystore;
- -
- - CScript witnessScript;
- - witnessScript << OP_2 <<
- - ToByteVector(pubkeys[0]) <<
- - ToByteVector(pubkeys[1]) <<
- - OP_2 << OP_CHECKMULTISIG;
- -
- - uint256 scriptHash;
- - CSHA256().Write(&witnessScript[0], witnessScript.size())
- - .Finalize(scriptHash.begin());
- -
- - CScript redeemScript;
- - redeemScript << OP_0 << ToByteVector(scriptHash);
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_HASH160 << ToByteVector(CScriptID(redeemScript)) << OP_EQUAL;
- -
- - // Keystore has no witnessScript, P2SH redeemScript, or keys
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has witnessScript and P2SH redeemScript, but no keys
- - keystore.AddCScript(redeemScript);
- - keystore.AddCScript(witnessScript);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- -
- - // Keystore has keys, witnessScript, P2SH redeemScript
- - keystore.AddKey(keys[0]);
- - keystore.AddKey(keys[1]);
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // OP_RETURN
- - {
- - CBasicKeyStore keystore;
- - keystore.AddKey(keys[0]);
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_RETURN << ToByteVector(pubkeys[0]);
- -
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- - }
- -
- - // Nonstandard
- - {
- - CBasicKeyStore keystore;
- - keystore.AddKey(keys[0]);
- -
- - scriptPubKey.clear();
- - scriptPubKey << OP_9 << OP_ADD << OP_11 << OP_EQUAL;
- -
- - result = IsMine(keystore, scriptPubKey, isInvalid);
- - BOOST_CHECK_EQUAL(result, ISMINE_NO);
- - BOOST_CHECK(!isInvalid);
- - }
- -}
- -
- -BOOST_AUTO_TEST_SUITE_END()
- diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp
- index 06b8274..8365d25 100644
- --- a/src/test/script_tests.cpp
- +++ b/src/test/script_tests.cpp
- @@ -502,7 +502,7 @@ BOOST_AUTO_TEST_CASE(script_build)
- tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG,
- "P2SH(P2PK), bad redeemscript", SCRIPT_VERIFY_P2SH, true
- ).PushSig(keys.key0).PushRedeem().DamagePush(10).ScriptError(SCRIPT_ERR_EVAL_FALSE));
- -
- +
- tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.pubkey0.GetID()) << OP_EQUALVERIFY << OP_CHECKSIG,
- "P2SH(P2PKH)", SCRIPT_VERIFY_P2SH, true
- ).PushSig(keys.key0).Push(keys.pubkey0).PushRedeem());
- @@ -969,6 +969,7 @@ BOOST_AUTO_TEST_CASE(script_json_test)
- nValue = AmountFromValue(test[pos][i]);
- pos++;
- }
- +
- if (test.size() < 4 + pos) // Allow size > 3; extra stuff ignored (useful for comments)
- {
- if (test.size() != 1) {
- @@ -982,7 +983,6 @@ BOOST_AUTO_TEST_CASE(script_json_test)
- CScript scriptPubKey = ParseScript(scriptPubKeyString);
- unsigned int scriptflags = ParseScriptFlags(test[pos++].get_str());
- int scriptError = ParseScriptError(test[pos++].get_str());
- -
- DoTest(scriptPubKey, scriptSig, witness, scriptflags, strTest, scriptError, nValue);
- }
- }
- @@ -1303,12 +1303,12 @@ BOOST_AUTO_TEST_CASE(script_GetScriptAsm)
- BOOST_CHECK_EQUAL(derSig + "00 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "00")) << vchPubKey, true));
- BOOST_CHECK_EQUAL(derSig + "80 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "80")) << vchPubKey, true));
- - BOOST_CHECK_EQUAL(derSig + "[ALL] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "01")) << vchPubKey, true));
- - BOOST_CHECK_EQUAL(derSig + "[NONE] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "02")) << vchPubKey, true));
- - BOOST_CHECK_EQUAL(derSig + "[SINGLE] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "03")) << vchPubKey, true));
- - BOOST_CHECK_EQUAL(derSig + "[ALL|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "81")) << vchPubKey, true));
- - BOOST_CHECK_EQUAL(derSig + "[NONE|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "82")) << vchPubKey, true));
- - BOOST_CHECK_EQUAL(derSig + "[SINGLE|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "83")) << vchPubKey, true));
- + BOOST_CHECK_EQUAL(derSig + "[ALL|FORKID] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "41")) << vchPubKey, true)); // LitecoinCash: Replay attack protection
- + BOOST_CHECK_EQUAL(derSig + "[NONE|FORKID] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "42")) << vchPubKey, true)); // LitecoinCash: Replay attack protection
- + BOOST_CHECK_EQUAL(derSig + "[SINGLE|FORKID] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "43")) << vchPubKey, true)); // LitecoinCash: Replay attack protection
- + BOOST_CHECK_EQUAL(derSig + "[ALL|FORKID|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "C1")) << vchPubKey, true)); // LitecoinCash: Replay attack protection
- + BOOST_CHECK_EQUAL(derSig + "[NONE|FORKID|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "C2")) << vchPubKey, true)); // LitecoinCash: Replay attack protection
- + BOOST_CHECK_EQUAL(derSig + "[SINGLE|FORKID|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "C3")) << vchPubKey, true)); // LitecoinCash: Replay attack protection
- BOOST_CHECK_EQUAL(derSig + "00 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "00")) << vchPubKey));
- BOOST_CHECK_EQUAL(derSig + "80 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(ParseHex(derSig + "80")) << vchPubKey));
- diff --git a/src/test/sighash_tests.cpp b/src/test/sighash_tests.cpp
- index 1ca83a7..e852458 100644
- --- a/src/test/sighash_tests.cpp
- +++ b/src/test/sighash_tests.cpp
- @@ -192,13 +192,13 @@ BOOST_AUTO_TEST_CASE(sighash_from_data)
- nHashType = test[3].get_int();
- sigHashHex = test[4].get_str();
- +
- CDataStream stream(ParseHex(raw_tx), SER_NETWORK, PROTOCOL_VERSION);
- stream >> tx;
- CValidationState state;
- BOOST_CHECK_MESSAGE(CheckTransaction(*tx, state), strTest);
- BOOST_CHECK(state.IsValid());
- -
- std::vector<unsigned char> raw = ParseHex(raw_script);
- scriptCode.insert(scriptCode.end(), raw.begin(), raw.end());
- } catch (...) {
- diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp
- index e778652..d24b336 100644
- --- a/src/test/test_bitcoin.cpp
- +++ b/src/test/test_bitcoin.cpp
- @@ -22,19 +22,9 @@
- #include "rpc/register.h"
- #include "script/sigcache.h"
- -#include <memory>
- +#include "test/testutil.h"
- -void CConnmanTest::AddNode(CNode& node)
- -{
- - LOCK(g_connman->cs_vNodes);
- - g_connman->vNodes.push_back(&node);
- -}
- -
- -void CConnmanTest::ClearNodes()
- -{
- - LOCK(g_connman->cs_vNodes);
- - g_connman->vNodes.clear();
- -}
- +#include <memory>
- uint256 insecure_rand_seed = GetRandHash();
- FastRandomContext insecure_rand_ctx(insecure_rand_seed);
- @@ -60,6 +50,7 @@ BasicTestingSetup::BasicTestingSetup(const std::string& chainName)
- BasicTestingSetup::~BasicTestingSetup()
- {
- ECC_Stop();
- + g_connman.reset();
- }
- TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(chainName)
- @@ -70,7 +61,7 @@ TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(cha
- RegisterAllCoreRPCCommands(tableRPC);
- ClearDatadirCache();
- - pathTemp = fs::temp_directory_path() / strprintf("test_litecoin_%lu_%i", (unsigned long)GetTime(), (int)(InsecureRandRange(100000)));
- + pathTemp = GetTempPath() / strprintf("test_litecoincash_%lu_%i", (unsigned long)GetTime(), (int)(InsecureRandRange(100000)));
- fs::create_directories(pathTemp);
- gArgs.ForceSetArg("-datadir", pathTemp.string());
- @@ -97,17 +88,16 @@ TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(cha
- threadGroup.create_thread(&ThreadScriptCheck);
- g_connman = std::unique_ptr<CConnman>(new CConnman(0x1337, 0x1337)); // Deterministic randomness for tests.
- connman = g_connman.get();
- - peerLogic.reset(new PeerLogicValidation(connman, scheduler));
- + RegisterNodeSignals(GetNodeSignals());
- }
- TestingSetup::~TestingSetup()
- {
- + UnregisterNodeSignals(GetNodeSignals());
- threadGroup.interrupt_all();
- threadGroup.join_all();
- GetMainSignals().FlushBackgroundCallbacks();
- GetMainSignals().UnregisterBackgroundSignalScheduler();
- - g_connman.reset();
- - peerLogic.reset();
- UnloadBlockIndex();
- delete pcoinsTip;
- delete pcoinsdbview;
- diff --git a/src/test/test_bitcoin.h b/src/test/test_bitcoin.h
- index 642be47..dd3b13c 100644
- --- a/src/test/test_bitcoin.h
- +++ b/src/test/test_bitcoin.h
- @@ -49,20 +49,12 @@ struct BasicTestingSetup {
- * Included are data directory, coins database, script check threads setup.
- */
- class CConnman;
- -class CNode;
- -struct CConnmanTest {
- - static void AddNode(CNode& node);
- - static void ClearNodes();
- -};
- -
- -class PeerLogicValidation;
- struct TestingSetup: public BasicTestingSetup {
- CCoinsViewDB *pcoinsdbview;
- fs::path pathTemp;
- boost::thread_group threadGroup;
- CConnman* connman;
- CScheduler scheduler;
- - std::unique_ptr<PeerLogicValidation> peerLogic;
- TestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
- ~TestingSetup();
- diff --git a/src/test/test_bitcoin_main.cpp b/src/test/test_bitcoin_main.cpp
- index a2c73bb..34beef5 100644
- --- a/src/test/test_bitcoin_main.cpp
- +++ b/src/test/test_bitcoin_main.cpp
- @@ -2,7 +2,7 @@
- // Distributed under the MIT software license, see the accompanying
- // file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -#define BOOST_TEST_MODULE Litecoin Test Suite
- +#define BOOST_TEST_MODULE Bitcoin Test Suite
- #include "net.h"
- diff --git a/src/test/testutil.cpp b/src/test/testutil.cpp
- new file mode 100644
- index 0000000..591d0bf
- --- /dev/null
- +++ b/src/test/testutil.cpp
- @@ -0,0 +1,15 @@
- +// Copyright (c) 2009-2016 The Bitcoin Core developers
- +// Distributed under the MIT software license, see the accompanying
- +// file COPYING or http://www.opensource.org/licenses/mit-license.php.
- +
- +#include "testutil.h"
- +
- +#ifdef WIN32
- +#include <shlobj.h>
- +#endif
- +
- +#include "fs.h"
- +
- +fs::path GetTempPath() {
- + return fs::temp_directory_path();
- +}
- diff --git a/src/test/testutil.h b/src/test/testutil.h
- new file mode 100644
- index 0000000..cbe784d
- --- /dev/null
- +++ b/src/test/testutil.h
- @@ -0,0 +1,15 @@
- +// Copyright (c) 2009-2016 The Bitcoin Core developers
- +// Distributed under the MIT software license, see the accompanying
- +// file COPYING or http://www.opensource.org/licenses/mit-license.php.
- +
- +/**
- + * Utility functions shared by unit tests
- + */
- +#ifndef BITCOIN_TEST_TESTUTIL_H
- +#define BITCOIN_TEST_TESTUTIL_H
- +
- +#include "fs.h"
- +
- +fs::path GetTempPath();
- +
- +#endif // BITCOIN_TEST_TESTUTIL_H
- diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp
- index 543e5ad..068dd77 100644
- --- a/src/test/transaction_tests.cpp
- +++ b/src/test/transaction_tests.cpp
- @@ -53,6 +53,7 @@ static std::map<std::string, unsigned int> mapFlagNames = {
- {std::string("WITNESS"), (unsigned int)SCRIPT_VERIFY_WITNESS},
- {std::string("DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM"), (unsigned int)SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM},
- {std::string("WITNESS_PUBKEYTYPE"), (unsigned int)SCRIPT_VERIFY_WITNESS_PUBKEYTYPE},
- + {std::string("ENABLE_SIGHASH_FORKID"), (unsigned int)SCRIPT_ENABLE_SIGHASH_FORKID}, // LitecoinCash: Replay attack protection
- };
- unsigned int ParseScriptFlags(std::string strFlags)
- @@ -166,7 +167,7 @@ BOOST_AUTO_TEST_CASE(tx_valid)
- if (mapprevOutValues.count(tx.vin[i].prevout)) {
- amount = mapprevOutValues[tx.vin[i].prevout];
- }
- - unsigned int verify_flags = ParseScriptFlags(test[2].get_str());
- + unsigned int verify_flags = ParseScriptFlags(test[2].get_str()) | SCRIPT_ENABLE_SIGHASH_FORKID; // LitecoinCash: Replay attack protection
- const CScriptWitness *witness = &tx.vin[i].scriptWitness;
- BOOST_CHECK_MESSAGE(VerifyScript(tx.vin[i].scriptSig, mapprevOutScriptPubKeys[tx.vin[i].prevout],
- witness, verify_flags, TransactionSignatureChecker(&tx, i, amount, txdata), &err),
- @@ -369,7 +370,7 @@ void CreateCreditAndSpend(const CKeyStore& keystore, const CScript& outscript, C
- inputm.vout.resize(1);
- inputm.vout[0].nValue = 1;
- inputm.vout[0].scriptPubKey = CScript();
- - bool ret = SignSignature(keystore, *output, inputm, 0, SIGHASH_ALL);
- + bool ret = SignSignature(keystore, *output, inputm, 0, SIGHASH_ALL | SIGHASH_FORKID);
- assert(ret == success);
- CDataStream ssin(SER_NETWORK, PROTOCOL_VERSION);
- ssin << inputm;
- @@ -425,12 +426,12 @@ BOOST_AUTO_TEST_CASE(test_big_witness_transaction) {
- CScript scriptPubKey = CScript() << OP_0 << std::vector<unsigned char>(hash.begin(), hash.end());
- std::vector<int> sigHashes;
- - sigHashes.push_back(SIGHASH_NONE | SIGHASH_ANYONECANPAY);
- - sigHashes.push_back(SIGHASH_SINGLE | SIGHASH_ANYONECANPAY);
- - sigHashes.push_back(SIGHASH_ALL | SIGHASH_ANYONECANPAY);
- - sigHashes.push_back(SIGHASH_NONE);
- - sigHashes.push_back(SIGHASH_SINGLE);
- - sigHashes.push_back(SIGHASH_ALL);
- + sigHashes.push_back(SIGHASH_NONE | SIGHASH_FORKID | SIGHASH_ANYONECANPAY); // LitecoinCash: Replay attack protection
- + sigHashes.push_back(SIGHASH_SINGLE | SIGHASH_FORKID | SIGHASH_ANYONECANPAY); // LitecoinCash: Replay attack protection
- + sigHashes.push_back(SIGHASH_ALL | SIGHASH_FORKID | SIGHASH_ANYONECANPAY); // LitecoinCash: Replay attack protection
- + sigHashes.push_back(SIGHASH_NONE | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- + sigHashes.push_back(SIGHASH_SINGLE | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- + sigHashes.push_back(SIGHASH_ALL | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- // create a big transaction of 4500 inputs signed by the same key
- for(uint32_t ij = 0; ij < 4500; ij++) {
- diff --git a/src/test/txvalidationcache_tests.cpp b/src/test/txvalidationcache_tests.cpp
- index 2d25cb9..5018de0 100644
- --- a/src/test/txvalidationcache_tests.cpp
- +++ b/src/test/txvalidationcache_tests.cpp
- @@ -55,9 +55,9 @@ BOOST_FIXTURE_TEST_CASE(tx_mempool_block_doublespend, TestChain100Setup)
- // Sign:
- std::vector<unsigned char> vchSig;
- - uint256 hash = SignatureHash(scriptPubKey, spends[i], 0, SIGHASH_ALL, 0, SIGVERSION_BASE);
- + uint256 hash = SignatureHash(scriptPubKey, spends[i], 0, SIGHASH_ALL | SIGHASH_FORKID, 0, SIGVERSION_BASE); // LitecoinCash: Replay attack protection
- BOOST_CHECK(coinbaseKey.Sign(hash, vchSig));
- - vchSig.push_back((unsigned char)SIGHASH_ALL);
- + vchSig.push_back((unsigned char)SIGHASH_ALL | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- spends[i].vin[0].scriptSig << vchSig;
- }
- @@ -109,6 +109,7 @@ void ValidateCheckInputsForAllFlags(CMutableTransaction &tx, uint32_t failing_fl
- for (uint32_t test_flags=0; test_flags < (1U << 16); test_flags += 1) {
- CValidationState state;
- // Filter out incompatible flag choices
- + test_flags |= SCRIPT_ENABLE_SIGHASH_FORKID;
- if ((test_flags & SCRIPT_VERIFY_CLEANSTACK)) {
- // CLEANSTACK requires P2SH and WITNESS, see VerifyScript() in
- // script/interpreter.cpp
- @@ -184,10 +185,10 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup)
- // Sign, with a non-DER signature
- {
- std::vector<unsigned char> vchSig;
- - uint256 hash = SignatureHash(p2pk_scriptPubKey, spend_tx, 0, SIGHASH_ALL, 0, SIGVERSION_BASE);
- + uint256 hash = SignatureHash(p2pk_scriptPubKey, spend_tx, 0, SIGHASH_ALL | SIGHASH_FORKID, 0, SIGVERSION_BASE); // LitecoinCash: Replay attack protection
- BOOST_CHECK(coinbaseKey.Sign(hash, vchSig));
- vchSig.push_back((unsigned char) 0); // padding byte makes this non-DER
- - vchSig.push_back((unsigned char)SIGHASH_ALL);
- + vchSig.push_back((unsigned char)SIGHASH_ALL | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- spend_tx.vin[0].scriptSig << vchSig;
- }
- @@ -256,9 +257,9 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup)
- // Sign
- std::vector<unsigned char> vchSig;
- - uint256 hash = SignatureHash(spend_tx.vout[2].scriptPubKey, invalid_with_cltv_tx, 0, SIGHASH_ALL, 0, SIGVERSION_BASE);
- + uint256 hash = SignatureHash(spend_tx.vout[2].scriptPubKey, invalid_with_cltv_tx, 0, SIGHASH_ALL | SIGHASH_FORKID, 0, SIGVERSION_BASE); // LitecoinCash: Replay attack protection
- BOOST_CHECK(coinbaseKey.Sign(hash, vchSig));
- - vchSig.push_back((unsigned char)SIGHASH_ALL);
- + vchSig.push_back((unsigned char)SIGHASH_ALL | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- invalid_with_cltv_tx.vin[0].scriptSig = CScript() << vchSig << 101;
- ValidateCheckInputsForAllFlags(invalid_with_cltv_tx, SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY, true, true);
- @@ -284,9 +285,9 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup)
- // Sign
- std::vector<unsigned char> vchSig;
- - uint256 hash = SignatureHash(spend_tx.vout[3].scriptPubKey, invalid_with_csv_tx, 0, SIGHASH_ALL, 0, SIGVERSION_BASE);
- + uint256 hash = SignatureHash(spend_tx.vout[3].scriptPubKey, invalid_with_csv_tx, 0, SIGHASH_ALL | SIGHASH_FORKID, 0, SIGVERSION_BASE); // LitecoinCash: Replay attack protection
- BOOST_CHECK(coinbaseKey.Sign(hash, vchSig));
- - vchSig.push_back((unsigned char)SIGHASH_ALL);
- + vchSig.push_back((unsigned char)SIGHASH_ALL | SIGHASH_FORKID); // LitecoinCash: Replay attack protection
- invalid_with_csv_tx.vin[0].scriptSig = CScript() << vchSig << 101;
- ValidateCheckInputsForAllFlags(invalid_with_csv_tx, SCRIPT_VERIFY_CHECKSEQUENCEVERIFY, true, true);
- @@ -314,7 +315,7 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup)
- // Sign
- SignatureData sigdata;
- - ProduceSignature(MutableTransactionSignatureCreator(&keystore, &valid_with_witness_tx, 0, 11*CENT, SIGHASH_ALL), spend_tx.vout[1].scriptPubKey, sigdata);
- + ProduceSignature(MutableTransactionSignatureCreator(&keystore, &valid_with_witness_tx, 0, 11*CENT, SIGHASH_ALL | SIGHASH_FORKID), spend_tx.vout[1].scriptPubKey, sigdata); // LitecoinCash: Replay attack protection
- UpdateTransaction(valid_with_witness_tx, 0, sigdata);
- // This should be valid under all script flags.
- @@ -342,7 +343,7 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup)
- // Sign
- for (int i=0; i<2; ++i) {
- SignatureData sigdata;
- - ProduceSignature(MutableTransactionSignatureCreator(&keystore, &tx, i, 11*CENT, SIGHASH_ALL), spend_tx.vout[i].scriptPubKey, sigdata);
- + ProduceSignature(MutableTransactionSignatureCreator(&keystore, &tx, i, 11*CENT, SIGHASH_ALL | SIGHASH_FORKID), spend_tx.vout[i].scriptPubKey, sigdata); // LitecoinCash: Replay attack protection
- UpdateTransaction(tx, i, sigdata);
- }
- diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp
- index 6ec5442..dab5c99 100644
- --- a/src/test/util_tests.cpp
- +++ b/src/test/util_tests.cpp
- @@ -182,7 +182,7 @@ BOOST_AUTO_TEST_CASE(util_FormatMoney)
- BOOST_CHECK_EQUAL(FormatMoney(COIN/100000), "0.00001");
- BOOST_CHECK_EQUAL(FormatMoney(COIN/1000000), "0.000001");
- BOOST_CHECK_EQUAL(FormatMoney(COIN/10000000), "0.0000001");
- - BOOST_CHECK_EQUAL(FormatMoney(COIN/100000000), "0.00000001");
- + BOOST_CHECK_EQUAL(FormatMoney(COIN/100000000), "0.00");
- }
- BOOST_AUTO_TEST_CASE(util_ParseMoney)
- @@ -228,8 +228,9 @@ BOOST_AUTO_TEST_CASE(util_ParseMoney)
- BOOST_CHECK_EQUAL(ret, COIN/1000000);
- BOOST_CHECK(ParseMoney("0.0000001", ret));
- BOOST_CHECK_EQUAL(ret, COIN/10000000);
- - BOOST_CHECK(ParseMoney("0.00000001", ret));
- - BOOST_CHECK_EQUAL(ret, COIN/100000000);
- + BOOST_CHECK(!ParseMoney("0.00000001", ret)); // LitecoinCash: Coinscale - Test should fail
- + //BOOST_CHECK_EQUAL(ret, COIN/100000000); // LitecoinCash: Coinscale - (Commented this line)
- +
- // Attempted 63 bit overflow should fail
- BOOST_CHECK(!ParseMoney("92233720368.54775808", ret));
- @@ -253,31 +254,6 @@ BOOST_AUTO_TEST_CASE(util_IsHex)
- BOOST_CHECK(!IsHex("0x0000"));
- }
- -BOOST_AUTO_TEST_CASE(util_IsHexNumber)
- -{
- - BOOST_CHECK(IsHexNumber("0x0"));
- - BOOST_CHECK(IsHexNumber("0"));
- - BOOST_CHECK(IsHexNumber("0x10"));
- - BOOST_CHECK(IsHexNumber("10"));
- - BOOST_CHECK(IsHexNumber("0xff"));
- - BOOST_CHECK(IsHexNumber("ff"));
- - BOOST_CHECK(IsHexNumber("0xFfa"));
- - BOOST_CHECK(IsHexNumber("Ffa"));
- - BOOST_CHECK(IsHexNumber("0x00112233445566778899aabbccddeeffAABBCCDDEEFF"));
- - BOOST_CHECK(IsHexNumber("00112233445566778899aabbccddeeffAABBCCDDEEFF"));
- -
- - BOOST_CHECK(!IsHexNumber("")); // empty string not allowed
- - BOOST_CHECK(!IsHexNumber("0x")); // empty string after prefix not allowed
- - BOOST_CHECK(!IsHexNumber("0x0 ")); // no spaces at end,
- - BOOST_CHECK(!IsHexNumber(" 0x0")); // or beginning,
- - BOOST_CHECK(!IsHexNumber("0x 0")); // or middle,
- - BOOST_CHECK(!IsHexNumber(" ")); // etc.
- - BOOST_CHECK(!IsHexNumber("0x0ga")); // invalid character
- - BOOST_CHECK(!IsHexNumber("x0")); // broken prefix
- - BOOST_CHECK(!IsHexNumber("0x0x00")); // two prefixes not allowed
- -
- -}
- -
- BOOST_AUTO_TEST_CASE(util_seed_insecure_rand)
- {
- SeedInsecureRand(true);
- diff --git a/src/univalue/autogen.sh b/src/univalue/autogen.sh
- old mode 100755
- new mode 100644
- diff --git a/src/util.cpp b/src/util.cpp
- index 487009e..5d8ef98 100644
- --- a/src/util.cpp
- +++ b/src/util.cpp
- @@ -87,8 +87,8 @@
- // Application startup time (used for uptime calculation)
- const int64_t nStartupTime = GetTime();
- -const char * const BITCOIN_CONF_FILENAME = "litecoin.conf";
- -const char * const BITCOIN_PID_FILENAME = "litecoin.pid";
- +const char * const BITCOIN_CONF_FILENAME = "litecoincash.conf";
- +const char * const BITCOIN_PID_FILENAME = "litecoincash.pid";
- ArgsManager gArgs;
- bool fPrintToConsole = false;
- @@ -505,7 +505,7 @@ static std::string FormatException(const std::exception* pex, const char* pszThr
- char pszModule[MAX_PATH] = "";
- GetModuleFileNameA(nullptr, pszModule, sizeof(pszModule));
- #else
- - const char* pszModule = "litecoin";
- + const char* pszModule = "litecoincash";
- #endif
- if (pex)
- return strprintf(
- @@ -530,7 +530,7 @@ fs::path GetDefaultDataDir()
- // Unix: ~/.bitcoin
- #ifdef WIN32
- // Windows
- - return GetSpecialFolderPath(CSIDL_APPDATA) / "Litecoin";
- + return GetSpecialFolderPath(CSIDL_APPDATA) / "LitecoinCash";
- #else
- fs::path pathRet;
- char* pszHome = getenv("HOME");
- @@ -540,10 +540,10 @@ fs::path GetDefaultDataDir()
- pathRet = fs::path(pszHome);
- #ifdef MAC_OSX
- // Mac
- - return pathRet / "Library/Application Support/Litecoin";
- + return pathRet / "Library/Application Support/LitecoinCash";
- #else
- // Unix
- - return pathRet / ".litecoin";
- + return pathRet / ".litecoincash";
- #endif
- #endif
- }
- @@ -885,7 +885,13 @@ int GetNumCores()
- std::string CopyrightHolders(const std::string& strPrefix)
- {
- - std::string strCopyrightHolders = strPrefix + strprintf(_(COPYRIGHT_HOLDERS), _(COPYRIGHT_HOLDERS_SUBSTITUTION));
- + std::string strFirstPrefix = strPrefix;
- + strFirstPrefix.replace(strFirstPrefix.find("2011-"), sizeof("2011-")-1, "");
- + std::string strCopyrightHolders = strFirstPrefix + strprintf(_(COPYRIGHT_HOLDERS), _(COPYRIGHT_HOLDERS_SUBSTITUTION));
- +
- + // Check for untranslated substitution to make sure Litecion Core copyright is not removed by accident
- + if (strprintf(COPYRIGHT_HOLDERS, COPYRIGHT_HOLDERS_SUBSTITUTION).find("Litecoin Core") == std::string::npos)
- + strCopyrightHolders += "\n" + strPrefix + "The Litecoin Core developers";
- // Check for untranslated substitution to make sure Bitcoin Core copyright is not removed by accident
- if (strprintf(COPYRIGHT_HOLDERS, COPYRIGHT_HOLDERS_SUBSTITUTION).find("Bitcoin Core") == std::string::npos) {
- diff --git a/src/utilmoneystr.cpp b/src/utilmoneystr.cpp
- index 6e6e331..d93ceba 100644
- --- a/src/utilmoneystr.cpp
- +++ b/src/utilmoneystr.cpp
- @@ -16,7 +16,7 @@ std::string FormatMoney(const CAmount& n)
- int64_t n_abs = (n > 0 ? n : -n);
- int64_t quotient = n_abs/COIN;
- int64_t remainder = n_abs%COIN;
- - std::string str = strprintf("%d.%08d", quotient, remainder);
- + std::string str = strprintf("%d.%07d", quotient, remainder); // LitecoinCash: Updated num decimals
- // Right-trim excess zeros before the decimal point:
- int nTrim = 0;
- diff --git a/src/utilstrencodings.cpp b/src/utilstrencodings.cpp
- index 741680e..fd233f6 100644
- --- a/src/utilstrencodings.cpp
- +++ b/src/utilstrencodings.cpp
- @@ -65,19 +65,6 @@ bool IsHex(const std::string& str)
- return (str.size() > 0) && (str.size()%2 == 0);
- }
- -bool IsHexNumber(const std::string& str)
- -{
- - size_t starting_location = 0;
- - if (str.size() > 2 && *str.begin() == '0' && *(str.begin()+1) == 'x') {
- - starting_location = 2;
- - }
- - for (auto c : str.substr(starting_location)) {
- - if (HexDigit(c) < 0) return false;
- - }
- - // Return false for empty string or "0x".
- - return (str.size() > starting_location);
- -}
- -
- std::vector<unsigned char> ParseHex(const char* psz)
- {
- // convert hex dump to vector
- diff --git a/src/utilstrencodings.h b/src/utilstrencodings.h
- index 192f33f..53da60e 100644
- --- a/src/utilstrencodings.h
- +++ b/src/utilstrencodings.h
- @@ -38,13 +38,7 @@ std::string SanitizeString(const std::string& str, int rule = SAFE_CHARS_DEFAULT
- std::vector<unsigned char> ParseHex(const char* psz);
- std::vector<unsigned char> ParseHex(const std::string& str);
- signed char HexDigit(char c);
- -/* Returns true if each character in str is a hex character, and has an even
- - * number of hex digits.*/
- bool IsHex(const std::string& str);
- -/**
- -* Return true if the string is a hex number, optionally prefixed with "0x"
- -*/
- -bool IsHexNumber(const std::string& str);
- std::vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid = nullptr);
- std::string DecodeBase64(const std::string& str);
- std::string EncodeBase64(const unsigned char* pch, size_t len);
- diff --git a/src/validation.cpp b/src/validation.cpp
- index 32604ee..0f96db9 100644
- --- a/src/validation.cpp
- +++ b/src/validation.cpp
- @@ -50,7 +50,7 @@
- #include <boost/thread.hpp>
- #if defined(NDEBUG)
- -# error "Litecoin cannot be compiled without assertions."
- +# error "LitecoinCash cannot be compiled without assertions."
- #endif
- /**
- @@ -80,7 +80,6 @@ int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE;
- bool fEnableReplacement = DEFAULT_ENABLE_REPLACEMENT;
- uint256 hashAssumeValid;
- -arith_uint256 nMinimumChainWork;
- CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);
- CAmount maxTxFee = DEFAULT_TRANSACTION_MAXFEE;
- @@ -153,26 +152,6 @@ namespace {
- /** chainwork for the last block that preciousblock has been applied to. */
- arith_uint256 nLastPreciousChainwork = 0;
- - /** In order to efficiently track invalidity of headers, we keep the set of
- - * blocks which we tried to connect and found to be invalid here (ie which
- - * were set to BLOCK_FAILED_VALID since the last restart). We can then
- - * walk this set and check if a new header is a descendant of something in
- - * this set, preventing us from having to walk mapBlockIndex when we try
- - * to connect a bad block and fail.
- - *
- - * While this is more complicated than marking everything which descends
- - * from an invalid block as invalid at the time we discover it to be
- - * invalid, doing so would require walking all of mapBlockIndex to find all
- - * descendants. Since this case should be very rare, keeping track of all
- - * BLOCK_FAILED_VALID blocks in a set should be just fine and work just as
- - * well.
- - *
- - * Because we alreardy walk mapBlockIndex in height-order at startup, we go
- - * ahead and mark descendants of invalid blocks as FAILED_CHILD at that time,
- - * instead of putting things in this set.
- - */
- - std::set<CBlockIndex*> g_failed_blocks;
- -
- /** Dirty block index entries. */
- std::set<CBlockIndex*> setDirtyBlockIndex;
- @@ -860,7 +839,7 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool
- // Remove conflicting transactions from the mempool
- for (const CTxMemPool::txiter it : allConflicting)
- {
- - LogPrint(BCLog::MEMPOOL, "replacing tx %s with %s for %s LTC additional fees, %d delta bytes\n",
- + LogPrint(BCLog::MEMPOOL, "replacing tx %s with %s for %s LCC additional fees, %d delta bytes\n",
- it->GetTx().GetHash().ToString(),
- hash.ToString(),
- FormatMoney(nModifiedFees - nConflictingFees),
- @@ -1040,19 +1019,33 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus
- CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
- {
- + // LitecoinCash: Issue premine on 1st post-fork block
- + if (nHeight == consensusParams.lastScryptBlock+1)
- + return consensusParams.premineAmount * COIN * COIN_SCALE;
- +
- int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
- - // Force block reward to zero when right shift is undefined.
- - if (halvings >= 64)
- + // LitecoinCash: Force block reward to zero when right shift is undefined, and don't attempt to issue past total money supply
- + if (halvings >= 64 || nHeight >= 6215968)
- return 0;
- - CAmount nSubsidy = 50 * COIN;
- + CAmount nSubsidy = 50 * COIN * COIN_SCALE;
- // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
- nSubsidy >>= halvings;
- +
- + // LitecoinCash: Slow-start the first n blocks to prevent early miners having an unfair advantage
- + int64_t blocksSinceFork = nHeight - consensusParams.lastScryptBlock;
- + if (blocksSinceFork > 0 && blocksSinceFork < consensusParams.slowStartBlocks) {
- + CAmount incrementPerBlock = nSubsidy / consensusParams.slowStartBlocks;
- + nSubsidy = blocksSinceFork * incrementPerBlock;
- + }
- +
- return nSubsidy;
- }
- bool IsInitialBlockDownload()
- {
- + const CChainParams& chainParams = Params();
- +
- // Once this function has returned false, it must remain false.
- static std::atomic<bool> latchToFalse{false};
- // Optimization: pre-test latch before taking the lock.
- @@ -1066,7 +1059,7 @@ bool IsInitialBlockDownload()
- return true;
- if (chainActive.Tip() == nullptr)
- return true;
- - if (chainActive.Tip()->nChainWork < nMinimumChainWork)
- + if (chainActive.Tip()->nChainWork < UintToArith256(chainParams.GetConsensus().nMinimumChainWork))
- return true;
- if (chainActive.Tip()->GetBlockTime() < (GetTime() - nMaxTipAge))
- return true;
- @@ -1188,7 +1181,6 @@ void static InvalidChainFound(CBlockIndex* pindexNew)
- void static InvalidBlockFound(CBlockIndex *pindex, const CValidationState &state) {
- if (!state.CorruptionPossible()) {
- pindex->nStatus |= BLOCK_FAILED_VALID;
- - g_failed_blocks.insert(pindex);
- setDirtyBlockIndex.insert(pindex);
- setBlockIndexCandidates.erase(pindex);
- InvalidChainFound(pindex);
- @@ -1631,6 +1623,11 @@ static unsigned int GetBlockScriptFlags(const CBlockIndex* pindex, const Consens
- flags |= SCRIPT_VERIFY_NULLDUMMY;
- }
- + // LitecoinCash: Enforce use of correct fork ID
- + if (pindex->nHeight > consensusparams.lastScryptBlock) {
- + flags |= SCRIPT_VERIFY_STRICTENC;
- + flags |= SCRIPT_ENABLE_SIGHASH_FORKID;
- + }
- return flags;
- }
- @@ -1684,7 +1681,7 @@ static bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockInd
- if (it != mapBlockIndex.end()) {
- if (it->second->GetAncestor(pindex->nHeight) == pindex &&
- pindexBestHeader->GetAncestor(pindex->nHeight) == pindex &&
- - pindexBestHeader->nChainWork >= nMinimumChainWork) {
- + pindexBestHeader->nChainWork >= UintToArith256(chainparams.GetConsensus().nMinimumChainWork)) {
- // This block is a member of the assumed verified chain and an ancestor of the best header.
- // The equivalent time check discourages hash power from extorting the network via DOS attack
- // into accepting an invalid block through telling users they must manually set assumevalid.
- @@ -1833,6 +1830,19 @@ static bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockInd
- block.vtx[0]->GetValueOut(), blockReward),
- REJECT_INVALID, "bad-cb-amount");
- + // LitecoinCash: Ensure that lastScryptBlock+1 coinbase TX pays to the premine address
- + if (pindex->nHeight == chainparams.GetConsensus().lastScryptBlock+1) {
- + if (block.vtx[0]->vout[0].scriptPubKey.size() == 1) {
- + LogPrintf("ConnectBlock(): allowing mine\n");
- + } else if (block.vtx[0]->vout[0].scriptPubKey != chainparams.GetConsensus().premineOutputScript) {
- + return state.DoS(100,
- + error("ConnectBlock(): incorrect pubkey on pm coinbase TX (Got %s, expected %s)",
- + HexStr(block.vtx[0]->vout[0].scriptPubKey),
- + HexStr(chainparams.GetConsensus().premineOutputScript)),
- + REJECT_INVALID, "bad-pm-script");
- + }
- + }
- +
- if (!control.Wait())
- return state.DoS(100, error("%s: CheckQueue failed", __func__), REJECT_INVALID, "block-validation-failed");
- int64_t nTime4 = GetTimeMicros(); nTimeVerify += nTime4 - nTime2;
- @@ -2539,18 +2549,17 @@ bool InvalidateBlock(CValidationState& state, const CChainParams& chainparams, C
- {
- AssertLockHeld(cs_main);
- - // We first disconnect backwards and then mark the blocks as invalid.
- - // This prevents a case where pruned nodes may fail to invalidateblock
- - // and be left unable to start as they have no tip candidates (as there
- - // are no blocks that meet the "have data and are not invalid per
- - // nStatus" criteria for inclusion in setBlockIndexCandidates).
- -
- - bool pindex_was_in_chain = false;
- - CBlockIndex *invalid_walk_tip = chainActive.Tip();
- + // Mark the block itself as invalid.
- + pindex->nStatus |= BLOCK_FAILED_VALID;
- + setDirtyBlockIndex.insert(pindex);
- + setBlockIndexCandidates.erase(pindex);
- DisconnectedBlockTransactions disconnectpool;
- while (chainActive.Contains(pindex)) {
- - pindex_was_in_chain = true;
- + CBlockIndex *pindexWalk = chainActive.Tip();
- + pindexWalk->nStatus |= BLOCK_FAILED_CHILD;
- + setDirtyBlockIndex.insert(pindexWalk);
- + setBlockIndexCandidates.erase(pindexWalk);
- // ActivateBestChain considers blocks already in chainActive
- // unconditionally valid already, so force disconnect away from it.
- if (!DisconnectTip(state, chainparams, &disconnectpool)) {
- @@ -2561,21 +2570,6 @@ bool InvalidateBlock(CValidationState& state, const CChainParams& chainparams, C
- }
- }
- - // Now mark the blocks we just disconnected as descendants invalid
- - // (note this may not be all descendants).
- - while (pindex_was_in_chain && invalid_walk_tip != pindex) {
- - invalid_walk_tip->nStatus |= BLOCK_FAILED_CHILD;
- - setDirtyBlockIndex.insert(invalid_walk_tip);
- - setBlockIndexCandidates.erase(invalid_walk_tip);
- - invalid_walk_tip = invalid_walk_tip->pprev;
- - }
- -
- - // Mark the block itself as invalid.
- - pindex->nStatus |= BLOCK_FAILED_VALID;
- - setDirtyBlockIndex.insert(pindex);
- - setBlockIndexCandidates.erase(pindex);
- - g_failed_blocks.insert(pindex);
- -
- // DisconnectTip will add transactions to disconnectpool; try to add these
- // back to the mempool.
- UpdateMempoolForReorg(disconnectpool, true);
- @@ -2613,7 +2607,6 @@ bool ResetBlockFailureFlags(CBlockIndex *pindex) {
- // Reset invalid block marker if it was pointing to one of those.
- pindexBestInvalid = nullptr;
- }
- - g_failed_blocks.erase(it->second);
- }
- it++;
- }
- @@ -3094,21 +3087,6 @@ static bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state
- return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
- if (!ContextualCheckBlockHeader(block, state, chainparams, pindexPrev, GetAdjustedTime()))
- return error("%s: Consensus::ContextualCheckBlockHeader: %s, %s", __func__, hash.ToString(), FormatStateMessage(state));
- -
- - if (!pindexPrev->IsValid(BLOCK_VALID_SCRIPTS)) {
- - for (const CBlockIndex* failedit : g_failed_blocks) {
- - if (pindexPrev->GetAncestor(failedit->nHeight) == failedit) {
- - assert(failedit->nStatus & BLOCK_FAILED_VALID);
- - CBlockIndex* invalid_walk = pindexPrev;
- - while (invalid_walk != failedit) {
- - invalid_walk->nStatus |= BLOCK_FAILED_CHILD;
- - setDirtyBlockIndex.insert(invalid_walk);
- - invalid_walk = invalid_walk->pprev;
- - }
- - return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
- - }
- - }
- - }
- }
- if (pindex == nullptr)
- pindex = AddToBlockIndex(block);
- @@ -3122,15 +3100,13 @@ static bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state
- }
- // Exposed wrapper for AcceptBlockHeader
- -bool ProcessNewBlockHeaders(const std::vector<CBlockHeader>& headers, CValidationState& state, const CChainParams& chainparams, const CBlockIndex** ppindex, CBlockHeader *first_invalid)
- +bool ProcessNewBlockHeaders(const std::vector<CBlockHeader>& headers, CValidationState& state, const CChainParams& chainparams, const CBlockIndex** ppindex)
- {
- - if (first_invalid != nullptr) first_invalid->SetNull();
- {
- LOCK(cs_main);
- for (const CBlockHeader& header : headers) {
- CBlockIndex *pindex = nullptr; // Use a temp pindex instead of ppindex to avoid a const_cast
- if (!AcceptBlockHeader(header, state, chainparams, &pindex)) {
- - if (first_invalid) *first_invalid = header;
- return false;
- }
- if (ppindex) {
- @@ -3160,7 +3136,7 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation
- // process an unrequested block if it's new and has enough work to
- // advance our tip, and isn't too many blocks ahead.
- bool fAlreadyHave = pindex->nStatus & BLOCK_HAVE_DATA;
- - bool fHasMoreOrSameWork = (chainActive.Tip() ? pindex->nChainWork >= chainActive.Tip()->nChainWork : true);
- + bool fHasMoreWork = (chainActive.Tip() ? pindex->nChainWork > chainActive.Tip()->nChainWork : true);
- // Blocks that are too out-of-order needlessly limit the effectiveness of
- // pruning, because pruning will not delete block files that contain any
- // blocks which are too close in height to the tip. Apply this test
- @@ -3177,15 +3153,9 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation
- // and unrequested blocks.
- if (fAlreadyHave) return true;
- if (!fRequested) { // If we didn't ask for it:
- - if (pindex->nTx != 0) return true; // This is a previously-processed block that was pruned
- - if (!fHasMoreOrSameWork) return true; // Don't process less-work chains
- - if (fTooFarAhead) return true; // Block height is too high
- -
- - // Protect against DoS attacks from low-work chains.
- - // If our tip is behind, a peer could try to send us
- - // low-work blocks on a fake chain that we would never
- - // request; don't process these.
- - if (pindex->nChainWork < nMinimumChainWork) return true;
- + if (pindex->nTx != 0) return true; // This is a previously-processed block that was pruned
- + if (!fHasMoreWork) return true; // Don't process less-work chains
- + if (fTooFarAhead) return true; // Block height is too high
- }
- if (fNewBlock) *fNewBlock = true;
- @@ -3535,10 +3505,6 @@ bool static LoadBlockIndexDB(const CChainParams& chainparams)
- pindex->nChainTx = pindex->nTx;
- }
- }
- - if (!(pindex->nStatus & BLOCK_FAILED_MASK) && pindex->pprev && (pindex->pprev->nStatus & BLOCK_FAILED_MASK)) {
- - pindex->nStatus |= BLOCK_FAILED_CHILD;
- - setDirtyBlockIndex.insert(pindex);
- - }
- if (pindex->IsValid(BLOCK_VALID_TRANSACTIONS) && (pindex->nChainTx || pindex->pprev == nullptr))
- setBlockIndexCandidates.insert(pindex);
- if (pindex->nStatus & BLOCK_FAILED_MASK && (!pindexBestInvalid || pindex->nChainWork > pindexBestInvalid->nChainWork))
- @@ -3929,7 +3895,6 @@ void UnloadBlockIndex()
- nLastBlockFile = 0;
- nBlockSequenceId = 1;
- setDirtyBlockIndex.clear();
- - g_failed_blocks.clear();
- setDirtyFileInfo.clear();
- versionbitscache.Clear();
- for (int b = 0; b < VERSIONBITS_NUM_BITS; b++) {
- diff --git a/src/validation.h b/src/validation.h
- index a02e1a8..22c4d41 100644
- --- a/src/validation.h
- +++ b/src/validation.h
- @@ -10,7 +10,6 @@
- #include "config/bitcoin-config.h"
- #endif
- -#include "amount.h"
- #include "coins.h"
- #include "fs.h"
- #include "protocol.h" // For CMessageHeader::MessageStartChars
- @@ -50,11 +49,11 @@ static const bool DEFAULT_WHITELISTRELAY = true;
- /** Default for DEFAULT_WHITELISTFORCERELAY. */
- static const bool DEFAULT_WHITELISTFORCERELAY = true;
- /** Default for -minrelaytxfee, minimum relay fee for transactions */
- -static const unsigned int DEFAULT_MIN_RELAY_TX_FEE = 1000;
- +static const unsigned int DEFAULT_MIN_RELAY_TX_FEE = 100000 / COIN_SCALE / 10; // Litecoin Cash: Lowered fees
- //! -maxtxfee default
- -static const CAmount DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN;
- +static const CAmount DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN * COIN_SCALE;
- //! Discourage users to set fees higher than this amount (in satoshis) per kB
- -static const CAmount HIGH_TX_FEE_PER_KB = 0.01 * COIN;
- +static const CAmount HIGH_TX_FEE_PER_KB = 0.01 * COIN * COIN_SCALE;
- //! -maxtxfee will warn if called with a higher fee than this amount (in satoshis)
- static const CAmount HIGH_MAX_TX_FEE = 100 * HIGH_TX_FEE_PER_KB;
- /** Default for -limitancestorcount, max number of in-mempool ancestors */
- @@ -134,7 +133,7 @@ static const unsigned int DEFAULT_BANSCORE_THRESHOLD = 100;
- /** Default for -persistmempool */
- static const bool DEFAULT_PERSIST_MEMPOOL = true;
- /** Default for -mempoolreplacement */
- -static const bool DEFAULT_ENABLE_REPLACEMENT = false;
- +static const bool DEFAULT_ENABLE_REPLACEMENT = true;
- /** Default for using fee filter */
- static const bool DEFAULT_FEEFILTER = true;
- @@ -161,6 +160,7 @@ extern CTxMemPool mempool;
- typedef std::unordered_map<uint256, CBlockIndex*, BlockHasher> BlockMap;
- extern BlockMap mapBlockIndex;
- extern uint64_t nLastBlockTx;
- +extern uint64_t nLastBlockSize;
- extern uint64_t nLastBlockWeight;
- extern const std::string strMessageMagic;
- extern CWaitableCriticalSection csBestBlock;
- @@ -185,9 +185,6 @@ extern bool fEnableReplacement;
- /** Block hash whose ancestors we will assume to have valid scripts without checking them. */
- extern uint256 hashAssumeValid;
- -/** Minimum work we will assume exists on some valid chain. */
- -extern arith_uint256 nMinimumChainWork;
- -
- /** Best header we've seen so far (used for getheaders queries' starting points). */
- extern CBlockIndex *pindexBestHeader;
- @@ -217,7 +214,7 @@ static const unsigned int DEFAULT_CHECKLEVEL = 3;
- // Setting the target to > than 550MB will make it likely we can respect the target.
- static const uint64_t MIN_DISK_SPACE_FOR_BLOCK_FILES = 550 * 1024 * 1024;
- -/**
- +/**
- * Process an incoming block. This only returns after the best known valid
- * block is made active. Note that it does not, however, guarantee that the
- * specific block passed to it has been checked for validity!
- @@ -228,7 +225,7 @@ static const uint64_t MIN_DISK_SPACE_FOR_BLOCK_FILES = 550 * 1024 * 1024;
- *
- * Note that we guarantee that either the proof-of-work is valid on pblock, or
- * (and possibly also) BlockChecked will have been called.
- - *
- + *
- * Call without cs_main held.
- *
- * @param[in] pblock The block we want to process.
- @@ -247,9 +244,8 @@ bool ProcessNewBlock(const CChainParams& chainparams, const std::shared_ptr<cons
- * @param[out] state This may be set to an Error state if any error occurred processing them
- * @param[in] chainparams The params for the chain we want to connect to
- * @param[out] ppindex If set, the pointer will be set to point to the last new block index object for the given headers
- - * @param[out] first_invalid First header that fails validation, if one exists
- */
- -bool ProcessNewBlockHeaders(const std::vector<CBlockHeader>& block, CValidationState& state, const CChainParams& chainparams, const CBlockIndex** ppindex=nullptr, CBlockHeader *first_invalid=nullptr);
- +bool ProcessNewBlockHeaders(const std::vector<CBlockHeader>& block, CValidationState& state, const CChainParams& chainparams, const CBlockIndex** ppindex=nullptr);
- /** Check whether enough disk space is available for an incoming block */
- bool CheckDiskSpace(uint64_t nAdditionalBytes = 0);
- @@ -353,7 +349,7 @@ bool CheckSequenceLocks(const CTransaction &tx, int flags, LockPoints* lp = null
- /**
- * Closure representing one script verification
- - * Note that this stores references to the spending transaction
- + * Note that this stores references to the spending transaction
- */
- class CScriptCheck
- {
- diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp
- index cd2fecd..bf20d60 100644
- --- a/src/validationinterface.cpp
- +++ b/src/validationinterface.cpp
- @@ -4,9 +4,7 @@
- // file COPYING or http://www.opensource.org/licenses/mit-license.php.
- #include "validationinterface.h"
- -
- #include "init.h"
- -#include "primitives/block.h"
- #include "scheduler.h"
- #include "sync.h"
- #include "util.h"
- diff --git a/src/versionbits.cpp b/src/versionbits.cpp
- index 5958802..04a692d 100644
- --- a/src/versionbits.cpp
- +++ b/src/versionbits.cpp
- @@ -107,7 +107,7 @@ ThresholdState AbstractThresholdConditionChecker::GetStateFor(const CBlockIndex*
- // return the numerical statistics of blocks signalling the specified BIP9 condition in this current period
- BIP9Stats AbstractThresholdConditionChecker::GetStateStatisticsFor(const CBlockIndex* pindex, const Consensus::Params& params) const
- {
- - BIP9Stats stats = {};
- + BIP9Stats stats;
- stats.period = Period(params);
- stats.threshold = Threshold(params);
- diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp
- index fb6e576..b12d46e 100644
- --- a/src/wallet/db.cpp
- +++ b/src/wallet/db.cpp
- @@ -20,40 +20,6 @@
- #include <boost/thread.hpp>
- -namespace {
- -//! Make sure database has a unique fileid within the environment. If it
- -//! doesn't, throw an error. BDB caches do not work properly when more than one
- -//! open database has the same fileid (values written to one database may show
- -//! up in reads to other databases).
- -//!
- -//! BerkeleyDB generates unique fileids by default
- -//! (https://docs.oracle.com/cd/E17275_01/html/programmer_reference/program_copy.html),
- -//! so bitcoin should never create different databases with the same fileid, but
- -//! this error can be triggered if users manually copy database files.
- -void CheckUniqueFileid(const CDBEnv& env, const std::string& filename, Db& db)
- -{
- - if (env.IsMock()) return;
- -
- - u_int8_t fileid[DB_FILE_ID_LEN];
- - int ret = db.get_mpf()->get_fileid(fileid);
- - if (ret != 0) {
- - throw std::runtime_error(strprintf("CDB: Can't open database %s (get_fileid failed with %d)", filename, ret));
- - }
- -
- - for (const auto& item : env.mapDb) {
- - u_int8_t item_fileid[DB_FILE_ID_LEN];
- - if (item.second && item.second->get_mpf()->get_fileid(item_fileid) == 0 &&
- - memcmp(fileid, item_fileid, sizeof(fileid)) == 0) {
- - const char* item_filename = nullptr;
- - item.second->get_dbname(&item_filename, nullptr);
- - throw std::runtime_error(strprintf("CDB: Can't open database %s (duplicates fileid %s from %s)", filename,
- - HexStr(std::begin(item_fileid), std::end(item_fileid)),
- - item_filename ? item_filename : "(unknown database)"));
- - }
- - }
- -}
- -} // namespace
- -
- //
- // CDB
- //
- @@ -135,10 +101,8 @@ bool CDBEnv::Open(const fs::path& pathIn)
- DB_RECOVER |
- nEnvFlags,
- S_IRUSR | S_IWUSR);
- - if (ret != 0) {
- - dbenv->close(0);
- + if (ret != 0)
- return error("CDBEnv::Open: Error %d opening database environment: %s\n", ret, DbEnv::strerror(ret));
- - }
- fDbEnvInit = true;
- fMockDb = false;
- @@ -232,9 +196,9 @@ bool CDB::Recover(const std::string& filename, void *callbackDataIn, bool (*reco
- DB_BTREE, // Database type
- DB_CREATE, // Flags
- 0);
- - if (ret > 0) {
- + if (ret > 0)
- + {
- LogPrintf("Cannot create database file %s\n", filename);
- - pdbCopy->close(0);
- return false;
- }
- @@ -413,34 +377,35 @@ CDB::CDB(CWalletDBWrapper& dbw, const char* pszMode, bool fFlushOnCloseIn) : pdb
- if (!env->Open(GetDataDir()))
- throw std::runtime_error("CDB: Failed to open database environment.");
- - pdb = env->mapDb[strFilename];
- + strFile = strFilename;
- + ++env->mapFileUseCount[strFile];
- + pdb = env->mapDb[strFile];
- if (pdb == nullptr) {
- int ret;
- - std::unique_ptr<Db> pdb_temp(new Db(env->dbenv, 0));
- + pdb = new Db(env->dbenv, 0);
- bool fMockDb = env->IsMock();
- if (fMockDb) {
- - DbMpoolFile* mpf = pdb_temp->get_mpf();
- + DbMpoolFile* mpf = pdb->get_mpf();
- ret = mpf->set_flags(DB_MPOOL_NOFILE, 1);
- - if (ret != 0) {
- - throw std::runtime_error(strprintf("CDB: Failed to configure for no temp file backing for database %s", strFilename));
- - }
- + if (ret != 0)
- + throw std::runtime_error(strprintf("CDB: Failed to configure for no temp file backing for database %s", strFile));
- }
- - ret = pdb_temp->open(nullptr, // Txn pointer
- - fMockDb ? nullptr : strFilename.c_str(), // Filename
- - fMockDb ? strFilename.c_str() : "main", // Logical db name
- - DB_BTREE, // Database type
- - nFlags, // Flags
- + ret = pdb->open(nullptr, // Txn pointer
- + fMockDb ? nullptr : strFile.c_str(), // Filename
- + fMockDb ? strFile.c_str() : "main", // Logical db name
- + DB_BTREE, // Database type
- + nFlags, // Flags
- 0);
- if (ret != 0) {
- + delete pdb;
- + pdb = nullptr;
- + --env->mapFileUseCount[strFile];
- + strFile = "";
- throw std::runtime_error(strprintf("CDB: Error %d, can't open database %s", ret, strFilename));
- }
- - CheckUniqueFileid(*env, strFilename, *pdb_temp);
- -
- - pdb = pdb_temp.release();
- - env->mapDb[strFilename] = pdb;
- if (fCreate && !Exists(std::string("version"))) {
- bool fTmp = fReadOnly;
- @@ -448,9 +413,9 @@ CDB::CDB(CWalletDBWrapper& dbw, const char* pszMode, bool fFlushOnCloseIn) : pdb
- WriteVersion(CLIENT_VERSION);
- fReadOnly = fTmp;
- }
- +
- + env->mapDb[strFile] = pdb;
- }
- - ++env->mapFileUseCount[strFilename];
- - strFile = strFilename;
- }
- }
- @@ -571,10 +536,8 @@ bool CDB::Rewrite(CWalletDBWrapper& dbw, const char* pszSkip)
- env->CloseDb(strFile);
- if (pdbCopy->close(0))
- fSuccess = false;
- - } else {
- - pdbCopy->close(0);
- + delete pdbCopy;
- }
- - delete pdbCopy;
- }
- if (fSuccess) {
- Db dbA(env->dbenv, 0);
- @@ -706,11 +669,6 @@ bool CWalletDBWrapper::Backup(const std::string& strDest)
- pathDest /= strFile;
- try {
- - if (fs::equivalent(pathSrc, pathDest)) {
- - LogPrintf("cannot backup to wallet source file %s\n", pathDest.string());
- - return false;
- - }
- -
- fs::copy_file(pathSrc, pathDest, fs::copy_option::overwrite_if_exists);
- LogPrintf("copied %s to %s\n", strFile, pathDest.string());
- return true;
- diff --git a/src/wallet/db.h b/src/wallet/db.h
- index 6f3cfe9..3614e34 100644
- --- a/src/wallet/db.h
- +++ b/src/wallet/db.h
- @@ -45,7 +45,7 @@ public:
- void Reset();
- void MakeMock();
- - bool IsMock() const { return fMockDb; }
- + bool IsMock() { return fMockDb; }
- /**
- * Verify that database file strFile is OK. If it is not,
- diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp
- index 2be8baf..c5fd9a6 100644
- --- a/src/wallet/rpcdump.cpp
- +++ b/src/wallet/rpcdump.cpp
- @@ -79,10 +79,10 @@ UniValue importprivkey(const JSONRPCRequest& request)
- if (request.fHelp || request.params.size() < 1 || request.params.size() > 3)
- throw std::runtime_error(
- - "importprivkey \"privkey\" ( \"label\" ) ( rescan )\n"
- + "importprivkey \"litecoincashprivkey\" ( \"label\" ) ( rescan )\n"
- "\nAdds a private key (as returned by dumpprivkey) to your wallet.\n"
- "\nArguments:\n"
- - "1. \"privkey\" (string, required) The private key (see dumpprivkey)\n"
- + "1. \"litecoincashprivkey\" (string, required) The private key (see dumpprivkey)\n"
- "2. \"label\" (string, optional, default=\"\") An optional label\n"
- "3. rescan (boolean, optional, default=true) Rescan the wallet for transactions\n"
- "\nNote: This call can take minutes to complete if rescan is true.\n"
- @@ -272,7 +272,7 @@ UniValue importaddress(const JSONRPCRequest& request)
- std::vector<unsigned char> data(ParseHex(request.params[0].get_str()));
- ImportScript(pwallet, CScript(data.begin(), data.end()), strLabel, fP2SH);
- } else {
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address or script");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address or script");
- }
- if (fRescan)
- @@ -557,7 +557,7 @@ UniValue dumpprivkey(const JSONRPCRequest& request)
- "\nReveals the private key corresponding to 'address'.\n"
- "Then the importprivkey can be used with this output\n"
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address for the private key\n"
- + "1. \"address\" (string, required) The litecoincash address for the private key\n"
- "\nResult:\n"
- "\"key\" (string) The private key\n"
- "\nExamples:\n"
- @@ -573,7 +573,7 @@ UniValue dumpprivkey(const JSONRPCRequest& request)
- std::string strAddress = request.params[0].get_str();
- CBitcoinAddress address;
- if (!address.SetString(strAddress))
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address");
- CKeyID keyID;
- if (!address.GetKeyID(keyID))
- throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to a key");
- @@ -595,9 +595,9 @@ UniValue dumpwallet(const JSONRPCRequest& request)
- if (request.fHelp || request.params.size() != 1)
- throw std::runtime_error(
- "dumpwallet \"filename\"\n"
- - "\nDumps all wallet keys in a human-readable format to a server-side file. This does not allow overwriting existing files.\n"
- + "\nDumps all wallet keys in a human-readable format.\n"
- "\nArguments:\n"
- - "1. \"filename\" (string, required) The filename with path (either absolute or relative to litecoind)\n"
- + "1. \"filename\" (string, required) The filename with path (either absolute or relative to litecoincashd)\n"
- "\nResult:\n"
- "{ (json object)\n"
- " \"filename\" : { (string) The filename with full absolute path\n"
- @@ -611,19 +611,9 @@ UniValue dumpwallet(const JSONRPCRequest& request)
- EnsureWalletIsUnlocked(pwallet);
- + std::ofstream file;
- boost::filesystem::path filepath = request.params[0].get_str();
- filepath = boost::filesystem::absolute(filepath);
- -
- - /* Prevent arbitrary files from being overwritten. There have been reports
- - * that users have overwritten wallet files this way:
- - * https://github.com/bitcoin/bitcoin/issues/9934
- - * It may also avoid other security issues.
- - */
- - if (boost::filesystem::exists(filepath)) {
- - throw JSONRPCError(RPC_INVALID_PARAMETER, filepath.string() + " already exists. If you are sure this is what you want, move it out of the way first");
- - }
- -
- - std::ofstream file;
- file.open(filepath.string().c_str());
- if (!file.is_open())
- throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file");
- @@ -643,7 +633,7 @@ UniValue dumpwallet(const JSONRPCRequest& request)
- std::sort(vKeyBirth.begin(), vKeyBirth.end());
- // produce output
- - file << strprintf("# Wallet dump created by Litecoin %s\n", CLIENT_BUILD);
- + file << strprintf("# Wallet dump created by LitecoinCash %s\n", CLIENT_BUILD);
- file << strprintf("# * Created on %s\n", EncodeDumpTime(GetTime()));
- file << strprintf("# * Best block at time of backup was %i (%s),\n", chainActive.Height(), chainActive.Tip()->GetBlockHash().ToString());
- file << strprintf("# mined on %s\n", EncodeDumpTime(chainActive.Tip()->GetBlockTime()));
- @@ -960,7 +950,7 @@ UniValue ProcessImport(CWallet * const pwallet, const UniValue& data, const int6
- pwallet->SetAddressBook(vchAddress, label, "receive");
- if (pwallet->HaveKey(vchAddress)) {
- - throw JSONRPCError(RPC_WALLET_ERROR, "The wallet already contains the private key for this address or script");
- + return false;
- }
- pwallet->mapKeyMetadata[vchAddress].nCreateTime = timestamp;
- diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp
- index 0e4291a..8fd1b35 100644
- --- a/src/wallet/rpcwallet.cpp
- +++ b/src/wallet/rpcwallet.cpp
- @@ -48,6 +48,11 @@ CWallet *GetWalletForJSONRPCRequest(const JSONRPCRequest& request)
- return ::vpwallets.size() == 1 || (request.fHelp && ::vpwallets.size() > 0) ? ::vpwallets[0] : nullptr;
- }
- +CWallet *GetWalletForQTKeyImport()
- +{
- + return ::vpwallets.size() > 0 ? ::vpwallets[0] : nullptr;
- +}
- +
- std::string HelpRequiringPassphrase(CWallet * const pwallet)
- {
- return pwallet && pwallet->IsCrypted()
- @@ -136,13 +141,13 @@ UniValue getnewaddress(const JSONRPCRequest& request)
- if (request.fHelp || request.params.size() > 1)
- throw std::runtime_error(
- "getnewaddress ( \"account\" )\n"
- - "\nReturns a new Litecoin address for receiving payments.\n"
- + "\nReturns a new LitecoinCash address for receiving payments.\n"
- "If 'account' is specified (DEPRECATED), it is added to the address book \n"
- "so payments received with the address will be credited to 'account'.\n"
- "\nArguments:\n"
- "1. \"account\" (string, optional) DEPRECATED. The account name for the address to be linked to. If not provided, the default account \"\" is used. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created if there is no account by the given name.\n"
- "\nResult:\n"
- - "\"address\" (string) The new litecoin address\n"
- + "\"address\" (string) The new litecoincash address\n"
- "\nExamples:\n"
- + HelpExampleCli("getnewaddress", "")
- + HelpExampleRpc("getnewaddress", "")
- @@ -192,11 +197,11 @@ UniValue getaccountaddress(const JSONRPCRequest& request)
- if (request.fHelp || request.params.size() != 1)
- throw std::runtime_error(
- "getaccountaddress \"account\"\n"
- - "\nDEPRECATED. Returns the current Litecoin address for receiving payments to this account.\n"
- + "\nDEPRECATED. Returns the current LitecoinCash address for receiving payments to this account.\n"
- "\nArguments:\n"
- "1. \"account\" (string, required) The account name for the address. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created and a new address created if there is no account by the given name.\n"
- "\nResult:\n"
- - "\"address\" (string) The account litecoin address\n"
- + "\"address\" (string) The account litecoincash address\n"
- "\nExamples:\n"
- + HelpExampleCli("getaccountaddress", "")
- + HelpExampleCli("getaccountaddress", "\"\"")
- @@ -226,7 +231,7 @@ UniValue getrawchangeaddress(const JSONRPCRequest& request)
- if (request.fHelp || request.params.size() > 0)
- throw std::runtime_error(
- "getrawchangeaddress\n"
- - "\nReturns a new Litecoin address, for receiving change.\n"
- + "\nReturns a new LitecoinCash address, for receiving change.\n"
- "This is for use with raw transactions, NOT normal use.\n"
- "\nResult:\n"
- "\"address\" (string) The address\n"
- @@ -266,7 +271,7 @@ UniValue setaccount(const JSONRPCRequest& request)
- "setaccount \"address\" \"account\"\n"
- "\nDEPRECATED. Sets the account associated with the given address.\n"
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address to be associated with an account.\n"
- + "1. \"address\" (string, required) The litecoincash address to be associated with an account.\n"
- "2. \"account\" (string, required) The account to assign the address to.\n"
- "\nExamples:\n"
- + HelpExampleCli("setaccount", "\"LEr4hNAefWYhBMgxCFP2Po1NPrUeiK8kM2\" \"tabby\"")
- @@ -277,7 +282,7 @@ UniValue setaccount(const JSONRPCRequest& request)
- CBitcoinAddress address(request.params[0].get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address");
- std::string strAccount;
- if (request.params.size() > 1)
- @@ -313,7 +318,7 @@ UniValue getaccount(const JSONRPCRequest& request)
- "getaccount \"address\"\n"
- "\nDEPRECATED. Returns the account associated with the given address.\n"
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address for account lookup.\n"
- + "1. \"address\" (string, required) The litecoincash address for account lookup.\n"
- "\nResult:\n"
- "\"accountname\" (string) the account address\n"
- "\nExamples:\n"
- @@ -325,7 +330,7 @@ UniValue getaccount(const JSONRPCRequest& request)
- CBitcoinAddress address(request.params[0].get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address");
- std::string strAccount;
- std::map<CTxDestination, CAddressBookData>::iterator mi = pwallet->mapAddressBook.find(address.Get());
- @@ -351,7 +356,7 @@ UniValue getaddressesbyaccount(const JSONRPCRequest& request)
- "1. \"account\" (string, required) The account name.\n"
- "\nResult:\n"
- "[ (json array of string)\n"
- - " \"address\" (string) a litecoin address associated with the given account\n"
- + " \"address\" (string) a litecoincash address associated with the given account\n"
- " ,...\n"
- "]\n"
- "\nExamples:\n"
- @@ -425,7 +430,7 @@ UniValue sendtoaddress(const JSONRPCRequest& request)
- "\nSend an amount to a given address.\n"
- + HelpRequiringPassphrase(pwallet) +
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address to send to.\n"
- + "1. \"address\" (string, required) The litecoincash address to send to.\n"
- "2. \"amount\" (numeric or string, required) The amount in " + CURRENCY_UNIT + " to send. eg 0.1\n"
- "3. \"comment\" (string, optional) A comment used to store what the transaction is for. \n"
- " This is not part of the transaction, just kept in your wallet.\n"
- @@ -433,7 +438,7 @@ UniValue sendtoaddress(const JSONRPCRequest& request)
- " to which you're sending the transaction. This is not part of the \n"
- " transaction, just kept in your wallet.\n"
- "5. subtractfeefromamount (boolean, optional, default=false) The fee will be deducted from the amount being sent.\n"
- - " The recipient will receive less litecoins than you enter in the amount field.\n"
- + " The recipient will receive less coins than you enter in the amount field.\n"
- "6. replaceable (boolean, optional) Allow this transaction to be replaced by a transaction with higher fees via BIP 125\n"
- "7. conf_target (numeric, optional) Confirmation target (in blocks)\n"
- "8. \"estimate_mode\" (string, optional, default=UNSET) The fee estimate mode, must be one of:\n"
- @@ -453,7 +458,7 @@ UniValue sendtoaddress(const JSONRPCRequest& request)
- CBitcoinAddress address(request.params[0].get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address");
- // Amount
- CAmount nAmount = AmountFromValue(request.params[1]);
- @@ -512,7 +517,7 @@ UniValue listaddressgroupings(const JSONRPCRequest& request)
- "[\n"
- " [\n"
- " [\n"
- - " \"address\", (string) The litecoin address\n"
- + " \"address\", (string) The litecoincash address\n"
- " amount, (numeric) The amount in " + CURRENCY_UNIT + "\n"
- " \"account\" (string, optional) DEPRECATED. The account\n"
- " ]\n"
- @@ -561,7 +566,7 @@ UniValue signmessage(const JSONRPCRequest& request)
- "\nSign a message with the private key of an address"
- + HelpRequiringPassphrase(pwallet) + "\n"
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address to use for the private key.\n"
- + "1. \"address\" (string, required) The litecoincash address to use for the private key.\n"
- "2. \"message\" (string, required) The message to create a signature of.\n"
- "\nResult:\n"
- "\"signature\" (string) The signature of the message encoded in base 64\n"
- @@ -619,7 +624,7 @@ UniValue getreceivedbyaddress(const JSONRPCRequest& request)
- "getreceivedbyaddress \"address\" ( minconf )\n"
- "\nReturns the total amount received by the given address in transactions with at least minconf confirmations.\n"
- "\nArguments:\n"
- - "1. \"address\" (string, required) The litecoin address for transactions.\n"
- + "1. \"address\" (string, required) The litecoincash address for transactions.\n"
- "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n"
- "\nResult:\n"
- "amount (numeric) The total amount in " + CURRENCY_UNIT + " received at this address.\n"
- @@ -639,7 +644,7 @@ UniValue getreceivedbyaddress(const JSONRPCRequest& request)
- // Bitcoin address
- CBitcoinAddress address = CBitcoinAddress(request.params[0].get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address");
- CScript scriptPubKey = GetScriptForDestination(address.Get());
- if (!IsMine(*pwallet, scriptPubKey)) {
- return ValueFromAmount(0);
- @@ -863,14 +868,14 @@ UniValue sendfrom(const JSONRPCRequest& request)
- if (request.fHelp || request.params.size() < 3 || request.params.size() > 6)
- throw std::runtime_error(
- "sendfrom \"fromaccount\" \"toaddress\" amount ( minconf \"comment\" \"comment_to\" )\n"
- - "\nDEPRECATED (use sendtoaddress). Sent an amount from an account to a litecoin address."
- + "\nDEPRECATED (use sendtoaddress). Sent an amount from an account to a litecoincash address."
- + HelpRequiringPassphrase(pwallet) + "\n"
- "\nArguments:\n"
- "1. \"fromaccount\" (string, required) The name of the account to send funds from. May be the default account using \"\".\n"
- " Specifying an account does not influence coin selection, but it does associate the newly created\n"
- " transaction with the account, so the account's balance computation and transaction history can reflect\n"
- " the spend.\n"
- - "2. \"toaddress\" (string, required) The litecoin address to send funds to.\n"
- + "2. \"toaddress\" (string, required) The litecoincash address to send funds to.\n"
- "3. amount (numeric or string, required) The amount in " + CURRENCY_UNIT + " (transaction fee is added on top).\n"
- "4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n"
- "5. \"comment\" (string, optional) A comment used to store what the transaction is for. \n"
- @@ -894,7 +899,7 @@ UniValue sendfrom(const JSONRPCRequest& request)
- std::string strAccount = AccountFromValue(request.params[0]);
- CBitcoinAddress address(request.params[1].get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address");
- CAmount nAmount = AmountFromValue(request.params[2]);
- if (nAmount <= 0)
- throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount for send");
- @@ -939,14 +944,14 @@ UniValue sendmany(const JSONRPCRequest& request)
- "1. \"fromaccount\" (string, required) DEPRECATED. The account to send the funds from. Should be \"\" for the default account\n"
- "2. \"amounts\" (string, required) A json object with addresses and amounts\n"
- " {\n"
- - " \"address\":amount (numeric or string) The litecoin address is the key, the numeric amount (can be string) in " + CURRENCY_UNIT + " is the value\n"
- + " \"address\":amount (numeric or string) The litecoincash address is the key, the numeric amount (can be string) in " + CURRENCY_UNIT + " is the value\n"
- " ,...\n"
- " }\n"
- "3. minconf (numeric, optional, default=1) Only use the balance confirmed at least this many times.\n"
- "4. \"comment\" (string, optional) A comment\n"
- "5. subtractfeefrom (array, optional) A json array with addresses.\n"
- " The fee will be equally deducted from the amount of each selected address.\n"
- - " Those recipients will receive less litecoins than you enter in their corresponding amount field.\n"
- + " Those recipients will receive less coins than you enter in their corresponding amount field.\n"
- " If no addresses are specified here, the sender pays the fee.\n"
- " [\n"
- " \"address\" (string) Subtract fee from this address\n"
- @@ -1017,7 +1022,7 @@ UniValue sendmany(const JSONRPCRequest& request)
- {
- CBitcoinAddress address(name_);
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Litecoin address: ")+name_);
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid LitecoinCash address: ")+name_);
- if (setAddress.count(address))
- throw JSONRPCError(RPC_INVALID_PARAMETER, std::string("Invalid parameter, duplicated address: ")+name_);
- @@ -1078,20 +1083,20 @@ UniValue addmultisigaddress(const JSONRPCRequest& request)
- {
- std::string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" )\n"
- "\nAdd a nrequired-to-sign multisignature address to the wallet.\n"
- - "Each key is a Litecoin address or hex-encoded public key.\n"
- + "Each key is a LitecoinCash address or hex-encoded public key.\n"
- "If 'account' is specified (DEPRECATED), assign address to that account.\n"
- "\nArguments:\n"
- "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n"
- - "2. \"keys\" (string, required) A json array of litecoin addresses or hex-encoded public keys\n"
- + "2. \"keys\" (string, required) A json array of litecoincash addresses or hex-encoded public keys\n"
- " [\n"
- - " \"address\" (string) litecoin address or hex-encoded public key\n"
- + " \"address\" (string) litecoincash address or hex-encoded public key\n"
- " ...,\n"
- " ]\n"
- "3. \"account\" (string, optional) DEPRECATED. An account to assign the addresses to.\n"
- "\nResult:\n"
- - "\"address\" (string) A litecoin address associated with the keys.\n"
- + "\"address\" (string) A litecoincash address associated with the keys.\n"
- "\nExamples:\n"
- "\nAdd a multisig address from 2 addresses\n"
- @@ -1204,7 +1209,7 @@ UniValue addwitnessaddress(const JSONRPCRequest& request)
- CBitcoinAddress address(request.params[0].get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LitecoinCash address");
- Witnessifier w(pwallet);
- CTxDestination dest = address.Get();
- @@ -1569,7 +1574,7 @@ UniValue listtransactions(const JSONRPCRequest& request)
- " {\n"
- " \"account\":\"accountname\", (string) DEPRECATED. The account name associated with the transaction. \n"
- " It will be \"\" for the default account.\n"
- - " \"address\":\"address\", (string) The litecoin address of the transaction. Not present for \n"
- + " \"address\":\"address\", (string) The litecoincash address of the transaction. Not present for \n"
- " move transactions (category = move).\n"
- " \"category\":\"send|receive|move\", (string) The transaction category. 'move' is a local (off blockchain)\n"
- " transaction between accounts, and not associated with an address,\n"
- @@ -1783,7 +1788,7 @@ UniValue listsinceblock(const JSONRPCRequest& request)
- "{\n"
- " \"transactions\": [\n"
- " \"account\":\"accountname\", (string) DEPRECATED. The account name associated with the transaction. Will be \"\" for the default account.\n"
- - " \"address\":\"address\", (string) The litecoin address of the transaction. Not present for move transactions (category = move).\n"
- + " \"address\":\"address\", (string) The litecoincash address of the transaction. Not present for move transactions (category = move).\n"
- " \"category\":\"send|receive\", (string) The transaction category. 'send' has negative amounts, 'receive' has positive amounts.\n"
- " \"amount\": x.xxx, (numeric) The amount in " + CURRENCY_UNIT + ". This is negative for the 'send' category, and for the 'move' category for moves \n"
- " outbound. It is positive for the 'receive' category, and for the 'move' category for inbound funds.\n"
- @@ -1823,20 +1828,19 @@ UniValue listsinceblock(const JSONRPCRequest& request)
- int target_confirms = 1;
- isminefilter filter = ISMINE_SPENDABLE;
- - if (!request.params[0].isNull() && !request.params[0].get_str().empty()) {
- + if (!request.params[0].isNull()) {
- uint256 blockId;
- blockId.SetHex(request.params[0].get_str());
- BlockMap::iterator it = mapBlockIndex.find(blockId);
- - if (it == mapBlockIndex.end()) {
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found");
- - }
- - paltindex = pindex = it->second;
- - if (chainActive[pindex->nHeight] != pindex) {
- - // the block being asked for is a part of a deactivated chain;
- - // we don't want to depend on its perceived height in the block
- - // chain, we want to instead use the last common ancestor
- - pindex = chainActive.FindFork(pindex);
- + if (it != mapBlockIndex.end()) {
- + paltindex = pindex = it->second;
- + if (chainActive[pindex->nHeight] != pindex) {
- + // the block being asked for is a part of a deactivated chain;
- + // we don't want to depend on its perceived height in the block
- + // chain, we want to instead use the last common ancestor
- + pindex = chainActive.FindFork(pindex);
- + }
- }
- }
- @@ -1926,7 +1930,7 @@ UniValue gettransaction(const JSONRPCRequest& request)
- " \"details\" : [\n"
- " {\n"
- " \"account\" : \"accountname\", (string) DEPRECATED. The account name involved in the transaction, can be \"\" for the default account.\n"
- - " \"address\" : \"address\", (string) The litecoin address involved in the transaction\n"
- + " \"address\" : \"address\", (string) The litecoincash address involved in the transaction\n"
- " \"category\" : \"send|receive\", (string) The category, either 'send' or 'receive'\n"
- " \"amount\" : x.xxx, (numeric) The amount in " + CURRENCY_UNIT + "\n"
- " \"label\" : \"label\", (string) A comment for the address/transaction, if any\n"
- @@ -2110,7 +2114,7 @@ UniValue walletpassphrase(const JSONRPCRequest& request)
- throw std::runtime_error(
- "walletpassphrase \"passphrase\" timeout\n"
- "\nStores the wallet decryption key in memory for 'timeout' seconds.\n"
- - "This is needed prior to performing transactions related to private keys such as sending litecoins\n"
- + "This is needed prior to performing transactions related to private keys such as sending coins\n"
- "\nArguments:\n"
- "1. \"passphrase\" (string, required) The wallet passphrase\n"
- "2. timeout (numeric, required) The time to keep the decryption key in seconds.\n"
- @@ -2275,7 +2279,7 @@ UniValue encryptwallet(const JSONRPCRequest& request)
- "\nExamples:\n"
- "\nEncrypt your wallet\n"
- + HelpExampleCli("encryptwallet", "\"my pass phrase\"") +
- - "\nNow set the passphrase to use the wallet, such as for signing or sending litecoin\n"
- + "\nNow set the passphrase to use the wallet, such as for signing or sending litecoincash\n"
- + HelpExampleCli("walletpassphrase", "\"my pass phrase\"") +
- "\nNow we can do something like sign\n"
- + HelpExampleCli("signmessage", "\"address\" \"test message\"") +
- @@ -2313,7 +2317,7 @@ UniValue encryptwallet(const JSONRPCRequest& request)
- // slack space in .dat files; that is bad if the old data is
- // unencrypted private keys. So:
- StartShutdown();
- - return "wallet encrypted; Litecoin server stopping, restart to run with encrypted wallet. The keypool has been flushed and a new HD seed was generated (if you are using HD). You need to make a new backup.";
- + return "wallet encrypted; LitecoinCash server stopping, restart to run with encrypted wallet. The keypool has been flushed and a new HD seed was generated (if you are using HD). You need to make a new backup.";
- }
- UniValue lockunspent(const JSONRPCRequest& request)
- @@ -2329,7 +2333,7 @@ UniValue lockunspent(const JSONRPCRequest& request)
- "\nUpdates list of temporarily unspendable outputs.\n"
- "Temporarily lock (unlock=false) or unlock (unlock=true) specified transaction outputs.\n"
- "If no transaction outputs are specified when unlocking then all current locked transaction outputs are unlocked.\n"
- - "A locked transaction output will not be chosen by automatic coin selection, when spending litecoins.\n"
- + "A locked transaction output will not be chosen by automatic coin selection, when spending coins.\n"
- "Locks are stored in memory only. Nodes start with zero locked outputs, and the locked output list\n"
- "is always cleared (by virtue of process exit) when a node stops or fails.\n"
- "Also see the listunspent call\n"
- @@ -2628,9 +2632,9 @@ UniValue listunspent(const JSONRPCRequest& request)
- "\nArguments:\n"
- "1. minconf (numeric, optional, default=1) The minimum confirmations to filter\n"
- "2. maxconf (numeric, optional, default=9999999) The maximum confirmations to filter\n"
- - "3. \"addresses\" (string) A json array of litecoin addresses to filter\n"
- + "3. \"addresses\" (string) A json array of litecoincash addresses to filter\n"
- " [\n"
- - " \"address\" (string) litecoin address\n"
- + " \"address\" (string) litecoincash address\n"
- " ,...\n"
- " ]\n"
- "4. include_unsafe (bool, optional, default=true) Include outputs that are not safe to spend\n"
- @@ -2647,7 +2651,7 @@ UniValue listunspent(const JSONRPCRequest& request)
- " {\n"
- " \"txid\" : \"txid\", (string) the transaction id \n"
- " \"vout\" : n, (numeric) the vout value\n"
- - " \"address\" : \"address\", (string) the litecoin address\n"
- + " \"address\" : \"address\", (string) the litecoincash address\n"
- " \"account\" : \"account\", (string) DEPRECATED. The associated account, or \"\" for the default account\n"
- " \"scriptPubKey\" : \"key\", (string) the script key\n"
- " \"amount\" : x.xxx, (numeric) the transaction output amount in " + CURRENCY_UNIT + "\n"
- @@ -2690,7 +2694,7 @@ UniValue listunspent(const JSONRPCRequest& request)
- const UniValue& input = inputs[idx];
- CBitcoinAddress address(input.get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Litecoin address: ")+input.get_str());
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid LitecoinCash address: ")+input.get_str());
- if (setAddress.count(address))
- throw JSONRPCError(RPC_INVALID_PARAMETER, std::string("Invalid parameter, duplicated address: ")+input.get_str());
- setAddress.insert(address);
- @@ -2794,7 +2798,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
- "1. \"hexstring\" (string, required) The hex string of the raw transaction\n"
- "2. options (object, optional)\n"
- " {\n"
- - " \"changeAddress\" (string, optional, default pool address) The litecoin address to receive the change\n"
- + " \"changeAddress\" (string, optional, default pool address) The litecoincash address to receive the change\n"
- " \"changePosition\" (numeric, optional, default random) The index of the change output\n"
- " \"includeWatching\" (boolean, optional, default false) Also select inputs which are watch only\n"
- " \"lockUnspents\" (boolean, optional, default false) Lock selected unspent outputs\n"
- @@ -2802,7 +2806,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
- " \"subtractFeeFromOutputs\" (array, optional) A json array of integers.\n"
- " The fee will be equally deducted from the amount of each specified output.\n"
- " The outputs are specified by their zero-based index, before any change output is added.\n"
- - " Those recipients will receive less litecoins than you enter in their corresponding amount field.\n"
- + " Those recipients will receive less coins than you enter in their corresponding amount field.\n"
- " If no outputs are specified here, the sender pays the fee.\n"
- " [vout_index,...]\n"
- " \"replaceable\" (boolean, optional) Marks this transaction as BIP125 replaceable.\n"
- @@ -2868,7 +2872,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
- CBitcoinAddress address(options["changeAddress"].get_str());
- if (!address.IsValid())
- - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "changeAddress must be a valid litecoin address");
- + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "changeAddress must be a valid litecoincash address");
- coinControl.destChange = address.Get();
- }
- diff --git a/src/wallet/rpcwallet.h b/src/wallet/rpcwallet.h
- index db0808b..249a123 100644
- --- a/src/wallet/rpcwallet.h
- +++ b/src/wallet/rpcwallet.h
- @@ -18,6 +18,8 @@ void RegisterWalletRPCCommands(CRPCTable &t);
- */
- CWallet *GetWalletForJSONRPCRequest(const JSONRPCRequest& request);
- +CWallet *GetWalletForQTKeyImport();
- +
- std::string HelpRequiringPassphrase(CWallet *);
- void EnsureWalletIsUnlocked(CWallet *);
- bool EnsureWalletIsAvailable(CWallet *, bool avoidException);
- diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp
- index 5ebacd5..be07daa 100644
- --- a/src/wallet/test/wallet_tests.cpp
- +++ b/src/wallet/test/wallet_tests.cpp
- @@ -364,12 +364,6 @@ BOOST_AUTO_TEST_CASE(ApproximateBestSubset)
- empty_wallet();
- }
- -static void AddKey(CWallet& wallet, const CKey& key)
- -{
- - LOCK(wallet.cs_wallet);
- - wallet.AddKeyPubKey(key, key.GetPubKey());
- -}
- -
- BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup)
- {
- LOCK(cs_main);
- @@ -385,9 +379,10 @@ BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup)
- // and new block files.
- {
- CWallet wallet;
- - AddKey(wallet, coinbaseKey);
- + LOCK(wallet.cs_wallet);
- + wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey());
- BOOST_CHECK_EQUAL(nullBlock, wallet.ScanForWalletTransactions(oldTip));
- - BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 100 * COIN);
- + BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 1000 * COIN); // LitecoinCash: Coinscale
- }
- // Prune the older block file.
- @@ -398,9 +393,10 @@ BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup)
- // file.
- {
- CWallet wallet;
- - AddKey(wallet, coinbaseKey);
- + LOCK(wallet.cs_wallet);
- + wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey());
- BOOST_CHECK_EQUAL(oldTip, wallet.ScanForWalletTransactions(oldTip));
- - BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 50 * COIN);
- + BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 500 * COIN); // LitecoinCash: Coinscale
- }
- // Verify importmulti RPC returns failure for a key whose creation time is
- @@ -524,7 +520,7 @@ BOOST_FIXTURE_TEST_CASE(coin_mark_dirty_immature_credit, TestChain100Setup)
- // credit amount is calculated.
- wtx.MarkDirty();
- wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey());
- - BOOST_CHECK_EQUAL(wtx.GetImmatureCredit(), 50*COIN);
- + BOOST_CHECK_EQUAL(wtx.GetImmatureCredit(), 500*COIN); // LitecoinCash: Coinscale
- }
- static int64_t AddTx(CWallet& wallet, uint32_t lockTime, int64_t mockTime, int64_t blockTime)
- @@ -603,7 +599,8 @@ public:
- wallet.reset(new CWallet(std::unique_ptr<CWalletDBWrapper>(new CWalletDBWrapper(&bitdb, "wallet_test.dat"))));
- bool firstRun;
- wallet->LoadWallet(firstRun);
- - AddKey(*wallet, coinbaseKey);
- + LOCK(wallet->cs_wallet);
- + wallet->AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey());
- wallet->ScanForWalletTransactions(chainActive.Genesis());
- }
- @@ -638,7 +635,7 @@ public:
- BOOST_FIXTURE_TEST_CASE(ListCoins, ListCoinsTestingSetup)
- {
- std::string coinbaseAddress = coinbaseKey.GetPubKey().GetID().ToString();
- - LOCK2(cs_main, wallet->cs_wallet);
- + LOCK(wallet->cs_wallet);
- // Confirm ListCoins initially returns 1 coin grouped under coinbaseKey
- // address.
- @@ -648,7 +645,7 @@ BOOST_FIXTURE_TEST_CASE(ListCoins, ListCoinsTestingSetup)
- BOOST_CHECK_EQUAL(list.begin()->second.size(), 1);
- // Check initial balance from one mature coinbase transaction.
- - BOOST_CHECK_EQUAL(50 * COIN, wallet->GetAvailableBalance());
- + BOOST_CHECK_EQUAL(500 * COIN, wallet->GetAvailableBalance()); // LitecoinCash: Coinscale
- // Add a transaction creating a change address, and confirm ListCoins still
- // returns the coin associated with the change address underneath the
- diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
- index 5e833eb..9bb545d 100644
- --- a/src/wallet/wallet.cpp
- +++ b/src/wallet/wallet.cpp
- @@ -969,15 +969,6 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose)
- wtx.fFromMe = wtxIn.fFromMe;
- fUpdated = true;
- }
- - // If we have a witness-stripped version of this transaction, and we
- - // see a new version with a witness, then we must be upgrading a pre-segwit
- - // wallet. Store the new version of the transaction with the witness,
- - // as the stripped-version must be invalid.
- - // TODO: Store all versions of the transaction, instead of just one.
- - if (wtxIn.tx->HasWitness() && !wtx.tx->HasWitness()) {
- - wtx.SetTx(wtxIn.tx);
- - fUpdated = true;
- - }
- }
- //// debug print
- @@ -2546,7 +2537,7 @@ bool CWallet::SignTransaction(CMutableTransaction &tx)
- const CScript& scriptPubKey = mi->second.tx->vout[input.prevout.n].scriptPubKey;
- const CAmount& amount = mi->second.tx->vout[input.prevout.n].nValue;
- SignatureData sigdata;
- - if (!ProduceSignature(TransactionSignatureCreator(this, &txNewConst, nIn, amount, SIGHASH_ALL), scriptPubKey, sigdata)) {
- + if (!ProduceSignature(TransactionSignatureCreator(this, &txNewConst, nIn, amount, SIGHASH_ALL | SIGHASH_FORKID), scriptPubKey, sigdata)) { // LitecoinCash: Replay attack protection
- return false;
- }
- UpdateTransaction(tx, nIn, sigdata);
- @@ -2926,7 +2917,8 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT
- const CScript& scriptPubKey = coin.txout.scriptPubKey;
- SignatureData sigdata;
- - if (!ProduceSignature(TransactionSignatureCreator(this, &txNewConst, nIn, coin.txout.nValue, SIGHASH_ALL), scriptPubKey, sigdata))
- + // LitecoinCash: Include fork ID in the signature
- + if (!ProduceSignature(TransactionSignatureCreator(this, &txNewConst, nIn, coin.txout.nValue, SIGHASH_ALL | SIGHASH_FORKID), scriptPubKey, sigdata))
- {
- strFailReason = _("Signing transaction failed");
- return false;
- @@ -3110,14 +3102,13 @@ CAmount CWallet::GetMinimumFee(unsigned int nTxBytes, const CCoinControl& coin_c
- DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
- {
- - LOCK2(cs_main, cs_wallet);
- -
- fFirstRunRet = false;
- DBErrors nLoadWalletRet = CWalletDB(*dbw,"cr+").LoadWallet(this);
- if (nLoadWalletRet == DB_NEED_REWRITE)
- {
- if (dbw->Rewrite("\x04pool"))
- {
- + LOCK(cs_wallet);
- setInternalKeyPool.clear();
- setExternalKeyPool.clear();
- m_pool_key_to_index.clear();
- diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
- index 34472b4..271ea0e 100644
- --- a/src/wallet/wallet.h
- +++ b/src/wallet/wallet.h
- @@ -43,14 +43,16 @@ extern bool fWalletRbf;
- static const unsigned int DEFAULT_KEYPOOL_SIZE = 1000;
- //! -paytxfee default
- static const CAmount DEFAULT_TRANSACTION_FEE = 0;
- +// LitecoinCash: 10X cheaper fees. Note these constants much also account for the 10X coinscale.
- //! -fallbackfee default
- -static const CAmount DEFAULT_FALLBACK_FEE = 2000000;
- +static const CAmount DEFAULT_FALLBACK_FEE = 2000000 / COIN_SCALE / 10;
- //! -m_discard_rate default
- -static const CAmount DEFAULT_DISCARD_FEE = 10000;
- +static const CAmount DEFAULT_DISCARD_FEE = 10000 / COIN_SCALE / 10;
- //! -mintxfee default
- -static const CAmount DEFAULT_TRANSACTION_MINFEE = 100000;
- +static const CAmount DEFAULT_TRANSACTION_MINFEE = 100000 / COIN_SCALE / 10;
- //! minimum recommended increment for BIP 125 replacement txs
- -static const CAmount WALLET_INCREMENTAL_RELAY_FEE = 5000;
- +static const CAmount WALLET_INCREMENTAL_RELAY_FEE = 5000 / COIN_SCALE / 10;
- +
- //! target minimum change amount
- static const CAmount MIN_CHANGE = CENT;
- //! final minimum change amount after paying for fees
- @@ -262,7 +264,7 @@ public:
- bool IsCoinBase() const { return tx->IsCoinBase(); }
- };
- -/**
- +/**
- * A transaction with a bunch of additional info that only the owner cares about.
- * It includes any unrecorded transactions needed to link it back to the block chain.
- */
- @@ -647,7 +649,7 @@ private:
- };
- -/**
- +/**
- * A CWallet is an extension of a keystore, which also maintains a set of transactions and balances,
- * and provides the ability to create new transactions.
- */
- @@ -904,7 +906,7 @@ public:
- void GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) const;
- unsigned int ComputeTimeSmart(const CWalletTx& wtx) const;
- - /**
- + /**
- * Increment the next transaction order id
- * @return next transaction order id
- */
- @@ -1031,7 +1033,7 @@ public:
- }
- void GetScriptForMining(std::shared_ptr<CReserveScript> &script);
- -
- +
- unsigned int GetKeyPoolSize()
- {
- AssertLockHeld(cs_wallet); // set{Ex,In}ternalKeyPool
- @@ -1062,8 +1064,8 @@ public:
- // This function will perform salvage on the wallet if requested, as long as only one wallet is
- // being loaded (CWallet::ParameterInteraction forbids -salvagewallet, -zapwallettxes or -upgradewallet with multiwallet).
- static bool Verify();
- -
- - /**
- +
- + /**
- * Address book entry changed.
- * @note called with lock cs_wallet held.
- */
- @@ -1072,7 +1074,7 @@ public:
- const std::string &purpose,
- ChangeType status)> NotifyAddressBookChanged;
- - /**
- + /**
- * Wallet transaction added, removed or updated.
- * @note called with lock cs_wallet held.
- */
- @@ -1126,7 +1128,7 @@ public:
- /* Generates a new HD master key (will not be activated) */
- CPubKey GenerateNewHDMasterKey();
- -
- +
- /* Set the current HD master key (will reset the chain child index counters)
- Sets the master key's version based on the current wallet version (so the
- caller must ensure the current wallet version is correct before calling
- @@ -1166,7 +1168,7 @@ public:
- };
- -/**
- +/**
- * Account information.
- * Stored in wallet with key "acc"+string account name.
- */
- diff --git a/test/functional/README.md b/test/functional/README.md
- index 2558bd0..44efda3 100644
- --- a/test/functional/README.md
- +++ b/test/functional/README.md
- @@ -24,8 +24,8 @@ don't have test cases for.
- - Use a module-level docstring to describe what the test is testing, and how it
- is testing it.
- - When subclassing the BitcoinTestFramwork, place overrides for the
- - `set_test_params()`, `add_options()` and `setup_xxxx()` methods at the top of
- - the subclass, then locally-defined helper methods, then the `run_test()` method.
- + `__init__()`, and `setup_xxxx()` methods at the top of the subclass, then
- + locally-defined helper methods, then the `run_test()` method.
- #### General test-writing advice
- @@ -36,7 +36,7 @@ don't have test cases for.
- - Avoid stop-starting the nodes multiple times during the test if possible. A
- stop-start takes several seconds, so doing it several times blows up the
- runtime of the test.
- -- Set the `self.setup_clean_chain` variable in `set_test_params()` to control whether
- +- Set the `self.setup_clean_chain` variable in `__init__()` to control whether
- or not to use the cached data directories. The cached data directories
- contain a 200-block pre-mined blockchain and wallets for four nodes. Each node
- has 25 mature blocks (25x50=1250 BTC) in its wallet.
- diff --git a/test/functional/abandonconflict.py b/test/functional/abandonconflict.py
- old mode 100755
- new mode 100644
- index b8940ec..52ed773
- --- a/test/functional/abandonconflict.py
- +++ b/test/functional/abandonconflict.py
- @@ -14,8 +14,10 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class AbandonConflictTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- + self.setup_clean_chain = False
- self.extra_args = [["-minrelaytxfee=0.00001"], []]
- def run_test(self):
- @@ -72,7 +74,7 @@ class AbandonConflictTest(BitcoinTestFramework):
- # Restart the node with a higher min relay fee so the parent tx is no longer in mempool
- # TODO: redo with eviction
- self.stop_node(0)
- - self.start_node(0, extra_args=["-minrelaytxfee=0.01"])
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, ["-minrelaytxfee=0.01"])
- # Verify txs no longer in either node's mempool
- assert_equal(len(self.nodes[0].getrawmempool()), 0)
- @@ -99,7 +101,7 @@ class AbandonConflictTest(BitcoinTestFramework):
- # Verify that even with a low min relay fee, the tx is not reaccepted from wallet on startup once abandoned
- self.stop_node(0)
- - self.start_node(0, extra_args=["-minrelaytxfee=0.001"])
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, ["-minrelaytxfee=0.001"])
- assert_equal(len(self.nodes[0].getrawmempool()), 0)
- assert_equal(self.nodes[0].getbalance(), balance)
- @@ -119,7 +121,7 @@ class AbandonConflictTest(BitcoinTestFramework):
- # Remove using high relay fee again
- self.stop_node(0)
- - self.start_node(0, extra_args=["-minrelaytxfee=0.01"])
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, ["-minrelaytxfee=0.01"])
- assert_equal(len(self.nodes[0].getrawmempool()), 0)
- newbalance = self.nodes[0].getbalance()
- assert_equal(newbalance, balance - Decimal("24.96"))
- diff --git a/test/functional/assumevalid.py b/test/functional/assumevalid.py
- old mode 100755
- new mode 100644
- index 65685c4..9d17faa
- --- a/test/functional/assumevalid.py
- +++ b/test/functional/assumevalid.py
- @@ -54,22 +54,20 @@ class BaseNode(NodeConnCB):
- self.send_message(headers_message)
- class AssumeValidTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- def setup_network(self):
- - self.add_nodes(3)
- # Start node0. We don't start the other nodes yet since
- # we need to pre-mine a block with an invalid transaction
- # signature so we can pass in the block hash as assumevalid.
- - self.start_node(0)
- + self.nodes = [self.start_node(0, self.options.tmpdir)]
- def send_blocks_until_disconnected(self, node):
- """Keep sending blocks to the node until we're disconnected."""
- for i in range(len(self.blocks)):
- - if not node.connection:
- - break
- try:
- node.send_message(msg_block(self.blocks[i]))
- except IOError as e:
- @@ -164,13 +162,15 @@ class AssumeValidTest(BitcoinTestFramework):
- height += 1
- # Start node1 and node2 with assumevalid so they accept a block with a bad signature.
- - self.start_node(1, extra_args=["-assumevalid=" + hex(block102.sha256)])
- + self.nodes.append(self.start_node(1, self.options.tmpdir,
- + ["-assumevalid=" + hex(block102.sha256)]))
- node1 = BaseNode() # connects to node1
- connections.append(NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], node1))
- node1.add_connection(connections[1])
- node1.wait_for_verack()
- - self.start_node(2, extra_args=["-assumevalid=" + hex(block102.sha256)])
- + self.nodes.append(self.start_node(2, self.options.tmpdir,
- + ["-assumevalid=" + hex(block102.sha256)]))
- node2 = BaseNode() # connects to node2
- connections.append(NodeConn('127.0.0.1', p2p_port(2), self.nodes[2], node2))
- node2.add_connection(connections[2])
- diff --git a/test/functional/bip65-cltv-p2p.py b/test/functional/bip65-cltv-p2p.py
- old mode 100755
- new mode 100644
- index 6b7f792..fb3e43f
- --- a/test/functional/bip65-cltv-p2p.py
- +++ b/test/functional/bip65-cltv-p2p.py
- @@ -61,7 +61,9 @@ def create_transaction(node, coinbase, to_address, amount):
- return tx
- class BIP65Test(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- self.extra_args = [['-promiscuousmempoolflags=1', '-whitelist=127.0.0.1']]
- self.setup_clean_chain = True
- @@ -108,7 +110,7 @@ class BIP65Test(BitcoinTestFramework):
- node0.send_and_ping(msg_block(block))
- assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
- - wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
- + assert wait_until(lambda: "reject" in node0.last_message.keys())
- with mininode_lock:
- assert_equal(node0.last_message["reject"].code, REJECT_OBSOLETE)
- assert_equal(node0.last_message["reject"].reason, b'bad-version(0x00000003)')
- @@ -137,7 +139,7 @@ class BIP65Test(BitcoinTestFramework):
- node0.send_and_ping(msg_block(block))
- assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
- - wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
- + assert wait_until (lambda: "reject" in node0.last_message.keys())
- with mininode_lock:
- assert node0.last_message["reject"].code in [REJECT_INVALID, REJECT_NONSTANDARD]
- assert_equal(node0.last_message["reject"].data, block.sha256)
- diff --git a/test/functional/bip68-112-113-p2p.py b/test/functional/bip68-112-113-p2p.py
- old mode 100755
- new mode 100644
- index 7e6a4f4..5a322e8
- --- a/test/functional/bip68-112-113-p2p.py
- +++ b/test/functional/bip68-112-113-p2p.py
- @@ -92,9 +92,9 @@ def all_rlt_txs(txarray):
- return txs
- class BIP68_112_113Test(ComparisonTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- - self.setup_clean_chain = True
- self.extra_args = [['-whitelist=127.0.0.1', '-blockversion=4']]
- def run_test(self):
- diff --git a/test/functional/bip68-sequence.py b/test/functional/bip68-sequence.py
- old mode 100755
- new mode 100644
- index b3b5adf..87a5069
- --- a/test/functional/bip68-sequence.py
- +++ b/test/functional/bip68-sequence.py
- @@ -17,8 +17,10 @@ SEQUENCE_LOCKTIME_MASK = 0x0000ffff
- NOT_FINAL_ERROR = "64: non-BIP68-final"
- class BIP68Test(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- + self.setup_clean_chain = False
- self.extra_args = [[], ["-acceptnonstdtxn=0"]]
- def run_test(self):
- @@ -83,7 +85,7 @@ class BIP68Test(BitcoinTestFramework):
- tx2.vout = [CTxOut(int(value-self.relayfee*COIN), CScript([b'a']))]
- tx2.rehash()
- - assert_raises_rpc_error(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, ToHex(tx2))
- + assert_raises_jsonrpc(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, ToHex(tx2))
- # Setting the version back down to 1 should disable the sequence lock,
- # so this should be accepted.
- @@ -180,7 +182,7 @@ class BIP68Test(BitcoinTestFramework):
- if (using_sequence_locks and not should_pass):
- # This transaction should be rejected
- - assert_raises_rpc_error(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, rawtx)
- + assert_raises_jsonrpc(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, rawtx)
- else:
- # This raw transaction should be accepted
- self.nodes[0].sendrawtransaction(rawtx)
- @@ -227,7 +229,7 @@ class BIP68Test(BitcoinTestFramework):
- if (orig_tx.hash in node.getrawmempool()):
- # sendrawtransaction should fail if the tx is in the mempool
- - assert_raises_rpc_error(-26, NOT_FINAL_ERROR, node.sendrawtransaction, ToHex(tx))
- + assert_raises_jsonrpc(-26, NOT_FINAL_ERROR, node.sendrawtransaction, ToHex(tx))
- else:
- # sendrawtransaction should succeed if the tx is not in the mempool
- node.sendrawtransaction(ToHex(tx))
- @@ -280,7 +282,7 @@ class BIP68Test(BitcoinTestFramework):
- tx5.vout[0].nValue += int(utxos[0]["amount"]*COIN)
- raw_tx5 = self.nodes[0].signrawtransaction(ToHex(tx5))["hex"]
- - assert_raises_rpc_error(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, raw_tx5)
- + assert_raises_jsonrpc(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, raw_tx5)
- # Test mempool-BIP68 consistency after reorg
- #
- @@ -353,7 +355,7 @@ class BIP68Test(BitcoinTestFramework):
- tx3.vout = [CTxOut(int(tx2.vout[0].nValue - self.relayfee*COIN), CScript([b'a']))]
- tx3.rehash()
- - assert_raises_rpc_error(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, ToHex(tx3))
- + assert_raises_jsonrpc(-26, NOT_FINAL_ERROR, self.nodes[0].sendrawtransaction, ToHex(tx3))
- # make a block that violates bip68; ensure that the tip updates
- tip = int(self.nodes[0].getbestblockhash(), 16)
- @@ -369,14 +371,11 @@ class BIP68Test(BitcoinTestFramework):
- def activateCSV(self):
- # activation should happen at block height 432 (3 periods)
- - # getblockchaininfo will show CSV as active at block 431 (144 * 3 -1) since it's returning whether CSV is active for the next block.
- min_activation_height = 432
- height = self.nodes[0].getblockcount()
- - assert_greater_than(min_activation_height - height, 2)
- - self.nodes[0].generate(min_activation_height - height - 2)
- - assert_equal(get_bip9_status(self.nodes[0], 'csv')['status'], "locked_in")
- - self.nodes[0].generate(1)
- - assert_equal(get_bip9_status(self.nodes[0], 'csv')['status'], "active")
- + assert(height < min_activation_height)
- + self.nodes[0].generate(min_activation_height-height)
- + assert(get_bip9_status(self.nodes[0], 'csv')['status'] == 'active')
- sync_blocks(self.nodes)
- # Use self.nodes[1] to test that version 2 transactions are standard.
- diff --git a/test/functional/bip9-softforks.py b/test/functional/bip9-softforks.py
- old mode 100755
- new mode 100644
- index 9047893..f00232c
- --- a/test/functional/bip9-softforks.py
- +++ b/test/functional/bip9-softforks.py
- @@ -28,10 +28,11 @@ from test_framework.comptool import TestInstance, TestManager
- from test_framework.script import CScript, OP_1NEGATE, OP_CHECKSEQUENCEVERIFY, OP_DROP
- class BIP9SoftForksTest(ComparisonTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- self.extra_args = [['-whitelist=127.0.0.1']]
- - self.setup_clean_chain = True
- def run_test(self):
- self.test = TestManager(self, self.options.tmpdir)
- @@ -240,7 +241,6 @@ class BIP9SoftForksTest(ComparisonTestFramework):
- # Restart all
- self.test.clear_all_connections()
- self.stop_nodes()
- - self.nodes = []
- shutil.rmtree(self.options.tmpdir + "/node0")
- self.setup_chain()
- self.setup_network()
- diff --git a/test/functional/bipdersig-p2p.py b/test/functional/bipdersig-p2p.py
- old mode 100755
- new mode 100644
- index 1e9828d..ffc0e61
- --- a/test/functional/bipdersig-p2p.py
- +++ b/test/functional/bipdersig-p2p.py
- @@ -49,7 +49,9 @@ def create_transaction(node, coinbase, to_address, amount):
- return tx
- class BIP66Test(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- self.extra_args = [['-promiscuousmempoolflags=1', '-whitelist=127.0.0.1']]
- self.setup_clean_chain = True
- @@ -97,7 +99,7 @@ class BIP66Test(BitcoinTestFramework):
- node0.send_and_ping(msg_block(block))
- assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
- - wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
- + assert wait_until(lambda: "reject" in node0.last_message.keys())
- with mininode_lock:
- assert_equal(node0.last_message["reject"].code, REJECT_OBSOLETE)
- assert_equal(node0.last_message["reject"].reason, b'bad-version(0x00000002)')
- @@ -127,7 +129,7 @@ class BIP66Test(BitcoinTestFramework):
- node0.send_and_ping(msg_block(block))
- assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
- - wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
- + assert wait_until (lambda: "reject" in node0.last_message.keys())
- with mininode_lock:
- # We can receive different reject messages depending on whether
- # bitcoind is running with multiple script check threads. If script
- diff --git a/test/functional/bitcoin_cli.py b/test/functional/bitcoin_cli.py
- deleted file mode 100755
- index 7acfede..0000000
- --- a/test/functional/bitcoin_cli.py
- +++ /dev/null
- @@ -1,25 +0,0 @@
- -#!/usr/bin/env python3
- -# Copyright (c) 2017 The Bitcoin Core developers
- -# Distributed under the MIT software license, see the accompanying
- -# file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -"""Test bitcoin-cli"""
- -from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import assert_equal
- -
- -class TestBitcoinCli(BitcoinTestFramework):
- -
- - def set_test_params(self):
- - self.setup_clean_chain = True
- - self.num_nodes = 1
- -
- - def run_test(self):
- - """Main test logic"""
- -
- - self.log.info("Compare responses from getinfo RPC and `bitcoin-cli getinfo`")
- - cli_get_info = self.nodes[0].cli.getinfo()
- - rpc_get_info = self.nodes[0].getinfo()
- -
- - assert_equal(cli_get_info, rpc_get_info)
- -
- -if __name__ == '__main__':
- - TestBitcoinCli().main()
- diff --git a/test/functional/blockchain.py b/test/functional/blockchain.py
- old mode 100755
- new mode 100644
- index 4c2997f..a7034e6
- --- a/test/functional/blockchain.py
- +++ b/test/functional/blockchain.py
- @@ -21,17 +21,21 @@ from decimal import Decimal
- import http.client
- import subprocess
- -from test_framework.test_framework import BitcoinTestFramework
- +from test_framework.test_framework import (BitcoinTestFramework, BITCOIND_PROC_WAIT_TIMEOUT)
- from test_framework.util import (
- assert_equal,
- assert_raises,
- - assert_raises_rpc_error,
- + assert_raises_jsonrpc,
- assert_is_hex_string,
- assert_is_hash_string,
- )
- +
- class BlockchainTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- + self.setup_clean_chain = False
- self.num_nodes = 1
- self.extra_args = [['-stopatheight=207']]
- @@ -96,7 +100,7 @@ class BlockchainTest(BitcoinTestFramework):
- def _test_getblockheader(self):
- node = self.nodes[0]
- - assert_raises_rpc_error(-5, "Block not found",
- + assert_raises_jsonrpc(-5, "Block not found",
- node.getblockheader, "nonsense")
- besthash = node.getbestblockhash()
- @@ -135,14 +139,14 @@ class BlockchainTest(BitcoinTestFramework):
- self.nodes[0].generate(6)
- assert_equal(self.nodes[0].getblockcount(), 206)
- self.log.debug('Node should not stop at this height')
- - assert_raises(subprocess.TimeoutExpired, lambda: self.nodes[0].process.wait(timeout=3))
- + assert_raises(subprocess.TimeoutExpired, lambda: self.bitcoind_processes[0].wait(timeout=3))
- try:
- self.nodes[0].generate(1)
- except (ConnectionError, http.client.BadStatusLine):
- pass # The node already shut down before response
- self.log.debug('Node should stop at this height...')
- - self.nodes[0].wait_until_stopped()
- - self.start_node(0)
- + self.bitcoind_processes[0].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT)
- + self.nodes[0] = self.start_node(0, self.options.tmpdir)
- assert_equal(self.nodes[0].getblockcount(), 207)
- diff --git a/test/functional/bumpfee.py b/test/functional/bumpfee.py
- old mode 100755
- new mode 100644
- index 5d4cc2f..110a044
- --- a/test/functional/bumpfee.py
- +++ b/test/functional/bumpfee.py
- @@ -15,7 +15,7 @@ make assumptions about execution order.
- """
- from segwit import send_to_witness
- -from test_framework.test_framework import BitcoinTestFramework, SkipTest
- +from test_framework.test_framework import BitcoinTestFramework
- from test_framework import blocktools
- from test_framework.mininode import CTransaction
- from test_framework.util import *
- @@ -30,27 +30,30 @@ WALLET_PASSPHRASE_TIMEOUT = 3600
- class BumpFeeTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- self.setup_clean_chain = True
- - self.extra_args = [["-prematurewitness", "-walletprematurewitness", "-walletrbf={}".format(i)]
- - for i in range(self.num_nodes)]
- - def run_test(self):
- - raise SkipTest("Litecoin doesn't support RBF.")
- + def setup_network(self, split=False):
- + extra_args = [["-prematurewitness", "-walletprematurewitness", "-walletrbf={}".format(i)]
- + for i in range(self.num_nodes)]
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args)
- # Encrypt wallet for test_locked_wallet_fails test
- - self.nodes[1].node_encrypt_wallet(WALLET_PASSPHRASE)
- - self.start_node(1)
- + self.nodes[1].encryptwallet(WALLET_PASSPHRASE)
- + self.bitcoind_processes[1].wait()
- + self.nodes[1] = self.start_node(1, self.options.tmpdir, extra_args[1])
- self.nodes[1].walletpassphrase(WALLET_PASSPHRASE, WALLET_PASSPHRASE_TIMEOUT)
- connect_nodes_bi(self.nodes, 0, 1)
- self.sync_all()
- + def run_test(self):
- peer_node, rbf_node = self.nodes
- rbf_node_address = rbf_node.getnewaddress()
- - # fund rbf node with 10 coins of 0.1 ltc (10,000,000 satoshis)
- + # fund rbf node with 10 coins of 0.1 LCC (10,000,000 satoshis)
- self.log.info("Mining blocks...")
- peer_node.generate(110)
- self.sync_all()
- @@ -135,7 +138,7 @@ def test_segwit_bumpfee_succeeds(rbf_node, dest_address):
- def test_nonrbf_bumpfee_fails(peer_node, dest_address):
- # cannot replace a non RBF transaction (from node which did not enable RBF)
- not_rbfid = peer_node.sendtoaddress(dest_address, Decimal("0.090000"))
- - assert_raises_rpc_error(-4, "not BIP 125 replaceable", peer_node.bumpfee, not_rbfid)
- + assert_raises_jsonrpc(-4, "not BIP 125 replaceable", peer_node.bumpfee, not_rbfid)
- def test_notmine_bumpfee_fails(rbf_node, peer_node, dest_address):
- @@ -155,7 +158,7 @@ def test_notmine_bumpfee_fails(rbf_node, peer_node, dest_address):
- signedtx = rbf_node.signrawtransaction(rawtx)
- signedtx = peer_node.signrawtransaction(signedtx["hex"])
- rbfid = rbf_node.sendrawtransaction(signedtx["hex"])
- - assert_raises_rpc_error(-4, "Transaction contains inputs that don't belong to this wallet",
- + assert_raises_jsonrpc(-4, "Transaction contains inputs that don't belong to this wallet",
- rbf_node.bumpfee, rbfid)
- @@ -166,7 +169,7 @@ def test_bumpfee_with_descendant_fails(rbf_node, rbf_node_address, dest_address)
- tx = rbf_node.createrawtransaction([{"txid": parent_id, "vout": 0}], {dest_address: 0.020000})
- tx = rbf_node.signrawtransaction(tx)
- txid = rbf_node.sendrawtransaction(tx["hex"])
- - assert_raises_rpc_error(-8, "Transaction has descendants in the wallet", rbf_node.bumpfee, parent_id)
- + assert_raises_jsonrpc(-8, "Transaction has descendants in the wallet", rbf_node.bumpfee, parent_id)
- def test_small_output_fails(rbf_node, dest_address):
- @@ -175,7 +178,7 @@ def test_small_output_fails(rbf_node, dest_address):
- rbf_node.bumpfee(rbfid, {"totalFee": 5000000})
- rbfid = spend_one_input(rbf_node, dest_address)
- - assert_raises_rpc_error(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 5000001})
- + assert_raises_jsonrpc(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 5000001})
- def test_dust_to_fee(rbf_node, dest_address):
- @@ -207,7 +210,7 @@ def test_rebumping(rbf_node, dest_address):
- # check that re-bumping the original tx fails, but bumping the bumper succeeds
- rbfid = spend_one_input(rbf_node, dest_address)
- bumped = rbf_node.bumpfee(rbfid, {"totalFee": 200000})
- - assert_raises_rpc_error(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 300000})
- + assert_raises_jsonrpc(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 300000})
- rbf_node.bumpfee(bumped["txid"], {"totalFee": 300000})
- @@ -215,7 +218,7 @@ def test_rebumping_not_replaceable(rbf_node, dest_address):
- # check that re-bumping a non-replaceable bump tx fails
- rbfid = spend_one_input(rbf_node, dest_address)
- bumped = rbf_node.bumpfee(rbfid, {"totalFee": 1000000, "replaceable": False})
- - assert_raises_rpc_error(-4, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"],
- + assert_raises_jsonrpc(-4, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"],
- {"totalFee": 2000000})
- @@ -266,7 +269,7 @@ def test_bumpfee_metadata(rbf_node, dest_address):
- def test_locked_wallet_fails(rbf_node, dest_address):
- rbfid = spend_one_input(rbf_node, dest_address)
- rbf_node.walletlock()
- - assert_raises_rpc_error(-13, "Please enter the wallet passphrase with walletpassphrase first.",
- + assert_raises_jsonrpc(-13, "Please enter the wallet passphrase with walletpassphrase first.",
- rbf_node.bumpfee, rbfid)
- diff --git a/test/functional/combine_logs.py b/test/functional/combine_logs.py
- old mode 100755
- new mode 100644
- diff --git a/test/functional/create_cache.py b/test/functional/create_cache.py
- old mode 100755
- new mode 100644
- index 7d4d1a5..39c4c0f
- --- a/test/functional/create_cache.py
- +++ b/test/functional/create_cache.py
- @@ -12,10 +12,13 @@ tests are being run in parallel.
- from test_framework.test_framework import BitcoinTestFramework
- class CreateCache(BitcoinTestFramework):
- - # Test network and test nodes are not required:
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- +
- + # Test network and test nodes are not required:
- self.num_nodes = 0
- + self.nodes = []
- def setup_network(self):
- pass
- diff --git a/test/functional/dbcrash.py b/test/functional/dbcrash.py
- old mode 100755
- new mode 100644
- index 24b9765..8339305
- --- a/test/functional/dbcrash.py
- +++ b/test/functional/dbcrash.py
- @@ -43,7 +43,8 @@ except AttributeError:
- pass
- class ChainstateWriteCrashTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 4
- self.setup_clean_chain = False
- @@ -63,9 +64,7 @@ class ChainstateWriteCrashTest(BitcoinTestFramework):
- self.extra_args = [self.node0_args, self.node1_args, self.node2_args, self.node3_args]
- def setup_network(self):
- - # Need a bit of extra time for the nodes to start up for this test
- - self.add_nodes(self.num_nodes, extra_args=self.extra_args, timewait=90)
- - self.start_nodes()
- + self.setup_nodes()
- # Leave them unconnected, we'll use submitblock directly in this test
- def restart_node(self, node_index, expected_tip):
- @@ -75,10 +74,10 @@ class ChainstateWriteCrashTest(BitcoinTestFramework):
- after 60 seconds. Returns the utxo hash of the given node."""
- time_start = time.time()
- - while time.time() - time_start < 120:
- + while time.time() - time_start < 60:
- try:
- # Any of these RPC calls could throw due to node crash
- - self.start_node(node_index)
- + self.nodes[node_index] = self.start_node(node_index, self.options.tmpdir, self.extra_args[node_index])
- self.nodes[node_index].waitforblock(expected_tip)
- utxo_hash = self.nodes[node_index].gettxoutsetinfo()['hash_serialized_2']
- return utxo_hash
- diff --git a/test/functional/decodescript.py b/test/functional/decodescript.py
- old mode 100755
- new mode 100644
- index 6611da8..21a9f12
- --- a/test/functional/decodescript.py
- +++ b/test/functional/decodescript.py
- @@ -10,7 +10,9 @@ from test_framework.mininode import *
- from io import BytesIO
- class DecodeScriptTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- diff --git a/test/functional/disablewallet.py b/test/functional/disablewallet.py
- old mode 100755
- new mode 100644
- index c75ef9b..d344513
- --- a/test/functional/disablewallet.py
- +++ b/test/functional/disablewallet.py
- @@ -11,15 +11,18 @@
- from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- +
- class DisableWalletTest (BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- self.extra_args = [["-disablewallet"]]
- def run_test (self):
- # Make sure wallet is really disabled
- - assert_raises_rpc_error(-32601, 'Method not found', self.nodes[0].getwalletinfo)
- + assert_raises_jsonrpc(-32601, 'Method not found', self.nodes[0].getwalletinfo)
- x = self.nodes[0].validateaddress('3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy')
- assert(x['isvalid'] == False)
- x = self.nodes[0].validateaddress('mneYUmWYsuk7kySiURxCi3AGxrAqZxLgPZ')
- @@ -28,7 +31,7 @@ class DisableWalletTest (BitcoinTestFramework):
- # Checking mining to an address without a wallet. Generating to a valid address should succeed
- # but generating to an invalid address will fail.
- self.nodes[0].generatetoaddress(1, 'mneYUmWYsuk7kySiURxCi3AGxrAqZxLgPZ')
- - assert_raises_rpc_error(-5, "Invalid address", self.nodes[0].generatetoaddress, 1, '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy')
- + assert_raises_jsonrpc(-5, "Invalid address", self.nodes[0].generatetoaddress, 1, '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy')
- if __name__ == '__main__':
- DisableWalletTest ().main ()
- diff --git a/test/functional/disconnect_ban.py b/test/functional/disconnect_ban.py
- old mode 100755
- new mode 100644
- index 59655d3..89b68ae
- --- a/test/functional/disconnect_ban.py
- +++ b/test/functional/disconnect_ban.py
- @@ -5,17 +5,18 @@
- """Test node disconnect and ban behavior"""
- import time
- +from test_framework.mininode import wait_until
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import (
- - assert_equal,
- - assert_raises_rpc_error,
- - connect_nodes_bi,
- - wait_until,
- -)
- +from test_framework.util import (assert_equal,
- + assert_raises_jsonrpc,
- + connect_nodes_bi)
- class DisconnectBanTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- + self.setup_clean_chain = False
- def run_test(self):
- self.log.info("Test setban and listbanned RPCs")
- @@ -23,7 +24,7 @@ class DisconnectBanTest(BitcoinTestFramework):
- self.log.info("setban: successfully ban single IP address")
- assert_equal(len(self.nodes[1].getpeerinfo()), 2) # node1 should have 2 connections to node0 at this point
- self.nodes[1].setban("127.0.0.1", "add")
- - wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0, timeout=10)
- + assert wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0, timeout=10)
- assert_equal(len(self.nodes[1].getpeerinfo()), 0) # all nodes must be disconnected at this point
- assert_equal(len(self.nodes[1].listbanned()), 1)
- @@ -34,14 +35,14 @@ class DisconnectBanTest(BitcoinTestFramework):
- self.log.info("setban: fail to ban an already banned subnet")
- assert_equal(len(self.nodes[1].listbanned()), 1)
- - assert_raises_rpc_error(-23, "IP/Subnet already banned", self.nodes[1].setban, "127.0.0.1", "add")
- + assert_raises_jsonrpc(-23, "IP/Subnet already banned", self.nodes[1].setban, "127.0.0.1", "add")
- self.log.info("setban: fail to ban an invalid subnet")
- - assert_raises_rpc_error(-30, "Error: Invalid IP/Subnet", self.nodes[1].setban, "127.0.0.1/42", "add")
- + assert_raises_jsonrpc(-30, "Error: Invalid IP/Subnet", self.nodes[1].setban, "127.0.0.1/42", "add")
- assert_equal(len(self.nodes[1].listbanned()), 1) # still only one banned ip because 127.0.0.1 is within the range of 127.0.0.0/24
- self.log.info("setban remove: fail to unban a non-banned subnet")
- - assert_raises_rpc_error(-30, "Error: Unban failed", self.nodes[1].setban, "127.0.0.1", "remove")
- + assert_raises_jsonrpc(-30, "Error: Unban failed", self.nodes[1].setban, "127.0.0.1", "remove")
- assert_equal(len(self.nodes[1].listbanned()), 1)
- self.log.info("setban remove: successfully unban subnet")
- @@ -65,8 +66,8 @@ class DisconnectBanTest(BitcoinTestFramework):
- assert_equal(len(self.nodes[1].listbanned()), 3)
- self.stop_node(1)
- - self.start_node(1)
- + self.nodes[1] = self.start_node(1, self.options.tmpdir)
- listAfterShutdown = self.nodes[1].listbanned()
- assert_equal("127.0.0.0/24", listAfterShutdown[0]['address'])
- assert_equal("127.0.0.0/32", listAfterShutdown[1]['address'])
- @@ -81,15 +82,15 @@ class DisconnectBanTest(BitcoinTestFramework):
- self.log.info("disconnectnode: fail to disconnect when calling with address and nodeid")
- address1 = self.nodes[0].getpeerinfo()[0]['addr']
- node1 = self.nodes[0].getpeerinfo()[0]['addr']
- - assert_raises_rpc_error(-32602, "Only one of address and nodeid should be provided.", self.nodes[0].disconnectnode, address=address1, nodeid=node1)
- + assert_raises_jsonrpc(-32602, "Only one of address and nodeid should be provided.", self.nodes[0].disconnectnode, address=address1, nodeid=node1)
- self.log.info("disconnectnode: fail to disconnect when calling with junk address")
- - assert_raises_rpc_error(-29, "Node not found in connected nodes", self.nodes[0].disconnectnode, address="221B Baker Street")
- + assert_raises_jsonrpc(-29, "Node not found in connected nodes", self.nodes[0].disconnectnode, address="221B Baker Street")
- self.log.info("disconnectnode: successfully disconnect node by address")
- address1 = self.nodes[0].getpeerinfo()[0]['addr']
- self.nodes[0].disconnectnode(address=address1)
- - wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
- + assert wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
- assert not [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1]
- self.log.info("disconnectnode: successfully reconnect node")
- @@ -100,7 +101,7 @@ class DisconnectBanTest(BitcoinTestFramework):
- self.log.info("disconnectnode: successfully disconnect node by node id")
- id1 = self.nodes[0].getpeerinfo()[0]['id']
- self.nodes[0].disconnectnode(nodeid=id1)
- - wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
- + assert wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
- assert not [node for node in self.nodes[0].getpeerinfo() if node['id'] == id1]
- if __name__ == '__main__':
- diff --git a/test/functional/example_test.py b/test/functional/example_test.py
- old mode 100755
- new mode 100644
- index 228e150..7709524
- --- a/test/functional/example_test.py
- +++ b/test/functional/example_test.py
- @@ -23,13 +23,13 @@ from test_framework.mininode import (
- mininode_lock,
- msg_block,
- msg_getdata,
- + wait_until,
- )
- from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import (
- assert_equal,
- connect_nodes,
- p2p_port,
- - wait_until,
- )
- # NodeConnCB is a class containing callbacks to be executed when a P2P
- @@ -73,19 +73,21 @@ def custom_function():
- class ExampleTest(BitcoinTestFramework):
- # Each functional test is a subclass of the BitcoinTestFramework class.
- - # Override the set_test_params(), add_options(), setup_chain(), setup_network()
- + # Override the __init__(), add_options(), setup_chain(), setup_network()
- # and setup_nodes() methods to customize the test setup as required.
- - def set_test_params(self):
- - """Override test parameters for your individual test.
- + def __init__(self):
- + """Initialize the test
- - This method must be overridden and num_nodes must be exlicitly set."""
- + Call super().__init__() first, and then override any test parameters
- + for your individual test."""
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- # Use self.extra_args to change command-line arguments for the nodes
- self.extra_args = [[], ["-logips"], []]
- - # self.log.info("I've finished set_test_params") # Oops! Can't run self.log before run_test()
- + # self.log.info("I've finished __init__") # Oops! Can't run self.log before run_test()
- # Use add_options() to add specific command-line options for your test.
- # In practice this is not used very much, since the tests are mostly written
- @@ -207,7 +209,7 @@ class ExampleTest(BitcoinTestFramework):
- # wait_until() will loop until a predicate condition is met. Use it to test properties of the
- # NodeConnCB objects.
- - wait_until(lambda: sorted(blocks) == sorted(list(node2.block_receive_map.keys())), timeout=5, lock=mininode_lock)
- + assert wait_until(lambda: sorted(blocks) == sorted(list(node2.block_receive_map.keys())), timeout=5)
- self.log.info("Check that each block was received only once")
- # The network thread uses a global lock on data access to the NodeConn objects when sending and receiving
- diff --git a/test/functional/forknotify.py b/test/functional/forknotify.py
- old mode 100755
- new mode 100644
- index afcad1f..3bcf0a6
- --- a/test/functional/forknotify.py
- +++ b/test/functional/forknotify.py
- @@ -7,18 +7,28 @@ import os
- import time
- from test_framework.test_framework import BitcoinTestFramework
- +from test_framework.util import *
- class ForkNotifyTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- + self.setup_clean_chain = False
- def setup_network(self):
- + self.nodes = []
- self.alert_filename = os.path.join(self.options.tmpdir, "alert.txt")
- with open(self.alert_filename, 'w', encoding='utf8'):
- pass # Just open then close to create zero-length file
- - self.extra_args = [["-blockversion=2", "-alertnotify=echo %s >> \"" + self.alert_filename + "\""],
- - ["-blockversion=211"]]
- - super().setup_network()
- + self.nodes.append(self.start_node(0, self.options.tmpdir,
- + ["-blockversion=2", "-alertnotify=echo %s >> \"" + self.alert_filename + "\""]))
- + # Node1 mines block.version=211 blocks
- + self.nodes.append(self.start_node(1, self.options.tmpdir,
- + ["-blockversion=211"]))
- + connect_nodes(self.nodes[1], 0)
- +
- + self.sync_all()
- def run_test(self):
- # Mine 51 up-version blocks
- diff --git a/test/functional/fundrawtransaction.py b/test/functional/fundrawtransaction.py
- old mode 100755
- new mode 100644
- index 1c9598f..07c0d7b
- --- a/test/functional/fundrawtransaction.py
- +++ b/test/functional/fundrawtransaction.py
- @@ -4,7 +4,7 @@
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- """Test the fundrawtransaction RPC."""
- -from test_framework.test_framework import BitcoinTestFramework
- +from test_framework.test_framework import BitcoinTestFramework, BITCOIND_PROC_WAIT_TIMEOUT
- from test_framework.util import *
- @@ -14,10 +14,13 @@ def get_unspent(listunspent, amount):
- return utx
- raise AssertionError('Could not find unspent with amount={}'.format(amount))
- +
- class RawTransactionsTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 4
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- + self.num_nodes = 4
- def setup_network(self, split=False):
- self.setup_nodes()
- @@ -179,7 +182,7 @@ class RawTransactionsTest(BitcoinTestFramework):
- dec_tx = self.nodes[2].decoderawtransaction(rawtx)
- assert_equal(utx['txid'], dec_tx['vin'][0]['txid'])
- - assert_raises_rpc_error(-3, "Unexpected key foo", self.nodes[2].fundrawtransaction, rawtx, {'foo':'bar'})
- + assert_raises_jsonrpc(-3, "Unexpected key foo", self.nodes[2].fundrawtransaction, rawtx, {'foo':'bar'})
- ############################################################
- # test a fundrawtransaction with an invalid change address #
- @@ -192,7 +195,7 @@ class RawTransactionsTest(BitcoinTestFramework):
- dec_tx = self.nodes[2].decoderawtransaction(rawtx)
- assert_equal(utx['txid'], dec_tx['vin'][0]['txid'])
- - assert_raises_rpc_error(-5, "changeAddress must be a valid litecoin address", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':'foobar'})
- + assert_raises_jsonrpc(-5, "changeAddress must be a valid litecoincash address", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':'foobar'})
- ############################################################
- # test a fundrawtransaction with a provided change address #
- @@ -206,7 +209,7 @@ class RawTransactionsTest(BitcoinTestFramework):
- assert_equal(utx['txid'], dec_tx['vin'][0]['txid'])
- change = self.nodes[2].getnewaddress()
- - assert_raises_rpc_error(-8, "changePosition out of bounds", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':change, 'changePosition':2})
- + assert_raises_jsonrpc(-8, "changePosition out of bounds", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':change, 'changePosition':2})
- rawtxfund = self.nodes[2].fundrawtransaction(rawtx, {'changeAddress': change, 'changePosition': 0})
- dec_tx = self.nodes[2].decoderawtransaction(rawtxfund['hex'])
- out = dec_tx['vout'][0]
- @@ -315,7 +318,7 @@ class RawTransactionsTest(BitcoinTestFramework):
- rawtx = self.nodes[2].createrawtransaction(inputs, outputs)
- dec_tx = self.nodes[2].decoderawtransaction(rawtx)
- - assert_raises_rpc_error(-4, "Insufficient funds", self.nodes[2].fundrawtransaction, rawtx)
- + assert_raises_jsonrpc(-4, "Insufficient funds", self.nodes[2].fundrawtransaction, rawtx)
- ############################################################
- #compare fee of a standard pubkeyhash transaction
- @@ -446,11 +449,12 @@ class RawTransactionsTest(BitcoinTestFramework):
- ############################################################
- # locked wallet test
- self.stop_node(0)
- - self.nodes[1].node_encrypt_wallet("test")
- self.stop_node(2)
- self.stop_node(3)
- + self.nodes[1].encryptwallet("test")
- + self.bitcoind_processes[1].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT)
- - self.start_nodes()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir)
- # This test is not meant to test fee estimation and we'd like
- # to be sure all txs are sent at a consistent desired feerate
- for node in self.nodes:
- @@ -470,14 +474,14 @@ class RawTransactionsTest(BitcoinTestFramework):
- rawtx = self.nodes[1].createrawtransaction(inputs, outputs)
- # fund a transaction that requires a new key for the change output
- # creating the key must be impossible because the wallet is locked
- - assert_raises_rpc_error(-4, "Keypool ran out, please call keypoolrefill first", self.nodes[1].fundrawtransaction, rawtx)
- + assert_raises_jsonrpc(-4, "Keypool ran out, please call keypoolrefill first", self.nodes[1].fundrawtransaction, rawtx)
- #refill the keypool
- self.nodes[1].walletpassphrase("test", 100)
- self.nodes[1].keypoolrefill(8) #need to refill the keypool to get an internal change address
- self.nodes[1].walletlock()
- - assert_raises_rpc_error(-13, "walletpassphrase", self.nodes[1].sendtoaddress, self.nodes[0].getnewaddress(), 1.2)
- + assert_raises_jsonrpc(-13, "walletpassphrase", self.nodes[1].sendtoaddress, self.nodes[0].getnewaddress(), 1.2)
- oldBalance = self.nodes[0].getbalance()
- @@ -625,7 +629,7 @@ class RawTransactionsTest(BitcoinTestFramework):
- inputs = []
- outputs = {self.nodes[3].getnewaddress() : 1}
- rawtx = self.nodes[3].createrawtransaction(inputs, outputs)
- - result = self.nodes[3].fundrawtransaction(rawtx, {"feeRate": 1*min_relay_tx_fee}) # uses min_relay_tx_fee (set by settxfee)
- + result = self.nodes[3].fundrawtransaction(rawtx) # uses min_relay_tx_fee (set by settxfee)
- result2 = self.nodes[3].fundrawtransaction(rawtx, {"feeRate": 2*min_relay_tx_fee})
- result3 = self.nodes[3].fundrawtransaction(rawtx, {"feeRate": 10*min_relay_tx_fee})
- result_fee_rate = result['fee'] * 1000 / count_bytes(result['hex'])
- diff --git a/test/functional/getblocktemplate_longpoll.py b/test/functional/getblocktemplate_longpoll.py
- old mode 100755
- new mode 100644
- index 89768bd..bbe1dda
- --- a/test/functional/getblocktemplate_longpoll.py
- +++ b/test/functional/getblocktemplate_longpoll.py
- @@ -17,14 +17,16 @@ class LongpollThread(threading.Thread):
- self.longpollid = templat['longpollid']
- # create a new connection to the node, we can't use the same
- # connection from two threads
- - self.node = get_rpc_proxy(node.url, 1, timeout=600, coveragedir=node.coverage_dir)
- + self.node = get_rpc_proxy(node.url, 1, timeout=600)
- def run(self):
- self.node.getblocktemplate({'longpollid':self.longpollid})
- class GetBlockTemplateLPTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 2
- + def __init__(self):
- + super().__init__()
- + self.num_nodes = 4
- + self.setup_clean_chain = False
- def run_test(self):
- self.log.info("Warning: this test will take about 70 seconds in the best case. Be patient.")
- diff --git a/test/functional/getchaintips.py b/test/functional/getchaintips.py
- old mode 100755
- new mode 100644
- index 21b67bf..15f96c5
- --- a/test/functional/getchaintips.py
- +++ b/test/functional/getchaintips.py
- @@ -14,10 +14,13 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import assert_equal
- class GetChainTipsTest (BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 4
- + self.setup_clean_chain = False
- def run_test (self):
- +
- tips = self.nodes[0].getchaintips ()
- assert_equal (len (tips), 1)
- assert_equal (tips[0]['branchlen'], 0)
- diff --git a/test/functional/httpbasics.py b/test/functional/httpbasics.py
- old mode 100755
- new mode 100644
- index c7682cb..4b32e8d
- --- a/test/functional/httpbasics.py
- +++ b/test/functional/httpbasics.py
- @@ -11,8 +11,10 @@ import http.client
- import urllib.parse
- class HTTPBasicsTest (BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 3
- + self.setup_clean_chain = False
- def setup_network(self):
- self.setup_nodes()
- diff --git a/test/functional/import-rescan.py b/test/functional/import-rescan.py
- old mode 100755
- new mode 100644
- index 9555542..4fc5078
- --- a/test/functional/import-rescan.py
- +++ b/test/functional/import-rescan.py
- @@ -19,8 +19,9 @@ importing nodes pick up the new transactions regardless of whether rescans
- happened previously.
- """
- +from test_framework.authproxy import JSONRPCException
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import (assert_raises_rpc_error, connect_nodes, sync_blocks, assert_equal, set_node_times)
- +from test_framework.util import (connect_nodes, sync_blocks, assert_equal, set_node_times)
- import collections
- import enum
- @@ -34,26 +35,21 @@ Rescan = enum.Enum("Rescan", "no yes late_timestamp")
- class Variant(collections.namedtuple("Variant", "call data rescan prune")):
- """Helper for importing one key and verifying scanned transactions."""
- - def try_rpc(self, func, *args, **kwargs):
- - if self.expect_disabled:
- - assert_raises_rpc_error(-4, "Rescan is disabled in pruned mode", func, *args, **kwargs)
- - else:
- - return func(*args, **kwargs)
- -
- def do_import(self, timestamp):
- """Call one key import RPC."""
- if self.call == Call.single:
- if self.data == Data.address:
- - response = self.try_rpc(self.node.importaddress, self.address["address"], self.label,
- - self.rescan == Rescan.yes)
- + response, error = try_rpc(self.node.importaddress, self.address["address"], self.label,
- + self.rescan == Rescan.yes)
- elif self.data == Data.pub:
- - response = self.try_rpc(self.node.importpubkey, self.address["pubkey"], self.label,
- - self.rescan == Rescan.yes)
- + response, error = try_rpc(self.node.importpubkey, self.address["pubkey"], self.label,
- + self.rescan == Rescan.yes)
- elif self.data == Data.priv:
- - response = self.try_rpc(self.node.importprivkey, self.key, self.label, self.rescan == Rescan.yes)
- + response, error = try_rpc(self.node.importprivkey, self.key, self.label, self.rescan == Rescan.yes)
- assert_equal(response, None)
- -
- + assert_equal(error, {'message': 'Rescan is disabled in pruned mode',
- + 'code': -4} if self.expect_disabled else None)
- elif self.call == Call.multi:
- response = self.node.importmulti([{
- "scriptPubKey": {
- @@ -115,7 +111,8 @@ TIMESTAMP_WINDOW = 2 * 60 * 60
- class ImportRescanTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2 + len(IMPORT_NODES)
- def setup_network(self):
- @@ -124,8 +121,7 @@ class ImportRescanTest(BitcoinTestFramework):
- if import_node.prune:
- extra_args[i] += ["-prune=1"]
- - self.add_nodes(self.num_nodes, extra_args)
- - self.start_nodes()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args)
- for i in range(1, self.num_nodes):
- connect_nodes(self.nodes[i], 0)
- @@ -184,5 +180,13 @@ class ImportRescanTest(BitcoinTestFramework):
- else:
- variant.check()
- +
- +def try_rpc(func, *args, **kwargs):
- + try:
- + return func(*args, **kwargs), None
- + except JSONRPCException as e:
- + return None, e.error
- +
- +
- if __name__ == "__main__":
- ImportRescanTest().main()
- diff --git a/test/functional/importmulti.py b/test/functional/importmulti.py
- old mode 100755
- new mode 100644
- index 324f645..e83e85d
- --- a/test/functional/importmulti.py
- +++ b/test/functional/importmulti.py
- @@ -7,7 +7,8 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class ImportMultiTest (BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- self.setup_clean_chain = True
- @@ -169,18 +170,6 @@ class ImportMultiTest (BitcoinTestFramework):
- assert_equal(address_assert['ismine'], True)
- assert_equal(address_assert['timestamp'], timestamp)
- - self.log.info("Should not import an address with private key if is already imported")
- - result = self.nodes[1].importmulti([{
- - "scriptPubKey": {
- - "address": address['address']
- - },
- - "timestamp": "now",
- - "keys": [ self.nodes[0].dumpprivkey(address['address']) ]
- - }])
- - assert_equal(result[0]['success'], False)
- - assert_equal(result[0]['error']['code'], -4)
- - assert_equal(result[0]['error']['message'], 'The wallet already contains the private key for this address or script')
- -
- # Address + Private key + watchonly
- self.log.info("Should not import an address with private key and with watchonly")
- address = self.nodes[0].validateaddress(self.nodes[0].getnewaddress())
- @@ -440,7 +429,7 @@ class ImportMultiTest (BitcoinTestFramework):
- # restart nodes to check for proper serialization/deserialization of watch only address
- self.stop_nodes()
- - self.start_nodes()
- + self.nodes = self.start_nodes(2, self.options.tmpdir)
- address_assert = self.nodes[1].validateaddress(watchonly_address)
- assert_equal(address_assert['iswatchonly'], True)
- assert_equal(address_assert['ismine'], False)
- @@ -448,11 +437,11 @@ class ImportMultiTest (BitcoinTestFramework):
- # Bad or missing timestamps
- self.log.info("Should throw on invalid or missing timestamp values")
- - assert_raises_rpc_error(-3, 'Missing required timestamp field for key',
- + assert_raises_message(JSONRPCException, 'Missing required timestamp field for key',
- self.nodes[1].importmulti, [{
- "scriptPubKey": address['scriptPubKey'],
- }])
- - assert_raises_rpc_error(-3, 'Expected number or "now" timestamp value for key. got type string',
- + assert_raises_message(JSONRPCException, 'Expected number or "now" timestamp value for key. got type string',
- self.nodes[1].importmulti, [{
- "scriptPubKey": address['scriptPubKey'],
- "timestamp": "",
- diff --git a/test/functional/importprunedfunds.py b/test/functional/importprunedfunds.py
- old mode 100755
- new mode 100644
- index c445b66..94753fe
- --- a/test/functional/importprunedfunds.py
- +++ b/test/functional/importprunedfunds.py
- @@ -6,8 +6,11 @@
- from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- +
- class ImportPrunedFundsTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- @@ -67,7 +70,7 @@ class ImportPrunedFundsTest(BitcoinTestFramework):
- self.sync_all()
- #Import with no affiliated address
- - assert_raises_rpc_error(-5, "No addresses", self.nodes[1].importprunedfunds, rawtxn1, proof1)
- + assert_raises_jsonrpc(-5, "No addresses", self.nodes[1].importprunedfunds, rawtxn1, proof1)
- balance1 = self.nodes[1].getbalance("", 0, True)
- assert_equal(balance1, Decimal(0))
- @@ -79,8 +82,8 @@ class ImportPrunedFundsTest(BitcoinTestFramework):
- assert_equal(balance2, Decimal('0.05'))
- #Import with private key with no rescan
- - self.nodes[1].importprivkey(privkey=address3_privkey, label="add3", rescan=False)
- - self.nodes[1].importprunedfunds(rawtxn3, proof3)
- + self.nodes[1].importprivkey(address3_privkey, "add3", False)
- + result3 = self.nodes[1].importprunedfunds(rawtxn3, proof3)
- balance3 = self.nodes[1].getbalance("add3", 0, False)
- assert_equal(balance3, Decimal('0.025'))
- balance3 = self.nodes[1].getbalance("*", 0, True)
- @@ -98,7 +101,7 @@ class ImportPrunedFundsTest(BitcoinTestFramework):
- assert_equal(address_info['ismine'], True)
- #Remove transactions
- - assert_raises_rpc_error(-8, "Transaction does not exist in wallet.", self.nodes[1].removeprunedfunds, txnid1)
- + assert_raises_jsonrpc(-8, "Transaction does not exist in wallet.", self.nodes[1].removeprunedfunds, txnid1)
- balance1 = self.nodes[1].getbalance("*", 0, True)
- assert_equal(balance1, Decimal('0.075'))
- diff --git a/test/functional/invalidateblock.py b/test/functional/invalidateblock.py
- old mode 100755
- new mode 100644
- index dd3daf1..c499d57
- --- a/test/functional/invalidateblock.py
- +++ b/test/functional/invalidateblock.py
- @@ -8,7 +8,9 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class InvalidateTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- diff --git a/test/functional/invalidblockrequest.py b/test/functional/invalidblockrequest.py
- old mode 100755
- new mode 100644
- index 9f44b44..eabc0db
- --- a/test/functional/invalidblockrequest.py
- +++ b/test/functional/invalidblockrequest.py
- @@ -23,9 +23,9 @@ class InvalidBlockRequestTest(ComparisonTestFramework):
- ''' Can either run this test as 1 node with expected answers, or two and compare them.
- Change the "outcome" variable from each TestInstance object to only do the comparison. '''
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- - self.setup_clean_chain = True
- def run_test(self):
- test = TestManager(self, self.options.tmpdir)
- diff --git a/test/functional/invalidtxrequest.py b/test/functional/invalidtxrequest.py
- old mode 100755
- new mode 100644
- index a22bd8f..a9ac231
- --- a/test/functional/invalidtxrequest.py
- +++ b/test/functional/invalidtxrequest.py
- @@ -19,9 +19,9 @@ class InvalidTxRequestTest(ComparisonTestFramework):
- ''' Can either run this test as 1 node with expected answers, or two and compare them.
- Change the "outcome" variable from each TestInstance object to only do the comparison. '''
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- - self.setup_clean_chain = True
- def run_test(self):
- test = TestManager(self, self.options.tmpdir)
- diff --git a/test/functional/keypool-topup.py b/test/functional/keypool-topup.py
- old mode 100755
- new mode 100644
- index 8302e3e..0e0c0ea
- --- a/test/functional/keypool-topup.py
- +++ b/test/functional/keypool-topup.py
- @@ -20,7 +20,8 @@ from test_framework.util import (
- )
- class KeypoolRestoreTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- self.extra_args = [['-usehd=0'], ['-usehd=1', '-keypool=100', '-keypoolmin=20']]
- @@ -34,7 +35,7 @@ class KeypoolRestoreTest(BitcoinTestFramework):
- self.stop_node(1)
- shutil.copyfile(self.tmpdir + "/node1/regtest/wallet.dat", self.tmpdir + "/wallet.bak")
- - self.start_node(1, self.extra_args[1])
- + self.nodes[1] = self.start_node(1, self.tmpdir, self.extra_args[1])
- connect_nodes_bi(self.nodes, 0, 1)
- self.log.info("Generate keys for wallet")
- @@ -60,7 +61,7 @@ class KeypoolRestoreTest(BitcoinTestFramework):
- self.log.info("Verify keypool is restored and balance is correct")
- - self.start_node(1, self.extra_args[1])
- + self.nodes[1] = self.start_node(1, self.tmpdir, self.extra_args[1])
- connect_nodes_bi(self.nodes, 0, 1)
- self.sync_all()
- diff --git a/test/functional/keypool.py b/test/functional/keypool.py
- old mode 100755
- new mode 100644
- index f2701c3..e8be559
- --- a/test/functional/keypool.py
- +++ b/test/functional/keypool.py
- @@ -8,8 +8,6 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class KeyPoolTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 1
- def run_test(self):
- nodes = self.nodes
- @@ -19,16 +17,17 @@ class KeyPoolTest(BitcoinTestFramework):
- assert(addr_before_encrypting_data['hdmasterkeyid'] == wallet_info_old['hdmasterkeyid'])
- # Encrypt wallet and wait to terminate
- - nodes[0].node_encrypt_wallet('test')
- + nodes[0].encryptwallet('test')
- + self.bitcoind_processes[0].wait()
- # Restart node 0
- - self.start_node(0)
- + nodes[0] = self.start_node(0, self.options.tmpdir)
- # Keep creating keys
- addr = nodes[0].getnewaddress()
- addr_data = nodes[0].validateaddress(addr)
- wallet_info = nodes[0].getwalletinfo()
- assert(addr_before_encrypting_data['hdmasterkeyid'] != wallet_info['hdmasterkeyid'])
- assert(addr_data['hdmasterkeyid'] == wallet_info['hdmasterkeyid'])
- - assert_raises_rpc_error(-12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress)
- + assert_raises_jsonrpc(-12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress)
- # put six (plus 2) new keys in the keypool (100% external-, +100% internal-keys, 1 in min)
- nodes[0].walletpassphrase('test', 12000)
- @@ -47,7 +46,7 @@ class KeyPoolTest(BitcoinTestFramework):
- nodes[0].getrawchangeaddress()
- addr = set()
- # the next one should fail
- - assert_raises_rpc_error(-12, "Keypool ran out", nodes[0].getrawchangeaddress)
- + assert_raises_jsonrpc(-12, "Keypool ran out", nodes[0].getrawchangeaddress)
- # drain the external keys
- addr.add(nodes[0].getnewaddress())
- @@ -58,7 +57,7 @@ class KeyPoolTest(BitcoinTestFramework):
- addr.add(nodes[0].getnewaddress())
- assert(len(addr) == 6)
- # the next one should fail
- - assert_raises_rpc_error(-12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress)
- + assert_raises_jsonrpc(-12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress)
- # refill keypool with three new addresses
- nodes[0].walletpassphrase('test', 1)
- @@ -72,7 +71,7 @@ class KeyPoolTest(BitcoinTestFramework):
- nodes[0].generate(1)
- nodes[0].generate(1)
- nodes[0].generate(1)
- - assert_raises_rpc_error(-12, "Keypool ran out", nodes[0].generate, 1)
- + assert_raises_jsonrpc(-12, "Keypool ran out", nodes[0].generate, 1)
- nodes[0].walletpassphrase('test', 100)
- nodes[0].keypoolrefill(100)
- @@ -80,5 +79,10 @@ class KeyPoolTest(BitcoinTestFramework):
- assert_equal(wi['keypoolsize_hd_internal'], 100)
- assert_equal(wi['keypoolsize'], 100)
- + def __init__(self):
- + super().__init__()
- + self.setup_clean_chain = False
- + self.num_nodes = 1
- +
- if __name__ == '__main__':
- KeyPoolTest().main()
- diff --git a/test/functional/listsinceblock.py b/test/functional/listsinceblock.py
- old mode 100755
- new mode 100644
- index 67e7744..ce2d556
- --- a/test/functional/listsinceblock.py
- +++ b/test/functional/listsinceblock.py
- @@ -5,54 +5,23 @@
- """Test the listsincelast RPC."""
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import assert_equal, assert_array_result, assert_raises_rpc_error
- +from test_framework.util import assert_equal
- class ListSinceBlockTest (BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 4
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- + self.num_nodes = 4
- def run_test(self):
- self.nodes[2].generate(101)
- self.sync_all()
- - self.test_no_blockhash()
- - self.test_invalid_blockhash()
- self.test_reorg()
- self.test_double_spend()
- self.test_double_send()
- - def test_no_blockhash(self):
- - txid = self.nodes[2].sendtoaddress(self.nodes[0].getnewaddress(), 1)
- - blockhash, = self.nodes[2].generate(1)
- - self.sync_all()
- -
- - txs = self.nodes[0].listtransactions()
- - assert_array_result(txs, {"txid": txid}, {
- - "category": "receive",
- - "amount": 1,
- - "blockhash": blockhash,
- - "confirmations": 1,
- - })
- - assert_equal(
- - self.nodes[0].listsinceblock(),
- - {"lastblock": blockhash,
- - "removed": [],
- - "transactions": txs})
- - assert_equal(
- - self.nodes[0].listsinceblock(""),
- - {"lastblock": blockhash,
- - "removed": [],
- - "transactions": txs})
- -
- - def test_invalid_blockhash(self):
- - assert_raises_rpc_error(-5, "Block not found", self.nodes[0].listsinceblock,
- - "42759cde25462784395a337460bde75f58e73d3f08bd31fdc3507cbac856a2c4")
- - assert_raises_rpc_error(-5, "Block not found", self.nodes[0].listsinceblock,
- - "0000000000000000000000000000000000000000000000000000000000000000")
- - assert_raises_rpc_error(-5, "Block not found", self.nodes[0].listsinceblock,
- - "invalid-hex")
- -
- def test_reorg(self):
- '''
- `listsinceblock` did not behave correctly when handed a block that was
- diff --git a/test/functional/listtransactions.py b/test/functional/listtransactions.py
- old mode 100755
- new mode 100644
- index 0dd838e..f75a8e2
- --- a/test/functional/listtransactions.py
- +++ b/test/functional/listtransactions.py
- @@ -16,9 +16,15 @@ def txFromHex(hexstring):
- return tx
- class ListTransactionsTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 2
- + def __init__(self):
- + super().__init__()
- + self.num_nodes = 4
- + self.setup_clean_chain = False
- +
- + def setup_nodes(self):
- + #This test requires mocktime
- self.enable_mocktime()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir)
- def run_test(self):
- # Simple send, 0 to 1:
- @@ -90,8 +96,8 @@ class ListTransactionsTest(BitcoinTestFramework):
- assert_array_result(self.nodes[0].listtransactions("watchonly", 100, 0, True),
- {"category":"receive","amount":Decimal("0.1")},
- {"txid":txid, "account" : "watchonly"} )
- - # Litecoin has RBF disabled
- - # self.run_rbf_opt_in_test()
- +
- + self.run_rbf_opt_in_test()
- # Check that the opt-in-rbf flag works properly, for sent and received
- # transactions.
- diff --git a/test/functional/maxuploadtarget.py b/test/functional/maxuploadtarget.py
- old mode 100755
- new mode 100644
- index 1f40279..66e5bd2
- --- a/test/functional/maxuploadtarget.py
- +++ b/test/functional/maxuploadtarget.py
- @@ -31,7 +31,8 @@ class TestNode(NodeConnCB):
- class MaxUploadTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- self.extra_args = [["-maxuploadtarget=800", "-blockmaxsize=999000"]]
- @@ -146,7 +147,7 @@ class MaxUploadTest(BitcoinTestFramework):
- #stop and start node 0 with 1MB maxuploadtarget, whitelist 127.0.0.1
- self.log.info("Restarting nodes with -whitelist=127.0.0.1")
- self.stop_node(0)
- - self.start_node(0, ["-whitelist=127.0.0.1", "-maxuploadtarget=1", "-blockmaxsize=999000"])
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, ["-whitelist=127.0.0.1", "-maxuploadtarget=1", "-blockmaxsize=999000"])
- #recreate/reconnect a test node
- test_nodes = [TestNode()]
- diff --git a/test/functional/mempool_limit.py b/test/functional/mempool_limit.py
- old mode 100755
- new mode 100644
- index ca7fb92..ae59eb6
- --- a/test/functional/mempool_limit.py
- +++ b/test/functional/mempool_limit.py
- @@ -8,10 +8,12 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class MempoolLimitTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- - self.extra_args = [["-maxmempool=5", "-mintxfee=0.00001", "-spendzeroconfchange=0"]]
- + self.extra_args = [["-maxmempool=5", "-spendzeroconfchange=0"]]
- def run_test(self):
- txouts = gen_return_txouts()
- diff --git a/test/functional/mempool_packages.py b/test/functional/mempool_packages.py
- old mode 100755
- new mode 100644
- index 6d3849b..e225493
- --- a/test/functional/mempool_packages.py
- +++ b/test/functional/mempool_packages.py
- @@ -12,8 +12,10 @@ MAX_ANCESTORS = 25
- MAX_DESCENDANTS = 25
- class MempoolPackagesTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- + self.setup_clean_chain = False
- self.extra_args = [["-maxorphantx=1000"], ["-maxorphantx=1000", "-limitancestorcount=5"]]
- # Build a transaction that spends parent_txid:vout
- @@ -115,7 +117,7 @@ class MempoolPackagesTest(BitcoinTestFramework):
- assert_equal(mempool[x]['descendantfees'], descendant_fees * COIN + 1000)
- # Adding one more transaction on to the chain should fail.
- - assert_raises_rpc_error(-26, "too-long-mempool-chain", self.chain_transaction, self.nodes[0], txid, vout, value, fee, 1)
- + assert_raises_jsonrpc(-26, "too-long-mempool-chain", self.chain_transaction, self.nodes[0], txid, vout, value, fee, 1)
- # Check that prioritising a tx before it's added to the mempool works
- # First clear the mempool by mining a block.
- @@ -167,7 +169,7 @@ class MempoolPackagesTest(BitcoinTestFramework):
- # Sending one more chained transaction will fail
- utxo = transaction_package.pop(0)
- - assert_raises_rpc_error(-26, "too-long-mempool-chain", self.chain_transaction, self.nodes[0], utxo['txid'], utxo['vout'], utxo['amount'], fee, 10)
- + assert_raises_jsonrpc(-26, "too-long-mempool-chain", self.chain_transaction, self.nodes[0], utxo['txid'], utxo['vout'], utxo['amount'], fee, 10)
- # TODO: check that node1's mempool is as expected
- diff --git a/test/functional/mempool_persist.py b/test/functional/mempool_persist.py
- old mode 100755
- new mode 100644
- index 01f65b1..e0889fd
- --- a/test/functional/mempool_persist.py
- +++ b/test/functional/mempool_persist.py
- @@ -32,12 +32,17 @@ Test is as follows:
- """
- import time
- +from test_framework.mininode import wait_until
- from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class MempoolPersistTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- + # We need 3 nodes for this test. Node1 does not have a persistent mempool.
- self.num_nodes = 3
- + self.setup_clean_chain = False
- self.extra_args = [[], ["-persistmempool=0"], []]
- def run_test(self):
- @@ -59,24 +64,27 @@ class MempoolPersistTest(BitcoinTestFramework):
- self.log.debug("Stop-start node0 and node1. Verify that node0 has the transactions in its mempool and node1 does not.")
- self.stop_nodes()
- - self.start_node(0)
- - self.start_node(1)
- + self.nodes = []
- + self.nodes.append(self.start_node(0, self.options.tmpdir))
- + self.nodes.append(self.start_node(1, self.options.tmpdir))
- # Give bitcoind a second to reload the mempool
- time.sleep(1)
- - wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
- + assert wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
- assert_equal(len(self.nodes[1].getrawmempool()), 0)
- self.log.debug("Stop-start node0 with -persistmempool=0. Verify that it doesn't load its mempool.dat file.")
- self.stop_nodes()
- - self.start_node(0, extra_args=["-persistmempool=0"])
- + self.nodes = []
- + self.nodes.append(self.start_node(0, self.options.tmpdir, ["-persistmempool=0"]))
- # Give bitcoind a second to reload the mempool
- time.sleep(1)
- assert_equal(len(self.nodes[0].getrawmempool()), 0)
- self.log.debug("Stop-start node0. Verify that it has the transactions in its mempool.")
- self.stop_nodes()
- - self.start_node(0)
- - wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
- + self.nodes = []
- + self.nodes.append(self.start_node(0, self.options.tmpdir))
- + assert wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
- if __name__ == '__main__':
- MempoolPersistTest().main()
- diff --git a/test/functional/mempool_reorg.py b/test/functional/mempool_reorg.py
- old mode 100755
- new mode 100644
- index 2803371..937bf4b
- --- a/test/functional/mempool_reorg.py
- +++ b/test/functional/mempool_reorg.py
- @@ -13,8 +13,10 @@ from test_framework.util import *
- # Create one-input, one-output, no-fee transaction:
- class MempoolCoinbaseTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- + self.setup_clean_chain = False
- self.extra_args = [["-checkmempool"]] * 2
- alert_filename = None # Set by setup_network
- @@ -50,14 +52,14 @@ class MempoolCoinbaseTest(BitcoinTestFramework):
- timelock_tx = timelock_tx[:-8] + hex(self.nodes[0].getblockcount() + 2)[2:] + "000000"
- timelock_tx = self.nodes[0].signrawtransaction(timelock_tx)["hex"]
- # This will raise an exception because the timelock transaction is too immature to spend
- - assert_raises_rpc_error(-26, "non-final", self.nodes[0].sendrawtransaction, timelock_tx)
- + assert_raises_jsonrpc(-26, "non-final", self.nodes[0].sendrawtransaction, timelock_tx)
- # Broadcast and mine spend_102 and 103:
- spend_102_id = self.nodes[0].sendrawtransaction(spend_102_raw)
- spend_103_id = self.nodes[0].sendrawtransaction(spend_103_raw)
- self.nodes[0].generate(1)
- # Time-locked transaction is still too immature to spend
- - assert_raises_rpc_error(-26,'non-final', self.nodes[0].sendrawtransaction, timelock_tx)
- + assert_raises_jsonrpc(-26,'non-final', self.nodes[0].sendrawtransaction, timelock_tx)
- # Create 102_1 and 103_1:
- spend_102_1_raw = create_tx(self.nodes[0], spend_102_id, node1_address, 49.98)
- diff --git a/test/functional/mempool_resurrect_test.py b/test/functional/mempool_resurrect_test.py
- old mode 100755
- new mode 100644
- index 1263c93..a2f6228
- --- a/test/functional/mempool_resurrect_test.py
- +++ b/test/functional/mempool_resurrect_test.py
- @@ -9,8 +9,12 @@ from test_framework.util import *
- # Create one-input, one-output, no-fee transaction:
- class MempoolCoinbaseTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- + self.setup_clean_chain = False
- + # Just need one node for this test
- self.extra_args = [["-checkmempool"]]
- def run_test(self):
- diff --git a/test/functional/mempool_spendcoinbase.py b/test/functional/mempool_spendcoinbase.py
- old mode 100755
- new mode 100644
- index 6e8a635..277ea45
- --- a/test/functional/mempool_spendcoinbase.py
- +++ b/test/functional/mempool_spendcoinbase.py
- @@ -17,8 +17,11 @@ from test_framework.util import *
- # Create one-input, one-output, no-fee transaction:
- class MempoolSpendCoinbaseTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- + self.setup_clean_chain = False
- self.extra_args = [["-checkmempool"]]
- def run_test(self):
- @@ -36,7 +39,7 @@ class MempoolSpendCoinbaseTest(BitcoinTestFramework):
- spend_101_id = self.nodes[0].sendrawtransaction(spends_raw[0])
- # coinbase at height 102 should be too immature to spend
- - assert_raises_rpc_error(-26,"bad-txns-premature-spend-of-coinbase", self.nodes[0].sendrawtransaction, spends_raw[1])
- + assert_raises_jsonrpc(-26,"bad-txns-premature-spend-of-coinbase", self.nodes[0].sendrawtransaction, spends_raw[1])
- # mempool should have just spend_101:
- assert_equal(self.nodes[0].getrawmempool(), [ spend_101_id ])
- diff --git a/test/functional/merkle_blocks.py b/test/functional/merkle_blocks.py
- old mode 100755
- new mode 100644
- index b3989a4..bcc65c8
- --- a/test/functional/merkle_blocks.py
- +++ b/test/functional/merkle_blocks.py
- @@ -8,9 +8,11 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class MerkleBlockTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 4
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- + self.num_nodes = 4
- # Nodes 0/1 are "wallet" nodes, Nodes 2/3 are used for testing
- self.extra_args = [[], [], [], ["-txindex"]]
- @@ -38,7 +40,7 @@ class MerkleBlockTest(BitcoinTestFramework):
- tx2 = self.nodes[0].createrawtransaction([node0utxos.pop()], {self.nodes[1].getnewaddress(): 49.99})
- txid2 = self.nodes[0].sendrawtransaction(self.nodes[0].signrawtransaction(tx2)["hex"])
- # This will raise an exception because the transaction is not yet in a block
- - assert_raises_rpc_error(-5, "Transaction not yet in block", self.nodes[0].gettxoutproof, [txid1])
- + assert_raises_jsonrpc(-5, "Transaction not yet in block", self.nodes[0].gettxoutproof, [txid1])
- self.nodes[0].generate(1)
- blockhash = self.nodes[0].getblockhash(chain_height + 1)
- @@ -63,11 +65,11 @@ class MerkleBlockTest(BitcoinTestFramework):
- txid_unspent = txid1 if txin_spent["txid"] != txid1 else txid2
- # We can't find the block from a fully-spent tx
- - assert_raises_rpc_error(-5, "Transaction not yet in block", self.nodes[2].gettxoutproof, [txid_spent])
- + assert_raises_jsonrpc(-5, "Transaction not yet in block", self.nodes[2].gettxoutproof, [txid_spent])
- # We can get the proof if we specify the block
- assert_equal(self.nodes[2].verifytxoutproof(self.nodes[2].gettxoutproof([txid_spent], blockhash)), [txid_spent])
- # We can't get the proof if we specify a non-existent block
- - assert_raises_rpc_error(-5, "Block not found", self.nodes[2].gettxoutproof, [txid_spent], "00000000000000000000000000000000")
- + assert_raises_jsonrpc(-5, "Block not found", self.nodes[2].gettxoutproof, [txid_spent], "00000000000000000000000000000000")
- # We can get the proof if the transaction is unspent
- assert_equal(self.nodes[2].verifytxoutproof(self.nodes[2].gettxoutproof([txid_unspent])), [txid_unspent])
- # We can get the proof if we provide a list of transactions and one of them is unspent. The ordering of the list should not matter.
- @@ -76,7 +78,7 @@ class MerkleBlockTest(BitcoinTestFramework):
- # We can always get a proof if we have a -txindex
- assert_equal(self.nodes[2].verifytxoutproof(self.nodes[3].gettxoutproof([txid_spent])), [txid_spent])
- # We can't get a proof if we specify transactions from different blocks
- - assert_raises_rpc_error(-5, "Not all transactions found in specified or retrieved block", self.nodes[2].gettxoutproof, [txid1, txid3])
- + assert_raises_jsonrpc(-5, "Not all transactions found in specified or retrieved block", self.nodes[2].gettxoutproof, [txid1, txid3])
- if __name__ == '__main__':
- diff --git a/test/functional/minchainwork.py b/test/functional/minchainwork.py
- deleted file mode 100755
- index e136dc2..0000000
- --- a/test/functional/minchainwork.py
- +++ /dev/null
- @@ -1,93 +0,0 @@
- -#!/usr/bin/env python3
- -# Copyright (c) 2017 The Bitcoin Core developers
- -# Distributed under the MIT software license, see the accompanying
- -# file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -"""Test logic for setting nMinimumChainWork on command line.
- -
- -Nodes don't consider themselves out of "initial block download" until
- -their active chain has more work than nMinimumChainWork.
- -
- -Nodes don't download blocks from a peer unless the peer's best known block
- -has more work than nMinimumChainWork.
- -
- -While in initial block download, nodes won't relay blocks to their peers, so
- -test that this parameter functions as intended by verifying that block relay
- -only succeeds past a given node once its nMinimumChainWork has been exceeded.
- -"""
- -
- -import time
- -
- -from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import sync_blocks, connect_nodes, assert_equal
- -
- -# 2 hashes required per regtest block (with no difficulty adjustment)
- -REGTEST_WORK_PER_BLOCK = 2
- -
- -class MinimumChainWorkTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.setup_clean_chain = True
- - self.num_nodes = 3
- -
- - self.extra_args = [[], ["-minimumchainwork=0x65"], ["-minimumchainwork=0x65"]]
- - self.node_min_work = [0, 101, 101]
- -
- - def setup_network(self):
- - # This test relies on the chain setup being:
- - # node0 <- node1 <- node2
- - # Before leaving IBD, nodes prefer to download blocks from outbound
- - # peers, so ensure that we're mining on an outbound peer and testing
- - # block relay to inbound peers.
- - self.setup_nodes()
- - for i in range(self.num_nodes-1):
- - connect_nodes(self.nodes[i+1], i)
- -
- - def run_test(self):
- - # Start building a chain on node0. node2 shouldn't be able to sync until node1's
- - # minchainwork is exceeded
- - starting_chain_work = REGTEST_WORK_PER_BLOCK # Genesis block's work
- - self.log.info("Testing relay across node %d (minChainWork = %d)", 1, self.node_min_work[1])
- -
- - starting_blockcount = self.nodes[2].getblockcount()
- -
- - num_blocks_to_generate = int((self.node_min_work[1] - starting_chain_work) / REGTEST_WORK_PER_BLOCK)
- - self.log.info("Generating %d blocks on node0", num_blocks_to_generate)
- - hashes = self.nodes[0].generate(num_blocks_to_generate)
- -
- - self.log.info("Node0 current chain work: %s", self.nodes[0].getblockheader(hashes[-1])['chainwork'])
- -
- - # Sleep a few seconds and verify that node2 didn't get any new blocks
- - # or headers. We sleep, rather than sync_blocks(node0, node1) because
- - # it's reasonable either way for node1 to get the blocks, or not get
- - # them (since they're below node1's minchainwork).
- - time.sleep(3)
- -
- - self.log.info("Verifying node 2 has no more blocks than before")
- - self.log.info("Blockcounts: %s", [n.getblockcount() for n in self.nodes])
- - # Node2 shouldn't have any new headers yet, because node1 should not
- - # have relayed anything.
- - assert_equal(len(self.nodes[2].getchaintips()), 1)
- - assert_equal(self.nodes[2].getchaintips()[0]['height'], 0)
- -
- - assert self.nodes[1].getbestblockhash() != self.nodes[0].getbestblockhash()
- - assert_equal(self.nodes[2].getblockcount(), starting_blockcount)
- -
- - self.log.info("Generating one more block")
- - self.nodes[0].generate(1)
- -
- - self.log.info("Verifying nodes are all synced")
- -
- - # Because nodes in regtest are all manual connections (eg using
- - # addnode), node1 should not have disconnected node0. If not for that,
- - # we'd expect node1 to have disconnected node0 for serving an
- - # insufficient work chain, in which case we'd need to reconnect them to
- - # continue the test.
- - # NOTE: before commit 44407100ff9b478d6131a1c38ee993b50b1830df, regtest
- - # connections were not manual, so the reconnect is necessary.
- - if (len(self.nodes[0].getpeerinfo()) == 0):
- - connect_nodes(self.nodes[1], 0)
- -
- - self.sync_all()
- - self.log.info("Blockcounts: %s", [n.getblockcount() for n in self.nodes])
- -
- -if __name__ == '__main__':
- - MinimumChainWorkTest().main()
- diff --git a/test/functional/mining.py b/test/functional/mining.py
- old mode 100755
- new mode 100644
- index 9aee068..dbd4e29
- --- a/test/functional/mining.py
- +++ b/test/functional/mining.py
- @@ -4,18 +4,16 @@
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- """Test mining RPCs
- -- getmininginfo
- - getblocktemplate proposal mode
- - submitblock"""
- -import copy
- from binascii import b2a_hex
- -from decimal import Decimal
- +import copy
- from test_framework.blocktools import create_coinbase
- -from test_framework.mininode import CBlock
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import assert_equal, assert_raises_rpc_error
- +from test_framework.mininode import CBlock
- +from test_framework.util import *
- def b2x(b):
- return b2a_hex(b).decode('ascii')
- @@ -27,23 +25,14 @@ def assert_template(node, block, expect, rehash=True):
- assert_equal(rsp, expect)
- class MiningTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- self.setup_clean_chain = False
- def run_test(self):
- node = self.nodes[0]
- -
- - self.log.info('getmininginfo')
- - mining_info = node.getmininginfo()
- - assert_equal(mining_info['blocks'], 200)
- - assert_equal(mining_info['chain'], 'regtest')
- - assert_equal(mining_info['currentblocktx'], 0)
- - assert_equal(mining_info['currentblockweight'], 0)
- - assert_equal(mining_info['difficulty'], Decimal('4.656542373906925E-10'))
- - assert_equal(mining_info['networkhashps'], Decimal('0.003333333333333334'))
- - assert_equal(mining_info['pooledtx'], 0)
- -
- # Mine a block to leave initial block download
- node.generate(1)
- tmpl = node.getblocktemplate()
- @@ -68,7 +57,7 @@ class MiningTest(BitcoinTestFramework):
- assert_template(node, block, None)
- self.log.info("submitblock: Test block decode failure")
- - assert_raises_rpc_error(-22, "Block decode failed", node.submitblock, b2x(block.serialize()[:-15]))
- + assert_raises_jsonrpc(-22, "Block decode failed", node.submitblock, b2x(block.serialize()[:-15]))
- self.log.info("getblocktemplate: Test bad input hash for coinbase transaction")
- bad_block = copy.deepcopy(block)
- @@ -77,10 +66,10 @@ class MiningTest(BitcoinTestFramework):
- assert_template(node, bad_block, 'bad-cb-missing')
- self.log.info("submitblock: Test invalid coinbase transaction")
- - assert_raises_rpc_error(-22, "Block does not start with a coinbase", node.submitblock, b2x(bad_block.serialize()))
- + assert_raises_jsonrpc(-22, "Block does not start with a coinbase", node.submitblock, b2x(bad_block.serialize()))
- self.log.info("getblocktemplate: Test truncated final transaction")
- - assert_raises_rpc_error(-22, "Block decode failed", node.getblocktemplate, {'data': b2x(block.serialize()[:-1]), 'mode': 'proposal'})
- + assert_raises_jsonrpc(-22, "Block decode failed", node.getblocktemplate, {'data': b2x(block.serialize()[:-1]), 'mode': 'proposal'})
- self.log.info("getblocktemplate: Test duplicate transaction")
- bad_block = copy.deepcopy(block)
- @@ -107,7 +96,7 @@ class MiningTest(BitcoinTestFramework):
- bad_block_sn = bytearray(block.serialize())
- assert_equal(bad_block_sn[TX_COUNT_OFFSET], 1)
- bad_block_sn[TX_COUNT_OFFSET] += 1
- - assert_raises_rpc_error(-22, "Block decode failed", node.getblocktemplate, {'data': b2x(bad_block_sn), 'mode': 'proposal'})
- + assert_raises_jsonrpc(-22, "Block decode failed", node.getblocktemplate, {'data': b2x(bad_block_sn), 'mode': 'proposal'})
- self.log.info("getblocktemplate: Test bad bits")
- bad_block = copy.deepcopy(block)
- diff --git a/test/functional/multi_rpc.py b/test/functional/multi_rpc.py
- old mode 100755
- new mode 100644
- index 1acf358..209aa24
- --- a/test/functional/multi_rpc.py
- +++ b/test/functional/multi_rpc.py
- @@ -12,7 +12,10 @@ import http.client
- import urllib.parse
- class HTTPBasicsTest (BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- + self.setup_clean_chain = False
- self.num_nodes = 2
- def setup_chain(self):
- @@ -22,10 +25,10 @@ class HTTPBasicsTest (BitcoinTestFramework):
- rpcauth2 = "rpcauth=rt2:f8607b1a88861fac29dfccf9b52ff9f$ff36a0c23c8c62b4846112e50fa888416e94c17bfd4c42f88fd8f55ec6a3137e"
- rpcuser = "rpcuser=rpcuser?"
- rpcpassword = "rpcpassword=rpcpassword?"
- - with open(os.path.join(self.options.tmpdir+"/node0", "litecoin.conf"), 'a', encoding='utf8') as f:
- + with open(os.path.join(self.options.tmpdir+"/node0", "litecoincash.conf"), 'a', encoding='utf8') as f:
- f.write(rpcauth+"\n")
- f.write(rpcauth2+"\n")
- - with open(os.path.join(self.options.tmpdir+"/node1", "litecoin.conf"), 'a', encoding='utf8') as f:
- + with open(os.path.join(self.options.tmpdir+"/node1", "litecoincash.conf"), 'a', encoding='utf8') as f:
- f.write(rpcuser+"\n")
- f.write(rpcpassword+"\n")
- diff --git a/test/functional/multiwallet.py b/test/functional/multiwallet.py
- old mode 100755
- new mode 100644
- index ba6b659..5679f40
- --- a/test/functional/multiwallet.py
- +++ b/test/functional/multiwallet.py
- @@ -7,52 +7,42 @@
- Verify that a bitcoind node can load multiple wallet files
- """
- import os
- -import shutil
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import assert_equal, assert_raises_rpc_error
- +from test_framework.util import assert_equal, assert_raises_jsonrpc
- class MultiWalletTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- self.extra_args = [['-wallet=w1', '-wallet=w2', '-wallet=w3']]
- def run_test(self):
- - assert_equal(set(self.nodes[0].listwallets()), {"w1", "w2", "w3"})
- -
- self.stop_node(0)
- # should not initialize if there are duplicate wallets
- - self.assert_start_raises_init_error(0, ['-wallet=w1', '-wallet=w1'], 'Error loading wallet w1. Duplicate -wallet filename specified.')
- + self.assert_start_raises_init_error(0, self.options.tmpdir, ['-wallet=w1', '-wallet=w1'], 'Error loading wallet w1. Duplicate -wallet filename specified.')
- # should not initialize if wallet file is a directory
- os.mkdir(os.path.join(self.options.tmpdir, 'node0', 'regtest', 'w11'))
- - self.assert_start_raises_init_error(0, ['-wallet=w11'], 'Error loading wallet w11. -wallet filename must be a regular file.')
- -
- - # should not initialize if one wallet is a copy of another
- - shutil.copyfile(os.path.join(self.options.tmpdir, 'node0', 'regtest', 'w2'),
- - os.path.join(self.options.tmpdir, 'node0', 'regtest', 'w22'))
- - self.assert_start_raises_init_error(0, ['-wallet=w2', '-wallet=w22'], 'duplicates fileid')
- + self.assert_start_raises_init_error(0, self.options.tmpdir, ['-wallet=w11'], 'Error loading wallet w11. -wallet filename must be a regular file.')
- # should not initialize if wallet file is a symlink
- os.symlink(os.path.join(self.options.tmpdir, 'node0', 'regtest', 'w1'), os.path.join(self.options.tmpdir, 'node0', 'regtest', 'w12'))
- - self.assert_start_raises_init_error(0, ['-wallet=w12'], 'Error loading wallet w12. -wallet filename must be a regular file.')
- + self.assert_start_raises_init_error(0, self.options.tmpdir, ['-wallet=w12'], 'Error loading wallet w12. -wallet filename must be a regular file.')
- - self.start_node(0, self.extra_args[0])
- -
- - w1 = self.nodes[0].get_wallet_rpc("w1")
- - w2 = self.nodes[0].get_wallet_rpc("w2")
- - w3 = self.nodes[0].get_wallet_rpc("w3")
- - wallet_bad = self.nodes[0].get_wallet_rpc("bad")
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, self.extra_args[0])
- + w1 = self.nodes[0] / "wallet/w1"
- w1.generate(1)
- # accessing invalid wallet fails
- - assert_raises_rpc_error(-18, "Requested wallet does not exist or is not loaded", wallet_bad.getwalletinfo)
- + assert_raises_jsonrpc(-18, "Requested wallet does not exist or is not loaded", (self.nodes[0] / "wallet/bad").getwalletinfo)
- # accessing wallet RPC without using wallet endpoint fails
- - assert_raises_rpc_error(-19, "Wallet file not specified", self.nodes[0].getwalletinfo)
- + assert_raises_jsonrpc(-19, "Wallet file not specified", self.nodes[0].getwalletinfo)
- # check w1 wallet balance
- w1_info = w1.getwalletinfo()
- @@ -60,12 +50,14 @@ class MultiWalletTest(BitcoinTestFramework):
- w1_name = w1_info['walletname']
- assert_equal(w1_name, "w1")
- - # check w2 wallet balance
- + # check w1 wallet balance
- + w2 = self.nodes[0] / "wallet/w2"
- w2_info = w2.getwalletinfo()
- assert_equal(w2_info['immature_balance'], 0)
- w2_name = w2_info['walletname']
- assert_equal(w2_name, "w2")
- + w3 = self.nodes[0] / "wallet/w3"
- w3_name = w3.getwalletinfo()['walletname']
- assert_equal(w3_name, "w3")
- diff --git a/test/functional/net.py b/test/functional/net.py
- old mode 100755
- new mode 100644
- index 61a5e1f..3ba3764
- --- a/test/functional/net.py
- +++ b/test/functional/net.py
- @@ -12,13 +12,15 @@ import time
- from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import (
- assert_equal,
- - assert_raises_rpc_error,
- + assert_raises_jsonrpc,
- connect_nodes_bi,
- p2p_port,
- )
- +
- class NetTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- @@ -84,7 +86,7 @@ class NetTest(BitcoinTestFramework):
- assert_equal(len(added_nodes), 1)
- assert_equal(added_nodes[0]['addednode'], ip_port)
- # check that a non-existant node returns an error
- - assert_raises_rpc_error(-24, "Node has not been added",
- + assert_raises_jsonrpc(-24, "Node has not been added",
- self.nodes[0].getaddednodeinfo, '1.1.1.1')
- def _test_getpeerinfo(self):
- diff --git a/test/functional/nulldummy.py b/test/functional/nulldummy.py
- old mode 100755
- new mode 100644
- index 2b13a47..80c61a3
- --- a/test/functional/nulldummy.py
- +++ b/test/functional/nulldummy.py
- @@ -38,7 +38,8 @@ def trueDummy(tx):
- class NULLDUMMYTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- self.setup_clean_chain = True
- self.extra_args = [['-whitelist=127.0.0.1', '-walletprematurewitness']]
- @@ -72,7 +73,7 @@ class NULLDUMMYTest(BitcoinTestFramework):
- self.log.info("Test 2: Non-NULLDUMMY base multisig transaction should not be accepted to mempool before activation")
- test2tx = self.create_transaction(self.nodes[0], txid2, self.ms_address, 47)
- trueDummy(test2tx)
- - assert_raises_rpc_error(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, bytes_to_hex_str(test2tx.serialize_with_witness()), True)
- + assert_raises_jsonrpc(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, bytes_to_hex_str(test2tx.serialize_with_witness()), True)
- self.log.info("Test 3: Non-NULLDUMMY base transactions should be accepted in a block before activation [431]")
- self.block_submit(self.nodes[0], [test2tx], False, True)
- @@ -81,14 +82,14 @@ class NULLDUMMYTest(BitcoinTestFramework):
- test4tx = self.create_transaction(self.nodes[0], test2tx.hash, self.address, 46)
- test6txs=[CTransaction(test4tx)]
- trueDummy(test4tx)
- - assert_raises_rpc_error(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, bytes_to_hex_str(test4tx.serialize_with_witness()), True)
- + assert_raises_jsonrpc(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, bytes_to_hex_str(test4tx.serialize_with_witness()), True)
- self.block_submit(self.nodes[0], [test4tx])
- self.log.info("Test 5: Non-NULLDUMMY P2WSH multisig transaction invalid after activation")
- test5tx = self.create_transaction(self.nodes[0], txid3, self.wit_address, 48)
- test6txs.append(CTransaction(test5tx))
- test5tx.wit.vtxinwit[0].scriptWitness.stack[0] = b'\x01'
- - assert_raises_rpc_error(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, bytes_to_hex_str(test5tx.serialize_with_witness()), True)
- + assert_raises_jsonrpc(-26, NULLDUMMY_ERROR, self.nodes[0].sendrawtransaction, bytes_to_hex_str(test5tx.serialize_with_witness()), True)
- self.block_submit(self.nodes[0], [test5tx], True)
- self.log.info("Test 6: NULLDUMMY compliant base/witness transactions should be accepted to mempool and in block after activation [432]")
- diff --git a/test/functional/p2p-acceptblock.py b/test/functional/p2p-acceptblock.py
- old mode 100755
- new mode 100644
- index 220b776..322cb76
- --- a/test/functional/p2p-acceptblock.py
- +++ b/test/functional/p2p-acceptblock.py
- @@ -4,32 +4,37 @@
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- """Test processing of unrequested blocks.
- -Setup: two nodes, node0+node1, not connected to each other. Node1 will have
- -nMinimumChainWork set to 0x10, so it won't process low-work unrequested blocks.
- +Since behavior differs when receiving unrequested blocks from whitelisted peers
- +versus non-whitelisted peers, this tests the behavior of both (effectively two
- +separate tests running in parallel).
- -We have one NodeConn connection to node0 called test_node, and one to node1
- -called min_work_node.
- +Setup: two nodes, node0 and node1, not connected to each other. Node0 does not
- +whitelist localhost, but node1 does. They will each be on their own chain for
- +this test.
- +
- +We have one NodeConn connection to each, test_node and white_node respectively.
- The test:
- 1. Generate one block on each node, to leave IBD.
- 2. Mine a new block on each tip, and deliver to each node from node's peer.
- - The tip should advance for node0, but node1 should skip processing due to
- - nMinimumChainWork.
- -
- -Node1 is unused in tests 3-7:
- + The tip should advance.
- -3. Mine a block that forks from the genesis block, and deliver to test_node.
- - Node0 should not process this block (just accept the header), because it
- - is unrequested and doesn't have more or equal work to the tip.
- +3. Mine a block that forks the previous block, and deliver to each node from
- + corresponding peer.
- + Node0 should not process this block (just accept the header), because it is
- + unrequested and doesn't have more work than the tip.
- + Node1 should process because this is coming from a whitelisted peer.
- -4a,b. Send another two blocks that build on the forking block.
- - Node0 should process the second block but be stuck on the shorter chain,
- - because it's missing an intermediate block.
- +4. Send another block that builds on the forking block.
- + Node0 should process this block but be stuck on the shorter chain, because
- + it's missing an intermediate block.
- + Node1 should reorg to this longer chain.
- -4c.Send 288 more blocks on the longer chain (the number of blocks ahead
- - we currently store).
- +4b.Send 288 more blocks on the longer chain.
- Node0 should process all but the last block (too far ahead in height).
- + Send all headers to Node1, and then send the last block in that chain.
- + Node1 should accept the block because it's coming from a whitelisted peer.
- 5. Send a duplicate of the block in #3 to Node0.
- Node0 should not process the block because it is unrequested, and stay on
- @@ -41,21 +46,13 @@ Node1 is unused in tests 3-7:
- 7. Send Node0 the missing block again.
- Node0 should process and the tip should advance.
- -
- -8. Create a fork which is invalid at a height longer than the current chain
- - (ie to which the node will try to reorg) but which has headers built on top
- - of the invalid block. Check that we get disconnected if we send more headers
- - on the chain the node now knows to be invalid.
- -
- -9. Test Node1 is able to sync when connected to node0 (which should have sufficient
- - work on its chain).
- """
- from test_framework.mininode import *
- from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- import time
- -from test_framework.blocktools import create_block, create_coinbase, create_transaction
- +from test_framework.blocktools import create_block, create_coinbase
- class AcceptBlockTest(BitcoinTestFramework):
- def add_options(self, parser):
- @@ -63,42 +60,41 @@ class AcceptBlockTest(BitcoinTestFramework):
- default=os.getenv("BITCOIND", "bitcoind"),
- help="bitcoind binary to test")
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- - self.extra_args = [[], ["-minimumchainwork=0x10"]]
- + self.extra_args = [[], ["-whitelist=127.0.0.1"]]
- def setup_network(self):
- # Node0 will be used to test behavior of processing unrequested blocks
- # from peers which are not whitelisted, while Node1 will be used for
- # the whitelisted case.
- - # Node2 will be used for non-whitelisted peers to test the interaction
- - # with nMinimumChainWork.
- self.setup_nodes()
- def run_test(self):
- # Setup the p2p connections and start up the network thread.
- - test_node = NodeConnCB() # connects to node0
- - min_work_node = NodeConnCB() # connects to node1
- + test_node = NodeConnCB() # connects to node0 (not whitelisted)
- + white_node = NodeConnCB() # connects to node1 (whitelisted)
- connections = []
- connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test_node))
- - connections.append(NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], min_work_node))
- + connections.append(NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], white_node))
- test_node.add_connection(connections[0])
- - min_work_node.add_connection(connections[1])
- + white_node.add_connection(connections[1])
- NetworkThread().start() # Start up network handling in another thread
- # Test logic begins here
- test_node.wait_for_verack()
- - min_work_node.wait_for_verack()
- + white_node.wait_for_verack()
- - # 1. Have nodes mine a block (leave IBD)
- + # 1. Have both nodes mine a block (leave IBD)
- [ n.generate(1) for n in self.nodes ]
- tips = [ int("0x" + n.getbestblockhash(), 0) for n in self.nodes ]
- # 2. Send one block that builds on each tip.
- - # This should be accepted by node0
- + # This should be accepted.
- blocks_h2 = [] # the height 2 blocks on each node's chain
- block_time = int(time.time()) + 1
- for i in range(2):
- @@ -106,119 +102,95 @@ class AcceptBlockTest(BitcoinTestFramework):
- blocks_h2[i].solve()
- block_time += 1
- test_node.send_message(msg_block(blocks_h2[0]))
- - min_work_node.send_message(msg_block(blocks_h2[1]))
- + white_node.send_message(msg_block(blocks_h2[1]))
- - for x in [test_node, min_work_node]:
- - x.sync_with_ping()
- + [ x.sync_with_ping() for x in [test_node, white_node] ]
- assert_equal(self.nodes[0].getblockcount(), 2)
- - assert_equal(self.nodes[1].getblockcount(), 1)
- - self.log.info("First height 2 block accepted by node0; correctly rejected by node1")
- + assert_equal(self.nodes[1].getblockcount(), 2)
- + self.log.info("First height 2 block accepted by both nodes")
- - # 3. Send another block that builds on genesis.
- - block_h1f = create_block(int("0x" + self.nodes[0].getblockhash(0), 0), create_coinbase(1), block_time)
- - block_time += 1
- - block_h1f.solve()
- - test_node.send_message(msg_block(block_h1f))
- + # 3. Send another block that builds on the original tip.
- + blocks_h2f = [] # Blocks at height 2 that fork off the main chain
- + for i in range(2):
- + blocks_h2f.append(create_block(tips[i], create_coinbase(2), blocks_h2[i].nTime+1))
- + blocks_h2f[i].solve()
- + test_node.send_message(msg_block(blocks_h2f[0]))
- + white_node.send_message(msg_block(blocks_h2f[1]))
- - test_node.sync_with_ping()
- - tip_entry_found = False
- + [ x.sync_with_ping() for x in [test_node, white_node] ]
- for x in self.nodes[0].getchaintips():
- - if x['hash'] == block_h1f.hash:
- + if x['hash'] == blocks_h2f[0].hash:
- assert_equal(x['status'], "headers-only")
- - tip_entry_found = True
- - assert(tip_entry_found)
- - assert_raises_rpc_error(-1, "Block not found on disk", self.nodes[0].getblock, block_h1f.hash)
- - # 4. Send another two block that build on the fork.
- - block_h2f = create_block(block_h1f.sha256, create_coinbase(2), block_time)
- - block_time += 1
- - block_h2f.solve()
- - test_node.send_message(msg_block(block_h2f))
- -
- - test_node.sync_with_ping()
- - # Since the earlier block was not processed by node, the new block
- - # can't be fully validated.
- - tip_entry_found = False
- - for x in self.nodes[0].getchaintips():
- - if x['hash'] == block_h2f.hash:
- - assert_equal(x['status'], "headers-only")
- - tip_entry_found = True
- - assert(tip_entry_found)
- + for x in self.nodes[1].getchaintips():
- + if x['hash'] == blocks_h2f[1].hash:
- + assert_equal(x['status'], "valid-headers")
- - # But this block should be accepted by node since it has equal work.
- - self.nodes[0].getblock(block_h2f.hash)
- - self.log.info("Second height 2 block accepted, but not reorg'ed to")
- + self.log.info("Second height 2 block accepted only from whitelisted peer")
- - # 4b. Now send another block that builds on the forking chain.
- - block_h3 = create_block(block_h2f.sha256, create_coinbase(3), block_h2f.nTime+1)
- - block_h3.solve()
- - test_node.send_message(msg_block(block_h3))
- + # 4. Now send another block that builds on the forking chain.
- + blocks_h3 = []
- + for i in range(2):
- + blocks_h3.append(create_block(blocks_h2f[i].sha256, create_coinbase(3), blocks_h2f[i].nTime+1))
- + blocks_h3[i].solve()
- + test_node.send_message(msg_block(blocks_h3[0]))
- + white_node.send_message(msg_block(blocks_h3[1]))
- - test_node.sync_with_ping()
- - # Since the earlier block was not processed by node, the new block
- + [ x.sync_with_ping() for x in [test_node, white_node] ]
- + # Since the earlier block was not processed by node0, the new block
- # can't be fully validated.
- - tip_entry_found = False
- for x in self.nodes[0].getchaintips():
- - if x['hash'] == block_h3.hash:
- + if x['hash'] == blocks_h3[0].hash:
- assert_equal(x['status'], "headers-only")
- - tip_entry_found = True
- - assert(tip_entry_found)
- - self.nodes[0].getblock(block_h3.hash)
- -
- - # But this block should be accepted by node since it has more work.
- - self.nodes[0].getblock(block_h3.hash)
- - self.log.info("Unrequested more-work block accepted")
- -
- - # 4c. Now mine 288 more blocks and deliver; all should be processed but
- - # the last (height-too-high) on node (as long as its not missing any headers)
- - tip = block_h3
- - all_blocks = []
- - for i in range(288):
- - next_block = create_block(tip.sha256, create_coinbase(i + 4), tip.nTime+1)
- - next_block.solve()
- - all_blocks.append(next_block)
- - tip = next_block
- -
- - # Now send the block at height 5 and check that it wasn't accepted (missing header)
- - test_node.send_message(msg_block(all_blocks[1]))
- - test_node.sync_with_ping()
- - assert_raises_rpc_error(-5, "Block not found", self.nodes[0].getblock, all_blocks[1].hash)
- - assert_raises_rpc_error(-5, "Block not found", self.nodes[0].getblockheader, all_blocks[1].hash)
- - # The block at height 5 should be accepted if we provide the missing header, though
- - headers_message = msg_headers()
- - headers_message.headers.append(CBlockHeader(all_blocks[0]))
- - test_node.send_message(headers_message)
- - test_node.send_message(msg_block(all_blocks[1]))
- - test_node.sync_with_ping()
- - self.nodes[0].getblock(all_blocks[1].hash)
- + # But this block should be accepted by node0 since it has more work.
- + self.nodes[0].getblock(blocks_h3[0].hash)
- + self.log.info("Unrequested more-work block accepted from non-whitelisted peer")
- - # Now send the blocks in all_blocks
- - for i in range(288):
- - test_node.send_message(msg_block(all_blocks[i]))
- - test_node.sync_with_ping()
- + # Node1 should have accepted and reorged.
- + assert_equal(self.nodes[1].getblockcount(), 3)
- + self.log.info("Successfully reorged to length 3 chain from whitelisted peer")
- + # 4b. Now mine 288 more blocks and deliver; all should be processed but
- + # the last (height-too-high) on node0. Node1 should process the tip if
- + # we give it the headers chain leading to the tip.
- + tips = blocks_h3
- + headers_message = msg_headers()
- + all_blocks = [] # node0's blocks
- + for j in range(2):
- + for i in range(288):
- + next_block = create_block(tips[j].sha256, create_coinbase(i + 4), tips[j].nTime+1)
- + next_block.solve()
- + if j==0:
- + test_node.send_message(msg_block(next_block))
- + all_blocks.append(next_block)
- + else:
- + headers_message.headers.append(CBlockHeader(next_block))
- + tips[j] = next_block
- +
- + time.sleep(2)
- # Blocks 1-287 should be accepted, block 288 should be ignored because it's too far ahead
- for x in all_blocks[:-1]:
- self.nodes[0].getblock(x.hash)
- - assert_raises_rpc_error(-1, "Block not found on disk", self.nodes[0].getblock, all_blocks[-1].hash)
- + assert_raises_jsonrpc(-1, "Block not found on disk", self.nodes[0].getblock, all_blocks[-1].hash)
- +
- + headers_message.headers.pop() # Ensure the last block is unrequested
- + white_node.send_message(headers_message) # Send headers leading to tip
- + white_node.send_message(msg_block(tips[1])) # Now deliver the tip
- + white_node.sync_with_ping()
- + self.nodes[1].getblock(tips[1].hash)
- + self.log.info("Unrequested block far ahead of tip accepted from whitelisted peer")
- # 5. Test handling of unrequested block on the node that didn't process
- # Should still not be processed (even though it has a child that has more
- # work).
- + test_node.send_message(msg_block(blocks_h2f[0]))
- - # The node should have requested the blocks at some point, so
- - # disconnect/reconnect first
- - connections[0].disconnect_node()
- - test_node.wait_for_disconnect()
- -
- - test_node = NodeConnCB() # connects to node (not whitelisted)
- - connections[0] = NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test_node)
- - test_node.add_connection(connections[0])
- -
- - test_node.wait_for_verack()
- - test_node.send_message(msg_block(block_h1f))
- -
- + # Here, if the sleep is too short, the test could falsely succeed (if the
- + # node hasn't processed the block by the time the sleep returns, and then
- + # the node processes it and incorrectly advances the tip).
- + # But this would be caught later on, when we verify that an inv triggers
- + # a getdata request for this block.
- test_node.sync_with_ping()
- assert_equal(self.nodes[0].getblockcount(), 2)
- self.log.info("Unrequested block that would complete more-work chain was ignored")
- @@ -229,100 +201,23 @@ class AcceptBlockTest(BitcoinTestFramework):
- with mininode_lock:
- # Clear state so we can check the getdata request
- test_node.last_message.pop("getdata", None)
- - test_node.send_message(msg_inv([CInv(2, block_h3.sha256)]))
- + test_node.send_message(msg_inv([CInv(2, blocks_h3[0].sha256)]))
- test_node.sync_with_ping()
- with mininode_lock:
- getdata = test_node.last_message["getdata"]
- # Check that the getdata includes the right block
- - assert_equal(getdata.inv[0].hash, block_h1f.sha256)
- + assert_equal(getdata.inv[0].hash, blocks_h2f[0].sha256)
- self.log.info("Inv at tip triggered getdata for unprocessed block")
- # 7. Send the missing block for the third time (now it is requested)
- - test_node.send_message(msg_block(block_h1f))
- + test_node.send_message(msg_block(blocks_h2f[0]))
- test_node.sync_with_ping()
- assert_equal(self.nodes[0].getblockcount(), 290)
- - self.nodes[0].getblock(all_blocks[286].hash)
- - assert_equal(self.nodes[0].getbestblockhash(), all_blocks[286].hash)
- - assert_raises_rpc_error(-1, "Block not found on disk", self.nodes[0].getblock, all_blocks[287].hash)
- self.log.info("Successfully reorged to longer chain from non-whitelisted peer")
- - # 8. Create a chain which is invalid at a height longer than the
- - # current chain, but which has more blocks on top of that
- - block_289f = create_block(all_blocks[284].sha256, create_coinbase(289), all_blocks[284].nTime+1)
- - block_289f.solve()
- - block_290f = create_block(block_289f.sha256, create_coinbase(290), block_289f.nTime+1)
- - block_290f.solve()
- - block_291 = create_block(block_290f.sha256, create_coinbase(291), block_290f.nTime+1)
- - # block_291 spends a coinbase below maturity!
- - block_291.vtx.append(create_transaction(block_290f.vtx[0], 0, b"42", 1))
- - block_291.hashMerkleRoot = block_291.calc_merkle_root()
- - block_291.solve()
- - block_292 = create_block(block_291.sha256, create_coinbase(292), block_291.nTime+1)
- - block_292.solve()
- -
- - # Now send all the headers on the chain and enough blocks to trigger reorg
- - headers_message = msg_headers()
- - headers_message.headers.append(CBlockHeader(block_289f))
- - headers_message.headers.append(CBlockHeader(block_290f))
- - headers_message.headers.append(CBlockHeader(block_291))
- - headers_message.headers.append(CBlockHeader(block_292))
- - test_node.send_message(headers_message)
- -
- - test_node.sync_with_ping()
- - tip_entry_found = False
- - for x in self.nodes[0].getchaintips():
- - if x['hash'] == block_292.hash:
- - assert_equal(x['status'], "headers-only")
- - tip_entry_found = True
- - assert(tip_entry_found)
- - assert_raises_rpc_error(-1, "Block not found on disk", self.nodes[0].getblock, block_292.hash)
- -
- - test_node.send_message(msg_block(block_289f))
- - test_node.send_message(msg_block(block_290f))
- -
- - test_node.sync_with_ping()
- - self.nodes[0].getblock(block_289f.hash)
- - self.nodes[0].getblock(block_290f.hash)
- -
- - test_node.send_message(msg_block(block_291))
- -
- - # At this point we've sent an obviously-bogus block, wait for full processing
- - # without assuming whether we will be disconnected or not
- - try:
- - # Only wait a short while so the test doesn't take forever if we do get
- - # disconnected
- - test_node.sync_with_ping(timeout=1)
- - except AssertionError:
- - test_node.wait_for_disconnect()
- -
- - test_node = NodeConnCB() # connects to node (not whitelisted)
- - connections[0] = NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test_node)
- - test_node.add_connection(connections[0])
- -
- - NetworkThread().start() # Start up network handling in another thread
- - test_node.wait_for_verack()
- -
- - # We should have failed reorg and switched back to 290 (but have block 291)
- - assert_equal(self.nodes[0].getblockcount(), 290)
- - assert_equal(self.nodes[0].getbestblockhash(), all_blocks[286].hash)
- - assert_equal(self.nodes[0].getblock(block_291.hash)["confirmations"], -1)
- -
- - # Now send a new header on the invalid chain, indicating we're forked off, and expect to get disconnected
- - block_293 = create_block(block_292.sha256, create_coinbase(293), block_292.nTime+1)
- - block_293.solve()
- - headers_message = msg_headers()
- - headers_message.headers.append(CBlockHeader(block_293))
- - test_node.send_message(headers_message)
- - test_node.wait_for_disconnect()
- -
- - # 9. Connect node1 to node0 and ensure it is able to sync
- - connect_nodes(self.nodes[0], 1)
- - sync_blocks([self.nodes[0], self.nodes[1]])
- - self.log.info("Successfully synced nodes 1 and 0")
- -
- [ c.disconnect_node() for c in connections ]
- if __name__ == '__main__':
- diff --git a/test/functional/p2p-compactblocks.py b/test/functional/p2p-compactblocks.py
- old mode 100755
- new mode 100644
- index 647a8ab..10e927f
- --- a/test/functional/p2p-compactblocks.py
- +++ b/test/functional/p2p-compactblocks.py
- @@ -72,7 +72,7 @@ class TestNode(NodeConnCB):
- def request_headers_and_sync(self, locator, hashstop=0):
- self.clear_block_announcement()
- self.get_headers(locator, hashstop)
- - wait_until(self.received_block_announcement, timeout=30, lock=mininode_lock)
- + assert wait_until(self.received_block_announcement, timeout=30)
- self.clear_block_announcement()
- # Block until a block announcement for a particular block hash is
- @@ -80,7 +80,7 @@ class TestNode(NodeConnCB):
- def wait_for_block_announcement(self, block_hash, timeout=30):
- def received_hash():
- return (block_hash in self.announced_blockhashes)
- - wait_until(received_hash, timeout=timeout, lock=mininode_lock)
- + return wait_until(received_hash, timeout=timeout)
- def send_await_disconnect(self, message, timeout=30):
- """Sends a message to the node and wait for disconnect.
- @@ -88,10 +88,15 @@ class TestNode(NodeConnCB):
- This is used when we want to send a message into the node that we expect
- will get us disconnected, eg an invalid block."""
- self.send_message(message)
- - wait_until(lambda: not self.connected, timeout=timeout, lock=mininode_lock)
- + success = wait_until(lambda: not self.connected, timeout=timeout)
- + if not success:
- + logger.error("send_await_disconnect failed!")
- + raise AssertionError("send_await_disconnect failed!")
- + return success
- class CompactBlocksTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- # Node0 = pre-segwit, node1 = segwit-aware
- self.num_nodes = 2
- @@ -147,7 +152,9 @@ class CompactBlocksTest(BitcoinTestFramework):
- # Make sure we get a SENDCMPCT message from our peer
- def received_sendcmpct():
- return (len(test_node.last_sendcmpct) > 0)
- - wait_until(received_sendcmpct, timeout=30, lock=mininode_lock)
- + got_message = wait_until(received_sendcmpct, timeout=30)
- + assert(received_sendcmpct())
- + assert(got_message)
- with mininode_lock:
- # Check that the first version received is the preferred one
- assert_equal(test_node.last_sendcmpct[0].version, preferred_version)
- @@ -162,6 +169,7 @@ class CompactBlocksTest(BitcoinTestFramework):
- block_hash = int(node.generate(1)[0], 16)
- peer.wait_for_block_announcement(block_hash, timeout=30)
- assert(peer.block_announced)
- + assert(got_message)
- with mininode_lock:
- assert predicate(peer), (
- @@ -276,7 +284,7 @@ class CompactBlocksTest(BitcoinTestFramework):
- # Wait until we've seen the block announcement for the resulting tip
- tip = int(node.getbestblockhash(), 16)
- - test_node.wait_for_block_announcement(tip)
- + assert(test_node.wait_for_block_announcement(tip))
- # Make sure we will receive a fast-announce compact block
- self.request_cb_announcements(test_node, node, version)
- @@ -291,7 +299,8 @@ class CompactBlocksTest(BitcoinTestFramework):
- block.rehash()
- # Wait until the block was announced (via compact blocks)
- - wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
- + wait_until(test_node.received_block_announcement, timeout=30)
- + assert(test_node.received_block_announcement())
- # Now fetch and check the compact block
- header_and_shortids = None
- @@ -307,7 +316,8 @@ class CompactBlocksTest(BitcoinTestFramework):
- inv = CInv(4, block_hash) # 4 == "CompactBlock"
- test_node.send_message(msg_getdata([inv]))
- - wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
- + wait_until(test_node.received_block_announcement, timeout=30)
- + assert(test_node.received_block_announcement())
- # Now fetch and check the compact block
- header_and_shortids = None
- @@ -378,11 +388,13 @@ class CompactBlocksTest(BitcoinTestFramework):
- if announce == "inv":
- test_node.send_message(msg_inv([CInv(2, block.sha256)]))
- - wait_until(lambda: "getheaders" in test_node.last_message, timeout=30, lock=mininode_lock)
- + success = wait_until(lambda: "getheaders" in test_node.last_message, timeout=30)
- + assert(success)
- test_node.send_header_for_blocks([block])
- else:
- test_node.send_header_for_blocks([block])
- - wait_until(lambda: "getdata" in test_node.last_message, timeout=30, lock=mininode_lock)
- + success = wait_until(lambda: "getdata" in test_node.last_message, timeout=30)
- + assert(success)
- assert_equal(len(test_node.last_message["getdata"].inv), 1)
- assert_equal(test_node.last_message["getdata"].inv[0].type, 4)
- assert_equal(test_node.last_message["getdata"].inv[0].hash, block.sha256)
- @@ -561,7 +573,8 @@ class CompactBlocksTest(BitcoinTestFramework):
- assert_equal(int(node.getbestblockhash(), 16), block.hashPrevBlock)
- # We should receive a getdata request
- - wait_until(lambda: "getdata" in test_node.last_message, timeout=10, lock=mininode_lock)
- + success = wait_until(lambda: "getdata" in test_node.last_message, timeout=10)
- + assert(success)
- assert_equal(len(test_node.last_message["getdata"].inv), 1)
- assert(test_node.last_message["getdata"].inv[0].type == 2 or test_node.last_message["getdata"].inv[0].type == 2|MSG_WITNESS_FLAG)
- assert_equal(test_node.last_message["getdata"].inv[0].hash, block.sha256)
- @@ -588,7 +601,8 @@ class CompactBlocksTest(BitcoinTestFramework):
- num_to_request = random.randint(1, len(block.vtx))
- msg.block_txn_request.from_absolute(sorted(random.sample(range(len(block.vtx)), num_to_request)))
- test_node.send_message(msg)
- - wait_until(lambda: "blocktxn" in test_node.last_message, timeout=10, lock=mininode_lock)
- + success = wait_until(lambda: "blocktxn" in test_node.last_message, timeout=10)
- + assert(success)
- [tx.calc_sha256() for tx in block.vtx]
- with mininode_lock:
- @@ -627,20 +641,22 @@ class CompactBlocksTest(BitcoinTestFramework):
- for i in range(MAX_CMPCTBLOCK_DEPTH + 1):
- test_node.clear_block_announcement()
- new_blocks.append(node.generate(1)[0])
- - wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
- + wait_until(test_node.received_block_announcement, timeout=30)
- test_node.clear_block_announcement()
- test_node.send_message(msg_getdata([CInv(4, int(new_blocks[0], 16))]))
- - wait_until(lambda: "cmpctblock" in test_node.last_message, timeout=30, lock=mininode_lock)
- + success = wait_until(lambda: "cmpctblock" in test_node.last_message, timeout=30)
- + assert(success)
- test_node.clear_block_announcement()
- node.generate(1)
- - wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
- + wait_until(test_node.received_block_announcement, timeout=30)
- test_node.clear_block_announcement()
- with mininode_lock:
- test_node.last_message.pop("block", None)
- test_node.send_message(msg_getdata([CInv(4, int(new_blocks[0], 16))]))
- - wait_until(lambda: "block" in test_node.last_message, timeout=30, lock=mininode_lock)
- + success = wait_until(lambda: "block" in test_node.last_message, timeout=30)
- + assert(success)
- with mininode_lock:
- test_node.last_message["block"].block.calc_sha256()
- assert_equal(test_node.last_message["block"].block.sha256, int(new_blocks[0], 16))
- @@ -691,7 +707,7 @@ class CompactBlocksTest(BitcoinTestFramework):
- node.submitblock(ToHex(block))
- for l in listeners:
- - wait_until(lambda: l.received_block_announcement(), timeout=30, lock=mininode_lock)
- + wait_until(lambda: l.received_block_announcement(), timeout=30)
- with mininode_lock:
- for l in listeners:
- assert "cmpctblock" in l.last_message
- diff --git a/test/functional/p2p-feefilter.py b/test/functional/p2p-feefilter.py
- old mode 100755
- new mode 100644
- index 8c92365..dbccb63
- --- a/test/functional/p2p-feefilter.py
- +++ b/test/functional/p2p-feefilter.py
- @@ -37,8 +37,11 @@ class TestNode(NodeConnCB):
- self.txinvs = []
- class FeeFilterTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- + self.setup_clean_chain = False
- def run_test(self):
- node1 = self.nodes[1]
- diff --git a/test/functional/p2p-fullblocktest.py b/test/functional/p2p-fullblocktest.py
- old mode 100755
- new mode 100644
- index 30da5ab..4d8ff65
- --- a/test/functional/p2p-fullblocktest.py
- +++ b/test/functional/p2p-fullblocktest.py
- @@ -49,11 +49,12 @@ class CBrokenBlock(CBlock):
- return r
- class FullBlockTest(ComparisonTestFramework):
- +
- # Can either run this test as 1 node with expected answers, or two and compare them.
- # Change the "outcome" variable from each TestInstance object to only do the comparison.
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- - self.setup_clean_chain = True
- self.block_heights = {}
- self.coinbase_key = CECKey()
- self.coinbase_key.set_secretbytes(b"horsebattery")
- diff --git a/test/functional/p2p-leaktests.py b/test/functional/p2p-leaktests.py
- old mode 100755
- new mode 100644
- index 1dc8f72..5611c87
- --- a/test/functional/p2p-leaktests.py
- +++ b/test/functional/p2p-leaktests.py
- @@ -92,7 +92,8 @@ class CNodeNoVerackIdle(CLazyNode):
- conn.send_message(msg_getaddr())
- class P2PLeakTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 1
- self.extra_args = [['-banscore='+str(banscore)]]
- @@ -118,11 +119,11 @@ class P2PLeakTest(BitcoinTestFramework):
- NetworkThread().start() # Start up network handling in another thread
- - wait_until(lambda: no_version_bannode.ever_connected, timeout=10, lock=mininode_lock)
- - wait_until(lambda: no_version_idlenode.ever_connected, timeout=10, lock=mininode_lock)
- - wait_until(lambda: no_verack_idlenode.version_received, timeout=10, lock=mininode_lock)
- - wait_until(lambda: unsupported_service_bit5_node.ever_connected, timeout=10, lock=mininode_lock)
- - wait_until(lambda: unsupported_service_bit7_node.ever_connected, timeout=10, lock=mininode_lock)
- + assert wait_until(lambda: no_version_bannode.ever_connected, timeout=10)
- + assert wait_until(lambda: no_version_idlenode.ever_connected, timeout=10)
- + assert wait_until(lambda: no_verack_idlenode.version_received, timeout=10)
- + assert wait_until(lambda: unsupported_service_bit5_node.ever_connected, timeout=10)
- + assert wait_until(lambda: unsupported_service_bit7_node.ever_connected, timeout=10)
- # Mine a block and make sure that it's not sent to the connected nodes
- self.nodes[0].generate(1)
- @@ -139,9 +140,6 @@ class P2PLeakTest(BitcoinTestFramework):
- [conn.disconnect_node() for conn in connections]
- - # Wait until all connections are closed
- - wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 0)
- -
- # Make sure no unexpected messages came in
- assert(no_version_bannode.unexpected_msg == False)
- assert(no_version_idlenode.unexpected_msg == False)
- @@ -160,10 +158,8 @@ class P2PLeakTest(BitcoinTestFramework):
- allowed_service_bit5_node.add_connection(connections[5])
- allowed_service_bit7_node.add_connection(connections[6])
- - NetworkThread().start() # Network thread stopped when all previous NodeConnCBs disconnected. Restart it
- -
- - wait_until(lambda: allowed_service_bit5_node.message_count["verack"], lock=mininode_lock)
- - wait_until(lambda: allowed_service_bit7_node.message_count["verack"], lock=mininode_lock)
- + assert wait_until(lambda: allowed_service_bit5_node.message_count["verack"], timeout=10)
- + assert wait_until(lambda: allowed_service_bit7_node.message_count["verack"], timeout=10)
- if __name__ == '__main__':
- P2PLeakTest().main()
- diff --git a/test/functional/p2p-mempool.py b/test/functional/p2p-mempool.py
- old mode 100755
- new mode 100644
- index 40fcde2..34ef249
- --- a/test/functional/p2p-mempool.py
- +++ b/test/functional/p2p-mempool.py
- @@ -13,7 +13,9 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class P2PMempoolTests(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- self.extra_args = [["-peerbloomfilters=0"]]
- diff --git a/test/functional/p2p-segwit.py b/test/functional/p2p-segwit.py
- old mode 100755
- new mode 100644
- index 2642f89..687172c
- --- a/test/functional/p2p-segwit.py
- +++ b/test/functional/p2p-segwit.py
- @@ -109,7 +109,9 @@ def sign_P2PK_witness_input(script, txTo, inIdx, hashtype, value, key):
- class SegWitTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- self.extra_args = [["-whitelist=127.0.0.1"], ["-whitelist=127.0.0.1", "-acceptnonstdtxn=0"], ["-whitelist=127.0.0.1", "-vbparams=segwit:0:0"]]
- @@ -956,7 +958,7 @@ class SegWitTest(BitcoinTestFramework):
- assert(self.test_node.last_message["getdata"].inv[0].type == blocktype)
- self.test_node.test_witness_block(block1, True)
- - # Litecoin: Blocks with nVersion < VB_TOP_BITS are rejected
- + # LitecoinCash: Blocks with nVersion < VB_TOP_BITS are rejected
- # self.test_node.announce_block_and_wait_for_getdata(block2, use_header=True)
- # assert(self.test_node.last_message["getdata"].inv[0].type == blocktype)
- @@ -1013,7 +1015,7 @@ class SegWitTest(BitcoinTestFramework):
- assert_equal(rpc_details["weight"], weight)
- # Upgraded node should not ask for blocks from unupgraded
- - # Litecoin: Blocks with nVersion < VB_TOP_BITS are rejected
- + # LitecoinCash: Blocks with nVersion < VB_TOP_BITS are rejected
- block4 = self.build_next_block(nVersion=(VB_TOP_BITS | (1<<15)))
- block4.solve()
- self.old_node.getdataset = set()
- @@ -1494,7 +1496,7 @@ class SegWitTest(BitcoinTestFramework):
- # Restart with the new binary
- self.stop_node(node_id)
- - self.start_node(node_id, extra_args=[])
- + self.nodes[node_id] = self.start_node(node_id, self.options.tmpdir)
- connect_nodes(self.nodes[0], node_id)
- sync_blocks(self.nodes)
- @@ -1947,7 +1949,7 @@ class SegWitTest(BitcoinTestFramework):
- self.test_premature_coinbase_witness_spend()
- self.test_uncompressed_pubkey()
- self.test_signature_version_1()
- - # Litecoin: Disable test due to occasional travis issue
- + # LitecoinCash: Disable test due to occasional travis issue
- #self.test_non_standard_witness()
- sync_blocks(self.nodes)
- self.test_upgrade_after_activation(node_id=2)
- diff --git a/test/functional/p2p-timeouts.py b/test/functional/p2p-timeouts.py
- old mode 100755
- new mode 100644
- index 51d4769..c3b29c2
- --- a/test/functional/p2p-timeouts.py
- +++ b/test/functional/p2p-timeouts.py
- @@ -33,7 +33,8 @@ class TestNode(NodeConnCB):
- pass
- class TimeoutsTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- diff --git a/test/functional/p2p-versionbits-warning.py b/test/functional/p2p-versionbits-warning.py
- old mode 100755
- new mode 100644
- index 5dfac6d..df7e8ce
- --- a/test/functional/p2p-versionbits-warning.py
- +++ b/test/functional/p2p-versionbits-warning.py
- @@ -28,7 +28,8 @@ class TestNode(NodeConnCB):
- pass
- class VersionBitsWarningTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- @@ -111,7 +112,7 @@ class VersionBitsWarningTest(BitcoinTestFramework):
- # Empty out the alert file
- with open(self.alert_filename, 'w', encoding='utf8') as _:
- pass
- - self.start_nodes()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, self.extra_args)
- # Connecting one block should be enough to generate an error.
- self.nodes[0].generate(1)
- @@ -122,7 +123,7 @@ class VersionBitsWarningTest(BitcoinTestFramework):
- self.test_versionbits_in_alert_file()
- # Test framework expects the node to still be running...
- - self.start_nodes()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, self.extra_args)
- if __name__ == '__main__':
- VersionBitsWarningTest().main()
- diff --git a/test/functional/preciousblock.py b/test/functional/preciousblock.py
- old mode 100755
- new mode 100644
- index 40d7bb1..04b41e7
- --- a/test/functional/preciousblock.py
- +++ b/test/functional/preciousblock.py
- @@ -35,7 +35,8 @@ def node_sync_via_rpc(nodes):
- unidirectional_node_sync_via_rpc(node_src, node_dest)
- class PreciousTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- diff --git a/test/functional/prioritise_transaction.py b/test/functional/prioritise_transaction.py
- old mode 100755
- new mode 100644
- index e5611af..b964547
- --- a/test/functional/prioritise_transaction.py
- +++ b/test/functional/prioritise_transaction.py
- @@ -9,7 +9,9 @@ from test_framework.util import *
- from test_framework.mininode import COIN, MAX_BLOCK_BASE_SIZE
- class PrioritiseTransactionTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- self.extra_args = [["-printpriority=1", "-maxmempool=10"], ["-printpriority=1", "-maxmempool=10"]]
- @@ -101,7 +103,7 @@ class PrioritiseTransactionTest(BitcoinTestFramework):
- tx_id = self.nodes[0].decoderawtransaction(tx_hex)["txid"]
- # This will raise an exception due to min relay fee not being met
- - assert_raises_rpc_error(-26, "66: min relay fee not met", self.nodes[0].sendrawtransaction, tx_hex)
- + assert_raises_jsonrpc(-26, "66: min relay fee not met", self.nodes[0].sendrawtransaction, tx_hex)
- assert(tx_id not in self.nodes[0].getrawmempool())
- # This is a less than 1000-byte transaction, so just set the fee
- diff --git a/test/functional/proxy_test.py b/test/functional/proxy_test.py
- old mode 100755
- new mode 100644
- index 185d9a7..e1e4d21
- --- a/test/functional/proxy_test.py
- +++ b/test/functional/proxy_test.py
- @@ -41,9 +41,12 @@ from test_framework.netutil import test_ipv6_local
- RANGE_BEGIN = PORT_MIN + 2 * PORT_RANGE # Start after p2p and rpc ports
- +
- class ProxyTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 4
- + self.setup_clean_chain = False
- def setup_nodes(self):
- self.have_ipv6 = test_ipv6_local()
- @@ -86,8 +89,7 @@ class ProxyTest(BitcoinTestFramework):
- ]
- if self.have_ipv6:
- args[3] = ['-listen', '-proxy=[%s]:%i' % (self.conf3.addr),'-proxyrandomize=0', '-noonion']
- - self.add_nodes(self.num_nodes, extra_args=args)
- - self.start_nodes()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args=args)
- def node_test(self, node, proxies, auth, test_onion=True):
- rv = []
- diff --git a/test/functional/pruning.py b/test/functional/pruning.py
- old mode 100755
- new mode 100644
- index 1b0f0ba..0af91e0
- --- a/test/functional/pruning.py
- +++ b/test/functional/pruning.py
- @@ -26,7 +26,9 @@ def calc_usage(blockdir):
- return sum(os.path.getsize(blockdir+f) for f in os.listdir(blockdir) if os.path.isfile(blockdir+f)) / (1024. * 1024.)
- class PruneTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 6
- @@ -54,10 +56,6 @@ class PruneTest(BitcoinTestFramework):
- connect_nodes(self.nodes[0], 4)
- sync_blocks(self.nodes[0:5])
- - def setup_nodes(self):
- - self.add_nodes(self.num_nodes, self.extra_args, timewait=900)
- - self.start_nodes()
- -
- def create_big_chain(self):
- # Start by creating some coinbases we can spend later
- self.nodes[1].generate(200)
- @@ -100,7 +98,7 @@ class PruneTest(BitcoinTestFramework):
- # Node 2 stays connected, so it hears about the stale blocks and then reorg's when node0 reconnects
- # Stopping node 0 also clears its mempool, so it doesn't have node1's transactions to accidentally mine
- self.stop_node(0)
- - self.start_node(0, extra_args=self.full_node_default_args)
- + self.nodes[0]=self.start_node(0, self.options.tmpdir, self.full_node_default_args, timewait=900)
- # Mine 24 blocks in node 1
- for i in range(24):
- if j == 0:
- @@ -128,7 +126,7 @@ class PruneTest(BitcoinTestFramework):
- # Reboot node 1 to clear its mempool (hopefully make the invalidate faster)
- # Lower the block max size so we don't keep mining all our big mempool transactions (from disconnected blocks)
- self.stop_node(1)
- - self.start_node(1, extra_args=["-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"])
- + self.nodes[1] = self.start_node(1, self.options.tmpdir, ["-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=900)
- height = self.nodes[1].getblockcount()
- self.log.info("Current block height: %d" % height)
- @@ -151,7 +149,7 @@ class PruneTest(BitcoinTestFramework):
- # Reboot node1 to clear those giant tx's from mempool
- self.stop_node(1)
- - self.start_node(1, extra_args=["-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"])
- + self.nodes[1] = self.start_node(1, self.options.tmpdir, ["-maxreceivebuffer=20000","-blockmaxsize=5000", "-checkblocks=5", "-disablesafemode"], timewait=900)
- self.log.info("Generating new longer chain of 300 more blocks")
- self.nodes[1].generate(300)
- @@ -185,7 +183,7 @@ class PruneTest(BitcoinTestFramework):
- def reorg_back(self):
- # Verify that a block on the old main chain fork has been pruned away
- - assert_raises_rpc_error(-1, "Block not available (pruned data)", self.nodes[2].getblock, self.forkhash)
- + assert_raises_jsonrpc(-1, "Block not available (pruned data)", self.nodes[2].getblock, self.forkhash)
- self.log.info("Will need to redownload block %d" % self.forkheight)
- # Verify that we have enough history to reorg back to the fork point
- @@ -229,15 +227,13 @@ class PruneTest(BitcoinTestFramework):
- def manual_test(self, node_number, use_timestamp):
- # at this point, node has 995 blocks and has not yet run in prune mode
- - self.start_node(node_number)
- - node = self.nodes[node_number]
- + node = self.nodes[node_number] = self.start_node(node_number, self.options.tmpdir, timewait=900)
- assert_equal(node.getblockcount(), 995)
- - assert_raises_rpc_error(-1, "not in prune mode", node.pruneblockchain, 500)
- + assert_raises_jsonrpc(-1, "not in prune mode", node.pruneblockchain, 500)
- + self.stop_node(node_number)
- # now re-start in manual pruning mode
- - self.stop_node(node_number)
- - self.start_node(node_number, extra_args=["-prune=1"])
- - node = self.nodes[node_number]
- + node = self.nodes[node_number] = self.start_node(node_number, self.options.tmpdir, ["-prune=1"], timewait=900)
- assert_equal(node.getblockcount(), 995)
- def height(index):
- @@ -265,14 +261,14 @@ class PruneTest(BitcoinTestFramework):
- return os.path.isfile(self.options.tmpdir + "/node{}/regtest/blocks/blk{:05}.dat".format(node_number, index))
- # should not prune because chain tip of node 3 (995) < PruneAfterHeight (1000)
- - assert_raises_rpc_error(-1, "Blockchain is too short for pruning", node.pruneblockchain, height(500))
- + assert_raises_jsonrpc(-1, "Blockchain is too short for pruning", node.pruneblockchain, height(500))
- # mine 6 blocks so we are at height 1001 (i.e., above PruneAfterHeight)
- node.generate(6)
- assert_equal(node.getblockchaininfo()["blocks"], 1001)
- # negative heights should raise an exception
- - assert_raises_rpc_error(-8, "Negative", node.pruneblockchain, -10)
- + assert_raises_jsonrpc(-8, "Negative", node.pruneblockchain, -10)
- # height=100 too low to prune first block file so this is a no-op
- prune(100)
- @@ -311,7 +307,7 @@ class PruneTest(BitcoinTestFramework):
- # stop node, start back up with auto-prune at 550MB, make sure still runs
- self.stop_node(node_number)
- - self.start_node(node_number, extra_args=["-prune=550"])
- + self.nodes[node_number] = self.start_node(node_number, self.options.tmpdir, ["-prune=550"], timewait=900)
- self.log.info("Success")
- @@ -319,7 +315,7 @@ class PruneTest(BitcoinTestFramework):
- # check that the pruning node's wallet is still in good shape
- self.log.info("Stop and start pruning node to trigger wallet rescan")
- self.stop_node(2)
- - self.start_node(2, extra_args=["-prune=550"])
- + self.nodes[2] = self.start_node(2, self.options.tmpdir, ["-prune=550"])
- self.log.info("Success")
- # check that wallet loads successfully when restarting a pruned node after IBD.
- @@ -329,7 +325,7 @@ class PruneTest(BitcoinTestFramework):
- nds = [self.nodes[0], self.nodes[5]]
- sync_blocks(nds, wait=5, timeout=300)
- self.stop_node(5) #stop and start to trigger rescan
- - self.start_node(5, extra_args=["-prune=550"])
- + self.nodes[5] = self.start_node(5, self.options.tmpdir, ["-prune=550"])
- self.log.info("Success")
- def run_test(self):
- diff --git a/test/functional/rawtransactions.py b/test/functional/rawtransactions.py
- old mode 100755
- new mode 100644
- index ec9467e..6272fc6
- --- a/test/functional/rawtransactions.py
- +++ b/test/functional/rawtransactions.py
- @@ -17,7 +17,9 @@ from test_framework.util import *
- # Create one-input, one-output, no-fee transaction:
- class RawTransactionsTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- @@ -48,7 +50,7 @@ class RawTransactionsTest(BitcoinTestFramework):
- rawtx = self.nodes[2].signrawtransaction(rawtx)
- # This will raise an exception since there are missing inputs
- - assert_raises_rpc_error(-25, "Missing inputs", self.nodes[2].sendrawtransaction, rawtx['hex'])
- + assert_raises_jsonrpc(-25, "Missing inputs", self.nodes[2].sendrawtransaction, rawtx['hex'])
- #########################
- # RAW TX MULTISIG TESTS #
- @@ -190,13 +192,13 @@ class RawTransactionsTest(BitcoinTestFramework):
- assert_equal(self.nodes[0].getrawtransaction(txHash, True)["hex"], rawTxSigned['hex'])
- # 6. invalid parameters - supply txid and string "Flase"
- - assert_raises_rpc_error(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, "Flase")
- + assert_raises_jsonrpc(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, "Flase")
- # 7. invalid parameters - supply txid and empty array
- - assert_raises_rpc_error(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, [])
- + assert_raises_jsonrpc(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, [])
- # 8. invalid parameters - supply txid and empty dict
- - assert_raises_rpc_error(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, {})
- + assert_raises_jsonrpc(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, {})
- inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 1000}]
- outputs = { self.nodes[0].getnewaddress() : 1 }
- @@ -207,12 +209,12 @@ class RawTransactionsTest(BitcoinTestFramework):
- # 9. invalid parameters - sequence number out of range
- inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : -1}]
- outputs = { self.nodes[0].getnewaddress() : 1 }
- - assert_raises_rpc_error(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs)
- + assert_raises_jsonrpc(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs)
- # 10. invalid parameters - sequence number out of range
- inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 4294967296}]
- outputs = { self.nodes[0].getnewaddress() : 1 }
- - assert_raises_rpc_error(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs)
- + assert_raises_jsonrpc(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs)
- inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 4294967294}]
- outputs = { self.nodes[0].getnewaddress() : 1 }
- diff --git a/test/functional/receivedby.py b/test/functional/receivedby.py
- old mode 100755
- new mode 100644
- index db6fc86..19d99c9
- --- a/test/functional/receivedby.py
- +++ b/test/functional/receivedby.py
- @@ -23,9 +23,16 @@ def get_sub_array_from_array(object_array, to_match):
- return []
- class ReceivedByTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 2
- +
- + def __init__(self):
- + super().__init__()
- + self.num_nodes = 4
- + self.setup_clean_chain = False
- +
- + def setup_nodes(self):
- + #This test requires mocktime
- self.enable_mocktime()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir)
- def run_test(self):
- '''
- diff --git a/test/functional/reindex.py b/test/functional/reindex.py
- old mode 100755
- new mode 100644
- index 1f684a1..b446baa
- --- a/test/functional/reindex.py
- +++ b/test/functional/reindex.py
- @@ -15,7 +15,8 @@ import time
- class ReindexTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- @@ -24,7 +25,7 @@ class ReindexTest(BitcoinTestFramework):
- blockcount = self.nodes[0].getblockcount()
- self.stop_nodes()
- extra_args = [["-reindex-chainstate" if justchainstate else "-reindex", "-checkblockindex=1"]]
- - self.start_nodes(extra_args)
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args)
- while self.nodes[0].getblockcount() < blockcount:
- time.sleep(0.1)
- assert_equal(self.nodes[0].getblockcount(), blockcount)
- diff --git a/test/functional/replace-by-fee.py b/test/functional/replace-by-fee.py
- old mode 100755
- new mode 100644
- index 4ef10e6..bc67654
- --- a/test/functional/replace-by-fee.py
- +++ b/test/functional/replace-by-fee.py
- @@ -61,25 +61,20 @@ def make_utxo(node, amount, confirmed=True, scriptPubKey=CScript([1])):
- class ReplaceByFeeTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 2
- + def __init__(self):
- + super().__init__()
- + self.num_nodes = 1
- + self.setup_clean_chain = False
- self.extra_args= [["-maxorphantx=1000",
- "-whitelist=127.0.0.1",
- "-limitancestorcount=50",
- "-limitancestorsize=101",
- "-limitdescendantcount=200",
- - "-limitdescendantsize=101"],
- - ["-mempoolreplacement=0"]]
- + "-limitdescendantsize=101"]]
- def run_test(self):
- - # Leave IBD
- - self.nodes[0].generate(1)
- -
- make_utxo(self.nodes[0], 1*COIN)
- - # Ensure nodes are synced
- - self.sync_all()
- -
- self.log.info("Running test simple doublespend...")
- self.test_simple_doublespend()
- @@ -116,19 +111,12 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- """Simple doublespend"""
- tx0_outpoint = make_utxo(self.nodes[0], int(1.1*COIN))
- - # make_utxo may have generated a bunch of blocks, so we need to sync
- - # before we can spend the coins generated, or else the resulting
- - # transactions might not be accepted by our peers.
- - self.sync_all()
- -
- tx1a = CTransaction()
- tx1a.vin = [CTxIn(tx0_outpoint, nSequence=0)]
- tx1a.vout = [CTxOut(1*COIN, CScript([b'a']))]
- tx1a_hex = txToHex(tx1a)
- tx1a_txid = self.nodes[0].sendrawtransaction(tx1a_hex, True)
- - self.sync_all()
- -
- # Should fail because we haven't changed the fee
- tx1b = CTransaction()
- tx1b.vin = [CTxIn(tx0_outpoint, nSequence=0)]
- @@ -136,18 +124,13 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx1b_hex = txToHex(tx1b)
- # This will raise an exception due to insufficient fee
- - assert_raises_rpc_error(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- - # This will raise an exception due to transaction replacement being disabled
- - assert_raises_rpc_error(-26, "txn-mempool-conflict", self.nodes[1].sendrawtransaction, tx1b_hex, True)
- + assert_raises_jsonrpc(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- # Extra 0.1 BTC fee
- tx1b = CTransaction()
- tx1b.vin = [CTxIn(tx0_outpoint, nSequence=0)]
- tx1b.vout = [CTxOut(int(0.9*COIN), CScript([b'b']))]
- tx1b_hex = txToHex(tx1b)
- - # Replacement still disabled even with "enough fee"
- - assert_raises_rpc_error(-26, "txn-mempool-conflict", self.nodes[1].sendrawtransaction, tx1b_hex, True)
- - # Works when enabled
- tx1b_txid = self.nodes[0].sendrawtransaction(tx1b_hex, True)
- mempool = self.nodes[0].getrawmempool()
- @@ -157,11 +140,6 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- assert_equal(tx1b_hex, self.nodes[0].getrawtransaction(tx1b_txid))
- - # Second node is running mempoolreplacement=0, will not replace originally-seen txn
- - mempool = self.nodes[1].getrawmempool()
- - assert tx1a_txid in mempool
- - assert tx1b_txid not in mempool
- -
- def test_doublespend_chain(self):
- """Doublespend of a long chain"""
- @@ -189,7 +167,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- dbl_tx_hex = txToHex(dbl_tx)
- # This will raise an exception due to insufficient fee
- - assert_raises_rpc_error(-26, "insufficient fee", self.nodes[0].sendrawtransaction, dbl_tx_hex, True)
- + assert_raises_jsonrpc(-26, "insufficient fee", self.nodes[0].sendrawtransaction, dbl_tx_hex, True)
- # Accepted with sufficient fee
- dbl_tx = CTransaction()
- @@ -250,7 +228,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- dbl_tx.vout = [CTxOut(initial_nValue - fee*n, CScript([1]))]
- dbl_tx_hex = txToHex(dbl_tx)
- # This will raise an exception due to insufficient fee
- - assert_raises_rpc_error(-26, "insufficient fee", self.nodes[0].sendrawtransaction, dbl_tx_hex, True)
- + assert_raises_jsonrpc(-26, "insufficient fee", self.nodes[0].sendrawtransaction, dbl_tx_hex, True)
- # 1 BTC fee is enough
- dbl_tx = CTransaction()
- @@ -278,7 +256,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- dbl_tx.vout = [CTxOut(initial_nValue - 2*fee*n, CScript([1]))]
- dbl_tx_hex = txToHex(dbl_tx)
- # This will raise an exception
- - assert_raises_rpc_error(-26, "too many potential replacements", self.nodes[0].sendrawtransaction, dbl_tx_hex, True)
- + assert_raises_jsonrpc(-26, "too many potential replacements", self.nodes[0].sendrawtransaction, dbl_tx_hex, True)
- for tx in tree_txs:
- tx.rehash()
- @@ -302,7 +280,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx1b_hex = txToHex(tx1b)
- # This will raise an exception due to insufficient fee
- - assert_raises_rpc_error(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- + assert_raises_jsonrpc(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- def test_spends_of_conflicting_outputs(self):
- """Replacements that spend conflicting tx outputs are rejected"""
- @@ -325,7 +303,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx2_hex = txToHex(tx2)
- # This will raise an exception
- - assert_raises_rpc_error(-26, "bad-txns-spends-conflicting-tx", self.nodes[0].sendrawtransaction, tx2_hex, True)
- + assert_raises_jsonrpc(-26, "bad-txns-spends-conflicting-tx", self.nodes[0].sendrawtransaction, tx2_hex, True)
- # Spend tx1a's output to test the indirect case.
- tx1b = CTransaction()
- @@ -342,7 +320,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx2_hex = txToHex(tx2)
- # This will raise an exception
- - assert_raises_rpc_error(-26, "bad-txns-spends-conflicting-tx", self.nodes[0].sendrawtransaction, tx2_hex, True)
- + assert_raises_jsonrpc(-26, "bad-txns-spends-conflicting-tx", self.nodes[0].sendrawtransaction, tx2_hex, True)
- def test_new_unconfirmed_inputs(self):
- """Replacements that add new unconfirmed inputs are rejected"""
- @@ -361,7 +339,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx2_hex = txToHex(tx2)
- # This will raise an exception
- - assert_raises_rpc_error(-26, "replacement-adds-unconfirmed", self.nodes[0].sendrawtransaction, tx2_hex, True)
- + assert_raises_jsonrpc(-26, "replacement-adds-unconfirmed", self.nodes[0].sendrawtransaction, tx2_hex, True)
- def test_too_many_replacements(self):
- """Replacements that evict too many transactions are rejected"""
- @@ -407,7 +385,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- double_tx_hex = txToHex(double_tx)
- # This will raise an exception
- - assert_raises_rpc_error(-26, "too many potential replacements", self.nodes[0].sendrawtransaction, double_tx_hex, True)
- + assert_raises_jsonrpc(-26, "too many potential replacements", self.nodes[0].sendrawtransaction, double_tx_hex, True)
- # If we remove an input, it should pass
- double_tx = CTransaction()
- @@ -434,7 +412,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx1b_hex = txToHex(tx1b)
- # This will raise an exception
- - assert_raises_rpc_error(-26, "txn-mempool-conflict", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- + assert_raises_jsonrpc(-26, "txn-mempool-conflict", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- tx1_outpoint = make_utxo(self.nodes[0], int(1.1*COIN))
- @@ -452,7 +430,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx2b_hex = txToHex(tx2b)
- # This will raise an exception
- - assert_raises_rpc_error(-26, "txn-mempool-conflict", self.nodes[0].sendrawtransaction, tx2b_hex, True)
- + assert_raises_jsonrpc(-26, "txn-mempool-conflict", self.nodes[0].sendrawtransaction, tx2b_hex, True)
- # Now create a new transaction that spends from tx1a and tx2a
- # opt-in on one of the inputs
- @@ -504,7 +482,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx1b_hex = txToHex(tx1b)
- # Verify tx1b cannot replace tx1a.
- - assert_raises_rpc_error(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- + assert_raises_jsonrpc(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx1b_hex, True)
- # Use prioritisetransaction to set tx1a's fee to 0.
- self.nodes[0].prioritisetransaction(txid=tx1a_txid, fee_delta=int(-0.1*COIN))
- @@ -531,7 +509,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
- tx2b_hex = txToHex(tx2b)
- # Verify tx2b cannot replace tx2a.
- - assert_raises_rpc_error(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx2b_hex, True)
- + assert_raises_jsonrpc(-26, "insufficient fee", self.nodes[0].sendrawtransaction, tx2b_hex, True)
- # Now prioritise tx2b to have a higher modified fee
- self.nodes[0].prioritisetransaction(txid=tx2b.hash, fee_delta=int(0.1*COIN))
- diff --git a/test/functional/resendwallettransactions.py b/test/functional/resendwallettransactions.py
- old mode 100755
- new mode 100644
- index d959bb4..5059aa1
- --- a/test/functional/resendwallettransactions.py
- +++ b/test/functional/resendwallettransactions.py
- @@ -5,20 +5,22 @@
- """Test resendwallettransactions RPC."""
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import assert_equal, assert_raises_rpc_error
- +from test_framework.util import assert_equal, assert_raises_jsonrpc
- class ResendWalletTransactionsTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 1
- +
- + def __init__(self):
- + super().__init__()
- self.extra_args = [['--walletbroadcast=false']]
- + self.num_nodes = 1
- def run_test(self):
- # Should raise RPC_WALLET_ERROR (-4) if walletbroadcast is disabled.
- - assert_raises_rpc_error(-4, "Error: Wallet transaction broadcasting is disabled with -walletbroadcast", self.nodes[0].resendwallettransactions)
- + assert_raises_jsonrpc(-4, "Error: Wallet transaction broadcasting is disabled with -walletbroadcast", self.nodes[0].resendwallettransactions)
- # Should return an empty array if there aren't unconfirmed wallet transactions.
- self.stop_node(0)
- - self.start_node(0, extra_args=[])
- + self.nodes[0] = self.start_node(0, self.options.tmpdir)
- assert_equal(self.nodes[0].resendwallettransactions(), [])
- # Should return an array with the unconfirmed wallet transaction.
- diff --git a/test/functional/rest.py b/test/functional/rest.py
- old mode 100755
- new mode 100644
- index 437111a..a69dbb5
- --- a/test/functional/rest.py
- +++ b/test/functional/rest.py
- @@ -43,7 +43,8 @@ def http_post_call(host, port, path, requestdata = '', response_object = 0):
- class RESTTest (BitcoinTestFramework):
- FORMAT_SEPARATOR = "."
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- diff --git a/test/functional/rpcbind_test.py b/test/functional/rpcbind_test.py
- old mode 100755
- new mode 100644
- index 0e8c3fa..951685a
- --- a/test/functional/rpcbind_test.py
- +++ b/test/functional/rpcbind_test.py
- @@ -11,13 +11,19 @@ from test_framework.test_framework import BitcoinTestFramework, SkipTest
- from test_framework.util import *
- from test_framework.netutil import *
- +
- class RPCBindTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- def setup_network(self):
- - self.add_nodes(self.num_nodes, None)
- + pass
- +
- + def setup_nodes(self):
- + pass
- def run_bind_test(self, allow_ips, connect_to, addresses, expected):
- '''
- @@ -25,15 +31,13 @@ class RPCBindTest(BitcoinTestFramework):
- then try to connect, and check if the set of bound addresses
- matches the expected set.
- '''
- - self.log.info("Bind test for %s" % str(addresses))
- expected = [(addr_to_hex(addr), port) for (addr, port) in expected]
- base_args = ['-disablewallet', '-nolisten']
- if allow_ips:
- base_args += ['-rpcallowip=' + x for x in allow_ips]
- binds = ['-rpcbind='+addr for addr in addresses]
- - self.nodes[0].rpchost = connect_to
- - self.start_node(0, base_args + binds)
- - pid = self.nodes[0].process.pid
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, [base_args + binds], connect_to)
- + pid = self.bitcoind_processes[0].pid
- assert_equal(set(get_bind_addrs(pid)), set(expected))
- self.stop_nodes()
- @@ -42,12 +46,10 @@ class RPCBindTest(BitcoinTestFramework):
- Start a node with rpcallow IP, and request getnetworkinfo
- at a non-localhost IP.
- '''
- - self.log.info("Allow IP test for %s:%d" % (rpchost, rpcport))
- base_args = ['-disablewallet', '-nolisten'] + ['-rpcallowip='+x for x in allow_ips]
- - self.nodes[0].rpchost = None
- - self.start_nodes([base_args])
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, [base_args])
- # connect to node through non-loopback interface
- - node = get_rpc_proxy(rpc_url(get_datadir_path(self.options.tmpdir, 0), 0, "%s:%d" % (rpchost, rpcport)), 0, coveragedir=self.options.coveragedir)
- + node = get_rpc_proxy(rpc_url(get_datadir_path(self.options.tmpdir, 0), 0, "%s:%d" % (rpchost, rpcport)), 0)
- node.getnetworkinfo()
- self.stop_nodes()
- @@ -101,7 +103,7 @@ class RPCBindTest(BitcoinTestFramework):
- # Check that with invalid rpcallowip, we are denied
- self.run_allowip_test([non_loopback_ip], non_loopback_ip, defaultport)
- - assert_raises_rpc_error(-342, "non-JSON HTTP response with '403 Forbidden' from server", self.run_allowip_test, ['1.1.1.1'], non_loopback_ip, defaultport)
- + assert_raises_jsonrpc(-342, "non-JSON HTTP response with '403 Forbidden' from server", self.run_allowip_test, ['1.1.1.1'], non_loopback_ip, defaultport)
- if __name__ == '__main__':
- RPCBindTest().main()
- diff --git a/test/functional/rpcnamedargs.py b/test/functional/rpcnamedargs.py
- old mode 100755
- new mode 100644
- index 0fb0a62..3b28600
- --- a/test/functional/rpcnamedargs.py
- +++ b/test/functional/rpcnamedargs.py
- @@ -7,11 +7,18 @@
- from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import (
- assert_equal,
- - assert_raises_rpc_error,
- + assert_raises_jsonrpc,
- )
- +
- class NamedArgumentTest(BitcoinTestFramework):
- - def set_test_params(self):
- + """
- + Test named arguments on RPC calls.
- + """
- +
- + def __init__(self):
- + super().__init__()
- + self.setup_clean_chain = False
- self.num_nodes = 1
- def run_test(self):
- @@ -19,7 +26,7 @@ class NamedArgumentTest(BitcoinTestFramework):
- h = node.help(command='getinfo')
- assert(h.startswith('getinfo\n'))
- - assert_raises_rpc_error(-8, 'Unknown named parameter', node.help, random='getinfo')
- + assert_raises_jsonrpc(-8, 'Unknown named parameter', node.help, random='getinfo')
- h = node.getblockhash(height=0)
- node.getblock(blockhash=h)
- diff --git a/test/functional/segwit.py b/test/functional/segwit.py
- old mode 100755
- new mode 100644
- index 7cd87e5..51eaa34
- --- a/test/functional/segwit.py
- +++ b/test/functional/segwit.py
- @@ -75,7 +75,9 @@ def find_unspent(node, min_value):
- return utxo
- class SegWitTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 3
- self.extra_args = [["-walletprematurewitness", "-rpcserialversion=0"],
- @@ -100,11 +102,11 @@ class SegWitTest(BitcoinTestFramework):
- sync_blocks(self.nodes)
- def fail_accept(self, node, error_msg, txid, sign, redeem_script=""):
- - assert_raises_rpc_error(-26, error_msg, send_to_witness, 1, node, getutxo(txid), self.pubkey[0], False, Decimal("49.998"), sign, redeem_script)
- + assert_raises_jsonrpc(-26, error_msg, send_to_witness, 1, node, getutxo(txid), self.pubkey[0], False, Decimal("49.998"), sign, redeem_script)
- def fail_mine(self, node, txid, sign, redeem_script=""):
- send_to_witness(1, node, getutxo(txid), self.pubkey[0], False, Decimal("49.998"), sign, redeem_script)
- - assert_raises_rpc_error(-1, "CreateNewBlock: TestBlockValidity failed", node.generate, 1)
- + assert_raises_jsonrpc(-1, "CreateNewBlock: TestBlockValidity failed", node.generate, 1)
- sync_blocks(self.nodes)
- def run_test(self):
- @@ -443,7 +445,11 @@ class SegWitTest(BitcoinTestFramework):
- for i in importlist:
- # import all generated addresses. The wallet already has the private keys for some of these, so catch JSON RPC
- # exceptions and continue.
- - try_rpc(-4, "The wallet already contains the private key for this address or script", self.nodes[0].importaddress, i, "", False, True)
- + try:
- + self.nodes[0].importaddress(i,"",False,True)
- + except JSONRPCException as exp:
- + assert_equal(exp.error["message"], "The wallet already contains the private key for this address or script")
- + assert_equal(exp.error["code"], -4)
- self.nodes[0].importaddress(script_to_p2sh(op0)) # import OP_0 as address only
- self.nodes[0].importaddress(multisig_without_privkey_address) # Test multisig_without_privkey
- @@ -456,7 +462,7 @@ class SegWitTest(BitcoinTestFramework):
- # addwitnessaddress should refuse to return a witness address if an uncompressed key is used
- # note that no witness address should be returned by unsolvable addresses
- for i in uncompressed_spendable_address + uncompressed_solvable_address + unknown_address + unsolvable_address:
- - assert_raises_rpc_error(-4, "Public key or redeemscript not known to wallet, or the key is uncompressed", self.nodes[0].addwitnessaddress, i)
- + assert_raises_jsonrpc(-4, "Public key or redeemscript not known to wallet, or the key is uncompressed", self.nodes[0].addwitnessaddress, i)
- # addwitnessaddress should return a witness addresses even if keys are not in the wallet
- self.nodes[0].addwitnessaddress(multisig_without_privkey_address)
- @@ -539,7 +545,7 @@ class SegWitTest(BitcoinTestFramework):
- # premature_witaddress are not accepted until the script is added with addwitnessaddress first
- for i in uncompressed_spendable_address + uncompressed_solvable_address + premature_witaddress:
- # This will raise an exception
- - assert_raises_rpc_error(-4, "Public key or redeemscript not known to wallet, or the key is uncompressed", self.nodes[0].addwitnessaddress, i)
- + assert_raises_jsonrpc(-4, "Public key or redeemscript not known to wallet, or the key is uncompressed", self.nodes[0].addwitnessaddress, i)
- # after importaddress it should pass addwitnessaddress
- v = self.nodes[0].validateaddress(compressed_solvable_address[1])
- diff --git a/test/functional/sendheaders.py b/test/functional/sendheaders.py
- old mode 100755
- new mode 100644
- index 60d107b..e47e07f
- --- a/test/functional/sendheaders.py
- +++ b/test/functional/sendheaders.py
- @@ -128,7 +128,7 @@ class TestNode(NodeConnCB):
- expect_headers = headers if headers != None else []
- expect_inv = inv if inv != None else []
- test_function = lambda: self.block_announced
- - wait_until(test_function, timeout=60, lock=mininode_lock)
- + assert(wait_until(test_function, timeout=60))
- with mininode_lock:
- self.block_announced = False
- @@ -155,12 +155,12 @@ class TestNode(NodeConnCB):
- return
- test_function = lambda: "getdata" in self.last_message and [x.hash for x in self.last_message["getdata"].inv] == hash_list
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert(wait_until(test_function, timeout=timeout))
- return
- def wait_for_block_announcement(self, block_hash, timeout=60):
- test_function = lambda: self.last_blockhash_announced == block_hash
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert(wait_until(test_function, timeout=timeout))
- return
- def send_header_for_blocks(self, new_blocks):
- @@ -174,7 +174,8 @@ class TestNode(NodeConnCB):
- self.send_message(getblocks_message)
- class SendHeadersTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- @@ -225,10 +226,6 @@ class SendHeadersTest(BitcoinTestFramework):
- inv_node.wait_for_verack()
- test_node.wait_for_verack()
- - # Ensure verack's have been processed by our peer
- - inv_node.sync_with_ping()
- - test_node.sync_with_ping()
- -
- tip = int(self.nodes[0].getbestblockhash(), 16)
- # PART 1
- diff --git a/test/functional/signmessages.py b/test/functional/signmessages.py
- old mode 100755
- new mode 100644
- index 8dff006..42f6a9d
- --- a/test/functional/signmessages.py
- +++ b/test/functional/signmessages.py
- @@ -5,34 +5,31 @@
- """Test RPC commands for signing and verifying messages."""
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import assert_equal
- class SignMessagesTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- def run_test(self):
- message = 'This is just a test message'
- - self.log.info('test signing with priv_key')
- - priv_key = 'cUeKHd5orzT3mz8P9pxyREHfsWtVfgsfDjiZZBcjUBAaGk1BTj7N'
- + # Test the signing with a privkey
- + privKey = 'cUeKHd5orzT3mz8P9pxyREHfsWtVfgsfDjiZZBcjUBAaGk1BTj7N'
- address = 'mpLQjfK79b7CCV4VMJWEWAj5Mpx8Up5zxB'
- - expected_signature = 'IGve8AOjIcu+a/nYW1PABSfmp2oQlEqLIOwPgNW5/Y5teggr8S0vy4SMdjL2Viv3iuBZjJbhvyBo0tv5m3H63b8='
- - signature = self.nodes[0].signmessagewithprivkey(priv_key, message)
- - assert_equal(expected_signature, signature)
- + signature = self.nodes[0].signmessagewithprivkey(privKey, message)
- +
- + # Verify the message
- assert(self.nodes[0].verifymessage(address, signature, message))
- - self.log.info('test signing with an address with wallet')
- + # Test the signing with an address with wallet
- address = self.nodes[0].getnewaddress()
- signature = self.nodes[0].signmessage(address, message)
- - assert(self.nodes[0].verifymessage(address, signature, message))
- - self.log.info('test verifying with another address should not work')
- - other_address = self.nodes[0].getnewaddress()
- - other_signature = self.nodes[0].signmessage(other_address, message)
- - assert(not self.nodes[0].verifymessage(other_address, signature, message))
- - assert(not self.nodes[0].verifymessage(address, other_signature, message))
- + # Verify the message
- + assert(self.nodes[0].verifymessage(address, signature, message))
- if __name__ == '__main__':
- SignMessagesTest().main()
- diff --git a/test/functional/signrawtransactions.py b/test/functional/signrawtransactions.py
- old mode 100755
- new mode 100644
- index 9a45d53..4157272
- --- a/test/functional/signrawtransactions.py
- +++ b/test/functional/signrawtransactions.py
- @@ -9,7 +9,8 @@ from test_framework.util import *
- class SignRawTransactionsTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- @@ -82,7 +83,7 @@ class SignRawTransactionsTest(BitcoinTestFramework):
- assert_equal(decodedRawTx["vin"][i]["vout"], inp["vout"])
- # Make sure decoderawtransaction throws if there is extra data
- - assert_raises_rpc_error(-22, "TX decode failed", self.nodes[0].decoderawtransaction, rawTx + "00")
- + assert_raises(JSONRPCException, self.nodes[0].decoderawtransaction, rawTx + "00")
- rawTxSigned = self.nodes[0].signrawtransaction(rawTx, scripts, privKeys)
- diff --git a/test/functional/smartfees.py b/test/functional/smartfees.py
- old mode 100755
- new mode 100644
- index 76632fc..bc42a31
- --- a/test/functional/smartfees.py
- +++ b/test/functional/smartfees.py
- @@ -141,8 +141,11 @@ def check_estimates(node, fees_seen, max_invalid, print_estimates = True):
- class EstimateFeeTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 3
- + self.setup_clean_chain = False
- def setup_network(self):
- """
- @@ -150,53 +153,13 @@ class EstimateFeeTest(BitcoinTestFramework):
- But first we need to use one node to create a lot of outputs
- which we will use to generate our transactions.
- """
- - self.add_nodes(3, extra_args=[["-maxorphantx=1000", "-whitelist=127.0.0.1"],
- - ["-blockmaxsize=17000", "-maxorphantx=1000"],
- - ["-blockmaxsize=8000", "-maxorphantx=1000"]])
- + self.nodes = []
- # Use node0 to mine blocks for input splitting
- - # Node1 mines small blocks but that are bigger than the expected transaction rate.
- - # NOTE: the CreateNewBlock code starts counting block size at 1,000 bytes,
- - # (17k is room enough for 110 or so transactions)
- - # Node2 is a stingy miner, that
- - # produces too small blocks (room for only 55 or so transactions)
- -
- -
- - def transact_and_mine(self, numblocks, mining_node):
- - min_fee = Decimal("0.00001")
- - # We will now mine numblocks blocks generating on average 100 transactions between each block
- - # We shuffle our confirmed txout set before each set of transactions
- - # small_txpuzzle_randfee will use the transactions that have inputs already in the chain when possible
- - # resorting to tx's that depend on the mempool when those run out
- - for i in range(numblocks):
- - random.shuffle(self.confutxo)
- - for j in range(random.randrange(100-50,100+50)):
- - from_index = random.randint(1,2)
- - (txhex, fee) = small_txpuzzle_randfee(self.nodes[from_index], self.confutxo,
- - self.memutxo, Decimal("0.005"), min_fee, min_fee)
- - tx_kbytes = (len(txhex) // 2) / 1000.0
- - self.fees_per_kb.append(float(fee)/tx_kbytes)
- - sync_mempools(self.nodes[0:3], wait=.1)
- - mined = mining_node.getblock(mining_node.generate(1)[0],True)["tx"]
- - sync_blocks(self.nodes[0:3], wait=.1)
- - # update which txouts are confirmed
- - newmem = []
- - for utx in self.memutxo:
- - if utx["txid"] in mined:
- - self.confutxo.append(utx)
- - else:
- - newmem.append(utx)
- - self.memutxo = newmem
- + self.nodes.append(self.start_node(0, self.options.tmpdir, ["-maxorphantx=1000",
- + "-whitelist=127.0.0.1"]))
- - def run_test(self):
- self.log.info("This test is time consuming, please be patient")
- self.log.info("Splitting inputs so we can generate tx's")
- -
- - # Make log handler available to helper functions
- - global log
- - log = self.log
- -
- - # Start node0
- - self.start_node(0)
- self.txouts = []
- self.txouts2 = []
- # Split a coinbase into two transaction puzzle outputs
- @@ -225,14 +188,53 @@ class EstimateFeeTest(BitcoinTestFramework):
- # Now we can connect the other nodes, didn't want to connect them earlier
- # so the estimates would not be affected by the splitting transactions
- - self.start_node(1)
- - self.start_node(2)
- + # Node1 mines small blocks but that are bigger than the expected transaction rate.
- + # NOTE: the CreateNewBlock code starts counting block size at 1,000 bytes,
- + # (17k is room enough for 110 or so transactions)
- + self.nodes.append(self.start_node(1, self.options.tmpdir,
- + ["-blockmaxsize=17000", "-maxorphantx=1000"]))
- connect_nodes(self.nodes[1], 0)
- +
- + # Node2 is a stingy miner, that
- + # produces too small blocks (room for only 55 or so transactions)
- + node2args = ["-blockmaxsize=8000", "-maxorphantx=1000"]
- +
- + self.nodes.append(self.start_node(2, self.options.tmpdir, node2args))
- connect_nodes(self.nodes[0], 2)
- connect_nodes(self.nodes[2], 1)
- self.sync_all()
- + def transact_and_mine(self, numblocks, mining_node):
- + min_fee = Decimal("0.00001")
- + # We will now mine numblocks blocks generating on average 100 transactions between each block
- + # We shuffle our confirmed txout set before each set of transactions
- + # small_txpuzzle_randfee will use the transactions that have inputs already in the chain when possible
- + # resorting to tx's that depend on the mempool when those run out
- + for i in range(numblocks):
- + random.shuffle(self.confutxo)
- + for j in range(random.randrange(100-50,100+50)):
- + from_index = random.randint(1,2)
- + (txhex, fee) = small_txpuzzle_randfee(self.nodes[from_index], self.confutxo,
- + self.memutxo, Decimal("0.005"), min_fee, min_fee)
- + tx_kbytes = (len(txhex) // 2) / 1000.0
- + self.fees_per_kb.append(float(fee)/tx_kbytes)
- + sync_mempools(self.nodes[0:3], wait=.1)
- + mined = mining_node.getblock(mining_node.generate(1)[0],True)["tx"]
- + sync_blocks(self.nodes[0:3], wait=.1)
- + # update which txouts are confirmed
- + newmem = []
- + for utx in self.memutxo:
- + if utx["txid"] in mined:
- + self.confutxo.append(utx)
- + else:
- + newmem.append(utx)
- + self.memutxo = newmem
- +
- + def run_test(self):
- + # Make log handler available to helper functions
- + global log
- + log = self.log
- self.fees_per_kb = []
- self.memutxo = []
- self.confutxo = self.txouts # Start with the set of confirmed txouts after splitting
- diff --git a/test/functional/test_framework/comptool.py b/test/functional/test_framework/comptool.py
- old mode 100755
- new mode 100644
- index bfbc0c3..9f06286
- --- a/test/functional/test_framework/comptool.py
- +++ b/test/functional/test_framework/comptool.py
- @@ -19,7 +19,7 @@ TestNode behaves as follows:
- from .mininode import *
- from .blockstore import BlockStore, TxStore
- -from .util import p2p_port, wait_until
- +from .util import p2p_port
- import logging
- @@ -189,7 +189,7 @@ class TestManager(object):
- def wait_for_disconnections(self):
- def disconnected():
- return all(node.closed for node in self.test_nodes)
- - wait_until(disconnected, timeout=10, lock=mininode_lock)
- + return wait_until(disconnected, timeout=10)
- def wait_for_verack(self):
- return all(node.wait_for_verack() for node in self.test_nodes)
- @@ -197,7 +197,7 @@ class TestManager(object):
- def wait_for_pings(self, counter):
- def received_pongs():
- return all(node.received_ping_response(counter) for node in self.test_nodes)
- - wait_until(received_pongs, lock=mininode_lock)
- + return wait_until(received_pongs)
- # sync_blocks: Wait for all connections to request the blockhash given
- # then send get_headers to find out the tip of each node, and synchronize
- @@ -210,7 +210,8 @@ class TestManager(object):
- )
- # --> error if not requested
- - wait_until(blocks_requested, attempts=20*num_blocks, lock=mininode_lock)
- + if not wait_until(blocks_requested, attempts=20*num_blocks):
- + raise AssertionError("Not all nodes requested block")
- # Send getheaders message
- [ c.cb.send_getheaders() for c in self.connections ]
- @@ -230,7 +231,8 @@ class TestManager(object):
- )
- # --> error if not requested
- - wait_until(transaction_requested, attempts=20*num_events, lock=mininode_lock)
- + if not wait_until(transaction_requested, attempts=20*num_events):
- + raise AssertionError("Not all nodes requested transaction")
- # Get the mempool
- [ c.cb.send_mempool() for c in self.connections ]
- diff --git a/test/functional/test_framework/mininode.py b/test/functional/test_framework/mininode.py
- old mode 100755
- new mode 100644
- index 1d50c19..3814b1a
- --- a/test/functional/test_framework/mininode.py
- +++ b/test/functional/test_framework/mininode.py
- @@ -34,9 +34,9 @@ import sys
- import time
- from threading import RLock, Thread
- -import litecoin_scrypt
- +import litecoincash_scrypt
- from test_framework.siphash import siphash256
- -from test_framework.util import hex_str_to_bytes, bytes_to_hex_str, wait_until
- +from test_framework.util import hex_str_to_bytes, bytes_to_hex_str
- BIP0031_VERSION = 60000
- MY_VERSION = 80014 # past bip-31 for ping/pong
- @@ -586,7 +586,7 @@ class CBlockHeader(object):
- r += struct.pack("<I", self.nNonce)
- self.sha256 = uint256_from_str(hash256(r))
- self.hash = encode(hash256(r)[::-1], 'hex_codec').decode('ascii')
- - self.scrypt256 = uint256_from_str(litecoin_scrypt.getPoWHash(r))
- + self.scrypt256 = uint256_from_str(litecoincash_scrypt.getPoWHash(r))
- def rehash(self):
- self.sha256 = None
- @@ -1364,6 +1364,23 @@ class msg_reject(object):
- return "msg_reject: %s %d %s [%064x]" \
- % (self.message, self.code, self.reason, self.data)
- +# Helper function
- +def wait_until(predicate, *, attempts=float('inf'), timeout=float('inf')):
- + if attempts == float('inf') and timeout == float('inf'):
- + timeout = 60
- + attempt = 0
- + elapsed = 0
- +
- + while attempt < attempts and elapsed < timeout:
- + with mininode_lock:
- + if predicate():
- + return True
- + attempt += 1
- + elapsed += 0.05
- + time.sleep(0.05)
- +
- + return False
- +
- class msg_feefilter(object):
- command = b"feefilter"
- @@ -1511,7 +1528,6 @@ class NodeConnCB(object):
- except:
- print("ERROR delivering %s (%s)" % (repr(message),
- sys.exc_info()[0]))
- - raise
- def set_deliver_sleep_time(self, value):
- with mininode_lock:
- @@ -1581,21 +1597,21 @@ class NodeConnCB(object):
- def wait_for_disconnect(self, timeout=60):
- test_function = lambda: not self.connected
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert wait_until(test_function, timeout=timeout)
- # Message receiving helper methods
- def wait_for_block(self, blockhash, timeout=60):
- test_function = lambda: self.last_message.get("block") and self.last_message["block"].block.rehash() == blockhash
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert wait_until(test_function, timeout=timeout)
- def wait_for_getdata(self, timeout=60):
- test_function = lambda: self.last_message.get("getdata")
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert wait_until(test_function, timeout=timeout)
- def wait_for_getheaders(self, timeout=60):
- test_function = lambda: self.last_message.get("getheaders")
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert wait_until(test_function, timeout=timeout)
- def wait_for_inv(self, expected_inv, timeout=60):
- """Waits for an INV message and checks that the first inv object in the message was as expected."""
- @@ -1604,11 +1620,11 @@ class NodeConnCB(object):
- test_function = lambda: self.last_message.get("inv") and \
- self.last_message["inv"].inv[0].type == expected_inv[0].type and \
- self.last_message["inv"].inv[0].hash == expected_inv[0].hash
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert wait_until(test_function, timeout=timeout)
- def wait_for_verack(self, timeout=60):
- test_function = lambda: self.message_count["verack"]
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert wait_until(test_function, timeout=timeout)
- # Message sending helper functions
- @@ -1626,8 +1642,9 @@ class NodeConnCB(object):
- def sync_with_ping(self, timeout=60):
- self.send_message(msg_ping(nonce=self.ping_counter))
- test_function = lambda: self.last_message.get("pong") and self.last_message["pong"].nonce == self.ping_counter
- - wait_until(test_function, timeout=timeout, lock=mininode_lock)
- + assert wait_until(test_function, timeout=timeout)
- self.ping_counter += 1
- + return True
- # The actual NodeConn class
- # This class provides an interface for a p2p connection to a specified node
- @@ -1688,7 +1705,7 @@ class NodeConn(asyncore.dispatcher):
- vt.addrFrom.port = 0
- self.send_message(vt, True)
- - logger.info('Connecting to Litecoin Node: %s:%d' % (self.dstaddr, self.dstport))
- + logger.info('Connecting to LitecoinCash Node: %s:%d' % (self.dstaddr, self.dstport))
- try:
- self.connect((dstaddr, dstport))
- @@ -1714,10 +1731,13 @@ class NodeConn(asyncore.dispatcher):
- self.cb.on_close(self)
- def handle_read(self):
- - t = self.recv(8192)
- - if len(t) > 0:
- - self.recvbuf += t
- - self.got_data()
- + try:
- + t = self.recv(8192)
- + if len(t) > 0:
- + self.recvbuf += t
- + self.got_data()
- + except:
- + pass
- def readable(self):
- return True
- @@ -1783,10 +1803,8 @@ class NodeConn(asyncore.dispatcher):
- self.got_message(t)
- else:
- logger.warning("Received unknown command from %s:%d: '%s' %s" % (self.dstaddr, self.dstport, command, repr(msg)))
- - raise ValueError("Unknown command: '%s'" % (command))
- except Exception as e:
- logger.exception('got_data:', repr(e))
- - raise
- def send_message(self, message, pushbuf=False):
- if self.state != "connected" and not pushbuf:
- @@ -1842,7 +1860,6 @@ class NetworkThread(Thread):
- disconnected.append(obj)
- [ obj.handle_close() for obj in disconnected ]
- asyncore.loop(0.1, use_poll=True, map=mininode_socket_map, count=1)
- - logger.debug("Network thread closing")
- # An exception we can raise if we detect a potential disconnect
- diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py
- old mode 100755
- new mode 100644
- index 14c7bb5..90b5ba7
- --- a/test/functional/test_framework/test_framework.py
- +++ b/test/functional/test_framework/test_framework.py
- @@ -5,12 +5,15 @@
- """Base class for RPC testing."""
- from collections import deque
- +import errno
- from enum import Enum
- +import http.client
- import logging
- import optparse
- import os
- import pdb
- import shutil
- +import subprocess
- import sys
- import tempfile
- import time
- @@ -18,7 +21,6 @@ import traceback
- from .authproxy import JSONRPCException
- from . import coverage
- -from .test_node import TestNode
- from .util import (
- MAX_NODES,
- PortSeed,
- @@ -26,9 +28,12 @@ from .util import (
- check_json_precision,
- connect_nodes_bi,
- disconnect_nodes,
- + get_rpc_proxy,
- initialize_datadir,
- + get_datadir_path,
- log_filename,
- p2p_port,
- + rpc_url,
- set_node_times,
- sync_blocks,
- sync_mempools,
- @@ -43,41 +48,71 @@ TEST_EXIT_PASSED = 0
- TEST_EXIT_FAILED = 1
- TEST_EXIT_SKIPPED = 77
- -class BitcoinTestFramework(object):
- - """Base class for a litecoin test script.
- +BITCOIND_PROC_WAIT_TIMEOUT = 60
- - Individual litecoin test scripts should subclass this class and override the set_test_params() and run_test() methods.
- +class BitcoinTestFramework(object):
- + """Base class for a bitcoin test script.
- - Individual tests can also override the following methods to customize the test setup:
- + Individual bitcoin test scripts should subclass this class and override the following methods:
- + - __init__()
- - add_options()
- - setup_chain()
- - setup_network()
- - - setup_nodes()
- + - run_test()
- - The __init__() and main() methods should not be overridden.
- + The main() method should not be overridden.
- This class also contains various public and private helper methods."""
- + # Methods to override in subclass test scripts.
- def __init__(self):
- - """Sets test framework defaults. Do not override this method. Instead, override the set_test_params() method"""
- + self.num_nodes = 4
- self.setup_clean_chain = False
- self.nodes = []
- + self.bitcoind_processes = {}
- self.mocktime = 0
- - self.set_test_params()
- - assert hasattr(self, "num_nodes"), "Test must set self.num_nodes in set_test_params()"
- + def add_options(self, parser):
- + pass
- +
- + def setup_chain(self):
- + self.log.info("Initializing test directory " + self.options.tmpdir)
- + if self.setup_clean_chain:
- + self._initialize_chain_clean(self.options.tmpdir, self.num_nodes)
- + else:
- + self._initialize_chain(self.options.tmpdir, self.num_nodes, self.options.cachedir)
- +
- + def setup_network(self):
- + self.setup_nodes()
- +
- + # Connect the nodes as a "chain". This allows us
- + # to split the network between nodes 1 and 2 to get
- + # two halves that can work on competing chains.
- + for i in range(self.num_nodes - 1):
- + connect_nodes_bi(self.nodes, i, i + 1)
- + self.sync_all()
- +
- + def setup_nodes(self):
- + extra_args = None
- + if hasattr(self, "extra_args"):
- + extra_args = self.extra_args
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args)
- +
- + def run_test(self):
- + raise NotImplementedError
- +
- + # Main function. This should not be overridden by the subclass test scripts.
- def main(self):
- - """Main function. This should not be overridden by the subclass test scripts."""
- parser = optparse.OptionParser(usage="%prog [options]")
- parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true",
- - help="Leave litecoinds and test.* datadir on exit or error")
- + help="Leave litecoincashds and test.* datadir on exit or error")
- parser.add_option("--noshutdown", dest="noshutdown", default=False, action="store_true",
- - help="Don't stop litecoinds after the test execution")
- + help="Don't stop litecoincashds after the test execution")
- parser.add_option("--srcdir", dest="srcdir", default=os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../../../src"),
- - help="Source directory containing litecoind/litecoin-cli (default: %default)")
- + help="Source directory containing litecoincashd/litecoincash-cli (default: %default)")
- parser.add_option("--cachedir", dest="cachedir", default=os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../../cache"),
- help="Directory for caching pregenerated datadirs")
- parser.add_option("--tmpdir", dest="tmpdir", help="Root directory for datadirs")
- @@ -102,11 +137,8 @@ class BitcoinTestFramework(object):
- check_json_precision()
- - self.options.cachedir = os.path.abspath(self.options.cachedir)
- -
- # Set up temp directory and start logging
- if self.options.tmpdir:
- - self.options.tmpdir = os.path.abspath(self.options.tmpdir)
- os.makedirs(self.options.tmpdir, exist_ok=False)
- else:
- self.options.tmpdir = tempfile.mkdtemp(prefix="test")
- @@ -142,7 +174,7 @@ class BitcoinTestFramework(object):
- if self.nodes:
- self.stop_nodes()
- else:
- - self.log.info("Note: litecoinds were not stopped and may still be running")
- + self.log.info("Note: litecoincashds were not stopped and may still be running")
- if not self.options.nocleanup and not self.options.noshutdown and success != TestStatus.FAILED:
- self.log.info("Cleaning up")
- @@ -176,115 +208,77 @@ class BitcoinTestFramework(object):
- logging.shutdown()
- sys.exit(TEST_EXIT_FAILED)
- - # Methods to override in subclass test scripts.
- - def set_test_params(self):
- - """Tests must this method to change default values for number of nodes, topology, etc"""
- - raise NotImplementedError
- -
- - def add_options(self, parser):
- - """Override this method to add command-line options to the test"""
- - pass
- -
- - def setup_chain(self):
- - """Override this method to customize blockchain setup"""
- - self.log.info("Initializing test directory " + self.options.tmpdir)
- - if self.setup_clean_chain:
- - self._initialize_chain_clean()
- - else:
- - self._initialize_chain()
- -
- - def setup_network(self):
- - """Override this method to customize test network topology"""
- - self.setup_nodes()
- + # Public helper methods. These can be accessed by the subclass test scripts.
- - # Connect the nodes as a "chain". This allows us
- - # to split the network between nodes 1 and 2 to get
- - # two halves that can work on competing chains.
- - for i in range(self.num_nodes - 1):
- - connect_nodes_bi(self.nodes, i, i + 1)
- - self.sync_all()
- + def start_node(self, i, dirname, extra_args=None, rpchost=None, timewait=None, binary=None, stderr=None):
- + """Start a bitcoind and return RPC connection to it"""
- - def setup_nodes(self):
- - """Override this method to customize test node setup"""
- - extra_args = None
- - if hasattr(self, "extra_args"):
- - extra_args = self.extra_args
- - self.add_nodes(self.num_nodes, extra_args)
- - self.start_nodes()
- + datadir = os.path.join(dirname, "node" + str(i))
- + if binary is None:
- + binary = os.getenv("LITECOINCASHD", "litecoincashd")
- + args = [binary, "-datadir=" + datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-logtimemicros", "-debug", "-debugexclude=libevent", "-debugexclude=leveldb", "-mocktime=" + str(self.mocktime), "-uacomment=testnode%d" % i]
- + if extra_args is not None:
- + args.extend(extra_args)
- + self.bitcoind_processes[i] = subprocess.Popen(args, stderr=stderr)
- + self.log.debug("initialize_chain: litecoincashd started, waiting for RPC to come up")
- + self._wait_for_bitcoind_start(self.bitcoind_processes[i], datadir, i, rpchost)
- + self.log.debug("initialize_chain: RPC successfully started")
- + proxy = get_rpc_proxy(rpc_url(datadir, i, rpchost), i, timeout=timewait)
- - def run_test(self):
- - """Tests must override this method to define test logic"""
- - raise NotImplementedError
- + if self.options.coveragedir:
- + coverage.write_all_rpc_commands(self.options.coveragedir, proxy)
- - # Public helper methods. These can be accessed by the subclass test scripts.
- + return proxy
- - def add_nodes(self, num_nodes, extra_args=None, rpchost=None, timewait=None, binary=None):
- - """Instantiate TestNode objects"""
- + def start_nodes(self, num_nodes, dirname, extra_args=None, rpchost=None, timewait=None, binary=None):
- + """Start multiple bitcoinds, return RPC connections to them"""
- if extra_args is None:
- - extra_args = [[]] * num_nodes
- + extra_args = [None] * num_nodes
- if binary is None:
- binary = [None] * num_nodes
- assert_equal(len(extra_args), num_nodes)
- assert_equal(len(binary), num_nodes)
- - for i in range(num_nodes):
- - self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, timewait=timewait, binary=binary[i], stderr=None, mocktime=self.mocktime, coverage_dir=self.options.coveragedir))
- -
- - def start_node(self, i, extra_args=None, stderr=None):
- - """Start a litecoind"""
- -
- - node = self.nodes[i]
- -
- - node.start(extra_args, stderr)
- - node.wait_for_rpc_connection()
- -
- - if self.options.coveragedir is not None:
- - coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc)
- -
- - def start_nodes(self, extra_args=None):
- - """Start multiple litecoinds"""
- -
- - if extra_args is None:
- - extra_args = [None] * self.num_nodes
- - assert_equal(len(extra_args), self.num_nodes)
- + rpcs = []
- try:
- - for i, node in enumerate(self.nodes):
- - node.start(extra_args[i])
- - for node in self.nodes:
- - node.wait_for_rpc_connection()
- + for i in range(num_nodes):
- + rpcs.append(self.start_node(i, dirname, extra_args[i], rpchost, timewait=timewait, binary=binary[i]))
- except:
- # If one node failed to start, stop the others
- + # TODO: abusing self.nodes in this way is a little hacky.
- + # Eventually we should do a better job of tracking nodes
- + self.nodes.extend(rpcs)
- self.stop_nodes()
- + self.nodes = []
- raise
- -
- - if self.options.coveragedir is not None:
- - for node in self.nodes:
- - coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc)
- + return rpcs
- def stop_node(self, i):
- """Stop a bitcoind test node"""
- - self.nodes[i].stop_node()
- - self.nodes[i].wait_until_stopped()
- +
- + self.log.debug("Stopping node %d" % i)
- + try:
- + self.nodes[i].stop()
- + except http.client.CannotSendRequest as e:
- + self.log.exception("Unable to stop node")
- + return_code = self.bitcoind_processes[i].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT)
- + del self.bitcoind_processes[i]
- + assert_equal(return_code, 0)
- def stop_nodes(self):
- """Stop multiple bitcoind test nodes"""
- - for node in self.nodes:
- - # Issue RPC to stop nodes
- - node.stop_node()
- - for node in self.nodes:
- - # Wait for nodes to stop
- - node.wait_until_stopped()
- + for i in range(len(self.nodes)):
- + self.stop_node(i)
- + assert not self.bitcoind_processes.values() # All connections must be gone now
- - def assert_start_raises_init_error(self, i, extra_args=None, expected_msg=None):
- + def assert_start_raises_init_error(self, i, dirname, extra_args=None, expected_msg=None):
- with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:
- try:
- - self.start_node(i, extra_args, stderr=log_stderr)
- + self.start_node(i, dirname, extra_args, stderr=log_stderr)
- self.stop_node(i)
- except Exception as e:
- - assert 'litecoind exited' in str(e) # node must have shutdown
- - self.nodes[i].running = False
- - self.nodes[i].process = None
- + assert 'litecoincashd exited' in str(e) # node must have shutdown
- if expected_msg is not None:
- log_stderr.seek(0)
- stderr = log_stderr.read().decode('utf-8')
- @@ -292,13 +286,13 @@ class BitcoinTestFramework(object):
- raise AssertionError("Expected error \"" + expected_msg + "\" not found in:\n" + stderr)
- else:
- if expected_msg is None:
- - assert_msg = "litecoind should have exited with an error"
- + assert_msg = "litecoincashd should have exited with an error"
- else:
- - assert_msg = "litecoind should have exited with expected error " + expected_msg
- + assert_msg = "litecoincashd should have exited with expected error " + expected_msg
- raise AssertionError(assert_msg)
- def wait_for_node_exit(self, i, timeout):
- - self.nodes[i].process.wait(timeout)
- + self.bitcoind_processes[i].wait(timeout)
- def split_network(self):
- """
- @@ -362,22 +356,22 @@ class BitcoinTestFramework(object):
- self.log.addHandler(ch)
- if self.options.trace_rpc:
- - rpc_logger = logging.getLogger("LitecoinRPC")
- + rpc_logger = logging.getLogger("BitcoinRPC")
- rpc_logger.setLevel(logging.DEBUG)
- rpc_handler = logging.StreamHandler(sys.stdout)
- rpc_handler.setLevel(logging.DEBUG)
- rpc_logger.addHandler(rpc_handler)
- - def _initialize_chain(self):
- + def _initialize_chain(self, test_dir, num_nodes, cachedir):
- """Initialize a pre-mined blockchain for use by the test.
- Create a cache of a 200-block-long chain (with wallet) for MAX_NODES
- Afterward, create num_nodes copies from the cache."""
- - assert self.num_nodes <= MAX_NODES
- + assert num_nodes <= MAX_NODES
- create_cache = False
- for i in range(MAX_NODES):
- - if not os.path.isdir(os.path.join(self.options.cachedir, 'node' + str(i))):
- + if not os.path.isdir(os.path.join(cachedir, 'node' + str(i))):
- create_cache = True
- break
- @@ -386,22 +380,27 @@ class BitcoinTestFramework(object):
- # find and delete old cache directories if any exist
- for i in range(MAX_NODES):
- - if os.path.isdir(os.path.join(self.options.cachedir, "node" + str(i))):
- - shutil.rmtree(os.path.join(self.options.cachedir, "node" + str(i)))
- + if os.path.isdir(os.path.join(cachedir, "node" + str(i))):
- + shutil.rmtree(os.path.join(cachedir, "node" + str(i)))
- # Create cache directories, run bitcoinds:
- for i in range(MAX_NODES):
- - datadir = initialize_datadir(self.options.cachedir, i)
- - args = [os.getenv("LITECOIND", "litecoind"), "-server", "-keypool=1", "-datadir=" + datadir, "-discover=0"]
- + datadir = initialize_datadir(cachedir, i)
- + args = [os.getenv("LITECOINCASHD", "litecoincashd"), "-server", "-keypool=1", "-datadir=" + datadir, "-discover=0"]
- if i > 0:
- args.append("-connect=127.0.0.1:" + str(p2p_port(0)))
- - self.nodes.append(TestNode(i, self.options.cachedir, extra_args=[], rpchost=None, timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None))
- - self.nodes[i].args = args
- - self.start_node(i)
- + self.bitcoind_processes[i] = subprocess.Popen(args)
- + self.log.debug("initialize_chain: litecoincashd started, waiting for RPC to come up")
- + self._wait_for_bitcoind_start(self.bitcoind_processes[i], datadir, i)
- + self.log.debug("initialize_chain: RPC successfully started")
- - # Wait for RPC connections to be ready
- - for node in self.nodes:
- - node.wait_for_rpc_connection()
- + self.nodes = []
- + for i in range(MAX_NODES):
- + try:
- + self.nodes.append(get_rpc_proxy(rpc_url(get_datadir_path(cachedir, i), i), i))
- + except:
- + self.log.exception("Error connecting to node %d" % i)
- + sys.exit(1)
- # Create a 200-block-long chain; each of the 4 first nodes
- # gets 25 mature blocks and 25 immature.
- @@ -427,53 +426,78 @@ class BitcoinTestFramework(object):
- self.nodes = []
- self.disable_mocktime()
- for i in range(MAX_NODES):
- - os.remove(log_filename(self.options.cachedir, i, "debug.log"))
- - os.remove(log_filename(self.options.cachedir, i, "db.log"))
- - os.remove(log_filename(self.options.cachedir, i, "peers.dat"))
- - os.remove(log_filename(self.options.cachedir, i, "fee_estimates.dat"))
- -
- - for i in range(self.num_nodes):
- - from_dir = os.path.join(self.options.cachedir, "node" + str(i))
- - to_dir = os.path.join(self.options.tmpdir, "node" + str(i))
- + os.remove(log_filename(cachedir, i, "debug.log"))
- + os.remove(log_filename(cachedir, i, "db.log"))
- + os.remove(log_filename(cachedir, i, "peers.dat"))
- + os.remove(log_filename(cachedir, i, "fee_estimates.dat"))
- +
- + for i in range(num_nodes):
- + from_dir = os.path.join(cachedir, "node" + str(i))
- + to_dir = os.path.join(test_dir, "node" + str(i))
- shutil.copytree(from_dir, to_dir)
- - initialize_datadir(self.options.tmpdir, i) # Overwrite port/rpcport in bitcoin.conf
- + initialize_datadir(test_dir, i) # Overwrite port/rpcport in bitcoin.conf
- - def _initialize_chain_clean(self):
- + def _initialize_chain_clean(self, test_dir, num_nodes):
- """Initialize empty blockchain for use by the test.
- Create an empty blockchain and num_nodes wallets.
- Useful if a test case wants complete control over initialization."""
- - for i in range(self.num_nodes):
- - initialize_datadir(self.options.tmpdir, i)
- + for i in range(num_nodes):
- + initialize_datadir(test_dir, i)
- +
- + def _wait_for_bitcoind_start(self, process, datadir, i, rpchost=None):
- + """Wait for bitcoind to start.
- +
- + This means that RPC is accessible and fully initialized.
- + Raise an exception if bitcoind exits during initialization."""
- + while True:
- + if process.poll() is not None:
- + raise Exception('litecoincashd exited with status %i during initialization' % process.returncode)
- + try:
- + # Check if .cookie file to be created
- + rpc = get_rpc_proxy(rpc_url(datadir, i, rpchost), i, coveragedir=self.options.coveragedir)
- + rpc.getblockcount()
- + break # break out of loop on success
- + except IOError as e:
- + if e.errno != errno.ECONNREFUSED: # Port not yet open?
- + raise # unknown IO error
- + except JSONRPCException as e: # Initialization phase
- + if e.error['code'] != -28: # RPC in warmup?
- + raise # unknown JSON RPC exception
- + except ValueError as e: # cookie file not found and no rpcuser or rpcassword. bitcoind still starting
- + if "No RPC credentials" not in str(e):
- + raise
- + time.sleep(0.25)
- class ComparisonTestFramework(BitcoinTestFramework):
- """Test framework for doing p2p comparison testing
- - Sets up some litecoind binaries:
- + Sets up some bitcoind binaries:
- - 1 binary: test binary
- - 2 binaries: 1 test binary, 1 ref binary
- - n>2 binaries: 1 test binary, n-1 ref binaries"""
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- self.setup_clean_chain = True
- def add_options(self, parser):
- parser.add_option("--testbinary", dest="testbinary",
- - default=os.getenv("LITECOIND", "litecoind"),
- - help="litecoind binary to test")
- + default=os.getenv("LITECOINCASHD", "litecoincashd"),
- + help="litecoincashd binary to test")
- parser.add_option("--refbinary", dest="refbinary",
- - default=os.getenv("LITECOIND", "litecoind"),
- - help="litecoind binary to use for reference nodes (if any)")
- + default=os.getenv("LITECOINCASHD", "litecoincashd"),
- + help="litecoincashd binary to use for reference nodes (if any)")
- def setup_network(self):
- - extra_args = [['-whitelist=127.0.0.1']] * self.num_nodes
- + extra_args = [['-whitelist=127.0.0.1']]*self.num_nodes
- if hasattr(self, "extra_args"):
- extra_args = self.extra_args
- - self.add_nodes(self.num_nodes, extra_args,
- - binary=[self.options.testbinary] +
- - [self.options.refbinary] * (self.num_nodes - 1))
- - self.start_nodes()
- + self.nodes = self.start_nodes(
- + self.num_nodes, self.options.tmpdir, extra_args,
- + binary=[self.options.testbinary] +
- + [self.options.refbinary] * (self.num_nodes - 1))
- class SkipTest(Exception):
- """This exception is raised to skip a test"""
- diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py
- deleted file mode 100755
- index 2f9a201..0000000
- --- a/test/functional/test_framework/test_node.py
- +++ /dev/null
- @@ -1,190 +0,0 @@
- -#!/usr/bin/env python3
- -# Copyright (c) 2017 The Bitcoin Core developers
- -# Distributed under the MIT software license, see the accompanying
- -# file COPYING or http://www.opensource.org/licenses/mit-license.php.
- -"""Class for litecoind node under test"""
- -
- -import decimal
- -import errno
- -import http.client
- -import json
- -import logging
- -import os
- -import subprocess
- -import time
- -
- -from .util import (
- - assert_equal,
- - get_rpc_proxy,
- - rpc_url,
- - wait_until,
- -)
- -from .authproxy import JSONRPCException
- -
- -BITCOIND_PROC_WAIT_TIMEOUT = 60
- -
- -class TestNode():
- - """A class for representing a litecoind node under test.
- -
- - This class contains:
- -
- - - state about the node (whether it's running, etc)
- - - a Python subprocess.Popen object representing the running process
- - - an RPC connection to the node
- -
- - To make things easier for the test writer, a bit of magic is happening under the covers.
- - Any unrecognised messages will be dispatched to the RPC connection."""
- -
- - def __init__(self, i, dirname, extra_args, rpchost, timewait, binary, stderr, mocktime, coverage_dir):
- - self.index = i
- - self.datadir = os.path.join(dirname, "node" + str(i))
- - self.rpchost = rpchost
- - if timewait:
- - self.rpc_timeout = timewait
- - else:
- - # Wait for up to 60 seconds for the RPC server to respond
- - self.rpc_timeout = 60
- - if binary is None:
- - self.binary = os.getenv("LITECOIND", "litecoind")
- - else:
- - self.binary = binary
- - self.stderr = stderr
- - self.coverage_dir = coverage_dir
- - # Most callers will just need to add extra args to the standard list below. For those callers that need more flexibity, they can just set the args property directly.
- - self.extra_args = extra_args
- - self.args = [self.binary, "-datadir=" + self.datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-logtimemicros", "-debug", "-debugexclude=libevent", "-debugexclude=leveldb", "-mocktime=" + str(mocktime), "-uacomment=testnode%d" % i]
- -
- - self.cli = TestNodeCLI(os.getenv("LITECOINCLI", "litecoin-cli"), self.datadir)
- -
- - self.running = False
- - self.process = None
- - self.rpc_connected = False
- - self.rpc = None
- - self.url = None
- - self.log = logging.getLogger('TestFramework.node%d' % i)
- -
- - def __getattr__(self, *args, **kwargs):
- - """Dispatches any unrecognised messages to the RPC connection."""
- - assert self.rpc_connected and self.rpc is not None, "Error: no RPC connection"
- - return self.rpc.__getattr__(*args, **kwargs)
- -
- - def start(self, extra_args=None, stderr=None):
- - """Start the node."""
- - if extra_args is None:
- - extra_args = self.extra_args
- - if stderr is None:
- - stderr = self.stderr
- - self.process = subprocess.Popen(self.args + extra_args, stderr=stderr)
- - self.running = True
- - self.log.debug("litecoind started, waiting for RPC to come up")
- -
- - def wait_for_rpc_connection(self):
- - """Sets up an RPC connection to the litecoind process. Returns False if unable to connect."""
- - # Poll at a rate of four times per second
- - poll_per_s = 4
- - for _ in range(poll_per_s * self.rpc_timeout):
- - assert self.process.poll() is None, "litecoind exited with status %i during initialization" % self.process.returncode
- - try:
- - self.rpc = get_rpc_proxy(rpc_url(self.datadir, self.index, self.rpchost), self.index, timeout=self.rpc_timeout, coveragedir=self.coverage_dir)
- - self.rpc.getblockcount()
- - # If the call to getblockcount() succeeds then the RPC connection is up
- - self.rpc_connected = True
- - self.url = self.rpc.url
- - self.log.debug("RPC successfully started")
- - return
- - except IOError as e:
- - if e.errno != errno.ECONNREFUSED: # Port not yet open?
- - raise # unknown IO error
- - except JSONRPCException as e: # Initialization phase
- - if e.error['code'] != -28: # RPC in warmup?
- - raise # unknown JSON RPC exception
- - except ValueError as e: # cookie file not found and no rpcuser or rpcassword. bitcoind still starting
- - if "No RPC credentials" not in str(e):
- - raise
- - time.sleep(1.0 / poll_per_s)
- - raise AssertionError("Unable to connect to litecoind")
- -
- - def get_wallet_rpc(self, wallet_name):
- - assert self.rpc_connected
- - assert self.rpc
- - wallet_path = "wallet/%s" % wallet_name
- - return self.rpc / wallet_path
- -
- - def stop_node(self):
- - """Stop the node."""
- - if not self.running:
- - return
- - self.log.debug("Stopping node")
- - try:
- - self.stop()
- - except http.client.CannotSendRequest:
- - self.log.exception("Unable to stop node.")
- -
- - def is_node_stopped(self):
- - """Checks whether the node has stopped.
- -
- - Returns True if the node has stopped. False otherwise.
- - This method is responsible for freeing resources (self.process)."""
- - if not self.running:
- - return True
- - return_code = self.process.poll()
- - if return_code is None:
- - return False
- -
- - # process has stopped. Assert that it didn't return an error code.
- - assert_equal(return_code, 0)
- - self.running = False
- - self.process = None
- - self.rpc_connected = False
- - self.rpc = None
- - self.log.debug("Node stopped")
- - return True
- -
- - def wait_until_stopped(self, timeout=BITCOIND_PROC_WAIT_TIMEOUT):
- - wait_until(self.is_node_stopped, timeout=timeout)
- -
- - def node_encrypt_wallet(self, passphrase):
- - """"Encrypts the wallet.
- -
- - This causes litecoind to shutdown, so this method takes
- - care of cleaning up resources."""
- - self.encryptwallet(passphrase)
- - self.wait_until_stopped()
- -
- -class TestNodeCLI():
- - """Interface to litecoin-cli for an individual node"""
- -
- - def __init__(self, binary, datadir):
- - self.args = []
- - self.binary = binary
- - self.datadir = datadir
- - self.input = None
- -
- - def __call__(self, *args, input=None):
- - # TestNodeCLI is callable with litecoin-cli command-line args
- - self.args = [str(arg) for arg in args]
- - self.input = input
- - return self
- -
- - def __getattr__(self, command):
- - def dispatcher(*args, **kwargs):
- - return self.send_cli(command, *args, **kwargs)
- - return dispatcher
- -
- - def send_cli(self, command, *args, **kwargs):
- - """Run litecoin-cli command. Deserializes returned string as python object."""
- -
- - pos_args = [str(arg) for arg in args]
- - named_args = [str(key) + "=" + str(value) for (key, value) in kwargs.items()]
- - assert not (pos_args and named_args), "Cannot use positional arguments and named arguments in the same litecoin-cli call"
- - p_args = [self.binary, "-datadir=" + self.datadir] + self.args
- - if named_args:
- - p_args += ["-named"]
- - p_args += [command] + pos_args + named_args
- - process = subprocess.Popen(p_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
- - cli_stdout, cli_stderr = process.communicate(input=self.input)
- - returncode = process.poll()
- - if returncode:
- - # Ignore cli_stdout, raise with cli_stderr
- - raise subprocess.CalledProcessError(returncode, self.binary, output=cli_stderr)
- - return json.loads(cli_stdout, parse_float=decimal.Decimal)
- diff --git a/test/functional/test_framework/util.py b/test/functional/test_framework/util.py
- index 23938c9..f79178b 100644
- --- a/test/functional/test_framework/util.py
- +++ b/test/functional/test_framework/util.py
- @@ -7,13 +7,11 @@
- from base64 import b64encode
- from binascii import hexlify, unhexlify
- from decimal import Decimal, ROUND_DOWN
- -import hashlib
- import json
- import logging
- import os
- import random
- import re
- -from subprocess import CalledProcessError
- import time
- from . import coverage
- @@ -51,8 +49,6 @@ def assert_raises(exc, fun, *args, **kwds):
- def assert_raises_message(exc, message, fun, *args, **kwds):
- try:
- fun(*args, **kwds)
- - except JSONRPCException:
- - raise AssertionError("Use assert_raises_rpc_error() to test RPC failures")
- except exc as e:
- if message is not None and message not in e.error['message']:
- raise AssertionError("Expected substring not found:" + e.error['message'])
- @@ -61,53 +57,22 @@ def assert_raises_message(exc, message, fun, *args, **kwds):
- else:
- raise AssertionError("No exception raised")
- -def assert_raises_process_error(returncode, output, fun, *args, **kwds):
- - """Execute a process and asserts the process return code and output.
- -
- - Calls function `fun` with arguments `args` and `kwds`. Catches a CalledProcessError
- - and verifies that the return code and output are as expected. Throws AssertionError if
- - no CalledProcessError was raised or if the return code and output are not as expected.
- -
- - Args:
- - returncode (int): the process return code.
- - output (string): [a substring of] the process output.
- - fun (function): the function to call. This should execute a process.
- - args*: positional arguments for the function.
- - kwds**: named arguments for the function.
- - """
- - try:
- - fun(*args, **kwds)
- - except CalledProcessError as e:
- - if returncode != e.returncode:
- - raise AssertionError("Unexpected returncode %i" % e.returncode)
- - if output not in e.output:
- - raise AssertionError("Expected substring not found:" + e.output)
- - else:
- - raise AssertionError("No exception raised")
- -
- -def assert_raises_rpc_error(code, message, fun, *args, **kwds):
- +def assert_raises_jsonrpc(code, message, fun, *args, **kwds):
- """Run an RPC and verify that a specific JSONRPC exception code and message is raised.
- Calls function `fun` with arguments `args` and `kwds`. Catches a JSONRPCException
- and verifies that the error code and message are as expected. Throws AssertionError if
- - no JSONRPCException was raised or if the error code/message are not as expected.
- + no JSONRPCException was returned or if the error code/message are not as expected.
- Args:
- code (int), optional: the error code returned by the RPC call (defined
- in src/rpc/protocol.h). Set to None if checking the error code is not required.
- message (string), optional: [a substring of] the error string returned by the
- - RPC call. Set to None if checking the error string is not required.
- + RPC call. Set to None if checking the error string is not required
- fun (function): the function to call. This should be the name of an RPC.
- args*: positional arguments for the function.
- kwds**: named arguments for the function.
- """
- - assert try_rpc(code, message, fun, *args, **kwds), "No exception raised"
- -
- -def try_rpc(code, message, fun, *args, **kwds):
- - """Tries to run an rpc command.
- -
- - Test against error code and message if the rpc fails.
- - Returns whether a JSONRPCException was raised."""
- try:
- fun(*args, **kwds)
- except JSONRPCException as e:
- @@ -116,11 +81,10 @@ def try_rpc(code, message, fun, *args, **kwds):
- raise AssertionError("Unexpected JSONRPC error code %i" % e.error["code"])
- if (message is not None) and (message not in e.error['message']):
- raise AssertionError("Expected substring not found:" + e.error['message'])
- - return True
- except Exception as e:
- raise AssertionError("Unexpected exception raised: " + type(e).__name__)
- else:
- - return False
- + raise AssertionError("No exception raised")
- def assert_is_hex_string(string):
- try:
- @@ -184,13 +148,6 @@ def count_bytes(hex_string):
- def bytes_to_hex_str(byte_str):
- return hexlify(byte_str).decode('ascii')
- -def hash256(byte_str):
- - sha256 = hashlib.sha256()
- - sha256.update(byte_str)
- - sha256d = hashlib.sha256()
- - sha256d.update(sha256.digest())
- - return sha256d.digest()[::-1]
- -
- def hex_str_to_bytes(hex_str):
- return unhexlify(hex_str.encode('ascii'))
- @@ -200,28 +157,6 @@ def str_to_b64str(string):
- def satoshi_round(amount):
- return Decimal(amount).quantize(Decimal('0.00000001'), rounding=ROUND_DOWN)
- -def wait_until(predicate, *, attempts=float('inf'), timeout=float('inf'), lock=None):
- - if attempts == float('inf') and timeout == float('inf'):
- - timeout = 60
- - attempt = 0
- - timeout += time.time()
- -
- - while attempt < attempts and time.time() < timeout:
- - if lock:
- - with lock:
- - if predicate():
- - return
- - else:
- - if predicate():
- - return
- - attempt += 1
- - time.sleep(0.05)
- -
- - # Print the cause of the timeout
- - assert_greater_than(attempts, attempt)
- - assert_greater_than(timeout, time.time())
- - raise RuntimeError('Unreachable')
- -
- # RPC/P2P connection constants and functions
- ############################################
- @@ -269,7 +204,7 @@ def rpc_port(n):
- return PORT_MIN + PORT_RANGE + n + (MAX_NODES * PortSeed.n) % (PORT_RANGE - 1 - MAX_NODES)
- def rpc_url(datadir, i, rpchost=None):
- - rpc_u, rpc_p = get_auth_cookie(datadir)
- + rpc_u, rpc_p = get_auth_cookie(datadir, i)
- host = '127.0.0.1'
- port = rpc_port(i)
- if rpchost:
- @@ -287,7 +222,7 @@ def initialize_datadir(dirname, n):
- datadir = os.path.join(dirname, "node" + str(n))
- if not os.path.isdir(datadir):
- os.makedirs(datadir)
- - with open(os.path.join(datadir, "litecoin.conf"), 'w', encoding='utf8') as f:
- + with open(os.path.join(datadir, "litecoincash.conf"), 'w', encoding='utf8') as f:
- f.write("regtest=1\n")
- f.write("port=" + str(p2p_port(n)) + "\n")
- f.write("rpcport=" + str(rpc_port(n)) + "\n")
- @@ -297,11 +232,11 @@ def initialize_datadir(dirname, n):
- def get_datadir_path(dirname, n):
- return os.path.join(dirname, "node" + str(n))
- -def get_auth_cookie(datadir):
- +def get_auth_cookie(datadir, n):
- user = None
- password = None
- - if os.path.isfile(os.path.join(datadir, "litecoin.conf")):
- - with open(os.path.join(datadir, "litecoin.conf"), 'r', encoding='utf8') as f:
- + if os.path.isfile(os.path.join(datadir, "litecoincash.conf")):
- + with open(os.path.join(datadir, "litecoincash.conf"), 'r', encoding='utf8') as f:
- for line in f:
- if line.startswith("rpcuser="):
- assert user is None # Ensure that there is only one rpcuser line
- diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py
- old mode 100755
- new mode 100644
- index f03b2da..a22f1e7
- --- a/test/functional/test_runner.py
- +++ b/test/functional/test_runner.py
- @@ -81,7 +81,6 @@ BASE_SCRIPTS= [
- # vv Tests less than 30s vv
- 'keypool-topup.py',
- 'zmq_test.py',
- - 'bitcoin_cli.py',
- 'mempool_resurrect_test.py',
- 'txn_doublespend.py --mineblock',
- 'txn_clone.py',
- @@ -122,8 +121,6 @@ BASE_SCRIPTS= [
- 'bip65-cltv-p2p.py',
- 'uptime.py',
- 'resendwallettransactions.py',
- - 'minchainwork.py',
- - 'p2p-acceptblock.py',
- ]
- EXTENDED_SCRIPTS = [
- @@ -151,6 +148,7 @@ EXTENDED_SCRIPTS = [
- 'txn_clone.py --mineblock',
- 'forknotify.py',
- 'invalidateblock.py',
- + 'p2p-acceptblock.py',
- 'replace-by-fee.py',
- ]
- @@ -199,7 +197,7 @@ def main():
- logging.basicConfig(format='%(message)s', level=logging_level)
- # Create base test directory
- - tmpdir = "%s/litecoin_test_runner_%s" % (args.tmpdirprefix, datetime.datetime.now().strftime("%Y%m%d_%H%M%S"))
- + tmpdir = "%s/litecoincash_test_runner_%s" % (args.tmpdirprefix, datetime.datetime.now().strftime("%Y%m%d_%H%M%S"))
- os.makedirs(tmpdir)
- logging.debug("Temporary test directory at %s" % tmpdir)
- @@ -215,7 +213,7 @@ def main():
- sys.exit(0)
- if not (enable_wallet and enable_utils and enable_bitcoind):
- - print("No functional tests to run. Wallet, utils, and litecoind must all be enabled")
- + print("No functional tests to run. Wallet, utils, and litecoincashd must all be enabled")
- print("Rerun `configure` with -enable-wallet, -with-utils and -with-daemon and rerun make")
- sys.exit(0)
- @@ -269,8 +267,8 @@ def main():
- def run_tests(test_list, src_dir, build_dir, exeext, tmpdir, jobs=1, enable_coverage=False, args=[]):
- # Warn if bitcoind is already running (unix only)
- try:
- - if subprocess.check_output(["pidof", "litecoind"]) is not None:
- - print("%sWARNING!%s There is already a litecoind process running on this system. Tests may fail unexpectedly due to resource contention!" % (BOLD[1], BOLD[0]))
- + if subprocess.check_output(["pidof", "litecoincashd"]) is not None:
- + print("%sWARNING!%s There is already a litecoincashd process running on this system. Tests may fail unexpectedly due to resource contention!" % (BOLD[1], BOLD[0]))
- except (OSError, subprocess.SubprocessError):
- pass
- @@ -280,9 +278,8 @@ def run_tests(test_list, src_dir, build_dir, exeext, tmpdir, jobs=1, enable_cove
- print("%sWARNING!%s There is a cache directory here: %s. If tests fail unexpectedly, try deleting the cache directory." % (BOLD[1], BOLD[0], cache_dir))
- #Set env vars
- - if "LITECOIND" not in os.environ:
- - os.environ["LITECOIND"] = build_dir + '/src/litecoind' + exeext
- - os.environ["LITECOINCLI"] = build_dir + '/src/litecoin-cli' + exeext
- + if "LITECOINCASHD" not in os.environ:
- + os.environ["LITECOINCASHD"] = build_dir + '/src/litecoincashd' + exeext
- tests_dir = src_dir + '/test/functional/'
- @@ -465,7 +462,7 @@ class RPCCoverage(object):
- Coverage calculation works by having each test script subprocess write
- coverage files into a particular directory. These files contain the RPC
- commands invoked during testing, as well as a complete listing of RPC
- - commands per `litecoin-cli help` (`rpc_interface.txt`).
- + commands per `bitcoin-cli help` (`rpc_interface.txt`).
- After all tests complete, the commands run are combined and diff'd against
- the complete list to calculate uncovered RPC commands.
- diff --git a/test/functional/test_script_address2.py b/test/functional/test_script_address2.py
- old mode 100755
- new mode 100644
- index 015c515..4c5ae5e
- --- a/test/functional/test_script_address2.py
- +++ b/test/functional/test_script_address2.py
- @@ -4,7 +4,7 @@
- # file COPYING or http://www.opensource.org/licenses/mit-license.php.
- #
- -# Test new Litecoin multisig prefix functionality.
- +# Test new LitecoinCash multisig prefix functionality.
- #
- from test_framework.test_framework import BitcoinTestFramework
- @@ -12,14 +12,16 @@ from test_framework.util import *
- import decimal
- class ScriptAddress2Test(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 3
- self.setup_clean_chain = False
- - def setup_network(self, split=False):
- - self.setup_nodes()
- + def setup_network(self):
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir)
- connect_nodes(self.nodes[1], 0)
- connect_nodes(self.nodes[2], 0)
- + self.is_network_split = False
- self.sync_all()
- def run_test(self):
- diff --git a/test/functional/txn_clone.py b/test/functional/txn_clone.py
- old mode 100755
- new mode 100644
- index 740bb2d..9b81af9
- --- a/test/functional/txn_clone.py
- +++ b/test/functional/txn_clone.py
- @@ -8,8 +8,11 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class TxnMallTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 4
- + self.setup_clean_chain = False
- def add_options(self, parser):
- parser.add_option("--mineblock", dest="mine_block", default=False, action="store_true",
- diff --git a/test/functional/txn_doublespend.py b/test/functional/txn_doublespend.py
- old mode 100755
- new mode 100644
- index 69629ef..1bd3b32
- --- a/test/functional/txn_doublespend.py
- +++ b/test/functional/txn_doublespend.py
- @@ -8,8 +8,11 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class TxnMallTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 4
- + self.setup_clean_chain = False
- def add_options(self, parser):
- parser.add_option("--mineblock", dest="mine_block", default=False, action="store_true",
- diff --git a/test/functional/uptime.py b/test/functional/uptime.py
- old mode 100755
- new mode 100644
- index 78236b2..b20d6f5
- --- a/test/functional/uptime.py
- +++ b/test/functional/uptime.py
- @@ -13,7 +13,9 @@ from test_framework.test_framework import BitcoinTestFramework
- class UptimeTest(BitcoinTestFramework):
- - def set_test_params(self):
- + def __init__(self):
- + super().__init__()
- +
- self.num_nodes = 1
- self.setup_clean_chain = True
- diff --git a/test/functional/wallet-accounts.py b/test/functional/wallet-accounts.py
- old mode 100755
- new mode 100644
- index 40726d2..158aa9a
- --- a/test/functional/wallet-accounts.py
- +++ b/test/functional/wallet-accounts.py
- @@ -17,7 +17,9 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import assert_equal
- class WalletAccountsTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- self.extra_args = [[]]
- diff --git a/test/functional/wallet-dump.py b/test/functional/wallet-dump.py
- old mode 100755
- new mode 100644
- index 2ca01c7..569cc46
- --- a/test/functional/wallet-dump.py
- +++ b/test/functional/wallet-dump.py
- @@ -7,7 +7,7 @@
- import os
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import (assert_equal, assert_raises_rpc_error)
- +from test_framework.util import assert_equal
- def read_dump(file_name, addrs, hd_master_addr_old):
- @@ -56,7 +56,10 @@ def read_dump(file_name, addrs, hd_master_addr_old):
- class WalletDumpTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- + self.setup_clean_chain = False
- self.num_nodes = 1
- self.extra_args = [["-keypool=90"]]
- @@ -65,8 +68,7 @@ class WalletDumpTest(BitcoinTestFramework):
- # longer than the default 30 seconds due to an expensive
- # CWallet::TopUpKeyPool call, and the encryptwallet RPC made later in
- # the test often takes even longer.
- - self.add_nodes(self.num_nodes, self.extra_args, timewait=60)
- - self.start_nodes()
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, self.extra_args, timewait=60)
- def run_test (self):
- tmpdir = self.options.tmpdir
- @@ -92,8 +94,9 @@ class WalletDumpTest(BitcoinTestFramework):
- assert_equal(found_addr_rsv, 90*2) # 90 keys plus 100% internal keys
- #encrypt wallet, restart, unlock and dump
- - self.nodes[0].node_encrypt_wallet('test')
- - self.start_node(0)
- + self.nodes[0].encryptwallet('test')
- + self.bitcoind_processes[0].wait()
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, self.extra_args[0])
- self.nodes[0].walletpassphrase('test', 10)
- # Should be a no-op:
- self.nodes[0].keypoolrefill()
- @@ -105,8 +108,5 @@ class WalletDumpTest(BitcoinTestFramework):
- assert_equal(found_addr_chg, 90*2 + 50) # old reserve keys are marked as change now
- assert_equal(found_addr_rsv, 90*2)
- - # Overwriting should fail
- - assert_raises_rpc_error(-8, "already exists", self.nodes[0].dumpwallet, tmpdir + "/node0/wallet.unencrypted.dump")
- -
- if __name__ == '__main__':
- WalletDumpTest().main ()
- diff --git a/test/functional/wallet-encryption.py b/test/functional/wallet-encryption.py
- old mode 100755
- new mode 100644
- index db62e1e..ba72918
- --- a/test/functional/wallet-encryption.py
- +++ b/test/functional/wallet-encryption.py
- @@ -6,14 +6,16 @@
- import time
- -from test_framework.test_framework import BitcoinTestFramework
- +from test_framework.test_framework import BitcoinTestFramework, BITCOIND_PROC_WAIT_TIMEOUT
- from test_framework.util import (
- assert_equal,
- - assert_raises_rpc_error,
- + assert_raises_jsonrpc,
- )
- class WalletEncryptionTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 1
- @@ -28,11 +30,12 @@ class WalletEncryptionTest(BitcoinTestFramework):
- assert_equal(len(privkey), 52)
- # Encrypt the wallet
- - self.nodes[0].node_encrypt_wallet(passphrase)
- - self.start_node(0)
- + self.nodes[0].encryptwallet(passphrase)
- + self.bitcoind_processes[0].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT)
- + self.nodes[0] = self.start_node(0, self.options.tmpdir)
- # Test that the wallet is encrypted
- - assert_raises_rpc_error(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].dumpprivkey, address)
- + assert_raises_jsonrpc(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].dumpprivkey, address)
- # Check that walletpassphrase works
- self.nodes[0].walletpassphrase(passphrase, 2)
- @@ -40,20 +43,20 @@ class WalletEncryptionTest(BitcoinTestFramework):
- # Check that the timeout is right
- time.sleep(2)
- - assert_raises_rpc_error(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].dumpprivkey, address)
- + assert_raises_jsonrpc(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].dumpprivkey, address)
- # Test wrong passphrase
- - assert_raises_rpc_error(-14, "wallet passphrase entered was incorrect", self.nodes[0].walletpassphrase, passphrase + "wrong", 10)
- + assert_raises_jsonrpc(-14, "wallet passphrase entered was incorrect", self.nodes[0].walletpassphrase, passphrase + "wrong", 10)
- # Test walletlock
- self.nodes[0].walletpassphrase(passphrase, 84600)
- assert_equal(privkey, self.nodes[0].dumpprivkey(address))
- self.nodes[0].walletlock()
- - assert_raises_rpc_error(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].dumpprivkey, address)
- + assert_raises_jsonrpc(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].dumpprivkey, address)
- # Test passphrase changes
- self.nodes[0].walletpassphrasechange(passphrase, passphrase2)
- - assert_raises_rpc_error(-14, "wallet passphrase entered was incorrect", self.nodes[0].walletpassphrase, passphrase, 10)
- + assert_raises_jsonrpc(-14, "wallet passphrase entered was incorrect", self.nodes[0].walletpassphrase, passphrase, 10)
- self.nodes[0].walletpassphrase(passphrase2, 10)
- assert_equal(privkey, self.nodes[0].dumpprivkey(address))
- diff --git a/test/functional/wallet-hd.py b/test/functional/wallet-hd.py
- old mode 100755
- new mode 100644
- index 68b5e5b..821575e
- --- a/test/functional/wallet-hd.py
- +++ b/test/functional/wallet-hd.py
- @@ -11,8 +11,11 @@ from test_framework.util import (
- )
- import shutil
- +
- class WalletHDTest(BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- self.extra_args = [['-usehd=0'], ['-usehd=1', '-keypool=0']]
- @@ -22,8 +25,8 @@ class WalletHDTest(BitcoinTestFramework):
- # Make sure can't switch off usehd after wallet creation
- self.stop_node(1)
- - self.assert_start_raises_init_error(1, ['-usehd=0'], 'already existing HD wallet')
- - self.start_node(1)
- + self.assert_start_raises_init_error(1, self.options.tmpdir, ['-usehd=0'], 'already existing HD wallet')
- + self.nodes[1] = self.start_node(1, self.options.tmpdir, self.extra_args[1])
- connect_nodes_bi(self.nodes, 0, 1)
- # Make sure we use hd, keep masterkeyid
- @@ -73,7 +76,7 @@ class WalletHDTest(BitcoinTestFramework):
- shutil.rmtree(tmpdir + "/node1/regtest/blocks")
- shutil.rmtree(tmpdir + "/node1/regtest/chainstate")
- shutil.copyfile(tmpdir + "/hd.bak", tmpdir + "/node1/regtest/wallet.dat")
- - self.start_node(1)
- + self.nodes[1] = self.start_node(1, self.options.tmpdir, self.extra_args[1])
- # Assert that derivation is deterministic
- hd_add_2 = None
- @@ -88,7 +91,7 @@ class WalletHDTest(BitcoinTestFramework):
- # Needs rescan
- self.stop_node(1)
- - self.start_node(1, extra_args=self.extra_args[1] + ['-rescan'])
- + self.nodes[1] = self.start_node(1, self.options.tmpdir, self.extra_args[1] + ['-rescan'])
- assert_equal(self.nodes[1].getbalance(), num_hd_adds + 1)
- # send a tx and make sure its using the internal chain for the changeoutput
- diff --git a/test/functional/wallet.py b/test/functional/wallet.py
- old mode 100755
- new mode 100644
- index b729610..ffd2224
- --- a/test/functional/wallet.py
- +++ b/test/functional/wallet.py
- @@ -7,28 +7,28 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class WalletTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 4
- +
- + def check_fee_amount(self, curr_balance, balance_with_fee, fee_per_byte, tx_size):
- + """Return curr_balance after asserting the fee was in range"""
- + fee = balance_with_fee - curr_balance
- + assert_fee_amount(fee, tx_size, fee_per_byte * 1000)
- + return curr_balance
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- + self.num_nodes = 4
- self.extra_args = [['-usehd={:d}'.format(i%2==0)] for i in range(4)]
- def setup_network(self):
- - self.add_nodes(4, self.extra_args)
- - self.start_node(0)
- - self.start_node(1)
- - self.start_node(2)
- + self.nodes = self.start_nodes(3, self.options.tmpdir, self.extra_args[:3])
- connect_nodes_bi(self.nodes,0,1)
- connect_nodes_bi(self.nodes,1,2)
- connect_nodes_bi(self.nodes,0,2)
- - self.sync_all([self.nodes[0:3]])
- -
- - def check_fee_amount(self, curr_balance, balance_with_fee, fee_per_byte, tx_size):
- - """Return curr_balance after asserting the fee was in range"""
- - fee = balance_with_fee - curr_balance
- - assert_fee_amount(fee, tx_size, fee_per_byte * 1000)
- - return curr_balance
- + self.sync_all()
- def run_test(self):
- +
- # Check that there's no UTXO on none of the nodes
- assert_equal(len(self.nodes[0].listunspent()), 0)
- assert_equal(len(self.nodes[1].listunspent()), 0)
- @@ -42,9 +42,9 @@ class WalletTest(BitcoinTestFramework):
- assert_equal(walletinfo['immature_balance'], 50)
- assert_equal(walletinfo['balance'], 0)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- self.nodes[1].generate(101)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- assert_equal(self.nodes[0].getbalance(), 50)
- assert_equal(self.nodes[1].getbalance(), 50)
- @@ -56,15 +56,6 @@ class WalletTest(BitcoinTestFramework):
- assert_equal(len(self.nodes[1].listunspent()), 1)
- assert_equal(len(self.nodes[2].listunspent()), 0)
- - self.log.info("test gettxout")
- - confirmed_txid, confirmed_index = utxos[0]["txid"], utxos[0]["vout"]
- - # First, outputs that are unspent both in the chain and in the
- - # mempool should appear with or without include_mempool
- - txout = self.nodes[0].gettxout(txid=confirmed_txid, n=confirmed_index, include_mempool=False)
- - assert_equal(txout['value'], 50)
- - txout = self.nodes[0].gettxout(txid=confirmed_txid, n=confirmed_index, include_mempool=True)
- - assert_equal(txout['value'], 50)
- -
- # Send 21 BTC from 0 to 2 using sendtoaddress call.
- # Locked memory should use at least 32 bytes to sign each transaction
- self.log.info("test getmemoryinfo")
- @@ -74,9 +65,10 @@ class WalletTest(BitcoinTestFramework):
- memory_after = self.nodes[0].getmemoryinfo()
- assert(memory_before['locked']['used'] + 64 <= memory_after['locked']['used'])
- - self.log.info("test gettxout (second part)")
- + self.log.info("test gettxout")
- # utxo spent in mempool should be visible if you exclude mempool
- # but invisible if you include mempool
- + confirmed_txid, confirmed_index = utxos[0]["txid"], utxos[0]["vout"]
- txout = self.nodes[0].gettxout(confirmed_txid, confirmed_index, False)
- assert_equal(txout['value'], 50)
- txout = self.nodes[0].gettxout(confirmed_txid, confirmed_index, True)
- @@ -96,20 +88,20 @@ class WalletTest(BitcoinTestFramework):
- # Have node0 mine a block, thus it will collect its own fee.
- self.nodes[0].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- # Exercise locking of unspent outputs
- unspent_0 = self.nodes[2].listunspent()[0]
- unspent_0 = {"txid": unspent_0["txid"], "vout": unspent_0["vout"]}
- self.nodes[2].lockunspent(False, [unspent_0])
- - assert_raises_rpc_error(-4, "Insufficient funds", self.nodes[2].sendtoaddress, self.nodes[2].getnewaddress(), 20)
- + assert_raises_jsonrpc(-4, "Insufficient funds", self.nodes[2].sendtoaddress, self.nodes[2].getnewaddress(), 20)
- assert_equal([unspent_0], self.nodes[2].listlockunspent())
- self.nodes[2].lockunspent(True, [unspent_0])
- assert_equal(len(self.nodes[2].listlockunspent()), 0)
- # Have node1 generate 100 blocks (so node0 can recover the fee)
- self.nodes[1].generate(100)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- # node0 should end up with 100 btc in block rewards plus fees, but
- # minus the 21 plus fees sent to node2
- @@ -138,7 +130,7 @@ class WalletTest(BitcoinTestFramework):
- # Have node1 mine a block to confirm transactions:
- self.nodes[1].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- assert_equal(self.nodes[0].getbalance(), 0)
- assert_equal(self.nodes[2].getbalance(), 94)
- @@ -150,14 +142,14 @@ class WalletTest(BitcoinTestFramework):
- self.nodes[2].settxfee(fee_per_byte * 1000)
- txid = self.nodes[2].sendtoaddress(address, 10, "", "", False)
- self.nodes[2].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- node_2_bal = self.check_fee_amount(self.nodes[2].getbalance(), Decimal('84'), fee_per_byte, count_bytes(self.nodes[2].getrawtransaction(txid)))
- assert_equal(self.nodes[0].getbalance(), Decimal('10'))
- # Send 10 BTC with subtract fee from amount
- txid = self.nodes[2].sendtoaddress(address, 10, "", "", True)
- self.nodes[2].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- node_2_bal -= Decimal('10')
- assert_equal(self.nodes[2].getbalance(), node_2_bal)
- node_0_bal = self.check_fee_amount(self.nodes[0].getbalance(), Decimal('20'), fee_per_byte, count_bytes(self.nodes[2].getrawtransaction(txid)))
- @@ -165,7 +157,7 @@ class WalletTest(BitcoinTestFramework):
- # Sendmany 10 BTC
- txid = self.nodes[2].sendmany('from1', {address: 10}, 0, "", [])
- self.nodes[2].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- node_0_bal += Decimal('10')
- node_2_bal = self.check_fee_amount(self.nodes[2].getbalance(), node_2_bal - Decimal('10'), fee_per_byte, count_bytes(self.nodes[2].getrawtransaction(txid)))
- assert_equal(self.nodes[0].getbalance(), node_0_bal)
- @@ -173,7 +165,7 @@ class WalletTest(BitcoinTestFramework):
- # Sendmany 10 BTC with subtract fee from amount
- txid = self.nodes[2].sendmany('from1', {address: 10}, 0, "", [address])
- self.nodes[2].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- node_2_bal -= Decimal('10')
- assert_equal(self.nodes[2].getbalance(), node_2_bal)
- node_0_bal = self.check_fee_amount(self.nodes[0].getbalance(), node_0_bal + Decimal('10'), fee_per_byte, count_bytes(self.nodes[2].getrawtransaction(txid)))
- @@ -184,9 +176,9 @@ class WalletTest(BitcoinTestFramework):
- # EXPECT: nodes[3] should have those transactions in its mempool.
- txid1 = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 1)
- txid2 = self.nodes[1].sendtoaddress(self.nodes[0].getnewaddress(), 1)
- - sync_mempools(self.nodes[0:2])
- + sync_mempools(self.nodes)
- - self.start_node(3)
- + self.nodes.append(self.start_node(3, self.options.tmpdir, self.extra_args[3]))
- connect_nodes_bi(self.nodes, 0, 3)
- sync_blocks(self.nodes)
- @@ -230,24 +222,22 @@ class WalletTest(BitcoinTestFramework):
- #do some -walletbroadcast tests
- self.stop_nodes()
- - self.start_node(0, ["-walletbroadcast=0"])
- - self.start_node(1, ["-walletbroadcast=0"])
- - self.start_node(2, ["-walletbroadcast=0"])
- + self.nodes = self.start_nodes(3, self.options.tmpdir, [["-walletbroadcast=0"],["-walletbroadcast=0"],["-walletbroadcast=0"]])
- connect_nodes_bi(self.nodes,0,1)
- connect_nodes_bi(self.nodes,1,2)
- connect_nodes_bi(self.nodes,0,2)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- txIdNotBroadcasted = self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 2)
- txObjNotBroadcasted = self.nodes[0].gettransaction(txIdNotBroadcasted)
- self.nodes[1].generate(1) #mine a block, tx should not be in there
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- assert_equal(self.nodes[2].getbalance(), node_2_bal) #should not be changed because tx was not broadcasted
- #now broadcast from another node, mine a block, sync, and check the balance
- self.nodes[1].sendrawtransaction(txObjNotBroadcasted['hex'])
- self.nodes[1].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- node_2_bal += 2
- txObjNotBroadcasted = self.nodes[0].gettransaction(txIdNotBroadcasted)
- assert_equal(self.nodes[2].getbalance(), node_2_bal)
- @@ -257,16 +247,14 @@ class WalletTest(BitcoinTestFramework):
- #restart the nodes with -walletbroadcast=1
- self.stop_nodes()
- - self.start_node(0)
- - self.start_node(1)
- - self.start_node(2)
- + self.nodes = self.start_nodes(3, self.options.tmpdir)
- connect_nodes_bi(self.nodes,0,1)
- connect_nodes_bi(self.nodes,1,2)
- connect_nodes_bi(self.nodes,0,2)
- - sync_blocks(self.nodes[0:3])
- + sync_blocks(self.nodes)
- self.nodes[0].generate(1)
- - sync_blocks(self.nodes[0:3])
- + sync_blocks(self.nodes)
- node_2_bal += 2
- #tx should be added to balance because after restarting the nodes tx should be broadcastet
- @@ -287,17 +275,17 @@ class WalletTest(BitcoinTestFramework):
- assert_equal(txObj['amount'], Decimal('-0.001'))
- # This will raise an exception because the amount type is wrong
- - assert_raises_rpc_error(-3, "Invalid amount", self.nodes[0].sendtoaddress, self.nodes[2].getnewaddress(), "1f-4")
- + assert_raises_jsonrpc(-3, "Invalid amount", self.nodes[0].sendtoaddress, self.nodes[2].getnewaddress(), "1f-4")
- # This will raise an exception since generate does not accept a string
- - assert_raises_rpc_error(-1, "not an integer", self.nodes[0].generate, "2")
- + assert_raises_jsonrpc(-1, "not an integer", self.nodes[0].generate, "2")
- # Import address and private key to check correct behavior of spendable unspents
- # 1. Send some coins to generate new UTXO
- address_to_import = self.nodes[2].getnewaddress()
- txid = self.nodes[0].sendtoaddress(address_to_import, 1)
- self.nodes[0].generate(1)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- # 2. Import address from node2 to node1
- self.nodes[1].importaddress(address_to_import)
- @@ -323,15 +311,15 @@ class WalletTest(BitcoinTestFramework):
- cbAddr = self.nodes[1].getnewaddress()
- blkHash = self.nodes[0].generatetoaddress(1, cbAddr)[0]
- cbTxId = self.nodes[0].getblock(blkHash)['tx'][0]
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- # Check that the txid and balance is found by node1
- self.nodes[1].gettransaction(cbTxId)
- # check if wallet or blockchain maintenance changes the balance
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- blocks = self.nodes[0].generate(2)
- - self.sync_all([self.nodes[0:3]])
- + self.sync_all()
- balance_nodes = [self.nodes[i].getbalance() for i in range(3)]
- block_count = self.nodes[0].getblockcount()
- @@ -362,9 +350,7 @@ class WalletTest(BitcoinTestFramework):
- self.log.info("check " + m)
- self.stop_nodes()
- # set lower ancestor limit for later
- - self.start_node(0, [m, "-limitancestorcount="+str(chainlimit)])
- - self.start_node(1, [m, "-limitancestorcount="+str(chainlimit)])
- - self.start_node(2, [m, "-limitancestorcount="+str(chainlimit)])
- + self.nodes = self.start_nodes(3, self.options.tmpdir, [[m, "-limitancestorcount="+str(chainlimit)]] * 3)
- while m == '-reindex' and [block_count] * 3 != [self.nodes[i].getblockcount() for i in range(3)]:
- # reindex will leave rpc warm up "early"; Wait for it to finish
- time.sleep(0.1)
- @@ -412,7 +398,7 @@ class WalletTest(BitcoinTestFramework):
- # Try with walletrejectlongchains
- # Double chain limit but require combining inputs, so we pass SelectCoinsMinConf
- self.stop_node(0)
- - self.start_node(0, extra_args=["-walletrejectlongchains", "-limitancestorcount="+str(2*chainlimit)])
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, ["-walletrejectlongchains", "-limitancestorcount="+str(2*chainlimit)])
- # wait for loadmempool
- timeout = 10
- @@ -423,7 +409,7 @@ class WalletTest(BitcoinTestFramework):
- node0_balance = self.nodes[0].getbalance()
- # With walletrejectlongchains we will not create the tx and store it in our wallet.
- - assert_raises_rpc_error(-4, "Transaction has too long of a mempool chain", self.nodes[0].sendtoaddress, sending_addr, node0_balance - Decimal('0.01'))
- + assert_raises_jsonrpc(-4, "Transaction has too long of a mempool chain", self.nodes[0].sendtoaddress, sending_addr, node0_balance - Decimal('0.01'))
- # Verify nothing new in wallet
- assert_equal(total_txs, len(self.nodes[0].listtransactions("*",99999)))
- diff --git a/test/functional/walletbackup.py b/test/functional/walletbackup.py
- old mode 100755
- new mode 100644
- index 85a1497..ff51cba
- --- a/test/functional/walletbackup.py
- +++ b/test/functional/walletbackup.py
- @@ -37,9 +37,11 @@ from test_framework.test_framework import BitcoinTestFramework
- from test_framework.util import *
- class WalletBackupTest(BitcoinTestFramework):
- - def set_test_params(self):
- - self.num_nodes = 4
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- + self.num_nodes = 4
- # nodes 1, 2,3 are spenders, let's give them a keypool=100
- self.extra_args = [["-keypool=100"], ["-keypool=100"], ["-keypool=100"], []]
- @@ -76,9 +78,9 @@ class WalletBackupTest(BitcoinTestFramework):
- # As above, this mirrors the original bash test.
- def start_three(self):
- - self.start_node(0)
- - self.start_node(1)
- - self.start_node(2)
- + self.nodes[0] = self.start_node(0, self.options.tmpdir)
- + self.nodes[1] = self.start_node(1, self.options.tmpdir)
- + self.nodes[2] = self.start_node(2, self.options.tmpdir)
- connect_nodes(self.nodes[0], 3)
- connect_nodes(self.nodes[1], 3)
- connect_nodes(self.nodes[2], 3)
- @@ -190,16 +192,6 @@ class WalletBackupTest(BitcoinTestFramework):
- assert_equal(self.nodes[1].getbalance(), balance1)
- assert_equal(self.nodes[2].getbalance(), balance2)
- - # Backup to source wallet file must fail
- - sourcePaths = [
- - tmpdir + "/node0/regtest/wallet.dat",
- - tmpdir + "/node0/./regtest/wallet.dat",
- - tmpdir + "/node0/regtest/",
- - tmpdir + "/node0/regtest"]
- -
- - for sourcePath in sourcePaths:
- - assert_raises_rpc_error(-4, "backup failed", self.nodes[0].backupwallet, sourcePath)
- -
- if __name__ == '__main__':
- WalletBackupTest().main()
- diff --git a/test/functional/zapwallettxes.py b/test/functional/zapwallettxes.py
- old mode 100755
- new mode 100644
- index 8cd622d..af867d7
- --- a/test/functional/zapwallettxes.py
- +++ b/test/functional/zapwallettxes.py
- @@ -15,14 +15,14 @@
- been zapped.
- """
- from test_framework.test_framework import BitcoinTestFramework
- -from test_framework.util import (
- - assert_equal,
- - assert_raises_rpc_error,
- - wait_until,
- -)
- +from test_framework.util import (assert_equal,
- + assert_raises_jsonrpc,
- + )
- class ZapWalletTXesTest (BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.setup_clean_chain = True
- self.num_nodes = 2
- @@ -48,7 +48,7 @@ class ZapWalletTXesTest (BitcoinTestFramework):
- # Stop-start node0. Both confirmed and unconfirmed transactions remain in the wallet.
- self.stop_node(0)
- - self.start_node(0)
- + self.nodes[0] = self.start_node(0, self.options.tmpdir)
- assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1)
- assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2)
- @@ -56,9 +56,7 @@ class ZapWalletTXesTest (BitcoinTestFramework):
- # Stop node0 and restart with zapwallettxes and persistmempool. The unconfirmed
- # transaction is zapped from the wallet, but is re-added when the mempool is reloaded.
- self.stop_node(0)
- - self.start_node(0, ["-persistmempool=1", "-zapwallettxes=2"])
- -
- - wait_until(lambda: self.nodes[0].getmempoolinfo()['size'] == 1, timeout=3)
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, ["-persistmempool=1", "-zapwallettxes=2"])
- assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1)
- assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2)
- @@ -66,13 +64,13 @@ class ZapWalletTXesTest (BitcoinTestFramework):
- # Stop node0 and restart with zapwallettxes, but not persistmempool.
- # The unconfirmed transaction is zapped and is no longer in the wallet.
- self.stop_node(0)
- - self.start_node(0, ["-zapwallettxes=2"])
- + self.nodes[0] = self.start_node(0, self.options.tmpdir, ["-zapwallettxes=2"])
- # tx1 is still be available because it was confirmed
- assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1)
- # This will raise an exception because the unconfirmed transaction has been zapped
- - assert_raises_rpc_error(-5, 'Invalid or non-wallet transaction id', self.nodes[0].gettransaction, txid2)
- + assert_raises_jsonrpc(-5, 'Invalid or non-wallet transaction id', self.nodes[0].gettransaction, txid2)
- if __name__ == '__main__':
- ZapWalletTXesTest().main()
- diff --git a/test/functional/zmq_test.py b/test/functional/zmq_test.py
- old mode 100755
- new mode 100644
- index 8499cb9..a4d75f4
- --- a/test/functional/zmq_test.py
- +++ b/test/functional/zmq_test.py
- @@ -10,11 +10,12 @@ import struct
- from test_framework.test_framework import BitcoinTestFramework, SkipTest
- from test_framework.util import (assert_equal,
- bytes_to_hex_str,
- - hash256,
- - )
- + )
- class ZMQTest (BitcoinTestFramework):
- - def set_test_params(self):
- +
- + def __init__(self):
- + super().__init__()
- self.num_nodes = 2
- def setup_nodes(self):
- @@ -31,21 +32,17 @@ class ZMQTest (BitcoinTestFramework):
- config.read_file(open(self.options.configfile))
- if not config["components"].getboolean("ENABLE_ZMQ"):
- - raise SkipTest("litecoind has not been built with zmq enabled.")
- + raise SkipTest("litecoincashd has not been built with zmq enabled.")
- self.zmqContext = zmq.Context()
- self.zmqSubSocket = self.zmqContext.socket(zmq.SUB)
- self.zmqSubSocket.set(zmq.RCVTIMEO, 60000)
- self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashblock")
- self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashtx")
- - self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawblock")
- - self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawtx")
- ip_address = "tcp://127.0.0.1:28332"
- self.zmqSubSocket.connect(ip_address)
- - self.extra_args = [['-zmqpubhashblock=%s' % ip_address, '-zmqpubhashtx=%s' % ip_address,
- - '-zmqpubrawblock=%s' % ip_address, '-zmqpubrawtx=%s' % ip_address], []]
- - self.add_nodes(self.num_nodes, self.extra_args)
- - self.start_nodes()
- + extra_args = [['-zmqpubhashtx=%s' % ip_address, '-zmqpubhashblock=%s' % ip_address], []]
- + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args)
- def run_test(self):
- try:
- @@ -63,41 +60,19 @@ class ZMQTest (BitcoinTestFramework):
- msg = self.zmqSubSocket.recv_multipart()
- topic = msg[0]
- assert_equal(topic, b"hashtx")
- - txhash = msg[1]
- - msgSequence = struct.unpack('<I', msg[-1])[-1]
- - assert_equal(msgSequence, 0) # must be sequence 0 on hashtx
- -
- - # rawtx
- - msg = self.zmqSubSocket.recv_multipart()
- - topic = msg[0]
- - assert_equal(topic, b"rawtx")
- body = msg[1]
- msgSequence = struct.unpack('<I', msg[-1])[-1]
- - assert_equal(msgSequence, 0) # must be sequence 0 on rawtx
- -
- - # Check that the rawtx hashes to the hashtx
- - assert_equal(hash256(body), txhash)
- + assert_equal(msgSequence, 0) # must be sequence 0 on hashtx
- self.log.info("Wait for block")
- msg = self.zmqSubSocket.recv_multipart()
- topic = msg[0]
- - assert_equal(topic, b"hashblock")
- body = msg[1]
- msgSequence = struct.unpack('<I', msg[-1])[-1]
- assert_equal(msgSequence, 0) # must be sequence 0 on hashblock
- blkhash = bytes_to_hex_str(body)
- - assert_equal(genhashes[0], blkhash) # blockhash from generate must be equal to the hash received over zmq
- -
- - # rawblock
- - msg = self.zmqSubSocket.recv_multipart()
- - topic = msg[0]
- - assert_equal(topic, b"rawblock")
- - body = msg[1]
- - msgSequence = struct.unpack('<I', msg[-1])[-1]
- - assert_equal(msgSequence, 0) #must be sequence 0 on rawblock
- - # Check the hash of the rawblock's header matches generate
- - assert_equal(genhashes[0], bytes_to_hex_str(hash256(body[:80])))
- + assert_equal(genhashes[0], blkhash) # blockhash from generate must be equal to the hash received over zmq
- self.log.info("Generate 10 blocks (and 10 coinbase txes)")
- n = 10
- @@ -105,9 +80,8 @@ class ZMQTest (BitcoinTestFramework):
- self.sync_all()
- zmqHashes = []
- - zmqRawHashed = []
- blockcount = 0
- - for x in range(n * 4):
- + for x in range(n * 2):
- msg = self.zmqSubSocket.recv_multipart()
- topic = msg[0]
- body = msg[1]
- @@ -116,14 +90,9 @@ class ZMQTest (BitcoinTestFramework):
- msgSequence = struct.unpack('<I', msg[-1])[-1]
- assert_equal(msgSequence, blockcount + 1)
- blockcount += 1
- - if topic == b"rawblock":
- - zmqRawHashed.append(bytes_to_hex_str(hash256(body[:80])))
- - msgSequence = struct.unpack('<I', msg[-1])[-1]
- - assert_equal(msgSequence, blockcount)
- for x in range(n):
- assert_equal(genhashes[x], zmqHashes[x]) # blockhash from generate must be equal to the hash received over zmq
- - assert_equal(genhashes[x], zmqRawHashed[x])
- self.log.info("Wait for tx from second node")
- # test tx from a second node
- @@ -133,21 +102,13 @@ class ZMQTest (BitcoinTestFramework):
- # now we should receive a zmq msg because the tx was broadcast
- msg = self.zmqSubSocket.recv_multipart()
- topic = msg[0]
- - assert_equal(topic, b"hashtx")
- body = msg[1]
- + assert_equal(topic, b"hashtx")
- hashZMQ = bytes_to_hex_str(body)
- msgSequence = struct.unpack('<I', msg[-1])[-1]
- assert_equal(msgSequence, blockcount + 1)
- - msg = self.zmqSubSocket.recv_multipart()
- - topic = msg[0]
- - assert_equal(topic, b"rawtx")
- - body = msg[1]
- - hashedZMQ = bytes_to_hex_str(hash256(body))
- - msgSequence = struct.unpack('<I', msg[-1])[-1]
- - assert_equal(msgSequence, blockcount+1)
- assert_equal(hashRPC, hashZMQ) # txid from sendtoaddress must be equal to the hash received over zmq
- - assert_equal(hashRPC, hashedZMQ)
- if __name__ == '__main__':
- ZMQTest().main()
- diff --git a/test/util/bitcoin-util-test.py b/test/util/bitcoin-util-test.py
- old mode 100755
- new mode 100644
- index ef34955..d15d6a6
- --- a/test/util/bitcoin-util-test.py
- +++ b/test/util/bitcoin-util-test.py
- @@ -9,14 +9,9 @@ Runs automatically during `make check`.
- Can also be run manually."""
- -from __future__ import division,print_function,unicode_literals
- -
- import argparse
- import binascii
- -try:
- - import configparser
- -except ImportError:
- - import ConfigParser as configparser
- +import configparser
- import difflib
- import json
- import logging
- @@ -27,9 +22,7 @@ import sys
- def main():
- config = configparser.ConfigParser()
- - config.optionxform = str
- - config.readfp(open(os.path.join(os.path.dirname(__file__), "../config.ini")))
- - env_conf = dict(config.items('environment'))
- + config.read_file(open(os.path.dirname(__file__) + "/../config.ini"))
- parser = argparse.ArgumentParser(description=__doc__)
- parser.add_argument('-v', '--verbose', action='store_true')
- @@ -44,7 +37,7 @@ def main():
- # Add the format/level to the logger
- logging.basicConfig(format=formatter, level=level)
- - bctester(os.path.join(env_conf["SRCDIR"], "test/util/data"), "bitcoin-util-test.json", env_conf)
- + bctester(config["environment"]["SRCDIR"] + "/test/util/data", "bitcoin-util-test.json", config["environment"])
- def bctester(testDir, input_basename, buildenv):
- """ Loads and parses the input file, runs all tests and reports results"""
- diff --git a/test/util/data/bitcoin-util-test.json b/test/util/data/bitcoin-util-test.json
- index fbdac92..b66c867 100644
- --- a/test/util/data/bitcoin-util-test.json
- +++ b/test/util/data/bitcoin-util-test.json
- @@ -1,82 +1,82 @@
- [
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "nversion=1"],
- "output_cmp": "blanktxv1.hex",
- "description": "Creates a blank v1 transaction"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json","-create", "nversion=1"],
- "output_cmp": "blanktxv1.json",
- "description": "Creates a blank v1 transaction (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-"],
- "input": "blanktxv2.hex",
- "output_cmp": "blanktxv2.hex",
- - "description": "Creates a blank transaction when nothing is piped into litecoin-tx"
- + "description": "Creates a blank transaction when nothing is piped into litecoincash-tx"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json","-create"],
- "output_cmp": "blanktxv2.json",
- "description": "Creates a blank transaction (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json","-"],
- "input": "blanktxv2.hex",
- "output_cmp": "blanktxv2.json",
- - "description": "Creates a blank transaction when nothing is piped into litecoin-tx (output in json)"
- + "description": "Creates a blank transaction when nothing is piped into litecoincash-tx (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-", "delin=1"],
- "input": "tx394b54bb.hex",
- "output_cmp": "tt-delin1-out.hex",
- "description": "Deletes a single input from a transaction"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-", "delin=1"],
- "input": "tx394b54bb.hex",
- "output_cmp": "tt-delin1-out.json",
- "description": "Deletes a single input from a transaction (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-", "delin=31"],
- "input": "tx394b54bb.hex",
- "return_code": 1,
- "error_txt": "error: Invalid TX input index '31'",
- "description": "Attempts to delete an input with a bad index from a transaction. Expected to fail."
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-", "delout=1"],
- "input": "tx394b54bb.hex",
- "output_cmp": "tt-delout1-out.hex",
- "description": "Deletes a single output from a transaction"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-", "delout=1"],
- "input": "tx394b54bb.hex",
- "output_cmp": "tt-delout1-out.json",
- "description": "Deletes a single output from a transaction (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-", "delout=2"],
- "input": "tx394b54bb.hex",
- "return_code": 1,
- "error_txt": "error: Invalid TX output index '2'",
- "description": "Attempts to delete an output with a bad index from a transaction. Expected to fail."
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-", "locktime=317000"],
- "input": "tx394b54bb.hex",
- "output_cmp": "tt-locktime317000-out.hex",
- "description": "Adds an nlocktime to a transaction"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-", "locktime=317000"],
- "input": "tx394b54bb.hex",
- "output_cmp": "tt-locktime317000-out.json",
- "description": "Adds an nlocktime to a transaction (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "outaddr=1"],
- @@ -84,7 +84,7 @@
- "error_txt": "error: TX output missing or too many separators",
- "description": "Malformed outaddr argument (no address specified). Expected to fail."
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "outaddr=1:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o:garbage"],
- @@ -92,7 +92,7 @@
- "error_txt": "error: TX output missing or too many separators",
- "description": "Malformed outaddr argument (too many separators). Expected to fail."
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "outpubkey=0"],
- @@ -100,7 +100,7 @@
- "error_txt": "error: TX output missing or too many separators",
- "description": "Malformed outpubkey argument (no pubkey specified). Expected to fail."
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:W:non53nse"],
- @@ -108,7 +108,7 @@
- "error_txt": "error: TX output missing or too many separators",
- "description": "Malformed outpubkey argument (too many separators). Expected to fail."
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "in=5ee62e3f7757f5fd995b2fa1bdb5b744298146098d5de92959ec4b52dc77191e:1",
- @@ -119,7 +119,7 @@
- "output_cmp": "txcreate1.hex",
- "description": "Creates a new transaction with three inputs and two outputs"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json",
- "-create",
- @@ -131,67 +131,67 @@
- "output_cmp": "txcreate1.json",
- "description": "Creates a new transaction with three inputs and two outputs (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outscript=0:"],
- "output_cmp": "txcreate2.hex",
- "description": "Creates a new transaction with a single empty output script"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outscript=0:"],
- "output_cmp": "txcreate2.json",
- "description": "Creates a new transaction with a single empty output script (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["02000000000100000000000000000000000000"],
- "output_cmp": "txcreate2.hex",
- "description": "Parses a transation with no inputs and a single output script"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "02000000000100000000000000000000000000"],
- "output_cmp": "txcreate2.json",
- "description": "Parses a transation with no inputs and a single output script (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outscript=0:OP_DROP", "nversion=1"],
- "output_cmp": "txcreatescript1.hex",
- "description": "Create a new transaction with a single output script (OP_DROP)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outscript=0:OP_DROP", "nversion=1"],
- "output_cmp": "txcreatescript1.json",
- "description": "Create a new transaction with a single output script (OP_DROP) (output as json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outscript=0:OP_DROP:S", "nversion=1"],
- "output_cmp": "txcreatescript2.hex",
- "description": "Create a new transaction with a single output script (OP_DROP) in a P2SH"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outscript=0:OP_DROP:S", "nversion=1"],
- "output_cmp": "txcreatescript2.json",
- "description": "Create a new transaction with a single output script (OP_DROP) in a P2SH (output as json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outscript=0:OP_DROP:W", "nversion=1"],
- "output_cmp": "txcreatescript3.hex",
- "description": "Create a new transaction with a single output script (OP_DROP) in a P2WSH"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outscript=0:OP_DROP:W", "nversion=1"],
- "output_cmp": "txcreatescript3.json",
- "description": "Create a new transaction with a single output script (OP_DROP) in a P2WSH (output as json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outscript=0:OP_DROP:WS", "nversion=1"],
- "output_cmp": "txcreatescript4.hex",
- "description": "Create a new transaction with a single output script (OP_DROP) in a P2WSH, wrapped in a P2SH"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outscript=0:OP_DROP:WS", "nversion=1"],
- "output_cmp": "txcreatescript4.json",
- "description": "Create a new transaction with a single output script (OP_DROP) in a P2SH, wrapped in a P2SH (output as json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create", "nversion=1",
- "in=6c2789243608b46f750f49ff24f6f79a78c3010f7e56951e045e5b7ea5d07bf7:0",
- @@ -202,7 +202,7 @@
- "output_cmp": "txcreatesignv1.hex",
- "description": "Creates a new v1 transaction with a single input and a single output, and then signs the transaction"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json",
- "-create", "nversion=1",
- @@ -214,7 +214,7 @@
- "output_cmp": "txcreatesignv1.json",
- "description": "Creates a new v1 transaction with a single input and a single output, and then signs the transaction (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "in=6c2789243608b46f750f49ff24f6f79a78c3010f7e56951e045e5b7ea5d07bf7:0",
- @@ -225,50 +225,43 @@
- "output_cmp": "txcreatesignv2.hex",
- "description": "Creates a new transaction with a single input and a single output, and then signs the transaction"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create", "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397", "nversion=1"],
- "output_cmp": "txcreateoutpubkey1.hex",
- "description": "Creates a new transaction with a single pay-to-pubkey output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json", "-create", "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397", "nversion=1"],
- "output_cmp": "txcreateoutpubkey1.json",
- "description": "Creates a new transaction with a single pay-to-pubkey output (output as json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create", "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:W", "nversion=1"],
- "output_cmp": "txcreateoutpubkey2.hex",
- "description": "Creates a new transaction with a single pay-to-witness-pubkey output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json", "-create", "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:W", "nversion=1"],
- "output_cmp": "txcreateoutpubkey2.json",
- "description": "Creates a new transaction with a single pay-to-witness-pubkey output (output as json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create", "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:WS", "nversion=1"],
- "output_cmp": "txcreateoutpubkey3.hex",
- "description": "Creates a new transaction with a single pay-to-witness-pubkey, wrapped in P2SH output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json", "-create", "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:WS", "nversion=1"],
- "output_cmp": "txcreateoutpubkey3.json",
- "description": "Creates a new transaction with a single pay-to-pub-key output, wrapped in P2SH (output as json)"
- },
- - { "exec": "./litecoin-tx",
- - "args":
- - ["-json", "-create", "outpubkey=0:047d1368ba7ae01c94bc32293efd70bd7e3be7aa7912d07d0b1c659c1008d179b8642f5fb90f47580feb29f045e216ff5a4716d3a0fed36da414d332046303c44a:WS", "nversion=1"],
- - "return_code": 1,
- - "error_txt": "error: Uncompressed pubkeys are not useable for SegWit outputs",
- - "description": "Creates a new transaction with a single pay-to-pub-key output, wrapped in P2SH (output as json)"
- - },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "in=69e9c12d30a6cd598a31ddfcaabeb9d9f0baf8938bf0ba6610beb04f589cc5ef:0",
- @@ -277,7 +270,7 @@
- "error_txt": "error: invalid TX output data",
- "description": "Attempts to create a new transaction with one input and an output with malformed hex data. Expected to fail"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "in=69e9c12d30a6cd598a31ddfcaabeb9d9f0baf8938bf0ba6610beb04f589cc5ef:0",
- @@ -286,7 +279,7 @@
- "error_txt": "error: invalid TX output data",
- "description": "Attempts to create a new transaction with one input and an output with no value and malformed hex data. Expected to fail"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "in=69e9c12d30a6cd598a31ddfcaabeb9d9f0baf8938bf0ba6610beb04f589cc5ef:0",
- @@ -295,7 +288,7 @@
- "output_cmp": "txcreatedata1.hex",
- "description": "Creates a new transaction with one input, one address output and one data output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json",
- "-create", "nversion=1",
- @@ -305,7 +298,7 @@
- "output_cmp": "txcreatedata1.json",
- "description": "Creates a new v1 transaction with one input, one address output and one data output (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "in=69e9c12d30a6cd598a31ddfcaabeb9d9f0baf8938bf0ba6610beb04f589cc5ef:0",
- @@ -314,7 +307,7 @@
- "output_cmp": "txcreatedata2.hex",
- "description": "Creates a new transaction with one input, one address output and one data (zero value) output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json",
- "-create",
- @@ -324,7 +317,7 @@
- "output_cmp": "txcreatedata2.json",
- "description": "Creates a new transaction with one input, one address output and one data (zero value) output (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-create",
- "in=69e9c12d30a6cd598a31ddfcaabeb9d9f0baf8938bf0ba6610beb04f589cc5ef:0:4294967293",
- @@ -332,7 +325,7 @@
- "output_cmp": "txcreatedata_seq0.hex",
- "description": "Creates a new transaction with one input with sequence number and one address output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json",
- "-create",
- @@ -341,14 +334,14 @@
- "output_cmp": "txcreatedata_seq0.json",
- "description": "Creates a new transaction with one input with sequence number and one address output (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["01000000011f5c38dfcf6f1a5f5a87c416076d392c87e6d41970d5ad5e477a02d66bde97580000000000fdffffff0180a81201000000001976a9141fc11f39be1729bf973a7ab6a615ca4729d6457488ac00000000",
- "in=69e9c12d30a6cd598a31ddfcaabeb9d9f0baf8938bf0ba6610beb04f589cc5ef:0:1"],
- "output_cmp": "txcreatedata_seq1.hex",
- "description": "Adds a new input with sequence number to a transaction"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args":
- ["-json",
- "01000000011f5c38dfcf6f1a5f5a87c416076d392c87e6d41970d5ad5e477a02d66bde97580000000000fdffffff0180a81201000000001976a9141fc11f39be1729bf973a7ab6a615ca4729d6457488ac00000000",
- @@ -356,55 +349,44 @@
- "output_cmp": "txcreatedata_seq1.json",
- "description": "Adds a new input with sequence number to a transaction (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485", "nversion=1"],
- "output_cmp": "txcreatemultisig1.hex",
- "description": "Creates a new transaction with a single 2-of-3 multisig output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485", "nversion=1"],
- "output_cmp": "txcreatemultisig1.json",
- "description": "Creates a new transaction with a single 2-of-3 multisig output (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485:S", "nversion=1"],
- "output_cmp": "txcreatemultisig2.hex",
- "description": "Creates a new transaction with a single 2-of-3 multisig in a P2SH output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485:S", "nversion=1"],
- "output_cmp": "txcreatemultisig2.json",
- "description": "Creates a new transaction with a single 2-of-3 multisig in a P2SH output (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485:W", "nversion=1"],
- "output_cmp": "txcreatemultisig3.hex",
- "description": "Creates a new transaction with a single 2-of-3 multisig in a P2WSH output"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485:W", "nversion=1"],
- "output_cmp": "txcreatemultisig3.json",
- "description": "Creates a new transaction with a single 2-of-3 multisig in a P2WSH output (output in json)"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485:WS", "nversion=1"],
- "output_cmp": "txcreatemultisig4.hex",
- "description": "Creates a new transaction with a single 2-of-3 multisig in a P2WSH output, wrapped in P2SH"
- },
- - { "exec": "./litecoin-tx",
- + { "exec": "./litecoincash-tx",
- "args": ["-json", "-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485:WS", "nversion=1"],
- "output_cmp": "txcreatemultisig4.json",
- "description": "Creates a new transaction with a single 2-of-3 multisig in a P2WSH output, wrapped in P2SH (output in json)"
- - },
- - { "exec": "./litecoin-tx",
- - "args": ["-json", "-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:047d1368ba7ae01c94bc32293efd70bd7e3be7aa7912d07d0b1c659c1008d179b8642f5fb90f47580feb29f045e216ff5a4716d3a0fed36da414d332046303c44a:S"],
- - "output_cmp": "txcreatemultisig5.json",
- - "description": "Uncompressed pubkeys should work just fine for non-witness outputs"
- - },
- - { "exec": "./litecoin-tx",
- - "args": ["-json", "-create", "outmultisig=1:2:3:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d:047d1368ba7ae01c94bc32293efd70bd7e3be7aa7912d07d0b1c659c1008d179b8642f5fb90f47580feb29f045e216ff5a4716d3a0fed36da414d332046303c44a:WS"],
- - "return_code": 1,
- - "error_txt": "error: Uncompressed pubkeys are not useable for SegWit outputs",
- - "description": "Ensure adding witness outputs with uncompressed pubkeys fails"
- }
- ]
- diff --git a/test/util/data/txcreatemultisig5.json b/test/util/data/txcreatemultisig5.json
- deleted file mode 100644
- index dd6a0ba..0000000
- --- a/test/util/data/txcreatemultisig5.json
- +++ /dev/null
- @@ -1,26 +0,0 @@
- -{
- - "txid": "813cf75e1f08debd242ef7c8192b7d478fb651355209369499a0de779ba7eb2f",
- - "hash": "813cf75e1f08debd242ef7c8192b7d478fb651355209369499a0de779ba7eb2f",
- - "version": 2,
- - "size": 42,
- - "vsize": 42,
- - "locktime": 0,
- - "vin": [
- - ],
- - "vout": [
- - {
- - "value": 1.00000000,
- - "n": 0,
- - "scriptPubKey": {
- - "asm": "OP_HASH160 a4051c02398868af83f28f083208fae99a769263 OP_EQUAL",
- - "hex": "a914a4051c02398868af83f28f083208fae99a76926387",
- - "reqSigs": 1,
- - "type": "scripthash",
- - "addresses": [
- - "MNrRAu4FS5FQt4FoMX8rDTn7wj5KUunnGr"
- - ]
- - }
- - }
- - ],
- - "hex": "02000000000100e1f5050000000017a914a4051c02398868af83f28f083208fae99a7692638700000000"
- -}
Add Comment
Please, Sign In to add comment